apollo-datasource-grpc
Version:
gRPC implementation of Apollo Server's Datasources. Makes it possible to use Partial Query Caching
52 lines • 4.01 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const apollo_datasource_1 = require("apollo-datasource");
const crypto_1 = __importDefault(require("crypto"));
const GRPCCache_1 = __importDefault(require("./GRPCCache"));
class GRPCDataSource extends apollo_datasource_1.DataSource {
cache;
context;
client;
constructor() {
super();
}
initialize(config) {
this.context = config.context;
this.cache = new GRPCCache_1.default(config.cache);
}
async callRPC(ttl = 5, request, fnTransformResponseData) {
const cacheKey = this.getCacheKey(request.args, request.rpcName);
const entry = await this.cache.get(cacheKey);
if (entry)
return entry;
const response = await new Promise((resolve, reject) => {
this.client[request.rpcName]({ ...request.args }, request.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);
}
});
});
return response;
}
getCacheKey(args, rpcName) {
return crypto_1.default
.createHash("sha1")
.update(JSON.stringify(args) + rpcName)
.digest("base64");
}
}
exports.default = GRPCDataSource;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR1JQQ0RhdGFTb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvR1JQQ0RhdGFTb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBaUU7QUFDakUsb0RBQTRCO0FBQzVCLDREQUFvQztBQUVwQyxNQUFlLGNBQStCLFNBQVEsOEJBQVU7SUFDOUQsS0FBSyxDQUFhO0lBQ2xCLE9BQU8sQ0FBWTtJQUNuQixNQUFNLENBQU07SUFFWjtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUE2QjtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLG1CQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsT0FBWSxFQUFFLHVCQUE2QjtRQUNoRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpFLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0MsSUFBSSxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFeEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxNQUFXLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsUUFBYSxFQUFFLEVBQUU7Z0JBQzFGLElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2pCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNwQjtnQkFFRCxJQUFJLHVCQUF1QixFQUFFO29CQUMzQixNQUFNLEdBQUcsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDbkI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFTLEVBQUUsT0FBZTtRQUNwQyxPQUFPLGdCQUFNO2FBQ1YsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDdEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUVELGtCQUFlLGNBQWMsQ0FBQyJ9