Skip to content

Commit

Permalink
feat: support defaultRequestMeta on Cryption client
Browse files Browse the repository at this point in the history
  • Loading branch information
fengmk2 committed Jul 13, 2023
1 parent 29a5468 commit 99abc44
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
15 changes: 11 additions & 4 deletions src/client/API.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,18 @@ import { Metadata } from '@grpc/grpc-js';
import { KV, RequestWithMeta, Map } from '../types/common';

export class API {
createMetadata(request: RequestWithMeta<{}>): Metadata {
createMetadata(request: RequestWithMeta<{}>, defaultRequestMeta?: Record<string, string>): Metadata {
const metadata = new Metadata();
if (!request.requestMeta) return metadata;
for (const key of Object.keys(request.requestMeta)) {
metadata.add(key, request.requestMeta[key]);
if (defaultRequestMeta) {
for (const key in defaultRequestMeta) {
metadata.add(key, defaultRequestMeta[key]);
}
}

if (request.requestMeta) {
for (const key of Object.keys(request.requestMeta)) {
metadata.add(key, request.requestMeta[key]);
}
}
return metadata;
}
Expand Down
8 changes: 6 additions & 2 deletions src/client/Cryption.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ export type DecryptResponse = {

export type CryptionOptions = {
componentName: string;
// set default metadata on every request
defaultRequestMeta?: Record<string, string>;
};

export default class Cryption extends API {
Expand All @@ -50,8 +52,9 @@ export default class Cryption extends API {
req.setKeyId(request.keyId);
}

const metadata = this.createMetadata(request, this.options.defaultRequestMeta);
return new Promise((resolve, reject) => {
this.cryptionClient.encrypt(req, this.createMetadata(request), (err, res: EncryptResponse) => {
this.cryptionClient.encrypt(req, metadata, (err, res: EncryptResponse) => {
if (err) return reject(err);
resolve(res.toObject());
});
Expand All @@ -63,8 +66,9 @@ export default class Cryption extends API {
req.setComponentName(this.options.componentName);
req.setCipherText(request.cipherText);

const metadata = this.createMetadata(request, this.options.defaultRequestMeta);
return new Promise((resolve, reject) => {
this.cryptionClient.decrypt(req, this.createMetadata(request), (err, res: DecryptResponsePB) => {
this.cryptionClient.decrypt(req, metadata, (err, res: DecryptResponsePB) => {
if (err) return reject(err);
const plainText = Buffer.from(res.getPlainText_asB64(), 'base64');
resolve({
Expand Down
2 changes: 1 addition & 1 deletion test/unit/client/Cryption.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ describe.skip('Cryption.test.ts', () => {
const componentName = 'cryption_demo';

beforeAll(() => {
client = new Client('34904', '127.0.0.1', { cryption: { componentName } });
client = new Client('34904', '127.0.0.1', { cryption: { componentName, defaultRequestMeta: {} } });
});

it('should encrypt and decrypt success', async () => {
Expand Down

0 comments on commit 99abc44

Please sign in to comment.