UNPKG

rpc_ts

Version:

Remote Procedure Calls in TypeScript made simple

78 lines 3 kB
"use strict"; 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