Skip to content

Commit

Permalink
feat(experimental): add rootNotifications websocket method (#1646)
Browse files Browse the repository at this point in the history
* fix: broken timestamp test

* refactor(experimental): change u64 types to slot in slot notifications

* feat(experimental): add `slotsUpdatesNotifications` websocket method

* feat(experimental): add `slotsUpdatesNotifications` websocket method

* feat(experimental): add `rootNotifications` websocket method
  • Loading branch information
buffalojoec committed Oct 6, 2023
1 parent 5789147 commit 064cdc3
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
describe('rootNotifications', () => {
// TODO: A change in root takes too long to occur in order for our tests to pass.
it.todo('produces root notifications');
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/* eslint-disable @typescript-eslint/ban-ts-comment */

import { PendingRpcSubscription, RpcSubscriptions } from '@solana/rpc-transport/dist/types/json-rpc-types';

import { Slot } from '../../rpc-methods/common';
import { RootNotificationsApi } from '../root-notifications';

async () => {
const rpcSubscriptions = null as unknown as RpcSubscriptions<RootNotificationsApi>;

type TNotification = Slot;
rpcSubscriptions.rootNotifications() satisfies PendingRpcSubscription<TNotification>;
rpcSubscriptions.rootNotifications().subscribe({ abortSignal: new AbortController().signal }) satisfies Promise<
AsyncIterable<TNotification>
>;

// @ts-expect-error Takes no params.
rpcSubscriptions.rootNotifications({ commitment: 'finalized' });
};
3 changes: 2 additions & 1 deletion packages/rpc-core/src/rpc-subscriptions/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ import { IRpcSubscriptionsApi, RpcSubscription } from '@solana/rpc-transport/dis

import { patchParamsForSolanaLabsRpc } from '../params-patcher';
import { patchResponseForSolanaLabsRpcSubscriptions } from '../response-patcher';
import { RootNotificationsApi } from './root-notifications';
import { SlotNotificationsApi } from './slot-notifications';
import { SlotsUpdatesNotificationsApi } from './slots-updates-notifications';

type Config = Readonly<{
onIntegerOverflow?: (methodName: string, keyPath: (number | string)[], value: bigint) => void;
}>;

export type SolanaRpcSubscriptions = SlotNotificationsApi;
export type SolanaRpcSubscriptions = RootNotificationsApi & SlotNotificationsApi;
export type SolanaRpcSubscriptionsUnstable = SlotsUpdatesNotificationsApi;

export function createSolanaRpcSubscriptionsApi(
Expand Down
13 changes: 13 additions & 0 deletions packages/rpc-core/src/rpc-subscriptions/root-notifications.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { Slot } from '../rpc-methods/common';

type RootNotificationsApiNotification = Slot;

export interface RootNotificationsApi {
/**
* Subscribe to receive notification anytime a new root is set by the validator
*/
rootNotifications(
// FIXME: https://github.com/solana-labs/solana-web3.js/issues/1389
NO_CONFIG?: Record<string, never>
): RootNotificationsApiNotification;
}

0 comments on commit 064cdc3

Please sign in to comment.