rpc_ts
Version:
Remote Procedure Calls in TypeScript made simple
78 lines • 3 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @license
* Copyright (c) Aiden.ai
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const express = require("express");
const grpc_web_node_http_transport_1 = require("@improbable-eng/grpc-web-node-http-transport");
const service_1 = require("./service");
const handler_1 = require("./handler");
const auth_context_1 = require("./auth_context");
const http = require("http");
const server_1 = require("../../protocol/server");
const client_1 = require("../../protocol/client");
main().catch(
/* istanbul ignore next */
err => {
console.error(err);
process.exit(1);
});
async function main() {
// We launch an Express server, register the RPC routes using the
// `http_json` protocol, initialize an `grpc_web` client connected to this server
// and perform some remote procedure calls.
//
// The context comes from a mock "authentication" connector.
const server = setupServer();
try {
await clientInteraction(`http://127.0.0.1:${server.address().port}/api`);
}
finally {
server.close();
}
}
function setupServer() {
const app = express();
app.use('/api', server_1.ModuleRpcProtocolServer.registerRpcRoutes(service_1.bankingServiceDefinition, handler_1.getBankingHandler(), {
serverContextConnector: new auth_context_1.AuthServerContextConnector('u1'),
}));
const server = http.createServer(app).listen();
const port = server.address().port;
app.set('port', port);
return server;
}
async function clientInteraction(remoteAddress) {
const client = client_1.ModuleRpcProtocolClient.getRpcClient(service_1.bankingServiceDefinition, {
remoteAddress,
clientContextConnector: new auth_context_1.AuthClientContextConnector('u1'),
getGrpcWebTransport: grpc_web_node_http_transport_1.NodeHttpTransport(),
});
const balanceResponseBefore = await client.getBalance({});
console.log('Balance is', balanceResponseBefore.value);
console.log('Transfering...');
await client.transfer({
toUserId: 'u2',
amount: balanceResponseBefore.value / 2,
});
const balanceResponseAfter = await client.getBalance({});
console.log('Now balance is', balanceResponseAfter.value);
// If the user is not expected, an unauthenticated error is thrown
{
const unauthenticatedClient = client_1.ModuleRpcProtocolClient.getRpcClient(service_1.bankingServiceDefinition, {
remoteAddress,
clientContextConnector: new auth_context_1.AuthClientContextConnector('u2'),
getGrpcWebTransport: grpc_web_node_http_transport_1.NodeHttpTransport(),
});
try {
await unauthenticatedClient.getBalance({});
}
catch (err) {
console.log('Expected error', err);
}
}
}
//# sourceMappingURL=index.js.map
;