@comsma/apollo-datasource-grpc
Version:
gRPC implementation of Apollo Server's Datasources. Makes it possible to use Partial Query Caching
46 lines • 3.67 kB
JavaScript
import { DataSource } from 'apollo-datasource';
import crypto from 'crypto';
import GRPCCache from './GRPCCache';
class GRPCDataSource extends DataSource {
cache;
context;
client;
constructor() {
super();
}
initialize(config) {
this.context = config.context;
this.cache = new GRPCCache(config.cache);
}
async callRPC(ttl = 5, callOptions, fnTransformResponseData) {
const cacheKey = this.getCacheKey(callOptions.params, callOptions.rpcName);
const entry = await this.cache.get(cacheKey);
if (entry)
return entry;
return await new Promise((resolve, reject) => {
this.client[callOptions.rpcName]({ ...callOptions.params }, callOptions.meta, (err, response) => {
if (err) {
console.log(err);
return reject(err);
}
if (fnTransformResponseData) {
const res = fnTransformResponseData(response);
this.cache.set(cacheKey, res, ttl);
resolve(res);
}
else {
this.cache.set(cacheKey, response, ttl);
resolve(response);
}
});
});
}
getCacheKey(args, rpcName) {
return crypto
.createHash("sha1")
.update(JSON.stringify(args) + rpcName)
.digest("base64");
}
}
export default GRPCDataSource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR1JQQ0RhdGFTb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvR1JQQ0RhdGFTb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRSxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxTQUFTLE1BQU0sYUFBYSxDQUFDO0FBSXBDLE1BQWUsY0FBK0IsU0FBUSxVQUFVO0lBQzlELEtBQUssQ0FBYTtJQUNsQixPQUFPLENBQVk7SUFDbkIsTUFBTSxDQUFpQjtJQUV2QjtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUE2QjtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxXQUF5QixFQUFFLHVCQUE2QjtRQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNFLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0MsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEIsT0FBUSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLE1BQVcsRUFBRSxFQUFFO1lBRXRELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxRQUFhLEVBQUUsRUFBRTtnQkFDeEcsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDakIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3BCO2dCQUVELElBQUksdUJBQXVCLEVBQUU7b0JBQzNCLE1BQU0sR0FBRyxHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2Q7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDeEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNuQjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVMsRUFBRSxPQUFlO1FBQ3BDLE9BQU8sTUFBTTthQUNWLFVBQVUsQ0FBQyxNQUFNLENBQUM7YUFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQ3RDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRCxlQUFlLGNBQWMsQ0FBQyJ9