rpc-sync
TypeScript icon, indicating that this package has built-in type declarations

1.0.54 • Public • Published

rpc-sync

Server and client, type defined, Remote Procedure Call.

Client Installation

First install rpc-sync globally

npm install -g rpc-sync

Create rpc.json

First create a rpc.json file in the root of your project:

{
    "url": "http://api.example.com/api",
    "secret: null
    "target": "ReactTypeScript",
    "output": "src/rcpClient.ts",
    "namespace": "rcpClient",
}

url

Replace the url parameter value with the URL of your remote API server.

secret

If your API server requires a secret in order to obtain the schema/documentation supply the secret in this parameter

target

Targets include:

  • ReactTypeScript
  • TypeScript
  • Dart
  • VisualBasic

output

The output source file generated by rpc-sync.

namespace

The namespace/class for the generated source files.

Sync project RPC references

Run the following command from your project root. You can re-run this command to update any API reference changes.

rpc-sync

or

rpc-sync rpc.json

Server Installation

Create a Node Typescript with Express project, then install the following package:

npm install rpc-sync

Now using the example below setup an express API using rpc-sync:

import express from "express";
import path from "path";
import rpcSync from "rpc-sync";
import HelloWorldAPI from "src/api/helloWorldAPI"

export interface IContext {
    req: express.Request;
    res: express.Response;
}

const port = 3000;
const app = express();

app.listen(port, () => {
    console.log("Listening on port:", port);

rpcSync.server.buildAPI({
        srcPath: path.join(process.cwd(), "/src"),
        apiPath: path.join(process.cwd(), "/src/api"),
        entityPath: path.join(process.cwd(), "/src/entity"),
        schemaOutputPath: path.join(process.cwd(), "schema.json"),
        enableDocs: true,
        enableClientSchema: true,
        minClientVersion: "0.1",
        debug: true,
    }).then((build)=>{
            rpcSync.server.exposeExpressAPI(build, app, (request) => {
                // This occurs on every web request.
                // Build a context object.. this can be anything. It will be sent to the API method as the first parameter.
                const context: IContext = {
                    req: request.req,
                    res: request.res
                };

                //Here is a good place to setup the database connection, apply authentication etc.
                //Expose the APIs to the request
                request.expose(context, {
                    "helloWorld": HelloWorldAPI
                });
            }).catch((e) => {
                console.error(e);
            });
    }).catch((e)=>{
            console.error(e)
    });
});
// src/api/helloWorldAPI.ts
interface IHelloWorldParameters {
    myTestValue: string;
}
interface IHelloWorldResult {
    myResult: string;
}
export class HelloWorldAPI {
    static async helloWorld(context: IContext, parameters: IHelloWorldParameters): Promise<IHelloWorldResult> {
        return new Promise<IHelloWorldResult>((accept, reject) => {
            accept({
                myResult: `Hello ${parameters.myTestValue}!`
            });
        });
    }
}
// src/entity

You can leave this directory empty.

Readme

Keywords

none

Package Sidebar

Install

npm i rpc-sync

Weekly Downloads

111

Version

1.0.54

License

ISC

Unpacked Size

228 kB

Total Files

67

Last publish

Collaborators

  • snookdawg