namespace _zeitbild.api { /** */ export function register_export_ics( rest_subject : lib_plankton.rest_caldav.type_rest ) : void { register< null, ( lib_plankton.ical.type_vcalendar | string ) >( rest_subject, lib_plankton.http.enum_method.get, "/export/ics", { "description": "trägt Veranstaltungen aus verschiedenen Kalendern zusammen im ics-Format", "query_parameters": () => ([ { "name": "from", "required": false, "description": "UNIX timestamp", }, { "name": "to", "required": false, "description": "UNIX timestamp", }, { "name": "calendar_ids", "required": false, "description": "comma separated", }, ]), "output_schema": () => ({ "nullable": false, "type": "string", }), "response_body_mimetype": "text/calendar", "response_body_encode": (output) => Buffer.from( (typeof(output) === "string") ? output : lib_plankton.ical.ics_encode(output) ), "restriction": restriction_web_auth, "execution": async (stuff) => { const user : {id : _zeitbild.type_user_id; object : _zeitbild.type_user_object;} = await _zeitbild.api.user_from_web_auth(stuff); const from : lib_plankton.pit.type_pit = ( ("from" in stuff.query_parameters) ? parseInt(stuff.query_parameters["from"]) : lib_plankton.pit.shift_week( lib_plankton.pit.now(), -2 ) ); const to : lib_plankton.pit.type_pit = ( ("to" in stuff.query_parameters) ? parseInt(stuff.query_parameters["to"]) : lib_plankton.pit.shift_week( lib_plankton.pit.now(), +6 ) ); const calendar_ids_wanted : (null | Array<_zeitbild.type_calendar_id>) = ( ( ("calendar_ids" in stuff.query_parameters) && (stuff.query_parameters["calendar_ids"] !== null) ) ? lib_plankton.call.convey( stuff.query_parameters["calendar_ids"], [ (x : string) => x.split(","), (x : Array) => x.map(parseInt), (x : Array) => x.filter(y => (! isNaN(y))) ] ) : null ); return ( _zeitbild.service.calendar.gather_events( calendar_ids_wanted, from, to, user.id ) .then( (events_extended) => Promise.resolve( { "status_code": 200, "data": _zeitbild.helpers.icalendar_vcalendar_from_own_event_list( events_extended ) } ) ) .catch( (reason) => Promise.resolve( { "status_code": 403, "data": String(reason), } ) ) ); } } ); } }