@izak0s/spacebring-api 14.0.0 → 15.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/openapi-fetch/src/index.js","../src/error.ts","../src/core.ts","../src/generated/resources/altCurrencies.ts","../src/generated/resources/benefits.ts","../src/generated/resources/billing.ts","../src/generated/resources/checkIns.ts","../src/generated/resources/community.ts","../src/generated/resources/contracts.ts","../src/generated/resources/discounts.ts","../src/generated/resources/events.ts","../src/generated/resources/feed.ts","../src/generated/resources/floors.ts","../src/generated/resources/guides.ts","../src/generated/resources/locations.ts","../src/generated/resources/networks.ts","../src/generated/resources/packages.ts","../src/generated/resources/plans.ts","../src/generated/resources/registrations.ts","../src/generated/resources/resources.ts","../src/generated/resources/shop.ts","../src/generated/resources/subscriptions.ts","../src/generated/resources/support.ts","../src/generated/resources/transactions.ts","../src/generated/resources/visitors.ts","../src/generated/resources/index.ts","../src/client.ts"],"sourcesContent":["// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n return (\n typeof process === \"object\" &&\n Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n process.versions.undici\n );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (result instanceof Response) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors\n let error = await response.text();\n try {\n error = JSON.parse(error); // attempt to parse as JSON\n } catch {\n // noop\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType =\n headers.get instanceof Function\n ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n","import type { components } from \"./generated/schema.js\";\n\nexport type SpacebringErrorBody = components[\"schemas\"][\"responseError\"];\n\n/**\n * Error thrown when the Spacebring API responds with a non-2xx status.\n */\nexport class SpacebringError extends Error {\n /** HTTP status code of the failed response. */\n readonly status: number;\n /** Parsed error body returned by the API, if any. */\n readonly body: SpacebringErrorBody | undefined;\n /** The operation the request targeted, e.g. `GET /billing/invoices/v1/{invoiceId}`. */\n readonly operation: string | undefined;\n /** Full URL of the failed request, if known. */\n readonly url: string | undefined;\n\n constructor(status: number, body?: unknown, request?: { operation?: string; url?: string }) {\n const parsed = isErrorBody(body) ? body : undefined;\n let base = parsed?.message ?? `Spacebring API request failed with status ${status}`;\n // Validation errors carry the actual problems in an (untyped) issues array;\n // surface them so the message is actionable without dumping error.body.\n const issues = parsed ? issueSummary(parsed) : undefined;\n if (issues) base += ` — ${issues}`;\n super(request?.operation ? `${base} (${request.operation})` : base);\n this.name = \"SpacebringError\";\n this.status = status;\n this.body = parsed;\n this.operation = request?.operation;\n this.url = request?.url;\n }\n}\n\nfunction isErrorBody(body: unknown): body is SpacebringErrorBody {\n return typeof body === \"object\" && body !== null;\n}\n\n/** Compact \"path: message\" list from a zod-style `issues` array, if the body has one. */\nfunction issueSummary(body: object): string | undefined {\n const issues = (body as { issues?: unknown }).issues;\n if (!Array.isArray(issues) || issues.length === 0) return undefined;\n const parts = issues.slice(0, 3).map((issue) => {\n if (typeof issue !== \"object\" || issue === null) return String(issue);\n const { path, message } = issue as { path?: unknown; message?: unknown };\n const where = Array.isArray(path) && path.length > 0 ? path.join(\".\") : undefined;\n const what = typeof message === \"string\" ? message : JSON.stringify(issue);\n return where ? `${where}: ${what}` : what;\n });\n const more = issues.length > 3 ? `; +${issues.length - 3} more` : \"\";\n return parts.join(\"; \") + more;\n}\n","import { SpacebringError } from \"./error.js\";\n\n/** Client-level defaults threaded into the generated facade. */\nexport interface SpacebringDefaults {\n /** Sent as the `spacebring-network-id` header where the API requires it. */\n networkId?: string;\n}\n\n/** Per-request options accepted by every generated facade method. */\nexport interface SpacebringRequestOptions {\n /** Aborts the request — including any pending retry wait — when triggered. */\n signal?: AbortSignal;\n}\n\ninterface FetchResult<T> {\n data?: T;\n error?: unknown;\n response: Response;\n}\n\n/**\n * Unwraps an openapi-fetch result: returns `data` on success,\n * throws {@link SpacebringError} on any non-2xx response.\n */\nexport function unwrap<T>(result: FetchResult<T>, operation?: string): T {\n if (result.error !== undefined || !result.response.ok) {\n throw new SpacebringError(result.response.status, result.error, {\n operation,\n url: result.response.url || undefined,\n });\n }\n return result.data as T;\n}\n\n/**\n * Returns the single payload property of a success envelope,\n * throwing {@link SpacebringError} when the response has no usable body.\n */\nexport function unwrapProp<Envelope, Key extends keyof Envelope>(\n result: FetchResult<Envelope>,\n key: Key,\n operation?: string,\n): NonNullable<Envelope[Key]> {\n const value = unwrap(result, operation)?.[key];\n if (value === undefined || value === null) {\n throw new SpacebringError(\n result.response.status,\n { message: `Response is missing the \"${String(key)}\" property` },\n { operation, url: result.response.url || undefined },\n );\n }\n return value as NonNullable<Envelope[Key]>;\n}\n\n/**\n * Iterates every item of a paginated list endpoint, following\n * `nextPageToken` until the last page.\n */\nexport async function* paginate<Page extends { nextPageToken?: string }, Key extends keyof Page>(\n fetchPage: (nextPageToken: string | undefined) => Promise<Page>,\n itemsKey: Key,\n): AsyncGenerator<Page[Key] extends readonly (infer Item)[] | undefined ? Item : never, void, undefined> {\n let token: string | undefined;\n do {\n const page = await fetchPage(token);\n const items = (page[itemsKey] ?? []) as Iterable<never>;\n yield* items;\n const next = page.nextPageToken;\n if (next !== undefined && next === token) {\n throw new Error(\"Pagination did not advance: the API returned the same nextPageToken twice\");\n }\n token = next;\n } while (token);\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A AltCurrency entity as returned by the Spacebring API. */\nexport type AltCurrency = NonNullable<components[\"schemas\"][\"altCurrency\"]>;\n\n/** Query parameters for `sb.altCurrencies.list()`. */\nexport interface GetAltCurrenciesQuery {\n /** The id of the location */\n locationRef: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The number of items to return. */\n limit?: number;\n}\n\n/** Request body for `sb.altCurrencies.create()`. */\nexport type CreateAltCurrencyBody = NonNullable<NonNullable<operations[\"createAltCurrency\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"altCurrency\"]>;\n\n/** Request body for `sb.altCurrencies.update()`. */\nexport type UpdateAltCurrencyBody = NonNullable<NonNullable<operations[\"updateAltCurrency\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"altCurrency\"]>;\n\nexport function createAltcurrencies(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve alternative currencies\n *\n * Retrieve all alternative currencies in the location.\n */\n async list(query: GetAltCurrenciesQuery, options?: SpacebringRequestOptions): Promise<{ altCurrencies?: AltCurrency[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/alt_currencies/v1\", { params: { query }, signal: options?.signal }), \"GET /alt_currencies/v1\");\n },\n /**\n * Retrieve alternative currencies — iterates every item across all pages.\n *\n * Retrieve all alternative currencies in the location.\n */\n iterate(query: Omit<GetAltCurrenciesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<AltCurrency, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/alt_currencies/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /alt_currencies/v1\"),\n \"altCurrencies\",\n );\n },\n /**\n * Retrieve an alternative currency\n *\n * @param id The id of the alternative currency\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<AltCurrency> {\n return unwrapProp(await client.GET(\"/alt_currencies/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"altCurrency\", \"GET /alt_currencies/v1/{id}\");\n },\n /** Create an alternative currency */\n async create(altCurrency: CreateAltCurrencyBody, options?: SpacebringRequestOptions): Promise<AltCurrency> {\n return unwrapProp(await client.POST(\"/alt_currencies/v1\", { body: { altCurrency }, signal: options?.signal }), \"altCurrency\", \"POST /alt_currencies/v1\");\n },\n /**\n * Update an alternative currency\n *\n * @param id The id of the alternative currency\n * @param altCurrency The `altCurrency` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, altCurrency: UpdateAltCurrencyBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/alt_currencies/v1/{id}\", { params: { path: { id } }, body: { altCurrency }, signal: options?.signal }), \"PATCH /alt_currencies/v1/{id}\");\n },\n /**\n * Delete an alternative currency\n *\n * @param id The id of the alternative currency\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/alt_currencies/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /alt_currencies/v1/{id}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Application entity as returned by the Spacebring API. */\nexport type Application = NonNullable<components[\"schemas\"][\"benefitApplication\"]>;\n\n/** A Benefit entity as returned by the Spacebring API. */\nexport type Benefit = NonNullable<components[\"schemas\"][\"benefit\"]>;\n\n/** A BenefitCategory entity as returned by the Spacebring API. */\nexport type BenefitCategory = NonNullable<components[\"schemas\"][\"benefitCategory\"]>;\n\n/** A BenefitMedia entity as returned by the Spacebring API. */\nexport type BenefitMedia = NonNullable<operations[\"createBenefitMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.benefits.applications.list()`. */\nexport interface GetBenefitApplicationsQuery {\n /** UUID of the benefit. */\n benefitRef?: string;\n /** Filter by the category of the benefit applied for: the IDs of benefit categories. Comma-separated, one or more UUIDs. */\n categoryRef?: string;\n /** Filter applications submitted on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter applications submitted on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose applications to list. */\n customerRef?: string;\n /** Maximum number of applications per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. Omit locationRef, benefitRef, customerRef and userRef to list applications across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** UUID of the user whose applications to list. */\n userRef?: string;\n}\n\n/** Query parameters for `sb.benefits.categories.list()`. */\nexport interface GetBenefitCategoriesQuery {\n /** UUID of the location whose benefit categories to list, in member-facing order. Omit to list the categories of every location of the network. */\n locationRef?: string;\n}\n\n/** Query parameters for `sb.benefits.list()`. */\nexport interface GetBenefitsQuery {\n /** UUID of the benefit category. */\n categoryRef?: string;\n /** Filter by featured status. Pass true or false. */\n featured?: boolean;\n /** Maximum number of benefits per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. Omit both locationRef and categoryRef to list benefits across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.benefits.applications.create()`. */\nexport type ApplyBenefitBody = NonNullable<NonNullable<operations[\"applyBenefit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"application\"]>;\n\n/** Request body for `sb.benefits.create()`. */\nexport type CreateBenefitBody = NonNullable<NonNullable<operations[\"createBenefit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"benefit\"]>;\n\n/** Request body for `sb.benefits.categories.create()`. */\nexport type CreateBenefitCategoryBody = NonNullable<NonNullable<operations[\"createBenefitCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\n/** Request body for `sb.benefits.createMedia()`. */\nexport type CreateBenefitMediaBody = NonNullable<NonNullable<operations[\"createBenefitMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.benefits.update()`. */\nexport type UpdateBenefitBody = NonNullable<NonNullable<operations[\"updateBenefit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"benefit\"]>;\n\n/** Request body for `sb.benefits.categories.update()`. */\nexport type UpdateBenefitCategoryBody = NonNullable<NonNullable<operations[\"updateBenefitCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\nexport function createBenefits(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve benefits\n *\n * Retrieve all benefits in the location.\n */\n async list(query?: GetBenefitsQuery, options?: SpacebringRequestOptions): Promise<{ benefits: Benefit[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/benefits/v1\", { params: { query }, signal: options?.signal }), \"GET /benefits/v1\");\n },\n /**\n * Retrieve benefits — iterates every item across all pages.\n *\n * Retrieve all benefits in the location.\n */\n iterate(query?: Omit<GetBenefitsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Benefit, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/benefits/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /benefits/v1\"),\n \"benefits\",\n );\n },\n /**\n * Retrieve a benefit\n *\n * @param benefitId The id of the benefit.\n * @param options Request options (abort signal).\n */\n async get(benefitId: string, options?: SpacebringRequestOptions): Promise<Benefit> {\n return unwrapProp(await client.GET(\"/benefits/v1/{benefitId}\", { params: { path: { benefitId } }, signal: options?.signal }), \"benefit\", \"GET /benefits/v1/{benefitId}\");\n },\n /** Create a benefit */\n async create(benefit: CreateBenefitBody, options?: SpacebringRequestOptions): Promise<Benefit> {\n return unwrap(await client.POST(\"/benefits/v1\", { body: { benefit }, signal: options?.signal }), \"POST /benefits/v1\");\n },\n /**\n * Update a benefit\n *\n * @param benefitId The id of the benefit\n * @param benefit The `benefit` payload.\n * @param options Request options (abort signal).\n */\n async update(benefitId: string, benefit: UpdateBenefitBody, options?: SpacebringRequestOptions): Promise<Benefit> {\n return unwrapProp(await client.PUT(\"/benefits/v1/{benefitId}\", { params: { path: { benefitId } }, body: { benefit }, signal: options?.signal }), \"benefit\", \"PUT /benefits/v1/{benefitId}\");\n },\n /**\n * Delete a benefit\n *\n * @param benefitId The id of the benefit\n * @param options Request options (abort signal).\n */\n async delete(benefitId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/benefits/v1/{benefitId}\", { params: { path: { benefitId } }, signal: options?.signal }), \"DELETE /benefits/v1/{benefitId}\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for a benefit cover image. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `media[0].key` when creating or updating a benefit within an hour; an image that is not attached by then is discarded.\n */\n async createMedia(media: CreateBenefitMediaBody, options?: SpacebringRequestOptions): Promise<BenefitMedia> {\n return unwrapProp(await client.POST(\"/benefits/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /benefits/v1/media\");\n },\n applications: {\n /**\n * Retrieve applications\n *\n * Retrieve all benefit applications in the location or for certain benefit.\n */\n async list(query?: GetBenefitApplicationsQuery, options?: SpacebringRequestOptions): Promise<{ applications: Application[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/benefits/applications/v1\", { params: { query }, signal: options?.signal }), \"GET /benefits/applications/v1\");\n },\n /**\n * Retrieve applications — iterates every item across all pages.\n *\n * Retrieve all benefit applications in the location or for certain benefit.\n */\n iterate(query?: Omit<GetBenefitApplicationsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Application, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/benefits/applications/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /benefits/applications/v1\"),\n \"applications\",\n );\n },\n /**\n * Retrieve an application\n *\n * Retrieve a benefit application by id.\n *\n * @param benefitApplicationId The id of the benefit application.\n * @param options Request options (abort signal).\n */\n async get(benefitApplicationId: string, options?: SpacebringRequestOptions): Promise<Application> {\n return unwrapProp(await client.GET(\"/benefits/applications/v1/{benefitApplicationId}\", { params: { path: { benefitApplicationId } }, signal: options?.signal }), \"application\", \"GET /benefits/applications/v1/{benefitApplicationId}\");\n },\n /** Apply for a benefit */\n async create(application: ApplyBenefitBody, options?: SpacebringRequestOptions): Promise<Application> {\n return unwrapProp(await client.POST(\"/benefits/applications/v1\", { body: { application }, signal: options?.signal }), \"application\", \"POST /benefits/applications/v1\");\n },\n },\n categories: {\n /**\n * Retrieve categories\n *\n * Retrieve all benefit categories in the location.\n */\n async list(query?: GetBenefitCategoriesQuery, options?: SpacebringRequestOptions): Promise<BenefitCategory[]> {\n return unwrapProp(await client.GET(\"/benefits/categories/v1\", { params: { query }, signal: options?.signal }), \"categories\", \"GET /benefits/categories/v1\");\n },\n /**\n * Get a category\n *\n * Get a benefit category.\n *\n * @param categoryId The id of the benefit category.\n * @param options Request options (abort signal).\n */\n async get(categoryId: string, options?: SpacebringRequestOptions): Promise<BenefitCategory> {\n return unwrapProp(await client.GET(\"/benefits/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"category\", \"GET /benefits/categories/v1/{categoryId}\");\n },\n /**\n * Create a category\n *\n * Create a benefit category.\n */\n async create(category: CreateBenefitCategoryBody, options?: SpacebringRequestOptions): Promise<BenefitCategory> {\n return unwrapProp(await client.POST(\"/benefits/categories/v1\", { body: { category }, signal: options?.signal }), \"category\", \"POST /benefits/categories/v1\");\n },\n /**\n * Update a category\n *\n * Update a benefit category.\n *\n * @param categoryId The id of the benefit category\n * @param category The `category` payload.\n * @param options Request options (abort signal).\n */\n async update(categoryId: string, category: UpdateBenefitCategoryBody, options?: SpacebringRequestOptions): Promise<BenefitCategory> {\n return unwrapProp(await client.PUT(\"/benefits/categories/v1/{categoryId}\", { params: { path: { categoryId } }, body: { category }, signal: options?.signal }), \"category\", \"PUT /benefits/categories/v1/{categoryId}\");\n },\n /**\n * Delete a category\n *\n * Delete a benefit category.\n *\n * @param categoryId The id of the benefit category\n * @param options Request options (abort signal).\n */\n async delete(categoryId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/benefits/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"DELETE /benefits/categories/v1/{categoryId}\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A CreditNote entity as returned by the Spacebring API. */\nexport type CreditNote = NonNullable<components[\"schemas\"][\"creditNote\"]>;\n\n/** A Invoice entity as returned by the Spacebring API. */\nexport type Invoice = NonNullable<components[\"schemas\"][\"invoice\"]>;\n\n/** A InvoiceItem entity as returned by the Spacebring API. */\nexport type InvoiceItem = NonNullable<components[\"schemas\"][\"invoiceItem\"]>;\n\n/** A Payment entity as returned by the Spacebring API. */\nexport type Payment = NonNullable<components[\"schemas\"][\"invoicePayment\"]>;\n\n/** A UpcomingItem entity as returned by the Spacebring API. */\nexport type UpcomingItem = NonNullable<components[\"schemas\"][\"invoiceItem\"]>;\n\n/** Query parameters for `sb.billing.creditNotes.list()`. */\nexport interface GetCreditNotesQuery {\n /** Filter credit notes created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter credit notes created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the invoice whose credit notes to list. */\n invoiceRef?: string;\n /** Maximum number of credit notes per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose credit notes to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by credit note status: issued (in effect) or voided (cancelled and no longer valid). Comma-separated, one or more of: issued, voided. */\n status?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.list()`. */\nexport interface GetInvoicesQuery {\n /** @deprecated Use customerRef instead. UUID of the company whose invoices to list. */\n companyRef?: string;\n /** Filter invoices created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter invoices created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose invoices to list. */\n customerRef?: string;\n /** Filter invoices issued on or after this date (ISO 8601). Use with issueDate[lte] for a range. */\n \"issueDate[gte]\"?: string;\n /** Filter invoices issued on or before this date (ISO 8601). Use with issueDate[gte] for a range. */\n \"issueDate[lte]\"?: string;\n /** Maximum number of invoices per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose invoices to list. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. UUID of the membership whose invoices to list. */\n membershipRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Case-insensitive search by invoice code or number. Requires customerRef or locationRef. */\n q?: string;\n /** Filter by invoice status: draft (created but not sent), issued (sent to the customer but unpaid), paid (fully paid) or voided (cancelled and no longer valid). Comma-separated, one or more of: draft, issued, paid, voided. */\n status?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.items.getUpcoming()`. */\nexport interface GetUpcomingInvoiceItemsQuery {\n /** The id of the company. */\n companyRef?: string;\n /** The id of the customer. */\n customerRef?: string;\n /** The id of the membership. */\n membershipRef?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.getUpcoming()`. */\nexport interface GetUpcomingInvoiceQuery {\n /** The id of the subscription. */\n subscriptionRef?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.items.list()`. */\nexport interface ListInvoiceItemsQuery {\n /** Filter invoice items created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter invoice items created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose invoice items to list. */\n customerRef?: string;\n /** Filter invoice items on invoices issued on or after this date (ISO 8601). Items not on an issued invoice are excluded. Use with issueDate[lte] for a range. */\n \"issueDate[gte]\"?: string;\n /** Filter invoice items on invoices issued on or before this date (ISO 8601). Items not on an issued invoice are excluded. Use with issueDate[gte] for a range. */\n \"issueDate[lte]\"?: string;\n /** Maximum number of invoice items per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose invoice items to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by the status of the invoice the item is on: draft (created but not sent), issued (sent to the customer but unpaid), paid (fully paid) or voided (cancelled and no longer valid). Items not on an invoice are excluded. Comma-separated, one or more of: draft, issued, paid, voided. */\n status?: string;\n /** UUID of the invoice whose items to list, in place of customerRef or locationRef or with them. Pages and sorts like the rest of the list, and the other filters still apply. */\n invoiceRef?: string;\n /** Filter by whether the item is pending: not on an invoice and not part of a subscription. Pass true or false. */\n pending?: \"true\" | \"false\";\n /** Filter by invoice item type. Comma-separated, one or more of: creditPackage, custom, booking, eventTicket, subscription, order. */\n type?: string;\n}\n\n/** Request body for `sb.billing.creditNotes.create()`. */\nexport type CreateCreditNoteBody = NonNullable<NonNullable<operations[\"createCreditNote\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"creditNote\"]>;\n\n/** Request body for `sb.billing.invoices.create()`. */\nexport type CreateInvoiceBody = NonNullable<operations[\"createInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.billing.invoices.items.create()`. */\nexport type CreateInvoiceItemBody = NonNullable<NonNullable<operations[\"createInvoiceItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"invoiceItem\"]>;\n\n/** Request body for `sb.billing.invoices.issue()`. */\nexport type IssueInvoiceBody = NonNullable<NonNullable<operations[\"issueInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"skipAutoCharge\"]>;\n\n/** Request body for `sb.billing.invoices.pay()`. */\nexport type PayInvoiceBody = NonNullable<operations[\"payInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.billing.creditNotes.preview()`. */\nexport type PreviewCreditNoteBody = NonNullable<NonNullable<operations[\"previewCreditNote\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"creditNote\"]>;\n\n/** Request body for `sb.billing.creditNotes.update()`. */\nexport type UpdateCreditNoteBody = NonNullable<NonNullable<operations[\"updateCreditNote\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"creditNote\"]>;\n\n/** Request body for `sb.billing.invoices.update()`. */\nexport type UpdateInvoiceBody = NonNullable<NonNullable<operations[\"updateInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"invoice\"]>;\n\n/** Request body for `sb.billing.invoices.items.update()`. */\nexport type UpdateInvoiceItemBody = NonNullable<NonNullable<operations[\"updateInvoiceItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"invoiceItem\"]>;\n\nexport function createBilling(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n creditNotes: {\n /**\n * Retrieve credit notes\n *\n * Retrieve all credit notes for a specific invoice or location. One of invoiceRef or locationRef is required.\n */\n async list(query?: GetCreditNotesQuery, options?: SpacebringRequestOptions): Promise<{ creditNotes: CreditNote[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/billing/credit_notes/v1\", { params: { query }, signal: options?.signal }), \"GET /billing/credit_notes/v1\");\n },\n /**\n * Retrieve credit notes — iterates every item across all pages.\n *\n * Retrieve all credit notes for a specific invoice or location. One of invoiceRef or locationRef is required.\n */\n iterate(query?: Omit<GetCreditNotesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CreditNote, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/billing/credit_notes/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /billing/credit_notes/v1\"),\n \"creditNotes\",\n );\n },\n /**\n * Retrieve a credit note\n *\n * Retrieve a specific credit note.\n *\n * @param id The id of the credit note\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<CreditNote> {\n return unwrapProp(await client.GET(\"/billing/credit_notes/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"creditNote\", \"GET /billing/credit_notes/v1/{id}\");\n },\n /**\n * Create a credit note\n *\n * Create a credit note for an invoice.\n */\n async create(creditNote: CreateCreditNoteBody, options?: SpacebringRequestOptions): Promise<CreditNote> {\n return unwrapProp(await client.POST(\"/billing/credit_notes/v1\", { body: { creditNote }, signal: options?.signal }), \"creditNote\", \"POST /billing/credit_notes/v1\");\n },\n /**\n * Update a credit note\n *\n * @param id The id of the credit note\n * @param creditNote The `creditNote` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, creditNote: UpdateCreditNoteBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/credit_notes/v1/{id}\", { params: { path: { id } }, body: { creditNote }, signal: options?.signal }), \"PATCH /billing/credit_notes/v1/{id}\");\n },\n /**\n * Preview a credit note\n *\n * Preview a credit note for an invoice without creating it.\n */\n async preview(creditNote: PreviewCreditNoteBody, options?: SpacebringRequestOptions): Promise<CreditNote> {\n return unwrapProp(await client.POST(\"/billing/credit_notes/v1/preview\", { body: { creditNote }, signal: options?.signal }), \"creditNote\", \"POST /billing/credit_notes/v1/preview\");\n },\n },\n invoices: {\n /**\n * Retrieve invoices\n *\n * Retrieve all invoices based on certain parameters.\n */\n async list(query?: GetInvoicesQuery, options?: SpacebringRequestOptions): Promise<{ invoices: Invoice[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/billing/invoices/v1\", { params: { query }, signal: options?.signal }), \"GET /billing/invoices/v1\");\n },\n /**\n * Retrieve invoices — iterates every item across all pages.\n *\n * Retrieve all invoices based on certain parameters.\n */\n iterate(query?: Omit<GetInvoicesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Invoice, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/billing/invoices/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /billing/invoices/v1\"),\n \"invoices\",\n );\n },\n /**\n * Retrieve an invoice\n *\n * Retrieve a certain invoice.\n *\n * @param invoiceId The id of the invoice.\n * @param options Request options (abort signal).\n */\n async get(invoiceId: string, options?: SpacebringRequestOptions): Promise<Invoice> {\n return unwrapProp(await client.GET(\"/billing/invoices/v1/{invoiceId}\", { params: { path: { invoiceId } }, signal: options?.signal }), \"invoice\", \"GET /billing/invoices/v1/{invoiceId}\");\n },\n /**\n * Create an invoice\n *\n * Create an invoice for a member or a company.\n */\n async create(body: CreateInvoiceBody, options?: SpacebringRequestOptions): Promise<Invoice> {\n return unwrapProp(await client.POST(\"/billing/invoices/v1\", { body, signal: options?.signal }), \"invoice\", \"POST /billing/invoices/v1\");\n },\n /**\n * Update an invoice\n *\n * Update a draft invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param invoice The `invoice` payload.\n * @param options Request options (abort signal).\n */\n async update(invoiceId: string, invoice: UpdateInvoiceBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/invoices/v1/{invoiceId}\", { params: { path: { invoiceId } }, body: { invoice }, signal: options?.signal }), \"PATCH /billing/invoices/v1/{invoiceId}\");\n },\n /**\n * Delete an invoice\n *\n * Delete a draft invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async delete(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/billing/invoices/v1/{invoiceId}\", { params: { path: { invoiceId } }, signal: options?.signal }), \"DELETE /billing/invoices/v1/{invoiceId}\");\n },\n /**\n * Cancel a payment\n *\n * Cancel a payment on an invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async cancelPayment(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/cancel_payment\", { params: { path: { invoiceId } }, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/cancel_payment\");\n },\n /**\n * Duplicate an invoice\n *\n * Duplicate an invoice, creating a new draft invoice with the same items.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async duplicate(invoiceId: string, options?: SpacebringRequestOptions): Promise<Invoice> {\n return unwrapProp(await client.POST(\"/billing/invoices/v1/{invoiceId}/duplicate\", { params: { path: { invoiceId } }, signal: options?.signal }), \"invoice\", \"POST /billing/invoices/v1/{invoiceId}/duplicate\");\n },\n /**\n * Retrieve the upcoming invoice\n *\n * Retrieve the upcoming invoice preview for a membership or subscription.\n */\n async getUpcoming(query?: GetUpcomingInvoiceQuery, options?: SpacebringRequestOptions): Promise<{ invoice?: Invoice; invoiceItems?: InvoiceItem[]; upcomingItems?: UpcomingItem[] }> {\n return unwrap(await client.GET(\"/billing/invoices/v1/upcoming\", { params: { query }, signal: options?.signal }), \"GET /billing/invoices/v1/upcoming\");\n },\n /**\n * Issue an invoice\n *\n * Issue (finalize) a draft invoice, making it ready for payment.\n *\n * @param invoiceId The id of an invoice.\n * @param skipAutoCharge The `skipAutoCharge` payload.\n * @param options Request options (abort signal).\n */\n async issue(invoiceId: string, skipAutoCharge?: IssueInvoiceBody, options?: SpacebringRequestOptions): Promise<{ invoice?: Invoice; invoiceItems?: InvoiceItem[] }> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/issue\", { params: { path: { invoiceId } }, body: skipAutoCharge === undefined ? undefined : { skipAutoCharge }, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/issue\");\n },\n /**\n * Pay an invoice\n *\n * Mark an invoice as paid by `External Payment`.\n *\n * @param invoiceId The id of an invoice\n * @param body Request body.\n * @param options Request options (abort signal).\n */\n async pay(invoiceId: string, body: PayInvoiceBody, options?: SpacebringRequestOptions): Promise<{ invoice?: Invoice; payment?: Payment }> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/pay\", { params: { path: { invoiceId } }, body, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/pay\");\n },\n /**\n * Resend an invoice\n *\n * Resend an issued invoice notification to the customer.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async resend(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/resend\", { params: { path: { invoiceId } }, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/resend\");\n },\n /**\n * Void an invoice\n *\n * Void an issued invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async void(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/invoices/v1/{invoiceId}/void\", { params: { path: { invoiceId } }, signal: options?.signal }), \"PATCH /billing/invoices/v1/{invoiceId}/void\");\n },\n items: {\n /**\n * List invoice items\n *\n * List invoice items filtered by customer, location, invoice, type, status, pending, or date range. Pass invoiceRef for the items of one invoice; they page like the rest of the list. The createDate filter matches when the item was created; the status and issueDate filters match the invoice the item is on, so they return only items connected to an invoice. Pending items are not on an invoice and not part of a subscription: pass pending=true with customerRef for one customer's pending items, or with locationRef for every pending item at a location.\n */\n async list(query?: ListInvoiceItemsQuery, options?: SpacebringRequestOptions): Promise<{ invoiceItems: InvoiceItem[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/billing/invoices/v1/items\", { params: { query }, signal: options?.signal }), \"GET /billing/invoices/v1/items\");\n },\n /**\n * List invoice items — iterates every item across all pages.\n *\n * List invoice items filtered by customer, location, invoice, type, status, pending, or date range. Pass invoiceRef for the items of one invoice; they page like the rest of the list. The createDate filter matches when the item was created; the status and issueDate filters match the invoice the item is on, so they return only items connected to an invoice. Pending items are not on an invoice and not part of a subscription: pass pending=true with customerRef for one customer's pending items, or with locationRef for every pending item at a location.\n */\n iterate(query?: Omit<ListInvoiceItemsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<InvoiceItem, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/billing/invoices/v1/items\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /billing/invoices/v1/items\"),\n \"invoiceItems\",\n );\n },\n /**\n * Retrieve an invoice item\n *\n * Retrieve a specific invoice item.\n *\n * @param id The id of an invoice item.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<InvoiceItem> {\n return unwrapProp(await client.GET(\"/billing/invoices/v1/items/{id}\", { params: { path: { id } }, signal: options?.signal }), \"invoiceItem\", \"GET /billing/invoices/v1/items/{id}\");\n },\n /**\n * Create an invoice item\n *\n * Create an item in an invoice.\n */\n async create(invoiceItem: CreateInvoiceItemBody, options?: SpacebringRequestOptions): Promise<InvoiceItem> {\n return unwrapProp(await client.POST(\"/billing/invoices/v1/items\", { body: { invoiceItem }, signal: options?.signal }), \"invoiceItem\", \"POST /billing/invoices/v1/items\");\n },\n /**\n * Update an invoice item\n *\n * Update an invoice item on a draft invoice.\n *\n * @param id The id of an invoice item.\n * @param invoiceItem The `invoiceItem` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, invoiceItem: UpdateInvoiceItemBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/invoices/v1/items/{id}\", { params: { path: { id } }, body: { invoiceItem }, signal: options?.signal }), \"PATCH /billing/invoices/v1/items/{id}\");\n },\n /**\n * Delete an invoice item\n *\n * Delete an invoice item from a draft invoice.\n *\n * @param id The id of an invoice item.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/billing/invoices/v1/items/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /billing/invoices/v1/items/{id}\");\n },\n /**\n * List upcoming invoice items\n *\n * List a customer's pending invoice items. Deprecated: use List invoice items with `pending=true` and `customerRef` instead.\n *\n * @deprecated Marked as deprecated in the OpenAPI spec.\n */\n async getUpcoming(query?: GetUpcomingInvoiceItemsQuery, options?: SpacebringRequestOptions): Promise<InvoiceItem[]> {\n return unwrapProp(await client.GET(\"/billing/invoices/v1/items/upcoming\", { params: { query }, signal: options?.signal }), \"invoiceItems\", \"GET /billing/invoices/v1/items/upcoming\");\n },\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** A CheckIn entity as returned by the Spacebring API. */\nexport type CheckIn = NonNullable<operations[\"getCheckIn\"][\"responses\"][200][\"content\"][\"application/json\"][\"checkIn\"]>;\n\n/** Query parameters for `sb.checkIns.list()`. */\nexport interface GetCheckInsQuery {\n /** Filter check-ins whose arrival is on or after this date (ISO 8601). Use with checkInDate[lte] for a range. */\n \"checkInDate[gte]\"?: string;\n /** Filter check-ins whose arrival is on or before this date (ISO 8601). Use with checkInDate[gte] for a range. */\n \"checkInDate[lte]\"?: string;\n /** Maximum number of check-ins per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. */\n locationRef: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by status: 'scheduled' nobody has arrived yet, 'checkedIn' the person is on site, 'checkedOut' they left, 'expired' the window closed with nobody arriving. Defaults to every status. Comma-separated, one or more of: checkedIn, checkedOut, scheduled, expired. */\n status?: string;\n /** Filter by what the check-in is for: 'deskBooking' and 'roomBooking' a booking, 'eventTicket' an event ticket, 'visit' a visit, 'subscription' a member arriving with their personal code. Defaults to every type. Comma-separated, one or more of: deskBooking, roomBooking, eventTicket, visit, subscription. */\n type?: string;\n /** UUID of the user to filter check-ins by. Defaults to check-ins of every user. */\n userRef?: string;\n}\n\n/** Request body for `sb.checkIns.checkIn()`. */\nexport type CheckInBody = NonNullable<operations[\"checkIn\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.checkIns.checkOut()`. */\nexport type CheckOutBody = NonNullable<operations[\"checkOut\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\nexport function createCheckins(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve check-ins\n *\n * Retrieve the check-ins of a location, newest arrival first. With bearer token authentication, the user must be an administrator of the location.\n */\n async list(query: GetCheckInsQuery, options?: SpacebringRequestOptions): Promise<{ checkIns: CheckIn[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/check_ins/v1\", { params: { query }, signal: options?.signal }), \"GET /check_ins/v1\");\n },\n /**\n * Retrieve check-ins — iterates every item across all pages.\n *\n * Retrieve the check-ins of a location, newest arrival first. With bearer token authentication, the user must be an administrator of the location.\n */\n iterate(query: Omit<GetCheckInsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CheckIn, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/check_ins/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /check_ins/v1\"),\n \"checkIns\",\n );\n },\n /**\n * Get a check-in\n *\n * Get a check-in by its id. With bearer token authentication, the user must be an administrator of the check-in's location.\n *\n * @param checkInId The ID of the check-in.\n * @param options Request options (abort signal).\n */\n async get(checkInId: string, options?: SpacebringRequestOptions): Promise<CheckIn> {\n return unwrapProp(await client.GET(\"/check_ins/v1/{checkInId}\", { params: { path: { checkInId } }, signal: options?.signal }), \"checkIn\", \"GET /check_ins/v1/{checkInId}\");\n },\n /**\n * Check in\n *\n * Record an arrival for a booking, an event ticket, a visit, or a member's subscription. Identify what to check in with its check-in id, with the location and a six-digit code, or with the location and a customer ref to check a member in without a code. With bearer token authentication, the user must be an administrator of the location.\n */\n async checkIn(body: CheckInBody, options?: SpacebringRequestOptions): Promise<CheckIn> {\n return unwrapProp(await client.POST(\"/check_ins/v1/checkin\", { body, signal: options?.signal }), \"checkIn\", \"POST /check_ins/v1/checkin\");\n },\n /**\n * Check out\n *\n * Record a departure on an open check-in. Identify it with its check-in id, or with the location and the six-digit code it was opened with. With bearer token authentication, the user must be an administrator of the location.\n */\n async checkOut(body: CheckOutBody, options?: SpacebringRequestOptions): Promise<CheckIn> {\n return unwrapProp(await client.POST(\"/check_ins/v1/checkout\", { body, signal: options?.signal }), \"checkIn\", \"POST /check_ins/v1/checkout\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Company entity as returned by the Spacebring API. */\nexport type Company = NonNullable<components[\"schemas\"][\"company\"]>;\n\n/** A CompanyMedia entity as returned by the Spacebring API. */\nexport type CompanyMedia = NonNullable<operations[\"createCompanyMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A Membership entity as returned by the Spacebring API. */\nexport type Membership = NonNullable<components[\"schemas\"][\"membership\"]>;\n\n/** Query parameters for `sb.community.companies.list()`. */\nexport interface GetCompaniesQuery {\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by company's title */\n title?: string;\n /** Filter by types. Pass them as comma separated values. */\n types?: \"member\" | \"nonmember\";\n}\n\n/** Query parameters for `sb.community.memberships.listDeleted()`. */\nexport interface GetMembershipsDeletedQuery {\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Filter by user's email */\n userEmail?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\n/** Query parameters for `sb.community.memberships.list()`. */\nexport interface GetMembershipsQuery {\n /** Filter by company reference */\n companyRef?: string;\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by user's email */\n userEmail?: string;\n /** The id of the user */\n userRef?: string;\n /** use requested to get all membership requests */\n status?: \"requested\";\n /** Filter by types. Pass them as comma separated values. */\n types?: \"member\" | \"nonmember\";\n}\n\n/** Request body for `sb.community.companies.create()`. */\nexport type CreateCompanyBody = NonNullable<NonNullable<operations[\"createCompany\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"company\"]>;\n\n/** Request body for `sb.community.companies.createMedia()`. */\nexport type CreateCompanyMediaBody = NonNullable<NonNullable<operations[\"createCompanyMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.community.memberships.create()`. */\nexport type CreateMembershipBody = NonNullable<operations[\"createMembership\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.community.companies.update()`. */\nexport type UpdateCompanyBody = NonNullable<NonNullable<operations[\"updateCompany\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"company\"]>;\n\n/** Request body for `sb.community.memberships.update()`. */\nexport type UpdateMembershipBody = NonNullable<NonNullable<operations[\"updateMembership\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"membership\"]>;\n\nexport function createCommunity(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n companies: {\n /**\n * Retrieve companies\n *\n * Retrieve all companies.\n */\n async list(query: GetCompaniesQuery, options?: SpacebringRequestOptions): Promise<{ companies?: Company[]; nextPageToken?: string }> {\n return unwrap(await client.GET(\"/community/companies/v1\", { params: { query }, signal: options?.signal }), \"GET /community/companies/v1\");\n },\n /**\n * Retrieve companies — iterates every item across all pages.\n *\n * Retrieve all companies.\n */\n iterate(query: Omit<GetCompaniesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Company, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/community/companies/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /community/companies/v1\"),\n \"companies\",\n );\n },\n /**\n * Retrieve a company\n *\n * Retrieve a certain company.\n *\n * @param id The id of company.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Company> {\n return unwrapProp(await client.GET(\"/community/companies/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"company\", \"GET /community/companies/v1/{id}\");\n },\n /** Create a company */\n async create(company: CreateCompanyBody, options?: SpacebringRequestOptions): Promise<Company> {\n return unwrapProp(await client.POST(\"/community/companies/v1\", { body: { company }, signal: options?.signal }), \"company\", \"POST /community/companies/v1\");\n },\n /**\n * Update a company\n *\n * Update a certain company.\n *\n * @param id The id of the company.\n * @param company The `company` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, company: UpdateCompanyBody, options?: SpacebringRequestOptions): Promise<Company> {\n return unwrapProp(await client.PUT(\"/community/companies/v1/{id}\", { params: { path: { id } }, body: { company }, signal: options?.signal }), \"company\", \"PUT /community/companies/v1/{id}\");\n },\n /**\n * Create a logo upload\n *\n * Create an upload for a company logo. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `logo.key` when creating or updating a company within an hour; a logo that is not attached by then is discarded.\n */\n async createMedia(media: CreateCompanyMediaBody, options?: SpacebringRequestOptions): Promise<CompanyMedia> {\n return unwrapProp(await client.POST(\"/community/companies/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /community/companies/v1/media\");\n },\n },\n memberships: {\n /**\n * Retrieve memberships\n *\n * Retrieve all memberships.\n */\n async list(query: GetMembershipsQuery, options?: SpacebringRequestOptions): Promise<{ memberships?: Membership[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/community/memberships/v1\", { params: { query }, signal: options?.signal }), \"GET /community/memberships/v1\");\n },\n /**\n * Retrieve memberships — iterates every item across all pages.\n *\n * Retrieve all memberships.\n */\n iterate(query: Omit<GetMembershipsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Membership, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/community/memberships/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /community/memberships/v1\"),\n \"memberships\",\n );\n },\n /**\n * Retrieve a membership\n *\n * Retrieve a certain membership.\n *\n * @param id The id of membership.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Membership> {\n return unwrapProp(await client.GET(\"/community/memberships/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"membership\", \"GET /community/memberships/v1/{id}\");\n },\n /**\n * Create a membership\n *\n * Create a membership and send an email invitation to join if type is member.\n */\n async create(body: CreateMembershipBody, options?: SpacebringRequestOptions): Promise<Membership> {\n return unwrapProp(await client.POST(\"/community/memberships/v1\", { body, signal: options?.signal }), \"membership\", \"POST /community/memberships/v1\");\n },\n /**\n * Update a membership\n *\n * Update a certain membership.\n *\n * @param id The id of the membership.\n * @param membership The `membership` payload.\n * @param options Request options (abort signal).\n */\n async update(id: number, membership: UpdateMembershipBody, options?: SpacebringRequestOptions): Promise<Membership> {\n return unwrapProp(await client.PUT(\"/community/memberships/v1/{id}\", { params: { path: { id } }, body: { membership }, signal: options?.signal }), \"membership\", \"PUT /community/memberships/v1/{id}\");\n },\n /**\n * Delete a membership\n *\n * Delete a certain membership.\n *\n * @param id The id of the membership.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/community/memberships/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /community/memberships/v1/{id}\");\n },\n /**\n * Retrieve deleted memberships — iterates every item across all pages.\n *\n * Retrieve all deleted memberships.\n */\n iterateDeleted(query: Omit<GetMembershipsDeletedQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Membership, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/community/memberships/v1/deleted\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /community/memberships/v1/deleted\"),\n \"memberships\",\n );\n },\n /**\n * Retrieve deleted memberships\n *\n * Retrieve all deleted memberships.\n */\n async listDeleted(query: GetMembershipsDeletedQuery, options?: SpacebringRequestOptions): Promise<{ memberships?: Membership[]; nextPageToken?: string }> {\n return unwrap(await client.GET(\"/community/memberships/v1/deleted\", { params: { query }, signal: options?.signal }), \"GET /community/memberships/v1/deleted\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** A Contract entity as returned by the Spacebring API. */\nexport type Contract = NonNullable<operations[\"getContract\"][\"responses\"][200][\"content\"][\"application/json\"][\"contract\"]>;\n\n/** A Template entity as returned by the Spacebring API. */\nexport type Template = NonNullable<operations[\"getTemplate\"][\"responses\"][200][\"content\"][\"application/json\"][\"template\"]>;\n\n/** A TemplateMedia entity as returned by the Spacebring API. */\nexport type TemplateMedia = NonNullable<operations[\"createTemplateMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.contracts.list()`. */\nexport interface GetContractsQuery {\n /** Filter contracts created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter contracts created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer (membership or company). When set, returns only that customer's contracts. */\n customerRef?: string;\n /** Maximum number of contracts per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. When set, returns contracts in that location. Omit both locationRef and customerRef to list contracts across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Case-insensitive search by contract title, within customerRef or locationRef when given and across the network otherwise. */\n q?: string;\n /** Filter by status: 'draft' created and not sent yet, 'issued' sent and waiting for signatures, 'signed' signed by everyone and active, 'declined' a signer declined it or it expired unsigned, 'terminated' ended by an admin after it was signed. Defaults to every status. Comma-separated, one or more of: draft, issued, signed, declined, terminated. */\n status?: string;\n}\n\n/** Query parameters for `sb.contracts.templates.list()`. */\nexport interface GetTemplatesQuery {\n /** Maximum number of templates per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose templates to list. Omit to list templates across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.contracts.create()`. */\nexport type CreateContractBody = NonNullable<NonNullable<operations[\"createContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"contract\"]>;\n\n/** Request body for `sb.contracts.templates.create()`. */\nexport type CreateTemplateBody = NonNullable<NonNullable<operations[\"createTemplate\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"template\"]>;\n\n/** Request body for `sb.contracts.templates.createMedia()`. */\nexport type CreateTemplateMediaBody = NonNullable<NonNullable<operations[\"createTemplateMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.contracts.issue()`. */\nexport type IssueContractBody = NonNullable<NonNullable<operations[\"issueContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"signatureMethod\"]>;\n\n/** Request body for `sb.contracts.terminate()`. */\nexport type TerminateContractBody = NonNullable<NonNullable<operations[\"terminateContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"reason\"]>;\n\n/** Request body for `sb.contracts.update()`. */\nexport type UpdateContractBody = NonNullable<NonNullable<operations[\"updateContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"contract\"]>;\n\n/** Request body for `sb.contracts.templates.update()`. */\nexport type UpdateTemplateBody = NonNullable<NonNullable<operations[\"updateTemplate\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"template\"]>;\n\nexport function createContracts(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve contracts\n *\n * Retrieve all contracts in the location.\n */\n async list(query?: GetContractsQuery, options?: SpacebringRequestOptions): Promise<{ contracts: Contract[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/contracts/v1\", { params: { query }, signal: options?.signal }), \"GET /contracts/v1\");\n },\n /**\n * Retrieve contracts — iterates every item across all pages.\n *\n * Retrieve all contracts in the location.\n */\n iterate(query?: Omit<GetContractsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Contract, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/contracts/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /contracts/v1\"),\n \"contracts\",\n );\n },\n /**\n * Get a contract\n *\n * @param contractId The id of the contract.\n * @param options Request options (abort signal).\n */\n async get(contractId: string, options?: SpacebringRequestOptions): Promise<Contract> {\n return unwrapProp(await client.GET(\"/contracts/v1/{contractId}\", { params: { path: { contractId } }, signal: options?.signal }), \"contract\", \"GET /contracts/v1/{contractId}\");\n },\n /** Create a contract */\n async create(contract: CreateContractBody, options?: SpacebringRequestOptions): Promise<Contract> {\n return unwrapProp(await client.POST(\"/contracts/v1\", { body: { contract }, signal: options?.signal }), \"contract\", \"POST /contracts/v1\");\n },\n /**\n * Update a contract\n *\n * @param contractId The id of the contract.\n * @param contract The `contract` payload.\n * @param options Request options (abort signal).\n */\n async update(contractId: string, contract: UpdateContractBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/contracts/v1/{contractId}\", { params: { path: { contractId } }, body: { contract }, signal: options?.signal }), \"PATCH /contracts/v1/{contractId}\");\n },\n /**\n * Delete a contract\n *\n * @param contractId The id of the contract.\n * @param options Request options (abort signal).\n */\n async delete(contractId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/contracts/v1/{contractId}\", { params: { path: { contractId } }, signal: options?.signal }), \"DELETE /contracts/v1/{contractId}\");\n },\n /**\n * Decline a contract\n *\n * Mark a contract signer as declined. Declining also declines the contract.\n *\n * @param contractId The id of the contract.\n * @param signerId The id of the contract signer.\n * @param options Request options (abort signal).\n */\n async declineContract(contractId: string, signerId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PUT(\"/contracts/v1/{contractId}/signers/{signerId}/decline\", { params: { path: { contractId, signerId } }, signal: options?.signal }), \"PUT /contracts/v1/{contractId}/signers/{signerId}/decline\");\n },\n /**\n * Issue a contract\n *\n * @param contractId The id of the contract.\n * @param signatureMethod The `signatureMethod` payload.\n * @param options Request options (abort signal).\n */\n async issue(contractId: string, signatureMethod: IssueContractBody, options?: SpacebringRequestOptions): Promise<Contract> {\n return unwrapProp(await client.POST(\"/contracts/v1/{contractId}/issue\", { params: { path: { contractId } }, body: { signatureMethod }, signal: options?.signal }), \"contract\", \"POST /contracts/v1/{contractId}/issue\");\n },\n /**\n * Resend a contract\n *\n * Resend the signature request email to the next pending signer of an issued eSignature contract.\n *\n * @param contractId The id of the contract.\n * @param options Request options (abort signal).\n */\n async resend(contractId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/contracts/v1/{contractId}/resend\", { params: { path: { contractId } }, signal: options?.signal }), \"POST /contracts/v1/{contractId}/resend\");\n },\n /**\n * Sign a contract\n *\n * Mark a contract signer as signed. When all signers have signed, the contract becomes signed.\n *\n * @param contractId The id of the contract.\n * @param signerId The id of the contract signer.\n * @param options Request options (abort signal).\n */\n async signContract(contractId: string, signerId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PUT(\"/contracts/v1/{contractId}/signers/{signerId}/sign\", { params: { path: { contractId, signerId } }, signal: options?.signal }), \"PUT /contracts/v1/{contractId}/signers/{signerId}/sign\");\n },\n /**\n * Terminate a contract\n *\n * @param contractId The id of the contract.\n * @param reason The `reason` payload.\n * @param options Request options (abort signal).\n */\n async terminate(contractId: string, reason: TerminateContractBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/contracts/v1/{contractId}/terminate\", { params: { path: { contractId } }, body: { reason }, signal: options?.signal }), \"PATCH /contracts/v1/{contractId}/terminate\");\n },\n templates: {\n /**\n * Retrieve templates\n *\n * Retrieve all contract templates in the location.\n */\n async list(query?: GetTemplatesQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; templates: Template[] }> {\n return unwrap(await client.GET(\"/contracts/templates/v1\", { params: { query }, signal: options?.signal }), \"GET /contracts/templates/v1\");\n },\n /**\n * Retrieve templates — iterates every item across all pages.\n *\n * Retrieve all contract templates in the location.\n */\n iterate(query?: Omit<GetTemplatesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Template, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/contracts/templates/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /contracts/templates/v1\"),\n \"templates\",\n );\n },\n /**\n * Retrieve a template\n *\n * Retrieve a contract template.\n *\n * @param templateId The id of the template.\n * @param options Request options (abort signal).\n */\n async get(templateId: string, options?: SpacebringRequestOptions): Promise<Template> {\n return unwrapProp(await client.GET(\"/contracts/templates/v1/{templateId}\", { params: { path: { templateId } }, signal: options?.signal }), \"template\", \"GET /contracts/templates/v1/{templateId}\");\n },\n /**\n * Create a template\n *\n * Create a contract template from a .docx file uploaded through the template upload endpoint.\n */\n async create(template: CreateTemplateBody, options?: SpacebringRequestOptions): Promise<Template> {\n return unwrapProp(await client.POST(\"/contracts/templates/v1\", { body: { template }, signal: options?.signal }), \"template\", \"POST /contracts/templates/v1\");\n },\n /**\n * Update a template\n *\n * Update a contract template. A new file is uploaded through the template upload endpoint.\n *\n * @param templateId The id of the template.\n * @param template The `template` payload.\n * @param options Request options (abort signal).\n */\n async update(templateId: string, template: UpdateTemplateBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/contracts/templates/v1/{templateId}\", { params: { path: { templateId } }, body: { template }, signal: options?.signal }), \"PATCH /contracts/templates/v1/{templateId}\");\n },\n /**\n * Delete a template\n *\n * Delete a contract template.\n *\n * @param templateId The id of the template.\n * @param options Request options (abort signal).\n */\n async delete(templateId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/contracts/templates/v1/{templateId}\", { params: { path: { templateId } }, signal: options?.signal }), \"DELETE /contracts/templates/v1/{templateId}\");\n },\n /**\n * Create a template upload\n *\n * Create a media upload for a contract template file, a .docx document of up to 50 MB. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `template.file.key` when creating or updating a template within an hour; a file that is not attached by then is discarded.\n */\n async createMedia(media: CreateTemplateMediaBody, options?: SpacebringRequestOptions): Promise<TemplateMedia> {\n return unwrapProp(await client.POST(\"/contracts/templates/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /contracts/templates/v1/media\");\n },\n /**\n * Duplicate a template\n *\n * Duplicate a contract template, creating a copy with the same title and file.\n *\n * @param templateId The id of the template.\n * @param options Request options (abort signal).\n */\n async duplicate(templateId: string, options?: SpacebringRequestOptions): Promise<Template> {\n return unwrapProp(await client.POST(\"/contracts/templates/v1/{templateId}/duplicate\", { params: { path: { templateId } }, signal: options?.signal }), \"template\", \"POST /contracts/templates/v1/{templateId}/duplicate\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Coupon entity as returned by the Spacebring API. */\nexport type Coupon = NonNullable<components[\"schemas\"][\"coupon\"]>;\n\n/** A Promocode entity as returned by the Spacebring API. */\nexport type Promocode = NonNullable<components[\"schemas\"][\"promocode\"]>;\n\n/** A Redemption entity as returned by the Spacebring API. */\nexport type Redemption = NonNullable<components[\"schemas\"][\"discountRedemption\"]>;\n\n/** Query parameters for `sb.discounts.coupons.list()`. */\nexport interface GetCouponsQuery {\n /** Maximum number of coupons per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose coupons to list. Omit to list coupons across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by the product types a coupon applies to; a coupon matches when it applies to any of them. Comma-separated, one or more of: roomBookings, eventSpaceBookings, conferenceRoomBookings, meetingRoomBookings, phoneBoothBookings, stationBookings, studioBookings, hotDeskBookings, dedicatedDeskBookings, officeBookings, parkingBookings, equipmentBookings, eventTickets, shopProducts, packages, subscriptionItems. */\n type?: string;\n}\n\n/** Query parameters for `sb.discounts.listRedemptions()`. */\nexport interface GetDiscountRedemptionsQuery {\n /** UUID of the coupon whose redemptions to list. */\n couponRef?: string;\n /** Maximum number of discount redemptions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** UUID of the promocode whose redemptions to list. */\n promocodeRef?: string;\n}\n\n/** Query parameters for `sb.discounts.promocodes.list()`. */\nexport interface GetPromocodesQuery {\n /** UUID of the coupon whose promocodes to list. */\n couponRef?: string;\n /** UUID of the location whose promocodes to list. Omit with couponRef to list promocodes across every location of the network. */\n locationRef?: string;\n}\n\n/** Request body for `sb.discounts.coupons.create()`. */\nexport type CreateCouponBody = NonNullable<NonNullable<operations[\"createCoupon\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"coupon\"]>;\n\n/** Request body for `sb.discounts.promocodes.create()`. */\nexport type CreatePromocodeBody = NonNullable<NonNullable<operations[\"createPromocode\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"promocode\"]>;\n\n/** Request body for `sb.discounts.coupons.update()`. */\nexport type UpdateCouponBody = NonNullable<NonNullable<operations[\"updateCoupon\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"coupon\"]>;\n\nexport function createDiscounts(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve redemptions — iterates every item across all pages.\n *\n * Retrieve all discount redemptions. Either couponRef or promocodeRef is required.\n */\n iterateRedemptions(query?: Omit<GetDiscountRedemptionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Redemption, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/discounts/v1/redemptions\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /discounts/v1/redemptions\"),\n \"redemptions\",\n );\n },\n /**\n * Retrieve redemptions\n *\n * Retrieve all discount redemptions. Either couponRef or promocodeRef is required.\n */\n async listRedemptions(query?: GetDiscountRedemptionsQuery, options?: SpacebringRequestOptions): Promise<{ redemptions?: Redemption[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/discounts/v1/redemptions\", { params: { query }, signal: options?.signal }), \"GET /discounts/v1/redemptions\");\n },\n coupons: {\n /**\n * Retrieve coupons\n *\n * Retrieve the coupons of a location, or of every location in the network.\n */\n async list(query?: GetCouponsQuery, options?: SpacebringRequestOptions): Promise<{ coupons?: Coupon[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/discounts/v1/coupons\", { params: { query }, signal: options?.signal }), \"GET /discounts/v1/coupons\");\n },\n /**\n * Retrieve coupons — iterates every item across all pages.\n *\n * Retrieve the coupons of a location, or of every location in the network.\n */\n iterate(query?: Omit<GetCouponsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Coupon, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/discounts/v1/coupons\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /discounts/v1/coupons\"),\n \"coupons\",\n );\n },\n /**\n * Get a coupon\n *\n * @param id The id of the coupon\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Coupon> {\n return unwrapProp(await client.GET(\"/discounts/v1/coupons/{id}\", { params: { path: { id } }, signal: options?.signal }), \"coupon\", \"GET /discounts/v1/coupons/{id}\");\n },\n /** Create a coupon */\n async create(coupon: CreateCouponBody, options?: SpacebringRequestOptions): Promise<Coupon> {\n return unwrapProp(await client.POST(\"/discounts/v1/coupons\", { body: { coupon }, signal: options?.signal }), \"coupon\", \"POST /discounts/v1/coupons\");\n },\n /**\n * Update a coupon\n *\n * @param id The id of the coupon\n * @param coupon The `coupon` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, coupon: UpdateCouponBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/discounts/v1/coupons/{id}\", { params: { path: { id } }, body: { coupon }, signal: options?.signal }), \"PATCH /discounts/v1/coupons/{id}\");\n },\n /**\n * Delete a coupon\n *\n * @param id The id of the coupon\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/discounts/v1/coupons/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /discounts/v1/coupons/{id}\");\n },\n },\n promocodes: {\n /**\n * Retrieve promocodes\n *\n * Retrieve all promocodes.\n */\n async list(query?: GetPromocodesQuery, options?: SpacebringRequestOptions): Promise<Promocode[]> {\n return unwrapProp(await client.GET(\"/discounts/v1/promocodes\", { params: { query }, signal: options?.signal }), \"promocodes\", \"GET /discounts/v1/promocodes\");\n },\n /**\n * Get a promocode\n *\n * @param id The id of the promocode\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Promocode> {\n return unwrapProp(await client.GET(\"/discounts/v1/promocodes/{id}\", { params: { path: { id } }, signal: options?.signal }), \"promocode\", \"GET /discounts/v1/promocodes/{id}\");\n },\n /** Create a promocode */\n async create(promocode: CreatePromocodeBody, options?: SpacebringRequestOptions): Promise<Promocode> {\n return unwrapProp(await client.POST(\"/discounts/v1/promocodes\", { body: { promocode }, signal: options?.signal }), \"promocode\", \"POST /discounts/v1/promocodes\");\n },\n /**\n * Archive a promocode\n *\n * @param id The id of the promocode\n * @param options Request options (abort signal).\n */\n async archive(id: string, options?: SpacebringRequestOptions): Promise<Promocode> {\n return unwrapProp(await client.PUT(\"/discounts/v1/promocodes/{id}/archive\", { params: { path: { id } }, signal: options?.signal }), \"promocode\", \"PUT /discounts/v1/promocodes/{id}/archive\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Event entity as returned by the Spacebring API. */\nexport type Event = NonNullable<components[\"schemas\"][\"event\"]>;\n\n/** A EventMedia entity as returned by the Spacebring API. */\nexport type EventMedia = NonNullable<operations[\"createEventMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A EventTicket entity as returned by the Spacebring API. */\nexport type EventTicket = NonNullable<components[\"schemas\"][\"eventTicket\"]>;\n\n/** Query parameters for `sb.events.list()`. */\nexport interface GetEventsByOrganizationQuery {\n /** Filter events whose create date is on or after this date (ISO 8601). */\n \"createDate[gte]\"?: string;\n /** Filter events whose create date is on or before this date (ISO 8601). */\n \"createDate[lte]\"?: string;\n /** Filter events whose end date is after this date (ISO 8601). */\n \"endDate[gt]\"?: string;\n /** Filter events whose end date is on or after this date (ISO 8601). */\n \"endDate[gte]\"?: string;\n /** Filter events whose end date is before this date (ISO 8601). */\n \"endDate[lt]\"?: string;\n /** Filter events whose end date is on or before this date (ISO 8601). */\n \"endDate[lte]\"?: string;\n /** Maximum number of events per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose events to list. */\n locationRef: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Sort order of events. One of relevance, createDate:asc, createDate:desc, startDate:asc, startDate:desc, endDate:asc, endDate:desc. */\n order?: string;\n /** Filter events whose start date is after this date (ISO 8601). */\n \"startDate[gt]\"?: string;\n /** Filter events whose start date is on or after this date (ISO 8601). */\n \"startDate[gte]\"?: string;\n /** Filter events whose start date is before this date (ISO 8601). */\n \"startDate[lt]\"?: string;\n /** Filter events whose start date is on or before this date (ISO 8601). */\n \"startDate[lte]\"?: string;\n}\n\n/** Query parameters for `sb.events.tickets.list()`. */\nexport interface GetEventTicketsQuery {\n /** UUID of the customer whose event tickets to list. */\n customerRef?: string;\n /** UUID of the event whose tickets to list. */\n eventRef?: string;\n /** @deprecated Use status \"canceled\" instead. Set to \"true\" to include deleted event tickets. */\n includeDeleted?: string;\n /** Maximum number of event tickets per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose event tickets to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by event ticket status: 'active' the ticket is valid, 'canceled' the ticket was deleted. Defaults to active. Comma-separated, one or more of: active, canceled. */\n status?: string;\n /** UUID of the user whose event tickets to list. */\n userRef?: string;\n}\n\n/** Request body for `sb.events.addEventHosts()`. */\nexport type AddEventHostsBody = NonNullable<NonNullable<operations[\"addEventHosts\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"tickets\"]>;\n\n/** Request body for `sb.events.create()`. */\nexport type CreateEventBody = NonNullable<NonNullable<operations[\"createEvent\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"event\"]>;\n\n/** Request body for `sb.events.createMedia()`. */\nexport type CreateEventMediaBody = NonNullable<NonNullable<operations[\"createEventMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.events.update()`. */\nexport type UpdateEventBody = NonNullable<NonNullable<operations[\"updateEvent\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"event\"]>;\n\n/** Request body for `sb.events.tickets.update()`. */\nexport type UpdateEventTicketBody = NonNullable<NonNullable<operations[\"updateEventTicket\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\nexport function createEvents(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Retrieve events */\n async list(query: GetEventsByOrganizationQuery, options?: SpacebringRequestOptions): Promise<operations[\"getEventsByOrganization\"][\"responses\"][200][\"content\"][\"application/json\"]> {\n return unwrap(await client.GET(\"/events/v1\", { params: { query }, signal: options?.signal }), \"GET /events/v1\");\n },\n /** Retrieve an event */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.GET(\"/events/v1/{id}\", { params: { header: { \"spacebring-network-id\": defaults.networkId as string }, path: { id } }, signal: options?.signal }), \"event\", \"GET /events/v1/{id}\");\n },\n /** Create an event */\n async create(event: CreateEventBody, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.POST(\"/events/v1\", { body: { event }, signal: options?.signal }), \"event\", \"POST /events/v1\");\n },\n /** Update an event */\n async update(id: string, event: UpdateEventBody, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.PUT(\"/events/v1/{id}\", { params: { path: { id } }, body: { event }, signal: options?.signal }), \"event\", \"PUT /events/v1/{id}\");\n },\n /** Delete an event */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/events/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /events/v1/{id}\");\n },\n /**\n * Add event hosts\n *\n * Add hosts to an event. Creates a free host ticket for each membership without one; existing attendee tickets are switched to the host role. Returns all tickets of the event.\n *\n * @param id The id of the event.\n * @param tickets The `tickets` payload.\n * @param options Request options (abort signal).\n */\n async addEventHosts(id: string, tickets: AddEventHostsBody, options?: SpacebringRequestOptions): Promise<EventTicket[]> {\n return unwrapProp(await client.PUT(\"/events/v1/{id}/hosts\", { params: { path: { id } }, body: { tickets }, signal: options?.signal }), \"tickets\", \"PUT /events/v1/{id}/hosts\");\n },\n /** Cancel an event */\n async cancel(id: string, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.PUT(\"/events/v1/{id}/cancel\", { params: { path: { id } }, signal: options?.signal }), \"event\", \"PUT /events/v1/{id}/cancel\");\n },\n /** Copy an event */\n async copy(id: string, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.POST(\"/events/v1/{id}/copy\", { params: { path: { id } }, signal: options?.signal }), \"event\", \"POST /events/v1/{id}/copy\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for an event cover image. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `media[0].key` when creating or updating an event within an hour; an image that is not attached by then is discarded.\n */\n async createMedia(media: CreateEventMediaBody, options?: SpacebringRequestOptions): Promise<EventMedia> {\n return unwrapProp(await client.POST(\"/events/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /events/v1/media\");\n },\n tickets: {\n /**\n * Retrieve tickets\n *\n * Retrieve all event tickets.\n */\n async list(query?: GetEventTicketsQuery, options?: SpacebringRequestOptions): Promise<{ tickets?: EventTicket[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/events/tickets/v1\", { params: { query }, signal: options?.signal }), \"GET /events/tickets/v1\");\n },\n /**\n * Retrieve tickets — iterates every item across all pages.\n *\n * Retrieve all event tickets.\n */\n iterate(query?: Omit<GetEventTicketsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<EventTicket, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/events/tickets/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /events/tickets/v1\"),\n \"tickets\",\n );\n },\n /**\n * Retrieve a ticket\n *\n * Retrieve an event ticket.\n *\n * @param id The id of the event ticket.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.GET(\"/events/tickets/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"ticket\", \"GET /events/tickets/v1/{id}\");\n },\n /**\n * Update a ticket\n *\n * Update an event ticket. Only the ticket role can be changed.\n *\n * @param id The id of the event ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, ticket: UpdateEventTicketBody, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.PUT(\"/events/tickets/v1/{id}\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"ticket\", \"PUT /events/tickets/v1/{id}\");\n },\n /**\n * Delete a ticket\n *\n * Delete an event ticket. Returns the deleted ticket.\n *\n * @param id The id of the event ticket.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.DELETE(\"/events/tickets/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"ticket\", \"DELETE /events/tickets/v1/{id}\");\n },\n /**\n * Check in a ticket\n *\n * Check in an event ticket. Fails if the ticket is already checked in. Deprecated: this endpoint will be removed in a future release.\n *\n * @param id The id of the event ticket.\n * @param options Request options (abort signal).\n *\n * @deprecated Marked as deprecated in the OpenAPI spec.\n */\n async checkIn(id: string, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.POST(\"/events/tickets/v1/{id}/checkin\", { params: { path: { id } }, signal: options?.signal }), \"ticket\", \"POST /events/tickets/v1/{id}/checkin\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Comment entity as returned by the Spacebring API. */\nexport type Comment = NonNullable<components[\"schemas\"][\"postComment\"]>;\n\n/** A FeedMedia entity as returned by the Spacebring API. */\nexport type FeedMedia = NonNullable<operations[\"createFeedPostMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A Like entity as returned by the Spacebring API. */\nexport type Like = NonNullable<components[\"schemas\"][\"postLike\"]>;\n\n/** A Post entity as returned by the Spacebring API. */\nexport type Post = NonNullable<components[\"schemas\"][\"post\"]>;\n\n/** Query parameters for `sb.feed.posts.list()`. */\nexport interface GetFeedPostsQuery {\n /** The id of the location. */\n locationRef: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The number of items to return. */\n limit?: number;\n}\n\n/** Request body for `sb.feed.posts.create()`. */\nexport type CreateFeedPostBody = NonNullable<NonNullable<operations[\"createFeedPost\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"post\"]>;\n\n/** Request body for `sb.feed.comments.create()`. */\nexport type CreateFeedPostCommentBody = NonNullable<NonNullable<operations[\"createFeedPostComment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"comment\"]>;\n\n/** Request body for `sb.feed.createMedia()`. */\nexport type CreateFeedPostMediaBody = NonNullable<NonNullable<operations[\"createFeedPostMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.feed.posts.update()`. */\nexport type UpdateFeedPostBody = NonNullable<NonNullable<operations[\"updateFeedPost\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"post\"]>;\n\nexport function createFeed(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Create a media upload\n *\n * Create a media upload for an image or a video in a post. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key in `media[].key` when creating or updating a post within an hour; a file that is not attached by then is discarded. A video must declare its `width` and `height`; an image's dimensions are read from the file.\n */\n async createMedia(media: CreateFeedPostMediaBody, options?: SpacebringRequestOptions): Promise<FeedMedia> {\n return unwrapProp(await client.POST(\"/feed/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /feed/v1/media\");\n },\n comments: {\n /**\n * Create a post comment\n *\n * Create a feed post comment.\n */\n async create(comment: CreateFeedPostCommentBody, options?: SpacebringRequestOptions): Promise<Comment> {\n return unwrapProp(await client.POST(\"/feed/comments/v1\", { body: { comment }, signal: options?.signal }), \"comment\", \"POST /feed/comments/v1\");\n },\n /**\n * Delete a post comment\n *\n * @param id The id of the post comment.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/comments/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/comments/v1/{id}\");\n },\n /**\n * Create a like for a post comment\n *\n * @param id The id of the post comment.\n * @param options Request options (abort signal).\n */\n async createLike(id: string, options?: SpacebringRequestOptions): Promise<Like> {\n return unwrapProp(await client.POST(\"/feed/comments/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"like\", \"POST /feed/comments/v1/{id}/likes\");\n },\n /**\n * Delete a like for a post comment\n *\n * @param id The id of the post comment.\n * @param options Request options (abort signal).\n */\n async deleteLike(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/comments/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/comments/v1/{id}/likes\");\n },\n },\n posts: {\n /**\n * Get posts\n *\n * Get feed posts.\n */\n async list(query: GetFeedPostsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; posts?: Post[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/feed/posts/v1\", { params: { query }, signal: options?.signal }), \"GET /feed/posts/v1\");\n },\n /**\n * Get posts — iterates every item across all pages.\n *\n * Get feed posts.\n */\n iterate(query: Omit<GetFeedPostsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Post, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/feed/posts/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /feed/posts/v1\"),\n \"posts\",\n );\n },\n /**\n * Get a post\n *\n * Get a feed post.\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Post> {\n return unwrapProp(await client.GET(\"/feed/posts/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"post\", \"GET /feed/posts/v1/{id}\");\n },\n /**\n * Create a post\n *\n * Create a feed post.\n */\n async create(post: CreateFeedPostBody, options?: SpacebringRequestOptions): Promise<Post> {\n return unwrapProp(await client.POST(\"/feed/posts/v1\", { body: { post }, signal: options?.signal }), \"post\", \"POST /feed/posts/v1\");\n },\n /**\n * Update a post\n *\n * Update a feed post.\n *\n * @param id The id of the post.\n * @param post The `post` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, post: UpdateFeedPostBody, options?: SpacebringRequestOptions): Promise<Post> {\n return unwrapProp(await client.PUT(\"/feed/posts/v1/{id}\", { params: { path: { id } }, body: { post }, signal: options?.signal }), \"post\", \"PUT /feed/posts/v1/{id}\");\n },\n /**\n * Delete a post\n *\n * Delete a feed post.\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/posts/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/posts/v1/{id}\");\n },\n /**\n * Create a like for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async createLike(id: string, options?: SpacebringRequestOptions): Promise<Like> {\n return unwrapProp(await client.POST(\"/feed/posts/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"like\", \"POST /feed/posts/v1/{id}/likes\");\n },\n /**\n * Delete a like for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async deleteLike(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/posts/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/posts/v1/{id}/likes\");\n },\n /**\n * Get comments for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async getComments(id: string, options?: SpacebringRequestOptions): Promise<Comment[]> {\n return unwrapProp(await client.GET(\"/feed/posts/v1/{id}/comments\", { params: { path: { id } }, signal: options?.signal }), \"comments\", \"GET /feed/posts/v1/{id}/comments\");\n },\n /**\n * Get likes for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async getLikes(id: string, options?: SpacebringRequestOptions): Promise<Like[]> {\n return unwrapProp(await client.GET(\"/feed/posts/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"likes\", \"GET /feed/posts/v1/{id}/likes\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { unwrap, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** Query parameters for `sb.floors.list()`. */\nexport interface GetFloorsQuery {\n /** The limit of the floors. */\n limit?: number;\n /** The id of the location. */\n locationRef: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\nexport function createFloors(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Get floors */\n async list(query: GetFloorsQuery, options?: SpacebringRequestOptions): Promise<operations[\"getFloors\"][\"responses\"][200][\"content\"][\"application/json\"]> {\n return unwrap(await client.GET(\"/floors/v1\", { params: { query }, signal: options?.signal }), \"GET /floors/v1\");\n },\n /**\n * Delete a floor\n *\n * @param id The id of the floor.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/floors/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /floors/v1/{id}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Attachment entity as returned by the Spacebring API. */\nexport type Attachment = NonNullable<operations[\"createGuideAttachment\"][\"responses\"][201][\"content\"][\"application/json\"][\"attachment\"]>;\n\n/** A Guide entity as returned by the Spacebring API. */\nexport type Guide = NonNullable<components[\"schemas\"][\"guide\"]>;\n\n/** A GuideMedia entity as returned by the Spacebring API. */\nexport type GuideMedia = NonNullable<operations[\"createGuideMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.guides.list()`. */\nexport interface GetGuidesQuery {\n /** Maximum number of guides per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose guides to list. Omit to list guides across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.guides.createAttachment()`. */\nexport type CreateGuideAttachmentBody = NonNullable<NonNullable<operations[\"createGuideAttachment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"attachment\"]>;\n\n/** Request body for `sb.guides.create()`. */\nexport type CreateGuideBody = NonNullable<NonNullable<operations[\"createGuide\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"guide\"]>;\n\n/** Request body for `sb.guides.createMedia()`. */\nexport type CreateGuideMediaBody = NonNullable<NonNullable<operations[\"createGuideMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.guides.update()`. */\nexport type PatchGuideBody = NonNullable<NonNullable<operations[\"patchGuide\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"guide\"]>;\n\nexport function createGuides(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve guides\n *\n * Retrieve all guides for an organization. Requires locationRef. When using bearer token (non-basic auth), results are filtered by the user's access.\n */\n async list(query?: GetGuidesQuery, options?: SpacebringRequestOptions): Promise<{ guides: Guide[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/guides/v1\", { params: { query }, signal: options?.signal }), \"GET /guides/v1\");\n },\n /**\n * Retrieve guides — iterates every item across all pages.\n *\n * Retrieve all guides for an organization. Requires locationRef. When using bearer token (non-basic auth), results are filtered by the user's access.\n */\n iterate(query?: Omit<GetGuidesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Guide, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/guides/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /guides/v1\"),\n \"guides\",\n );\n },\n /**\n * Retrieve a guide\n *\n * Retrieve a guide by id.\n *\n * @param guideId The id of the guide.\n * @param options Request options (abort signal).\n */\n async get(guideId: string, options?: SpacebringRequestOptions): Promise<Guide> {\n return unwrapProp(await client.GET(\"/guides/v1/{guideId}\", { params: { path: { guideId } }, signal: options?.signal }), \"guide\", \"GET /guides/v1/{guideId}\");\n },\n /**\n * Create a guide\n *\n * Create a guide in an organization.\n */\n async create(guide: CreateGuideBody, options?: SpacebringRequestOptions): Promise<Guide> {\n return unwrapProp(await client.POST(\"/guides/v1\", { body: { guide }, signal: options?.signal }), \"guide\", \"POST /guides/v1\");\n },\n /**\n * Update a guide\n *\n * Update a guide. At least one guide property must be provided.\n *\n * @param guideId The id of the guide\n * @param guide The `guide` payload.\n * @param options Request options (abort signal).\n */\n async update(guideId: string, guide: PatchGuideBody, options?: SpacebringRequestOptions): Promise<Guide> {\n return unwrapProp(await client.PATCH(\"/guides/v1/{guideId}\", { params: { path: { guideId } }, body: { guide }, signal: options?.signal }), \"guide\", \"PATCH /guides/v1/{guideId}\");\n },\n /**\n * Delete a guide\n *\n * @param guideId The id of the guide\n * @param options Request options (abort signal).\n */\n async delete(guideId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/guides/v1/{guideId}\", { params: { path: { guideId } }, signal: options?.signal }), \"DELETE /guides/v1/{guideId}\");\n },\n /**\n * Create an attachment upload\n *\n * Create an upload for a file to attach to a guide, of any type up to 50 MB. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key in `attachments[].key` when creating or updating a guide within an hour; a file that is not attached by then is discarded. The file is served as a download under the declared name.\n */\n async createAttachment(attachment: CreateGuideAttachmentBody, options?: SpacebringRequestOptions): Promise<Attachment> {\n return unwrapProp(await client.POST(\"/guides/v1/attachments\", { body: { attachment }, signal: options?.signal }), \"attachment\", \"POST /guides/v1/attachments\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for an image or a video in a guide. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, add the returned url to the guide `description` as a Markdown image, `![alt text](url)`, when creating or updating a guide within an hour; a file that is not attached by then is discarded. A video must declare its `width` and `height`; an image's dimensions are read from the file.\n */\n async createMedia(media: CreateGuideMediaBody, options?: SpacebringRequestOptions): Promise<GuideMedia> {\n return unwrapProp(await client.POST(\"/guides/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /guides/v1/media\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, paths } from \"../schema.js\";\n\n/** A Location entity as returned by the Spacebring API. */\nexport type Location = NonNullable<components[\"schemas\"][\"location\"]>;\n\nexport function createLocations(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Retrieve all locations */\n async list(options?: SpacebringRequestOptions): Promise<Location[]> {\n return unwrapProp(await client.GET(\"/locations/v1\", { signal: options?.signal }), \"locations\", \"GET /locations/v1\");\n },\n /**\n * Get a location\n *\n * @param locationId The id of the location.\n * @param options Request options (abort signal).\n */\n async get(locationId: string, options?: SpacebringRequestOptions): Promise<Location> {\n return unwrapProp(await client.GET(\"/locations/v1/{locationId}\", { params: { path: { locationId } }, signal: options?.signal }), \"location\", \"GET /locations/v1/{locationId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, paths } from \"../schema.js\";\n\n/** A Network entity as returned by the Spacebring API. */\nexport type Network = NonNullable<components[\"schemas\"][\"network\"]>;\n\nexport function createNetworks(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve networks\n *\n * Retrieve all networks you are in.\n */\n async list(options?: SpacebringRequestOptions): Promise<Network[]> {\n return unwrapProp(await client.GET(\"/networks/v1\", { signal: options?.signal }), \"networks\", \"GET /networks/v1\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** A Package entity as returned by the Spacebring API. */\nexport type Package = NonNullable<operations[\"getPackage\"][\"responses\"][200][\"content\"][\"application/json\"][\"package\"]>;\n\n/** Query parameters for `sb.packages.list()`. */\nexport interface GetPackagesQuery {\n /** Maximum number of packages per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose packages to list. Omit to list packages across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.packages.create()`. */\nexport type CreatePackageBody = NonNullable<NonNullable<operations[\"createPackage\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"package\"]>;\n\n/** Request body for `sb.packages.update()`. */\nexport type PatchPackageBody = NonNullable<NonNullable<operations[\"patchPackage\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"package\"]>;\n\nexport function createPackages(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve packages\n *\n * Retrieve all packages in the location.\n */\n async list(query?: GetPackagesQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; packages: Package[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/packages/v1\", { params: { query }, signal: options?.signal }), \"GET /packages/v1\");\n },\n /**\n * Retrieve packages — iterates every item across all pages.\n *\n * Retrieve all packages in the location.\n */\n iterate(query?: Omit<GetPackagesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Package, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/packages/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /packages/v1\"),\n \"packages\",\n );\n },\n /**\n * Retrieve a package\n *\n * @param packageId The id of the package.\n * @param options Request options (abort signal).\n */\n async get(packageId: string, options?: SpacebringRequestOptions): Promise<Package> {\n return unwrapProp(await client.GET(\"/packages/v1/{packageId}\", { params: { path: { packageId } }, signal: options?.signal }), \"package\", \"GET /packages/v1/{packageId}\");\n },\n /** Create a package */\n async create(packageBody: CreatePackageBody, options?: SpacebringRequestOptions): Promise<Package> {\n return unwrapProp(await client.POST(\"/packages/v1\", { body: { package: packageBody }, signal: options?.signal }), \"package\", \"POST /packages/v1\");\n },\n /**\n * Update a package\n *\n * @param packageId The id of the package.\n * @param packageBody The `package` payload.\n * @param options Request options (abort signal).\n */\n async update(packageId: string, packageBody: PatchPackageBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/packages/v1/{packageId}\", { params: { path: { packageId } }, body: { package: packageBody }, signal: options?.signal }), \"PATCH /packages/v1/{packageId}\");\n },\n /**\n * Delete a package\n *\n * @param packageId The id of the package.\n * @param options Request options (abort signal).\n */\n async delete(packageId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/packages/v1/{packageId}\", { params: { path: { packageId } }, signal: options?.signal }), \"DELETE /packages/v1/{packageId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Plan entity as returned by the Spacebring API. */\nexport type Plan = NonNullable<components[\"schemas\"][\"plan\"]>;\n\n/** Query parameters for `sb.plans.list()`. */\nexport interface GetPlansQuery {\n /** @deprecated Only applies together with resourceRef. Filter the plans.tiers of `GET /resources/v1/{resourceId}` by their entire field instead. When listing plans for a resource, filter by entire resource vs partial tiers. Pass true or false. */\n entire?: string;\n /** Maximum number of plans per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose plans to list. Omit to list plans across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** @deprecated Read plans.tiers from `GET /resources/v1/{resourceId}` instead. UUID of the resource whose tier plans to list. */\n resourceRef?: string;\n}\n\n/** Request body for `sb.plans.create()`. */\nexport type CreatePlanBody = NonNullable<NonNullable<operations[\"createPlan\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"plan\"]>;\n\n/** Request body for `sb.plans.update()`. */\nexport type UpdatePlanBody = NonNullable<NonNullable<operations[\"updatePlan\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"plan\"]>;\n\nexport function createPlans(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve plans\n *\n * Retrieve all plans.\n */\n async list(query?: GetPlansQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; plans: Plan[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/plans/v1\", { params: { query }, signal: options?.signal }), \"GET /plans/v1\");\n },\n /**\n * Retrieve plans — iterates every item across all pages.\n *\n * Retrieve all plans.\n */\n iterate(query?: Omit<GetPlansQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Plan, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/plans/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /plans/v1\"),\n \"plans\",\n );\n },\n /**\n * Retrieve a plan\n *\n * Retrieve a certain plan.\n *\n * @param planId The id of the plan.\n * @param options Request options (abort signal).\n */\n async get(planId: string, options?: SpacebringRequestOptions): Promise<Plan> {\n return unwrapProp(await client.GET(\"/plans/v1/{planId}\", { params: { path: { planId } }, signal: options?.signal }), \"plan\", \"GET /plans/v1/{planId}\");\n },\n /** Create a plan */\n async create(plan: CreatePlanBody, options?: SpacebringRequestOptions): Promise<Plan> {\n return unwrapProp(await client.POST(\"/plans/v1\", { body: { plan }, signal: options?.signal }), \"plan\", \"POST /plans/v1\");\n },\n /**\n * Update a plan\n *\n * Update a certain plan.\n *\n * @param planId The id of the plan.\n * @param plan The `plan` payload.\n * @param options Request options (abort signal).\n */\n async update(planId: string, plan: UpdatePlanBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/plans/v1/{planId}\", { params: { path: { planId } }, body: { plan }, signal: options?.signal }), \"PATCH /plans/v1/{planId}\");\n },\n /**\n * Delete a plan\n *\n * Delete a certain plan.\n *\n * @param planId The id of the plan.\n * @param options Request options (abort signal).\n */\n async delete(planId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/plans/v1/{planId}\", { params: { path: { planId } }, signal: options?.signal }), \"DELETE /plans/v1/{planId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, paths } from \"../schema.js\";\n\n/** A Registration entity as returned by the Spacebring API. */\nexport type Registration = NonNullable<components[\"schemas\"][\"registration\"]>;\n\n/** Query parameters for `sb.registrations.list()`. */\nexport interface GetRegistrationsQuery {\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\nexport function createRegistrations(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve registrations\n *\n * Retrieve all registrations in network.\n */\n async list(query?: GetRegistrationsQuery, options?: SpacebringRequestOptions): Promise<{ registrations?: Registration[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/registrations/v1\", { params: { query }, signal: options?.signal }), \"GET /registrations/v1\");\n },\n /**\n * Retrieve registrations — iterates every item across all pages.\n *\n * Retrieve all registrations in network.\n */\n iterate(query?: Omit<GetRegistrationsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Registration, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/registrations/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /registrations/v1\"),\n \"registrations\",\n );\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Assignment entity as returned by the Spacebring API. */\nexport type Assignment = NonNullable<operations[\"getAssignments\"][\"responses\"][200][\"content\"][\"application/json\"][\"assignments\"]>[number];\n\n/** A Booking entity as returned by the Spacebring API. */\nexport type Booking = NonNullable<operations[\"getBooking\"][\"responses\"][200][\"content\"][\"application/json\"][\"booking\"]>;\n\n/** A GetResourceAvailability entity as returned by the Spacebring API. */\nexport type GetResourceAvailability = NonNullable<components[\"schemas\"][\"getResourceAvailability\"]>;\n\n/** A Resource entity as returned by the Spacebring API. */\nexport type Resource = NonNullable<operations[\"getResource\"][\"responses\"][200][\"content\"][\"application/json\"][\"resource\"]>;\n\n/** A ResourceMedia entity as returned by the Spacebring API. */\nexport type ResourceMedia = NonNullable<operations[\"createResourceMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.resources.assignments.list()`. */\nexport interface GetAssignmentsQuery {\n /** Maximum number of assignments per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. Ignored when registrationRef is used. */\n limit?: number;\n /** UUID of the location whose resource assignments to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. Ignored when registrationRef is used. */\n nextPageToken?: string;\n}\n\n/** Query parameters for `sb.resources.bookings.list()`. */\nexport interface GetBookingsQuery {\n /** Matches bookings with endDate strictly after this date (ISO 8601). */\n \"endDate[gt]\"?: string;\n /** Matches bookings with endDate on or after this date (ISO 8601). */\n \"endDate[gte]\"?: string;\n /** Matches bookings with endDate strictly before this date (ISO 8601). */\n \"endDate[lt]\"?: string;\n /** Matches bookings with endDate on or before this date (ISO 8601). */\n \"endDate[lte]\"?: string;\n /** Matches bookings with startDate strictly after this date (ISO 8601). */\n \"startDate[gt]\"?: string;\n /** Matches bookings with startDate on or after this date (ISO 8601). */\n \"startDate[gte]\"?: string;\n /** Matches bookings with startDate strictly before this date (ISO 8601). */\n \"startDate[lt]\"?: string;\n /** Matches bookings with startDate on or before this date (ISO 8601). */\n \"startDate[lte]\"?: string;\n /** UUID of the company whose own bookings to list: bookings the company or its members made, not ones they were added to as attendees. Cannot be combined with customerRef, userRef, or userRefOwner. */\n companyRefOwner?: string;\n /** UUID of the customer whose bookings to list, both made and attended. */\n customerRef?: string;\n /** @deprecated Use bracket-notation fields endDate[gt], endDate[gte], endDate[lt], endDate[lte] instead. */\n endDate?: string;\n /** @deprecated Use status \"canceled\" instead. Set to \"true\" to include deleted bookings. */\n includeDeleted?: string;\n /** Maximum number of bookings per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose bookings to list. Omit to list bookings across every location of the network. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. UUID of the customer whose bookings to list. */\n membershipRefOwner?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Sort order as `:`, where field is startDate, endDate, createDate or deleteDate and direction is asc or desc. deleteDate lists only cancelled bookings, by when they were cancelled, and cannot be combined with singleBookings. Defaults to startDate:asc when a startDate filter is given, endDate:asc when only an endDate filter is given, and createDate:desc otherwise. */\n order?: string;\n /** UUID of the resource whose bookings to list. */\n resourceRef?: string;\n /** Set to \"true\" to expand repeating bookings into single occurrences. */\n singleBookings?: string;\n /** @deprecated Use bracket-notation fields startDate[gt], startDate[gte], startDate[lt], startDate[lte] instead. */\n startDate?: string;\n /** Booking statuses to filter by, e.g. `confirmed,canceled`. Defaults to tentative and confirmed, or to canceled when ordering by deleteDate. Comma-separated, one or more of: tentative, confirmed, canceled. */\n status?: string;\n /** Resource types of the booked resources to filter by, e.g. `room,hotDesk`. Defaults to all bookable types. Comma-separated, one or more of: hotDesk, dedicatedDesk, office, parkingLot, room, conferenceRoom, eventSpace, meetingRoom, phoneBooth, studio, equipment, station. */\n type?: string;\n /** UUID of the user whose bookings to list, both made and attended. Without locationRef or resourceRef, lists the user's bookings across every location of the network. Cannot be combined with customerRef, companyRefOwner, or userRefOwner. */\n userRef?: string;\n /** UUID of the user whose own bookings to list: bookings the user made, not ones they were added to as an attendee. Without locationRef or resourceRef, lists the user's own bookings across every location of the network. Cannot be combined with customerRef, companyRefOwner, or userRef. */\n userRefOwner?: string;\n /** @deprecated Use type instead. */\n types?: string;\n}\n\n/** Query parameters for `sb.resources.list()`. */\nexport interface GetResourcesQuery {\n /** Maximum number of resources per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose resources to list. Omit to list resources across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Resource types to filter by, e.g. `room,hotDesk`. Defaults to all bookable types. Comma-separated, one or more of: dedicatedDesk, equipment, hotDesk, office, parkingLot, room, station, conferenceRoom, eventSpace, meetingRoom, phoneBooth, studio. */\n type?: string;\n /** @deprecated Use type instead. */\n types?: string;\n}\n\n/** Request body for `sb.resources.assignments.create()`. */\nexport type CreateAssignmentBody = NonNullable<NonNullable<operations[\"createAssignment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"assignment\"]>;\n\n/** Request body for `sb.resources.bookings.create()`. */\nexport type CreateBookingBody = NonNullable<operations[\"createBooking\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.resources.create()`. */\nexport type CreateResourceBody = NonNullable<NonNullable<operations[\"createResource\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"resource\"]>;\n\n/** Request body for `sb.resources.createMedia()`. */\nexport type CreateResourceMediaBody = NonNullable<NonNullable<operations[\"createResourceMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.resources.getResourceAvailability()`. */\nexport type GetResourceAvailabilityBody = NonNullable<operations[\"getResourceAvailability\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.resources.assignments.update()`. */\nexport type PatchAssignmentBody = NonNullable<NonNullable<operations[\"patchAssignment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"assignment\"]>;\n\n/** Request body for `sb.resources.bookings.update()`. */\nexport type PatchBookingBody = NonNullable<operations[\"patchBooking\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.resources.update()`. */\nexport type PatchResourceBody = NonNullable<NonNullable<operations[\"patchResource\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"resource\"]>;\n\nexport function createResources(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve resources\n *\n * Retrieve resources in the location. Resources represent all kind of bookable items like rooms, hot desks, dedicated desks, parking lots.\n */\n async list(query?: GetResourcesQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; resources: Resource[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/resources/v1\", { params: { query }, signal: options?.signal }), \"GET /resources/v1\");\n },\n /**\n * Retrieve resources — iterates every item across all pages.\n *\n * Retrieve resources in the location. Resources represent all kind of bookable items like rooms, hot desks, dedicated desks, parking lots.\n */\n iterate(query?: Omit<GetResourcesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Resource, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/resources/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /resources/v1\"),\n \"resources\",\n );\n },\n /**\n * Get a resource\n *\n * Get a certain resource.\n *\n * @param resourceId The id of the resource.\n * @param options Request options (abort signal).\n */\n async get(resourceId: string, options?: SpacebringRequestOptions): Promise<Resource> {\n return unwrapProp(await client.GET(\"/resources/v1/{resourceId}\", { params: { path: { resourceId } }, signal: options?.signal }), \"resource\", \"GET /resources/v1/{resourceId}\");\n },\n /**\n * Create a resource\n *\n * Create a new resource in a location. The request body must match the schema exactly—unknown properties are rejected.\n */\n async create(resource: CreateResourceBody, options?: SpacebringRequestOptions): Promise<Resource> {\n return unwrapProp(await client.POST(\"/resources/v1\", { body: { resource }, signal: options?.signal }), \"resource\", \"POST /resources/v1\");\n },\n /**\n * Patch a resource\n *\n * Patch a certain resource.\n *\n * @param resourceId The id of the resource.\n * @param resource The `resource` payload.\n * @param options Request options (abort signal).\n */\n async update(resourceId: string, resource: PatchResourceBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/resources/v1/{resourceId}\", { params: { path: { resourceId } }, body: { resource }, signal: options?.signal }), \"PATCH /resources/v1/{resourceId}\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for a resource photo. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, add the returned key to `media` when creating or updating a resource within an hour; an image that is not attached by then is discarded. A resource holds up to 10 photos, the first being its cover.\n */\n async createMedia(media: CreateResourceMediaBody, options?: SpacebringRequestOptions): Promise<ResourceMedia> {\n return unwrapProp(await client.POST(\"/resources/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /resources/v1/media\");\n },\n /**\n * Check resource availability\n *\n * Check whether a resource can be booked for a slot before creating the booking. The same rules as booking creation apply: capacity, the location and resource schedule, duration limits and the booking window. When the slot is unavailable, the response carries the code the booking would fail with.\n *\n * @param resourceId The id of the resource.\n * @param body Request body.\n * @param options Request options (abort signal).\n */\n async getResourceAvailability(resourceId: string, body: GetResourceAvailabilityBody, options?: SpacebringRequestOptions): Promise<GetResourceAvailability> {\n return unwrap(await client.POST(\"/resources/v1/{resourceId}/availability\", { params: { path: { resourceId } }, body, signal: options?.signal }), \"POST /resources/v1/{resourceId}/availability\");\n },\n assignments: {\n /**\n * Retrieve resource assignments\n *\n * Retrieve resource assignments in the location. An assignment links a resource, or a number of seats in it, to a company or a member for the duration of a subscription.\n */\n async list(query?: GetAssignmentsQuery, options?: SpacebringRequestOptions): Promise<{ assignments: Assignment[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/resources/v1/assignments\", { params: { query }, signal: options?.signal }), \"GET /resources/v1/assignments\");\n },\n /**\n * Retrieve resource assignments — iterates every item across all pages.\n *\n * Retrieve resource assignments in the location. An assignment links a resource, or a number of seats in it, to a company or a member for the duration of a subscription.\n */\n iterate(query?: Omit<GetAssignmentsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Assignment, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/resources/v1/assignments\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /resources/v1/assignments\"),\n \"assignments\",\n );\n },\n /**\n * Create a resource assignment\n *\n * Create a resource assignment. An assignment links a resource, or a number of seats in it, to a company or a member.\n */\n async create(assignment: CreateAssignmentBody, options?: SpacebringRequestOptions): Promise<Assignment> {\n return unwrapProp(await client.POST(\"/resources/v1/assignments\", { body: { assignment }, signal: options?.signal }), \"assignment\", \"POST /resources/v1/assignments\");\n },\n /**\n * Update a resource assignment\n *\n * Update a resource assignment. Fields left out of the request keep their current value.\n *\n * @param assignmentId The id of the assignment.\n * @param assignment The `assignment` payload.\n * @param options Request options (abort signal).\n */\n async update(assignmentId: string, assignment: PatchAssignmentBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/resources/v1/assignments/{assignmentId}\", { params: { path: { assignmentId } }, body: { assignment }, signal: options?.signal }), \"PATCH /resources/v1/assignments/{assignmentId}\");\n },\n },\n bookings: {\n /**\n * Retrieve bookings\n *\n * Retrieve all bookings of resources.\n */\n async list(query?: GetBookingsQuery, options?: SpacebringRequestOptions): Promise<{ bookings: Booking[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/resources/bookings/v1\", { params: { query }, signal: options?.signal }), \"GET /resources/bookings/v1\");\n },\n /**\n * Retrieve bookings — iterates every item across all pages.\n *\n * Retrieve all bookings of resources.\n */\n iterate(query?: Omit<GetBookingsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Booking, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/resources/bookings/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /resources/bookings/v1\"),\n \"bookings\",\n );\n },\n /**\n * Get a booking\n *\n * @param bookingId ID of the booking. For a single occurrence of a repeating booking, append the occurrence date: `_`.\n * @param options Request options (abort signal).\n */\n async get(bookingId: string, options?: SpacebringRequestOptions): Promise<Booking> {\n return unwrapProp(await client.GET(\"/resources/bookings/v1/{bookingId}\", { params: { path: { bookingId } }, signal: options?.signal }), \"booking\", \"GET /resources/bookings/v1/{bookingId}\");\n },\n /** Create a booking */\n async create(body: CreateBookingBody, options?: SpacebringRequestOptions): Promise<Booking> {\n return unwrapProp(await client.POST(\"/resources/bookings/v1\", { body, signal: options?.signal }), \"booking\", \"POST /resources/bookings/v1\");\n },\n /**\n * Update a booking\n *\n * Update a booking. Fields left out of the request keep their current value.\n *\n * @param bookingId ID of the booking. For a single occurrence of a repeating booking, append the occurrence date: `_`.\n * @param body Request body.\n * @param options Request options (abort signal).\n */\n async update(bookingId: string, body: PatchBookingBody, options?: SpacebringRequestOptions): Promise<Booking> {\n return unwrapProp(await client.PATCH(\"/resources/bookings/v1/{bookingId}\", { params: { path: { bookingId } }, body, signal: options?.signal }), \"booking\", \"PATCH /resources/bookings/v1/{bookingId}\");\n },\n /**\n * Delete a booking\n *\n * @param bookingId ID of the booking. For a single occurrence of a repeating booking, append the occurrence date: `_`.\n * @param options Request options (abort signal).\n */\n async delete(bookingId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/resources/bookings/v1/{bookingId}\", { params: { path: { bookingId } }, signal: options?.signal }), \"DELETE /resources/bookings/v1/{bookingId}\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Order entity as returned by the Spacebring API. */\nexport type Order = NonNullable<operations[\"getOrder\"][\"responses\"][200][\"content\"][\"application/json\"][\"order\"]>;\n\n/** A Product entity as returned by the Spacebring API. */\nexport type Product = NonNullable<components[\"schemas\"][\"product\"]>;\n\n/** A ProductMedia entity as returned by the Spacebring API. */\nexport type ProductMedia = NonNullable<operations[\"createProductMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A ShopCategory entity as returned by the Spacebring API. */\nexport type ShopCategory = NonNullable<components[\"schemas\"][\"shopCategory\"]>;\n\n/** Query parameters for `sb.shop.orders.list()`. */\nexport interface GetOrdersQuery {\n /** Filter by the shop categories of the products in the order. Comma-separated, one or more UUIDs. */\n categoryRef?: string;\n /** Filter orders created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter orders created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose orders to list. */\n customerRef?: string;\n /** Maximum number of orders per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose orders to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by the products in the order. Comma-separated, one or more UUIDs. */\n productRef?: string;\n /** Filter by order status: 'pending' placed, payment still processing; 'new' placed and paid, awaiting fulfillment; 'inProgress' being fulfilled; 'completed' fulfilled; 'canceled' canceled by the customer or an admin. Defaults to new, inProgress and completed. Comma-separated, one or more of: canceled, completed, inProgress, new, pending. */\n status?: string;\n /** UUID of the user whose orders to list. */\n userRef?: string;\n}\n\n/** Query parameters for `sb.shop.products.list()`. */\nexport interface GetProductsQuery {\n /** UUID of the shop category. */\n categoryRef?: string;\n /** Product UUIDs to get, up to 25 per request. Comma-separated, one or more UUIDs. */\n id?: string;\n /** Maximum number of products per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Query parameters for `sb.shop.categories.list()`. */\nexport interface GetShopCategoriesQuery {\n /** UUID of the location whose shop categories to list. */\n locationRef: string;\n}\n\n/** Request body for `sb.shop.products.create()`. */\nexport type CreateProductBody = NonNullable<NonNullable<operations[\"createProduct\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"product\"]>;\n\n/** Request body for `sb.shop.products.createMedia()`. */\nexport type CreateProductMediaBody = NonNullable<NonNullable<operations[\"createProductMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.shop.categories.create()`. */\nexport type CreateShopCategoryBody = NonNullable<NonNullable<operations[\"createShopCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\n/** Request body for `sb.shop.products.update()`. */\nexport type UpdateProductBody = NonNullable<NonNullable<operations[\"updateProduct\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"product\"]>;\n\n/** Request body for `sb.shop.categories.update()`. */\nexport type UpdateShopCategoryBody = NonNullable<NonNullable<operations[\"updateShopCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\nexport function createShop(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n categories: {\n /**\n * Retrieve categories\n *\n * Retrieve all shop categories in the location.\n */\n async list(query: GetShopCategoriesQuery, options?: SpacebringRequestOptions): Promise<ShopCategory[]> {\n return unwrapProp(await client.GET(\"/shop/categories/v1\", { params: { query }, signal: options?.signal }), \"categories\", \"GET /shop/categories/v1\");\n },\n /**\n * Get a category\n *\n * Get a shop category.\n *\n * @param categoryId The id of the shop category.\n * @param options Request options (abort signal).\n */\n async get(categoryId: string, options?: SpacebringRequestOptions): Promise<ShopCategory> {\n return unwrapProp(await client.GET(\"/shop/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"category\", \"GET /shop/categories/v1/{categoryId}\");\n },\n /**\n * Create a category\n *\n * Create a shop category.\n */\n async create(category: CreateShopCategoryBody, options?: SpacebringRequestOptions): Promise<ShopCategory> {\n return unwrapProp(await client.POST(\"/shop/categories/v1\", { body: { category }, signal: options?.signal }), \"category\", \"POST /shop/categories/v1\");\n },\n /**\n * Update a category\n *\n * Update a shop category.\n *\n * @param categoryId The id of the shop category\n * @param category The `category` payload.\n * @param options Request options (abort signal).\n */\n async update(categoryId: string, category: UpdateShopCategoryBody, options?: SpacebringRequestOptions): Promise<ShopCategory> {\n return unwrapProp(await client.PUT(\"/shop/categories/v1/{categoryId}\", { params: { path: { categoryId } }, body: { category }, signal: options?.signal }), \"category\", \"PUT /shop/categories/v1/{categoryId}\");\n },\n /**\n * Delete a category\n *\n * Delete a shop category.\n *\n * @param categoryId The id of the shop category\n * @param options Request options (abort signal).\n */\n async delete(categoryId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/shop/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"DELETE /shop/categories/v1/{categoryId}\");\n },\n },\n orders: {\n /**\n * Retrieve orders\n *\n * Retrieve all orders of products from shop.\n */\n async list(query?: GetOrdersQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; orders: Order[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/shop/orders/v1\", { params: { query }, signal: options?.signal }), \"GET /shop/orders/v1\");\n },\n /**\n * Retrieve orders — iterates every item across all pages.\n *\n * Retrieve all orders of products from shop.\n */\n iterate(query?: Omit<GetOrdersQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Order, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/shop/orders/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /shop/orders/v1\"),\n \"orders\",\n );\n },\n /**\n * Get an order\n *\n * Get a certain order.\n *\n * @param orderId The id of the order.\n * @param options Request options (abort signal).\n */\n async get(orderId: string, options?: SpacebringRequestOptions): Promise<Order> {\n return unwrapProp(await client.GET(\"/shop/orders/v1/{orderId}\", { params: { path: { orderId } }, signal: options?.signal }), \"order\", \"GET /shop/orders/v1/{orderId}\");\n },\n },\n products: {\n /**\n * Retrieve products\n *\n * Retrieve products from shop.\n */\n async list(query?: GetProductsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; products: Product[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/shop/products/v1\", { params: { query }, signal: options?.signal }), \"GET /shop/products/v1\");\n },\n /**\n * Retrieve products — iterates every item across all pages.\n *\n * Retrieve products from shop.\n */\n iterate(query?: Omit<GetProductsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Product, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/shop/products/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /shop/products/v1\"),\n \"products\",\n );\n },\n /**\n * Get a product\n *\n * Get a certain product.\n *\n * @param productId The id of the product.\n * @param options Request options (abort signal).\n */\n async get(productId: string, options?: SpacebringRequestOptions): Promise<Product> {\n return unwrapProp(await client.GET(\"/shop/products/v1/{productId}\", { params: { path: { productId } }, signal: options?.signal }), \"product\", \"GET /shop/products/v1/{productId}\");\n },\n /**\n * Create a product\n *\n * Create a product in shop.\n */\n async create(product: CreateProductBody, options?: SpacebringRequestOptions): Promise<Product> {\n return unwrapProp(await client.POST(\"/shop/products/v1\", { body: { product }, signal: options?.signal }), \"product\", \"POST /shop/products/v1\");\n },\n /**\n * Update a product\n *\n * Update a certain product.\n *\n * @param productId The id of the product.\n * @param product The `product` payload.\n * @param options Request options (abort signal).\n */\n async update(productId: string, product: UpdateProductBody, options?: SpacebringRequestOptions): Promise<Product> {\n return unwrapProp(await client.PUT(\"/shop/products/v1/{productId}\", { params: { path: { productId } }, body: { product }, signal: options?.signal }), \"product\", \"PUT /shop/products/v1/{productId}\");\n },\n /**\n * Delete a product\n *\n * Delete a certain product.\n *\n * @param productId The id of the product.\n * @param options Request options (abort signal).\n */\n async delete(productId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/shop/products/v1/{productId}\", { params: { path: { productId } }, signal: options?.signal }), \"DELETE /shop/products/v1/{productId}\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for a product cover image. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `media[0].key` when creating or updating a product within an hour; an image that is not attached by then is discarded.\n */\n async createMedia(media: CreateProductMediaBody, options?: SpacebringRequestOptions): Promise<ProductMedia> {\n return unwrapProp(await client.POST(\"/shop/products/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /shop/products/v1/media\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Subscription entity as returned by the Spacebring API. */\nexport type Subscription = NonNullable<components[\"schemas\"][\"subscription\"]>;\n\n/** Query parameters for `sb.subscriptions.list()`. */\nexport interface GetSubscriptionsQuery {\n /** Filter subscriptions created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter subscriptions created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose subscriptions to list. */\n customerRef?: string;\n /** Maximum number of subscriptions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose subscriptions to list. Omit locationRef and customerRef to list subscriptions across every location of the network, grouped by location. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Sort order as field:direction, where field is startDate, endDate, createDate or renewDate and direction is asc or desc, such as startDate:asc. Applies to a location's subscriptions and needs locationRef. Defaults to createDate:desc. */\n order?: string;\n /** UUID of the plan to filter subscriptions by. Applies to a location's or the network's subscriptions. */\n planRef?: string;\n /** Filter by status: 'active' started and not ended or canceled, 'scheduled' starts in the future, 'incomplete' setup not finished (such as an unsigned contract or an unpaid purchase), 'incompleteExpired' setup was never finished (the contract was declined or the payment canceled), 'canceled' canceled or ended. Defaults to active, scheduled and incomplete. Comma-separated, one or more of: active, scheduled, incomplete, incompleteExpired, canceled. */\n status?: string;\n}\n\n/** Request body for `sb.subscriptions.create()`. */\nexport type CreateSubscriptionBody = NonNullable<operations[\"createSubscription\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.subscriptions.createItem()`. */\nexport type CreateSubscriptionItemBody = NonNullable<NonNullable<operations[\"createSubscriptionItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"item\"]>;\n\n/** Request body for `sb.subscriptions.update()`. */\nexport type UpdateSubscriptionBody = NonNullable<NonNullable<operations[\"updateSubscription\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"subscription\"]>;\n\n/** Request body for `sb.subscriptions.updateItem()`. */\nexport type UpdateSubscriptionItemBody = NonNullable<NonNullable<operations[\"updateSubscriptionItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"item\"]>;\n\nexport function createSubscriptions(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Retrieve subscriptions */\n async list(query?: GetSubscriptionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; subscriptions: Subscription[] }> {\n return unwrap(await client.GET(\"/subscriptions/v1\", { params: { query }, signal: options?.signal }), \"GET /subscriptions/v1\");\n },\n /** Retrieve subscriptions — iterates every item across all pages. */\n iterate(query?: Omit<GetSubscriptionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Subscription, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/subscriptions/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /subscriptions/v1\"),\n \"subscriptions\",\n );\n },\n /**\n * Retrieve a subscription\n *\n * Retrieve a certain subscription.\n *\n * @param subscriptionId The id of the subscription.\n * @param options Request options (abort signal).\n */\n async get(subscriptionId: string, options?: SpacebringRequestOptions): Promise<Subscription> {\n return unwrapProp(await client.GET(\"/subscriptions/v1/{subscriptionId}\", { params: { path: { subscriptionId } }, signal: options?.signal }), \"subscription\", \"GET /subscriptions/v1/{subscriptionId}\");\n },\n /**\n * Create a subscription\n *\n * Create a subscription for a membership or company.\n */\n async create(body: CreateSubscriptionBody, options?: SpacebringRequestOptions): Promise<Subscription> {\n return unwrapProp(await client.POST(\"/subscriptions/v1\", { body, signal: options?.signal }), \"subscription\", \"POST /subscriptions/v1\");\n },\n /**\n * Update a subscription\n *\n * Update a certain subscription.\n *\n * @param subscriptionId The id of the subscription.\n * @param subscription The `subscription` payload.\n * @param options Request options (abort signal).\n */\n async update(subscriptionId: string, subscription: UpdateSubscriptionBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/subscriptions/v1/{subscriptionId}\", { params: { path: { subscriptionId } }, body: { subscription }, signal: options?.signal }), \"PATCH /subscriptions/v1/{subscriptionId}\");\n },\n /**\n * Delete a subscription\n *\n * Delete a certain subscription.\n *\n * @param subscriptionId The id of the subscription.\n * @param options Request options (abort signal).\n */\n async delete(subscriptionId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/subscriptions/v1/{subscriptionId}\", { params: { path: { subscriptionId } }, signal: options?.signal }), \"DELETE /subscriptions/v1/{subscriptionId}\");\n },\n /**\n * Create a subscription item\n *\n * @param subscriptionId The id of the subscription.\n * @param item The `item` payload.\n * @param options Request options (abort signal).\n */\n async createItem(subscriptionId: string, item: CreateSubscriptionItemBody, options?: SpacebringRequestOptions): Promise<Subscription> {\n return unwrapProp(await client.POST(\"/subscriptions/v1/{subscriptionId}/items\", { params: { path: { subscriptionId } }, body: { item }, signal: options?.signal }), \"subscription\", \"POST /subscriptions/v1/{subscriptionId}/items\");\n },\n /**\n * Delete a subscription item\n *\n * @param subscriptionId The id of the subscription.\n * @param itemId The id of the subscription item.\n * @param options Request options (abort signal).\n */\n async deleteItem(subscriptionId: string, itemId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/subscriptions/v1/{subscriptionId}/items/{itemId}\", { params: { path: { subscriptionId, itemId } }, signal: options?.signal }), \"DELETE /subscriptions/v1/{subscriptionId}/items/{itemId}\");\n },\n /**\n * Update a subscription item\n *\n * @param subscriptionId The id of the subscription.\n * @param itemId The id of the subscription item.\n * @param item The `item` payload.\n * @param options Request options (abort signal).\n */\n async updateItem(subscriptionId: string, itemId: string, item: UpdateSubscriptionItemBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/subscriptions/v1/{subscriptionId}/items/{itemId}\", { params: { path: { subscriptionId, itemId } }, body: { item }, signal: options?.signal }), \"PATCH /subscriptions/v1/{subscriptionId}/items/{itemId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Activity entity as returned by the Spacebring API. */\nexport type Activity = NonNullable<components[\"schemas\"][\"ticketActivity\"]>;\n\n/** A SupportTicket entity as returned by the Spacebring API. */\nexport type SupportTicket = NonNullable<components[\"schemas\"][\"ticket\"]>;\n\n/** A TicketMedia entity as returned by the Spacebring API. */\nexport type TicketMedia = NonNullable<operations[\"createSupportTicketMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.support.tickets.list()`. */\nexport interface GetSupportTicketsQuery {\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Filter tickets by requester membership ids. Pass one UUID or multiple unique comma-separated UUIDs without spaces, e.g. `id` or `id1,id2,id3`, up to 100. The memberships must exist in the location. Admins can filter by any requester; other users only by their own membership. */\n membershipRefRequester?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The order of the tickets. createDate:asc, createDate:desc, updateDate:asc or updateDate:desc. Default: createDate:desc */\n order?: string;\n /** Filter tickets by assignee user ids. Pass one UUID or multiple unique comma-separated UUIDs without spaces, e.g. `id` or `id1,id2,id3`, up to 100. The users must exist. Only admins can filter by assignee. */\n userRefAssignee?: string;\n}\n\n/** Request body for `sb.support.tickets.create()`. */\nexport type CreateSupportTicketBody = NonNullable<NonNullable<operations[\"createSupportTicket\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\n/** Request body for `sb.support.tickets.comment.create()`. */\nexport type CreateSupportTicketCommentBody = NonNullable<NonNullable<operations[\"createSupportTicketComment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"activity\"]>;\n\n/** Request body for `sb.support.tickets.createMedia()`. */\nexport type CreateSupportTicketMediaBody = NonNullable<NonNullable<operations[\"createSupportTicketMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.support.tickets.updateAssignee()`. */\nexport type UpdateSupportTicketAssigneeBody = NonNullable<NonNullable<operations[\"updateSupportTicketAssignee\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\n/** Request body for `sb.support.tickets.comment.update()`. */\nexport type UpdateSupportTicketCommentBody = NonNullable<NonNullable<operations[\"updateSupportTicketComment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"activity\"]>;\n\n/** Request body for `sb.support.tickets.updateStatus()`. */\nexport type UpdateSupportTicketStatusBody = NonNullable<NonNullable<operations[\"updateSupportTicketStatus\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\n/** Request body for `sb.support.tickets.updateType()`. */\nexport type UpdateSupportTicketTypeBody = NonNullable<NonNullable<operations[\"updateSupportTicketType\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\nexport function createSupport(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n tickets: {\n /**\n * Retrieve tickets\n *\n * Retrieve all support tickets.\n */\n async list(query: GetSupportTicketsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; tickets?: SupportTicket[] }> {\n return unwrap(await client.GET(\"/support/tickets/v1\", { params: { query }, signal: options?.signal }), \"GET /support/tickets/v1\");\n },\n /**\n * Retrieve tickets — iterates every item across all pages.\n *\n * Retrieve all support tickets.\n */\n iterate(query: Omit<GetSupportTicketsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<SupportTicket, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/support/tickets/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /support/tickets/v1\"),\n \"tickets\",\n );\n },\n /**\n * Retrieve a ticket\n *\n * Retrieve a support ticket.\n *\n * @param id The id of the ticket.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<{ activities?: Activity[]; ticket?: SupportTicket }> {\n return unwrap(await client.GET(\"/support/tickets/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"GET /support/tickets/v1/{id}\");\n },\n /**\n * Create a ticket\n *\n * Create a support ticket.\n */\n async create(ticket: CreateSupportTicketBody, options?: SpacebringRequestOptions): Promise<{ activities?: Activity[]; ticket?: SupportTicket }> {\n return unwrap(await client.POST(\"/support/tickets/v1\", { body: { ticket }, signal: options?.signal }), \"POST /support/tickets/v1\");\n },\n /**\n * Create a ticket media upload\n *\n * Create a media upload for a ticket comment attachment, a file of any type up to 50 MB. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `activity.attachments[0].key` when creating a ticket comment within 25 minutes; a file that is not attached by then is discarded.\n */\n async createMedia(media: CreateSupportTicketMediaBody, options?: SpacebringRequestOptions): Promise<TicketMedia> {\n return unwrapProp(await client.POST(\"/support/tickets/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /support/tickets/v1/media\");\n },\n /**\n * Update a ticket's assignee\n *\n * Update support ticket assignee.\n *\n * @param id The id of the ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async updateAssignee(id: string, ticket: UpdateSupportTicketAssigneeBody, options?: SpacebringRequestOptions): Promise<{ activity?: Activity; ticket?: SupportTicket }> {\n return unwrap(await client.PUT(\"/support/tickets/v1/{id}/assignee\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"PUT /support/tickets/v1/{id}/assignee\");\n },\n /**\n * Update a ticket's status\n *\n * Update support ticket status.\n *\n * @param id The id of the ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async updateStatus(id: string, ticket: UpdateSupportTicketStatusBody, options?: SpacebringRequestOptions): Promise<{ activity?: Activity; ticket?: SupportTicket }> {\n return unwrap(await client.PUT(\"/support/tickets/v1/{id}/status\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"PUT /support/tickets/v1/{id}/status\");\n },\n /**\n * Update a ticket's type\n *\n * Update a support ticket type.\n *\n * @param id The id of the ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async updateType(id: string, ticket: UpdateSupportTicketTypeBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/support/tickets/v1/{id}/type\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"PATCH /support/tickets/v1/{id}/type\");\n },\n comment: {\n /**\n * Create a ticket comment\n *\n * Create a support ticket comment. To attach a file, create a media upload first, send the file, then pass its key as `activity.attachments[0].key`; a 409 response means the file has not been received yet, so retry shortly.\n */\n async create(activity: CreateSupportTicketCommentBody, options?: SpacebringRequestOptions): Promise<Activity> {\n return unwrapProp(await client.POST(\"/support/tickets/v1/comment\", { body: { activity }, signal: options?.signal }), \"activity\", \"POST /support/tickets/v1/comment\");\n },\n /**\n * Update a ticket comment\n *\n * Update the text of a support ticket comment. Only the comment author can edit it, and only comments without an attachment.\n *\n * @param id The id of the ticket activity.\n * @param activity The `activity` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, activity: UpdateSupportTicketCommentBody, options?: SpacebringRequestOptions): Promise<Activity> {\n return unwrapProp(await client.PATCH(\"/support/tickets/v1/comment/{id}\", { params: { path: { id } }, body: { activity }, signal: options?.signal }), \"activity\", \"PATCH /support/tickets/v1/comment/{id}\");\n },\n /**\n * Delete a ticket comment\n *\n * Delete a support ticket comment.\n *\n * @param id The id of the ticket activity.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/support/tickets/v1/comment/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /support/tickets/v1/comment/{id}\");\n },\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Balance entity as returned by the Spacebring API. */\nexport type Balance = NonNullable<components[\"schemas\"][\"balance\"]>;\n\n/** A CreditScheduledTransaction entity as returned by the Spacebring API. */\nexport type CreditScheduledTransaction = NonNullable<operations[\"getScheduledCreditsTransactions\"][\"responses\"][200][\"content\"][\"application/json\"][\"scheduledTransactions\"]>[number];\n\n/** A CreditTransaction entity as returned by the Spacebring API. */\nexport type CreditTransaction = NonNullable<components[\"schemas\"][\"transactionCredits\"]>;\n\n/** A DayPassScheduledTransaction entity as returned by the Spacebring API. */\nexport type DayPassScheduledTransaction = NonNullable<operations[\"getScheduledDayPassesTransactions\"][\"responses\"][200][\"content\"][\"application/json\"][\"scheduledTransactions\"]>[number];\n\n/** A DayPassTransaction entity as returned by the Spacebring API. */\nexport type DayPassTransaction = NonNullable<components[\"schemas\"][\"transactionDayPasses\"]>;\n\n/** A MoneyTransaction entity as returned by the Spacebring API. */\nexport type MoneyTransaction = NonNullable<operations[\"getMoneyTransaction\"][\"responses\"][200][\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** A Refund entity as returned by the Spacebring API. */\nexport type Refund = NonNullable<operations[\"refundMoneyTransaction\"][\"responses\"][200][\"content\"][\"application/json\"][\"refund\"]>;\n\n/** Query parameters for `sb.transactions.credits.list()`. */\nexport interface GetCreditsTransactionsQuery {\n /** @deprecated Use customerRef instead. The id of the company to get transactions for. */\n companyRef?: string;\n /** Get transactions with greater or equal createDate. Example: createDate[gte]=2021-05-21T10:00:00Z */\n \"createDate[gte]\"?: string;\n /** Get transactions with less or equal createDate. Example: createDate[lte]=2021-05-21T10:00:00Z */\n \"createDate[lte]\"?: string;\n /** UUID of the company or membership whose credits transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose credits transactions to list. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. The id of the membership to get transactions for. */\n membershipRef?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by payment status: 'succeeded' completed, 'pending' awaiting payment, 'processing' being settled by the gateway, 'failed' did not go through, 'canceled' called off before completion. Comma-separated, one or more of: canceled, failed, pending, processing, succeeded. */\n status?: string;\n /** Filter by what moved the credits: allocations add credits ('adminAllocation' granted by an admin, 'subscriptionAllocation' from a plan, 'purchaseAllocation' from a bought package); 'booking', 'order', 'eventTicket' and 'adminCharge' spend them; 'refund' returns them; 'expiration' and 'subscriptionExpiration' remove unused credits. Matches analytics report type filters. Comma-separated, one or more of: adminAllocation, adminCharge, booking, eventTicket, expiration, order, purchaseAllocation, refund, subscriptionAllocation, subscriptionExpiration. */\n type?: string;\n}\n\n/** Query parameters for `sb.transactions.dayPasses.list()`. */\nexport interface GetDayPassesTransactionsQuery {\n /** @deprecated Use customerRef instead. The id of the company to get transactions for. */\n companyRef?: string;\n /** Get transactions with greater or equal createDate. Example: createDate[gte]=2021-05-21T10:00:00Z */\n \"createDate[gte]\"?: string;\n /** Get transactions with less or equal createDate. Example: createDate[lte]=2021-05-21T10:00:00Z */\n \"createDate[lte]\"?: string;\n /** UUID of the company or membership whose day pass transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose day pass transactions to list. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. The id of the membership to get transactions for. */\n membershipRef?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by what moved the day passes: allocations add passes ('adminAllocation' granted by an admin, 'subscriptionAllocation' from a plan, 'purchaseAllocation' from a bought package); 'booking' and 'adminCharge' spend them; 'refund' returns them; 'expiration' and 'subscriptionExpiration' remove unused passes. Matches analytics report type filters. Comma-separated, one or more of: adminAllocation, adminCharge, booking, expiration, purchaseAllocation, refund, subscriptionAllocation, subscriptionExpiration. */\n type?: string;\n}\n\n/** Query parameters for `sb.transactions.money.list()`. */\nexport interface GetMoneyTransactionsQuery {\n /** Get transactions with greater or equal createDate. Example: createDate[gte]=2021-05-21T10:00:00Z */\n \"createDate[gte]\"?: string;\n /** Get transactions with less or equal createDate. Example: createDate[lte]=2021-05-21T10:00:00Z */\n \"createDate[lte]\"?: string;\n /** UUID of the company or user whose money transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose money transactions to list. */\n locationRef?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by payment status: 'succeeded' completed, 'pending' awaiting payment, 'processing' being settled by the gateway, 'failed' did not go through, 'canceled' called off before completion. Comma-separated, one or more of: canceled, failed, pending, processing, succeeded. */\n status?: string;\n /** Filter by what was paid for: 'booking' a resource, 'creditPackage' a credits or day passes package, 'eventTicket' an event ticket, 'invoice' an issued invoice, 'order' a shop order, 'subscription' a membership plan, 'custom' a one-off charge created by an admin. Comma-separated, one or more of: booking, creditPackage, custom, eventTicket, invoice, order, subscription. */\n type?: string;\n}\n\n/** Query parameters for `sb.transactions.credits.scheduled.list()`. */\nexport interface GetScheduledCreditsTransactionsQuery {\n /** UUID of the company or membership whose scheduled credits transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** UUID of the subscription whose scheduled credits transactions to list. */\n subscriptionRef?: string;\n}\n\n/** Query parameters for `sb.transactions.dayPasses.scheduled.list()`. */\nexport interface GetScheduledDayPassesTransactionsQuery {\n /** UUID of the company or membership whose scheduled day pass transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** UUID of the subscription whose scheduled day pass transactions to list. */\n subscriptionRef?: string;\n}\n\n/** Request body for `sb.transactions.credits.create()`. */\nexport type CreateCreditsTransactionBody = NonNullable<NonNullable<operations[\"createCreditsTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** Request body for `sb.transactions.dayPasses.create()`. */\nexport type CreateDayPassesTransactionBody = NonNullable<NonNullable<operations[\"createDayPassesTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** Request body for `sb.transactions.money.create()`. */\nexport type CreateMoneyTransactionBody = NonNullable<operations[\"createMoneyTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.transactions.money.update()`. */\nexport type PatchMoneyTransactionBody = NonNullable<NonNullable<operations[\"patchMoneyTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** Request body for `sb.transactions.money.refund()`. */\nexport type RefundMoneyTransactionBody = NonNullable<NonNullable<operations[\"refundMoneyTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\nexport function createTransactions(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n balances: {\n /**\n * Retrieve credit balance\n *\n * Retrieve credits balance.\n *\n * @param id The id of the customer\n * @param options Request options (abort signal).\n */\n async getCredits(id: string, options?: SpacebringRequestOptions): Promise<Balance[]> {\n return unwrapProp(await client.GET(\"/transactions/v1/balances/{id}/credits\", { params: { path: { id } }, signal: options?.signal }), \"balances\", \"GET /transactions/v1/balances/{id}/credits\");\n },\n /**\n * Retrieve day passes balance\n *\n * @param id The id of the customer\n * @param options Request options (abort signal).\n */\n async getDayPasses(id: string, options?: SpacebringRequestOptions): Promise<Balance[]> {\n return unwrapProp(await client.GET(\"/transactions/v1/balances/{id}/day_passes\", { params: { path: { id } }, signal: options?.signal }), \"balances\", \"GET /transactions/v1/balances/{id}/day_passes\");\n },\n },\n credits: {\n /**\n * Retrieve credit transactions\n *\n * Retrieve credits transactions.\n */\n async list(query?: GetCreditsTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; transactions: CreditTransaction[] }> {\n return unwrap(await client.GET(\"/transactions/credits/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/credits/v1\");\n },\n /**\n * Retrieve credit transactions — iterates every item across all pages.\n *\n * Retrieve credits transactions.\n */\n iterate(query?: Omit<GetCreditsTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CreditTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/credits/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/credits/v1\"),\n \"transactions\",\n );\n },\n /**\n * Retrieve a credit transaction\n *\n * Retrieve a credits transaction.\n *\n * @param id The id of the transaction\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<CreditTransaction> {\n return unwrapProp(await client.GET(\"/transactions/credits/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"transaction\", \"GET /transactions/credits/v1/{id}\");\n },\n /**\n * Create a credit transaction\n *\n * Create a credits transaction.\n */\n async create(transaction: CreateCreditsTransactionBody, options?: SpacebringRequestOptions): Promise<CreditTransaction> {\n return unwrapProp(await client.POST(\"/transactions/credits/v1\", { body: { transaction }, signal: options?.signal }), \"transaction\", \"POST /transactions/credits/v1\");\n },\n scheduled: {\n /**\n * Retrieve scheduled credits transactions\n *\n * Retrieve scheduled credits transactions of a subscription or a customer.\n */\n async list(query?: GetScheduledCreditsTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; scheduledTransactions: CreditScheduledTransaction[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/transactions/credits/scheduled/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/credits/scheduled/v1\");\n },\n /**\n * Retrieve scheduled credits transactions — iterates every item across all pages.\n *\n * Retrieve scheduled credits transactions of a subscription or a customer.\n */\n iterate(query?: Omit<GetScheduledCreditsTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CreditScheduledTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/credits/scheduled/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/credits/scheduled/v1\"),\n \"scheduledTransactions\",\n );\n },\n },\n },\n dayPasses: {\n /**\n * Retrieve day pass transactions\n *\n * Retrieve day passes transactions.\n */\n async list(query?: GetDayPassesTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; transactions: DayPassTransaction[] }> {\n return unwrap(await client.GET(\"/transactions/day_passes/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/day_passes/v1\");\n },\n /**\n * Retrieve day pass transactions — iterates every item across all pages.\n *\n * Retrieve day passes transactions.\n */\n iterate(query?: Omit<GetDayPassesTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<DayPassTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/day_passes/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/day_passes/v1\"),\n \"transactions\",\n );\n },\n /**\n * Retrieve a day pass transaction\n *\n * Retrieve a day passes transaction.\n *\n * @param id The id of the transaction\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<DayPassTransaction> {\n return unwrapProp(await client.GET(\"/transactions/day_passes/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"transaction\", \"GET /transactions/day_passes/v1/{id}\");\n },\n /**\n * Create a day pass transaction\n *\n * Create a day passes transaction.\n */\n async create(transaction: CreateDayPassesTransactionBody, options?: SpacebringRequestOptions): Promise<DayPassTransaction> {\n return unwrapProp(await client.POST(\"/transactions/day_passes/v1\", { body: { transaction }, signal: options?.signal }), \"transaction\", \"POST /transactions/day_passes/v1\");\n },\n scheduled: {\n /**\n * Retrieve scheduled day pass transactions\n *\n * Retrieve scheduled day passes transactions of a subscription or a customer.\n */\n async list(query?: GetScheduledDayPassesTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; scheduledTransactions: DayPassScheduledTransaction[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/transactions/day_passes/scheduled/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/day_passes/scheduled/v1\");\n },\n /**\n * Retrieve scheduled day pass transactions — iterates every item across all pages.\n *\n * Retrieve scheduled day passes transactions of a subscription or a customer.\n */\n iterate(query?: Omit<GetScheduledDayPassesTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<DayPassScheduledTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/day_passes/scheduled/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/day_passes/scheduled/v1\"),\n \"scheduledTransactions\",\n );\n },\n },\n },\n money: {\n /** Retrieve money transactions */\n async list(query?: GetMoneyTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; transactions: MoneyTransaction[] }> {\n return unwrap(await client.GET(\"/transactions/money/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/money/v1\");\n },\n /** Retrieve money transactions — iterates every item across all pages. */\n iterate(query?: Omit<GetMoneyTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<MoneyTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/money/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/money/v1\"),\n \"transactions\",\n );\n },\n /**\n * Retrieve a money transaction\n *\n * @param transactionId The id of the transaction.\n * @param options Request options (abort signal).\n */\n async get(transactionId: string, options?: SpacebringRequestOptions): Promise<MoneyTransaction> {\n return unwrapProp(await client.GET(\"/transactions/money/v1/{transactionId}\", { params: { path: { transactionId } }, signal: options?.signal }), \"transaction\", \"GET /transactions/money/v1/{transactionId}\");\n },\n /**\n * Create a money transaction\n *\n * Create a money transaction by charging a customer for a custom item.\n */\n async create(body: CreateMoneyTransactionBody, options?: SpacebringRequestOptions): Promise<MoneyTransaction> {\n return unwrapProp(await client.POST(\"/transactions/money/v1\", { body, signal: options?.signal }), \"transaction\", \"POST /transactions/money/v1\");\n },\n /**\n * Update a money transaction\n *\n * Change the internal note of a money transaction, or approve or cancel a pending money transaction paid externally. A user needs the Billing permission in the transaction's location.\n *\n * @param transactionId The id of the transaction.\n * @param transaction The `transaction` payload.\n * @param options Request options (abort signal).\n */\n async update(transactionId: string, transaction: PatchMoneyTransactionBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/transactions/money/v1/{transactionId}\", { params: { path: { transactionId } }, body: { transaction }, signal: options?.signal }), \"PATCH /transactions/money/v1/{transactionId}\");\n },\n /**\n * Refund a money transaction\n *\n * Refund a succeeded money transaction, fully or partially, through the payment gateway it was paid with.\n *\n * @param transactionId The id of the transaction.\n * @param transaction The `transaction` payload.\n * @param options Request options (abort signal).\n */\n async refund(transactionId: string, transaction?: RefundMoneyTransactionBody, options?: SpacebringRequestOptions): Promise<Refund> {\n return unwrapProp(await client.POST(\"/transactions/money/v1/{transactionId}/refund\", { params: { path: { transactionId } }, body: transaction === undefined ? undefined : { transaction }, signal: options?.signal }), \"refund\", \"POST /transactions/money/v1/{transactionId}/refund\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Contact entity as returned by the Spacebring API. */\nexport type Contact = NonNullable<components[\"schemas\"][\"contact\"]>;\n\n/** A Request entity as returned by the Spacebring API. */\nexport type Request = NonNullable<components[\"schemas\"][\"visitRequest\"]>;\n\n/** A Visit entity as returned by the Spacebring API. */\nexport type Visit = NonNullable<components[\"schemas\"][\"visit\"]>;\n\n/** Query parameters for `sb.visitors.contacts.list()`. */\nexport interface GetContactsQuery {\n /** The maximum number of contacts to return. Default is 25. */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The id of the location. */\n locationRef: string;\n /** The create date filter of items. */\n createDate?: { lte?: string; gte?: string };\n}\n\n/** Query parameters for `sb.visitors.requests.list()`. */\nexport interface GetRequestsQuery {\n /** The id of the location. */\n locationRef: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The number of items to return. */\n limit?: number;\n /** The create date filter of items. */\n createDate?: { lte?: string; gte?: string };\n}\n\n/** Query parameters for `sb.visitors.visits.list()`. */\nexport interface GetVisitsQuery {\n /** The id of the location. */\n locationRef: string;\n /** The id of the user, host of the visit. */\n userRefHost?: string;\n /** The id of the user, visitor of the visit. */\n userRefVisitor?: string;\n /** The date filter of items. */\n createDate?: { lte?: string; gte?: string };\n /** The visit date filter of items. */\n date?: { lte?: string; gte?: string };\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.visitors.visits.checkIn()`. */\nexport type CheckInVisitBody = NonNullable<operations[\"checkInVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.visitors.visits.checkOut()`. */\nexport type CheckOutVisitBody = NonNullable<operations[\"checkOutVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.visitors.contacts.create()`. */\nexport type CreateContactBody = NonNullable<NonNullable<operations[\"createContact\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"contact\"]>;\n\n/** Request body for `sb.visitors.requests.create()`. */\nexport type CreateRequestBody = NonNullable<NonNullable<operations[\"createRequest\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"request\"]>;\n\n/** Request body for `sb.visitors.visits.create()`. */\nexport type CreateVisitBody = NonNullable<NonNullable<operations[\"createVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"visit\"]>;\n\n/** Request body for `sb.visitors.visits.update()`. */\nexport type UpdateVisitBody = NonNullable<NonNullable<operations[\"updateVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"visit\"]>;\n\nexport function createVisitors(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n contacts: {\n /** Get contacts */\n async list(query: GetContactsQuery, options?: SpacebringRequestOptions): Promise<{ contacts?: Contact[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/visitors/contacts/v1\", { params: { query }, signal: options?.signal }), \"GET /visitors/contacts/v1\");\n },\n /** Get contacts — iterates every item across all pages. */\n iterate(query: Omit<GetContactsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Contact, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/visitors/contacts/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /visitors/contacts/v1\"),\n \"contacts\",\n );\n },\n /**\n * Get a contact\n *\n * @param contactId The id of the contact.\n * @param options Request options (abort signal).\n */\n async get(contactId: string, options?: SpacebringRequestOptions): Promise<Contact> {\n return unwrapProp(await client.GET(\"/visitors/contacts/v1/{contactId}\", { params: { path: { contactId } }, signal: options?.signal }), \"contact\", \"GET /visitors/contacts/v1/{contactId}\");\n },\n /** Create a contact */\n async create(contact: CreateContactBody, options?: SpacebringRequestOptions): Promise<Contact> {\n return unwrapProp(await client.POST(\"/visitors/contacts/v1\", { body: { contact }, signal: options?.signal }), \"contact\", \"POST /visitors/contacts/v1\");\n },\n },\n requests: {\n /** Get requests */\n async list(query: GetRequestsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; requests?: Request[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/visitors/requests/v1\", { params: { query }, signal: options?.signal }), \"GET /visitors/requests/v1\");\n },\n /** Get requests — iterates every item across all pages. */\n iterate(query: Omit<GetRequestsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Request, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/visitors/requests/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /visitors/requests/v1\"),\n \"requests\",\n );\n },\n /**\n * Retrieve a request\n *\n * @param id The id of the request.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Request> {\n return unwrapProp(await client.GET(\"/visitors/requests/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"request\", \"GET /visitors/requests/v1/{id}\");\n },\n /** Create a request */\n async create(request: CreateRequestBody, options?: SpacebringRequestOptions): Promise<Request> {\n return unwrapProp(await client.POST(\"/visitors/requests/v1\", { body: { request }, signal: options?.signal }), \"request\", \"POST /visitors/requests/v1\");\n },\n /**\n * Approve a request\n *\n * @param id The id of the request\n * @param options Request options (abort signal).\n */\n async approve(id: string, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/requests/v1/{id}/approve\", { params: { path: { id } }, signal: options?.signal }), \"visit\", \"POST /visitors/requests/v1/{id}/approve\");\n },\n /**\n * Reject a request\n *\n * @param id The id of the request\n * @param options Request options (abort signal).\n */\n async reject(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/visitors/requests/v1/{id}/reject\", { params: { path: { id } }, signal: options?.signal }), \"POST /visitors/requests/v1/{id}/reject\");\n },\n },\n visits: {\n /** Retrieve visits */\n async list(query: GetVisitsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; visits?: Visit[] }> {\n return unwrap(await client.GET(\"/visitors/visits/v1\", { params: { query }, signal: options?.signal }), \"GET /visitors/visits/v1\");\n },\n /** Retrieve visits — iterates every item across all pages. */\n iterate(query: Omit<GetVisitsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Visit, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/visitors/visits/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /visitors/visits/v1\"),\n \"visits\",\n );\n },\n /**\n * Retrieve a visit\n *\n * Retrieve a visit by id.\n *\n * @param id The id of the visit\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.GET(\"/visitors/visits/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"visit\", \"GET /visitors/visits/v1/{id}\");\n },\n /** Create a visit */\n async create(visit: CreateVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/visits/v1\", { body: { visit }, signal: options?.signal }), \"visit\", \"POST /visitors/visits/v1\");\n },\n /**\n * Update a visit\n *\n * Update a visit by id.\n *\n * @param id The id of the visit\n * @param visit The `visit` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, visit: UpdateVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.PUT(\"/visitors/visits/v1/{id}\", { params: { path: { id } }, body: { visit }, signal: options?.signal }), \"visit\", \"PUT /visitors/visits/v1/{id}\");\n },\n /**\n * Delete a visit\n *\n * Delete a visit by id.\n *\n * @param id The id of the visit\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/visitors/visits/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /visitors/visits/v1/{id}\");\n },\n /** Check in a visit */\n async checkIn(body: CheckInVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/visits/v1/checkin\", { body, signal: options?.signal }), \"visit\", \"POST /visitors/visits/v1/checkin\");\n },\n /** Check out a visit */\n async checkOut(body: CheckOutVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/visits/v1/checkout\", { body, signal: options?.signal }), \"visit\", \"POST /visitors/visits/v1/checkout\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport type { SpacebringDefaults } from \"../../core.js\";\nimport type { paths } from \"../schema.js\";\nimport { createAltcurrencies as altCurrenciesGroup } from \"./altCurrencies.js\";\nimport { createBenefits as benefitsGroup } from \"./benefits.js\";\nimport { createBilling as billingGroup } from \"./billing.js\";\nimport { createCheckins as checkInsGroup } from \"./checkIns.js\";\nimport { createCommunity as communityGroup } from \"./community.js\";\nimport { createContracts as contractsGroup } from \"./contracts.js\";\nimport { createDiscounts as discountsGroup } from \"./discounts.js\";\nimport { createEvents as eventsGroup } from \"./events.js\";\nimport { createFeed as feedGroup } from \"./feed.js\";\nimport { createFloors as floorsGroup } from \"./floors.js\";\nimport { createGuides as guidesGroup } from \"./guides.js\";\nimport { createLocations as locationsGroup } from \"./locations.js\";\nimport { createNetworks as networksGroup } from \"./networks.js\";\nimport { createPackages as packagesGroup } from \"./packages.js\";\nimport { createPlans as plansGroup } from \"./plans.js\";\nimport { createRegistrations as registrationsGroup } from \"./registrations.js\";\nimport { createResources as resourcesGroup } from \"./resources.js\";\nimport { createShop as shopGroup } from \"./shop.js\";\nimport { createSubscriptions as subscriptionsGroup } from \"./subscriptions.js\";\nimport { createSupport as supportGroup } from \"./support.js\";\nimport { createTransactions as transactionsGroup } from \"./transactions.js\";\nimport { createVisitors as visitorsGroup } from \"./visitors.js\";\n\nexport function createResources(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n altCurrencies: altCurrenciesGroup(client, defaults),\n benefits: benefitsGroup(client, defaults),\n billing: billingGroup(client, defaults),\n checkIns: checkInsGroup(client, defaults),\n community: communityGroup(client, defaults),\n contracts: contractsGroup(client, defaults),\n discounts: discountsGroup(client, defaults),\n events: eventsGroup(client, defaults),\n feed: feedGroup(client, defaults),\n floors: floorsGroup(client, defaults),\n guides: guidesGroup(client, defaults),\n locations: locationsGroup(client, defaults),\n networks: networksGroup(client, defaults),\n packages: packagesGroup(client, defaults),\n plans: plansGroup(client, defaults),\n registrations: registrationsGroup(client, defaults),\n resources: resourcesGroup(client, defaults),\n shop: shopGroup(client, defaults),\n subscriptions: subscriptionsGroup(client, defaults),\n support: supportGroup(client, defaults),\n transactions: transactionsGroup(client, defaults),\n visitors: visitorsGroup(client, defaults),\n };\n}\n\nexport type SpacebringResources = ReturnType<typeof createResources>;\n","import createClient, { type Client } from \"openapi-fetch\";\nimport { createResources, type SpacebringResources } from \"./generated/resources/index.js\";\nimport type { paths } from \"./generated/schema.js\";\n\nexport interface SpacebringConfig {\n /** Client ID from Spacebring > Network Settings > Developers. */\n clientId: string;\n /** Client secret from Spacebring > Network Settings > Developers. */\n clientSecret: string;\n /** Network ID, sent as the `spacebring-network-id` header on every request. */\n networkId?: string;\n /** API origin. Defaults to `https://api.spacebring.com`. */\n baseUrl?: string;\n /** Custom fetch implementation (testing, non-standard platforms). */\n fetch?: typeof globalThis.fetch;\n /**\n * How many times to retry a failed request. Retried: 429 rate limits\n * (any method — the API allows 10 requests/second and did not process the\n * request), plus 502/503/504 responses, network errors, and timeouts on\n * idempotent methods only (GET/HEAD/PUT/DELETE/OPTIONS — a gateway error\n * may have reached the API, so POSTs are never replayed). Waits per the\n * `Retry-After` header (seconds or HTTP-date), or with exponential backoff\n * when absent. Defaults to 3; 0 disables.\n */\n maxRetries?: number;\n /**\n * Timeout per request attempt in milliseconds (each retry attempt gets a\n * fresh budget). Timed-out attempts reject with a `TimeoutError` and are\n * retried like network errors. Off by default. Uses `AbortSignal.timeout`;\n * combining with a caller-supplied signal needs `AbortSignal.any`\n * (Node >= 20.3, all modern browsers/workers).\n */\n timeoutMs?: number;\n}\n\nexport interface Spacebring extends SpacebringResources {}\n\n// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: the constructor Object.assigns every resource group onto the instance, so the merge is backed at runtime.\nexport class Spacebring {\n /** Typed openapi-fetch client — escape hatch for endpoints or options the facade does not cover. */\n readonly raw: Client<paths>;\n\n constructor(config: SpacebringConfig) {\n const baseUrl = config.baseUrl ?? \"https://api.spacebring.com\";\n // Basic-auth credentials ride on every request; refuse to send them in\n // cleartext. Loopback is allowed for local proxies/mock servers over http.\n assertSecureBaseUrl(baseUrl);\n const headers: Record<string, string> = {\n Authorization: `Basic ${toBase64(`${config.clientId}:${config.clientSecret}`)}`,\n };\n if (config.networkId) {\n headers[\"spacebring-network-id\"] = config.networkId;\n }\n this.raw = createClient<paths>({\n baseUrl,\n headers,\n fetch: withRetry(config.fetch ?? globalThis.fetch, config.maxRetries ?? 3, config.timeoutMs),\n });\n Object.assign(this, createResources(this.raw, { networkId: config.networkId }));\n }\n}\n\n// A gateway error or dropped connection may have reached the API, so only\n// methods that are safe to replay retry on those; 429 means the request was\n// not processed and is retried regardless of method.\nconst IDEMPOTENT_METHODS = new Set([\"GET\", \"HEAD\", \"PUT\", \"DELETE\", \"OPTIONS\"]);\nconst RETRYABLE_STATUSES = new Set([502, 503, 504]);\n\n/**\n * Adds retry (429 always; 502/503/504, network errors, and timeouts for\n * idempotent methods) and an optional per-attempt timeout. The request is\n * cloned per attempt so bodies can be resent.\n */\nfunction withRetry(\n fetchImpl: typeof globalThis.fetch,\n maxRetries: number,\n timeoutMs: number | undefined,\n): typeof globalThis.fetch {\n if (maxRetries <= 0 && timeoutMs === undefined) return fetchImpl;\n return async (input, init) => {\n const request = input instanceof Request && init === undefined ? input : new Request(input, init);\n const idempotent = IDEMPOTENT_METHODS.has(request.method);\n for (let attempt = 0; ; attempt += 1) {\n let response: Response;\n try {\n response = await fetchImpl(request.clone(), attemptInit(request, timeoutMs));\n } catch (error) {\n const retryable = attempt < maxRetries && idempotent && !request.signal.aborted && isTransientError(error);\n if (!retryable) throw error;\n await sleep(backoffMs(attempt), request.signal);\n continue;\n }\n const retryableStatus = response.status === 429 || (idempotent && RETRYABLE_STATUSES.has(response.status));\n if (!retryableStatus || attempt >= maxRetries) return response;\n await sleep(retryDelayMs(response.headers.get(\"retry-after\"), attempt), request.signal);\n }\n };\n}\n\n/** Per-attempt timeout signal, combined with the caller's signal when possible. */\nfunction attemptInit(request: Request, timeoutMs: number | undefined): RequestInit | undefined {\n if (timeoutMs === undefined) return undefined;\n const timeout = AbortSignal.timeout(timeoutMs);\n return {\n signal: typeof AbortSignal.any === \"function\" ? AbortSignal.any([request.signal, timeout]) : timeout,\n };\n}\n\n/** Network failures reject with TypeError, `AbortSignal.timeout` with TimeoutError. */\nfunction isTransientError(error: unknown): boolean {\n return error instanceof TypeError || (error instanceof Error && error.name === \"TimeoutError\");\n}\n\nfunction retryDelayMs(retryAfter: string | null, attempt: number): number {\n if (retryAfter !== null) {\n // Cap server-supplied delays: a misbehaving proxy must not be able to\n // park the client on a multi-hour setTimeout.\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) return Math.min(seconds * 1000, 60_000);\n const date = Date.parse(retryAfter); // HTTP-date form, e.g. \"Wed, 21 Oct 2026 07:28:00 GMT\"\n if (!Number.isNaN(date)) return Math.min(Math.max(date - Date.now(), 0), 60_000);\n }\n return backoffMs(attempt);\n}\n\nfunction backoffMs(attempt: number): number {\n return Math.min(250 * 2 ** attempt + Math.random() * 100, 5_000);\n}\n\n/** Waits `ms`, rejecting immediately with the abort reason if `signal` fires. */\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(signal.reason);\n return;\n }\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal.reason);\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/** Rejects an http:// baseUrl (credentials would go in cleartext); allows loopback. */\nfunction assertSecureBaseUrl(baseUrl: string): void {\n let url: URL;\n try {\n url = new URL(baseUrl);\n } catch {\n throw new Error(`Spacebring baseUrl is not a valid URL: ${baseUrl}`);\n }\n if (url.protocol === \"https:\") return;\n const isLoopback =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\" || url.hostname === \"::1\";\n if (url.protocol === \"http:\" && isLoopback) return;\n throw new Error(\n `Spacebring baseUrl must use https (got \"${url.protocol}//\"): Basic-auth credentials would otherwise be sent in cleartext. Use https, or http only for a loopback host.`,\n );\n}\n\nfunction toBase64(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"utf8\").toString(\"base64\");\n }\n let binary = \"\";\n for (const byte of new TextEncoder().encode(value)) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary);\n}\n"],"mappings":"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","names":["Request","error","final","joiner","createResources","createResources"]}
1
+ {"version":3,"sources":["../node_modules/openapi-fetch/src/index.js","../src/error.ts","../src/core.ts","../src/generated/resources/altCurrencies.ts","../src/generated/resources/benefits.ts","../src/generated/resources/billing.ts","../src/generated/resources/checkIns.ts","../src/generated/resources/community.ts","../src/generated/resources/contracts.ts","../src/generated/resources/discounts.ts","../src/generated/resources/events.ts","../src/generated/resources/feed.ts","../src/generated/resources/floors.ts","../src/generated/resources/guides.ts","../src/generated/resources/locations.ts","../src/generated/resources/networks.ts","../src/generated/resources/packages.ts","../src/generated/resources/plans.ts","../src/generated/resources/registrations.ts","../src/generated/resources/resources.ts","../src/generated/resources/shop.ts","../src/generated/resources/subscriptions.ts","../src/generated/resources/support.ts","../src/generated/resources/transactions.ts","../src/generated/resources/visitors.ts","../src/generated/resources/index.ts","../src/client.ts"],"sourcesContent":["// settings & const\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nconst supportsRequestInitExt = () => {\n return (\n typeof process === \"object\" &&\n Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 &&\n process.versions.undici\n );\n};\n\n/**\n * Returns a cheap, non-cryptographically-secure random ID\n * Courtesy of @imranbarbhuiya (https://github.com/imranbarbhuiya)\n */\nexport function randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\n\n/**\n * Create an openapi-fetch client.\n * @type {import(\"./index.js\").default}\n */\nexport default function createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = undefined,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : undefined;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n\n /**\n * Per-request fetch (keeps settings created in createClient()\n * @param {T} url\n * @param {import('./index.js').FetchOptions<T>} fetchOptions\n */\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n\n let querySerializer =\n typeof globalQuerySerializer === \"function\"\n ? globalQuerySerializer\n : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer =\n typeof requestQuerySerializer === \"function\"\n ? requestQuerySerializer\n : createQuerySerializer({\n ...(typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {}),\n ...requestQuerySerializer,\n });\n }\n\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\n const serializedBody =\n body === undefined\n ? undefined\n : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header),\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === undefined ||\n // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData\n ? {}\n : {\n \"Content-Type\": \"application/json\",\n },\n baseHeaders,\n headers,\n params.header,\n );\n\n // Client level middleware take priority over request-level middleware\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders,\n };\n\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit,\n );\n let response;\n\n /** Add custom parameters to Request object */\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n\n if (finalMiddlewares.length) {\n id = randomID();\n\n // middleware (request)\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer,\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n\n if (!response) {\n // fetch!\n try {\n response = await fetch(request, requestInitExt);\n } catch (error) {\n let errorAfterMiddleware = error;\n // middleware (error)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n // if error is handled by returning a response, skip remaining middleware\n if (result instanceof Response) {\n errorAfterMiddleware = undefined;\n response = result;\n break;\n }\n\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n\n // rethrow error if not handled by middleware\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n\n // middleware (response)\n // execute in reverse-array order (first priority gets last transform)\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id,\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n\n const contentLength = response.headers.get(\"Content-Length\");\n // handle empty content\n if (\n response.status === 204 ||\n request.method === \"HEAD\" ||\n (contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\"))\n ) {\n return response.ok ? { data: undefined, response } : { error: undefined, response };\n }\n\n // parse response (falling back to .text() when necessary)\n if (response.ok) {\n const getResponseData = async () => {\n // if \"stream\", skip parsing entirely\n if (parseAs === \"stream\") {\n return response.body;\n }\n\n if (parseAs === \"json\" && !contentLength) {\n // use text() when no content-length is provided to avoid errors parsing empty bodies (200 with no content)\n const raw = await response.text();\n return raw ? JSON.parse(raw) : undefined;\n }\n\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n\n // handle errors\n let error = await response.text();\n try {\n error = JSON.parse(error); // attempt to parse as JSON\n } catch {\n // noop\n }\n return { error, response };\n }\n\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n },\n };\n}\n\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\n\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\n\n/**\n * Wrap openapi-fetch client to support a path based API.\n * @type {import(\"./index.js\").wrapAsPathBasedClient}\n */\nexport function wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n\n // Put the proxy on the prototype chain of the actual client.\n // This means if we do not have a memoized PathCallForwarder,\n // we fall back to the proxy to synthesize it.\n // However, the proxy itself is not on the hot-path (if we fetch the same\n // endpoint multiple times, only the first call will hit the proxy).\n function Client() {}\n Client.prototype = proxy;\n\n const client = new Client();\n\n // Feed the client back to the proxy handler so it can store the generated\n // PathCallForwarder.\n handler.client = client;\n\n return client;\n}\n\n/**\n * Convenience method to an openapi-fetch path based client.\n * Strictly equivalent to `wrapAsPathBasedClient(createClient(...))`.\n * @type {import(\"./index.js\").createPathBasedClient}\n */\nexport function createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\n\n// utils\n\n/**\n * Serialize primitive param values\n * @type {import(\"./index.js\").serializePrimitiveParam}\n */\nexport function serializePrimitiveParam(name, value, options) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\",\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\n\n/**\n * Serialize object param (shallow only)\n * @type {import(\"./index.js\").serializeObjectParam}\n */\nexport function serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner =\n {\n simple: \",\",\n label: \".\",\n matrix: \";\",\n }[options.style] || \"&\";\n\n // explode: false\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final = values.join(\",\"); // note: values are always joined by comma in explode: false (but joiner can prefix)\n switch (options.style) {\n case \"form\": {\n return `${name}=${final}`;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n default: {\n return final;\n }\n }\n }\n\n // explode: true\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\n\n/**\n * Serialize array param (shallow only)\n * @type {import(\"./index.js\").serializeArrayParam}\n */\nexport function serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n\n // explode: false\n if (options.explode === false) {\n const joiner = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\"; // note: for arrays, joiners vary wildly based on style + explode behavior\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n\n // explode: true\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\"\n ? `${joiner}${values.join(joiner)}`\n : values.join(joiner);\n}\n\n/**\n * Serialize query params to string\n * @type {import(\"./index.js\").createQuerySerializer}\n */\nexport function createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false,\n }),\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\n\n/**\n * Handle different OpenAPI 3.x serialization styles\n * @type {import(\"./index.js\").defaultPathSerializer}\n * @see https://swagger.io/docs/specification/serialization/#path\n */\nexport function defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === undefined || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\n\n/**\n * Serialize body object to string\n * @type {import(\"./index.js\").defaultBodySerializer}\n */\nexport function defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType =\n headers.get instanceof Function\n ? (headers.get(\"Content-Type\") ?? headers.get(\"content-type\"))\n : (headers[\"Content-Type\"] ?? headers[\"content-type\"]);\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\n\n/**\n * Construct URL string from baseUrl and handle path and query params\n * @type {import(\"./index.js\").createFinalURL}\n */\nexport function createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\n\n/**\n * Merge headers a and b, with b taking priority\n * @type {import(\"./index.js\").mergeHeaders}\n */\nexport function mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== undefined) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\n\n/**\n * Remove trailing slash from url\n * @type {import(\"./index.js\").removeTrailingSlash}\n */\nexport function removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n","import type { components } from \"./generated/schema.js\";\n\nexport type SpacebringErrorBody = components[\"schemas\"][\"responseError\"];\n\n/**\n * Error thrown when the Spacebring API responds with a non-2xx status.\n */\nexport class SpacebringError extends Error {\n /** HTTP status code of the failed response. */\n readonly status: number;\n /** Parsed error body returned by the API, if any. */\n readonly body: SpacebringErrorBody | undefined;\n /** The operation the request targeted, e.g. `GET /billing/invoices/v1/{invoiceId}`. */\n readonly operation: string | undefined;\n /** Full URL of the failed request, if known. */\n readonly url: string | undefined;\n\n constructor(status: number, body?: unknown, request?: { operation?: string; url?: string }) {\n const parsed = isErrorBody(body) ? body : undefined;\n let base = parsed?.message ?? `Spacebring API request failed with status ${status}`;\n // Validation errors carry the actual problems in an (untyped) issues array;\n // surface them so the message is actionable without dumping error.body.\n const issues = parsed ? issueSummary(parsed) : undefined;\n if (issues) base += ` — ${issues}`;\n super(request?.operation ? `${base} (${request.operation})` : base);\n this.name = \"SpacebringError\";\n this.status = status;\n this.body = parsed;\n this.operation = request?.operation;\n this.url = request?.url;\n }\n}\n\nfunction isErrorBody(body: unknown): body is SpacebringErrorBody {\n return typeof body === \"object\" && body !== null;\n}\n\n/** Compact \"path: message\" list from a zod-style `issues` array, if the body has one. */\nfunction issueSummary(body: object): string | undefined {\n const issues = (body as { issues?: unknown }).issues;\n if (!Array.isArray(issues) || issues.length === 0) return undefined;\n const parts = issues.slice(0, 3).map((issue) => {\n if (typeof issue !== \"object\" || issue === null) return String(issue);\n const { path, message } = issue as { path?: unknown; message?: unknown };\n const where = Array.isArray(path) && path.length > 0 ? path.join(\".\") : undefined;\n const what = typeof message === \"string\" ? message : JSON.stringify(issue);\n return where ? `${where}: ${what}` : what;\n });\n const more = issues.length > 3 ? `; +${issues.length - 3} more` : \"\";\n return parts.join(\"; \") + more;\n}\n","import { SpacebringError } from \"./error.js\";\n\n/** Client-level defaults threaded into the generated facade. */\nexport interface SpacebringDefaults {\n /** Sent as the `spacebring-network-id` header where the API requires it. */\n networkId?: string;\n}\n\n/** Per-request options accepted by every generated facade method. */\nexport interface SpacebringRequestOptions {\n /** Aborts the request — including any pending retry wait — when triggered. */\n signal?: AbortSignal;\n}\n\ninterface FetchResult<T> {\n data?: T;\n error?: unknown;\n response: Response;\n}\n\n/**\n * Unwraps an openapi-fetch result: returns `data` on success,\n * throws {@link SpacebringError} on any non-2xx response.\n */\nexport function unwrap<T>(result: FetchResult<T>, operation?: string): T {\n if (result.error !== undefined || !result.response.ok) {\n throw new SpacebringError(result.response.status, result.error, {\n operation,\n url: result.response.url || undefined,\n });\n }\n return result.data as T;\n}\n\n/**\n * Returns the single payload property of a success envelope,\n * throwing {@link SpacebringError} when the response has no usable body.\n */\nexport function unwrapProp<Envelope, Key extends keyof Envelope>(\n result: FetchResult<Envelope>,\n key: Key,\n operation?: string,\n): NonNullable<Envelope[Key]> {\n const value = unwrap(result, operation)?.[key];\n if (value === undefined || value === null) {\n throw new SpacebringError(\n result.response.status,\n { message: `Response is missing the \"${String(key)}\" property` },\n { operation, url: result.response.url || undefined },\n );\n }\n return value as NonNullable<Envelope[Key]>;\n}\n\n/**\n * Iterates every item of a paginated list endpoint, following\n * `nextPageToken` until the last page.\n */\nexport async function* paginate<Page extends { nextPageToken?: string }, Key extends keyof Page>(\n fetchPage: (nextPageToken: string | undefined) => Promise<Page>,\n itemsKey: Key,\n): AsyncGenerator<Page[Key] extends readonly (infer Item)[] | undefined ? Item : never, void, undefined> {\n let token: string | undefined;\n do {\n const page = await fetchPage(token);\n const items = (page[itemsKey] ?? []) as Iterable<never>;\n yield* items;\n const next = page.nextPageToken;\n if (next !== undefined && next === token) {\n throw new Error(\"Pagination did not advance: the API returned the same nextPageToken twice\");\n }\n token = next;\n } while (token);\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A AltCurrency entity as returned by the Spacebring API. */\nexport type AltCurrency = NonNullable<components[\"schemas\"][\"altCurrency\"]>;\n\n/** Query parameters for `sb.altCurrencies.list()`. */\nexport interface GetAltCurrenciesQuery {\n /** The id of the location */\n locationRef: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The number of items to return. */\n limit?: number;\n}\n\n/** Request body for `sb.altCurrencies.create()`. */\nexport type CreateAltCurrencyBody = NonNullable<NonNullable<operations[\"createAltCurrency\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"altCurrency\"]>;\n\n/** Request body for `sb.altCurrencies.update()`. */\nexport type UpdateAltCurrencyBody = NonNullable<NonNullable<operations[\"updateAltCurrency\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"altCurrency\"]>;\n\nexport function createAltcurrencies(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve alternative currencies\n *\n * Retrieve all alternative currencies in the location.\n */\n async list(query: GetAltCurrenciesQuery, options?: SpacebringRequestOptions): Promise<{ altCurrencies?: AltCurrency[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/alt_currencies/v1\", { params: { query }, signal: options?.signal }), \"GET /alt_currencies/v1\");\n },\n /**\n * Retrieve alternative currencies — iterates every item across all pages.\n *\n * Retrieve all alternative currencies in the location.\n */\n iterate(query: Omit<GetAltCurrenciesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<AltCurrency, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/alt_currencies/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /alt_currencies/v1\"),\n \"altCurrencies\",\n );\n },\n /**\n * Retrieve an alternative currency\n *\n * @param id The id of the alternative currency\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<AltCurrency> {\n return unwrapProp(await client.GET(\"/alt_currencies/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"altCurrency\", \"GET /alt_currencies/v1/{id}\");\n },\n /** Create an alternative currency */\n async create(altCurrency: CreateAltCurrencyBody, options?: SpacebringRequestOptions): Promise<AltCurrency> {\n return unwrapProp(await client.POST(\"/alt_currencies/v1\", { body: { altCurrency }, signal: options?.signal }), \"altCurrency\", \"POST /alt_currencies/v1\");\n },\n /**\n * Update an alternative currency\n *\n * @param id The id of the alternative currency\n * @param altCurrency The `altCurrency` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, altCurrency: UpdateAltCurrencyBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/alt_currencies/v1/{id}\", { params: { path: { id } }, body: { altCurrency }, signal: options?.signal }), \"PATCH /alt_currencies/v1/{id}\");\n },\n /**\n * Delete an alternative currency\n *\n * @param id The id of the alternative currency\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/alt_currencies/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /alt_currencies/v1/{id}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Application entity as returned by the Spacebring API. */\nexport type Application = NonNullable<components[\"schemas\"][\"benefitApplication\"]>;\n\n/** A Benefit entity as returned by the Spacebring API. */\nexport type Benefit = NonNullable<components[\"schemas\"][\"benefit\"]>;\n\n/** A BenefitCategory entity as returned by the Spacebring API. */\nexport type BenefitCategory = NonNullable<components[\"schemas\"][\"benefitCategory\"]>;\n\n/** A BenefitMedia entity as returned by the Spacebring API. */\nexport type BenefitMedia = NonNullable<operations[\"createBenefitMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.benefits.applications.list()`. */\nexport interface GetBenefitApplicationsQuery {\n /** UUID of the benefit. */\n benefitRef?: string;\n /** Filter by the category of the benefit applied for: the IDs of benefit categories. Comma-separated, one or more UUIDs. */\n categoryRef?: string;\n /** Filter applications submitted on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter applications submitted on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose applications to list. */\n customerRef?: string;\n /** Maximum number of applications per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. Omit locationRef, benefitRef, customerRef and userRef to list applications across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** UUID of the user whose applications to list. */\n userRef?: string;\n}\n\n/** Query parameters for `sb.benefits.categories.list()`. */\nexport interface GetBenefitCategoriesQuery {\n /** UUID of the location whose benefit categories to list, in member-facing order. Omit to list the categories of every location of the network. */\n locationRef?: string;\n}\n\n/** Query parameters for `sb.benefits.list()`. */\nexport interface GetBenefitsQuery {\n /** UUID of the benefit category. */\n categoryRef?: string;\n /** Filter by featured status. Pass true or false. */\n featured?: boolean;\n /** Maximum number of benefits per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. Omit both locationRef and categoryRef to list benefits across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.benefits.applications.create()`. */\nexport type ApplyBenefitBody = NonNullable<NonNullable<operations[\"applyBenefit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"application\"]>;\n\n/** Request body for `sb.benefits.create()`. */\nexport type CreateBenefitBody = NonNullable<NonNullable<operations[\"createBenefit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"benefit\"]>;\n\n/** Request body for `sb.benefits.categories.create()`. */\nexport type CreateBenefitCategoryBody = NonNullable<NonNullable<operations[\"createBenefitCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\n/** Request body for `sb.benefits.createMedia()`. */\nexport type CreateBenefitMediaBody = NonNullable<NonNullable<operations[\"createBenefitMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.benefits.patch()`. */\nexport type PatchBenefitBody = NonNullable<NonNullable<operations[\"patchBenefit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"benefit\"]>;\n\n/** Request body for `sb.benefits.update()`. */\nexport type UpdateBenefitBody = NonNullable<NonNullable<operations[\"updateBenefit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"benefit\"]>;\n\n/** Request body for `sb.benefits.categories.update()`. */\nexport type UpdateBenefitCategoryBody = NonNullable<NonNullable<operations[\"updateBenefitCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\nexport function createBenefits(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve benefits\n *\n * Retrieve all benefits in the location.\n */\n async list(query?: GetBenefitsQuery, options?: SpacebringRequestOptions): Promise<{ benefits: Benefit[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/benefits/v1\", { params: { query }, signal: options?.signal }), \"GET /benefits/v1\");\n },\n /**\n * Retrieve benefits — iterates every item across all pages.\n *\n * Retrieve all benefits in the location.\n */\n iterate(query?: Omit<GetBenefitsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Benefit, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/benefits/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /benefits/v1\"),\n \"benefits\",\n );\n },\n /**\n * Retrieve a benefit\n *\n * @param benefitId The id of the benefit.\n * @param options Request options (abort signal).\n */\n async get(benefitId: string, options?: SpacebringRequestOptions): Promise<Benefit> {\n return unwrapProp(await client.GET(\"/benefits/v1/{benefitId}\", { params: { path: { benefitId } }, signal: options?.signal }), \"benefit\", \"GET /benefits/v1/{benefitId}\");\n },\n /** Create a benefit */\n async create(benefit: CreateBenefitBody, options?: SpacebringRequestOptions): Promise<Benefit> {\n return unwrap(await client.POST(\"/benefits/v1\", { body: { benefit }, signal: options?.signal }), \"POST /benefits/v1\");\n },\n /**\n * Update a benefit\n *\n * @param benefitId The id of the benefit\n * @param benefit The `benefit` payload.\n * @param options Request options (abort signal).\n */\n async update(benefitId: string, benefit: UpdateBenefitBody, options?: SpacebringRequestOptions): Promise<Benefit> {\n return unwrapProp(await client.PUT(\"/benefits/v1/{benefitId}\", { params: { path: { benefitId } }, body: { benefit }, signal: options?.signal }), \"benefit\", \"PUT /benefits/v1/{benefitId}\");\n },\n /**\n * Delete a benefit\n *\n * @param benefitId The id of the benefit\n * @param options Request options (abort signal).\n */\n async delete(benefitId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/benefits/v1/{benefitId}\", { params: { path: { benefitId } }, signal: options?.signal }), \"DELETE /benefits/v1/{benefitId}\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for a benefit cover image. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `media[0].key` when creating or updating a benefit within an hour; an image that is not attached by then is discarded.\n */\n async createMedia(media: CreateBenefitMediaBody, options?: SpacebringRequestOptions): Promise<BenefitMedia> {\n return unwrapProp(await client.POST(\"/benefits/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /benefits/v1/media\");\n },\n /**\n * Partially update a benefit\n *\n * Update the fields of a benefit that the request sets; omitted fields keep their current values.\n *\n * @param benefitId The id of the benefit\n * @param benefit The `benefit` payload.\n * @param options Request options (abort signal).\n */\n async patch(benefitId: string, benefit: PatchBenefitBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/benefits/v1/{benefitId}\", { params: { path: { benefitId } }, body: { benefit }, signal: options?.signal }), \"PATCH /benefits/v1/{benefitId}\");\n },\n applications: {\n /**\n * Retrieve applications\n *\n * Retrieve all benefit applications in the location or for certain benefit.\n */\n async list(query?: GetBenefitApplicationsQuery, options?: SpacebringRequestOptions): Promise<{ applications: Application[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/benefits/applications/v1\", { params: { query }, signal: options?.signal }), \"GET /benefits/applications/v1\");\n },\n /**\n * Retrieve applications — iterates every item across all pages.\n *\n * Retrieve all benefit applications in the location or for certain benefit.\n */\n iterate(query?: Omit<GetBenefitApplicationsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Application, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/benefits/applications/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /benefits/applications/v1\"),\n \"applications\",\n );\n },\n /**\n * Retrieve an application\n *\n * Retrieve a benefit application by id.\n *\n * @param benefitApplicationId The id of the benefit application.\n * @param options Request options (abort signal).\n */\n async get(benefitApplicationId: string, options?: SpacebringRequestOptions): Promise<Application> {\n return unwrapProp(await client.GET(\"/benefits/applications/v1/{benefitApplicationId}\", { params: { path: { benefitApplicationId } }, signal: options?.signal }), \"application\", \"GET /benefits/applications/v1/{benefitApplicationId}\");\n },\n /** Apply for a benefit */\n async create(application: ApplyBenefitBody, options?: SpacebringRequestOptions): Promise<Application> {\n return unwrapProp(await client.POST(\"/benefits/applications/v1\", { body: { application }, signal: options?.signal }), \"application\", \"POST /benefits/applications/v1\");\n },\n },\n categories: {\n /**\n * Retrieve categories\n *\n * Retrieve all benefit categories in the location.\n */\n async list(query?: GetBenefitCategoriesQuery, options?: SpacebringRequestOptions): Promise<BenefitCategory[]> {\n return unwrapProp(await client.GET(\"/benefits/categories/v1\", { params: { query }, signal: options?.signal }), \"categories\", \"GET /benefits/categories/v1\");\n },\n /**\n * Get a category\n *\n * Get a benefit category.\n *\n * @param categoryId The id of the benefit category.\n * @param options Request options (abort signal).\n */\n async get(categoryId: string, options?: SpacebringRequestOptions): Promise<BenefitCategory> {\n return unwrapProp(await client.GET(\"/benefits/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"category\", \"GET /benefits/categories/v1/{categoryId}\");\n },\n /**\n * Create a category\n *\n * Create a benefit category.\n */\n async create(category: CreateBenefitCategoryBody, options?: SpacebringRequestOptions): Promise<BenefitCategory> {\n return unwrapProp(await client.POST(\"/benefits/categories/v1\", { body: { category }, signal: options?.signal }), \"category\", \"POST /benefits/categories/v1\");\n },\n /**\n * Update a category\n *\n * Update a benefit category.\n *\n * @param categoryId The id of the benefit category\n * @param category The `category` payload.\n * @param options Request options (abort signal).\n */\n async update(categoryId: string, category: UpdateBenefitCategoryBody, options?: SpacebringRequestOptions): Promise<BenefitCategory> {\n return unwrapProp(await client.PUT(\"/benefits/categories/v1/{categoryId}\", { params: { path: { categoryId } }, body: { category }, signal: options?.signal }), \"category\", \"PUT /benefits/categories/v1/{categoryId}\");\n },\n /**\n * Delete a category\n *\n * Delete a benefit category.\n *\n * @param categoryId The id of the benefit category\n * @param options Request options (abort signal).\n */\n async delete(categoryId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/benefits/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"DELETE /benefits/categories/v1/{categoryId}\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A CreditNote entity as returned by the Spacebring API. */\nexport type CreditNote = NonNullable<components[\"schemas\"][\"creditNote\"]>;\n\n/** A Invoice entity as returned by the Spacebring API. */\nexport type Invoice = NonNullable<components[\"schemas\"][\"invoice\"]>;\n\n/** A InvoiceItem entity as returned by the Spacebring API. */\nexport type InvoiceItem = NonNullable<components[\"schemas\"][\"invoiceItem\"]>;\n\n/** A Payment entity as returned by the Spacebring API. */\nexport type Payment = NonNullable<components[\"schemas\"][\"invoicePayment\"]>;\n\n/** A UpcomingItem entity as returned by the Spacebring API. */\nexport type UpcomingItem = NonNullable<components[\"schemas\"][\"invoiceItem\"]>;\n\n/** Query parameters for `sb.billing.creditNotes.list()`. */\nexport interface GetCreditNotesQuery {\n /** Filter credit notes created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter credit notes created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the invoice whose credit notes to list. */\n invoiceRef?: string;\n /** Maximum number of credit notes per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose credit notes to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by credit note status: issued (in effect) or voided (cancelled and no longer valid). Comma-separated, one or more of: issued, voided. */\n status?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.list()`. */\nexport interface GetInvoicesQuery {\n /** @deprecated Use customerRef instead. UUID of the company whose invoices to list. */\n companyRef?: string;\n /** Filter invoices created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter invoices created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose invoices to list. */\n customerRef?: string;\n /** Filter invoices issued on or after this date (ISO 8601). Use with issueDate[lte] for a range. */\n \"issueDate[gte]\"?: string;\n /** Filter invoices issued on or before this date (ISO 8601). Use with issueDate[gte] for a range. */\n \"issueDate[lte]\"?: string;\n /** Maximum number of invoices per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose invoices to list. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. UUID of the membership whose invoices to list. */\n membershipRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Case-insensitive search by invoice code or number. Requires customerRef or locationRef. */\n q?: string;\n /** Filter by invoice status: draft (created but not sent), issued (sent to the customer but unpaid), paid (fully paid) or voided (cancelled and no longer valid). Comma-separated, one or more of: draft, issued, paid, voided. */\n status?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.items.getUpcoming()`. */\nexport interface GetUpcomingInvoiceItemsQuery {\n /** The id of the company. */\n companyRef?: string;\n /** The id of the customer. */\n customerRef?: string;\n /** The id of the membership. */\n membershipRef?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.getUpcoming()`. */\nexport interface GetUpcomingInvoiceQuery {\n /** The id of the subscription. */\n subscriptionRef?: string;\n}\n\n/** Query parameters for `sb.billing.invoices.items.list()`. */\nexport interface ListInvoiceItemsQuery {\n /** Filter invoice items created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter invoice items created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose invoice items to list. */\n customerRef?: string;\n /** Filter invoice items on invoices issued on or after this date (ISO 8601). Items not on an issued invoice are excluded. Use with issueDate[lte] for a range. */\n \"issueDate[gte]\"?: string;\n /** Filter invoice items on invoices issued on or before this date (ISO 8601). Items not on an issued invoice are excluded. Use with issueDate[gte] for a range. */\n \"issueDate[lte]\"?: string;\n /** Maximum number of invoice items per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose invoice items to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by the status of the invoice the item is on: draft (created but not sent), issued (sent to the customer but unpaid), paid (fully paid) or voided (cancelled and no longer valid). Items not on an invoice are excluded. Comma-separated, one or more of: draft, issued, paid, voided. */\n status?: string;\n /** UUID of the invoice whose items to list, in place of customerRef or locationRef or with them. Pages and sorts like the rest of the list, and the other filters still apply. */\n invoiceRef?: string;\n /** Filter by whether the item is pending: not on an invoice and not part of a subscription. Pass true or false. */\n pending?: \"true\" | \"false\";\n /** Filter by invoice item type. Comma-separated, one or more of: creditPackage, custom, booking, eventTicket, subscription, order. */\n type?: string;\n}\n\n/** Request body for `sb.billing.creditNotes.create()`. */\nexport type CreateCreditNoteBody = NonNullable<NonNullable<operations[\"createCreditNote\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"creditNote\"]>;\n\n/** Request body for `sb.billing.invoices.create()`. */\nexport type CreateInvoiceBody = NonNullable<operations[\"createInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.billing.invoices.items.create()`. */\nexport type CreateInvoiceItemBody = NonNullable<NonNullable<operations[\"createInvoiceItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"invoiceItem\"]>;\n\n/** Request body for `sb.billing.invoices.issue()`. */\nexport type IssueInvoiceBody = NonNullable<NonNullable<operations[\"issueInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"skipAutoCharge\"]>;\n\n/** Request body for `sb.billing.invoices.pay()`. */\nexport type PayInvoiceBody = NonNullable<operations[\"payInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.billing.creditNotes.preview()`. */\nexport type PreviewCreditNoteBody = NonNullable<NonNullable<operations[\"previewCreditNote\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"creditNote\"]>;\n\n/** Request body for `sb.billing.creditNotes.update()`. */\nexport type UpdateCreditNoteBody = NonNullable<NonNullable<operations[\"updateCreditNote\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"creditNote\"]>;\n\n/** Request body for `sb.billing.invoices.update()`. */\nexport type UpdateInvoiceBody = NonNullable<NonNullable<operations[\"updateInvoice\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"invoice\"]>;\n\n/** Request body for `sb.billing.invoices.items.update()`. */\nexport type UpdateInvoiceItemBody = NonNullable<NonNullable<operations[\"updateInvoiceItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"invoiceItem\"]>;\n\nexport function createBilling(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n creditNotes: {\n /**\n * Retrieve credit notes\n *\n * Retrieve all credit notes for a specific invoice or location. One of invoiceRef or locationRef is required.\n */\n async list(query?: GetCreditNotesQuery, options?: SpacebringRequestOptions): Promise<{ creditNotes: CreditNote[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/billing/credit_notes/v1\", { params: { query }, signal: options?.signal }), \"GET /billing/credit_notes/v1\");\n },\n /**\n * Retrieve credit notes — iterates every item across all pages.\n *\n * Retrieve all credit notes for a specific invoice or location. One of invoiceRef or locationRef is required.\n */\n iterate(query?: Omit<GetCreditNotesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CreditNote, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/billing/credit_notes/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /billing/credit_notes/v1\"),\n \"creditNotes\",\n );\n },\n /**\n * Retrieve a credit note\n *\n * Retrieve a specific credit note.\n *\n * @param id The id of the credit note\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<CreditNote> {\n return unwrapProp(await client.GET(\"/billing/credit_notes/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"creditNote\", \"GET /billing/credit_notes/v1/{id}\");\n },\n /**\n * Create a credit note\n *\n * Create a credit note for an invoice.\n */\n async create(creditNote: CreateCreditNoteBody, options?: SpacebringRequestOptions): Promise<CreditNote> {\n return unwrapProp(await client.POST(\"/billing/credit_notes/v1\", { body: { creditNote }, signal: options?.signal }), \"creditNote\", \"POST /billing/credit_notes/v1\");\n },\n /**\n * Update a credit note\n *\n * @param id The id of the credit note\n * @param creditNote The `creditNote` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, creditNote: UpdateCreditNoteBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/credit_notes/v1/{id}\", { params: { path: { id } }, body: { creditNote }, signal: options?.signal }), \"PATCH /billing/credit_notes/v1/{id}\");\n },\n /**\n * Preview a credit note\n *\n * Preview a credit note for an invoice without creating it.\n */\n async preview(creditNote: PreviewCreditNoteBody, options?: SpacebringRequestOptions): Promise<CreditNote> {\n return unwrapProp(await client.POST(\"/billing/credit_notes/v1/preview\", { body: { creditNote }, signal: options?.signal }), \"creditNote\", \"POST /billing/credit_notes/v1/preview\");\n },\n /**\n * Void a credit note\n *\n * Void a credit note permanently: the amount it took off the invoice is owed again. Only an issued credit note of type `prePayment` can be voided, while its invoice is still issued, unpaid and has no payment in progress.\n *\n * @param id The id of the credit note\n * @param options Request options (abort signal).\n */\n async void(id: string, options?: SpacebringRequestOptions): Promise<CreditNote> {\n return unwrapProp(await client.PUT(\"/billing/credit_notes/v1/{id}/void\", { params: { path: { id } }, signal: options?.signal }), \"creditNote\", \"PUT /billing/credit_notes/v1/{id}/void\");\n },\n },\n invoices: {\n /**\n * Retrieve invoices\n *\n * Retrieve all invoices based on certain parameters.\n */\n async list(query?: GetInvoicesQuery, options?: SpacebringRequestOptions): Promise<{ invoices: Invoice[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/billing/invoices/v1\", { params: { query }, signal: options?.signal }), \"GET /billing/invoices/v1\");\n },\n /**\n * Retrieve invoices — iterates every item across all pages.\n *\n * Retrieve all invoices based on certain parameters.\n */\n iterate(query?: Omit<GetInvoicesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Invoice, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/billing/invoices/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /billing/invoices/v1\"),\n \"invoices\",\n );\n },\n /**\n * Retrieve an invoice\n *\n * Retrieve a certain invoice.\n *\n * @param invoiceId The id of the invoice.\n * @param options Request options (abort signal).\n */\n async get(invoiceId: string, options?: SpacebringRequestOptions): Promise<Invoice> {\n return unwrapProp(await client.GET(\"/billing/invoices/v1/{invoiceId}\", { params: { path: { invoiceId } }, signal: options?.signal }), \"invoice\", \"GET /billing/invoices/v1/{invoiceId}\");\n },\n /**\n * Create an invoice\n *\n * Create an invoice for a member or a company.\n */\n async create(body: CreateInvoiceBody, options?: SpacebringRequestOptions): Promise<Invoice> {\n return unwrapProp(await client.POST(\"/billing/invoices/v1\", { body, signal: options?.signal }), \"invoice\", \"POST /billing/invoices/v1\");\n },\n /**\n * Update an invoice\n *\n * Update a draft invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param invoice The `invoice` payload.\n * @param options Request options (abort signal).\n */\n async update(invoiceId: string, invoice: UpdateInvoiceBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/invoices/v1/{invoiceId}\", { params: { path: { invoiceId } }, body: { invoice }, signal: options?.signal }), \"PATCH /billing/invoices/v1/{invoiceId}\");\n },\n /**\n * Delete an invoice\n *\n * Delete a draft invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async delete(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/billing/invoices/v1/{invoiceId}\", { params: { path: { invoiceId } }, signal: options?.signal }), \"DELETE /billing/invoices/v1/{invoiceId}\");\n },\n /**\n * Cancel a payment\n *\n * Cancel a payment on an invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async cancelPayment(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/cancel_payment\", { params: { path: { invoiceId } }, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/cancel_payment\");\n },\n /**\n * Duplicate an invoice\n *\n * Duplicate an invoice, creating a new draft invoice with the same items.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async duplicate(invoiceId: string, options?: SpacebringRequestOptions): Promise<Invoice> {\n return unwrapProp(await client.POST(\"/billing/invoices/v1/{invoiceId}/duplicate\", { params: { path: { invoiceId } }, signal: options?.signal }), \"invoice\", \"POST /billing/invoices/v1/{invoiceId}/duplicate\");\n },\n /**\n * Retrieve the upcoming invoice\n *\n * Retrieve the upcoming invoice preview for a membership or subscription.\n */\n async getUpcoming(query?: GetUpcomingInvoiceQuery, options?: SpacebringRequestOptions): Promise<{ invoice?: Invoice; invoiceItems?: InvoiceItem[]; upcomingItems?: UpcomingItem[] }> {\n return unwrap(await client.GET(\"/billing/invoices/v1/upcoming\", { params: { query }, signal: options?.signal }), \"GET /billing/invoices/v1/upcoming\");\n },\n /**\n * Issue an invoice\n *\n * Issue (finalize) a draft invoice, making it ready for payment.\n *\n * @param invoiceId The id of an invoice.\n * @param skipAutoCharge The `skipAutoCharge` payload.\n * @param options Request options (abort signal).\n */\n async issue(invoiceId: string, skipAutoCharge?: IssueInvoiceBody, options?: SpacebringRequestOptions): Promise<{ invoice?: Invoice; invoiceItems?: InvoiceItem[] }> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/issue\", { params: { path: { invoiceId } }, body: skipAutoCharge === undefined ? undefined : { skipAutoCharge }, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/issue\");\n },\n /**\n * Pay an invoice\n *\n * Mark an invoice as paid by `External Payment`.\n *\n * @param invoiceId The id of an invoice\n * @param body Request body.\n * @param options Request options (abort signal).\n */\n async pay(invoiceId: string, body: PayInvoiceBody, options?: SpacebringRequestOptions): Promise<{ invoice?: Invoice; payment?: Payment }> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/pay\", { params: { path: { invoiceId } }, body, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/pay\");\n },\n /**\n * Resend an invoice\n *\n * Resend an issued invoice notification to the customer.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async resend(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/billing/invoices/v1/{invoiceId}/resend\", { params: { path: { invoiceId } }, signal: options?.signal }), \"POST /billing/invoices/v1/{invoiceId}/resend\");\n },\n /**\n * Void an invoice\n *\n * Void an issued invoice.\n *\n * @param invoiceId The id of an invoice.\n * @param options Request options (abort signal).\n */\n async void(invoiceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/invoices/v1/{invoiceId}/void\", { params: { path: { invoiceId } }, signal: options?.signal }), \"PATCH /billing/invoices/v1/{invoiceId}/void\");\n },\n items: {\n /**\n * List invoice items\n *\n * List invoice items filtered by customer, location, invoice, type, status, pending, or date range. Pass invoiceRef for the items of one invoice; they page like the rest of the list. The createDate filter matches when the item was created; the status and issueDate filters match the invoice the item is on, so they return only items connected to an invoice. Pending items are not on an invoice and not part of a subscription: pass pending=true with customerRef for one customer's pending items, or with locationRef for every pending item at a location.\n */\n async list(query?: ListInvoiceItemsQuery, options?: SpacebringRequestOptions): Promise<{ invoiceItems: InvoiceItem[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/billing/invoices/v1/items\", { params: { query }, signal: options?.signal }), \"GET /billing/invoices/v1/items\");\n },\n /**\n * List invoice items — iterates every item across all pages.\n *\n * List invoice items filtered by customer, location, invoice, type, status, pending, or date range. Pass invoiceRef for the items of one invoice; they page like the rest of the list. The createDate filter matches when the item was created; the status and issueDate filters match the invoice the item is on, so they return only items connected to an invoice. Pending items are not on an invoice and not part of a subscription: pass pending=true with customerRef for one customer's pending items, or with locationRef for every pending item at a location.\n */\n iterate(query?: Omit<ListInvoiceItemsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<InvoiceItem, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/billing/invoices/v1/items\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /billing/invoices/v1/items\"),\n \"invoiceItems\",\n );\n },\n /**\n * Retrieve an invoice item\n *\n * Retrieve a specific invoice item.\n *\n * @param id The id of an invoice item.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<InvoiceItem> {\n return unwrapProp(await client.GET(\"/billing/invoices/v1/items/{id}\", { params: { path: { id } }, signal: options?.signal }), \"invoiceItem\", \"GET /billing/invoices/v1/items/{id}\");\n },\n /**\n * Create an invoice item\n *\n * Create an item in an invoice.\n */\n async create(invoiceItem: CreateInvoiceItemBody, options?: SpacebringRequestOptions): Promise<InvoiceItem> {\n return unwrapProp(await client.POST(\"/billing/invoices/v1/items\", { body: { invoiceItem }, signal: options?.signal }), \"invoiceItem\", \"POST /billing/invoices/v1/items\");\n },\n /**\n * Update an invoice item\n *\n * Update an invoice item on a draft invoice.\n *\n * @param id The id of an invoice item.\n * @param invoiceItem The `invoiceItem` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, invoiceItem: UpdateInvoiceItemBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/billing/invoices/v1/items/{id}\", { params: { path: { id } }, body: { invoiceItem }, signal: options?.signal }), \"PATCH /billing/invoices/v1/items/{id}\");\n },\n /**\n * Delete an invoice item\n *\n * Delete an invoice item from a draft invoice.\n *\n * @param id The id of an invoice item.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/billing/invoices/v1/items/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /billing/invoices/v1/items/{id}\");\n },\n /**\n * List upcoming invoice items\n *\n * List a customer's pending invoice items. Deprecated: use List invoice items with `pending=true` and `customerRef` instead.\n *\n * @deprecated Marked as deprecated in the OpenAPI spec.\n */\n async getUpcoming(query?: GetUpcomingInvoiceItemsQuery, options?: SpacebringRequestOptions): Promise<InvoiceItem[]> {\n return unwrapProp(await client.GET(\"/billing/invoices/v1/items/upcoming\", { params: { query }, signal: options?.signal }), \"invoiceItems\", \"GET /billing/invoices/v1/items/upcoming\");\n },\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** A CheckIn entity as returned by the Spacebring API. */\nexport type CheckIn = NonNullable<operations[\"getCheckIn\"][\"responses\"][200][\"content\"][\"application/json\"][\"checkIn\"]>;\n\n/** Query parameters for `sb.checkIns.list()`. */\nexport interface GetCheckInsQuery {\n /** Filter check-ins whose arrival is on or after this date (ISO 8601). Use with checkInDate[lte] for a range. */\n \"checkInDate[gte]\"?: string;\n /** Filter check-ins whose arrival is on or before this date (ISO 8601). Use with checkInDate[gte] for a range. */\n \"checkInDate[lte]\"?: string;\n /** Maximum number of check-ins per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose check-ins to list. Omit to list check-ins across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by status: 'scheduled' nobody has arrived yet, 'checkedIn' the person is on site, 'checkedOut' they left, 'expired' the window closed with nobody arriving. Defaults to every status. Comma-separated, one or more of: checkedIn, checkedOut, scheduled, expired. */\n status?: string;\n /** Filter by what the check-in is for: 'deskBooking' and 'roomBooking' a booking, 'eventTicket' an event ticket, 'visit' a visit, 'subscription' a member arriving with their personal code. Defaults to every type. Comma-separated, one or more of: deskBooking, roomBooking, eventTicket, visit, subscription. */\n type?: string;\n /** UUID of the user to filter check-ins by. Defaults to check-ins of every user. */\n userRef?: string;\n}\n\n/** Request body for `sb.checkIns.checkIn()`. */\nexport type CheckInBody = NonNullable<operations[\"checkIn\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.checkIns.checkOut()`. */\nexport type CheckOutBody = NonNullable<operations[\"checkOut\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\nexport function createCheckins(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve check-ins\n *\n * Retrieve the check-ins of a location, newest arrival first. With bearer token authentication, the user must be an administrator of the location.\n */\n async list(query?: GetCheckInsQuery, options?: SpacebringRequestOptions): Promise<{ checkIns: CheckIn[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/check_ins/v1\", { params: { query }, signal: options?.signal }), \"GET /check_ins/v1\");\n },\n /**\n * Retrieve check-ins — iterates every item across all pages.\n *\n * Retrieve the check-ins of a location, newest arrival first. With bearer token authentication, the user must be an administrator of the location.\n */\n iterate(query?: Omit<GetCheckInsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CheckIn, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/check_ins/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /check_ins/v1\"),\n \"checkIns\",\n );\n },\n /**\n * Get a check-in\n *\n * Get a check-in by its id. With bearer token authentication, the user must be an administrator of the check-in's location.\n *\n * @param checkInId The ID of the check-in.\n * @param options Request options (abort signal).\n */\n async get(checkInId: string, options?: SpacebringRequestOptions): Promise<CheckIn> {\n return unwrapProp(await client.GET(\"/check_ins/v1/{checkInId}\", { params: { path: { checkInId } }, signal: options?.signal }), \"checkIn\", \"GET /check_ins/v1/{checkInId}\");\n },\n /**\n * Check in\n *\n * Record an arrival for a booking, an event ticket, a visit, or a member's subscription. Identify what to check in with its check-in id, with the location and a six-digit code, or with the location and a customer ref to check a member in without a code. With bearer token authentication, the user must be an administrator of the location.\n */\n async checkIn(body: CheckInBody, options?: SpacebringRequestOptions): Promise<CheckIn> {\n return unwrapProp(await client.POST(\"/check_ins/v1/checkin\", { body, signal: options?.signal }), \"checkIn\", \"POST /check_ins/v1/checkin\");\n },\n /**\n * Check out\n *\n * Record a departure on an open check-in. Identify it with its check-in id, or with the location and the six-digit code it was opened with. With bearer token authentication, the user must be an administrator of the location.\n */\n async checkOut(body: CheckOutBody, options?: SpacebringRequestOptions): Promise<CheckIn> {\n return unwrapProp(await client.POST(\"/check_ins/v1/checkout\", { body, signal: options?.signal }), \"checkIn\", \"POST /check_ins/v1/checkout\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Company entity as returned by the Spacebring API. */\nexport type Company = NonNullable<components[\"schemas\"][\"company\"]>;\n\n/** A CompanyMedia entity as returned by the Spacebring API. */\nexport type CompanyMedia = NonNullable<operations[\"createCompanyMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A Membership entity as returned by the Spacebring API. */\nexport type Membership = NonNullable<components[\"schemas\"][\"membership\"]>;\n\n/** Query parameters for `sb.community.companies.list()`. */\nexport interface GetCompaniesQuery {\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by company's title */\n title?: string;\n /** Filter by types. Pass them as comma separated values. */\n types?: \"member\" | \"nonmember\";\n}\n\n/** Query parameters for `sb.community.memberships.listDeleted()`. */\nexport interface GetMembershipsDeletedQuery {\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Filter by user's email */\n userEmail?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\n/** Query parameters for `sb.community.memberships.list()`. */\nexport interface GetMembershipsQuery {\n /** Filter by company reference */\n companyRef?: string;\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by user's email */\n userEmail?: string;\n /** The id of the user */\n userRef?: string;\n /** use requested to get all membership requests */\n status?: \"requested\";\n /** Filter by types. Pass them as comma separated values. */\n types?: \"member\" | \"nonmember\";\n}\n\n/** Request body for `sb.community.companies.create()`. */\nexport type CreateCompanyBody = NonNullable<NonNullable<operations[\"createCompany\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"company\"]>;\n\n/** Request body for `sb.community.companies.createMedia()`. */\nexport type CreateCompanyMediaBody = NonNullable<NonNullable<operations[\"createCompanyMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.community.memberships.create()`. */\nexport type CreateMembershipBody = NonNullable<operations[\"createMembership\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.community.companies.update()`. */\nexport type UpdateCompanyBody = NonNullable<NonNullable<operations[\"updateCompany\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"company\"]>;\n\n/** Request body for `sb.community.memberships.update()`. */\nexport type UpdateMembershipBody = NonNullable<NonNullable<operations[\"updateMembership\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"membership\"]>;\n\nexport function createCommunity(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n companies: {\n /**\n * Retrieve companies\n *\n * Retrieve all companies.\n */\n async list(query: GetCompaniesQuery, options?: SpacebringRequestOptions): Promise<{ companies?: Company[]; nextPageToken?: string }> {\n return unwrap(await client.GET(\"/community/companies/v1\", { params: { query }, signal: options?.signal }), \"GET /community/companies/v1\");\n },\n /**\n * Retrieve companies — iterates every item across all pages.\n *\n * Retrieve all companies.\n */\n iterate(query: Omit<GetCompaniesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Company, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/community/companies/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /community/companies/v1\"),\n \"companies\",\n );\n },\n /**\n * Retrieve a company\n *\n * Retrieve a certain company.\n *\n * @param id The id of company.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Company> {\n return unwrapProp(await client.GET(\"/community/companies/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"company\", \"GET /community/companies/v1/{id}\");\n },\n /** Create a company */\n async create(company: CreateCompanyBody, options?: SpacebringRequestOptions): Promise<Company> {\n return unwrapProp(await client.POST(\"/community/companies/v1\", { body: { company }, signal: options?.signal }), \"company\", \"POST /community/companies/v1\");\n },\n /**\n * Update a company\n *\n * Update a certain company.\n *\n * @param id The id of the company.\n * @param company The `company` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, company: UpdateCompanyBody, options?: SpacebringRequestOptions): Promise<Company> {\n return unwrapProp(await client.PUT(\"/community/companies/v1/{id}\", { params: { path: { id } }, body: { company }, signal: options?.signal }), \"company\", \"PUT /community/companies/v1/{id}\");\n },\n /**\n * Create a logo upload\n *\n * Create an upload for a company logo. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `logo.key` when creating or updating a company within an hour; a logo that is not attached by then is discarded.\n */\n async createMedia(media: CreateCompanyMediaBody, options?: SpacebringRequestOptions): Promise<CompanyMedia> {\n return unwrapProp(await client.POST(\"/community/companies/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /community/companies/v1/media\");\n },\n },\n memberships: {\n /**\n * Retrieve memberships\n *\n * Retrieve all memberships.\n */\n async list(query: GetMembershipsQuery, options?: SpacebringRequestOptions): Promise<{ memberships?: Membership[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/community/memberships/v1\", { params: { query }, signal: options?.signal }), \"GET /community/memberships/v1\");\n },\n /**\n * Retrieve memberships — iterates every item across all pages.\n *\n * Retrieve all memberships.\n */\n iterate(query: Omit<GetMembershipsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Membership, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/community/memberships/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /community/memberships/v1\"),\n \"memberships\",\n );\n },\n /**\n * Retrieve a membership\n *\n * Retrieve a certain membership.\n *\n * @param id The id of membership.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Membership> {\n return unwrapProp(await client.GET(\"/community/memberships/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"membership\", \"GET /community/memberships/v1/{id}\");\n },\n /**\n * Create a membership\n *\n * Create a membership and send an email invitation to join if type is member.\n */\n async create(body: CreateMembershipBody, options?: SpacebringRequestOptions): Promise<Membership> {\n return unwrapProp(await client.POST(\"/community/memberships/v1\", { body, signal: options?.signal }), \"membership\", \"POST /community/memberships/v1\");\n },\n /**\n * Update a membership\n *\n * Update a certain membership.\n *\n * @param id The id of the membership.\n * @param membership The `membership` payload.\n * @param options Request options (abort signal).\n */\n async update(id: number, membership: UpdateMembershipBody, options?: SpacebringRequestOptions): Promise<Membership> {\n return unwrapProp(await client.PUT(\"/community/memberships/v1/{id}\", { params: { path: { id } }, body: { membership }, signal: options?.signal }), \"membership\", \"PUT /community/memberships/v1/{id}\");\n },\n /**\n * Delete a membership\n *\n * Delete a certain membership.\n *\n * @param id The id of the membership.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/community/memberships/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /community/memberships/v1/{id}\");\n },\n /**\n * Retrieve deleted memberships — iterates every item across all pages.\n *\n * Retrieve all deleted memberships.\n */\n iterateDeleted(query: Omit<GetMembershipsDeletedQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Membership, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/community/memberships/v1/deleted\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /community/memberships/v1/deleted\"),\n \"memberships\",\n );\n },\n /**\n * Retrieve deleted memberships\n *\n * Retrieve all deleted memberships.\n */\n async listDeleted(query: GetMembershipsDeletedQuery, options?: SpacebringRequestOptions): Promise<{ memberships?: Membership[]; nextPageToken?: string }> {\n return unwrap(await client.GET(\"/community/memberships/v1/deleted\", { params: { query }, signal: options?.signal }), \"GET /community/memberships/v1/deleted\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** A Contract entity as returned by the Spacebring API. */\nexport type Contract = NonNullable<operations[\"getContract\"][\"responses\"][200][\"content\"][\"application/json\"][\"contract\"]>;\n\n/** A Template entity as returned by the Spacebring API. */\nexport type Template = NonNullable<operations[\"getTemplate\"][\"responses\"][200][\"content\"][\"application/json\"][\"template\"]>;\n\n/** A TemplateMedia entity as returned by the Spacebring API. */\nexport type TemplateMedia = NonNullable<operations[\"createTemplateMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.contracts.list()`. */\nexport interface GetContractsQuery {\n /** Filter contracts created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter contracts created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer (membership or company). When set, returns only that customer's contracts. */\n customerRef?: string;\n /** Maximum number of contracts per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location. When set, returns contracts in that location. Omit both locationRef and customerRef to list contracts across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Case-insensitive search by contract title, within customerRef or locationRef when given and across the network otherwise. */\n q?: string;\n /** Filter by status: 'draft' created and not sent yet, 'issued' sent and waiting for signatures, 'signed' signed by everyone and active, 'declined' a signer declined it or it expired unsigned, 'terminated' ended by an admin after it was signed. Defaults to every status. Comma-separated, one or more of: draft, issued, signed, declined, terminated. */\n status?: string;\n}\n\n/** Query parameters for `sb.contracts.templates.list()`. */\nexport interface GetTemplatesQuery {\n /** Maximum number of templates per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose templates to list. Omit to list templates across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.contracts.create()`. */\nexport type CreateContractBody = NonNullable<NonNullable<operations[\"createContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"contract\"]>;\n\n/** Request body for `sb.contracts.templates.create()`. */\nexport type CreateTemplateBody = NonNullable<NonNullable<operations[\"createTemplate\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"template\"]>;\n\n/** Request body for `sb.contracts.templates.createMedia()`. */\nexport type CreateTemplateMediaBody = NonNullable<NonNullable<operations[\"createTemplateMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.contracts.issue()`. */\nexport type IssueContractBody = NonNullable<NonNullable<operations[\"issueContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"signatureMethod\"]>;\n\n/** Request body for `sb.contracts.terminate()`. */\nexport type TerminateContractBody = NonNullable<NonNullable<operations[\"terminateContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"reason\"]>;\n\n/** Request body for `sb.contracts.update()`. */\nexport type UpdateContractBody = NonNullable<NonNullable<operations[\"updateContract\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"contract\"]>;\n\n/** Request body for `sb.contracts.templates.update()`. */\nexport type UpdateTemplateBody = NonNullable<NonNullable<operations[\"updateTemplate\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"template\"]>;\n\nexport function createContracts(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve contracts\n *\n * Retrieve all contracts in the location.\n */\n async list(query?: GetContractsQuery, options?: SpacebringRequestOptions): Promise<{ contracts: Contract[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/contracts/v1\", { params: { query }, signal: options?.signal }), \"GET /contracts/v1\");\n },\n /**\n * Retrieve contracts — iterates every item across all pages.\n *\n * Retrieve all contracts in the location.\n */\n iterate(query?: Omit<GetContractsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Contract, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/contracts/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /contracts/v1\"),\n \"contracts\",\n );\n },\n /**\n * Get a contract\n *\n * @param contractId The id of the contract.\n * @param options Request options (abort signal).\n */\n async get(contractId: string, options?: SpacebringRequestOptions): Promise<Contract> {\n return unwrapProp(await client.GET(\"/contracts/v1/{contractId}\", { params: { path: { contractId } }, signal: options?.signal }), \"contract\", \"GET /contracts/v1/{contractId}\");\n },\n /** Create a contract */\n async create(contract: CreateContractBody, options?: SpacebringRequestOptions): Promise<Contract> {\n return unwrapProp(await client.POST(\"/contracts/v1\", { body: { contract }, signal: options?.signal }), \"contract\", \"POST /contracts/v1\");\n },\n /**\n * Update a contract\n *\n * @param contractId The id of the contract.\n * @param contract The `contract` payload.\n * @param options Request options (abort signal).\n */\n async update(contractId: string, contract: UpdateContractBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/contracts/v1/{contractId}\", { params: { path: { contractId } }, body: { contract }, signal: options?.signal }), \"PATCH /contracts/v1/{contractId}\");\n },\n /**\n * Delete a contract\n *\n * @param contractId The id of the contract.\n * @param options Request options (abort signal).\n */\n async delete(contractId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/contracts/v1/{contractId}\", { params: { path: { contractId } }, signal: options?.signal }), \"DELETE /contracts/v1/{contractId}\");\n },\n /**\n * Decline a contract\n *\n * Mark a contract signer as declined. Declining also declines the contract.\n *\n * @param contractId The id of the contract.\n * @param signerId The id of the contract signer.\n * @param options Request options (abort signal).\n */\n async declineContract(contractId: string, signerId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PUT(\"/contracts/v1/{contractId}/signers/{signerId}/decline\", { params: { path: { contractId, signerId } }, signal: options?.signal }), \"PUT /contracts/v1/{contractId}/signers/{signerId}/decline\");\n },\n /**\n * Issue a contract\n *\n * @param contractId The id of the contract.\n * @param signatureMethod The `signatureMethod` payload.\n * @param options Request options (abort signal).\n */\n async issue(contractId: string, signatureMethod: IssueContractBody, options?: SpacebringRequestOptions): Promise<Contract> {\n return unwrapProp(await client.POST(\"/contracts/v1/{contractId}/issue\", { params: { path: { contractId } }, body: { signatureMethod }, signal: options?.signal }), \"contract\", \"POST /contracts/v1/{contractId}/issue\");\n },\n /**\n * Resend a contract\n *\n * Resend the signature request email to the next pending signer of an issued eSignature contract.\n *\n * @param contractId The id of the contract.\n * @param options Request options (abort signal).\n */\n async resend(contractId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/contracts/v1/{contractId}/resend\", { params: { path: { contractId } }, signal: options?.signal }), \"POST /contracts/v1/{contractId}/resend\");\n },\n /**\n * Sign a contract\n *\n * Mark a contract signer as signed. When all signers have signed, the contract becomes signed.\n *\n * @param contractId The id of the contract.\n * @param signerId The id of the contract signer.\n * @param options Request options (abort signal).\n */\n async signContract(contractId: string, signerId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PUT(\"/contracts/v1/{contractId}/signers/{signerId}/sign\", { params: { path: { contractId, signerId } }, signal: options?.signal }), \"PUT /contracts/v1/{contractId}/signers/{signerId}/sign\");\n },\n /**\n * Terminate a contract\n *\n * @param contractId The id of the contract.\n * @param reason The `reason` payload.\n * @param options Request options (abort signal).\n */\n async terminate(contractId: string, reason: TerminateContractBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/contracts/v1/{contractId}/terminate\", { params: { path: { contractId } }, body: { reason }, signal: options?.signal }), \"PATCH /contracts/v1/{contractId}/terminate\");\n },\n templates: {\n /**\n * Retrieve templates\n *\n * Retrieve all contract templates in the location.\n */\n async list(query?: GetTemplatesQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; templates: Template[] }> {\n return unwrap(await client.GET(\"/contracts/templates/v1\", { params: { query }, signal: options?.signal }), \"GET /contracts/templates/v1\");\n },\n /**\n * Retrieve templates — iterates every item across all pages.\n *\n * Retrieve all contract templates in the location.\n */\n iterate(query?: Omit<GetTemplatesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Template, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/contracts/templates/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /contracts/templates/v1\"),\n \"templates\",\n );\n },\n /**\n * Retrieve a template\n *\n * Retrieve a contract template.\n *\n * @param templateId The id of the template.\n * @param options Request options (abort signal).\n */\n async get(templateId: string, options?: SpacebringRequestOptions): Promise<Template> {\n return unwrapProp(await client.GET(\"/contracts/templates/v1/{templateId}\", { params: { path: { templateId } }, signal: options?.signal }), \"template\", \"GET /contracts/templates/v1/{templateId}\");\n },\n /**\n * Create a template\n *\n * Create a contract template from a .docx file uploaded through the template upload endpoint.\n */\n async create(template: CreateTemplateBody, options?: SpacebringRequestOptions): Promise<Template> {\n return unwrapProp(await client.POST(\"/contracts/templates/v1\", { body: { template }, signal: options?.signal }), \"template\", \"POST /contracts/templates/v1\");\n },\n /**\n * Update a template\n *\n * Update a contract template. A new file is uploaded through the template upload endpoint.\n *\n * @param templateId The id of the template.\n * @param template The `template` payload.\n * @param options Request options (abort signal).\n */\n async update(templateId: string, template: UpdateTemplateBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/contracts/templates/v1/{templateId}\", { params: { path: { templateId } }, body: { template }, signal: options?.signal }), \"PATCH /contracts/templates/v1/{templateId}\");\n },\n /**\n * Delete a template\n *\n * Delete a contract template.\n *\n * @param templateId The id of the template.\n * @param options Request options (abort signal).\n */\n async delete(templateId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/contracts/templates/v1/{templateId}\", { params: { path: { templateId } }, signal: options?.signal }), \"DELETE /contracts/templates/v1/{templateId}\");\n },\n /**\n * Create a template upload\n *\n * Create a media upload for a contract template file, a .docx document of up to 50 MB. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `template.file.key` when creating or updating a template within an hour; a file that is not attached by then is discarded.\n */\n async createMedia(media: CreateTemplateMediaBody, options?: SpacebringRequestOptions): Promise<TemplateMedia> {\n return unwrapProp(await client.POST(\"/contracts/templates/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /contracts/templates/v1/media\");\n },\n /**\n * Duplicate a template\n *\n * Duplicate a contract template, creating a copy with the same title and file.\n *\n * @param templateId The id of the template.\n * @param options Request options (abort signal).\n */\n async duplicate(templateId: string, options?: SpacebringRequestOptions): Promise<Template> {\n return unwrapProp(await client.POST(\"/contracts/templates/v1/{templateId}/duplicate\", { params: { path: { templateId } }, signal: options?.signal }), \"template\", \"POST /contracts/templates/v1/{templateId}/duplicate\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Coupon entity as returned by the Spacebring API. */\nexport type Coupon = NonNullable<components[\"schemas\"][\"coupon\"]>;\n\n/** A Promocode entity as returned by the Spacebring API. */\nexport type Promocode = NonNullable<components[\"schemas\"][\"promocode\"]>;\n\n/** A Redemption entity as returned by the Spacebring API. */\nexport type Redemption = NonNullable<components[\"schemas\"][\"discountRedemption\"]>;\n\n/** Query parameters for `sb.discounts.coupons.list()`. */\nexport interface GetCouponsQuery {\n /** Maximum number of coupons per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose coupons to list. Omit to list coupons across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by the product types a coupon applies to; a coupon matches when it applies to any of them. Comma-separated, one or more of: roomBookings, eventSpaceBookings, conferenceRoomBookings, meetingRoomBookings, phoneBoothBookings, stationBookings, studioBookings, hotDeskBookings, dedicatedDeskBookings, officeBookings, parkingBookings, equipmentBookings, eventTickets, shopProducts, packages, subscriptionItems. */\n type?: string;\n}\n\n/** Query parameters for `sb.discounts.listRedemptions()`. */\nexport interface GetDiscountRedemptionsQuery {\n /** UUID of the coupon whose redemptions to list. */\n couponRef?: string;\n /** Maximum number of discount redemptions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** UUID of the promocode whose redemptions to list. */\n promocodeRef?: string;\n}\n\n/** Query parameters for `sb.discounts.promocodes.list()`. */\nexport interface GetPromocodesQuery {\n /** UUID of the coupon whose promocodes to list. */\n couponRef?: string;\n /** UUID of the location whose promocodes to list. Omit with couponRef to list promocodes across every location of the network. */\n locationRef?: string;\n}\n\n/** Request body for `sb.discounts.coupons.create()`. */\nexport type CreateCouponBody = NonNullable<NonNullable<operations[\"createCoupon\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"coupon\"]>;\n\n/** Request body for `sb.discounts.promocodes.create()`. */\nexport type CreatePromocodeBody = NonNullable<NonNullable<operations[\"createPromocode\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"promocode\"]>;\n\n/** Request body for `sb.discounts.coupons.update()`. */\nexport type UpdateCouponBody = NonNullable<NonNullable<operations[\"updateCoupon\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"coupon\"]>;\n\nexport function createDiscounts(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve redemptions — iterates every item across all pages.\n *\n * Retrieve all discount redemptions. Either couponRef or promocodeRef is required.\n */\n iterateRedemptions(query?: Omit<GetDiscountRedemptionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Redemption, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/discounts/v1/redemptions\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /discounts/v1/redemptions\"),\n \"redemptions\",\n );\n },\n /**\n * Retrieve redemptions\n *\n * Retrieve all discount redemptions. Either couponRef or promocodeRef is required.\n */\n async listRedemptions(query?: GetDiscountRedemptionsQuery, options?: SpacebringRequestOptions): Promise<{ redemptions?: Redemption[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/discounts/v1/redemptions\", { params: { query }, signal: options?.signal }), \"GET /discounts/v1/redemptions\");\n },\n coupons: {\n /**\n * Retrieve coupons\n *\n * Retrieve the coupons of a location, or of every location in the network.\n */\n async list(query?: GetCouponsQuery, options?: SpacebringRequestOptions): Promise<{ coupons?: Coupon[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/discounts/v1/coupons\", { params: { query }, signal: options?.signal }), \"GET /discounts/v1/coupons\");\n },\n /**\n * Retrieve coupons — iterates every item across all pages.\n *\n * Retrieve the coupons of a location, or of every location in the network.\n */\n iterate(query?: Omit<GetCouponsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Coupon, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/discounts/v1/coupons\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /discounts/v1/coupons\"),\n \"coupons\",\n );\n },\n /**\n * Get a coupon\n *\n * @param id The id of the coupon\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Coupon> {\n return unwrapProp(await client.GET(\"/discounts/v1/coupons/{id}\", { params: { path: { id } }, signal: options?.signal }), \"coupon\", \"GET /discounts/v1/coupons/{id}\");\n },\n /** Create a coupon */\n async create(coupon: CreateCouponBody, options?: SpacebringRequestOptions): Promise<Coupon> {\n return unwrapProp(await client.POST(\"/discounts/v1/coupons\", { body: { coupon }, signal: options?.signal }), \"coupon\", \"POST /discounts/v1/coupons\");\n },\n /**\n * Update a coupon\n *\n * @param id The id of the coupon\n * @param coupon The `coupon` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, coupon: UpdateCouponBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/discounts/v1/coupons/{id}\", { params: { path: { id } }, body: { coupon }, signal: options?.signal }), \"PATCH /discounts/v1/coupons/{id}\");\n },\n /**\n * Delete a coupon\n *\n * @param id The id of the coupon\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/discounts/v1/coupons/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /discounts/v1/coupons/{id}\");\n },\n },\n promocodes: {\n /**\n * Retrieve promocodes\n *\n * Retrieve all promocodes.\n */\n async list(query?: GetPromocodesQuery, options?: SpacebringRequestOptions): Promise<Promocode[]> {\n return unwrapProp(await client.GET(\"/discounts/v1/promocodes\", { params: { query }, signal: options?.signal }), \"promocodes\", \"GET /discounts/v1/promocodes\");\n },\n /**\n * Get a promocode\n *\n * @param id The id of the promocode\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Promocode> {\n return unwrapProp(await client.GET(\"/discounts/v1/promocodes/{id}\", { params: { path: { id } }, signal: options?.signal }), \"promocode\", \"GET /discounts/v1/promocodes/{id}\");\n },\n /** Create a promocode */\n async create(promocode: CreatePromocodeBody, options?: SpacebringRequestOptions): Promise<Promocode> {\n return unwrapProp(await client.POST(\"/discounts/v1/promocodes\", { body: { promocode }, signal: options?.signal }), \"promocode\", \"POST /discounts/v1/promocodes\");\n },\n /**\n * Archive a promocode\n *\n * @param id The id of the promocode\n * @param options Request options (abort signal).\n */\n async archive(id: string, options?: SpacebringRequestOptions): Promise<Promocode> {\n return unwrapProp(await client.PUT(\"/discounts/v1/promocodes/{id}/archive\", { params: { path: { id } }, signal: options?.signal }), \"promocode\", \"PUT /discounts/v1/promocodes/{id}/archive\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Event entity as returned by the Spacebring API. */\nexport type Event = NonNullable<components[\"schemas\"][\"event\"]>;\n\n/** A EventMedia entity as returned by the Spacebring API. */\nexport type EventMedia = NonNullable<operations[\"createEventMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A EventTicket entity as returned by the Spacebring API. */\nexport type EventTicket = NonNullable<components[\"schemas\"][\"eventTicket\"]>;\n\n/** Query parameters for `sb.events.list()`. */\nexport interface GetEventsByOrganizationQuery {\n /** Filter events whose create date is on or after this date (ISO 8601). */\n \"createDate[gte]\"?: string;\n /** Filter events whose create date is on or before this date (ISO 8601). */\n \"createDate[lte]\"?: string;\n /** Filter events whose end date is after this date (ISO 8601). */\n \"endDate[gt]\"?: string;\n /** Filter events whose end date is on or after this date (ISO 8601). */\n \"endDate[gte]\"?: string;\n /** Filter events whose end date is before this date (ISO 8601). */\n \"endDate[lt]\"?: string;\n /** Filter events whose end date is on or before this date (ISO 8601). */\n \"endDate[lte]\"?: string;\n /** Maximum number of events per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose events to list. Omit to list events across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Sort order of events. One of relevance, createDate:asc, createDate:desc, startDate:asc, startDate:desc, endDate:asc, endDate:desc. */\n order?: string;\n /** Filter events whose start date is after this date (ISO 8601). */\n \"startDate[gt]\"?: string;\n /** Filter events whose start date is on or after this date (ISO 8601). */\n \"startDate[gte]\"?: string;\n /** Filter events whose start date is before this date (ISO 8601). */\n \"startDate[lt]\"?: string;\n /** Filter events whose start date is on or before this date (ISO 8601). */\n \"startDate[lte]\"?: string;\n}\n\n/** Query parameters for `sb.events.tickets.list()`. */\nexport interface GetEventTicketsQuery {\n /** UUID of the customer whose event tickets to list. */\n customerRef?: string;\n /** UUID of the event whose tickets to list. */\n eventRef?: string;\n /** @deprecated Use status \"canceled\" instead. Set to \"true\" to include deleted event tickets. */\n includeDeleted?: string;\n /** Maximum number of event tickets per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose event tickets to list. Omit locationRef, eventRef, customerRef and userRef to list event tickets across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by event ticket status: 'active' the ticket is valid, 'canceled' the ticket was deleted. Defaults to active. Comma-separated, one or more of: active, canceled. */\n status?: string;\n /** UUID of the user whose event tickets to list. */\n userRef?: string;\n}\n\n/** Request body for `sb.events.addEventHosts()`. */\nexport type AddEventHostsBody = NonNullable<NonNullable<operations[\"addEventHosts\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"tickets\"]>;\n\n/** Request body for `sb.events.create()`. */\nexport type CreateEventBody = NonNullable<NonNullable<operations[\"createEvent\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"event\"]>;\n\n/** Request body for `sb.events.createMedia()`. */\nexport type CreateEventMediaBody = NonNullable<NonNullable<operations[\"createEventMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.events.patch()`. */\nexport type PatchEventBody = NonNullable<NonNullable<operations[\"patchEvent\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"event\"]>;\n\n/** Request body for `sb.events.update()`. */\nexport type UpdateEventBody = NonNullable<NonNullable<operations[\"updateEvent\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"event\"]>;\n\n/** Request body for `sb.events.tickets.update()`. */\nexport type UpdateEventTicketBody = NonNullable<NonNullable<operations[\"updateEventTicket\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\nexport function createEvents(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Retrieve events */\n async list(query?: GetEventsByOrganizationQuery, options?: SpacebringRequestOptions): Promise<operations[\"getEventsByOrganization\"][\"responses\"][200][\"content\"][\"application/json\"]> {\n return unwrap(await client.GET(\"/events/v1\", { params: { query }, signal: options?.signal }), \"GET /events/v1\");\n },\n /** Retrieve an event */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.GET(\"/events/v1/{id}\", { params: { header: { \"spacebring-network-id\": defaults.networkId as string }, path: { id } }, signal: options?.signal }), \"event\", \"GET /events/v1/{id}\");\n },\n /** Create an event */\n async create(event: CreateEventBody, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.POST(\"/events/v1\", { body: { event }, signal: options?.signal }), \"event\", \"POST /events/v1\");\n },\n /** Update an event */\n async update(id: string, event: UpdateEventBody, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.PUT(\"/events/v1/{id}\", { params: { path: { id } }, body: { event }, signal: options?.signal }), \"event\", \"PUT /events/v1/{id}\");\n },\n /** Delete an event */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/events/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /events/v1/{id}\");\n },\n /**\n * Add event hosts\n *\n * Add hosts to an event. Creates a free host ticket for each membership without one; existing attendee tickets are switched to the host role. Returns all tickets of the event.\n *\n * @param id The id of the event.\n * @param tickets The `tickets` payload.\n * @param options Request options (abort signal).\n */\n async addEventHosts(id: string, tickets: AddEventHostsBody, options?: SpacebringRequestOptions): Promise<EventTicket[]> {\n return unwrapProp(await client.PUT(\"/events/v1/{id}/hosts\", { params: { path: { id } }, body: { tickets }, signal: options?.signal }), \"tickets\", \"PUT /events/v1/{id}/hosts\");\n },\n /** Cancel an event */\n async cancel(id: string, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.PUT(\"/events/v1/{id}/cancel\", { params: { path: { id } }, signal: options?.signal }), \"event\", \"PUT /events/v1/{id}/cancel\");\n },\n /** Copy an event */\n async copy(id: string, options?: SpacebringRequestOptions): Promise<Event> {\n return unwrapProp(await client.POST(\"/events/v1/{id}/copy\", { params: { path: { id } }, signal: options?.signal }), \"event\", \"POST /events/v1/{id}/copy\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for an event cover image. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `media[0].key` when creating or updating an event within an hour; an image that is not attached by then is discarded.\n */\n async createMedia(media: CreateEventMediaBody, options?: SpacebringRequestOptions): Promise<EventMedia> {\n return unwrapProp(await client.POST(\"/events/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /events/v1/media\");\n },\n /**\n * Partially update an event\n *\n * Update the fields of an event that the request sets; omitted fields keep their current values.\n *\n * @param id The id of the event.\n * @param event The `event` payload.\n * @param options Request options (abort signal).\n */\n async patch(id: string, event: PatchEventBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/events/v1/{id}\", { params: { path: { id } }, body: { event }, signal: options?.signal }), \"PATCH /events/v1/{id}\");\n },\n tickets: {\n /**\n * Retrieve tickets\n *\n * Retrieve all event tickets.\n */\n async list(query?: GetEventTicketsQuery, options?: SpacebringRequestOptions): Promise<{ tickets?: EventTicket[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/events/tickets/v1\", { params: { query }, signal: options?.signal }), \"GET /events/tickets/v1\");\n },\n /**\n * Retrieve tickets — iterates every item across all pages.\n *\n * Retrieve all event tickets.\n */\n iterate(query?: Omit<GetEventTicketsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<EventTicket, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/events/tickets/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /events/tickets/v1\"),\n \"tickets\",\n );\n },\n /**\n * Retrieve a ticket\n *\n * Retrieve an event ticket.\n *\n * @param id The id of the event ticket.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.GET(\"/events/tickets/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"ticket\", \"GET /events/tickets/v1/{id}\");\n },\n /**\n * Update a ticket\n *\n * Update an event ticket. Only the ticket role can be changed.\n *\n * @param id The id of the event ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, ticket: UpdateEventTicketBody, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.PUT(\"/events/tickets/v1/{id}\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"ticket\", \"PUT /events/tickets/v1/{id}\");\n },\n /**\n * Delete a ticket\n *\n * Delete an event ticket. Returns the deleted ticket.\n *\n * @param id The id of the event ticket.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.DELETE(\"/events/tickets/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"ticket\", \"DELETE /events/tickets/v1/{id}\");\n },\n /**\n * Check in a ticket\n *\n * Check in an event ticket. Fails if the ticket is already checked in. Deprecated: this endpoint will be removed in a future release.\n *\n * @param id The id of the event ticket.\n * @param options Request options (abort signal).\n *\n * @deprecated Marked as deprecated in the OpenAPI spec.\n */\n async checkIn(id: string, options?: SpacebringRequestOptions): Promise<EventTicket> {\n return unwrapProp(await client.POST(\"/events/tickets/v1/{id}/checkin\", { params: { path: { id } }, signal: options?.signal }), \"ticket\", \"POST /events/tickets/v1/{id}/checkin\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Comment entity as returned by the Spacebring API. */\nexport type Comment = NonNullable<components[\"schemas\"][\"postComment\"]>;\n\n/** A FeedMedia entity as returned by the Spacebring API. */\nexport type FeedMedia = NonNullable<operations[\"createFeedPostMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A Like entity as returned by the Spacebring API. */\nexport type Like = NonNullable<components[\"schemas\"][\"postLike\"]>;\n\n/** A Post entity as returned by the Spacebring API. */\nexport type Post = NonNullable<components[\"schemas\"][\"post\"]>;\n\n/** Query parameters for `sb.feed.posts.list()`. */\nexport interface GetFeedPostsQuery {\n /** The id of the location. */\n locationRef: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The number of items to return. */\n limit?: number;\n}\n\n/** Request body for `sb.feed.posts.create()`. */\nexport type CreateFeedPostBody = NonNullable<NonNullable<operations[\"createFeedPost\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"post\"]>;\n\n/** Request body for `sb.feed.comments.create()`. */\nexport type CreateFeedPostCommentBody = NonNullable<NonNullable<operations[\"createFeedPostComment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"comment\"]>;\n\n/** Request body for `sb.feed.createMedia()`. */\nexport type CreateFeedPostMediaBody = NonNullable<NonNullable<operations[\"createFeedPostMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.feed.posts.patch()`. */\nexport type PatchFeedPostBody = NonNullable<NonNullable<operations[\"patchFeedPost\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"post\"]>;\n\n/** Request body for `sb.feed.posts.update()`. */\nexport type UpdateFeedPostBody = NonNullable<NonNullable<operations[\"updateFeedPost\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"post\"]>;\n\nexport function createFeed(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Create a media upload\n *\n * Create a media upload for an image or a video in a post. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key in `media[].key` when creating or updating a post within an hour; a file that is not attached by then is discarded. A video must declare its `width` and `height`; an image's dimensions are read from the file.\n */\n async createMedia(media: CreateFeedPostMediaBody, options?: SpacebringRequestOptions): Promise<FeedMedia> {\n return unwrapProp(await client.POST(\"/feed/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /feed/v1/media\");\n },\n comments: {\n /**\n * Create a post comment\n *\n * Create a feed post comment.\n */\n async create(comment: CreateFeedPostCommentBody, options?: SpacebringRequestOptions): Promise<Comment> {\n return unwrapProp(await client.POST(\"/feed/comments/v1\", { body: { comment }, signal: options?.signal }), \"comment\", \"POST /feed/comments/v1\");\n },\n /**\n * Delete a post comment\n *\n * @param id The id of the post comment.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/comments/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/comments/v1/{id}\");\n },\n /**\n * Create a like for a post comment\n *\n * @param id The id of the post comment.\n * @param options Request options (abort signal).\n */\n async createLike(id: string, options?: SpacebringRequestOptions): Promise<Like> {\n return unwrapProp(await client.POST(\"/feed/comments/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"like\", \"POST /feed/comments/v1/{id}/likes\");\n },\n /**\n * Delete a like for a post comment\n *\n * @param id The id of the post comment.\n * @param options Request options (abort signal).\n */\n async deleteLike(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/comments/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/comments/v1/{id}/likes\");\n },\n },\n posts: {\n /**\n * Get posts\n *\n * Get feed posts.\n */\n async list(query: GetFeedPostsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; posts?: Post[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/feed/posts/v1\", { params: { query }, signal: options?.signal }), \"GET /feed/posts/v1\");\n },\n /**\n * Get posts — iterates every item across all pages.\n *\n * Get feed posts.\n */\n iterate(query: Omit<GetFeedPostsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Post, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/feed/posts/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /feed/posts/v1\"),\n \"posts\",\n );\n },\n /**\n * Get a post\n *\n * Get a feed post.\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Post> {\n return unwrapProp(await client.GET(\"/feed/posts/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"post\", \"GET /feed/posts/v1/{id}\");\n },\n /**\n * Create a post\n *\n * Create a feed post.\n */\n async create(post: CreateFeedPostBody, options?: SpacebringRequestOptions): Promise<Post> {\n return unwrapProp(await client.POST(\"/feed/posts/v1\", { body: { post }, signal: options?.signal }), \"post\", \"POST /feed/posts/v1\");\n },\n /**\n * Update a post\n *\n * Update a feed post.\n *\n * @param id The id of the post.\n * @param post The `post` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, post: UpdateFeedPostBody, options?: SpacebringRequestOptions): Promise<Post> {\n return unwrapProp(await client.PUT(\"/feed/posts/v1/{id}\", { params: { path: { id } }, body: { post }, signal: options?.signal }), \"post\", \"PUT /feed/posts/v1/{id}\");\n },\n /**\n * Delete a post\n *\n * Delete a feed post.\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/posts/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/posts/v1/{id}\");\n },\n /**\n * Create a like for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async createLike(id: string, options?: SpacebringRequestOptions): Promise<Like> {\n return unwrapProp(await client.POST(\"/feed/posts/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"like\", \"POST /feed/posts/v1/{id}/likes\");\n },\n /**\n * Delete a like for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async deleteLike(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/feed/posts/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /feed/posts/v1/{id}/likes\");\n },\n /**\n * Get comments for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async getComments(id: string, options?: SpacebringRequestOptions): Promise<Comment[]> {\n return unwrapProp(await client.GET(\"/feed/posts/v1/{id}/comments\", { params: { path: { id } }, signal: options?.signal }), \"comments\", \"GET /feed/posts/v1/{id}/comments\");\n },\n /**\n * Get likes for a post\n *\n * @param id The id of the post.\n * @param options Request options (abort signal).\n */\n async getLikes(id: string, options?: SpacebringRequestOptions): Promise<Like[]> {\n return unwrapProp(await client.GET(\"/feed/posts/v1/{id}/likes\", { params: { path: { id } }, signal: options?.signal }), \"likes\", \"GET /feed/posts/v1/{id}/likes\");\n },\n /**\n * Partially update a post\n *\n * Update the fields of a feed post that the request sets; omitted fields keep their current values.\n *\n * @param id The id of the post.\n * @param post The `post` payload.\n * @param options Request options (abort signal).\n */\n async patch(id: string, post: PatchFeedPostBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/feed/posts/v1/{id}\", { params: { path: { id } }, body: { post }, signal: options?.signal }), \"PATCH /feed/posts/v1/{id}\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { unwrap, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** Query parameters for `sb.floors.list()`. */\nexport interface GetFloorsQuery {\n /** The limit of the floors. */\n limit?: number;\n /** The id of the location. */\n locationRef: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\nexport function createFloors(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Get floors */\n async list(query: GetFloorsQuery, options?: SpacebringRequestOptions): Promise<operations[\"getFloors\"][\"responses\"][200][\"content\"][\"application/json\"]> {\n return unwrap(await client.GET(\"/floors/v1\", { params: { query }, signal: options?.signal }), \"GET /floors/v1\");\n },\n /**\n * Delete a floor\n *\n * @param id The id of the floor.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/floors/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /floors/v1/{id}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Attachment entity as returned by the Spacebring API. */\nexport type Attachment = NonNullable<operations[\"createGuideAttachment\"][\"responses\"][201][\"content\"][\"application/json\"][\"attachment\"]>;\n\n/** A Guide entity as returned by the Spacebring API. */\nexport type Guide = NonNullable<components[\"schemas\"][\"guide\"]>;\n\n/** A GuideMedia entity as returned by the Spacebring API. */\nexport type GuideMedia = NonNullable<operations[\"createGuideMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.guides.list()`. */\nexport interface GetGuidesQuery {\n /** Maximum number of guides per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose guides to list. Omit to list guides across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.guides.createAttachment()`. */\nexport type CreateGuideAttachmentBody = NonNullable<NonNullable<operations[\"createGuideAttachment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"attachment\"]>;\n\n/** Request body for `sb.guides.create()`. */\nexport type CreateGuideBody = NonNullable<NonNullable<operations[\"createGuide\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"guide\"]>;\n\n/** Request body for `sb.guides.createMedia()`. */\nexport type CreateGuideMediaBody = NonNullable<NonNullable<operations[\"createGuideMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.guides.update()`. */\nexport type PatchGuideBody = NonNullable<NonNullable<operations[\"patchGuide\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"guide\"]>;\n\nexport function createGuides(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve guides\n *\n * Retrieve all guides for an organization. Requires locationRef. When using bearer token (non-basic auth), results are filtered by the user's access.\n */\n async list(query?: GetGuidesQuery, options?: SpacebringRequestOptions): Promise<{ guides: Guide[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/guides/v1\", { params: { query }, signal: options?.signal }), \"GET /guides/v1\");\n },\n /**\n * Retrieve guides — iterates every item across all pages.\n *\n * Retrieve all guides for an organization. Requires locationRef. When using bearer token (non-basic auth), results are filtered by the user's access.\n */\n iterate(query?: Omit<GetGuidesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Guide, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/guides/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /guides/v1\"),\n \"guides\",\n );\n },\n /**\n * Retrieve a guide\n *\n * Retrieve a guide by id.\n *\n * @param guideId The id of the guide.\n * @param options Request options (abort signal).\n */\n async get(guideId: string, options?: SpacebringRequestOptions): Promise<Guide> {\n return unwrapProp(await client.GET(\"/guides/v1/{guideId}\", { params: { path: { guideId } }, signal: options?.signal }), \"guide\", \"GET /guides/v1/{guideId}\");\n },\n /**\n * Create a guide\n *\n * Create a guide in an organization.\n */\n async create(guide: CreateGuideBody, options?: SpacebringRequestOptions): Promise<Guide> {\n return unwrapProp(await client.POST(\"/guides/v1\", { body: { guide }, signal: options?.signal }), \"guide\", \"POST /guides/v1\");\n },\n /**\n * Update a guide\n *\n * Update a guide. At least one guide property must be provided.\n *\n * @param guideId The id of the guide\n * @param guide The `guide` payload.\n * @param options Request options (abort signal).\n */\n async update(guideId: string, guide: PatchGuideBody, options?: SpacebringRequestOptions): Promise<Guide> {\n return unwrapProp(await client.PATCH(\"/guides/v1/{guideId}\", { params: { path: { guideId } }, body: { guide }, signal: options?.signal }), \"guide\", \"PATCH /guides/v1/{guideId}\");\n },\n /**\n * Delete a guide\n *\n * @param guideId The id of the guide\n * @param options Request options (abort signal).\n */\n async delete(guideId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/guides/v1/{guideId}\", { params: { path: { guideId } }, signal: options?.signal }), \"DELETE /guides/v1/{guideId}\");\n },\n /**\n * Create an attachment upload\n *\n * Create an upload for a file to attach to a guide, of any type up to 50 MB. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key in `attachments[].key` when creating or updating a guide within an hour; a file that is not attached by then is discarded. The file is served as a download under the declared name.\n */\n async createAttachment(attachment: CreateGuideAttachmentBody, options?: SpacebringRequestOptions): Promise<Attachment> {\n return unwrapProp(await client.POST(\"/guides/v1/attachments\", { body: { attachment }, signal: options?.signal }), \"attachment\", \"POST /guides/v1/attachments\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for an image or a video in a guide. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, add the returned url to the guide `description` as a Markdown image, `![alt text](url)`, when creating or updating a guide within an hour; a file that is not attached by then is discarded. A video must declare its `width` and `height`; an image's dimensions are read from the file.\n */\n async createMedia(media: CreateGuideMediaBody, options?: SpacebringRequestOptions): Promise<GuideMedia> {\n return unwrapProp(await client.POST(\"/guides/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /guides/v1/media\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, paths } from \"../schema.js\";\n\n/** A Location entity as returned by the Spacebring API. */\nexport type Location = NonNullable<components[\"schemas\"][\"location\"]>;\n\nexport function createLocations(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Retrieve all locations */\n async list(options?: SpacebringRequestOptions): Promise<Location[]> {\n return unwrapProp(await client.GET(\"/locations/v1\", { signal: options?.signal }), \"locations\", \"GET /locations/v1\");\n },\n /**\n * Get a location\n *\n * @param locationId The id of the location.\n * @param options Request options (abort signal).\n */\n async get(locationId: string, options?: SpacebringRequestOptions): Promise<Location> {\n return unwrapProp(await client.GET(\"/locations/v1/{locationId}\", { params: { path: { locationId } }, signal: options?.signal }), \"location\", \"GET /locations/v1/{locationId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, paths } from \"../schema.js\";\n\n/** A Network entity as returned by the Spacebring API. */\nexport type Network = NonNullable<components[\"schemas\"][\"network\"]>;\n\nexport function createNetworks(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve networks\n *\n * Retrieve all networks you are in.\n */\n async list(options?: SpacebringRequestOptions): Promise<Network[]> {\n return unwrapProp(await client.GET(\"/networks/v1\", { signal: options?.signal }), \"networks\", \"GET /networks/v1\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { operations, paths } from \"../schema.js\";\n\n/** A Package entity as returned by the Spacebring API. */\nexport type Package = NonNullable<operations[\"getPackage\"][\"responses\"][200][\"content\"][\"application/json\"][\"package\"]>;\n\n/** Query parameters for `sb.packages.list()`. */\nexport interface GetPackagesQuery {\n /** Maximum number of packages per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose packages to list. Omit to list packages across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.packages.create()`. */\nexport type CreatePackageBody = NonNullable<NonNullable<operations[\"createPackage\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"package\"]>;\n\n/** Request body for `sb.packages.update()`. */\nexport type PatchPackageBody = NonNullable<NonNullable<operations[\"patchPackage\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"package\"]>;\n\nexport function createPackages(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve packages\n *\n * Retrieve all packages in the location.\n */\n async list(query?: GetPackagesQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; packages: Package[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/packages/v1\", { params: { query }, signal: options?.signal }), \"GET /packages/v1\");\n },\n /**\n * Retrieve packages — iterates every item across all pages.\n *\n * Retrieve all packages in the location.\n */\n iterate(query?: Omit<GetPackagesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Package, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/packages/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /packages/v1\"),\n \"packages\",\n );\n },\n /**\n * Retrieve a package\n *\n * @param packageId The id of the package.\n * @param options Request options (abort signal).\n */\n async get(packageId: string, options?: SpacebringRequestOptions): Promise<Package> {\n return unwrapProp(await client.GET(\"/packages/v1/{packageId}\", { params: { path: { packageId } }, signal: options?.signal }), \"package\", \"GET /packages/v1/{packageId}\");\n },\n /** Create a package */\n async create(packageBody: CreatePackageBody, options?: SpacebringRequestOptions): Promise<Package> {\n return unwrapProp(await client.POST(\"/packages/v1\", { body: { package: packageBody }, signal: options?.signal }), \"package\", \"POST /packages/v1\");\n },\n /**\n * Update a package\n *\n * @param packageId The id of the package.\n * @param packageBody The `package` payload.\n * @param options Request options (abort signal).\n */\n async update(packageId: string, packageBody: PatchPackageBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/packages/v1/{packageId}\", { params: { path: { packageId } }, body: { package: packageBody }, signal: options?.signal }), \"PATCH /packages/v1/{packageId}\");\n },\n /**\n * Delete a package\n *\n * @param packageId The id of the package.\n * @param options Request options (abort signal).\n */\n async delete(packageId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/packages/v1/{packageId}\", { params: { path: { packageId } }, signal: options?.signal }), \"DELETE /packages/v1/{packageId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Plan entity as returned by the Spacebring API. */\nexport type Plan = NonNullable<components[\"schemas\"][\"plan\"]>;\n\n/** Query parameters for `sb.plans.list()`. */\nexport interface GetPlansQuery {\n /** @deprecated Only applies together with resourceRef. Filter the plans.tiers of `GET /resources/v1/{resourceId}` by their entire field instead. When listing plans for a resource, filter by entire resource vs partial tiers. Pass true or false. */\n entire?: string;\n /** Maximum number of plans per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose plans to list. Omit to list plans across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** @deprecated Read plans.tiers from `GET /resources/v1/{resourceId}` instead. UUID of the resource whose tier plans to list. */\n resourceRef?: string;\n}\n\n/** Request body for `sb.plans.create()`. */\nexport type CreatePlanBody = NonNullable<NonNullable<operations[\"createPlan\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"plan\"]>;\n\n/** Request body for `sb.plans.update()`. */\nexport type UpdatePlanBody = NonNullable<NonNullable<operations[\"updatePlan\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"plan\"]>;\n\nexport function createPlans(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve plans\n *\n * Retrieve all plans.\n */\n async list(query?: GetPlansQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; plans: Plan[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/plans/v1\", { params: { query }, signal: options?.signal }), \"GET /plans/v1\");\n },\n /**\n * Retrieve plans — iterates every item across all pages.\n *\n * Retrieve all plans.\n */\n iterate(query?: Omit<GetPlansQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Plan, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/plans/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /plans/v1\"),\n \"plans\",\n );\n },\n /**\n * Retrieve a plan\n *\n * Retrieve a certain plan.\n *\n * @param planId The id of the plan.\n * @param options Request options (abort signal).\n */\n async get(planId: string, options?: SpacebringRequestOptions): Promise<Plan> {\n return unwrapProp(await client.GET(\"/plans/v1/{planId}\", { params: { path: { planId } }, signal: options?.signal }), \"plan\", \"GET /plans/v1/{planId}\");\n },\n /** Create a plan */\n async create(plan: CreatePlanBody, options?: SpacebringRequestOptions): Promise<Plan> {\n return unwrapProp(await client.POST(\"/plans/v1\", { body: { plan }, signal: options?.signal }), \"plan\", \"POST /plans/v1\");\n },\n /**\n * Update a plan\n *\n * Update a certain plan.\n *\n * @param planId The id of the plan.\n * @param plan The `plan` payload.\n * @param options Request options (abort signal).\n */\n async update(planId: string, plan: UpdatePlanBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/plans/v1/{planId}\", { params: { path: { planId } }, body: { plan }, signal: options?.signal }), \"PATCH /plans/v1/{planId}\");\n },\n /**\n * Delete a plan\n *\n * Delete a certain plan.\n *\n * @param planId The id of the plan.\n * @param options Request options (abort signal).\n */\n async delete(planId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/plans/v1/{planId}\", { params: { path: { planId } }, signal: options?.signal }), \"DELETE /plans/v1/{planId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, paths } from \"../schema.js\";\n\n/** A Registration entity as returned by the Spacebring API. */\nexport type Registration = NonNullable<components[\"schemas\"][\"registration\"]>;\n\n/** Query parameters for `sb.registrations.list()`. */\nexport interface GetRegistrationsQuery {\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\nexport function createRegistrations(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve registrations\n *\n * Retrieve all registrations in network.\n */\n async list(query?: GetRegistrationsQuery, options?: SpacebringRequestOptions): Promise<{ registrations?: Registration[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/registrations/v1\", { params: { query }, signal: options?.signal }), \"GET /registrations/v1\");\n },\n /**\n * Retrieve registrations — iterates every item across all pages.\n *\n * Retrieve all registrations in network.\n */\n iterate(query?: Omit<GetRegistrationsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Registration, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/registrations/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /registrations/v1\"),\n \"registrations\",\n );\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Assignment entity as returned by the Spacebring API. */\nexport type Assignment = NonNullable<operations[\"getAssignment\"][\"responses\"][200][\"content\"][\"application/json\"][\"assignment\"]>;\n\n/** A Booking entity as returned by the Spacebring API. */\nexport type Booking = NonNullable<operations[\"getBooking\"][\"responses\"][200][\"content\"][\"application/json\"][\"booking\"]>;\n\n/** A GetResourceAvailability entity as returned by the Spacebring API. */\nexport type GetResourceAvailability = NonNullable<components[\"schemas\"][\"getResourceAvailability\"]>;\n\n/** A Resource entity as returned by the Spacebring API. */\nexport type Resource = NonNullable<operations[\"getResource\"][\"responses\"][200][\"content\"][\"application/json\"][\"resource\"]>;\n\n/** A ResourceMedia entity as returned by the Spacebring API. */\nexport type ResourceMedia = NonNullable<operations[\"createResourceMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.resources.assignments.list()`. */\nexport interface GetAssignmentsQuery {\n /** Maximum number of assignments per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. Ignored when registrationRef is used. */\n limit?: number;\n /** UUID of the location whose resource assignments to list. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. Ignored when registrationRef is used. */\n nextPageToken?: string;\n}\n\n/** Query parameters for `sb.resources.bookings.list()`. */\nexport interface GetBookingsQuery {\n /** Matches bookings with endDate strictly after this date (ISO 8601). */\n \"endDate[gt]\"?: string;\n /** Matches bookings with endDate on or after this date (ISO 8601). */\n \"endDate[gte]\"?: string;\n /** Matches bookings with endDate strictly before this date (ISO 8601). */\n \"endDate[lt]\"?: string;\n /** Matches bookings with endDate on or before this date (ISO 8601). */\n \"endDate[lte]\"?: string;\n /** Matches bookings with startDate strictly after this date (ISO 8601). */\n \"startDate[gt]\"?: string;\n /** Matches bookings with startDate on or after this date (ISO 8601). */\n \"startDate[gte]\"?: string;\n /** Matches bookings with startDate strictly before this date (ISO 8601). */\n \"startDate[lt]\"?: string;\n /** Matches bookings with startDate on or before this date (ISO 8601). */\n \"startDate[lte]\"?: string;\n /** UUID of the company whose own bookings to list: bookings the company or its members made, not ones they were added to as attendees. Cannot be combined with customerRef, userRef, or userRefOwner. */\n companyRefOwner?: string;\n /** UUID of the customer whose bookings to list, both made and attended. */\n customerRef?: string;\n /** @deprecated Use bracket-notation fields endDate[gt], endDate[gte], endDate[lt], endDate[lte] instead. */\n endDate?: string;\n /** @deprecated Use status \"canceled\" instead. Set to \"true\" to include deleted bookings. */\n includeDeleted?: string;\n /** Maximum number of bookings per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose bookings to list. Omit to list bookings across every location of the network. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. UUID of the customer whose bookings to list. */\n membershipRefOwner?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Sort order as `:`, where field is startDate, endDate, createDate or deleteDate and direction is asc or desc. deleteDate lists only cancelled bookings, by when they were cancelled, and cannot be combined with singleBookings. Defaults to startDate:asc when a startDate filter is given, endDate:asc when only an endDate filter is given, and createDate:desc otherwise. */\n order?: string;\n /** UUID of the resource whose bookings to list. */\n resourceRef?: string;\n /** Set to \"true\" to expand repeating bookings into single occurrences. */\n singleBookings?: string;\n /** @deprecated Use bracket-notation fields startDate[gt], startDate[gte], startDate[lt], startDate[lte] instead. */\n startDate?: string;\n /** Booking statuses to filter by, e.g. `confirmed,canceled`. Defaults to tentative and confirmed, or to canceled when ordering by deleteDate. Comma-separated, one or more of: tentative, confirmed, canceled. */\n status?: string;\n /** Resource types of the booked resources to filter by, e.g. `room,hotDesk`. Defaults to all bookable types. Comma-separated, one or more of: hotDesk, dedicatedDesk, office, parkingLot, room, conferenceRoom, eventSpace, meetingRoom, phoneBooth, studio, equipment, station. */\n type?: string;\n /** UUID of the user whose bookings to list, both made and attended. Without locationRef or resourceRef, lists the user's bookings across every location of the network. Cannot be combined with customerRef, companyRefOwner, or userRefOwner. */\n userRef?: string;\n /** UUID of the user whose own bookings to list: bookings the user made, not ones they were added to as an attendee. Without locationRef or resourceRef, lists the user's own bookings across every location of the network. Cannot be combined with customerRef, companyRefOwner, or userRef. */\n userRefOwner?: string;\n /** @deprecated Use type instead. */\n types?: string;\n}\n\n/** Query parameters for `sb.resources.list()`. */\nexport interface GetResourcesQuery {\n /** Maximum number of resources per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose resources to list. Omit to list resources across every location of the network. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Resource types to filter by, e.g. `room,hotDesk`. Defaults to all bookable types. Comma-separated, one or more of: dedicatedDesk, equipment, hotDesk, office, parkingLot, room, station, conferenceRoom, eventSpace, meetingRoom, phoneBooth, studio. */\n type?: string;\n /** @deprecated Use type instead. */\n types?: string;\n}\n\n/** Request body for `sb.resources.assignments.create()`. */\nexport type CreateAssignmentBody = NonNullable<NonNullable<operations[\"createAssignment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"assignment\"]>;\n\n/** Request body for `sb.resources.bookings.create()`. */\nexport type CreateBookingBody = NonNullable<operations[\"createBooking\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.resources.create()`. */\nexport type CreateResourceBody = NonNullable<NonNullable<operations[\"createResource\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"resource\"]>;\n\n/** Request body for `sb.resources.createMedia()`. */\nexport type CreateResourceMediaBody = NonNullable<NonNullable<operations[\"createResourceMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.resources.getResourceAvailability()`. */\nexport type GetResourceAvailabilityBody = NonNullable<operations[\"getResourceAvailability\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.resources.assignments.update()`. */\nexport type PatchAssignmentBody = NonNullable<NonNullable<operations[\"patchAssignment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"assignment\"]>;\n\n/** Request body for `sb.resources.bookings.update()`. */\nexport type PatchBookingBody = NonNullable<operations[\"patchBooking\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.resources.update()`. */\nexport type PatchResourceBody = NonNullable<NonNullable<operations[\"patchResource\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"resource\"]>;\n\nexport function createResources(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /**\n * Retrieve resources\n *\n * Retrieve resources in the location. Resources represent all kind of bookable items like rooms, hot desks, dedicated desks, parking lots.\n */\n async list(query?: GetResourcesQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; resources: Resource[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/resources/v1\", { params: { query }, signal: options?.signal }), \"GET /resources/v1\");\n },\n /**\n * Retrieve resources — iterates every item across all pages.\n *\n * Retrieve resources in the location. Resources represent all kind of bookable items like rooms, hot desks, dedicated desks, parking lots.\n */\n iterate(query?: Omit<GetResourcesQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Resource, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/resources/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /resources/v1\"),\n \"resources\",\n );\n },\n /**\n * Get a resource\n *\n * Get a certain resource.\n *\n * @param resourceId The id of the resource.\n * @param options Request options (abort signal).\n */\n async get(resourceId: string, options?: SpacebringRequestOptions): Promise<Resource> {\n return unwrapProp(await client.GET(\"/resources/v1/{resourceId}\", { params: { path: { resourceId } }, signal: options?.signal }), \"resource\", \"GET /resources/v1/{resourceId}\");\n },\n /**\n * Create a resource\n *\n * Create a new resource in a location. The request body must match the schema exactly—unknown properties are rejected.\n */\n async create(resource: CreateResourceBody, options?: SpacebringRequestOptions): Promise<Resource> {\n return unwrapProp(await client.POST(\"/resources/v1\", { body: { resource }, signal: options?.signal }), \"resource\", \"POST /resources/v1\");\n },\n /**\n * Patch a resource\n *\n * Patch a certain resource.\n *\n * @param resourceId The id of the resource.\n * @param resource The `resource` payload.\n * @param options Request options (abort signal).\n */\n async update(resourceId: string, resource: PatchResourceBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/resources/v1/{resourceId}\", { params: { path: { resourceId } }, body: { resource }, signal: options?.signal }), \"PATCH /resources/v1/{resourceId}\");\n },\n /**\n * Delete a resource\n *\n * @param resourceId The id of the resource.\n * @param options Request options (abort signal).\n */\n async delete(resourceId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/resources/v1/{resourceId}\", { params: { path: { resourceId } }, signal: options?.signal }), \"DELETE /resources/v1/{resourceId}\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for a resource photo. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, add the returned key to `media` when creating or updating a resource within an hour; an image that is not attached by then is discarded. A resource holds up to 10 photos, the first being its cover.\n */\n async createMedia(media: CreateResourceMediaBody, options?: SpacebringRequestOptions): Promise<ResourceMedia> {\n return unwrapProp(await client.POST(\"/resources/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /resources/v1/media\");\n },\n /**\n * Check resource availability\n *\n * Check whether a resource can be booked for a slot before creating the booking. The same rules as booking creation apply: capacity, the location and resource schedule, duration limits and the booking window. When the slot is unavailable, the response carries the code the booking would fail with.\n *\n * @param resourceId The id of the resource.\n * @param body Request body.\n * @param options Request options (abort signal).\n */\n async getResourceAvailability(resourceId: string, body: GetResourceAvailabilityBody, options?: SpacebringRequestOptions): Promise<GetResourceAvailability> {\n return unwrap(await client.POST(\"/resources/v1/{resourceId}/availability\", { params: { path: { resourceId } }, body, signal: options?.signal }), \"POST /resources/v1/{resourceId}/availability\");\n },\n assignments: {\n /**\n * Retrieve resource assignments\n *\n * Retrieve resource assignments in the location. An assignment links a resource, or a number of seats in it, to a company or a member for the duration of a subscription.\n */\n async list(query?: GetAssignmentsQuery, options?: SpacebringRequestOptions): Promise<{ assignments: Assignment[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/resources/v1/assignments\", { params: { query }, signal: options?.signal }), \"GET /resources/v1/assignments\");\n },\n /**\n * Retrieve resource assignments — iterates every item across all pages.\n *\n * Retrieve resource assignments in the location. An assignment links a resource, or a number of seats in it, to a company or a member for the duration of a subscription.\n */\n iterate(query?: Omit<GetAssignmentsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Assignment, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/resources/v1/assignments\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /resources/v1/assignments\"),\n \"assignments\",\n );\n },\n /**\n * Get a resource assignment\n *\n * @param assignmentId The id of the assignment.\n * @param options Request options (abort signal).\n */\n async get(assignmentId: string, options?: SpacebringRequestOptions): Promise<Assignment> {\n return unwrapProp(await client.GET(\"/resources/v1/assignments/{assignmentId}\", { params: { path: { assignmentId } }, signal: options?.signal }), \"assignment\", \"GET /resources/v1/assignments/{assignmentId}\");\n },\n /**\n * Create a resource assignment\n *\n * Create a resource assignment. An assignment links a resource, or a number of seats in it, to a company or a member.\n */\n async create(assignment: CreateAssignmentBody, options?: SpacebringRequestOptions): Promise<Assignment> {\n return unwrapProp(await client.POST(\"/resources/v1/assignments\", { body: { assignment }, signal: options?.signal }), \"assignment\", \"POST /resources/v1/assignments\");\n },\n /**\n * Update a resource assignment\n *\n * Update a resource assignment. Fields left out of the request keep their current value.\n *\n * @param assignmentId The id of the assignment.\n * @param assignment The `assignment` payload.\n * @param options Request options (abort signal).\n */\n async update(assignmentId: string, assignment: PatchAssignmentBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/resources/v1/assignments/{assignmentId}\", { params: { path: { assignmentId } }, body: { assignment }, signal: options?.signal }), \"PATCH /resources/v1/assignments/{assignmentId}\");\n },\n /**\n * Delete a resource assignment\n *\n * Delete a resource assignment. An assignment created by a subscription is removed with its subscription instead.\n *\n * @param assignmentId The id of the assignment.\n * @param options Request options (abort signal).\n */\n async delete(assignmentId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/resources/v1/assignments/{assignmentId}\", { params: { path: { assignmentId } }, signal: options?.signal }), \"DELETE /resources/v1/assignments/{assignmentId}\");\n },\n },\n bookings: {\n /**\n * Retrieve bookings\n *\n * Retrieve all bookings of resources.\n */\n async list(query?: GetBookingsQuery, options?: SpacebringRequestOptions): Promise<{ bookings: Booking[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/resources/bookings/v1\", { params: { query }, signal: options?.signal }), \"GET /resources/bookings/v1\");\n },\n /**\n * Retrieve bookings — iterates every item across all pages.\n *\n * Retrieve all bookings of resources.\n */\n iterate(query?: Omit<GetBookingsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Booking, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/resources/bookings/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /resources/bookings/v1\"),\n \"bookings\",\n );\n },\n /**\n * Get a booking\n *\n * @param bookingId ID of the booking. For a single occurrence of a repeating booking, append the occurrence date: `_`.\n * @param options Request options (abort signal).\n */\n async get(bookingId: string, options?: SpacebringRequestOptions): Promise<Booking> {\n return unwrapProp(await client.GET(\"/resources/bookings/v1/{bookingId}\", { params: { path: { bookingId } }, signal: options?.signal }), \"booking\", \"GET /resources/bookings/v1/{bookingId}\");\n },\n /** Create a booking */\n async create(body: CreateBookingBody, options?: SpacebringRequestOptions): Promise<Booking> {\n return unwrapProp(await client.POST(\"/resources/bookings/v1\", { body, signal: options?.signal }), \"booking\", \"POST /resources/bookings/v1\");\n },\n /**\n * Update a booking\n *\n * Update a booking. Fields left out of the request keep their current value.\n *\n * @param bookingId ID of the booking. For a single occurrence of a repeating booking, append the occurrence date: `_`.\n * @param body Request body.\n * @param options Request options (abort signal).\n */\n async update(bookingId: string, body: PatchBookingBody, options?: SpacebringRequestOptions): Promise<Booking> {\n return unwrapProp(await client.PATCH(\"/resources/bookings/v1/{bookingId}\", { params: { path: { bookingId } }, body, signal: options?.signal }), \"booking\", \"PATCH /resources/bookings/v1/{bookingId}\");\n },\n /**\n * Delete a booking\n *\n * @param bookingId ID of the booking. For a single occurrence of a repeating booking, append the occurrence date: `_`.\n * @param options Request options (abort signal).\n */\n async delete(bookingId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/resources/bookings/v1/{bookingId}\", { params: { path: { bookingId } }, signal: options?.signal }), \"DELETE /resources/bookings/v1/{bookingId}\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Order entity as returned by the Spacebring API. */\nexport type Order = NonNullable<operations[\"getOrder\"][\"responses\"][200][\"content\"][\"application/json\"][\"order\"]>;\n\n/** A Product entity as returned by the Spacebring API. */\nexport type Product = NonNullable<components[\"schemas\"][\"product\"]>;\n\n/** A ProductMedia entity as returned by the Spacebring API. */\nexport type ProductMedia = NonNullable<operations[\"createProductMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** A ShopCategory entity as returned by the Spacebring API. */\nexport type ShopCategory = NonNullable<components[\"schemas\"][\"shopCategory\"]>;\n\n/** Query parameters for `sb.shop.orders.list()`. */\nexport interface GetOrdersQuery {\n /** Filter by the shop categories of the products in the order. Comma-separated, one or more UUIDs. */\n categoryRef?: string;\n /** Filter orders created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter orders created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose orders to list. */\n customerRef?: string;\n /** Maximum number of orders per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose orders to list. Omit locationRef, customerRef and userRef to list orders across every location of the network, newest first. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Filter by the products in the order. Comma-separated, one or more UUIDs. */\n productRef?: string;\n /** Filter by order status: 'pending' placed, payment still processing; 'new' placed and paid, awaiting fulfillment; 'inProgress' being fulfilled; 'completed' fulfilled; 'canceled' canceled by the customer or an admin. Defaults to new, inProgress and completed. Comma-separated, one or more of: canceled, completed, inProgress, new, pending. */\n status?: string;\n /** UUID of the user whose orders to list. */\n userRef?: string;\n}\n\n/** Query parameters for `sb.shop.products.list()`. */\nexport interface GetProductsQuery {\n /** UUID of the shop category. */\n categoryRef?: string;\n /** Product UUIDs to get, up to 25 per request. Comma-separated, one or more UUIDs. */\n id?: string;\n /** Maximum number of products per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose products to list. Omit locationRef, categoryRef and id to list products across every location of the network, newest first. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n}\n\n/** Query parameters for `sb.shop.categories.list()`. */\nexport interface GetShopCategoriesQuery {\n /** UUID of the location whose shop categories to list, in the order the shop shows them. Omit to list the categories of every location of the network, grouped by location. */\n locationRef?: string;\n}\n\n/** Request body for `sb.shop.products.create()`. */\nexport type CreateProductBody = NonNullable<NonNullable<operations[\"createProduct\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"product\"]>;\n\n/** Request body for `sb.shop.products.createMedia()`. */\nexport type CreateProductMediaBody = NonNullable<NonNullable<operations[\"createProductMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.shop.categories.create()`. */\nexport type CreateShopCategoryBody = NonNullable<NonNullable<operations[\"createShopCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\n/** Request body for `sb.shop.products.patch()`. */\nexport type PatchProductBody = NonNullable<NonNullable<operations[\"patchProduct\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"product\"]>;\n\n/** Request body for `sb.shop.products.update()`. */\nexport type UpdateProductBody = NonNullable<NonNullable<operations[\"updateProduct\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"product\"]>;\n\n/** Request body for `sb.shop.categories.update()`. */\nexport type UpdateShopCategoryBody = NonNullable<NonNullable<operations[\"updateShopCategory\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"category\"]>;\n\nexport function createShop(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n categories: {\n /**\n * Retrieve categories\n *\n * Retrieve the shop categories of a location, or of every location in the network.\n */\n async list(query?: GetShopCategoriesQuery, options?: SpacebringRequestOptions): Promise<ShopCategory[]> {\n return unwrapProp(await client.GET(\"/shop/categories/v1\", { params: { query }, signal: options?.signal }), \"categories\", \"GET /shop/categories/v1\");\n },\n /**\n * Get a category\n *\n * Get a shop category.\n *\n * @param categoryId The id of the shop category.\n * @param options Request options (abort signal).\n */\n async get(categoryId: string, options?: SpacebringRequestOptions): Promise<ShopCategory> {\n return unwrapProp(await client.GET(\"/shop/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"category\", \"GET /shop/categories/v1/{categoryId}\");\n },\n /**\n * Create a category\n *\n * Create a shop category.\n */\n async create(category: CreateShopCategoryBody, options?: SpacebringRequestOptions): Promise<ShopCategory> {\n return unwrapProp(await client.POST(\"/shop/categories/v1\", { body: { category }, signal: options?.signal }), \"category\", \"POST /shop/categories/v1\");\n },\n /**\n * Update a category\n *\n * Update a shop category.\n *\n * @param categoryId The id of the shop category\n * @param category The `category` payload.\n * @param options Request options (abort signal).\n */\n async update(categoryId: string, category: UpdateShopCategoryBody, options?: SpacebringRequestOptions): Promise<ShopCategory> {\n return unwrapProp(await client.PUT(\"/shop/categories/v1/{categoryId}\", { params: { path: { categoryId } }, body: { category }, signal: options?.signal }), \"category\", \"PUT /shop/categories/v1/{categoryId}\");\n },\n /**\n * Delete a category\n *\n * Delete a shop category.\n *\n * @param categoryId The id of the shop category\n * @param options Request options (abort signal).\n */\n async delete(categoryId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/shop/categories/v1/{categoryId}\", { params: { path: { categoryId } }, signal: options?.signal }), \"DELETE /shop/categories/v1/{categoryId}\");\n },\n },\n orders: {\n /**\n * Retrieve orders\n *\n * Retrieve all orders of products from shop.\n */\n async list(query?: GetOrdersQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; orders: Order[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/shop/orders/v1\", { params: { query }, signal: options?.signal }), \"GET /shop/orders/v1\");\n },\n /**\n * Retrieve orders — iterates every item across all pages.\n *\n * Retrieve all orders of products from shop.\n */\n iterate(query?: Omit<GetOrdersQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Order, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/shop/orders/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /shop/orders/v1\"),\n \"orders\",\n );\n },\n /**\n * Get an order\n *\n * Get a certain order.\n *\n * @param orderId The id of the order.\n * @param options Request options (abort signal).\n */\n async get(orderId: string, options?: SpacebringRequestOptions): Promise<Order> {\n return unwrapProp(await client.GET(\"/shop/orders/v1/{orderId}\", { params: { path: { orderId } }, signal: options?.signal }), \"order\", \"GET /shop/orders/v1/{orderId}\");\n },\n },\n products: {\n /**\n * Retrieve products\n *\n * Retrieve products from shop.\n */\n async list(query?: GetProductsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; products: Product[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/shop/products/v1\", { params: { query }, signal: options?.signal }), \"GET /shop/products/v1\");\n },\n /**\n * Retrieve products — iterates every item across all pages.\n *\n * Retrieve products from shop.\n */\n iterate(query?: Omit<GetProductsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Product, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/shop/products/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /shop/products/v1\"),\n \"products\",\n );\n },\n /**\n * Get a product\n *\n * Get a certain product.\n *\n * @param productId The id of the product.\n * @param options Request options (abort signal).\n */\n async get(productId: string, options?: SpacebringRequestOptions): Promise<Product> {\n return unwrapProp(await client.GET(\"/shop/products/v1/{productId}\", { params: { path: { productId } }, signal: options?.signal }), \"product\", \"GET /shop/products/v1/{productId}\");\n },\n /**\n * Create a product\n *\n * Create a product in shop.\n */\n async create(product: CreateProductBody, options?: SpacebringRequestOptions): Promise<Product> {\n return unwrapProp(await client.POST(\"/shop/products/v1\", { body: { product }, signal: options?.signal }), \"product\", \"POST /shop/products/v1\");\n },\n /**\n * Update a product\n *\n * Update a certain product.\n *\n * @param productId The id of the product.\n * @param product The `product` payload.\n * @param options Request options (abort signal).\n */\n async update(productId: string, product: UpdateProductBody, options?: SpacebringRequestOptions): Promise<Product> {\n return unwrapProp(await client.PUT(\"/shop/products/v1/{productId}\", { params: { path: { productId } }, body: { product }, signal: options?.signal }), \"product\", \"PUT /shop/products/v1/{productId}\");\n },\n /**\n * Delete a product\n *\n * Delete a certain product.\n *\n * @param productId The id of the product.\n * @param options Request options (abort signal).\n */\n async delete(productId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/shop/products/v1/{productId}\", { params: { path: { productId } }, signal: options?.signal }), \"DELETE /shop/products/v1/{productId}\");\n },\n /**\n * Create a media upload\n *\n * Create a media upload for a product cover image. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `media[0].key` when creating or updating a product within an hour; an image that is not attached by then is discarded.\n */\n async createMedia(media: CreateProductMediaBody, options?: SpacebringRequestOptions): Promise<ProductMedia> {\n return unwrapProp(await client.POST(\"/shop/products/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /shop/products/v1/media\");\n },\n /**\n * Partially update a product\n *\n * Update the fields of a product that the request sets; omitted fields keep their current values.\n *\n * @param productId The id of the product.\n * @param product The `product` payload.\n * @param options Request options (abort signal).\n */\n async patch(productId: string, product: PatchProductBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/shop/products/v1/{productId}\", { params: { path: { productId } }, body: { product }, signal: options?.signal }), \"PATCH /shop/products/v1/{productId}\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Subscription entity as returned by the Spacebring API. */\nexport type Subscription = NonNullable<components[\"schemas\"][\"subscription\"]>;\n\n/** Query parameters for `sb.subscriptions.list()`. */\nexport interface GetSubscriptionsQuery {\n /** Filter subscriptions created on or after this date (ISO 8601). Use with createDate[lte] for a range. */\n \"createDate[gte]\"?: string;\n /** Filter subscriptions created on or before this date (ISO 8601). Use with createDate[gte] for a range. */\n \"createDate[lte]\"?: string;\n /** UUID of the customer whose subscriptions to list. */\n customerRef?: string;\n /** Maximum number of subscriptions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose subscriptions to list. Omit locationRef and customerRef to list subscriptions across every location of the network, grouped by location. */\n locationRef?: string;\n /** Pagination token from nextPageToken in a previous response. Keep the same filters when fetching the next page. */\n nextPageToken?: string;\n /** Sort order as field:direction, where field is startDate, endDate, createDate or renewDate and direction is asc or desc, such as startDate:asc. Applies to a location's subscriptions and needs locationRef. Defaults to createDate:desc. */\n order?: string;\n /** UUID of the plan to filter subscriptions by. Applies to a location's or the network's subscriptions. */\n planRef?: string;\n /** Filter by status: 'active' started and not ended or canceled, 'scheduled' starts in the future, 'incomplete' setup not finished (such as an unsigned contract or an unpaid purchase), 'incompleteExpired' setup was never finished (the contract was declined or the payment canceled), 'canceled' canceled or ended. Defaults to active, scheduled and incomplete. Comma-separated, one or more of: active, scheduled, incomplete, incompleteExpired, canceled. */\n status?: string;\n}\n\n/** Request body for `sb.subscriptions.create()`. */\nexport type CreateSubscriptionBody = NonNullable<operations[\"createSubscription\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.subscriptions.createItem()`. */\nexport type CreateSubscriptionItemBody = NonNullable<NonNullable<operations[\"createSubscriptionItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"item\"]>;\n\n/** Request body for `sb.subscriptions.update()`. */\nexport type UpdateSubscriptionBody = NonNullable<NonNullable<operations[\"updateSubscription\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"subscription\"]>;\n\n/** Request body for `sb.subscriptions.updateItem()`. */\nexport type UpdateSubscriptionItemBody = NonNullable<NonNullable<operations[\"updateSubscriptionItem\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"item\"]>;\n\nexport function createSubscriptions(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n /** Retrieve subscriptions */\n async list(query?: GetSubscriptionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; subscriptions: Subscription[] }> {\n return unwrap(await client.GET(\"/subscriptions/v1\", { params: { query }, signal: options?.signal }), \"GET /subscriptions/v1\");\n },\n /** Retrieve subscriptions — iterates every item across all pages. */\n iterate(query?: Omit<GetSubscriptionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Subscription, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/subscriptions/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /subscriptions/v1\"),\n \"subscriptions\",\n );\n },\n /**\n * Retrieve a subscription\n *\n * Retrieve a certain subscription.\n *\n * @param subscriptionId The id of the subscription.\n * @param options Request options (abort signal).\n */\n async get(subscriptionId: string, options?: SpacebringRequestOptions): Promise<Subscription> {\n return unwrapProp(await client.GET(\"/subscriptions/v1/{subscriptionId}\", { params: { path: { subscriptionId } }, signal: options?.signal }), \"subscription\", \"GET /subscriptions/v1/{subscriptionId}\");\n },\n /**\n * Create a subscription\n *\n * Create a subscription for a membership or company.\n */\n async create(body: CreateSubscriptionBody, options?: SpacebringRequestOptions): Promise<Subscription> {\n return unwrapProp(await client.POST(\"/subscriptions/v1\", { body, signal: options?.signal }), \"subscription\", \"POST /subscriptions/v1\");\n },\n /**\n * Update a subscription\n *\n * Update a certain subscription.\n *\n * @param subscriptionId The id of the subscription.\n * @param subscription The `subscription` payload.\n * @param options Request options (abort signal).\n */\n async update(subscriptionId: string, subscription: UpdateSubscriptionBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/subscriptions/v1/{subscriptionId}\", { params: { path: { subscriptionId } }, body: { subscription }, signal: options?.signal }), \"PATCH /subscriptions/v1/{subscriptionId}\");\n },\n /**\n * Delete a subscription\n *\n * Delete a certain subscription.\n *\n * @param subscriptionId The id of the subscription.\n * @param options Request options (abort signal).\n */\n async delete(subscriptionId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/subscriptions/v1/{subscriptionId}\", { params: { path: { subscriptionId } }, signal: options?.signal }), \"DELETE /subscriptions/v1/{subscriptionId}\");\n },\n /**\n * Create a subscription item\n *\n * @param subscriptionId The id of the subscription.\n * @param item The `item` payload.\n * @param options Request options (abort signal).\n */\n async createItem(subscriptionId: string, item: CreateSubscriptionItemBody, options?: SpacebringRequestOptions): Promise<Subscription> {\n return unwrapProp(await client.POST(\"/subscriptions/v1/{subscriptionId}/items\", { params: { path: { subscriptionId } }, body: { item }, signal: options?.signal }), \"subscription\", \"POST /subscriptions/v1/{subscriptionId}/items\");\n },\n /**\n * Delete a subscription item\n *\n * @param subscriptionId The id of the subscription.\n * @param itemId The id of the subscription item.\n * @param options Request options (abort signal).\n */\n async deleteItem(subscriptionId: string, itemId: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/subscriptions/v1/{subscriptionId}/items/{itemId}\", { params: { path: { subscriptionId, itemId } }, signal: options?.signal }), \"DELETE /subscriptions/v1/{subscriptionId}/items/{itemId}\");\n },\n /**\n * Update a subscription item\n *\n * @param subscriptionId The id of the subscription.\n * @param itemId The id of the subscription item.\n * @param item The `item` payload.\n * @param options Request options (abort signal).\n */\n async updateItem(subscriptionId: string, itemId: string, item: UpdateSubscriptionItemBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/subscriptions/v1/{subscriptionId}/items/{itemId}\", { params: { path: { subscriptionId, itemId } }, body: { item }, signal: options?.signal }), \"PATCH /subscriptions/v1/{subscriptionId}/items/{itemId}\");\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Activity entity as returned by the Spacebring API. */\nexport type Activity = NonNullable<components[\"schemas\"][\"ticketActivity\"]>;\n\n/** A SupportTicket entity as returned by the Spacebring API. */\nexport type SupportTicket = NonNullable<components[\"schemas\"][\"ticket\"]>;\n\n/** A TicketMedia entity as returned by the Spacebring API. */\nexport type TicketMedia = NonNullable<operations[\"createSupportTicketMedia\"][\"responses\"][201][\"content\"][\"application/json\"][\"media\"]>;\n\n/** Query parameters for `sb.support.tickets.list()`. */\nexport interface GetSupportTicketsQuery {\n /** The id of the location. */\n locationRef: string;\n /** The number of items to return */\n limit?: number;\n /** Filter tickets by requester membership ids. Pass one UUID or multiple unique comma-separated UUIDs without spaces, e.g. `id` or `id1,id2,id3`, up to 100. The memberships must exist in the location. Admins can filter by any requester; other users only by their own membership. */\n membershipRefRequester?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The order of the tickets. createDate:asc, createDate:desc, updateDate:asc or updateDate:desc. Default: createDate:desc */\n order?: string;\n /** Filter tickets by assignee user ids. Pass one UUID or multiple unique comma-separated UUIDs without spaces, e.g. `id` or `id1,id2,id3`, up to 100. The users must exist. Only admins can filter by assignee. */\n userRefAssignee?: string;\n}\n\n/** Request body for `sb.support.tickets.create()`. */\nexport type CreateSupportTicketBody = NonNullable<NonNullable<operations[\"createSupportTicket\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\n/** Request body for `sb.support.tickets.comment.create()`. */\nexport type CreateSupportTicketCommentBody = NonNullable<NonNullable<operations[\"createSupportTicketComment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"activity\"]>;\n\n/** Request body for `sb.support.tickets.createMedia()`. */\nexport type CreateSupportTicketMediaBody = NonNullable<NonNullable<operations[\"createSupportTicketMedia\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"media\"]>;\n\n/** Request body for `sb.support.tickets.updateAssignee()`. */\nexport type UpdateSupportTicketAssigneeBody = NonNullable<NonNullable<operations[\"updateSupportTicketAssignee\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\n/** Request body for `sb.support.tickets.comment.update()`. */\nexport type UpdateSupportTicketCommentBody = NonNullable<NonNullable<operations[\"updateSupportTicketComment\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"activity\"]>;\n\n/** Request body for `sb.support.tickets.updateStatus()`. */\nexport type UpdateSupportTicketStatusBody = NonNullable<NonNullable<operations[\"updateSupportTicketStatus\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\n/** Request body for `sb.support.tickets.updateType()`. */\nexport type UpdateSupportTicketTypeBody = NonNullable<NonNullable<operations[\"updateSupportTicketType\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"ticket\"]>;\n\nexport function createSupport(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n tickets: {\n /**\n * Retrieve tickets\n *\n * Retrieve all support tickets.\n */\n async list(query: GetSupportTicketsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; tickets?: SupportTicket[] }> {\n return unwrap(await client.GET(\"/support/tickets/v1\", { params: { query }, signal: options?.signal }), \"GET /support/tickets/v1\");\n },\n /**\n * Retrieve tickets — iterates every item across all pages.\n *\n * Retrieve all support tickets.\n */\n iterate(query: Omit<GetSupportTicketsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<SupportTicket, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/support/tickets/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /support/tickets/v1\"),\n \"tickets\",\n );\n },\n /**\n * Retrieve a ticket\n *\n * Retrieve a support ticket.\n *\n * @param id The id of the ticket.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<{ activities?: Activity[]; ticket?: SupportTicket }> {\n return unwrap(await client.GET(\"/support/tickets/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"GET /support/tickets/v1/{id}\");\n },\n /**\n * Create a ticket\n *\n * Create a support ticket.\n */\n async create(ticket: CreateSupportTicketBody, options?: SpacebringRequestOptions): Promise<{ activities?: Activity[]; ticket?: SupportTicket }> {\n return unwrap(await client.POST(\"/support/tickets/v1\", { body: { ticket }, signal: options?.signal }), \"POST /support/tickets/v1\");\n },\n /**\n * Create a ticket media upload\n *\n * Create a media upload for a ticket comment attachment, a file of any type up to 50 MB. The response carries a presigned URL: send the raw file bytes with a PUT request within a minute, using exactly the headers returned. Once the file is stored, pass the returned key as `activity.attachments[0].key` when creating a ticket comment within 25 minutes; a file that is not attached by then is discarded.\n */\n async createMedia(media: CreateSupportTicketMediaBody, options?: SpacebringRequestOptions): Promise<TicketMedia> {\n return unwrapProp(await client.POST(\"/support/tickets/v1/media\", { body: { media }, signal: options?.signal }), \"media\", \"POST /support/tickets/v1/media\");\n },\n /**\n * Update a ticket's assignee\n *\n * Update support ticket assignee.\n *\n * @param id The id of the ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async updateAssignee(id: string, ticket: UpdateSupportTicketAssigneeBody, options?: SpacebringRequestOptions): Promise<{ activity?: Activity; ticket?: SupportTicket }> {\n return unwrap(await client.PUT(\"/support/tickets/v1/{id}/assignee\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"PUT /support/tickets/v1/{id}/assignee\");\n },\n /**\n * Update a ticket's status\n *\n * Update support ticket status.\n *\n * @param id The id of the ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async updateStatus(id: string, ticket: UpdateSupportTicketStatusBody, options?: SpacebringRequestOptions): Promise<{ activity?: Activity; ticket?: SupportTicket }> {\n return unwrap(await client.PUT(\"/support/tickets/v1/{id}/status\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"PUT /support/tickets/v1/{id}/status\");\n },\n /**\n * Update a ticket's type\n *\n * Update a support ticket type.\n *\n * @param id The id of the ticket.\n * @param ticket The `ticket` payload.\n * @param options Request options (abort signal).\n */\n async updateType(id: string, ticket: UpdateSupportTicketTypeBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/support/tickets/v1/{id}/type\", { params: { path: { id } }, body: { ticket }, signal: options?.signal }), \"PATCH /support/tickets/v1/{id}/type\");\n },\n comment: {\n /**\n * Create a ticket comment\n *\n * Create a support ticket comment. To attach a file, create a media upload first, send the file, then pass its key as `activity.attachments[0].key`; a 409 response means the file has not been received yet, so retry shortly.\n */\n async create(activity: CreateSupportTicketCommentBody, options?: SpacebringRequestOptions): Promise<Activity> {\n return unwrapProp(await client.POST(\"/support/tickets/v1/comment\", { body: { activity }, signal: options?.signal }), \"activity\", \"POST /support/tickets/v1/comment\");\n },\n /**\n * Update a ticket comment\n *\n * Update the text of a support ticket comment. Only the comment author can edit it, and only comments without an attachment.\n *\n * @param id The id of the ticket activity.\n * @param activity The `activity` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, activity: UpdateSupportTicketCommentBody, options?: SpacebringRequestOptions): Promise<Activity> {\n return unwrapProp(await client.PATCH(\"/support/tickets/v1/comment/{id}\", { params: { path: { id } }, body: { activity }, signal: options?.signal }), \"activity\", \"PATCH /support/tickets/v1/comment/{id}\");\n },\n /**\n * Delete a ticket comment\n *\n * Delete a support ticket comment.\n *\n * @param id The id of the ticket activity.\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/support/tickets/v1/comment/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /support/tickets/v1/comment/{id}\");\n },\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Balance entity as returned by the Spacebring API. */\nexport type Balance = NonNullable<components[\"schemas\"][\"balance\"]>;\n\n/** A CreditScheduledTransaction entity as returned by the Spacebring API. */\nexport type CreditScheduledTransaction = NonNullable<operations[\"getScheduledCreditsTransactions\"][\"responses\"][200][\"content\"][\"application/json\"][\"scheduledTransactions\"]>[number];\n\n/** A CreditTransaction entity as returned by the Spacebring API. */\nexport type CreditTransaction = NonNullable<components[\"schemas\"][\"transactionCredits\"]>;\n\n/** A DayPassScheduledTransaction entity as returned by the Spacebring API. */\nexport type DayPassScheduledTransaction = NonNullable<operations[\"getScheduledDayPassesTransactions\"][\"responses\"][200][\"content\"][\"application/json\"][\"scheduledTransactions\"]>[number];\n\n/** A DayPassTransaction entity as returned by the Spacebring API. */\nexport type DayPassTransaction = NonNullable<components[\"schemas\"][\"transactionDayPasses\"]>;\n\n/** A MoneyTransaction entity as returned by the Spacebring API. */\nexport type MoneyTransaction = NonNullable<operations[\"getMoneyTransaction\"][\"responses\"][200][\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** A Refund entity as returned by the Spacebring API. */\nexport type Refund = NonNullable<operations[\"refundMoneyTransaction\"][\"responses\"][200][\"content\"][\"application/json\"][\"refund\"]>;\n\n/** Query parameters for `sb.transactions.credits.list()`. */\nexport interface GetCreditsTransactionsQuery {\n /** @deprecated Use customerRef instead. The id of the company to get transactions for. */\n companyRef?: string;\n /** Get transactions with greater or equal createDate. Example: createDate[gte]=2021-05-21T10:00:00Z */\n \"createDate[gte]\"?: string;\n /** Get transactions with less or equal createDate. Example: createDate[lte]=2021-05-21T10:00:00Z */\n \"createDate[lte]\"?: string;\n /** UUID of the company or membership whose credits transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose credits transactions to list. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. The id of the membership to get transactions for. */\n membershipRef?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by payment status: 'succeeded' completed, 'pending' awaiting payment, 'processing' being settled by the gateway, 'failed' did not go through, 'canceled' called off before completion. Comma-separated, one or more of: canceled, failed, pending, processing, succeeded. */\n status?: string;\n /** Filter by what moved the credits: allocations add credits ('adminAllocation' granted by an admin, 'subscriptionAllocation' from a plan, 'purchaseAllocation' from a bought package); 'booking', 'order', 'eventTicket' and 'adminCharge' spend them; 'refund' returns them; 'expiration' and 'subscriptionExpiration' remove unused credits. Matches analytics report type filters. Comma-separated, one or more of: adminAllocation, adminCharge, booking, eventTicket, expiration, order, purchaseAllocation, refund, subscriptionAllocation, subscriptionExpiration. */\n type?: string;\n}\n\n/** Query parameters for `sb.transactions.dayPasses.list()`. */\nexport interface GetDayPassesTransactionsQuery {\n /** @deprecated Use customerRef instead. The id of the company to get transactions for. */\n companyRef?: string;\n /** Get transactions with greater or equal createDate. Example: createDate[gte]=2021-05-21T10:00:00Z */\n \"createDate[gte]\"?: string;\n /** Get transactions with less or equal createDate. Example: createDate[lte]=2021-05-21T10:00:00Z */\n \"createDate[lte]\"?: string;\n /** UUID of the company or membership whose day pass transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose day pass transactions to list. */\n locationRef?: string;\n /** @deprecated Use customerRef instead. The id of the membership to get transactions for. */\n membershipRef?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by what moved the day passes: allocations add passes ('adminAllocation' granted by an admin, 'subscriptionAllocation' from a plan, 'purchaseAllocation' from a bought package); 'booking' and 'adminCharge' spend them; 'refund' returns them; 'expiration' and 'subscriptionExpiration' remove unused passes. Matches analytics report type filters. Comma-separated, one or more of: adminAllocation, adminCharge, booking, expiration, purchaseAllocation, refund, subscriptionAllocation, subscriptionExpiration. */\n type?: string;\n}\n\n/** Query parameters for `sb.transactions.money.list()`. */\nexport interface GetMoneyTransactionsQuery {\n /** Get transactions with greater or equal createDate. Example: createDate[gte]=2021-05-21T10:00:00Z */\n \"createDate[gte]\"?: string;\n /** Get transactions with less or equal createDate. Example: createDate[lte]=2021-05-21T10:00:00Z */\n \"createDate[lte]\"?: string;\n /** UUID of the company or user whose money transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** UUID of the location whose money transactions to list. */\n locationRef?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** Filter by payment status: 'succeeded' completed, 'pending' awaiting payment, 'processing' being settled by the gateway, 'failed' did not go through, 'canceled' called off before completion. Comma-separated, one or more of: canceled, failed, pending, processing, succeeded. */\n status?: string;\n /** Filter by what was paid for: 'booking' a resource, 'creditPackage' a credits or day passes package, 'eventTicket' an event ticket, 'invoice' an issued invoice, 'order' a shop order, 'subscription' a membership plan, 'custom' a one-off charge created by an admin. Comma-separated, one or more of: booking, creditPackage, custom, eventTicket, invoice, order, subscription. */\n type?: string;\n}\n\n/** Query parameters for `sb.transactions.credits.scheduled.list()`. */\nexport interface GetScheduledCreditsTransactionsQuery {\n /** UUID of the company or membership whose scheduled credits transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** UUID of the subscription whose scheduled credits transactions to list. */\n subscriptionRef?: string;\n}\n\n/** Query parameters for `sb.transactions.dayPasses.scheduled.list()`. */\nexport interface GetScheduledDayPassesTransactionsQuery {\n /** UUID of the company or membership whose scheduled day pass transactions to list. */\n customerRef?: string;\n /** Maximum number of transactions per page. Defaults to 25 when omitted or invalid; values above 100 are capped at 100. */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** UUID of the subscription whose scheduled day pass transactions to list. */\n subscriptionRef?: string;\n}\n\n/** Request body for `sb.transactions.credits.create()`. */\nexport type CreateCreditsTransactionBody = NonNullable<NonNullable<operations[\"createCreditsTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** Request body for `sb.transactions.dayPasses.create()`. */\nexport type CreateDayPassesTransactionBody = NonNullable<NonNullable<operations[\"createDayPassesTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** Request body for `sb.transactions.money.create()`. */\nexport type CreateMoneyTransactionBody = NonNullable<operations[\"createMoneyTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.transactions.money.update()`. */\nexport type PatchMoneyTransactionBody = NonNullable<NonNullable<operations[\"patchMoneyTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\n/** Request body for `sb.transactions.money.refund()`. */\nexport type RefundMoneyTransactionBody = NonNullable<NonNullable<operations[\"refundMoneyTransaction\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"transaction\"]>;\n\nexport function createTransactions(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n balances: {\n /**\n * Retrieve credit balance\n *\n * Retrieve credits balance.\n *\n * @param id The id of the customer\n * @param options Request options (abort signal).\n */\n async getCredits(id: string, options?: SpacebringRequestOptions): Promise<Balance[]> {\n return unwrapProp(await client.GET(\"/transactions/v1/balances/{id}/credits\", { params: { path: { id } }, signal: options?.signal }), \"balances\", \"GET /transactions/v1/balances/{id}/credits\");\n },\n /**\n * Retrieve day passes balance\n *\n * @param id The id of the customer\n * @param options Request options (abort signal).\n */\n async getDayPasses(id: string, options?: SpacebringRequestOptions): Promise<Balance[]> {\n return unwrapProp(await client.GET(\"/transactions/v1/balances/{id}/day_passes\", { params: { path: { id } }, signal: options?.signal }), \"balances\", \"GET /transactions/v1/balances/{id}/day_passes\");\n },\n },\n credits: {\n /**\n * Retrieve credit transactions\n *\n * Retrieve credits transactions.\n */\n async list(query?: GetCreditsTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; transactions: CreditTransaction[] }> {\n return unwrap(await client.GET(\"/transactions/credits/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/credits/v1\");\n },\n /**\n * Retrieve credit transactions — iterates every item across all pages.\n *\n * Retrieve credits transactions.\n */\n iterate(query?: Omit<GetCreditsTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CreditTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/credits/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/credits/v1\"),\n \"transactions\",\n );\n },\n /**\n * Retrieve a credit transaction\n *\n * Retrieve a credits transaction.\n *\n * @param id The id of the transaction\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<CreditTransaction> {\n return unwrapProp(await client.GET(\"/transactions/credits/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"transaction\", \"GET /transactions/credits/v1/{id}\");\n },\n /**\n * Create a credit transaction\n *\n * Create a credits transaction.\n */\n async create(transaction: CreateCreditsTransactionBody, options?: SpacebringRequestOptions): Promise<CreditTransaction> {\n return unwrapProp(await client.POST(\"/transactions/credits/v1\", { body: { transaction }, signal: options?.signal }), \"transaction\", \"POST /transactions/credits/v1\");\n },\n scheduled: {\n /**\n * Retrieve scheduled credits transactions\n *\n * Retrieve scheduled credits transactions of a subscription or a customer.\n */\n async list(query?: GetScheduledCreditsTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; scheduledTransactions: CreditScheduledTransaction[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/transactions/credits/scheduled/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/credits/scheduled/v1\");\n },\n /**\n * Retrieve scheduled credits transactions — iterates every item across all pages.\n *\n * Retrieve scheduled credits transactions of a subscription or a customer.\n */\n iterate(query?: Omit<GetScheduledCreditsTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<CreditScheduledTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/credits/scheduled/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/credits/scheduled/v1\"),\n \"scheduledTransactions\",\n );\n },\n },\n },\n dayPasses: {\n /**\n * Retrieve day pass transactions\n *\n * Retrieve day passes transactions.\n */\n async list(query?: GetDayPassesTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; transactions: DayPassTransaction[] }> {\n return unwrap(await client.GET(\"/transactions/day_passes/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/day_passes/v1\");\n },\n /**\n * Retrieve day pass transactions — iterates every item across all pages.\n *\n * Retrieve day passes transactions.\n */\n iterate(query?: Omit<GetDayPassesTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<DayPassTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/day_passes/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/day_passes/v1\"),\n \"transactions\",\n );\n },\n /**\n * Retrieve a day pass transaction\n *\n * Retrieve a day passes transaction.\n *\n * @param id The id of the transaction\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<DayPassTransaction> {\n return unwrapProp(await client.GET(\"/transactions/day_passes/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"transaction\", \"GET /transactions/day_passes/v1/{id}\");\n },\n /**\n * Create a day pass transaction\n *\n * Create a day passes transaction.\n */\n async create(transaction: CreateDayPassesTransactionBody, options?: SpacebringRequestOptions): Promise<DayPassTransaction> {\n return unwrapProp(await client.POST(\"/transactions/day_passes/v1\", { body: { transaction }, signal: options?.signal }), \"transaction\", \"POST /transactions/day_passes/v1\");\n },\n scheduled: {\n /**\n * Retrieve scheduled day pass transactions\n *\n * Retrieve scheduled day passes transactions of a subscription or a customer.\n */\n async list(query?: GetScheduledDayPassesTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; scheduledTransactions: DayPassScheduledTransaction[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/transactions/day_passes/scheduled/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/day_passes/scheduled/v1\");\n },\n /**\n * Retrieve scheduled day pass transactions — iterates every item across all pages.\n *\n * Retrieve scheduled day passes transactions of a subscription or a customer.\n */\n iterate(query?: Omit<GetScheduledDayPassesTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<DayPassScheduledTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/day_passes/scheduled/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/day_passes/scheduled/v1\"),\n \"scheduledTransactions\",\n );\n },\n },\n },\n money: {\n /** Retrieve money transactions */\n async list(query?: GetMoneyTransactionsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; transactions: MoneyTransaction[] }> {\n return unwrap(await client.GET(\"/transactions/money/v1\", { params: { query }, signal: options?.signal }), \"GET /transactions/money/v1\");\n },\n /** Retrieve money transactions — iterates every item across all pages. */\n iterate(query?: Omit<GetMoneyTransactionsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<MoneyTransaction, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/transactions/money/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /transactions/money/v1\"),\n \"transactions\",\n );\n },\n /**\n * Retrieve a money transaction\n *\n * @param transactionId The id of the transaction.\n * @param options Request options (abort signal).\n */\n async get(transactionId: string, options?: SpacebringRequestOptions): Promise<MoneyTransaction> {\n return unwrapProp(await client.GET(\"/transactions/money/v1/{transactionId}\", { params: { path: { transactionId } }, signal: options?.signal }), \"transaction\", \"GET /transactions/money/v1/{transactionId}\");\n },\n /**\n * Create a money transaction\n *\n * Create a money transaction by charging a customer for a custom item.\n */\n async create(body: CreateMoneyTransactionBody, options?: SpacebringRequestOptions): Promise<MoneyTransaction> {\n return unwrapProp(await client.POST(\"/transactions/money/v1\", { body, signal: options?.signal }), \"transaction\", \"POST /transactions/money/v1\");\n },\n /**\n * Update a money transaction\n *\n * Change the internal note of a money transaction, or approve or cancel a pending money transaction paid externally. A user needs the Billing permission in the transaction's location.\n *\n * @param transactionId The id of the transaction.\n * @param transaction The `transaction` payload.\n * @param options Request options (abort signal).\n */\n async update(transactionId: string, transaction: PatchMoneyTransactionBody, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.PATCH(\"/transactions/money/v1/{transactionId}\", { params: { path: { transactionId } }, body: { transaction }, signal: options?.signal }), \"PATCH /transactions/money/v1/{transactionId}\");\n },\n /**\n * Refund a money transaction\n *\n * Refund a succeeded money transaction, fully or partially, through the payment gateway it was paid with.\n *\n * @param transactionId The id of the transaction.\n * @param transaction The `transaction` payload.\n * @param options Request options (abort signal).\n */\n async refund(transactionId: string, transaction?: RefundMoneyTransactionBody, options?: SpacebringRequestOptions): Promise<Refund> {\n return unwrapProp(await client.POST(\"/transactions/money/v1/{transactionId}/refund\", { params: { path: { transactionId } }, body: transaction === undefined ? undefined : { transaction }, signal: options?.signal }), \"refund\", \"POST /transactions/money/v1/{transactionId}/refund\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport { paginate, unwrap, unwrapProp, type SpacebringDefaults, type SpacebringRequestOptions } from \"../../core.js\";\nimport type { components, operations, paths } from \"../schema.js\";\n\n/** A Contact entity as returned by the Spacebring API. */\nexport type Contact = NonNullable<components[\"schemas\"][\"contact\"]>;\n\n/** A Request entity as returned by the Spacebring API. */\nexport type Request = NonNullable<components[\"schemas\"][\"visitRequest\"]>;\n\n/** A Visit entity as returned by the Spacebring API. */\nexport type Visit = NonNullable<components[\"schemas\"][\"visit\"]>;\n\n/** Query parameters for `sb.visitors.contacts.list()`. */\nexport interface GetContactsQuery {\n /** The maximum number of contacts to return. Default is 25. */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The id of the location. Omit it to list the contacts of every location in the network where the caller is an administrator. */\n locationRef?: string;\n /** The create date filter of items. */\n createDate?: { lte?: string; gte?: string };\n}\n\n/** Query parameters for `sb.visitors.requests.list()`. */\nexport interface GetRequestsQuery {\n /** The id of the location. Omit it to list the pending requests of every location in the network. */\n locationRef?: string;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n /** The number of items to return. */\n limit?: number;\n /** The create date filter of items. */\n createDate?: { lte?: string; gte?: string };\n}\n\n/** Query parameters for `sb.visitors.visits.list()`. */\nexport interface GetVisitsQuery {\n /** The id of the location. Omit it to list the visits of every location in the network, newest visit date first. */\n locationRef?: string;\n /** The id of the user, host of the visit. */\n userRefHost?: string;\n /** The id of the user, visitor of the visit. */\n userRefVisitor?: string;\n /** The date filter of items. */\n createDate?: { lte?: string; gte?: string };\n /** The visit date filter of items. */\n date?: { lte?: string; gte?: string };\n /** The number of items to return */\n limit?: number;\n /** Token to retrieve the next page of results. */\n nextPageToken?: string;\n}\n\n/** Request body for `sb.visitors.visits.checkIn()`. */\nexport type CheckInVisitBody = NonNullable<operations[\"checkInVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.visitors.visits.checkOut()`. */\nexport type CheckOutVisitBody = NonNullable<operations[\"checkOutVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"];\n\n/** Request body for `sb.visitors.contacts.create()`. */\nexport type CreateContactBody = NonNullable<NonNullable<operations[\"createContact\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"contact\"]>;\n\n/** Request body for `sb.visitors.requests.create()`. */\nexport type CreateRequestBody = NonNullable<NonNullable<operations[\"createRequest\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"request\"]>;\n\n/** Request body for `sb.visitors.visits.create()`. */\nexport type CreateVisitBody = NonNullable<NonNullable<operations[\"createVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"visit\"]>;\n\n/** Request body for `sb.visitors.visits.update()`. */\nexport type UpdateVisitBody = NonNullable<NonNullable<operations[\"updateVisit\"][\"requestBody\"]>[\"content\"][\"application/json\"][\"visit\"]>;\n\nexport function createVisitors(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n contacts: {\n /** Get contacts */\n async list(query?: GetContactsQuery, options?: SpacebringRequestOptions): Promise<{ contacts?: Contact[]; nextPageToken?: string; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/visitors/contacts/v1\", { params: { query }, signal: options?.signal }), \"GET /visitors/contacts/v1\");\n },\n /** Get contacts — iterates every item across all pages. */\n iterate(query?: Omit<GetContactsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Contact, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/visitors/contacts/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /visitors/contacts/v1\"),\n \"contacts\",\n );\n },\n /**\n * Get a contact\n *\n * @param contactId The id of the contact.\n * @param options Request options (abort signal).\n */\n async get(contactId: string, options?: SpacebringRequestOptions): Promise<Contact> {\n return unwrapProp(await client.GET(\"/visitors/contacts/v1/{contactId}\", { params: { path: { contactId } }, signal: options?.signal }), \"contact\", \"GET /visitors/contacts/v1/{contactId}\");\n },\n /** Create a contact */\n async create(contact: CreateContactBody, options?: SpacebringRequestOptions): Promise<Contact> {\n return unwrapProp(await client.POST(\"/visitors/contacts/v1\", { body: { contact }, signal: options?.signal }), \"contact\", \"POST /visitors/contacts/v1\");\n },\n },\n requests: {\n /** Get requests */\n async list(query?: GetRequestsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; requests?: Request[]; searchQueryNext?: string }> {\n return unwrap(await client.GET(\"/visitors/requests/v1\", { params: { query }, signal: options?.signal }), \"GET /visitors/requests/v1\");\n },\n /** Get requests — iterates every item across all pages. */\n iterate(query?: Omit<GetRequestsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Request, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/visitors/requests/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /visitors/requests/v1\"),\n \"requests\",\n );\n },\n /**\n * Retrieve a request\n *\n * @param id The id of the request.\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Request> {\n return unwrapProp(await client.GET(\"/visitors/requests/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"request\", \"GET /visitors/requests/v1/{id}\");\n },\n /** Create a request */\n async create(request: CreateRequestBody, options?: SpacebringRequestOptions): Promise<Request> {\n return unwrapProp(await client.POST(\"/visitors/requests/v1\", { body: { request }, signal: options?.signal }), \"request\", \"POST /visitors/requests/v1\");\n },\n /**\n * Approve a request\n *\n * @param id The id of the request\n * @param options Request options (abort signal).\n */\n async approve(id: string, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/requests/v1/{id}/approve\", { params: { path: { id } }, signal: options?.signal }), \"visit\", \"POST /visitors/requests/v1/{id}/approve\");\n },\n /**\n * Reject a request\n *\n * @param id The id of the request\n * @param options Request options (abort signal).\n */\n async reject(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.POST(\"/visitors/requests/v1/{id}/reject\", { params: { path: { id } }, signal: options?.signal }), \"POST /visitors/requests/v1/{id}/reject\");\n },\n },\n visits: {\n /** Retrieve visits */\n async list(query?: GetVisitsQuery, options?: SpacebringRequestOptions): Promise<{ nextPageToken?: string; searchQueryNext?: string; visits?: Visit[] }> {\n return unwrap(await client.GET(\"/visitors/visits/v1\", { params: { query }, signal: options?.signal }), \"GET /visitors/visits/v1\");\n },\n /** Retrieve visits — iterates every item across all pages. */\n iterate(query?: Omit<GetVisitsQuery, \"nextPageToken\">, options?: SpacebringRequestOptions): AsyncGenerator<Visit, void, undefined> {\n return paginate(\n async (nextPageToken: string | undefined) =>\n unwrap(await client.GET(\"/visitors/visits/v1\", { params: { query: { ...query, nextPageToken } }, signal: options?.signal }), \"GET /visitors/visits/v1\"),\n \"visits\",\n );\n },\n /**\n * Retrieve a visit\n *\n * Retrieve a visit by id.\n *\n * @param id The id of the visit\n * @param options Request options (abort signal).\n */\n async get(id: string, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.GET(\"/visitors/visits/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"visit\", \"GET /visitors/visits/v1/{id}\");\n },\n /** Create a visit */\n async create(visit: CreateVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/visits/v1\", { body: { visit }, signal: options?.signal }), \"visit\", \"POST /visitors/visits/v1\");\n },\n /**\n * Update a visit\n *\n * Update a visit by id.\n *\n * @param id The id of the visit\n * @param visit The `visit` payload.\n * @param options Request options (abort signal).\n */\n async update(id: string, visit: UpdateVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.PUT(\"/visitors/visits/v1/{id}\", { params: { path: { id } }, body: { visit }, signal: options?.signal }), \"visit\", \"PUT /visitors/visits/v1/{id}\");\n },\n /**\n * Delete a visit\n *\n * Delete a visit by id.\n *\n * @param id The id of the visit\n * @param options Request options (abort signal).\n */\n async delete(id: string, options?: SpacebringRequestOptions): Promise<undefined> {\n return unwrap(await client.DELETE(\"/visitors/visits/v1/{id}\", { params: { path: { id } }, signal: options?.signal }), \"DELETE /visitors/visits/v1/{id}\");\n },\n /** Check in a visit */\n async checkIn(body: CheckInVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/visits/v1/checkin\", { body, signal: options?.signal }), \"visit\", \"POST /visitors/visits/v1/checkin\");\n },\n /** Check out a visit */\n async checkOut(body: CheckOutVisitBody, options?: SpacebringRequestOptions): Promise<Visit> {\n return unwrapProp(await client.POST(\"/visitors/visits/v1/checkout\", { body, signal: options?.signal }), \"visit\", \"POST /visitors/visits/v1/checkout\");\n },\n },\n };\n}\n","// AUTO-GENERATED by codegen/generate-facade.ts — DO NOT EDIT.\n// Regenerate with `npm run generate:facade`.\nimport type { Client } from \"openapi-fetch\";\nimport type { SpacebringDefaults } from \"../../core.js\";\nimport type { paths } from \"../schema.js\";\nimport { createAltcurrencies as altCurrenciesGroup } from \"./altCurrencies.js\";\nimport { createBenefits as benefitsGroup } from \"./benefits.js\";\nimport { createBilling as billingGroup } from \"./billing.js\";\nimport { createCheckins as checkInsGroup } from \"./checkIns.js\";\nimport { createCommunity as communityGroup } from \"./community.js\";\nimport { createContracts as contractsGroup } from \"./contracts.js\";\nimport { createDiscounts as discountsGroup } from \"./discounts.js\";\nimport { createEvents as eventsGroup } from \"./events.js\";\nimport { createFeed as feedGroup } from \"./feed.js\";\nimport { createFloors as floorsGroup } from \"./floors.js\";\nimport { createGuides as guidesGroup } from \"./guides.js\";\nimport { createLocations as locationsGroup } from \"./locations.js\";\nimport { createNetworks as networksGroup } from \"./networks.js\";\nimport { createPackages as packagesGroup } from \"./packages.js\";\nimport { createPlans as plansGroup } from \"./plans.js\";\nimport { createRegistrations as registrationsGroup } from \"./registrations.js\";\nimport { createResources as resourcesGroup } from \"./resources.js\";\nimport { createShop as shopGroup } from \"./shop.js\";\nimport { createSubscriptions as subscriptionsGroup } from \"./subscriptions.js\";\nimport { createSupport as supportGroup } from \"./support.js\";\nimport { createTransactions as transactionsGroup } from \"./transactions.js\";\nimport { createVisitors as visitorsGroup } from \"./visitors.js\";\n\nexport function createResources(client: Client<paths>, defaults: SpacebringDefaults) {\n return {\n altCurrencies: altCurrenciesGroup(client, defaults),\n benefits: benefitsGroup(client, defaults),\n billing: billingGroup(client, defaults),\n checkIns: checkInsGroup(client, defaults),\n community: communityGroup(client, defaults),\n contracts: contractsGroup(client, defaults),\n discounts: discountsGroup(client, defaults),\n events: eventsGroup(client, defaults),\n feed: feedGroup(client, defaults),\n floors: floorsGroup(client, defaults),\n guides: guidesGroup(client, defaults),\n locations: locationsGroup(client, defaults),\n networks: networksGroup(client, defaults),\n packages: packagesGroup(client, defaults),\n plans: plansGroup(client, defaults),\n registrations: registrationsGroup(client, defaults),\n resources: resourcesGroup(client, defaults),\n shop: shopGroup(client, defaults),\n subscriptions: subscriptionsGroup(client, defaults),\n support: supportGroup(client, defaults),\n transactions: transactionsGroup(client, defaults),\n visitors: visitorsGroup(client, defaults),\n };\n}\n\nexport type SpacebringResources = ReturnType<typeof createResources>;\n","import createClient, { type Client } from \"openapi-fetch\";\nimport { createResources, type SpacebringResources } from \"./generated/resources/index.js\";\nimport type { paths } from \"./generated/schema.js\";\n\nexport interface SpacebringConfig {\n /** Client ID from Spacebring > Network Settings > Developers. */\n clientId: string;\n /** Client secret from Spacebring > Network Settings > Developers. */\n clientSecret: string;\n /** Network ID, sent as the `spacebring-network-id` header on every request. */\n networkId?: string;\n /** API origin. Defaults to `https://api.spacebring.com`. */\n baseUrl?: string;\n /** Custom fetch implementation (testing, non-standard platforms). */\n fetch?: typeof globalThis.fetch;\n /**\n * How many times to retry a failed request. Retried: 429 rate limits\n * (any method — the API allows 10 requests/second and did not process the\n * request), plus 502/503/504 responses, network errors, and timeouts on\n * idempotent methods only (GET/HEAD/PUT/DELETE/OPTIONS — a gateway error\n * may have reached the API, so POSTs are never replayed). Waits per the\n * `Retry-After` header (seconds or HTTP-date), or with exponential backoff\n * when absent. Defaults to 3; 0 disables.\n */\n maxRetries?: number;\n /**\n * Timeout per request attempt in milliseconds (each retry attempt gets a\n * fresh budget). Timed-out attempts reject with a `TimeoutError` and are\n * retried like network errors. Off by default. Uses `AbortSignal.timeout`;\n * combining with a caller-supplied signal needs `AbortSignal.any`\n * (Node >= 20.3, all modern browsers/workers).\n */\n timeoutMs?: number;\n}\n\nexport interface Spacebring extends SpacebringResources {}\n\n// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: the constructor Object.assigns every resource group onto the instance, so the merge is backed at runtime.\nexport class Spacebring {\n /** Typed openapi-fetch client — escape hatch for endpoints or options the facade does not cover. */\n readonly raw: Client<paths>;\n\n constructor(config: SpacebringConfig) {\n const baseUrl = config.baseUrl ?? \"https://api.spacebring.com\";\n // Basic-auth credentials ride on every request; refuse to send them in\n // cleartext. Loopback is allowed for local proxies/mock servers over http.\n assertSecureBaseUrl(baseUrl);\n const headers: Record<string, string> = {\n Authorization: `Basic ${toBase64(`${config.clientId}:${config.clientSecret}`)}`,\n };\n if (config.networkId) {\n headers[\"spacebring-network-id\"] = config.networkId;\n }\n this.raw = createClient<paths>({\n baseUrl,\n headers,\n fetch: withRetry(config.fetch ?? globalThis.fetch, config.maxRetries ?? 3, config.timeoutMs),\n });\n Object.assign(this, createResources(this.raw, { networkId: config.networkId }));\n }\n}\n\n// A gateway error or dropped connection may have reached the API, so only\n// methods that are safe to replay retry on those; 429 means the request was\n// not processed and is retried regardless of method.\nconst IDEMPOTENT_METHODS = new Set([\"GET\", \"HEAD\", \"PUT\", \"DELETE\", \"OPTIONS\"]);\nconst RETRYABLE_STATUSES = new Set([502, 503, 504]);\n\n/**\n * Adds retry (429 always; 502/503/504, network errors, and timeouts for\n * idempotent methods) and an optional per-attempt timeout. The request is\n * cloned per attempt so bodies can be resent.\n */\nfunction withRetry(\n fetchImpl: typeof globalThis.fetch,\n maxRetries: number,\n timeoutMs: number | undefined,\n): typeof globalThis.fetch {\n if (maxRetries <= 0 && timeoutMs === undefined) return fetchImpl;\n return async (input, init) => {\n const request = input instanceof Request && init === undefined ? input : new Request(input, init);\n const idempotent = IDEMPOTENT_METHODS.has(request.method);\n for (let attempt = 0; ; attempt += 1) {\n let response: Response;\n try {\n response = await fetchImpl(request.clone(), attemptInit(request, timeoutMs));\n } catch (error) {\n const retryable = attempt < maxRetries && idempotent && !request.signal.aborted && isTransientError(error);\n if (!retryable) throw error;\n await sleep(backoffMs(attempt), request.signal);\n continue;\n }\n const retryableStatus = response.status === 429 || (idempotent && RETRYABLE_STATUSES.has(response.status));\n if (!retryableStatus || attempt >= maxRetries) return response;\n await sleep(retryDelayMs(response.headers.get(\"retry-after\"), attempt), request.signal);\n }\n };\n}\n\n/** Per-attempt timeout signal, combined with the caller's signal when possible. */\nfunction attemptInit(request: Request, timeoutMs: number | undefined): RequestInit | undefined {\n if (timeoutMs === undefined) return undefined;\n const timeout = AbortSignal.timeout(timeoutMs);\n return {\n signal: typeof AbortSignal.any === \"function\" ? AbortSignal.any([request.signal, timeout]) : timeout,\n };\n}\n\n/** Network failures reject with TypeError, `AbortSignal.timeout` with TimeoutError. */\nfunction isTransientError(error: unknown): boolean {\n return error instanceof TypeError || (error instanceof Error && error.name === \"TimeoutError\");\n}\n\nfunction retryDelayMs(retryAfter: string | null, attempt: number): number {\n if (retryAfter !== null) {\n // Cap server-supplied delays: a misbehaving proxy must not be able to\n // park the client on a multi-hour setTimeout.\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds >= 0) return Math.min(seconds * 1000, 60_000);\n const date = Date.parse(retryAfter); // HTTP-date form, e.g. \"Wed, 21 Oct 2026 07:28:00 GMT\"\n if (!Number.isNaN(date)) return Math.min(Math.max(date - Date.now(), 0), 60_000);\n }\n return backoffMs(attempt);\n}\n\nfunction backoffMs(attempt: number): number {\n return Math.min(250 * 2 ** attempt + Math.random() * 100, 5_000);\n}\n\n/** Waits `ms`, rejecting immediately with the abort reason if `signal` fires. */\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal.aborted) {\n reject(signal.reason);\n return;\n }\n const onAbort = () => {\n clearTimeout(timer);\n reject(signal.reason);\n };\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/** Rejects an http:// baseUrl (credentials would go in cleartext); allows loopback. */\nfunction assertSecureBaseUrl(baseUrl: string): void {\n let url: URL;\n try {\n url = new URL(baseUrl);\n } catch {\n throw new Error(`Spacebring baseUrl is not a valid URL: ${baseUrl}`);\n }\n if (url.protocol === \"https:\") return;\n const isLoopback =\n url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"[::1]\" || url.hostname === \"::1\";\n if (url.protocol === \"http:\" && isLoopback) return;\n throw new Error(\n `Spacebring baseUrl must use https (got \"${url.protocol}//\"): Basic-auth credentials would otherwise be sent in cleartext. Use https, or http only for a loopback host.`,\n );\n}\n\nfunction toBase64(value: string): string {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(value, \"utf8\").toString(\"base64\");\n }\n let binary = \"\";\n for (const byte of new TextEncoder().encode(value)) {\n binary += String.fromCharCode(byte);\n }\n return btoa(binary);\n}\n"],"mappings":"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","names":["Request","error","final","joiner","createResources","createResources"]}