Socket
Socket
Sign inDemoInstall

protocat

Package Overview
Dependencies
118
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.5.2 to 0.6.0

2

dist/lib/server/application.d.ts

@@ -7,3 +7,3 @@ import * as grpc from '@grpc/grpc-js';

*/
export declare class ProtoCat<Extension = {}> {
export declare class ProtoCat<Extension = unknown> {
/** Underlying gRPC server */

@@ -10,0 +10,0 @@ server: grpc.Server;

@@ -8,2 +8,3 @@ "use strict";

const compose_middleware_1 = require("./middleware/compose-middleware");
const on_error_1 = require("./middleware/on-error");
/**

@@ -34,3 +35,3 @@ * The main ProtoCat server application class

this.serviceHandlers[key] = (this.serviceHandlers[key] || []).concat(
// @ts-ignore
// @ts-expect-error
serviceImplementation[methodName]);

@@ -96,3 +97,3 @@ }

const call = createContext(grpcCall);
// @ts-ignore: Not part of public API, but only way to pair message to method
// @ts-expect-error: Not part of public API, but only way to pair message to method
call.response = new methodDefinition.responseType();

@@ -109,6 +110,6 @@ try {

if (cb) {
cb(e, null, call.trailingMetadata);
cb(on_error_1.addMeta(e, call), null, call.trailingMetadata);
}
else {
grpcCall.emit('error', e);
grpcCall.emit('error', on_error_1.addMeta(e, call));
}

@@ -115,0 +116,0 @@ }

@@ -10,3 +10,3 @@ /// <reference types="node" />

*/
export declare type ProtoCatCall<Extension = {}, Req = Message, Res = Message, Type extends CallType = CallType> = {
export declare type ProtoCatCall<Extension = unknown, Req = Message, Res = Message, Type extends CallType = CallType> = {
/** Client metadata */

@@ -41,5 +41,5 @@ readonly metadata: grpc.Metadata;

response: Res;
} : {}) & (Type extends CallType.ClientStream ? TypedOnData<grpc.ServerReadableStream<Req, Res>, Req> & {
} : unknown) & (Type extends CallType.ClientStream ? TypedOnData<grpc.ServerReadableStream<Req, Res>, Req> & {
response: Res;
} : {}) & (Type extends CallType.ServerStream ? grpc.ServerWritableStream<Req, Res> : {}) & (Type extends CallType.Bidi ? TypedOnData<grpc.ServerDuplexStream<Req, Res>, Req> : {});
} : unknown) & (Type extends CallType.ServerStream ? grpc.ServerWritableStream<Req, Res> : unknown) & (Type extends CallType.Bidi ? TypedOnData<grpc.ServerDuplexStream<Req, Res>, Req> : unknown);
/**

@@ -52,7 +52,7 @@ * Call stack of the subsequent middlewares and handlers.

*/
export declare type ProtoCatAnyCall<Extension = {}> = ProtoCatCall<Extension, Message, Message, CallType.Unary> | ProtoCatCall<Extension, Message, Message, CallType.ServerStream> | ProtoCatCall<Extension, Message, Message, CallType.ClientStream> | ProtoCatCall<Extension, Message, Message, CallType.Bidi>;
export declare type ProtoCatAnyCall<Extension = unknown> = ProtoCatCall<Extension, Message, Message, CallType.Unary> | ProtoCatCall<Extension, Message, Message, CallType.ServerStream> | ProtoCatCall<Extension, Message, Message, CallType.ClientStream> | ProtoCatCall<Extension, Message, Message, CallType.Bidi>;
/**
* Application generic middleware
*/
export declare type Middleware<Extension = {}> = (call: ProtoCatAnyCall<Extension>, next: NextFn) => any;
export declare type Middleware<Extension = unknown> = (call: ProtoCatAnyCall<Extension>, next: NextFn) => any;
/**

@@ -66,3 +66,3 @@ * @internal

*/
declare type MethodDef2ServiceHandler<H, Extension = {}> = H extends grpc.MethodDefinition<infer Req, infer Res> ? (call: ProtoCatCall<Extension, Req, Res, MethodDef2CallType<H>>, next: NextFn) => any : never;
declare type MethodDef2ServiceHandler<H, Extension = unknown> = H extends grpc.MethodDefinition<infer Req, infer Res> ? (call: ProtoCatCall<Extension, Req, Res, MethodDef2CallType<H>>, next: NextFn) => any : never;
/**

@@ -79,7 +79,7 @@ * Create service handler type for whole client definition.

*/
export declare type ServiceImplementation<T, Extension = {}> = RemoveIdxSgn<{
export declare type ServiceImplementation<T, Extension = unknown> = RemoveIdxSgn<{
[M in keyof T]: MethodDef2ServiceHandler<T[M], Extension>;
}>;
/** ServiceImplementation with array of middlewares */
export declare type ServiceImplementationExtended<T, Extension = {}> = {
export declare type ServiceImplementationExtended<T, Extension = unknown> = {
[M in keyof ServiceImplementation<T, Extension>]: ServiceImplementation<T, Extension>[M] | Array<ServiceImplementation<T, Extension>[M]>;

@@ -86,0 +86,0 @@ };

@@ -5,3 +5,3 @@ /// <reference types="node" />

import { Message } from 'google-protobuf';
export interface CacheImplementation<E = {}> {
export interface CacheImplementation<E = unknown> {
/**

@@ -18,3 +18,3 @@ * Create a unique cache key that will be used for response save and lookup.

}
export declare const createCache: <E = {}>(cache: CacheImplementation<E>, cb?: ((call: ProtoCatCall<E, Message, Message, CallType.Unary>, hit: boolean, hash: string) => any) | undefined) => Middleware<E>;
export declare const createCache: <E = unknown>(cache: CacheImplementation<E>, cb?: ((call: ProtoCatCall<E, Message, Message, CallType.Unary>, hit: boolean, hash: string) => any) | undefined) => Middleware<E>;
//# sourceMappingURL=cache.d.ts.map
import { Middleware, ProtoCatAnyCall } from '../call';
declare type ErrorHandler = (error: Error, call: ProtoCatAnyCall) => any;
export declare const addMeta: (e: any, call: ProtoCatAnyCall) => any;
/**

@@ -4,0 +5,0 @@ * onError creates a ProtoCat middleware that can be used to intercept errors from various origins, either from:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.onError = void 0;
exports.onError = exports.addMeta = void 0;
const call_types_1 = require("../../call-types");
const merged = Symbol('protocat.merged');
exports.addMeta = (e, call) => {
var _a;
if (e[merged])
return e;
// Trailing metadata on error calls are taken from `error.metadata`, we pass on the existing trailing metadata
if ((_a = e === null || e === void 0 ? void 0 : e.metadata) === null || _a === void 0 ? void 0 : _a.merge) {
e.metadata.merge(call.trailingMetadata);
}
else {
e.metadata = call.trailingMetadata;
}
e[merged] = true;
return e;
};
/**

@@ -14,8 +29,2 @@ * Patches emit function to intercept errors with a handler to be able to consume or map dispatched errors on stream, before existing listeners are invoked.

const originalEmit = emitter.emit;
const addMeta = (e) => {
// Trailing metadata on error calls are taken from `error.metadata`, we pass on the existing trailing metadata
// TODO: At this point existing metadata on error is lost
e.metadata = emitter.trailingMetadata;
return e;
};
emitter.emit = async (...args) => {

@@ -30,3 +39,4 @@ if (args[0] !== 'error') {

emitter.flushInitialMetadata();
originalEmit.apply(emitter, ['error', addMeta(e)]);
exports.addMeta(e, emitter);
originalEmit.apply(emitter, ['error', e]);
}

@@ -33,0 +43,0 @@ };

@@ -20,3 +20,3 @@ // package: cats.v1

interface ICatService_IGetCat extends grpc.MethodDefinition<v1_cat_pb.GetCatRequest, type_cat_pb.Cat> {
path: string; // "/cats.v1.Cat/GetCat"
path: "/cats.v1.Cat/GetCat";
requestStream: false;

@@ -30,3 +30,3 @@ responseStream: false;

interface ICatService_IWatchCats extends grpc.MethodDefinition<v1_cat_pb.WatchCatsRequest, type_cat_pb.Cat> {
path: string; // "/cats.v1.Cat/WatchCats"
path: "/cats.v1.Cat/WatchCats";
requestStream: false;

@@ -40,3 +40,3 @@ responseStream: true;

interface ICatService_IShareLocation extends grpc.MethodDefinition<v1_cat_pb.ShareLocationRequest, v1_cat_pb.ShareLocationResponse> {
path: string; // "/cats.v1.Cat/ShareLocation"
path: "/cats.v1.Cat/ShareLocation";
requestStream: true;

@@ -50,3 +50,3 @@ responseStream: false;

interface ICatService_IFeedCats extends grpc.MethodDefinition<v1_cat_pb.FeedCatsRequest, type_cat_pb.Cat> {
path: string; // "/cats.v1.Cat/FeedCats"
path: "/cats.v1.Cat/FeedCats";
requestStream: true;

@@ -53,0 +53,0 @@ responseStream: true;

@@ -19,3 +19,3 @@ // package: cats.v1

interface IGreetingService_IUnary extends grpc.MethodDefinition<v1_hello_pb.Hello, v1_hello_pb.Hello> {
path: string; // "/cats.v1.Greeting/Unary"
path: "/cats.v1.Greeting/Unary";
requestStream: false;

@@ -29,3 +29,3 @@ responseStream: false;

interface IGreetingService_IServerStream extends grpc.MethodDefinition<v1_hello_pb.Hello, v1_hello_pb.Hello> {
path: string; // "/cats.v1.Greeting/ServerStream"
path: "/cats.v1.Greeting/ServerStream";
requestStream: false;

@@ -39,3 +39,3 @@ responseStream: true;

interface IGreetingService_IClientStream extends grpc.MethodDefinition<v1_hello_pb.Hello, v1_hello_pb.Hello> {
path: string; // "/cats.v1.Greeting/ClientStream"
path: "/cats.v1.Greeting/ClientStream";
requestStream: true;

@@ -49,3 +49,3 @@ responseStream: false;

interface IGreetingService_IBidi extends grpc.MethodDefinition<v1_hello_pb.Hello, v1_hello_pb.Hello> {
path: string; // "/cats.v1.Greeting/Bidi"
path: "/cats.v1.Greeting/Bidi";
requestStream: true;

@@ -52,0 +52,0 @@ responseStream: true;

@@ -7,2 +7,7 @@ "use strict";

const hello_pb_1 = require("../../../../dist/test/api/v1/hello_pb");
const createError = (x) => {
const metadata = new grpc_js_1.Metadata();
metadata.set('_', x);
return Object.assign(new Error(x), { metadata });
};
const ADDR = '0.0.0.0:3000';

@@ -16,10 +21,10 @@ describe('Error handling', () => {

unary: call => {
throw new Error('unary-error');
throw createError('unary-error');
},
serverStream: call => {
if (call.metadata.getMap().type === 'sync') {
throw new Error('serverStream-sync-error');
throw createError('serverStream-sync-error');
}
else {
call.emit('error', new Error('serverStream-stream-error'));
call.emit('error', createError('serverStream-stream-error'));
}

@@ -29,6 +34,6 @@ },

if (call.meta.type === 'sync') {
throw new Error('clientStream-sync-error');
throw createError('clientStream-sync-error');
}
else {
call.emit('error', new Error('clientStream-stream-error'));
call.emit('error', createError('clientStream-stream-error'));
}

@@ -38,6 +43,6 @@ },

if (call.meta.type === 'sync') {
throw new Error('bidi-sync-error');
throw createError('bidi-sync-error');
}
else {
call.emit('error', new Error('bidi-stream-error'));
call.emit('error', createError('bidi-stream-error'));
}

@@ -100,2 +105,5 @@ },

});
test('Trailing (status) metadata - error', async () => {
expect((await status).metadata.getMap()._).toBe('unary-error');
});
test('Initial metadata', async () => {

@@ -147,2 +155,5 @@ expect((await metadata).getMap().initial).toEqual('unary');

});
test('Trailing (status) metadata - error', async () => {
expect((await status).metadata.getMap()._).toBe(`serverStream-${type}-error`);
});
test('Initial metadata', async () => {

@@ -192,2 +203,5 @@ expect((await metadata).getMap().initial).toEqual('serverStream');

});
test('Trailing (status) metadata - error', async () => {
expect((await status).metadata.getMap()._).toBe(`clientStream-${type}-error`);
});
test('Initial metadata', async () => {

@@ -240,2 +254,5 @@ expect((await metadata).getMap().initial).toEqual('clientStream');

});
test('Trailing (status) metadata - error', async () => {
expect((await status).metadata.getMap()._).toBe(`bidi-${type}-error`);
});
test('Initial metadata', async () => {

@@ -242,0 +259,0 @@ expect((await metadata).getMap().initial).toEqual('bidi');

{
"name": "protocat",
"description": "Modern, minimalist type-safe gRPC framework for Node.js",
"version": "0.5.2",
"version": "0.6.0",
"author": "Jaroslav Šmolík <grissius@gmail.com>",

@@ -21,3 +21,3 @@ "main": "./dist/index.js",

],
"homepage": "https://grissius.github.io/protocat/",
"homepage": "https://proto.cat",
"scripts": {

@@ -43,22 +43,22 @@ "build": "tsc",

"dependencies": {
"@grpc/grpc-js": "^1.1.6",
"@grpc/grpc-js": "1.1.7",
"@types/google-protobuf": "^3.7.3"
},
"devDependencies": {
"@ackee/styleguide-backend-config": "^0.1.8",
"@types/jest": "^26.0.10",
"codecov": "^3.7.2",
"@ackee/styleguide-backend-config": "^0.2.2",
"@types/jest": "^26.0.15",
"codecov": "^3.8.0",
"eclint": "^2.8.1",
"google-protobuf": "^3.13.0",
"grpc-tools": "^1.9.1",
"grpc_tools_node_protoc_ts": "^4.1.3",
"grpc_tools_node_protoc_ts": "^5.0.1",
"husky": "^4.2.5",
"jest": "^26.4.1",
"lint-staged": "^10.2.11",
"jest": "^26.6.1",
"lint-staged": "^10.4.2",
"prettier": "^2.1.2",
"ts-jest": "^26.2.0",
"typedoc": "^0.19.1",
"typedoc-plugin-markdown": "^2.4.0",
"typescript": "^4.0.2"
"ts-jest": "^26.4.2",
"typedoc": "^0.19.2",
"typedoc-plugin-markdown": "^3.0.11",
"typescript": "^4.0.3"
}
}
<div align="center">
[![](https://raw.githubusercontent.com/grissius/protocat/master/website/static/img/logo.svg)](https://grissius.github.io/protocat/)
[![](https://raw.githubusercontent.com/grissius/protocat/master/website/static/img/logo.svg)](https://proto.cat)

@@ -16,3 +16,3 @@ # ProtoCat

[![](https://flat.badgen.net/snyk/grissius/protocat)](https://snyk.io/vuln/npm:protocat)
[![](https://flat.badgen.net/badge/%F0%9F%93%91%20docs/pages/cyan)](https://grissius.github.io/protocat/)
[![](https://flat.badgen.net/badge/%F0%9F%93%91%20docs/pages/cyan)](https://proto.cat)

@@ -43,8 +43,4 @@ </div>

~~Learn more about ProtoCat in [docs](https://grissius.github.io/protocat/).~~
Learn more about ProtoCat in [docs](https://proto.cat/).
**🚧 Current docs are under maintenance**
**Until fixed, please see temporary deploy at [infallible-noether-964b1e.netlify.app](https://infallible-noether-964b1e.netlify.app/)**
## Support

@@ -51,0 +47,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc