Sage SDK
  • Getting Started
    • Installation
    • Frontend
    • Server
    • Error Handling
  • Channel
    • Create
    • Membership
    • Moderation
  • Post
  • Update
  • Invite
    • Creation
    • Deletion
  • Post
    • Comment
    • Like
  • User
    • Create
    • Membership
    • Post
    • Update
Powered by GitBook
On this page
  • Follow a Sage user
  • Error Codes
  • Unfollow a Sage user
  • Error Codes
  • Querying for User Membership Events
  1. User

Membership

PreviousCreateNextPost

Last updated 2 months ago

Following a user will only succeed for a Sui address that has Unfollowing will only succeed for

Follow a Sage user

import { useSignAndExecuteTransaction } from '@mysten/dapp-kit';
import { useUser } from '@sage-app/sdk/react';

interface JoinUserInput {
  amounts: number[];           // payment amounts set to [0, 0]
  self: string;                // user's wallet address
  soulId: string;              // address of user's owned soul
  userId: string;              // user's object id
}

...

const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction();
const { join } = useUser();

...

const followUser = async (data: JoinUserInput) => {
  const { ok, err, transaction } = join(data);
    
  const { digest } = await signAndExecuteTransaction({
    transaction
  });
};

Error Codes

Authentication module

Code
Value
Meaning

370

ENotAuthenticated

User soul object does not exist, is the wrong type, or not owned by the wallet.

User Fees module

Code
Value
Meaning

370

EIncorrectCoinType

Custom payment type does not match configured custom payment coin.

371

EIncorrectCustomPayment

Incorrect custom payment value.

372

EIncorrectSuiPayment

Incorrect sui payment value.

Unfollow a Sage user

import { useSignAndExecuteTransaction } from '@mysten/dapp-kit';
import { useUser } from '@sage-app/sdk/react';

interface LeaveUserInput {
  amounts: number[];           // payment amounts set to [0, 0]
  self: string;                // user's wallet address
  userId: string;              // user's object id
}

...

const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction();
const { leave } = useUser();

...

const unfollowUser = async (data: LeaveUserInput) => {
  const { ok, err, transaction } = leave(data);
    
  const { digest } = await signAndExecuteTransaction({
    transaction
  });
};

Error Codes

User Fees module

Code
Value
Meaning

370

EIncorrectCoinType

Custom payment type does not match configured custom payment coin.

371

EIncorrectCustomPayment

Incorrect custom payment value.

372

EIncorrectSuiPayment

Incorrect sui payment value.

Querying for User Membership Events

import { EventId, SuiClient, getFullnodeUrl } from '@mysten/sui/client';
import { SageClient } from '@sage-app/sdk/client';

...

interface QueryInput {
  cursor?: EventId;
}

const appId = '<YOUR_APP_ID>';
const network = 'mainnet' | 'testnet';
const suiClient = new SuiClient({ url: getFullnodeUrl(network) });

const sageClient = new SageClient({ appId, network, suiClient });

...

const pollUserMembershipChanges = async ({ cursor }) => {
  const {
    eventCount,
    events,
    hasNextPage,
    nextCursor
  } = await sageClient.queryUserMembershipEvents({ cursor }: QueryInput);
  
  // do something with events
  
  setTimeout(() => pollUserMembershipChanges({ cursor: nextCursor }), 5000);
};

In this case events will take the shape of an array of UserMembershipEvent:

interface UserMemberEvent {
  accountType: "OBJECT" | "WALLET";
  followedUser: string;               // followed user's wallet address
  message: "JOIN" | "LEAVE";
  updatedAt: string;
  user: string;                       // user's wallet address
}  
an associated Sage user.