New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

grpc-reflection-js

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

grpc-reflection-js - npm Package Compare versions

Comparing version 0.1.2 to 0.2.0

10

build/src/client.d.ts

@@ -1,8 +0,10 @@

import { ChannelCredentials } from '@grpc/grpc-js';
import { ChannelCredentials, Metadata } from '@grpc/grpc-js';
import * as services from './reflection_grpc_pb';
import { Root } from 'protobufjs';
export declare class Client {
metadata: Metadata;
grpcClient: services.IServerReflectionClient;
constructor(url: string, credentials: ChannelCredentials, options?: object);
listServices(): Promise<string[] | void[]>;
private fileDescriptorCache;
constructor(url: string, credentials: ChannelCredentials, options?: object, metadata?: Metadata);
listServices(): Promise<string[]>;
fileContainingSymbol(symbol: string): Promise<Root>;

@@ -13,3 +15,3 @@ fileByFilename(filename: string): Promise<Root>;

private getFileContainingSymbol;
private getFileByFilename;
private getFilesByFilenames;
}

97

build/src/client.js

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

exports.Client = void 0;
const grpc_js_1 = require("@grpc/grpc-js");
const descriptor_1 = require("./descriptor");

@@ -33,3 +34,6 @@ const services = __importStar(require("./reflection_grpc_pb"));

class Client {
constructor(url, credentials, options) {
constructor(url, credentials, options, metadata) {
this.fileDescriptorCache = new Map();
this.fileDescriptorCache = new Map();
this.metadata = metadata || new grpc_js_1.Metadata();
this.grpcClient = new services.ServerReflectionClient(url, credentials, options);

@@ -46,3 +50,3 @@ }

});
resolve(services);
resolve(services || []);
}

@@ -58,3 +62,3 @@ else {

request.setListServices('*');
const grpcCall = this.grpcClient.serverReflectionInfo({});
const grpcCall = this.grpcClient.serverReflectionInfo(this.metadata);
grpcCall.on('data', dataCallback);

@@ -75,3 +79,3 @@ grpcCall.on('error', errorCallback);

return new Promise((resolve, reject) => {
this.getFileByFilename(filename)
this.getFilesByFilenames([filename])
.then(val => resolve(this.resolveFileDescriptorSet(val)))

@@ -81,30 +85,25 @@ .catch(err => reject(err));

}
async resolveFileDescriptorSet(fileDescriptorProtoBytes) {
async resolveFileDescriptorSet(fileDescriptorProtos) {
const fileDescriptorMap = await this.resolveDescriptorRecursive(fileDescriptorProtos);
const fileDescriptorSet = descriptor_2.FileDescriptorSet.create();
const fileDescriptorProtos = await this.resolveDescriptorRecursive(fileDescriptorProtoBytes);
lodash_set_1.default(fileDescriptorSet, 'file', Array.from(fileDescriptorProtos.values()));
lodash_set_1.default(fileDescriptorSet, 'file', Array.from(fileDescriptorMap.values()));
return descriptor_1.getDescriptorRootFromDescriptorSet(fileDescriptorSet);
}
async resolveDescriptorRecursive(fileDescriptorProtoBytes) {
let fileDescriptorProtos = new Map();
for (const descriptorByte of fileDescriptorProtoBytes) {
const fileDescriptorProto = descriptor_2.FileDescriptorProto.decode(descriptorByte);
if (fileDescriptorProto.dependency) {
const dependencies = fileDescriptorProto.dependency;
for (const dep of dependencies) {
const depProtoBytes = await this.getFileByFilename(dep);
const protoDependencies = await this.resolveDescriptorRecursive(depProtoBytes);
fileDescriptorProtos = new Map([
...fileDescriptorProtos,
...protoDependencies,
]);
}
async resolveDescriptorRecursive(fileDescriptorProtos = [], fileDescriptorMap = new Map()) {
await Promise.all(fileDescriptorProtos.map(async (fileDescriptorProto) => {
if (fileDescriptorMap.has(fileDescriptorProto.name)) {
return;
}
if (!fileDescriptorProtos.has(fileDescriptorProto.name)) {
fileDescriptorProtos.set(fileDescriptorProto.name, fileDescriptorProto);
else {
fileDescriptorMap.set(fileDescriptorProto.name, fileDescriptorProto);
}
}
return fileDescriptorProtos;
const dependencies = (fileDescriptorProto.dependency || []).filter((dependency) => !fileDescriptorMap.has(dependency));
if (dependencies.length) {
await this.resolveDescriptorRecursive(await this.getFilesByFilenames(dependencies), fileDescriptorMap);
}
}));
return fileDescriptorMap;
}
getFileContainingSymbol(symbol) {
const fileDescriptorCache = this.fileDescriptorCache;
return new Promise((resolve, reject) => {

@@ -114,3 +113,9 @@ function dataCallback(response) {

if (response.hasFileDescriptorResponse()) {
resolve((_a = response.getFileDescriptorResponse()) === null || _a === void 0 ? void 0 : _a.getFileDescriptorProtoList());
const fileDescriptorProtoBytes = (((_a = response
.getFileDescriptorResponse()) === null || _a === void 0 ? void 0 : _a.getFileDescriptorProtoList()) || []);
resolve(fileDescriptorProtoBytes.map(descriptorByte => {
const fileDescriptorProto = descriptor_2.FileDescriptorProto.decode(descriptorByte);
fileDescriptorCache.set(fileDescriptorProto.name, fileDescriptorProto);
return fileDescriptorProto;
}));
}

@@ -126,3 +131,3 @@ else {

request.setFileContainingSymbol(symbol);
const grpcCall = this.grpcClient.serverReflectionInfo({});
const grpcCall = this.grpcClient.serverReflectionInfo(this.metadata);
grpcCall.on('data', dataCallback);

@@ -134,8 +139,28 @@ grpcCall.on('error', errorCallback);

}
getFileByFilename(symbol) {
getFilesByFilenames(symbols) {
const result = [];
const fileDescriptorCache = this.fileDescriptorCache;
const symbolsToFetch = symbols.filter(symbol => {
const cached = fileDescriptorCache.get(symbol);
if (cached) {
result.push(cached);
return false;
}
return true;
});
if (symbolsToFetch.length === 0) {
return Promise.resolve(result);
}
return new Promise((resolve, reject) => {
function dataCallback(response) {
var _a;
var _a, _b;
if (response.hasFileDescriptorResponse()) {
resolve((_a = response.getFileDescriptorResponse()) === null || _a === void 0 ? void 0 : _a.getFileDescriptorProtoList());
(_b = (_a = response
.getFileDescriptorResponse()) === null || _a === void 0 ? void 0 : _a.getFileDescriptorProtoList()) === null || _b === void 0 ? void 0 : _b.forEach(descriptorByte => {
if (descriptorByte instanceof Uint8Array) {
const fileDescriptorProto = descriptor_2.FileDescriptorProto.decode(descriptorByte);
fileDescriptorCache.set(fileDescriptorProto.name, fileDescriptorProto);
result.push(fileDescriptorProto);
}
});
}

@@ -149,8 +174,12 @@ else {

}
const request = new reflection_pb_1.ServerReflectionRequest();
request.setFileByFilename(symbol);
const grpcCall = this.grpcClient.serverReflectionInfo({});
const grpcCall = this.grpcClient.serverReflectionInfo(this.metadata);
grpcCall.on('data', dataCallback);
grpcCall.on('error', errorCallback);
grpcCall.write(request);
grpcCall.on('end', () => {
resolve(result);
});
const request = new reflection_pb_1.ServerReflectionRequest();
symbolsToFetch.forEach(symbol => {
grpcCall.write(request.setFileByFilename(symbol));
});
grpcCall.end();

@@ -157,0 +186,0 @@ });

@@ -14,3 +14,3 @@ export namespace ServerReflectionService {

}
export var ServerReflectionClient: import("@grpc/grpc-js/build/src/make-client").ServiceClientConstructor;
export var ServerReflectionClient: import("@grpc/grpc-js").ServiceClientConstructor;
declare function serialize_grpc_reflection_v1alpha_ServerReflectionRequest(arg: any): Buffer;

@@ -17,0 +17,0 @@ declare function deserialize_grpc_reflection_v1alpha_ServerReflectionRequest(buffer_arg: any): import("./reflection_pb.js").ServerReflectionRequest;

@@ -56,3 +56,3 @@ "use strict";

];
chai_1.assert.deepEqual(await reflectionClient.listServices(), expectedServices);
chai_1.assert.sameMembers(await reflectionClient.listServices(), expectedServices);
});

@@ -68,2 +68,5 @@ });

on: function (_event, listener) {
if (_event === 'error') {
return;
}
const res = new reflection_pb_1.ServerReflectionResponse();

@@ -83,2 +86,5 @@ const fileDescriptorResponse = new reflection_pb_1.FileDescriptorResponse();

on: function (_event, listener) {
if (_event === 'error') {
return;
}
const res = new reflection_pb_1.ServerReflectionResponse();

@@ -99,3 +105,3 @@ const fileDescriptorResponse = new reflection_pb_1.FileDescriptorResponse();

const root = await reflectionClient.fileContainingSymbol('phone.Messenger');
chai_1.assert.deepEqual(root.files, ['contact.proto', 'phone.proto']);
chai_1.assert.sameDeepMembers(root.files, ['contact.proto', 'phone.proto']);
});

@@ -111,2 +117,5 @@ });

on: function (_event, listener) {
if (_event === 'error') {
return;
}
const res = new reflection_pb_1.ServerReflectionResponse();

@@ -113,0 +122,0 @@ const fileDescriptorResponse = new reflection_pb_1.FileDescriptorResponse();

{
"name": "grpc-reflection-js",
"version": "0.1.2",
"version": "0.2.0",
"main": "build/src/index.js",

@@ -5,0 +5,0 @@ "repository": "https://github.com/redhoyasa/grpc-reflection-js",

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc