import {z} from 'zod' export type GetApiV1OrganizationsEventsListArgs = {before?: string | undefined, after?: string | undefined, pagination_cursor?: string | undefined, pagination_limit?: number | undefined, sort_direction?: ('asc' | 'desc' | 'asc nulls last' | 'desc nulls last') | undefined}; export type GetApiV1OrganizationsEventsListOptions = {baseUrl?: string | undefined, apiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const address = z.object({address: z.string(), city: z.string().nullable(), region: z.string().nullable(), country: z.string().nullable(), city_state: z.string().nullable(), full_address: z.string().nullable(), google_maps_place_id: z.string().nullable(), apple_maps_place_id: z.string().nullable(), description: z.string().nullable()}); export const registrationQuestion = z.union([z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("agree-check")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("company"), collect_job_title: z.boolean().nullable().optional(), job_title_label: z.string().nullable().optional()}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("github")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("instagram")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("linkedin")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("phone-number")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("select"), options: z.array(z.string()), multiple: z.boolean().nullable().optional()}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("telegram")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("text"), multiline: z.boolean().nullable().optional()}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("twitter")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("url")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), source: z.object({type: z.literal("calendar"), calendar_api_id: z.string(), question_id: z.string()}).nullable().optional(), question_type: z.literal("youtube")}), z.object({id: z.string(), label: z.string(), required: z.boolean(), question_type: z.literal("terms"), terms: z.union([z.object({content_type: z.literal("text"), content_md: z.string(), collect_signature: z.boolean(), require_review: z.boolean().optional()}), z.object({content_type: z.literal("link"), url: z.string(), collect_signature: z.boolean()})])})]); export const currency = z.enum(["solana_sol", "solana_usdc", "aed", "afn", "all", "amd", "ang", "aoa", "ars", "aud", "awg", "azn", "bam", "bbd", "bdt", "bgn", "bhd", "bif", "bmd", "bnd", "bob", "brl", "bsd", "bwp", "byn", "bzd", "cad", "cdf", "chf", "clp", "cny", "cop", "crc", "cve", "czk", "djf", "dkk", "dop", "dzd", "egp", "etb", "eur", "fjd", "fkp", "gbp", "gel", "ghs", "gip", "gmd", "gnf", "gtq", "gyd", "hkd", "hnl", "htg", "huf", "idr", "ils", "inr", "isk", "jmd", "jod", "jpy", "kes", "kgs", "khr", "kmf", "krw", "kwd", "kyd", "kzt", "lak", "lbp", "lkr", "lrd", "lsl", "mad", "mdl", "mga", "mkd", "mmk", "mnt", "mop", "mur", "mvr", "mwk", "mxn", "myr", "mzn", "nad", "ngn", "nio", "nok", "npr", "nzd", "omr", "pab", "pen", "pgk", "php", "pkr", "pln", "pyg", "qar", "ron", "rsd", "rub", "rwf", "sar", "sbd", "scr", "sek", "sgd", "shp", "sle", "sos", "srd", "std", "szl", "thb", "tjs", "tnd", "top", "try", "ttd", "twd", "tzs", "uah", "ugx", "usd", "uyu", "uzs", "vnd", "vuv", "wst", "xaf", "xcd", "xof", "xpf", "yer", "zar", "zmw"]); export const getApiV1OrganizationsEventsListResponse = z.object({entries: z.array(z.object({platform: z.literal("luma"), id: z.string(), user_id: z.string(), calendar_id: z.string(), start_at: z.string(), duration_interval: z.string(), end_at: z.string(), created_at: z.string(), timezone: z.string(), name: z.string(), geo_address_json: address.nullable(), coordinate: z.object({longitude: z.number(), latitude: z.number()}).nullable(), meeting_url: z.string().nullable(), location_type: z.enum(["discord", "meet", "twitch", "twitter", "youtube", "zoom", "offline", "missing", "unknown"]), location_visibility: z.enum(["public", "guests-only"]), cover_url: z.string(), registration_questions: z.array(registrationQuestion).optional(), url: z.string(), visibility: z.enum(["public", "members-only", "private"]), waitlist_status: z.enum(["disabled", "enabled"]), registration_open: z.boolean(), require_approval: z.boolean(), max_capacity: z.number().nullable(), can_register_for_multiple_tickets: z.boolean(), spots_remaining: z.number().nullable(), display_price: z.object({amount: z.number(), currency: currency, is_flexible: z.boolean()}).nullable(), feedback_email: z.object({enabled: z.boolean(), delay: z.string().optional()}), api_id: z.string(), user_api_id: z.string(), calendar_api_id: z.string(), zoom_meeting_url: z.string().nullable(), geo_latitude: z.string().nullable(), geo_longitude: z.string().nullable(), managing_calendars: z.array(z.object({id: z.string(), launch_status: z.enum(["launched", "coming-soon", "archived"]), tint_color: z.string().nullable(), name: z.string(), slug: z.string().nullable(), avatar_url: z.string().nullable(), url: z.string(), description: z.string().nullable(), social_image_url: z.string().nullable(), cover_image_url: z.string().nullable(), is_personal: z.boolean(), location: z.object({city: z.string(), region: z.string().nullable(), country: z.string().nullable(), country_code: z.string().nullable(), timezone: z.string()}).nullable(), coordinate: z.object({longitude: z.number(), latitude: z.number()}).nullable(), instagram_handle: z.string().nullable(), twitter_handle: z.string().nullable(), youtube_handle: z.string().nullable(), tiktok_handle: z.string().nullable(), linkedin_handle: z.string().nullable(), website: z.string().nullable(), status: z.enum(["approved", "pending"])}))})), has_more: z.boolean(), next_cursor: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * List Organization Events * * GET /v1/organizations/events/list */ export const getApiV1OrganizationsEventsList = async (args: GetApiV1OrganizationsEventsListArgs, options?: GetApiV1OrganizationsEventsListOptions) => { const {baseUrl = "https://public-api.luma.com", fetch: fetchFn = fetch, apiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.before != null) query.append("before", String(args.before)) if (args.after != null) query.append("after", String(args.after)) if (args.pagination_cursor != null) query.append("pagination_cursor", String(args.pagination_cursor)) if (args.pagination_limit != null) query.append("pagination_limit", String(args.pagination_limit)) if (args.sort_direction != null) query.append("sort_direction", String(args.sort_direction)) if (apiKeyAuth !== undefined) headers.set("x-luma-api-key", apiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/v1/organizations/events/list${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiV1OrganizationsEventsListResponse, await res.json()) };