@river-build/sdk
Version:
For more details, visit the following resources:
188 lines • 11 kB
TypeScript
import { EncryptedData, Envelope, StreamEvent, ChannelMessage, SyncStreamsResponse, PlainMessage, BlockchainTransaction_TokenTransfer } from '@river-build/proto';
import { IStreamStateView } from '../streamStateView';
import { Client, ClientOptions } from '../client';
import { ParsedEvent, StreamTimelineEvent } from '../types';
import { EntitlementsDelegate } from '@river-build/encryption';
import { ethers } from 'ethers';
import { StreamRpcClient } from '../makeStreamRpcClient';
import { SignerContext } from '../signerContext';
import { Address, LocalhostWeb3Provider, IRuleEntitlementBase, Permission, ISpaceDapp, LegacyMembershipStruct, MembershipStruct, LogicalOperationType, Operation, CreateSpaceParams, CreateLegacySpaceParams, SignerType, IRuleEntitlementV2Base, XchainConfig, UpdateRoleParams } from '@river-build/web3';
import { type TimelineEvent } from '../sync-agent/timeline/models/timeline-types';
import { RpcOptions } from '../rpcCommon';
export declare const makeTestRpcClient: (opts?: RpcOptions) => Promise<StreamRpcClient>;
export declare const makeEvent_test: (context: SignerContext, payload: PlainMessage<StreamEvent>['payload'], prevMiniblockHash?: Uint8Array) => Promise<Envelope>;
export declare const TEST_ENCRYPTED_MESSAGE_PROPS: PlainMessage<EncryptedData>;
export declare const getXchainConfigForTesting: () => XchainConfig;
export declare function erc1155CheckOp(contractName: string, tokenId: bigint, threshold: bigint): Promise<Operation>;
export declare function erc20CheckOp(contractName: string, threshold: bigint): Promise<Operation>;
export declare function mockCrossChainCheckOp(contractName: string, id: bigint): Promise<Operation>;
export declare const twoEth: bigint;
export declare const oneEth: bigint;
export declare const threeEth: bigint;
export declare const oneHalfEth: bigint;
export declare function ethBalanceCheckOp(threshold: bigint): Operation;
/**
* makeUniqueSpaceStreamId - space stream ids are derived from the contract
* in tests without entitlements there are no contracts, so we use a random id
*/
export declare const makeUniqueSpaceStreamId: () => string;
export type SignerContextWithWallet = SignerContext & {
wallet: ethers.Wallet;
};
/**
*
* @returns a random user context
* Done using a worker thread to avoid blocking the main thread
*/
export declare const makeRandomUserContext: () => Promise<SignerContextWithWallet>;
export declare const makeRandomUserAddress: () => Uint8Array;
export declare const makeUserContextFromWallet: (wallet: ethers.Wallet) => Promise<SignerContextWithWallet>;
export interface TestClient extends Client {
wallet: ethers.Wallet;
deviceId: string;
signerContext: SignerContextWithWallet;
}
export interface TestClientOpts extends ClientOptions {
context?: SignerContextWithWallet;
entitlementsDelegate?: EntitlementsDelegate;
deviceId?: string;
}
export declare const cloneTestClient: (client: TestClient) => Promise<TestClient>;
export declare const makeTestClient: (opts?: TestClientOpts) => Promise<TestClient>;
export declare function setupWalletsAndContexts(): Promise<{
alice: TestClient;
bob: TestClient;
carol: TestClient;
alicesWallet: ethers.Wallet;
bobsWallet: ethers.Wallet;
carolsWallet: ethers.Wallet;
alicesContext: SignerContext & {
wallet: ethers.Wallet;
};
bobsContext: SignerContext & {
wallet: ethers.Wallet;
};
carolsContext: SignerContext & {
wallet: ethers.Wallet;
};
aliceProvider: LocalhostWeb3Provider;
bobProvider: LocalhostWeb3Provider;
carolProvider: LocalhostWeb3Provider;
aliceSpaceDapp: ISpaceDapp;
bobSpaceDapp: ISpaceDapp;
carolSpaceDapp: ISpaceDapp;
}>;
declare class DonePromise {
promise: Promise<string>;
resolve: (value: string) => void;
reject: (reason: any) => void;
constructor();
done(): void;
wait(): Promise<string>;
expectToSucceed(): Promise<void>;
expectToFail(): Promise<void>;
run(fn: () => void): void;
runAndDone(fn: () => void): void;
}
export declare const makeDonePromise: () => DonePromise;
export declare const sendFlush: (client: StreamRpcClient) => Promise<void>;
export declare function iterableWrapper<T>(iterable: AsyncIterable<T>): AsyncGenerator<T, void, unknown>;
export declare const lastEventFiltered: <T extends (a: ParsedEvent) => any>(events: ParsedEvent[], f: T) => ReturnType<T> | undefined;
export declare function createSpaceAndDefaultChannel(client: Client, spaceDapp: ISpaceDapp, wallet: ethers.Wallet, name: string, membership: LegacyMembershipStruct | MembershipStruct): Promise<{
spaceId: string;
defaultChannelId: string;
userStreamView: IStreamStateView;
}>;
export declare const DefaultFreeAllocation = 1000;
export declare function createVersionedSpaceFromMembership(client: Client, spaceDapp: ISpaceDapp, wallet: ethers.Wallet, name: string, membership: LegacyMembershipStruct | MembershipStruct): Promise<ethers.ContractTransaction>;
export declare function createVersionedSpace(spaceDapp: ISpaceDapp, createSpaceParams: CreateSpaceParams | CreateLegacySpaceParams, signer: SignerType): Promise<ethers.ContractTransaction>;
export declare function createUserStreamAndSyncClient(client: Client, spaceDapp: ISpaceDapp, name: string, membershipInfo: LegacyMembershipStruct | MembershipStruct, wallet: ethers.Wallet): Promise<void>;
export declare function expectUserCanJoin(spaceId: string, channelId: string, name: string, client: Client, spaceDapp: ISpaceDapp, address: string, wallet: ethers.Wallet): Promise<void>;
export declare function everyoneMembershipStruct(spaceDapp: ISpaceDapp, client: Client): Promise<LegacyMembershipStruct>;
export declare function zeroPriceWithLimitedAllocationMembershipStruct(spaceDapp: ISpaceDapp, client: Client, opts: {
freeAllocation: number;
}): Promise<LegacyMembershipStruct>;
export declare function dynamicMembershipStruct(spaceDapp: ISpaceDapp, client: Client): Promise<LegacyMembershipStruct>;
export declare function fixedPriceMembershipStruct(spaceDapp: ISpaceDapp, client: Client, opts?: {
price: number;
}): Promise<LegacyMembershipStruct>;
export declare function getFreeSpacePricingSetup(spaceDapp: ISpaceDapp): Promise<{
fixedPricingModuleAddress: string;
freeAllocation: number;
price: number;
}>;
export declare function twoNftRuleData(nft1Address: string, nft2Address: string, logOpType?: LogicalOperationType.AND | LogicalOperationType.OR): IRuleEntitlementV2Base.RuleDataV2Struct;
export declare function unlinkCaller(rootSpaceDapp: ISpaceDapp, rootWallet: ethers.Wallet, caller: ethers.Wallet): Promise<void>;
export declare function unlinkWallet(rootSpaceDapp: ISpaceDapp, rootWallet: ethers.Wallet, linkedWallet: ethers.Wallet): Promise<void>;
export declare function linkWallets(rootSpaceDapp: ISpaceDapp, rootWallet: ethers.Wallet, linkedWallet: ethers.Wallet): Promise<void>;
export declare function waitFor<T>(callback: (() => T) | (() => Promise<T>), options?: {
timeoutMS: number;
}): Promise<T>;
export declare function waitForSyncStreams(syncStreams: AsyncIterable<SyncStreamsResponse>, matcher: (res: SyncStreamsResponse) => Promise<boolean>): Promise<SyncStreamsResponse>;
export declare function waitForSyncStreamsMessage(syncStreams: AsyncIterable<SyncStreamsResponse>, message: string): Promise<SyncStreamsResponse>;
export declare function getChannelMessagePayload(event?: ChannelMessage): string | undefined;
export declare function createEventDecryptedPromise(client: Client, expectedMessageText: string): Promise<string>;
export declare function isValidEthAddress(address: string): boolean;
export declare function getNftRuleData(testNftAddress: Address): IRuleEntitlementV2Base.RuleDataV2Struct;
export interface CreateRoleContext {
roleId: number | undefined;
error: Error | undefined;
}
export declare function createRole(spaceDapp: ISpaceDapp, provider: ethers.providers.Provider, spaceId: string, roleName: string, permissions: Permission[], users: string[], ruleData: IRuleEntitlementBase.RuleDataStruct | IRuleEntitlementV2Base.RuleDataV2Struct, signer: ethers.Signer): Promise<CreateRoleContext>;
export interface UpdateRoleContext {
error: Error | undefined;
}
export declare function updateRole(spaceDapp: ISpaceDapp, provider: ethers.providers.Provider, params: UpdateRoleParams, signer: ethers.Signer): Promise<UpdateRoleContext>;
export interface CreateChannelContext {
channelId: string | undefined;
error: Error | undefined;
}
export declare function createChannel(spaceDapp: ISpaceDapp, provider: ethers.providers.Provider, spaceId: string, channelName: string, roleIds: number[], signer: ethers.Signer): Promise<CreateChannelContext>;
export declare function isEncryptedData(obj: unknown): obj is EncryptedData;
export declare function createTownWithRequirements(requirements: {
everyone: boolean;
users: string[];
ruleData: IRuleEntitlementV2Base.RuleDataV2Struct;
}): Promise<{
alice: TestClient;
bob: TestClient;
carol: TestClient;
aliceSpaceDapp: ISpaceDapp;
bobSpaceDapp: ISpaceDapp;
carolSpaceDapp: ISpaceDapp;
aliceProvider: LocalhostWeb3Provider;
bobProvider: LocalhostWeb3Provider;
carolProvider: LocalhostWeb3Provider;
alicesWallet: ethers.Wallet;
bobsWallet: ethers.Wallet;
carolsWallet: ethers.Wallet;
spaceId: string;
channelId: string;
bobUserStreamView: IStreamStateView;
}>;
export declare function expectUserCannotJoinSpace(spaceId: string, client: Client, spaceDapp: ISpaceDapp, address: string): Promise<void>;
export declare function setupChannelWithCustomRole(userNames: string[], ruleData: IRuleEntitlementV2Base.RuleDataV2Struct, permissions?: Permission[]): Promise<{
alice: TestClient;
bob: TestClient;
carol: TestClient;
alicesWallet: ethers.Wallet;
bobsWallet: ethers.Wallet;
carolsWallet: ethers.Wallet;
aliceProvider: LocalhostWeb3Provider;
bobProvider: LocalhostWeb3Provider;
carolProvider: LocalhostWeb3Provider;
aliceSpaceDapp: ISpaceDapp;
bobSpaceDapp: ISpaceDapp;
carolSpaceDapp: ISpaceDapp;
spaceId: string;
defaultChannelId: string;
channelId: string | undefined;
roleId: number | undefined;
}>;
export declare function expectUserCanJoinChannel(client: Client, spaceDapp: ISpaceDapp, spaceId: string, channelId: string): Promise<void>;
export declare function expectUserCannotJoinChannel(client: Client, spaceDapp: ISpaceDapp, spaceId: string, channelId: string): Promise<void>;
export declare const findMessageByText: (events: TimelineEvent[], text: string) => TimelineEvent | undefined;
export declare function extractBlockchainTransactionTransferEvents(timeline: StreamTimelineEvent[]): BlockchainTransaction_TokenTransfer[];
export declare function extractMemberBlockchainTransactions(client: Client, channelId: string): BlockchainTransaction_TokenTransfer[];
export {};
//# sourceMappingURL=testUtils.d.ts.map