diff --git a/index.d.ts b/index.d.ts index 80eb630..3ece2df 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,622 +1,640 @@ -export interface CollectionDocument { - id?: string - insertTime?: Date - updateTime?: Date - [key: string]: any -} - -export interface DbReadOptions { - filter?: { - [key: string]: any - } - selector?: { - [key: string]: any - } - projection?: string - offset?: number - limit?: number - sort?: string[] - pipelineMod?: (pipe: { [key: string]: any }[]) => { [key: string]: any }[] -} - -interface GetHookGetOnlyData { - /** - * true if only one document was requested via /COLLECTION/ID - */ - one?: boolean - /** - * get list of documents (only valid after stage "read" in "get" hook) - */ - results(): CollectionDocument[] -} - -interface GetHookData { - /** - * filter map only valid for "get" hooks - */ - filter?: { - [key: string]: any - } - /** - * selector map only valid for "get" hooks - */ - selector?: { - [key: string]: any - } - /** - * offset only valid for "get" hooks - */ - offset?: number - /** - * limit only valid for "get" hooks - */ - limit?: number - /** - * sort only valid for "get" hooks - */ - sort?: string[] | string - /** - * pipelineMod is a function to modify the mongodb query pipeline - */ - pipelineMod?: (pipe: { [key: string]: any }[]) => { [key: string]: any }[] -} - -interface PostHookData { - /** - * post data only valid in "post" and "put" hooks - */ - data?: CollectionDocument -} - -interface JobConfig { - /** - * meta object - */ - meta?: any - - /** - * cron job interval specification - */ - cron?: string - - /** - * job program type - */ - type: "javascript" - - /** - * jobs program file - */ - file?: string -} - -interface JobData { - /** - * job is object of job config - */ - job?: JobConfig -} - -interface DbPackage { - /** - * read results from a collection - * - * @param colName collection name - * @param options options map - */ - find(colName: string, options?: DbReadOptions): CollectionDocument[] - - /** - * read count of documents for filter from a collection - * - * @param colName collection name - * @param options options map (only filter is valid) - */ - count(colName: string, options?: DbReadOptions): number - - /** - * create a document in a collection - * - * @param colName collection name - * @param data data map - */ - create(colName: string, data: CollectionDocument): CollectionDocument - - /** - * update a document in a collection - * - * @param colName collection name - * @param id id of entry - * @param data new/changed data - */ - update( - colName: string, - id: string, - data: CollectionDocument - ): CollectionDocument - - /** - * deletes one document by id from collection - * - * @param colName collection name - * @param id id of entry - */ - delete(colName: string, id: string): { message: "ok" } - - /** - * deletes documents by filter from collection - * - * @param colName collection name - * @param options options map, only filter valid - */ - deleteMany( - colName: string, - options?: DbReadOptions - ): { message: "ok"; removed: number } -} - -interface SmtpPackage { - /** - * send an email - * - * @param options email options map - */ - sendMail(options: { - to: string | string[] - cc?: string | string[] - bcc?: string | string[] - subject?: string - from: string - fromName?: string - replyTo?: string - plain?: string - html?: string - attach?: string | string[] - }): void -} - -interface FsPackage { - - /** - * get directory path of api config file - * - */ - configDir(): string - - /** - * read a file relative to config dir and return its content - * - * @param path relative file path - * @param options optional options - */ - readFile(path: string, options?: { - bytes: boolean // if true return []byte instead of string - }): string | any - - /** - * write data to a file relative to config dir - * - * @param path relative file path - * @param data string or []byte data - */ - writeFile(path: string, data: string|any): null - - /** - * stat file or directory - * - * @param path - */ - stat(path: string): { - name: string - size: number - isDir: boolean - modTime: string - } - - /** - * list directory entries - * - * @param path - */ - readDir(path: string): { - name: string - size: number - isDir: boolean - modTime: string - }[] - - /** - * make directory and all missing sub directories, no error if directory already exists - * - * @param path - */ - mkDir(path: string): void - - /** - * remove file or empty directory - * - * @param path - */ - remove(path: string): void -} - -interface TplPackage { - /** - * execute a template code and return result - * - * @param code template code - * @param contextData template context map - */ - execute( - code: string, - contextData?: { - [key: string]: any - } - ): string -} - -interface HttpPackage { - /** - * http request - * - * @param url url for request - * @param options request options - */ - fetch( - url: string, - options?: { - method?: string - headers?: { [key: string]: string } - body?: string - } - ): { - status: number - statusText: string - headers: { [key: string]: string } - trailer: { [key: string]: string } - url: string - body: { - text(): string - json(): any - } - } -} - -interface DebugPackage { - /** - * dumps data to header and server log - * - * @param toDump data to dump - */ - dump(...toDump: any): void - - /** - * get Sentry trace id - */ - sentryTraceId(): string -} - -interface ResponsePackage { - /** - * set response header - * - * @param name header name - * @param value value - */ - header(name: string, value: any): void -} - -interface UserPackage { - /** - * get JWT authentication - */ - auth(): { - id: string - username: string - role: number - permissions: string[] - } -} - -interface BcryptPackage { - /** - * hash password via bcrypt algo - * - * @param password clear text password - * @param options hashing options - */ - hash( - password: string, - options?: { - cost?: number - } - ): string - - /** - * check password against hashed password via bcrypt algo - * - * @param password clear text password - * @param hash hashed password - */ - check(password: string, hash: string): boolean -} - -interface JwtPackage { - /** - * create a jwt signed token string - * - * @param claims data object - * @param options options (secret, validityDuration = expiry in X seconds) - */ - create( - claims: { - [key: string]: any - }, - options?: { - secret?: string - validityDuration?: number - } - ): string - - /** - * parse jwt token string - * - * @param token token string - * @param options options (secret) - */ - parse( - token: string, - options?: { - secret?: string - } - ): { - error?: string - valid: boolean - method: { - Name: string - Hash: number - } - header: { - alg: string - typ: string - } - claims: { - exp?: number - [key: string]: any - } - } -} - -interface CharsetPackage { - /** - * convert iso8859 to utf8 - * - * @param iso8859 iso string - */ - iso8859ToUtf8(iso8859: string): string -} - -interface ImagePackage { - /** - * convert image from source file to target file with filters - * - * @param sourceFile - * @param targetFile - * @param filters - */ - filter( - sourceFile: string, - targetFile: string, - filters: { - fit?: boolean - fill?: boolean - width?: number - height?: number - brightness?: number - saturation?: number - contrast?: number - gamma?: number - blur?: number - sharpen?: number - invert?: boolean - grayscale?: boolean - quality?: number - }[] - ): void -} - -interface XmlPackage { - /** - * create xml string - * - * @param data object or array - * @param options options - */ - create(data: any, options?: {}): string - - /** - * parse xml string to json - * - * @param xml xml string - * @param options options - */ - parse(xml: string, options?: {}): any -} - -interface CookiePackage { - /** - * get cookie from http header - * - * @param name cookie name - */ - get(name: string): string - - /** - * set cookie via http header - * - * @param name cookie name - * @param value cookie value - * @param options cookie options - */ - set( - name: string, - value: string, - options?: { - maxAge?: number - path?: string - domain?: string - secure?: boolean - httpOnly?: boolean - } - ): void -} - -interface PdfPackage { - /** - * generate pdf from html - * - * @param html html string - * @param options options - * - * @returns []byte of pdf data - */ - fromHTML( - html: string, - options?: { - copies?: number // Number of copies to print into the pdf file (default 1) - dpi?: number // Change the dpi explicitly (this has no effect on X11 based systems) - grayscale?: boolean // PDF will be generated in grayscale - imageDpi?: number // When embedding images scale them down to this dpi (default 600) - imageQuality?: number // When jpeg compressing images use this quality (default 94) - lowQuality?: boolean // Generates lower quality pdf/ps. Useful to shrink the result document space - marginBottom?: number // Set the page bottom margin - marginLeft?: number // Set the page left margin (default 10mm) - marginRight?: number // Set the page right margin (default 10mm) - marginTop?: number // Set the page top margin - noCollate?: boolean // Do not collate when printing multiple copies (default collate) - noPdfCompression?: boolean // Do not use lossless compression on pdf objects - orientation?: "Portrait" | "Landscape" // Set orientation to Landscape or Portrait (default Portrait) - pageHeight?: number // Page height - pageSize?: string // Set paper size to: A4, Letter, etc. (default A4) - pageWidth?: number // Page width - title?: string // The title of the generated pdf file (The title of the first document is used if not specified) - // page settings - printMediaType?: boolean // Use print media-type instead of screen - footerCenter?: string // Centered footer text - footerFontName?: string // Set footer font name (default Arial) - footerFontSize?: number // Set footer font size (default 12) - footerLeft?: string // Left aligned footer text - footerLine?: boolean // Display line above the footer - footerRight?: string // Right aligned footer text - footerSpacing?: number // Spacing between footer and content in mm (default 0) - footerHTML?: string // URL to footer html - headerCenter?: string // Centered header text - headerFontName?: string // Set header font name (default Arial) - headerFontSize?: number // Set header font size (default 12) - headerLeft?: string // Left aligned header text - headerLine?: boolean // Display line below the header - headerRight?: string // Right aligned header text - headerSpacing?: number // Spacing between header and content in mm (default 0) - headerHTML?: string // URL to header html - } - ): any - - /** - * process existing pdf data - * - * @param command pdfcpu command - * @param pdfData []byte of pdf data, multiple []byte as array of pdf's to merge or object with description to create - * @param options options - * - * @returns []byte of new pdf data - */ - cpu( - command: "watermark" | "stamp" | "merge" | "rotate" | "create", - pdfData: any | any[], - options?: { - pages?: (string | number)[] - description?: { - fontname?: string - points?: number - rtl?: boolean - position?: "full" | "tl" | "tc" | "tr" | "l" | "c" | "r" | "bl" | "bc" | "br" - offset?: string - scalefactor?: number | string - aligntext?: "left" | "center" | "right" | "justified" - strokecolor?: string - fillcolor?: string - backgroundcolor?: string - rotation?: number - diagonal?: 1|2 - opacity?: number - rendermode?: 0|1|2 - margins?: number | string - border?: number | string - url?: string - } - mode?: "text" | "image" | "pdf" - bytes?: any // []byte of watermark image - file?: string // file for pdf watermark - text?: string // text for text watermark - rotation?: number - } - ): any -} - -export interface HookContext - extends GetHookData, - GetHookGetOnlyData, - PostHookData, - JobData { - request(): { - method: string - remoteAddr: string - host: string - url: string - path: string - param(p: string): string - query(q: string): string - header(h: string): string - body(): string - /** - * bodyBytes return []byte go slice of post body for later use pe. in iso8859ToUtf8 - */ - bodyBytes(): string - } - - db: DbPackage - smtp: SmtpPackage - fs: FsPackage - tpl: TplPackage - http: HttpPackage - debug: DebugPackage - response: ResponsePackage - user: UserPackage - bcrypt: BcryptPackage - jwt: JwtPackage - charset: CharsetPackage - image: ImagePackage - xml: XmlPackage - cookie: CookiePackage - pdf: PdfPackage -} - -export interface HookException { - status?: number - html?: string - string?: string - bytes?: any - json?: any - file?: string - log?: boolean - [key: string]: any -} - -export interface HookResponse extends GetHookData, PostHookData { - data?: CollectionDocument - results?: any -} - declare global { + export interface CollectionDocument { + id?: string + insertTime?: Date + updateTime?: Date + [key: string]: any + } + + export interface DbReadOptions { + filter?: { + [key: string]: any + } + selector?: { + [key: string]: any + } + projection?: string + offset?: number + limit?: number + sort?: string[] + pipelineMod?: ( + pipe: { [key: string]: any }[] + ) => { [key: string]: any }[] + } + + interface GetHookGetOnlyData { + /** + * true if only one document was requested via /COLLECTION/ID + */ + one?: boolean + /** + * get list of documents (only valid after stage "read" in "get" hook) + */ + results(): CollectionDocument[] + } + + interface GetHookData { + /** + * filter map only valid for "get" hooks + */ + filter?: { + [key: string]: any + } + /** + * selector map only valid for "get" hooks + */ + selector?: { + [key: string]: any + } + /** + * offset only valid for "get" hooks + */ + offset?: number + /** + * limit only valid for "get" hooks + */ + limit?: number + /** + * sort only valid for "get" hooks + */ + sort?: string[] | string + /** + * pipelineMod is a function to modify the mongodb query pipeline + */ + pipelineMod?: ( + pipe: { [key: string]: any }[] + ) => { [key: string]: any }[] + } + + interface PostHookData { + /** + * post data only valid in "post" and "put" hooks + */ + data?: CollectionDocument + } + + interface JobConfig { + /** + * meta object + */ + meta?: any + + /** + * cron job interval specification + */ + cron?: string + + /** + * job program type + */ + type: "javascript" + + /** + * jobs program file + */ + file?: string + } + + interface JobData { + /** + * job is object of job config + */ + job?: JobConfig + } + + interface DbPackage { + /** + * read results from a collection + * + * @param colName collection name + * @param options options map + */ + find(colName: string, options?: DbReadOptions): CollectionDocument[] + + /** + * read count of documents for filter from a collection + * + * @param colName collection name + * @param options options map (only filter is valid) + */ + count(colName: string, options?: DbReadOptions): number + + /** + * create a document in a collection + * + * @param colName collection name + * @param data data map + */ + create(colName: string, data: CollectionDocument): CollectionDocument + + /** + * update a document in a collection + * + * @param colName collection name + * @param id id of entry + * @param data new/changed data + */ + update( + colName: string, + id: string, + data: CollectionDocument + ): CollectionDocument + + /** + * deletes one document by id from collection + * + * @param colName collection name + * @param id id of entry + */ + delete(colName: string, id: string): { message: "ok" } + + /** + * deletes documents by filter from collection + * + * @param colName collection name + * @param options options map, only filter valid + */ + deleteMany( + colName: string, + options?: DbReadOptions + ): { message: "ok"; removed: number } + } + + interface SmtpPackage { + /** + * send an email + * + * @param options email options map + */ + sendMail(options: { + to: string | string[] + cc?: string | string[] + bcc?: string | string[] + subject?: string + from: string + fromName?: string + replyTo?: string + plain?: string + html?: string + attach?: string | string[] + }): void + } + + interface FsPackage { + /** + * get directory path of api config file + * + */ + configDir(): string + + /** + * read a file relative to config dir and return its content + * + * @param path relative file path + * @param options optional options + */ + readFile( + path: string, + options?: { + bytes: boolean // if true return []byte instead of string + } + ): string | any + + /** + * write data to a file relative to config dir + * + * @param path relative file path + * @param data string or []byte data + */ + writeFile(path: string, data: string | any): null + + /** + * stat file or directory + * + * @param path + */ + stat(path: string): { + name: string + size: number + isDir: boolean + modTime: string + } + + /** + * list directory entries + * + * @param path + */ + readDir(path: string): { + name: string + size: number + isDir: boolean + modTime: string + }[] + + /** + * make directory and all missing sub directories, no error if directory already exists + * + * @param path + */ + mkDir(path: string): void + + /** + * remove file or empty directory + * + * @param path + */ + remove(path: string): void + } + + interface TplPackage { + /** + * execute a template code and return result + * + * @param code template code + * @param contextData template context map + */ + execute( + code: string, + contextData?: { + [key: string]: any + } + ): string + } + + interface HttpPackage { + /** + * http request + * + * @param url url for request + * @param options request options + */ + fetch( + url: string, + options?: { + method?: string + headers?: { [key: string]: string } + body?: string + } + ): { + status: number + statusText: string + headers: { [key: string]: string } + trailer: { [key: string]: string } + url: string + body: { + text(): string + json(): any + } + } + } + + interface DebugPackage { + /** + * dumps data to header and server log + * + * @param toDump data to dump + */ + dump(...toDump: any): void + + /** + * get Sentry trace id + */ + sentryTraceId(): string + } + + interface ResponsePackage { + /** + * set response header + * + * @param name header name + * @param value value + */ + header(name: string, value: any): void + } + + interface UserPackage { + /** + * get JWT authentication + */ + auth(): { + id: string + username: string + role: number + permissions: string[] + } + } + + interface BcryptPackage { + /** + * hash password via bcrypt algo + * + * @param password clear text password + * @param options hashing options + */ + hash( + password: string, + options?: { + cost?: number + } + ): string + + /** + * check password against hashed password via bcrypt algo + * + * @param password clear text password + * @param hash hashed password + */ + check(password: string, hash: string): boolean + } + + interface JwtPackage { + /** + * create a jwt signed token string + * + * @param claims data object + * @param options options (secret, validityDuration = expiry in X seconds) + */ + create( + claims: { + [key: string]: any + }, + options?: { + secret?: string + validityDuration?: number + } + ): string + + /** + * parse jwt token string + * + * @param token token string + * @param options options (secret) + */ + parse( + token: string, + options?: { + secret?: string + } + ): { + error?: string + valid: boolean + method: { + Name: string + Hash: number + } + header: { + alg: string + typ: string + } + claims: { + exp?: number + [key: string]: any + } + } + } + + interface CharsetPackage { + /** + * convert iso8859 to utf8 + * + * @param iso8859 iso string + */ + iso8859ToUtf8(iso8859: string): string + } + + interface ImagePackage { + /** + * convert image from source file to target file with filters + * + * @param sourceFile + * @param targetFile + * @param filters + */ + filter( + sourceFile: string, + targetFile: string, + filters: { + fit?: boolean + fill?: boolean + width?: number + height?: number + brightness?: number + saturation?: number + contrast?: number + gamma?: number + blur?: number + sharpen?: number + invert?: boolean + grayscale?: boolean + quality?: number + }[] + ): void + } + + interface XmlPackage { + /** + * create xml string + * + * @param data object or array + * @param options options + */ + create(data: any, options?: {}): string + + /** + * parse xml string to json + * + * @param xml xml string + * @param options options + */ + parse(xml: string, options?: {}): any + } + + interface CookiePackage { + /** + * get cookie from http header + * + * @param name cookie name + */ + get(name: string): string + + /** + * set cookie via http header + * + * @param name cookie name + * @param value cookie value + * @param options cookie options + */ + set( + name: string, + value: string, + options?: { + maxAge?: number + path?: string + domain?: string + secure?: boolean + httpOnly?: boolean + } + ): void + } + + interface PdfPackage { + /** + * generate pdf from html + * + * @param html html string + * @param options options + * + * @returns []byte of pdf data + */ + fromHTML( + html: string, + options?: { + copies?: number // Number of copies to print into the pdf file (default 1) + dpi?: number // Change the dpi explicitly (this has no effect on X11 based systems) + grayscale?: boolean // PDF will be generated in grayscale + imageDpi?: number // When embedding images scale them down to this dpi (default 600) + imageQuality?: number // When jpeg compressing images use this quality (default 94) + lowQuality?: boolean // Generates lower quality pdf/ps. Useful to shrink the result document space + marginBottom?: number // Set the page bottom margin + marginLeft?: number // Set the page left margin (default 10mm) + marginRight?: number // Set the page right margin (default 10mm) + marginTop?: number // Set the page top margin + noCollate?: boolean // Do not collate when printing multiple copies (default collate) + noPdfCompression?: boolean // Do not use lossless compression on pdf objects + orientation?: "Portrait" | "Landscape" // Set orientation to Landscape or Portrait (default Portrait) + pageHeight?: number // Page height + pageSize?: string // Set paper size to: A4, Letter, etc. (default A4) + pageWidth?: number // Page width + title?: string // The title of the generated pdf file (The title of the first document is used if not specified) + // page settings + printMediaType?: boolean // Use print media-type instead of screen + footerCenter?: string // Centered footer text + footerFontName?: string // Set footer font name (default Arial) + footerFontSize?: number // Set footer font size (default 12) + footerLeft?: string // Left aligned footer text + footerLine?: boolean // Display line above the footer + footerRight?: string // Right aligned footer text + footerSpacing?: number // Spacing between footer and content in mm (default 0) + footerHTML?: string // URL to footer html + headerCenter?: string // Centered header text + headerFontName?: string // Set header font name (default Arial) + headerFontSize?: number // Set header font size (default 12) + headerLeft?: string // Left aligned header text + headerLine?: boolean // Display line below the header + headerRight?: string // Right aligned header text + headerSpacing?: number // Spacing between header and content in mm (default 0) + headerHTML?: string // URL to header html + } + ): any + + /** + * process existing pdf data + * + * @param command pdfcpu command + * @param pdfData []byte of pdf data, multiple []byte as array of pdf's to merge or object with description to create + * @param options options + * + * @returns []byte of new pdf data + */ + cpu( + command: "watermark" | "stamp" | "merge" | "rotate" | "create", + pdfData: any | any[], + options?: { + pages?: (string | number)[] + description?: { + fontname?: string + points?: number + rtl?: boolean + position?: + | "full" + | "tl" + | "tc" + | "tr" + | "l" + | "c" + | "r" + | "bl" + | "bc" + | "br" + offset?: string + scalefactor?: number | string + aligntext?: "left" | "center" | "right" | "justified" + strokecolor?: string + fillcolor?: string + backgroundcolor?: string + rotation?: number + diagonal?: 1 | 2 + opacity?: number + rendermode?: 0 | 1 | 2 + margins?: number | string + border?: number | string + url?: string + } + mode?: "text" | "image" | "pdf" + bytes?: any // []byte of watermark image + file?: string // file for pdf watermark + text?: string // text for text watermark + rotation?: number + } + ): any + } + + export interface HookContext + extends GetHookData, + GetHookGetOnlyData, + PostHookData, + JobData { + request(): { + method: string + remoteAddr: string + host: string + url: string + path: string + param(p: string): string + query(q: string): string + header(h: string): string + body(): string + /** + * bodyBytes return []byte go slice of post body for later use pe. in iso8859ToUtf8 + */ + bodyBytes(): string + } + + db: DbPackage + smtp: SmtpPackage + fs: FsPackage + tpl: TplPackage + http: HttpPackage + debug: DebugPackage + response: ResponsePackage + user: UserPackage + bcrypt: BcryptPackage + jwt: JwtPackage + charset: CharsetPackage + image: ImagePackage + xml: XmlPackage + cookie: CookiePackage + pdf: PdfPackage + } + + export interface HookException { + status?: number + html?: string + string?: string + bytes?: any + json?: any + file?: string + log?: boolean + [key: string]: any + } + + export interface HookResponse extends GetHookData, PostHookData { + data?: CollectionDocument + results?: any + } + var context: HookContext } + +export { HookResponse, HookException, HookContext, CollectionDocument }