namespace _zeitbild.api { /** * @todo zu plankton auslagern? */ type type_stuff = { version: (null | string); headers: Record; path_parameters: Record; query_parameters: Record; }; /** */ export async function session_from_stuff( stuff : {headers : Record;} ) : Promise<{key : string; value : lib_plankton.session.type_session}> { const key : string = (stuff.headers["X-Session-Key"] || stuff.headers["X-Session-Key".toLowerCase()]); const value : lib_plankton.session.type_session = await lib_plankton.session.get(key); return {"key": key, "value": value}; } /** */ export const restriction_logged_in : lib_plankton.rest.type_restriction = ( (stuff) => ( session_from_stuff(stuff) .then(() => Promise.resolve(true)) .catch(() => Promise.resolve(false)) ) ); /** */ export const restriction_none : lib_plankton.rest.type_restriction = ( (stuff) => Promise.resolve(true) ); /** */ export function register( rest_subject : lib_plankton.rest.type_rest, http_method : lib_plankton.http.enum_method, path : string, options : { active ?: ((version : string) => boolean); restriction ?: (null | lib_plankton.rest.type_restriction); execution ?: lib_plankton.rest.type_execution; title ?: (null | string); description ?: (null | string); query_parameters ?: ((version : (null | string)) => Array< { name : string; description : (null | string); required : boolean; } >); input_schema ?: ((version: (null | string)) => lib_plankton.rest.type_oas_schema); output_schema ?: ((version: (null | string)) => lib_plankton.rest.type_oas_schema); request_body_mimetype ?: string; request_body_decode ?: ((http_request_body : Buffer, http_request_header_content_type : (null | string)) => any); response_body_mimetype ?: string; response_body_encode ?: ((output : any) => Buffer); } = {} ) : void { options = Object.assign( { }, options ); lib_plankton.rest.register( rest_subject, http_method, (_zeitbild.conf.get().server.path_base + path), options ); } }