From f23bbf2fca6c2936bd428e4fd1664c7e89e8a51f Mon Sep 17 00:00:00 2001 From: Juan Garcia Date: Fri, 6 Dec 2024 13:07:04 +0100 Subject: [PATCH] Implement mutations for app --- packages/client/src/actions/app.ts | 347 +++++++++++++++++++++++++- packages/graphql/src/app.ts | 380 ++++++++++++++++++++++++++++- 2 files changed, 722 insertions(+), 5 deletions(-) diff --git a/packages/client/src/actions/app.ts b/packages/client/src/actions/app.ts index 7603024b6..d173ecad7 100644 --- a/packages/client/src/actions/app.ts +++ b/packages/client/src/actions/app.ts @@ -1,10 +1,56 @@ -import type { App } from '@lens-protocol/graphql'; -import { AppQuery } from '@lens-protocol/graphql'; +import type { + AddAppFeedsRequest, + AddAppFeedsResult, + AddAppGroupsRequest, + AddAppGroupsResult, + AddAppSignersRequest, + AddAppSignersResult, + App, + AppRequest, + CreateAppRequest, + CreateAppResult, + RemoveAppFeedsRequest, + RemoveAppFeedsResult, + RemoveAppGroupsRequest, + RemoveAppGroupsResult, + RemoveAppSignersRequest, + RemoveAppSignersResult, + SetAppGraphRequest, + SetAppGraphResult, + SetAppMetadataRequest, + SetAppMetadataResult, + SetAppSponsorshipRequest, + SetAppSponsorshipResult, + SetAppTreasuryRequest, + SetAppTreasuryResult, + SetAppUsernameNamespaceRequest, + SetAppUsernameNamespaceResult, + SetAppVerificationRequest, + SetAppVerificationResult, + SetDefaultAppFeedRequest, + SetDefaultAppFeedResult, +} from '@lens-protocol/graphql'; +import { + AddAppFeedsMutation, + AddAppGroupsMutation, + AddAppSignersMutation, + AppQuery, + CreateAppMutation, + RemoveAppFeedsMutation, + RemoveAppGroupsMutation, + RemoveAppSignersMutation, + SetAppGraphMutation, + SetAppMetadataMutation, + SetAppSponsorshipMutation, + SetAppTreasuryMutation, + SetAppUsernameNamespaceMutation, + SetAppVerificationMutation, + SetDefaultAppFeedMutation, +} from '@lens-protocol/graphql'; import type { ResultAsync } from '@lens-protocol/types'; -import type { AppRequest } from '@lens-protocol/graphql'; import type { AnyClient, SessionClient } from '../clients'; -import type { UnexpectedError } from '../errors'; +import type { UnauthenticatedError, UnexpectedError } from '../errors'; /** * Fetch an App. @@ -27,3 +73,296 @@ export function fetchApp( ): ResultAsync { return client.query(AppQuery, { request }); } + +/** + * Create an App + * + * ```ts + * const result = await createApp(sessionClient, { + * verification: true + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function createApp( + client: SessionClient, + request: CreateAppRequest, +): ResultAsync { + return client.mutation(CreateAppMutation, { request }); +} + +/** + * Add feeds to an App + * + * ```ts + * const result = await addAppFeeds(sessionClient, { + * feeds: [evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5')], + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function addAppFeeds( + client: SessionClient, + request: AddAppFeedsRequest, +): ResultAsync { + return client.mutation(AddAppFeedsMutation, { request }); +} + +/** + * Add groups to an App + * + * ```ts + * const result = await addAppGroups(sessionClient, { + * groups: [evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5')], + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function addAppGroups( + client: SessionClient, + request: AddAppGroupsRequest, +): ResultAsync { + return client.mutation(AddAppGroupsMutation, { request }); +} + +/** + * Add signers to an App + * + * ```ts + * const result = await addAppSigners(sessionClient, { + * signers: [evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5')], + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function addAppSigners( + client: SessionClient, + request: AddAppSignersRequest, +): ResultAsync { + return client.mutation(AddAppSignersMutation, { request }); +} + +/** + * Remove feeds from an App + * + * ```ts + * const result = await removeAppFeeds(sessionClient, { + * feeds: [evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5')], + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function removeAppFeeds( + client: SessionClient, + request: RemoveAppFeedsRequest, +): ResultAsync { + return client.mutation(RemoveAppFeedsMutation, { request }); +} + +/** + * Remove groups from an App + * + * ```ts + * const result = await removeAppGroups(sessionClient, { + * groups: [evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5')], + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function removeAppGroups( + client: SessionClient, + request: RemoveAppGroupsRequest, +): ResultAsync { + return client.mutation(RemoveAppGroupsMutation, { request }); +} + +/** + * Remove signers from an App + * + * ```ts + * const result = await removeAppSigners(sessionClient, { + * signers: [evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5')], + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function removeAppSigners( + client: SessionClient, + request: RemoveAppSignersRequest, +): ResultAsync { + return client.mutation(RemoveAppSignersMutation, { request }); +} + +/** + * Set app Graph + * + * ```ts + * const result = await setAppGraph(sessionClient, { + * graph: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function setAppGraph( + client: SessionClient, + request: SetAppGraphRequest, +): ResultAsync { + return client.mutation(SetAppGraphMutation, { request }); +} + +/** + * Set default Feed for app + * + * ```ts + * const result = await setDefaultAppFeed(sessionClient, { + * feed: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function setDefaultAppFeed( + client: SessionClient, + request: SetDefaultAppFeedRequest, +): ResultAsync { + return client.mutation(SetDefaultAppFeedMutation, { request }); +} + +/** + * Set metadata for app + * + * ```ts + * const result = await setAppMetadata(sessionClient, { + * metadataUri: 'https://example.com/metadata.json', + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function setAppMetadata( + client: SessionClient, + request: SetAppMetadataRequest, +): ResultAsync { + return client.mutation(SetAppMetadataMutation, { request }); +} + +/** + * Set verification status for app + * + * ```ts + * const result = await setAppVerification(sessionClient, { + * enabled: true, + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function setAppVerification( + client: SessionClient, + request: SetAppVerificationRequest, +): ResultAsync { + return client.mutation(SetAppVerificationMutation, { request }); +} + +/** + * Set sponsorship for app + * + * ```ts + * const result = await setAppSponsorship(sessionClient, { + * sponsorship: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function setAppSponsorship( + client: SessionClient, + request: SetAppSponsorshipRequest, +): ResultAsync { + return client.mutation(SetAppSponsorshipMutation, { request }); +} + +/** + * Set treasury for app + * + * ```ts + * const result = await setAppTreasury(sessionClient, { + * treasury: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function setAppTreasury( + client: SessionClient, + request: SetAppTreasuryRequest, +): ResultAsync { + return client.mutation(SetAppTreasuryMutation, { request }); +} + +/** + * Set username namespace for app + * + * ```ts + * const result = await setAppUsernameNamespace(sessionClient, { + * usernameNamespace: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * app: evmAddress('0xe2f2a5C287993345a840db3B0845fbc70f5935a5'), + * }); + * ``` + * + * @param client - The session client logged as a builder. + * @param request - The mutation request. + * @returns Tiered transaction result. + */ +export function setAppUsernameNamespace( + client: SessionClient, + request: SetAppUsernameNamespaceRequest, +): ResultAsync { + return client.mutation(SetAppUsernameNamespaceMutation, { request }); +} diff --git a/packages/graphql/src/app.ts b/packages/graphql/src/app.ts index 65600fdf4..126ce4df2 100644 --- a/packages/graphql/src/app.ts +++ b/packages/graphql/src/app.ts @@ -1,4 +1,10 @@ -import { App } from './fragments'; +import type { FragmentOf } from 'gql.tada'; +import { + App, + SelfFundedTransactionRequest, + SponsoredTransactionRequest, + TransactionWillFail, +} from './fragments'; import { type RequestOf, graphql } from './graphql'; export const AppQuery = graphql( @@ -10,3 +16,375 @@ export const AppQuery = graphql( [App], ); export type AppRequest = RequestOf; + +const CreateAppResponse = graphql( + `fragment CreateAppResponse on CreateAppResponse { + __typename + hash + }`, +); +export type CreateAppResponse = FragmentOf; + +const CreateAppResult = graphql( + `fragment CreateAppResult on CreateAppResult { + ...on CreateAppResponse { + ...CreateAppResponse + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [CreateAppResponse, SelfFundedTransactionRequest, TransactionWillFail], +); +export type CreateAppResult = FragmentOf; + +export const CreateAppMutation = graphql( + `mutation CreateApp($request: CreateAppRequest!) { + value: createApp(request: $request) { + ...CreateAppResult + } + }`, + [CreateAppResult], +); +export type CreateAppRequest = RequestOf; + +const AddAppFeedsResult = graphql( + `fragment AddAppFeedsResult on AddAppFeedsResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type AddAppFeedsResult = FragmentOf; + +export const AddAppFeedsMutation = graphql( + `mutation AddAppFeeds($request: AddAppFeedsRequest!) { + value: addAppFeeds(request: $request) { + ...AddAppFeedsResult + } + }`, + [AddAppFeedsResult], +); +export type AddAppFeedsRequest = RequestOf; + +const AddAppGroupsResult = graphql( + `fragment AddAppGroupsResult on AddAppGroupsResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type AddAppGroupsResult = FragmentOf; + +export const AddAppGroupsMutation = graphql( + `mutation AddAppGroups($request: AddAppGroupsRequest!) { + value: addAppGroups(request: $request) { + ...AddAppGroupsResult + } + }`, + [AddAppGroupsResult], +); +export type AddAppGroupsRequest = RequestOf; + +const AddAppSignersResult = graphql( + `fragment AddAppSignersResult on AddAppSignersResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type AddAppSignersResult = FragmentOf; + +export const AddAppSignersMutation = graphql( + `mutation AddAppSigners($request: AddAppSignersRequest!) { + value: addAppSigners(request: $request) { + ...AddAppSignersResult + } + }`, + [AddAppSignersResult], +); +export type AddAppSignersRequest = RequestOf; + +const RemoveAppFeedsResult = graphql( + `fragment RemoveAppFeedsResult on RemoveAppFeedsResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type RemoveAppFeedsResult = FragmentOf; + +export const RemoveAppFeedsMutation = graphql( + `mutation RemoveAppFeeds($request: RemoveAppFeedsRequest!) { + value: removeAppFeeds(request: $request) { + ...RemoveAppFeedsResult + } + }`, + [RemoveAppFeedsResult], +); +export type RemoveAppFeedsRequest = RequestOf; + +const RemoveAppGroupsResult = graphql( + `fragment RemoveAppGroupsResult on RemoveAppGroupsResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type RemoveAppGroupsResult = FragmentOf; + +export const RemoveAppGroupsMutation = graphql( + `mutation RemoveAppGroups($request: RemoveAppGroupsRequest!) { + value: removeAppGroups(request: $request) { + ...RemoveAppGroupsResult + } + }`, + [RemoveAppGroupsResult], +); +export type RemoveAppGroupsRequest = RequestOf; + +const RemoveAppSignersResult = graphql( + `fragment RemoveAppSignersResult on RemoveAppSignersResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type RemoveAppSignersResult = FragmentOf; + +export const RemoveAppSignersMutation = graphql( + `mutation RemoveAppSigners($request: RemoveAppSignersRequest!) { + value: removeAppSigners(request: $request) { + ...RemoveAppSignersResult + } + }`, + [RemoveAppSignersResult], +); +export type RemoveAppSignersRequest = RequestOf; + +const SetAppGraphResult = graphql( + `fragment SetAppGraphResult on SetAppGraphResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type SetAppGraphResult = FragmentOf; + +export const SetAppGraphMutation = graphql( + `mutation SetAppGraph($request: SetAppGraphRequest!) { + value: setAppGraph(request: $request) { + ...SetAppGraphResult + } + }`, + [SetAppGraphResult], +); +export type SetAppGraphRequest = RequestOf; + +const SetDefaultAppFeedResult = graphql( + `fragment SetDefaultAppFeedResult on SetDefaultAppFeedResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type SetDefaultAppFeedResult = FragmentOf; + +export const SetDefaultAppFeedMutation = graphql( + `mutation SetDefaultAppFeed($request: SetDefaultAppFeedRequest!) { + value: setDefaultAppFeed(request: $request) { + ...SetDefaultAppFeedResult + } + }`, + [SetDefaultAppFeedResult], +); +export type SetDefaultAppFeedRequest = RequestOf; + +const SetAppMetadataResult = graphql( + `fragment SetAppMetadataResult on SetAppMetadataResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type SetAppMetadataResult = FragmentOf; + +export const SetAppMetadataMutation = graphql( + `mutation SetAppMetadata($request: SetAppMetadataRequest!) { + value: setAppMetadata(request: $request) { + ...SetAppMetadataResult + } + }`, + [SetAppMetadataResult], +); +export type SetAppMetadataRequest = RequestOf; + +const SetAppVerificationResult = graphql( + `fragment SetAppVerificationResult on SetAppVerificationResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type SetAppVerificationResult = FragmentOf; + +export const SetAppVerificationMutation = graphql( + `mutation SetAppVerification($request: SetAppVerificationRequest!) { + value: setAppVerification(request: $request) { + ...SetAppVerificationResult + } + }`, + [SetAppVerificationResult], +); +export type SetAppVerificationRequest = RequestOf; + +const SetAppSponsorshipResult = graphql( + `fragment SetAppSponsorshipResult on SetAppSponsorshipResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type SetAppSponsorshipResult = FragmentOf; + +export const SetAppSponsorshipMutation = graphql( + `mutation SetAppSponsorship($request: SetAppSponsorshipRequest!) { + value: setAppSponsorship(request: $request) { + ...SetAppSponsorshipResult + } + }`, + [SetAppSponsorshipResult], +); +export type SetAppSponsorshipRequest = RequestOf; + +const SetAppTreasuryResult = graphql( + `fragment SetAppTreasuryResult on SetAppTreasuryResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type SetAppTreasuryResult = FragmentOf; + +export const SetAppTreasuryMutation = graphql( + `mutation SetAppTreasury($request: SetAppTreasuryRequest!) { + value: setAppTreasury(request: $request) { + ...SetAppTreasuryResult + } + }`, + [SetAppTreasuryResult], +); +export type SetAppTreasuryRequest = RequestOf; + +const SetAppUsernameNamespaceResult = graphql( + `fragment SetAppUsernameNamespaceResult on SetAppUsernameNamespaceResult { + ...on SponsoredTransactionRequest { + ...SponsoredTransactionRequest + } + ...on SelfFundedTransactionRequest { + ...SelfFundedTransactionRequest + } + ...on TransactionWillFail { + ...TransactionWillFail + } + }`, + [SponsoredTransactionRequest, SelfFundedTransactionRequest, TransactionWillFail], +); +export type SetAppUsernameNamespaceResult = FragmentOf; + +export const SetAppUsernameNamespaceMutation = graphql( + `mutation SetAppUsernameNamespace($request: SetAppUsernameNamespaceRequest!) { + value: setAppUsernameNamespace(request: $request) { + ...SetAppUsernameNamespaceResult + } + }`, + [SetAppUsernameNamespaceResult], +); +export type SetAppUsernameNamespaceRequest = RequestOf;