insomnia/packages/insomnia-app/app/templating/extensions/index.ts
Dimitri Mitropoulos 5f4c19da35
[TypeScript] Phase 1 & 2 (#3370)
Co-authored-by: Opender Singh <opender.singh@konghq.com>
2021-05-12 18:35:00 +12:00

101 lines
2.5 KiB
TypeScript

import type { NunjucksParsedTagArg } from '../utils';
import type { Request } from '../../models/request';
import type { Response } from '../../models/response';
import type { PluginStore } from '../../plugins/context';
export type PluginArgumentValue = string | number | boolean;
type DisplayName = string | ((args: Array<NunjucksParsedTagArg>) => string);
interface PluginArgumentBase {
displayName: DisplayName;
description?: string;
help?: string;
hide?: (args: Array<NunjucksParsedTagArg>) => boolean;
}
export interface PluginArgumentEnumOption {
displayName: DisplayName;
value: PluginArgumentValue;
description?: string;
placeholder?: string;
}
export type PluginArgumentEnum = PluginArgumentBase & {
type: 'enum';
options: Array<PluginArgumentEnumOption>;
defaultValue?: PluginArgumentValue;
};
export type PluginArgumentModel = PluginArgumentBase & {
type: 'model';
model: string;
defaultValue?: string;
};
export type PluginArgumentString = PluginArgumentBase & {
type: 'string';
placeholder?: string;
defaultValue?: string;
};
export type PluginArgumentBoolean = PluginArgumentBase & {
type: 'boolean';
defaultValue?: boolean;
};
export type PluginArgumentFile = PluginArgumentBase & {
type: 'file';
};
export type PluginArgumentNumber = PluginArgumentBase & {
type: 'number';
placeholder?: string;
defaultValue?: number;
};
export type PluginArgument =
| PluginArgumentEnum
| PluginArgumentModel
| PluginArgumentString
| PluginArgumentBoolean
| PluginArgumentFile
| PluginArgumentNumber;
export interface PluginTemplateTagContext {
util: {
models: {
request: {
getById: (id: string) => Promise<Request | null>;
};
response: {
getLatestForRequestId: (id: string) => Promise<Response | null>;
getBodyBuffer: (response: Response, fallback?: any) => Promise<Buffer | null>;
};
};
};
}
export interface PluginTemplateTagActionContext {
store: PluginStore;
}
export interface PluginTemplateTagAction {
name: string;
icon?: string;
run: (context: PluginTemplateTagActionContext) => Promise<void>;
}
export interface PluginTemplateTag {
args: Array<PluginArgument>;
name: string;
displayName: DisplayName;
disablePreview: () => boolean;
description: string;
actions: Array<PluginTemplateTagAction>;
run: (context: PluginTemplateTagContext, ...arg: Array<any>) => Promise<any> | any;
deprecated?: boolean;
validate?: (value: any) => string | null;
priority?: number;
}