Skip to content

hashelq/rpc-ts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rpc-with-types

An experimental library that implements a bidirectional Method+Event protocol for your homogenous Typescript code.

Here is a short example how it works:

// { server, client }

// Define a Method and an Event
const FindUser = Method.new("GetUser", t.string, t.type({ name: t.string, age: t.number }));
const NewUser = Event.new("NewUser", t.string);

// Implement a Method on the Server
server.onMethod(FindUser, name => { name: "Alice", age: 80000 });
server.onEvent(NewUser, name => console.log(`New user: ${name}`));

// Call it from the Client
const { name, age } = await (new FindUser("Alice").with(client));
new NewUser("Hashelq").with(client)

What is interesting, that everything you have just seen can also be used backwards!

client.onMethod(FindUser, name => { name: "???", age: -1 });
client.onEvent(NewUser, name => console.log(`New user: ${name}`));

const { name, age } = await (new FindUser("Alice").withs(server, server.clients[0]));
new NewUser("HashElq").withs(client, server.clients[0]);

Too complicated

src/tests.ts - is a great source of finding ways to create a websocket RPC environment.

How it works

A human readable JSON text is sent between the server and client sides.

Default protocol to use is WS. In fact you can implement any protocol you want to use with the lib.

Compatibility

rpc-with-types is tested against:

  • nodejs 20.11.0
  • bun 1.0.26

Sessions

interface Session {
  lastMessage: string
};

const server = new Server<Session>({ sessionInit: () => { lastMessage: "" } /* other params */});

server.onEvent(..., (message: string, { _socket, session } => {
  session.lastMessage = message;
}))

Links to understand how to deal with it

About

typescript rpc

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published