Files
gateway/plugins/default/jsonKeys.ts
T
Visarg Desai ad6dc7fb9d Feat: hook spans (#425)
* feat(hooks): wip - hooks with span management

* feat(hooks): wip - hooks with span management

* feat(hooks): wip - use hooks spans for before and after request hooks execution
2024-07-05 01:38:20 +05:30

68 lines
1.5 KiB
TypeScript

import {
HookEventType,
PluginContext,
PluginHandler,
PluginParameters,
} from '../types';
import { getText } from '../utils';
export const handler: PluginHandler = async (
context: PluginContext,
parameters: PluginParameters,
eventType: HookEventType
) => {
let error = null;
let verdict = false;
let data = null;
try {
const keys = parameters.keys;
const operator = parameters.operator;
let responseText = getText(context, eventType);
const jsonRegex = /{.*?}/g;
const jsonMatches = responseText.match(jsonRegex);
if (jsonMatches) {
for (const jsonMatch of jsonMatches) {
let responseJson: any;
try {
responseJson = JSON.parse(jsonMatch);
} catch (e) {
continue;
}
responseJson = responseJson || {};
// Check if the JSON contains any, all or none of the keys
switch (operator) {
case 'any':
verdict = keys.some((key: string) =>
responseJson.hasOwnProperty(key)
);
break;
case 'all':
verdict = keys.every((key: string) =>
responseJson.hasOwnProperty(key)
);
break;
case 'none':
verdict = keys.every(
(key: string) => !responseJson.hasOwnProperty(key)
);
break;
}
if (verdict) {
data = responseJson;
break;
}
}
}
} catch (e) {
error = e as Error;
}
return { error, verdict, data };
};