@sijilaty/ehr-sdk 1.0.1 → 1.0.2

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.
Files changed (89) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +6 -6
  3. package/dist/cjs/index.cjs +108 -108
  4. package/dist/cjs/index.cjs.map +3 -3
  5. package/dist/esm/index.js +108 -108
  6. package/dist/esm/index.js.map +3 -3
  7. package/dist/types/client/client.d.ts +8 -8
  8. package/dist/types/client/client.d.ts.map +1 -1
  9. package/dist/types/config.d.ts +6 -6
  10. package/dist/types/config.d.ts.map +1 -1
  11. package/dist/types/errors/index.d.ts +2 -2
  12. package/dist/types/errors/index.d.ts.map +1 -1
  13. package/dist/types/index.d.ts +12 -12
  14. package/dist/types/index.d.ts.map +1 -1
  15. package/dist/types/resources/classes/application.d.ts +16 -16
  16. package/dist/types/resources/classes/application.d.ts.map +1 -1
  17. package/dist/types/resources/classes/charge.d.ts +5 -5
  18. package/dist/types/resources/classes/charge.d.ts.map +1 -1
  19. package/dist/types/resources/classes/conversation-ext.d.ts +1 -1
  20. package/dist/types/resources/classes/conversation.d.ts +14 -14
  21. package/dist/types/resources/classes/conversation.d.ts.map +1 -1
  22. package/dist/types/resources/classes/developer.d.ts +18 -18
  23. package/dist/types/resources/classes/developer.d.ts.map +1 -1
  24. package/dist/types/resources/classes/erx.d.ts +22 -22
  25. package/dist/types/resources/classes/erx.d.ts.map +1 -1
  26. package/dist/types/resources/classes/fax.d.ts +10 -10
  27. package/dist/types/resources/classes/fax.d.ts.map +1 -1
  28. package/dist/types/resources/classes/fhir-ext.d.ts +28 -28
  29. package/dist/types/resources/classes/fhir-ext.d.ts.map +1 -1
  30. package/dist/types/resources/classes/fhir.d.ts +3 -3
  31. package/dist/types/resources/classes/fhir.d.ts.map +1 -1
  32. package/dist/types/resources/classes/index.d.ts +4 -4
  33. package/dist/types/resources/classes/index.d.ts.map +1 -1
  34. package/dist/types/resources/classes/lab.d.ts +17 -17
  35. package/dist/types/resources/classes/lab.d.ts.map +1 -1
  36. package/dist/types/resources/classes/m2m.d.ts +22 -22
  37. package/dist/types/resources/classes/m2m.d.ts.map +1 -1
  38. package/dist/types/resources/classes/messaging.d.ts +4 -4
  39. package/dist/types/resources/classes/messaging.d.ts.map +1 -1
  40. package/dist/types/resources/classes/paymentMethod.d.ts +7 -7
  41. package/dist/types/resources/classes/paymentMethod.d.ts.map +1 -1
  42. package/dist/types/resources/classes/project.d.ts +9 -9
  43. package/dist/types/resources/classes/project.d.ts.map +1 -1
  44. package/dist/types/resources/classes/rcm-ext.d.ts +2 -2
  45. package/dist/types/resources/classes/rcm-ext.d.ts.map +1 -1
  46. package/dist/types/resources/classes/rcm.d.ts +10 -10
  47. package/dist/types/resources/classes/rcm.d.ts.map +1 -1
  48. package/dist/types/resources/classes/role.d.ts +13 -13
  49. package/dist/types/resources/classes/role.d.ts.map +1 -1
  50. package/dist/types/resources/classes/secret.d.ts +7 -7
  51. package/dist/types/resources/classes/secret.d.ts.map +1 -1
  52. package/dist/types/resources/classes/telemed.d.ts +6 -6
  53. package/dist/types/resources/classes/telemed.d.ts.map +1 -1
  54. package/dist/types/resources/classes/terminology.d.ts +5 -5
  55. package/dist/types/resources/classes/terminology.d.ts.map +1 -1
  56. package/dist/types/resources/classes/transactionalSMS.d.ts +5 -5
  57. package/dist/types/resources/classes/transactionalSMS.d.ts.map +1 -1
  58. package/dist/types/resources/classes/user.d.ts +26 -26
  59. package/dist/types/resources/classes/user.d.ts.map +1 -1
  60. package/dist/types/resources/classes/version.d.ts +4 -4
  61. package/dist/types/resources/classes/version.d.ts.map +1 -1
  62. package/dist/types/resources/classes/z3-ext.d.ts +1 -1
  63. package/dist/types/resources/classes/z3.d.ts +16 -16
  64. package/dist/types/resources/classes/z3.d.ts.map +1 -1
  65. package/dist/types/resources/classes/zambda.d.ts +21 -21
  66. package/dist/types/resources/classes/zambda.d.ts.map +1 -1
  67. package/dist/types/resources/classes/zambdaLogStream.d.ts +9 -9
  68. package/dist/types/resources/classes/zambdaLogStream.d.ts.map +1 -1
  69. package/dist/types/resources/types/Application.d.ts +6 -6
  70. package/dist/types/resources/types/ApplicationCreateParams.d.ts +6 -6
  71. package/dist/types/resources/types/ApplicationUpdateParams.d.ts +6 -6
  72. package/dist/types/resources/types/ConversationAddParticipantParams.d.ts +1 -1
  73. package/dist/types/resources/types/ConversationCreateResponse.d.ts +1 -1
  74. package/dist/types/resources/types/ConversationRemoveParticipantParams.d.ts +1 -1
  75. package/dist/types/resources/types/FaxSendParams.d.ts +1 -1
  76. package/dist/types/resources/types/FaxSendResponse.d.ts +1 -1
  77. package/dist/types/resources/types/LabOrderSubmitParams.d.ts +2 -2
  78. package/dist/types/resources/types/LabRoute.d.ts +5 -5
  79. package/dist/types/resources/types/LabRouteCreateParams.d.ts +6 -6
  80. package/dist/types/resources/types/Secret.d.ts +1 -1
  81. package/dist/types/resources/types/SecretSetParams.d.ts +1 -1
  82. package/dist/types/resources/types/TelemedCreateMeetingParams.d.ts +1 -1
  83. package/dist/types/resources/types/TelemedCreateMeetingResponse.d.ts +1 -1
  84. package/dist/types/resources/types/ZambdaCreateParams.d.ts +1 -1
  85. package/dist/types/resources/types/ZambdaFunction.d.ts +1 -1
  86. package/dist/types/resources/types/ZambdaUpdateParams.d.ts +1 -1
  87. package/dist/types/sijil/config.d.ts +7 -7
  88. package/dist/types/sijil/config.d.ts.map +1 -1
  89. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts", "../../src/errors/index.ts", "../../src/client/client.ts", "../../src/logger.ts", "../../src/resources/classes/application.ts", "../../src/resources/classes/charge.ts", "../../src/resources/classes/conversation-ext.ts", "../../src/resources/classes/conversation.ts", "../../src/resources/classes/developer.ts", "../../src/resources/classes/erx.ts", "../../src/resources/classes/fax.ts", "../../src/resources/classes/fhir-ext.ts", "../../src/resources/classes/fhir.ts", "../../src/resources/classes/lab.ts", "../../src/resources/classes/m2m.ts", "../../src/resources/classes/messaging.ts", "../../src/resources/classes/paymentMethod.ts", "../../src/resources/classes/project.ts", "../../src/resources/classes/rcm-ext.ts", "../../src/resources/classes/rcm.ts", "../../src/resources/classes/role.ts", "../../src/resources/classes/secret.ts", "../../src/resources/classes/telemed.ts", "../../src/resources/classes/terminology.ts", "../../src/resources/classes/transactionalSMS.ts", "../../src/resources/classes/user.ts", "../../src/resources/classes/version.ts", "../../src/resources/classes/z3-ext.ts", "../../src/resources/classes/z3.ts", "../../src/resources/classes/zambda-ext.ts", "../../src/resources/classes/zambda.ts", "../../src/resources/classes/zambdaLogStream.ts", "../../src/resources/classes/index.ts", "../../src/sijil/config.ts"],
4
- "sourcesContent": ["import type { OystehrClientRequest } from './client/client';\nimport { OystehrConfig } from './config';\nimport * as errors from './errors';\nimport { Oystehr as OystehrBase } from './resources/classes';\n\nexport * from './resources';\n\nexport type { OystehrClientRequest };\nexport type { OystehrConfig };\n\n// HACK: ideally we would only have to do this for CommonJS\n// where default + named exports are not allowed; however,\n// our ancient tsc settings are somehow grabbing js from\n// dist/esm and types from dist/cjs\n\nclass Oystehr extends OystehrBase {\n static OystehrFHIRError = errors.OystehrFHIRError;\n static OystehrSdkError = errors.OystehrSdkError;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Oystehr {\n export type OystehrFHIRError = errors.OystehrFHIRError;\n export type OystehrSdkError = errors.OystehrSdkError;\n}\n\nexport { createSijilClient, sijilServiceUrls, apiBaseFromViteEnv } from './sijil/config';\nexport type { SijilClientConfig } from './sijil/config';\n\nexport default Oystehr;\n", "import { OperationOutcome as OperationOutcomeR4B } from 'fhir/r4b';\nimport { OperationOutcome as OperationOutcomeR5 } from 'fhir/r5';\n\nexport class OystehrSdkError extends Error {\n code: number;\n constructor({ message, code, cause }: { message: string; code: number; cause?: unknown }) {\n super(message, { cause });\n Object.setPrototypeOf(this, OystehrSdkError.prototype);\n this.code = code;\n this.name = 'OystehrSdkError';\n }\n toString(): string {\n return `${this.name}: ${this.message} (code: ${this.code})`;\n }\n toJSON(): any {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n cause: this.cause,\n };\n }\n}\n\nfunction transformOperationOutcomeToErrorMessage(cause: OperationOutcomeR4B | OperationOutcomeR5): string {\n const causes = [];\n for (const issue of cause.issue ?? []) {\n if (issue.details && issue.details.text) {\n causes.push(issue.details.text);\n }\n }\n if (!causes.length) {\n causes.push('Unknown FHIR error');\n }\n return causes.join(',');\n}\n\nexport class OystehrFHIRError extends OystehrSdkError {\n cause: OperationOutcomeR4B | OperationOutcomeR5;\n constructor({ error, code }: { error: OperationOutcomeR4B | OperationOutcomeR5; code: number }) {\n super({\n message: transformOperationOutcomeToErrorMessage(error as OperationOutcomeR4B | OperationOutcomeR5),\n code,\n });\n Object.setPrototypeOf(this, OystehrFHIRError.prototype);\n this.cause = error as OperationOutcomeR4B | OperationOutcomeR5;\n this.name = 'OystehrFHIRError';\n }\n toJSON(): any {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n cause: this.cause,\n };\n }\n}\n", "import { v4 as uuidv4, validate as uuidValidate } from 'uuid';\nimport { OystehrConfig } from '../config';\nimport { OystehrFHIRError, OystehrSdkError } from '../errors';\nimport { Logger } from '../logger';\nimport {\n FhirAsyncBulkManifest,\n FhirAsyncCompletionBundle,\n FhirAsyncJobHandle,\n FhirAsyncJobStatus,\n FhirBundle,\n FhirResource,\n FhirResponseMode,\n OperationOutcome,\n} from '../resources/types';\n\ntype HttpMethod = 'get' | 'put' | 'post' | 'delete' | 'options' | 'head' | 'patch' | 'trace';\nexport const defaultProjectApiUrl = 'https://project-api.zapehr.com/v1';\nconst defaultFhirApiUrl = 'https://fhir-api.zapehr.com';\nconst STATUS_CODES_TO_RETRY = [408, 429, 500, 502, 503, 504];\nconst ERROR_CODES_TO_RETRY = [\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'EPIPE',\n 'ETIMEDOUT',\n 'UND_ERR_CONNECT_TIMEOUT',\n 'UND_ERR_HEADERS_TIMEOUT',\n 'UND_ERR_HEADERS_TIMEOUT',\n 'UND_ERR_SOCKET',\n];\n\n/**\n * Optional parameter that can be passed to the client methods. It allows\n * overriding the access token or project ID, and setting various headers,\n * such as 'Content-Type'.\n */\nexport interface OystehrClientRequest {\n /**\n * The access token to use for the request. If not provided, the access token from `oystehr.init()` will be used.\n */\n accessToken?: string;\n /**\n * The project ID to use for the request. If not provided, the project ID from `oystehr.init()` will be used.\n */\n projectId?: string;\n /**\n * The value of the 'Content-Type' header to use for the request.\n */\n contentType?: string;\n /**\n * Unique identifier for this request.\n */\n requestId?: string;\n /**\n * Optional execution mode for FHIR requests that support async behavior.\n * Defaults to `sync` when omitted.\n */\n mode?: FhirResponseMode;\n}\n\ninterface InternalClientRequest extends OystehrClientRequest {\n ifMatch?: string;\n /**\n * Internal-only: returns raw response metadata ({ status, headers, body }) instead of throwing on non-2xx statuses.\n */\n rawResponse?: boolean;\n}\n\ntype FhirData<T extends FhirResource> = T | T[] | FhirBundle<T>;\nexport type FhirFetcherResponse<T extends FhirData<FhirResource> = any> = T;\n\nexport class SDKResource {\n protected readonly config: OystehrConfig;\n protected readonly logger: Logger;\n constructor(config: OystehrConfig) {\n this.config = config;\n this.logger = new Logger({\n level: this.config.logLevel,\n });\n }\n\n protected request(path: string, method: string, baseUrlThunk: () => string): FetcherFunction {\n return async (params: any, request?: InternalClientRequest): Promise<FetcherResponse> => {\n const configThunk = (): OystehrConfig => this.config;\n const loggerThunk = (): Logger => this.logger;\n try {\n // must await here to catch\n return await fetcher(baseUrlThunk, configThunk, loggerThunk, path, method)(params, request);\n } catch (err: any) {\n const error = err as { message: string; code: number; cause?: unknown };\n this.logger.error(error.message, { code: error.code, cause: error.cause });\n throw new OystehrSdkError({ message: error.message, code: error.code, cause: error.cause });\n }\n };\n }\n\n protected fhirRequest<T = FhirResource>(\n path: string,\n method: string\n ): {\n (params: any, request: InternalClientRequest & { rawResponse: true }, requestMode?: FhirResponseMode): Promise<\n RawFetcherResponse<T>\n >;\n (params: any, request?: InternalClientRequest, requestMode?: FhirResponseMode): Promise<T>;\n } {\n return async (params: any, request?: InternalClientRequest, requestMode?: FhirResponseMode): Promise<any> => {\n try {\n const baseUrlThunk = (): string => this.config.services?.fhirApiUrl ?? defaultFhirApiUrl;\n const configThunk = (): OystehrConfig => this.config;\n const loggerThunk = (): Logger => this.logger;\n // must await here to catch\n return await fetcher(baseUrlThunk, configThunk, loggerThunk, path, method)(params, request, requestMode);\n } catch (err: unknown) {\n // FHIR API error messages are JSON strings\n const fullError = err as { message: string | Record<string, any>; code: number; cause?: unknown };\n if (typeof fullError.message === 'string') {\n throw new OystehrSdkError({\n message: fullError.message,\n code: fullError.code,\n cause: fullError.cause,\n });\n }\n throw new OystehrFHIRError({\n error: fullError.message as OperationOutcome,\n code: fullError.code,\n });\n }\n };\n }\n\n protected async startAsyncJob(\n path: string,\n method: string,\n params: Record<string, unknown>,\n requestMode: FhirResponseMode,\n request?: InternalClientRequest\n ): Promise<FhirAsyncJobHandle> {\n const mode = requestMode === 'async-bulk' ? 'bulk' : 'bundle';\n const asyncPath = requestMode === 'async-bulk' ? this.appendBulkOutputFormat(path) : path;\n\n const raw = await this.fhirRequest(asyncPath, method)(\n params,\n {\n ...request,\n rawResponse: true,\n },\n requestMode\n );\n\n if (raw.status !== 202) {\n throw new OystehrSdkError({\n message: `Expected start async job to return 202 Accepted, received ${raw.status}`,\n code: raw.status,\n });\n }\n\n const contentLocation = this.readHeader(raw.headers, 'content-location');\n if (!contentLocation) {\n throw new OystehrSdkError({\n message: 'Start Async job response missing Content-Location header',\n code: 500,\n });\n }\n\n const jobId = this.parseAsyncJobId(contentLocation);\n if (!jobId) {\n throw new OystehrSdkError({\n message: `Could not parse async job id from Content-Location: ${contentLocation}`,\n code: 500,\n });\n }\n\n return { jobId, contentLocation, mode };\n }\n\n protected async fetchAsyncJobStatus<T extends FhirResource>(\n jobId: string,\n request?: OystehrClientRequest\n ): Promise<FhirAsyncJobStatus<T>> {\n const raw = await this.fhirRequest(`/async-job/${jobId}`, 'GET')(\n {},\n {\n ...request,\n rawResponse: true,\n }\n );\n\n if (raw.status === 202) {\n return {\n status: 202,\n xProgress: this.readHeader(raw.headers, 'x-progress'),\n retryAfter: this.readHeader(raw.headers, 'retry-after'),\n };\n }\n\n if (raw.status === 410) {\n return { status: 410 };\n }\n\n if (raw.status === 404) {\n return { status: 404 };\n }\n\n if (raw.status === 200) {\n if (this.isBulkManifest(raw.body)) {\n return {\n status: 200,\n mode: 'bulk',\n manifest: raw.body,\n };\n }\n\n const bundle = raw.body as FhirAsyncCompletionBundle<T>;\n if (bundle?.resourceType === 'Bundle' && bundle?.type === 'batch-response') {\n const entry0 = bundle.entry?.[0];\n const interactionStatus = entry0?.response?.status;\n const resource = entry0?.resource;\n const outcome = entry0?.response?.outcome;\n return {\n status: 200,\n mode: 'bundle',\n bundle,\n interactionStatus,\n resource,\n outcome,\n };\n }\n\n return {\n status: 200,\n body: raw.body,\n };\n }\n\n return {\n status: raw.status,\n body: raw.body,\n };\n }\n\n private readHeader(headers: Record<string, string>, name: string): string | undefined {\n const direct = headers[name];\n if (direct != null) {\n return direct;\n }\n\n const lower = name.toLowerCase();\n const key = Object.keys(headers).find((h) => h.toLowerCase() === lower);\n return key ? headers[key] : undefined;\n }\n\n private parseAsyncJobId(contentLocation: string): string | undefined {\n const segments = contentLocation.split('/').filter(Boolean);\n const asyncJobIndex = segments.lastIndexOf('async-job');\n if (asyncJobIndex < 0 || asyncJobIndex + 1 >= segments.length) {\n return undefined;\n }\n\n return segments[asyncJobIndex + 1];\n }\n\n private appendBulkOutputFormat(path: string): string {\n const separator = path.includes('?') ? '&' : '?';\n return `${path}${separator}_outputFormat=${encodeURIComponent('application/fhir+ndjson')}`;\n }\n\n private isBulkManifest(body: unknown): body is FhirAsyncBulkManifest {\n if (body == null || typeof body !== 'object') {\n return false;\n }\n\n const maybe = body as Record<string, unknown>;\n return (\n typeof maybe.transactionTime === 'string' &&\n typeof maybe.request === 'string' &&\n typeof maybe.requiresAccessToken === 'boolean' &&\n Array.isArray(maybe.output) &&\n Array.isArray(maybe.error)\n );\n }\n}\n\nexport type FetcherError = { message: string; code: number };\nexport type FetcherResponse = any;\nexport type RawFetcherResponse<T = unknown> = {\n status: number;\n headers: Record<string, string>;\n body: T | null;\n};\nexport type FetcherFunction = (\n params?: Record<string, any> | [any] | InternalClientRequest,\n request?: InternalClientRequest,\n requestMode?: FhirResponseMode\n) => Promise<FetcherResponse>;\n\nfunction isInternalClientRequest(request: Record<string, any>): request is InternalClientRequest {\n return (\n 'accessToken' in request ||\n ('projectId' in request && uuidValidate(request.projectId)) ||\n ('contentType' in request && request.contentType?.split('/').length === 2) ||\n 'requestId' in request ||\n ('ifMatch' in request && request.ifMatch.startsWith('W/\"')) ||\n 'mode' in request ||\n 'rawResponse' in request\n );\n}\n\nfunction getPreferHeaderFromMode(mode: FhirResponseMode | undefined): string | undefined {\n if (mode === 'async-bundle' || mode === 'async-bulk') {\n return 'respond-async';\n }\n return undefined;\n}\n\n/**\n * Parse XML response in format <response><status>...</status><output>...</output></response>\n */\nfunction parseXmlResponse(xmlString: string): Record<string, unknown> | null {\n try {\n // Extract status\n const statusMatch = xmlString.match(/<status>(\\d+)<\\/status>/);\n const status = statusMatch ? parseInt(statusMatch[1], 10) : null;\n\n // Extract output - everything between <output> and </output>\n const outputMatch = xmlString.match(/<output>([\\s\\S]*?)<\\/output>/);\n const output = outputMatch ? outputMatch[1] : null;\n\n if (status === null || output === null) {\n return null;\n }\n\n return { status, output };\n } catch (_err) {\n return null;\n }\n}\n\nfunction fetcher(\n baseUrlThunk: () => string,\n configThunk: () => OystehrConfig,\n loggerThunk: () => Logger,\n path: string,\n methodParam: string\n): FetcherFunction {\n return async (\n params?: Record<string, unknown> | [any] | InternalClientRequest,\n request?: InternalClientRequest,\n requestMode?: FhirResponseMode\n ): Promise<FetcherResponse> => {\n // this function supports multiple signatures. fetcher(baseUrl, path, method)(params, request) or fetcher(baseUrl, path, method)(request)\n // or fetcher(baseUrl, path, method)(params) or fetcher(baseUrl, path, method)(). the types for this are handled by Client<Path, Methods>\n // and this is the backend implementation behind it. the heuristic we're using is that if the first param is an object with an accessToken\n // and there is no second param, assume the first one is the request object instead\n // eslint-disable-next-line prefer-const\n let [providedParams, requestCtx] = extractParamsAndRequest(params, request);\n requestCtx ??= {};\n requestCtx.requestId ??= uuidv4();\n const config = configThunk();\n const logger = loggerThunk();\n const method = methodParam.toLowerCase() as HttpMethod;\n logger.debug('Beginning fetch', {\n method,\n path,\n requestId: requestCtx?.requestId,\n });\n const fetchImpl = config.fetch ?? fetch;\n const accessToken = requestCtx?.accessToken ?? config.accessToken;\n const projectId = requestCtx?.projectId ?? config.projectId;\n let finalPath = path;\n let finalParams = providedParams;\n if (!Array.isArray(providedParams)) {\n const [subbedPath, addlParams] = subParamsInPath(path, providedParams);\n finalPath = subbedPath;\n finalParams = addlParams;\n }\n logger.debug('Substituted parameters in path', {\n method,\n path,\n requestId: requestCtx?.requestId,\n });\n finalPath = finalPath.replace(/^\\//, ''); // remove leading slash\n const baseUrlEvaluated = baseUrlThunk();\n const fullBaseUrl = baseUrlEvaluated.endsWith('/') ? baseUrlEvaluated : baseUrlEvaluated + '/';\n const url = new URL(finalPath, fullBaseUrl);\n let body: any;\n\n if (Array.isArray(finalParams)) {\n body = JSON.stringify(finalParams);\n } else if (Object.keys(finalParams).length) {\n if (method === 'get') {\n addParamsToSearch(finalParams, url.searchParams);\n } else if (requestCtx?.contentType === 'application/x-www-form-urlencoded') {\n const search = new URLSearchParams();\n addParamsToSearch(finalParams, search);\n body = search.toString();\n } else {\n body = JSON.stringify(finalParams);\n }\n } else {\n // override for rpc call\n if (requestCtx?.contentType !== 'application/x-www-form-urlencoded' && method === 'post') {\n body = '{}';\n }\n }\n logger.debug('Prepared request body', {\n method,\n path,\n requestId: requestCtx?.requestId,\n });\n\n const preferHeader = getPreferHeaderFromMode(requestMode);\n\n const headers: Record<string, string> = Object.assign(\n projectId\n ? {\n 'x-zapehr-project-id': projectId,\n 'x-oystehr-project-id': projectId,\n }\n : {},\n {\n 'content-type': requestCtx?.contentType ?? 'application/json',\n },\n preferHeader ? { Prefer: preferHeader } : {},\n accessToken ? { Authorization: `Bearer ${accessToken}` } : {},\n requestCtx?.ifMatch ? { 'If-Match': requestCtx.ifMatch } : {},\n { 'x-oystehr-request-id': requestCtx?.requestId }\n );\n const retryConfig: ConstructedRetryConfig = {\n retries: config.retry?.retries ?? 3,\n jitter: config.retry?.jitter ?? 20,\n delay: config.retry?.delay ?? 100,\n onRetry: config.retry?.onRetry,\n // Using array instead of set because the length is too short for uniqueness to be important\n retryOn: [...(config.retry?.retryOn ?? []), ...STATUS_CODES_TO_RETRY],\n };\n retryConfig.retryOn.push(...STATUS_CODES_TO_RETRY);\n return retry(async () => {\n logger.info('Request start', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n const now = Date.now();\n const response = await fetchImpl(\n new Request(url, {\n method: method.toUpperCase(),\n body,\n headers,\n })\n );\n logger.info('Request end', {\n method,\n url,\n duration: Date.now() - now,\n requestId: requestCtx?.requestId,\n });\n const responseBody = response.body ? await response.text() : null;\n let responseJson: Record<string, unknown> | null;\n const contentType = response.headers.get('content-type');\n try {\n if (\n responseBody &&\n (contentType?.includes('application/json') || contentType?.includes('application/fhir+json'))\n ) {\n logger.time('Deserialized JSON response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n responseJson = JSON.parse(responseBody);\n logger.timeEnd('Deserialized JSON response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n } else if (responseBody && (contentType?.includes('application/xml') || contentType?.includes('text/xml'))) {\n // Parse XML response into { status, output } structure\n logger.time('Deserialized XML response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n responseJson = parseXmlResponse(responseBody);\n logger.timeEnd('Deserialized XML response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n } else {\n responseJson = null;\n }\n } catch (_err) {\n // ignore JSON.parse errors\n responseJson = null;\n }\n logger.debug('Deserialized response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n if (requestCtx?.rawResponse) {\n const headersRecord: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headersRecord[key] = value;\n });\n return {\n status: response.status,\n headers: headersRecord,\n body: responseJson ?? responseBody,\n } as RawFetcherResponse;\n }\n const isError = !response.ok || response.status >= 400;\n if (isError) {\n const errObj = {\n message:\n (typeof responseJson?.output === 'string'\n ? responseJson.output // XML error case - output is XML string\n : (responseJson?.output as Record<string, unknown>)?.message) ?? // official zambda output format (JSON)\n responseJson?.message ?? // normal endpoint output format\n responseJson ?? // parsable json\n responseBody ?? // raw response\n response.statusText, // fallback to status text\n code:\n (responseJson?.output as Record<string, unknown>)?.code ?? // official zambda output format\n responseJson?.code ?? // normal endpoint output format\n response.status, // fallback to status code\n response,\n };\n throw errObj;\n }\n return responseJson;\n }, retryConfig);\n };\n}\n\ntype ConstructedRetryConfig = Omit<NonNullable<OystehrConfig['retry']>, 'retryOn'> & {\n jitter: NonNullable<NonNullable<OystehrConfig['retry']>['jitter']>;\n delay: NonNullable<NonNullable<OystehrConfig['retry']>['delay']>;\n retryOn: NonNullable<NonNullable<OystehrConfig['retry']>['retryOn']>;\n};\nasync function retry<T>(work: (attempt: number) => Promise<T>, config: ConstructedRetryConfig): Promise<T> {\n let lastErr;\n for (const attempt of Array.from({ length: (config.retries ?? 0) + 1 }, (_, index) => index)) {\n try {\n return await work(attempt);\n } catch (e: any) {\n let isRetryable = false;\n if ('response' in e) {\n // error from API\n const err = e as FetcherError;\n isRetryable = config.retryOn.includes(err.code);\n // Removes response\n lastErr = { message: e.message, code: e.code };\n } else {\n lastErr = e;\n // error from fetch\n if ('code' in e && typeof e.code === 'string') {\n const err = e as { code: string };\n isRetryable = ERROR_CODES_TO_RETRY.includes(err.code);\n }\n }\n if (!isRetryable) {\n break;\n }\n const jitter = Math.floor(Math.random() * (config.jitter + 1));\n await new Promise((resolve) => setTimeout(resolve, config.delay + jitter));\n if (config.onRetry && attempt !== (config.retries ?? 0)) {\n config.onRetry(attempt + 1);\n }\n }\n }\n throw lastErr;\n}\n\n/**\n * Substitutes params in a path and returns the path with params substituted and any unused params.\n *\n * Uses the property names in the params object to determine the param to substitute in the path.\n *\n * @param path JSON API resource URI\n * @param params all params provided to the client method\n * @returns resource URI with params substituted and any unused params\n */\nfunction subParamsInPath(path: string, params: Record<string, unknown>): [string, Record<string, string>] {\n const unusedParams = { ...params };\n // capture everything of the form `{paramName}` and replace with the value of `params[paramName]`\n const subbedPath = path.replace(/\\{([^}]+)\\}/g, (_, paramName) => {\n delete unusedParams[paramName];\n // override for path params that are paths, indicated by a `+` at the end\n if (paramName.match(/^.*\\+$/)) {\n return params[paramName] + '';\n }\n // error if param value is empty\n if (!params[paramName] || params[paramName] === '') {\n throw new OystehrSdkError({ message: `Required path parameter is an empty string: ${paramName}`, code: 400 });\n }\n // encode search params\n if (params[paramName]) {\n return encodeURIComponent(params[paramName] + ''); // coerce to string\n }\n return '';\n });\n\n const unusedKeys = Object.keys(unusedParams);\n const addlParams = unusedKeys.length\n ? unusedKeys.reduce((acc, key) => ({ ...acc, [key]: unusedParams[key] }), {})\n : {};\n return [subbedPath, addlParams];\n}\n\n/**\n * Adds params to a URLSearchParams object in such a way as to preserve array values.\n * @param params params\n * @param search URLSearchParams object\n */\nexport function addParamsToSearch(params: Record<string, unknown>, search: URLSearchParams): void {\n for (const [key, value] of Object.entries(params)) {\n if (Array.isArray(value)) {\n value.forEach((v) => v !== null && v !== undefined && search.append(key, v as string));\n continue;\n }\n if (value !== null && value !== undefined) {\n search.append(key, value as string);\n }\n }\n}\n\nexport function extractParamsAndRequest(\n params?: Record<string, unknown> | [any] | InternalClientRequest,\n request?: InternalClientRequest\n): [Record<string, unknown>, InternalClientRequest | undefined] {\n const providedParams: Record<string, unknown> | [any] =\n !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)\n ? {}\n : (params as Record<string, unknown>) ?? {};\n const requestCtx =\n !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)\n ? (params as InternalClientRequest)\n : request;\n return [providedParams, requestCtx];\n}\n", "export class Logger {\n _level?: 'error' | 'info' | 'debug';\n constructor({ level }: { level?: 'error' | 'info' | 'debug' }) {\n this._level = level;\n }\n\n error(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['error', 'info', 'debug'].includes(this._level)) {\n console.error(JSON.stringify({ message, ...extra }));\n }\n }\n\n info(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['info', 'debug'].includes(this._level)) {\n console.info(JSON.stringify({ message, ...extra }));\n }\n }\n\n debug(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['debug'].includes(this._level)) {\n console.debug(JSON.stringify({ message, ...extra }));\n }\n }\n\n time(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['debug'].includes(this._level)) {\n console.time(JSON.stringify({ message, ...extra }));\n }\n }\n\n timeEnd(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['debug'].includes(this._level)) {\n console.timeEnd(JSON.stringify({ message, ...extra }));\n }\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n ApplicationCreateParams,\n ApplicationCreateResponse,\n ApplicationDeleteParams,\n ApplicationGetParams,\n ApplicationGetResponse,\n ApplicationListResponse,\n ApplicationRevokeAccessTokenParams,\n ApplicationRevokeAccessTokenResponse,\n ApplicationRevokeRefreshTokenParams,\n ApplicationRevokeRefreshTokenResponse,\n ApplicationRotateSecretParams,\n ApplicationRotateSecretResponse,\n ApplicationUpdateParams,\n ApplicationUpdateResponse,\n OystehrClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Application extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get a list of Applications. [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) provide authentication in front of the web and mobile apps you build on Oystehr.\n *\n * Access Policy Action: `App:ListAllApplications`\n * Access Policy Resource: `App:Application`\n */\n list(request?: OystehrClientRequest): Promise<ApplicationListResponse> {\n return this.request('/application', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new Application. [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) provide authentication in front of the web and mobile apps you build on Oystehr.\n *\n * Access Policy Action: `App:CreateApplication`\n * Access Policy Resource: `App:Application`\n */\n create(params: ApplicationCreateParams, request?: OystehrClientRequest): Promise<ApplicationCreateResponse> {\n return this.request('/application', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the Application with the provided ID. [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) provide authentication in front of the web and mobile apps you build on Oystehr.\n *\n * Access Policy Action: `App:GetApplication`\n * Access Policy Resource: `App:Application`\n */\n get(params: ApplicationGetParams, request?: OystehrClientRequest): Promise<ApplicationGetResponse> {\n return this.request('/application/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Application with the provided ID. [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) provide authentication in front of the web and mobile apps you build on Oystehr.\n *\n * Access Policy Action: `App:UpdateApplication`\n * Access Policy Resource: `App:Application`\n */\n update(params: ApplicationUpdateParams, request?: OystehrClientRequest): Promise<ApplicationUpdateResponse> {\n return this.request('/application/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Application with the provided ID. [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) provide authentication in front of the web and mobile apps you build on Oystehr.\n *\n * Access Policy Action: `App:DeleteApplication`\n * Access Policy Resource: `App:Application`\n */\n delete(params: ApplicationDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/application/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Rotate client's secrete associated with an application.\n *\n * Access Policy Action: `App:RotateApplicationSecret`\n * Access Policy Resource: `App:Application`\n */\n rotateSecret(\n params: ApplicationRotateSecretParams,\n request?: OystehrClientRequest\n ): Promise<ApplicationRotateSecretResponse> {\n return this.request('/application/{id}/rotate-secret', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Revokes user's refresh token issued for the application.\n *\n * Access Policy Action: `App:RevokeRefreshToken`\n * Access Policy Resource: `App:Application`\n */\n revokeRefreshToken(\n params: ApplicationRevokeRefreshTokenParams,\n request?: OystehrClientRequest\n ): Promise<ApplicationRevokeRefreshTokenResponse> {\n return this.request(\n '/application/{id}/revoke-refresh-token',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Revokes user's access token issued for the application.\n *\n * Access Policy Action: `App:RevokeAccessToken`\n * Access Policy Resource: `App:Application`\n */\n revokeAccessToken(\n params: ApplicationRevokeAccessTokenParams,\n request?: OystehrClientRequest\n ): Promise<ApplicationRevokeAccessTokenResponse> {\n return this.request(\n '/application/{id}/revoke-access-token',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { ChargeIssueParams, ChargeStatusParams, ChargeStatusResponse, OystehrClientRequest } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Charge extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Charge patient's default payment method for a specified encounter or charge item.\n *\n * Access Policy Requirements:\n * Action: `Payment:Issue`\n * Access Policy Resource: `Payment:Charge`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:ChargeItem:*,`FHIR:PaymentReconciliation:*`\n * Action: `FHIR:Read`\n * Access Policy Resources: `FHIR:Patient:*,FHIR:Encounter:*,FHIR:Coverage:*`\n */\n issue(params: ChargeIssueParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/payment/charge/issue', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Retrieve charge status for a specified encounter or charge item.\n *\n * Access Policy Requirements:\n * Action: `Payment:Status`\n * Access Policy Resource: `Payment:Charge`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:ChargeItem:*,`FHIR:PaymentReconciliation:*`\n * Action: `FHIR:Read`\n * Access Policy Resources: `FHIR:Patient:*,FHIR:Encounter:*,FHIR:Coverage:*`\n */\n status(params: ChargeStatusParams, request?: OystehrClientRequest): Promise<ChargeStatusResponse> {\n return this.request('/payment/charge/status', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import { Encounter as EncounterR4B } from 'fhir/r4b';\nimport { Encounter as EncounterR5 } from 'fhir/r5';\n\nexport const ENCOUNTER_VS_EXTENSION_URL = 'https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release';\nexport const ENCOUNTER_VS_EXTENSION_RELATIVE_URL = 'addressString';\nconst ENCOUNTER_VS_CODING_SYSTEM = 'https://fhir.zapehr.com/virtual-service-type';\n\nfunction isR5Encounter(encounter: EncounterR4B | EncounterR5): encounter is EncounterR5 {\n return Object.hasOwn(encounter as EncounterR5, 'virtualService');\n}\n\n/**\n * Helper function to get a conversationId from an encounter created as an Oystehr Conversation\n * @param encounter well-formed FHIR R4B or R5 Encounter\n * @returns conversationId\n */\nexport function getConversationIdFromEncounter(encounter: EncounterR4B | EncounterR5): string | undefined {\n if (isR5Encounter(encounter)) {\n const virtualService = encounter.virtualService?.find(\n (vs) => vs.channelType?.system === ENCOUNTER_VS_CODING_SYSTEM\n );\n return virtualService?.addressString;\n }\n if (!encounter.extension) return;\n const virtualServiceExtension = encounter.extension.find((extension) => extension.url === ENCOUNTER_VS_EXTENSION_URL);\n if (!virtualServiceExtension?.extension) return;\n const conversationId = virtualServiceExtension.extension?.find(\n (extension) => extension.url === ENCOUNTER_VS_EXTENSION_RELATIVE_URL\n )?.valueString;\n return conversationId;\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n ConversationAddParticipantParams,\n ConversationCreateParams,\n ConversationCreateResponse,\n ConversationGetTokenResponse,\n ConversationMessageParams,\n ConversationRemoveParticipantParams,\n OystehrClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\nimport * as ext from './conversation-ext';\n\nexport class Conversation extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n ENCOUNTER_VS_EXTENSION_URL = ext.ENCOUNTER_VS_EXTENSION_URL;\n ENCOUNTER_VS_EXTENSION_RELATIVE_URL = ext.ENCOUNTER_VS_EXTENSION_RELATIVE_URL;\n /**\n * Helper function to get a conversationId from an encounter created as an Oystehr Conversation\n * @param encounter well-formed FHIR R4B or R5 Encounter\n * @returns conversationId\n */\n getConversationIdFromEncounter = ext.getConversationIdFromEncounter;\n /**\n * Create a new Conversation. [Conversations](https://docs.oystehr.com/oystehr/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:CreateConversation`\n * Access Policy Resource: `Messaging:Conversation`\n * Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:Encounter`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Encounter`\n */\n create(params: ConversationCreateParams, request?: OystehrClientRequest): Promise<ConversationCreateResponse> {\n return this.request('/messaging/conversation', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get a Conversation Token. Conversation Tokens are used to join the Conversation with the Twilio Conversations SDKs. [Conversations](https://docs.oystehr.com/oystehr/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Action: `Messaging:GetConversationToken`\n * Access Policy Resource: `Messaging:Conversation`.\n */\n getToken(request?: OystehrClientRequest): Promise<ConversationGetTokenResponse> {\n return this.request('/messaging/conversation/token', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Add a participant to a Conversation. [Conversations](https://docs.oystehr.com/oystehr/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:ConversationAddParticipant`\n * Access Policy Resource: `Messaging:Conversation`\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Encounter`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Encounter`\n */\n addParticipant(params: ConversationAddParticipantParams, request?: OystehrClientRequest): Promise<void> {\n return this.request(\n '/messaging/conversation/{conversationId}/participant',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Remove a participant from a Conversation. [Conversations](https://docs.oystehr.com/oystehr/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:ConversationRemoveParticipant`\n * Access Policy Resource: `Messaging:Conversation`\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`, `FHIR:Practitioner`, or `FHIR:RelatedPerson`\n */\n removeParticipant(params: ConversationRemoveParticipantParams, request?: OystehrClientRequest): Promise<void> {\n return this.request(\n '/messaging/conversation/{conversationId}/participant',\n 'delete',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Send a message to a Conversation. [Conversations](https://docs.oystehr.com/oystehr/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:ConversationSendMessage`\n * Access Policy Resource: `Messaging:Conversation`\n */\n message(params: ConversationMessageParams, request?: OystehrClientRequest): Promise<void> {\n return this.request(\n '/messaging/conversation/{conversationId}/message',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n DeveloperDeleteParams,\n DeveloperGetParams,\n DeveloperGetResponse,\n DeveloperInviteParams,\n DeveloperInviteResponse,\n DeveloperListResponse,\n DeveloperListV2Params,\n DeveloperListV2Response,\n DeveloperUpdateParams,\n DeveloperUpdateResponse,\n OystehrClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Developer extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get the Developer with the provided ID. Developer accounts are used to log into the [Developer Console](https://console.oystehr.com/) and administrate [Projects](https://docs.oystehr.com/oystehr/services/project/). [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:GetDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n get(params: DeveloperGetParams, request?: OystehrClientRequest): Promise<DeveloperGetResponse> {\n return this.request('/developer/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Developer with the provided ID. Developer accounts are used to log into the [Developer Console](https://console.oystehr.com/) and administrate [Projects](https://docs.oystehr.com/oystehr/services/project/). [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:UpdateDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n update(params: DeveloperUpdateParams, request?: OystehrClientRequest): Promise<DeveloperUpdateResponse> {\n return this.request('/developer/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Remove the Developer with the provided ID from the project. Developer accounts are used to log into the [Developer Console](https://console.oystehr.com/) and administrate [Projects](https://docs.oystehr.com/oystehr/services/project/). [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:RemoveDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n delete(params: DeveloperDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/developer/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Invite a new Developer to the Project. Developer accounts are used to log into the [Developer Console](https://console.oystehr.com/) and administrate [Projects](https://docs.oystehr.com/oystehr/services/project/). [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:InviteDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n invite(params: DeveloperInviteParams, request?: OystehrClientRequest): Promise<DeveloperInviteResponse> {\n return this.request('/developer/invite', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * DEPRECATED. Please use [v2/list](https://api-reference.oystehr.com/reference/get_developer-v2-list) instead.\n *\n * Get a list of all Developers who are part of the Project. Developer accounts are used to log into the [Developer Console](https://console.oystehr.com/) and administrate [Projects](https://docs.oystehr.com/oystehr/services/project/). [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:ListAllDevelopers`\n * Access Policy Resource: `IAM:Developer`\n */\n list(request?: OystehrClientRequest): Promise<DeveloperListResponse> {\n return this.request('/developer', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get Developers in the Project with pagination, sort, sort order and filtering. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(params: DeveloperListV2Params, request?: OystehrClientRequest): Promise<DeveloperListV2Response>;\n /**\n * Get Developers in the Project with pagination, sort, sort order and filtering. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(request?: OystehrClientRequest): Promise<DeveloperListV2Response>;\n /**\n * Get Developers in the Project with pagination, sort, sort order and filtering. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(\n params?: DeveloperListV2Params | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<DeveloperListV2Response> {\n return this.request('/developer/v2/list', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n ErxAddPatientPharmacyParams,\n ErxCancelPrescriptionParams,\n ErxCheckAllergyInteractionsParams,\n ErxCheckAllergyInteractionsResponse,\n ErxCheckMedicationInteractionsParams,\n ErxCheckMedicationInteractionsResponse,\n ErxCheckPractitionerEnrollmentParams,\n ErxCheckPractitionerEnrollmentResponse,\n ErxCheckPrecheckInteractionsParams,\n ErxCheckPrecheckInteractionsResponse,\n ErxConnectPractitionerParams,\n ErxConnectPractitionerResponse,\n ErxEnrollPractitionerParams,\n ErxGetConfigurationResponse,\n ErxGetMedicationHistoryParams,\n ErxGetMedicationHistoryResponse,\n ErxGetMedicationParams,\n ErxGetMedicationResponse,\n ErxSearchAllergensParams,\n ErxSearchAllergensResponse,\n ErxSearchMedicationsParams,\n ErxSearchMedicationsResponse,\n ErxSearchPharmaciesParams,\n ErxSearchPharmaciesResponse,\n ErxSyncPatientParams,\n ErxUnenrollPractitionerParams,\n OystehrClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Erx extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['erxApiUrl'] ?? 'https://erx-api.zapehr.com/v3';\n }\n /**\n * Search for allergens.\n * Action: `eRx:SearchAllergen`\n * Access Policy Resource: `eRx:Allergen`\n */\n searchAllergens(\n params: ErxSearchAllergensParams,\n request?: OystehrClientRequest\n ): Promise<ErxSearchAllergensResponse> {\n return this.request('/allergen', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search for medications.\n * Action: `eRx:SearchMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n searchMedications(\n params: ErxSearchMedicationsParams,\n request?: OystehrClientRequest\n ): Promise<ErxSearchMedicationsResponse> {\n return this.request('/medication', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get full medication details.\n * Action: `eRx:GetMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n getMedication(params: ErxGetMedicationParams, request?: OystehrClientRequest): Promise<ErxGetMedicationResponse>;\n /**\n * Get full medication details.\n * Action: `eRx:GetMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n getMedication(request?: OystehrClientRequest): Promise<ErxGetMedicationResponse>;\n /**\n * Get full medication details.\n * Action: `eRx:GetMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n getMedication(\n params?: ErxGetMedicationParams | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<ErxGetMedicationResponse> {\n return this.request('/medication/details', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get eRx configuration for project.\n * Action: `eRx:GetConfiguration`\n * Access Policy Resource: `eRx:Configuration`\n */\n getConfiguration(request?: OystehrClientRequest): Promise<ErxGetConfigurationResponse> {\n return this.request('/config', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Check for drug-allergy interactions for a patient. This endpoint requires the patient's allergies to be synced with the upstream eRx provider.\n * Action: `eRx:Check`\n * Access Policy Resource: `eRx:Interaction`\n */\n checkAllergyInteractions(\n params: ErxCheckAllergyInteractionsParams,\n request?: OystehrClientRequest\n ): Promise<ErxCheckAllergyInteractionsResponse> {\n return this.request(\n '/patient/{patientId}/interactions/allergy',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Check for drug-drug interactions for a patient. This endpoint requires the patient's medications to be synced with the upstream eRx provider.\n * Action: `eRx:Check`\n * Access Policy Resource: `eRx:Interaction`\n */\n checkMedicationInteractions(\n params: ErxCheckMedicationInteractionsParams,\n request?: OystehrClientRequest\n ): Promise<ErxCheckMedicationInteractionsResponse> {\n return this.request(\n '/patient/{patientId}/interactions/medication',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Check for drug-allergy and drug-drug interactions with a specific drug for a patient. This endpoint requires the patient's allergies and medications to be synced with the upstream eRx provider.\n * Action: `eRx:Check`\n * Access Policy Resource: `eRx:Interaction`\n */\n checkPrecheckInteractions(\n params: ErxCheckPrecheckInteractionsParams,\n request?: OystehrClientRequest\n ): Promise<ErxCheckPrecheckInteractionsResponse> {\n return this.request(\n '/patient/{patientId}/interactions/precheck/{drugId}',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Retrieve claims-based medication history for a patient. This endpoint requires the patient to be synced with the upstream eRx provider.\n * Action: `eRx:GetMedicationHistory`\n * Access Policy Resource: `eRx:Patient`\n */\n getMedicationHistory(\n params: ErxGetMedicationHistoryParams,\n request?: OystehrClientRequest\n ): Promise<ErxGetMedicationHistoryResponse> {\n return this.request(\n '/patient/{patientId}/medication-history',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Adds pharmacy for a patient with the upstream eRx provider, setting it as primary if specified.\n * Action: `eRx:AddPatientPharmacy`\n * Access Policy Resource: `eRx:Patient`\n */\n addPatientPharmacy(params: ErxAddPatientPharmacyParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/patient/{patientId}/pharmacies', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Cancel prescription for patient.\n * Action: `eRx:CancelPrescription`\n * Access Policy Resource: `eRx:Prescription`\n */\n cancelPrescription(params: ErxCancelPrescriptionParams, request?: OystehrClientRequest): Promise<void> {\n return this.request(\n '/patient/{patientId}/prescriptions/{medicationRequestId}',\n 'delete',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Syncs demographic, allergy, and medication data for a patient with the upstream eRx provider.\n * Action: `eRx:SyncPatient`\n * Access Policy Resource: `eRx:Patient`\n */\n syncPatient(params: ErxSyncPatientParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/patient/{patientId}/sync', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search for pharmacies by a variety of criteria.\n * Action: `eRx:SearchPharmacy`\n * Access Policy Resource: `eRx:Pharmacy`\n */\n searchPharmacies(\n params: ErxSearchPharmaciesParams,\n request?: OystehrClientRequest\n ): Promise<ErxSearchPharmaciesResponse>;\n /**\n * Search for pharmacies by a variety of criteria.\n * Action: `eRx:SearchPharmacy`\n * Access Policy Resource: `eRx:Pharmacy`\n */\n searchPharmacies(request?: OystehrClientRequest): Promise<ErxSearchPharmaciesResponse>;\n /**\n * Search for pharmacies by a variety of criteria.\n * Action: `eRx:SearchPharmacy`\n * Access Policy Resource: `eRx:Pharmacy`\n */\n searchPharmacies(\n params?: ErxSearchPharmaciesParams | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<ErxSearchPharmaciesResponse> {\n return this.request('/pharmacy', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Create an SSO link for a practitioner. This link can be used to log in to the eRx service as the specified practitioner.\n * Action: `eRx:Connect`\n * Access Policy Resource: `eRx:SSO`\n */\n connectPractitioner(\n params: ErxConnectPractitionerParams,\n request?: OystehrClientRequest\n ): Promise<ErxConnectPractitionerResponse>;\n /**\n * Create an SSO link for a practitioner. This link can be used to log in to the eRx service as the specified practitioner.\n * Action: `eRx:Connect`\n * Access Policy Resource: `eRx:SSO`\n */\n connectPractitioner(request?: OystehrClientRequest): Promise<ErxConnectPractitionerResponse>;\n /**\n * Create an SSO link for a practitioner. This link can be used to log in to the eRx service as the specified practitioner.\n * Action: `eRx:Connect`\n * Access Policy Resource: `eRx:SSO`\n */\n connectPractitioner(\n params?: ErxConnectPractitionerParams | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<ErxConnectPractitionerResponse> {\n return this.request('/practitioner/connect', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Check eRx enrollment and notifications for a practitioner.\n * Action: `eRx:Read`\n * Access Policy Resource: `eRx:Enrollment`\n */\n checkPractitionerEnrollment(\n params: ErxCheckPractitionerEnrollmentParams,\n request?: OystehrClientRequest\n ): Promise<ErxCheckPractitionerEnrollmentResponse> {\n return this.request('/practitioner/{practitionerId}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Enroll a practitioner in the eRx service.\n * Action: `eRx:Create`\n * Access Policy Resource: `eRx:Enrollment`\n */\n enrollPractitioner(params: ErxEnrollPractitionerParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/practitioner/{practitionerId}', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Unenroll a practitioner from the eRx service.\n * Action: `eRx:Delete`\n * Access Policy Resource: `eRx:Enrollment`\n */\n unenrollPractitioner(params: ErxUnenrollPractitionerParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/practitioner/{practitionerId}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n FaxGetConfigurationResponse,\n FaxOnboardResponse,\n FaxSendParams,\n FaxSendResponse,\n OystehrClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Fax extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['faxApiUrl'] ?? 'https://fax-api.zapehr.com/v1';\n }\n /**\n * Offboard a fax number. Oystehr's [offboard](https://docs.oystehr.com/oystehr/services/fax/number/) feature makes it easy to stop using the fax service and release the project's assigned fax number with a single API call. Please note there is no way to guarantee getting the same number back again, so if you think this can break your project in any way we recommend not offboarding and avoid sending faxes until you're sure.\n *\n * Access Policy Requirements:\n * Action: `Fax:Offboard`\n * Access Policy Resource: `Fax:Number`\n */\n offboard(request?: OystehrClientRequest): Promise<void> {\n return this.request('/offboard', 'post', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Onboard a fax number. Oystehr's [onboard](https://docs.oystehr.com/oystehr/services/fax/number/) feature makes it easy to start using the fax service and purchase a new fax number for your project with a single API call.\n *\n * Access Policy Requirements:\n * Action: `Fax:Onboard`\n * Access Policy Resource: `Fax:Number`\n */\n onboard(request?: OystehrClientRequest): Promise<FaxOnboardResponse> {\n return this.request('/onboard', 'post', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get fax service configuration.\n *\n * Access Policy Requirements:\n * Action: `Fax:GetConfiguration`\n * Access Policy Resource: `Fax:Configuration`\n */\n getConfiguration(request?: OystehrClientRequest): Promise<FaxGetConfigurationResponse> {\n return this.request('/config', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Send a fax. Oystehr's [fax sending](https://docs.oystehr.com/oystehr/services/fax/send/) feature makes it easy to send a fax to a chosen recipient with a single API call. You can use this feature to send referrals, medical records, prescriptions, and other documents that require fax transmission e.g. for HIPAA compliance.\n *\n * Access Policy Requirements:\n * Action: `Fax:Send`\n * Access Policy Resource: `Fax:Fax`\n */\n send(params: FaxSendParams, request?: OystehrClientRequest): Promise<FaxSendResponse> {\n return this.request('/send', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import type { Operation } from 'fast-json-patch';\nimport { Address as AddressR4B, HumanName as HumanNameR4B } from 'fhir/r4b';\nimport { Address as AddressR5, HumanName as HumanNameR5 } from 'fhir/r5';\nimport {\n BatchBundle,\n BatchInput,\n BatchInputRequest,\n Binary,\n Bundle,\n BundleEntry,\n Coding,\n FhirAsyncJobHandle,\n FhirAsyncJobStatus,\n FhirAsyncWaitOptions,\n FhirBundle,\n FhirCreateParams,\n FhirDeleteParams,\n FhirGetParams,\n FhirHistoryGetParams,\n FhirHistorySearchParams,\n FhirPatchParams,\n FhirResource,\n FhirResourceReturnValue,\n FhirResponseMode,\n FhirSearchParams,\n FhirUpdateParams,\n GenerateFriendlyPatientIdParams,\n OperationOutcome,\n Resource,\n SearchParam,\n TransactionBundle,\n} from '../..';\nimport { addParamsToSearch, FhirFetcherResponse, OystehrClientRequest, SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\nimport { OystehrFHIRError, OystehrSdkError } from '../../errors';\n\n// Code adapted from https://github.com/sindresorhus/uint8array-extras\nconst MAX_BLOCK_SIZE = 65_535;\nfunction stringToBase64(input: string): string {\n const data = new globalThis.TextEncoder().encode(input);\n let base64 = '';\n\n for (let index = 0; index < data.length; index += MAX_BLOCK_SIZE) {\n const chunk = data.subarray(index, index + MAX_BLOCK_SIZE);\n // Required as `btoa` and `atob` don't properly support Unicode: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n base64 += globalThis.btoa(String.fromCodePoint.apply(undefined, chunk as unknown as number[]));\n }\n return base64;\n}\n\nfunction base64ToString(input: string): string {\n const binaryString = globalThis.atob(input);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return new globalThis.TextDecoder().decode(bytes);\n}\n\n// \u2500\u2500\u2500 Tag-mode helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Converts a Coding to the FHIR _tag parameter value format \"system|code\". */\nfunction codingToTagValue(coding: Coding): string {\n return coding.system ? `${coding.system}|${coding.code ?? ''}` : coding.code ?? '';\n}\n\n/** Returns true if two Codings match on system (treating absent as empty string) and code. */\nfunction codingMatches(a: Coding, b: Coding): boolean {\n return (a.system ?? '') === (b.system ?? '') && (a.code ?? '') === (b.code ?? '');\n}\n\n/**\n * Appends _tag (tag-workspace mode) or _tag:not (ignore-tags mode) search\n * params to an existing SearchParam array and returns the new array.\n */\nfunction applyTagSearchParams(config: OystehrConfig, params: SearchParam[] | undefined): SearchParam[] {\n const out: SearchParam[] = params ? [...params] : [];\n if (config.workspaceTag) {\n out.push({ name: '_tag', value: codingToTagValue(config.workspaceTag) });\n } else if (config.ignoreTags?.length) {\n for (const tag of config.ignoreTags) {\n out.push({ name: '_tag:not', value: codingToTagValue(tag) });\n }\n }\n return out;\n}\n\n/**\n * In ignore-tags mode: throws OystehrSdkError if the resource carries any ignored tag.\n * In tag-workspace mode: injects the workspace tag into resource.meta.tag if not already present.\n * Returns the (possibly cloned) resource.\n */\nfunction applyTagToResource<T extends FhirResource>(config: OystehrConfig, resource: T): T {\n const resourceLike = resource as unknown as Resource;\n\n if (config.ignoreTags?.length) {\n const resourceTags = (resourceLike.meta?.tag ?? []) as Coding[];\n for (const ignored of config.ignoreTags) {\n if (resourceTags.some((t) => codingMatches(t, ignored))) {\n throw new OystehrSdkError({\n message: `Resource has an ignored tag (system: \"${ignored.system ?? ''}\", code: \"${\n ignored.code ?? ''\n }\") and cannot be mutated in ignoreTags mode`,\n code: 400,\n });\n }\n }\n return resource;\n }\n\n if (config.workspaceTag) {\n const tag = config.workspaceTag;\n const existingTags = (resourceLike.meta?.tag ?? []) as Coding[];\n if (!existingTags.some((t) => codingMatches(t, tag))) {\n return {\n ...resource,\n meta: {\n ...resourceLike.meta,\n tag: [...existingTags, tag],\n },\n } as T;\n }\n }\n\n return resource;\n}\n\n/**\n * In ignore-tags mode: throws OystehrSdkError if any operation value resembles an ignored tag.\n * In tag-workspace mode: guards against removal or loss of the workspace tag:\n * - add/replace of the tag array: ensures workspace tag is present in the value\n * - add/replace of meta: ensures workspace tag is present in meta.tag\n * - remove of /meta/tag or /meta: keeps the remove and appends an operation to restore the workspace tag\n * - add of a single tag (path ends in /-): left unchanged (workspace tag already on the resource)\n */\nfunction applyTagToPatchOperations(config: OystehrConfig, operations: Operation[]): Operation[] {\n if (config.ignoreTags?.length) {\n for (const op of operations) {\n if (op.op === 'add' || op.op === 'replace' || op.op === 'test') {\n const opValue: unknown = op.value;\n if (opValue !== null && opValue !== undefined && typeof opValue === 'object') {\n const v = opValue as Coding;\n if (v.code !== undefined) {\n for (const ignored of config.ignoreTags) {\n if (codingMatches(v, ignored)) {\n throw new OystehrSdkError({\n message: `Patch operation contains an ignored tag (system: \"${ignored.system ?? ''}\", code: \"${\n ignored.code ?? ''\n }\") and cannot be applied in ignoreTags mode`,\n code: 400,\n });\n }\n }\n }\n }\n }\n }\n return operations;\n }\n\n if (config.workspaceTag) {\n const tag = config.workspaceTag;\n return operations.reduce<Operation[]>((result, op) => {\n // remove /meta/tag \u2014 restore workspace tag afterwards\n if (op.op === 'remove' && op.path === '/meta/tag') {\n result.push(op);\n result.push({ op: 'add' as const, path: '/meta/tag', value: [tag] });\n return result;\n }\n\n // remove /meta \u2014 restore workspace tag afterwards\n if (op.op === 'remove' && op.path === '/meta') {\n result.push(op);\n result.push({ op: 'add' as const, path: '/meta', value: { tag: [tag] } });\n return result;\n }\n\n // add/replace the entire tag array \u2014 ensure workspace tag is present\n if ((op.op === 'add' || op.op === 'replace') && op.path === '/meta/tag') {\n const tags: Coding[] = Array.isArray(op.value) ? (op.value as Coding[]) : [];\n if (!tags.some((t) => codingMatches(t, tag))) {\n result.push({ ...op, value: [...tags, tag] });\n } else {\n result.push(op);\n }\n return result;\n }\n\n // add/replace the entire meta object \u2014 ensure workspace tag is present in meta.tag\n if ((op.op === 'add' || op.op === 'replace') && op.path === '/meta') {\n const metaValue: { tag?: Coding[] } =\n op.value != null && typeof op.value === 'object' ? (op.value as { tag?: Coding[] }) : {};\n const tags = metaValue.tag ?? [];\n if (!tags.some((t) => codingMatches(t, tag))) {\n result.push({ ...op, value: { ...metaValue, tag: [...tags, tag] } });\n } else {\n result.push(op);\n }\n return result;\n }\n\n // All other operations (including add /meta/tag/- for individual tags) pass through unchanged.\n // Workspace tag is assumed already present on the resource from create/update.\n result.push(op);\n return result;\n }, []);\n }\n\n return operations;\n}\n\n/**\n * Throws OystehrFHIRError (404) if the retrieved resource violates the tag configuration:\n * - workspaceTag mode: resource must carry the workspace tag\n * - ignoreTags mode: resource must not carry any ignored tag\n */\nfunction assertRetrievedResource(config: OystehrConfig, resource: FhirResource): void {\n const resourceLike = resource as unknown as Resource;\n const resourceTags = (resourceLike.meta?.tag ?? []) as Coding[];\n\n if (config.workspaceTag) {\n const tag = config.workspaceTag;\n if (!resourceTags.some((t) => codingMatches(t, tag))) {\n throw new OystehrFHIRError({\n error: {\n resourceType: 'OperationOutcome',\n id: 'not-found',\n issue: [{ severity: 'error', code: 'not-found', details: { text: 'Not found' } }],\n },\n code: 404,\n });\n }\n return;\n }\n\n if (config.ignoreTags?.length) {\n for (const ignored of config.ignoreTags) {\n if (resourceTags.some((t) => codingMatches(t, ignored))) {\n throw new OystehrFHIRError({\n error: {\n resourceType: 'OperationOutcome',\n id: 'not-found',\n issue: [{ severity: 'error', code: 'not-found', details: { text: 'Not found' } }],\n },\n code: 404,\n });\n }\n }\n }\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Optional parameter that can be passed to the client methods. It allows\n * overriding the access token or project ID, and setting various headers,\n * such as 'Content-Type'. Also support enabling optimistic locking.\n */\nexport interface OystehrFHIRUpdateClientRequest extends OystehrClientRequest {\n /**\n * Enable optimistic locking for the request. If set to a version ID, the request will\n * include the 'If-Match' header with that value in the FHIR optimistic-locking format.\n * If the resource has been updated since the version provided, the request\n * will fail with a 412 Precondition Failed error.\n */\n optimisticLockingVersionId?: string;\n}\n\nfunction isAsyncRequestMode(mode: FhirResponseMode | undefined): mode is Exclude<FhirResponseMode, 'sync'> {\n return mode === 'async-bundle' || mode === 'async-bulk';\n}\n\n/**\n * Performs a FHIR search and returns the results as a Bundle resource\n *\n * @param options FHIR resource type and FHIR search parameters\n * @param request optional OystehrClientRequest object\n * @returns FHIR Bundle resource\n */\nexport async function search<T extends FhirResource>(\n this: SDKResource,\n params: FhirSearchParams<T>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function search<T extends FhirResource>(\n this: SDKResource,\n params: FhirSearchParams<T>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<Bundle<T>>>;\nexport async function search<T extends FhirResource>(\n this: SDKResource,\n params: FhirSearchParams<T>,\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<Bundle<T>> | FhirAsyncJobHandle> {\n const { resourceType } = params;\n const taggedParams = applyTagSearchParams(this.config, params.params);\n let paramMap: Record<string, (string | number)[]> | undefined;\n if (taggedParams.length) {\n paramMap = taggedParams.reduce((acc, param) => {\n if (!acc[param.name]) {\n acc[param.name] = [];\n }\n acc[param.name].push(param.value);\n return acc;\n }, {} as Record<string, (string | number)[]>);\n }\n\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(`/${resourceType}/_search`, 'POST', paramMap ?? {}, requestMode, {\n ...request,\n contentType: 'application/x-www-form-urlencoded',\n });\n }\n\n const requestBundle = await this.fhirRequest<FhirBundle<T>>(`/${resourceType}/_search`, 'POST')(paramMap, {\n ...request,\n contentType: 'application/x-www-form-urlencoded',\n });\n const bundle: Bundle<T> = {\n ...requestBundle,\n entry: requestBundle.entry as Array<BundleEntry<T>> | undefined,\n unbundle: function (this: { entry?: Array<BundleEntry<T>> | undefined }) {\n return (\n this.entry?.map((entry) => entry.resource).filter((resource): resource is T => resource !== undefined) ?? []\n );\n },\n };\n return bundle;\n}\n\nexport async function create<T extends FhirResource>(\n this: SDKResource,\n params: FhirCreateParams<T>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function create<T extends FhirResource>(\n this: SDKResource,\n params: FhirCreateParams<T>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function create<T extends FhirResource>(\n this: SDKResource,\n params: FhirCreateParams<T>,\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const tagged = applyTagToResource(this.config, params);\n const { resourceType } = tagged;\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(\n `/${resourceType}`,\n 'POST',\n tagged as unknown as Record<string, unknown>,\n requestMode,\n request\n );\n }\n\n return await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}`, 'POST')(\n tagged as unknown as Record<string, unknown>,\n request\n );\n}\n\nexport async function get<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirGetParams<T>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function get<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirGetParams<T>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function get<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirGetParams<T>,\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(`/${resourceType}/${id}`, 'GET', {}, requestMode, request);\n }\n\n const result = await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'GET')({}, request);\n assertRetrievedResource(this.config, result);\n return result;\n}\n\nexport async function update<T extends FhirResource>(\n this: SDKResource,\n params: FhirUpdateParams<T>,\n request: OystehrFHIRUpdateClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function update<T extends FhirResource>(\n this: SDKResource,\n params: FhirUpdateParams<T>,\n request?: OystehrFHIRUpdateClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function update<T extends FhirResource>(\n this: SDKResource,\n params: FhirUpdateParams<T>,\n request?: OystehrFHIRUpdateClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const tagged = applyTagToResource(this.config, params);\n const { id, resourceType } = tagged;\n const requestMode = request?.mode;\n const ifMatchRequest = {\n ...request,\n ifMatch: request?.optimisticLockingVersionId ? `W/\"${request.optimisticLockingVersionId}\"` : undefined,\n };\n\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(\n `/${resourceType}/${id}`,\n 'PUT',\n tagged as unknown as Record<string, unknown>,\n requestMode,\n ifMatchRequest\n );\n }\n\n return await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'PUT')(\n tagged as unknown as Record<string, unknown>,\n ifMatchRequest\n );\n}\n\nexport async function patch<T extends FhirResource>(\n this: SDKResource,\n params: FhirPatchParams<T>,\n request: OystehrFHIRUpdateClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function patch<T extends FhirResource>(\n this: SDKResource,\n params: FhirPatchParams<T>,\n request?: OystehrFHIRUpdateClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function patch<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, operations }: FhirPatchParams<T>,\n request?: OystehrFHIRUpdateClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const taggedOperations = applyTagToPatchOperations(this.config, operations);\n const requestMode = request?.mode;\n const ifMatchRequest = {\n ...request,\n ifMatch: request?.optimisticLockingVersionId ? `W/\"${request.optimisticLockingVersionId}\"` : undefined,\n };\n\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(\n `/${resourceType}/${id}`,\n 'PATCH',\n taggedOperations as unknown as Record<string, unknown>,\n requestMode,\n {\n ...ifMatchRequest,\n contentType: 'application/json-patch+json',\n }\n );\n }\n\n return this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'PATCH')(taggedOperations, {\n ...ifMatchRequest,\n contentType: 'application/json-patch+json',\n });\n}\n\nasync function del<T extends FhirResource>(\n this: SDKResource,\n params: FhirDeleteParams<T>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nasync function del<T extends FhirResource>(\n this: SDKResource,\n params: FhirDeleteParams<T>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nasync function del<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirDeleteParams<T>,\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(`/${resourceType}/${id}`, 'DELETE', {}, requestMode, request);\n }\n\n return await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'DELETE')({}, request);\n}\nexport { del as delete };\n\nfunction getRetryDelayMs(retryAfter: string | undefined, fallbackMs: number): number {\n if (!retryAfter) {\n return fallbackMs;\n }\n\n const asSeconds = Number(retryAfter);\n if (Number.isFinite(asSeconds) && asSeconds >= 0) {\n return Math.max(0, Math.floor(asSeconds * 1000));\n }\n\n const asTimestamp = Date.parse(retryAfter);\n if (Number.isFinite(asTimestamp)) {\n return Math.max(0, asTimestamp - Date.now());\n }\n\n return fallbackMs;\n}\n\nexport async function getAsyncJob<T extends FhirResource>(\n this: SDKResource,\n jobId: string,\n request?: OystehrClientRequest\n): Promise<FhirAsyncJobStatus<T>> {\n return await this.fetchAsyncJobStatus<T>(jobId, request);\n}\n\nexport async function waitForAsyncJob<T extends FhirResource>(\n this: SDKResource,\n jobId: string,\n options?: FhirAsyncWaitOptions,\n request?: OystehrClientRequest\n): Promise<FhirAsyncJobStatus<T>> {\n // 5 seconds poll interval by default\n const pollIntervalMs = options?.pollIntervalMs ?? 5000;\n // 15 minutes timout by default\n const timeoutMs = options?.timeoutMs ?? 900000;\n const attempts = Math.max(1, Math.ceil(timeoutMs / pollIntervalMs));\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n const status = await this.fetchAsyncJobStatus<T>(jobId, request);\n if (status.status !== 202) {\n return status;\n }\n\n if (attempt < attempts - 1) {\n const retryAfter = 'retryAfter' in status ? status.retryAfter : undefined;\n await new Promise((resolve) => setTimeout(resolve, getRetryDelayMs(retryAfter, pollIntervalMs)));\n }\n }\n\n throw new OystehrSdkError({\n message: `Async job ${jobId} did not complete within ${timeoutMs} ms`,\n code: 408,\n });\n}\n\nexport async function cancelAsyncJob(this: SDKResource, jobId: string, request?: OystehrClientRequest): Promise<void> {\n await this.fhirRequest(`/async-job/${jobId}`, 'DELETE')({}, request);\n}\n\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirHistorySearchParams<T>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, versionId }: FhirHistoryGetParams<T>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, versionId }: FhirHistoryGetParams<T>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<T>>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirHistorySearchParams<T>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<Bundle<T>>>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, count, offset }: FhirHistorySearchParams<T>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<Bundle<T>>>;\n\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n {\n resourceType,\n id,\n versionId,\n count,\n offset,\n }: { resourceType: string; id: string; versionId?: string; count?: number; offset?: number },\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<Bundle<T>> | FhirFetcherResponse<T> | FhirAsyncJobHandle> {\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n if (versionId) {\n return await this.startAsyncJob(`/${resourceType}/${id}/_history/${versionId}`, 'GET', {}, requestMode, request);\n }\n return await this.startAsyncJob(`/${resourceType}/${id}/_history`, 'GET', {}, requestMode, request);\n }\n\n if (versionId) {\n return this.fhirRequest<T>(`/${resourceType}/${id}/_history/${versionId}`, 'GET')({}, request);\n }\n if (count) {\n return this.fhirRequest<Bundle<T>>(\n `/${resourceType}/${id}/_history?_total=accurate&_count=${count}\n ${offset ? `&_offset=${offset}` : ''}`,\n 'GET'\n )({}, request);\n }\n return this.fhirRequest<Bundle<T>>(`/${resourceType}/${id}/_history?_total=accurate`, 'GET')({}, request);\n}\n\n/**\n * Returns true when a batch GET/HEAD URL is a search (e.g. \"Patient\" or \"Patient?name=foo\")\n * rather than a direct retrieval (e.g. \"Patient/abc-123\").\n * A retrieval URL has a path segment after the resource type that is not a FHIR operation\n * (operations start with \"_\", e.g. \"_search\" or \"_history\").\n */\nfunction isBatchSearchUrl(url: string): boolean {\n const path = url.split('?')[0];\n const segments = path.split('/').filter(Boolean);\n // Only one segment \u2192 bare resource type, always a search\n if (segments.length <= 1) return true;\n // Two or more segments: second segment is an ID if it doesn't start with '_'\n return segments[1].startsWith('_');\n}\n\n/** Returns true when a batch POST URL targets a `_search` endpoint (e.g. \"Patient/_search\"). */\nfunction isBatchSearchPostUrl(url: string): boolean {\n return url.split('?')[0].endsWith('/_search');\n}\n\nfunction batchInputRequestToBundleEntryItem<T extends FhirResource>(\n request: BatchInputRequest<T>,\n config: OystehrConfig\n): BundleEntry<T | Binary<T>> {\n const { method } = request;\n let url = request.url;\n\n // Inject tag search params into search request URLs before URL encoding.\n // GET/HEAD: only for search URLs (not retrievals like Patient/<id>).\n // POST: only for _search endpoints (not creates).\n if (\n ((method === 'GET' || method === 'HEAD') && isBatchSearchUrl(url)) ||\n (method === 'POST' && isBatchSearchPostUrl(url))\n ) {\n if (config.workspaceTag) {\n url += (url.includes('?') ? '&' : '?') + `_tag=${codingToTagValue(config.workspaceTag)}`;\n }\n if (config.ignoreTags?.length) {\n for (const tag of config.ignoreTags) {\n url += (url.includes('?') ? '&' : '?') + `_tag:not=${codingToTagValue(tag)}`;\n }\n }\n }\n\n const baseRequest = {\n request: {\n method,\n url,\n },\n };\n\n // Escape query string parameters in entry.request.url\n if (url.split('?').length > 1) {\n const [resource, query] = url.split('?');\n const params = query\n .split('&')\n .map((param) => {\n const [name, value] = param.split('=');\n return { name, value };\n })\n .reduce((acc, { name, value }) => {\n if (!name) {\n return acc;\n }\n if (!acc[name]) {\n acc[name] = [];\n }\n acc[name].push(value);\n return acc;\n }, {} as Record<string, string[]>);\n const search = new URLSearchParams();\n addParamsToSearch(params, search);\n baseRequest.request.url = `${resource}?${search.toString()}`;\n }\n\n // GET, DELETE, and HEAD require no further parameters\n if (['GET', 'DELETE', 'HEAD'].includes(method)) {\n return baseRequest as BundleEntry<T>;\n }\n\n // PUT updates require a full resource\n if (method === 'PUT') {\n const resource = applyTagToResource(config, request.resource);\n return {\n request: {\n ...baseRequest.request,\n ifMatch: request.ifMatch,\n },\n resource: resource as T,\n } as BundleEntry<T>;\n }\n\n // PATCH can be Binary resource or JSON patch\n if (method === 'PATCH') {\n if ('resource' in request) {\n // Binary patch \u2014 decode operations, apply tag transforms, re-encode\n let patchResource = request.resource;\n const binaryData = patchResource.data;\n if (binaryData) {\n const operations = JSON.parse(base64ToString(binaryData)) as Operation[];\n const taggedOperations = applyTagToPatchOperations(config, operations);\n patchResource = { ...patchResource, data: stringToBase64(JSON.stringify(taggedOperations)) } as Binary<T>;\n }\n return {\n request: {\n ...baseRequest.request,\n ifMatch: request.ifMatch,\n },\n resource: patchResource,\n } as BundleEntry<Binary<T>>;\n }\n const operations = applyTagToPatchOperations(config, request.operations);\n const data = stringToBase64(JSON.stringify(operations));\n return {\n ...baseRequest,\n resource: {\n resourceType: 'Binary',\n contentType: 'application/json-patch+json',\n data,\n },\n } as BundleEntry<Binary<T>>;\n }\n\n // POST _search \u2014 no resource body; tag params were already injected into the URL above\n if (method === 'POST' && isBatchSearchPostUrl(url)) {\n return baseRequest as BundleEntry<T>;\n }\n\n // POST creates require a full resource\n if (method === 'POST' && 'resource' in request) {\n const resource = applyTagToResource(config, request.resource);\n const { fullUrl } = request;\n return {\n ...baseRequest,\n resource: resource as T,\n fullUrl,\n } as BundleEntry<T>;\n }\n\n // // Add ifMatch for the entries that support it\n // if ('ifMatch' in request) {\n // baseRequest.request = {\n // ...baseRequest.request,\n // ifMatch: request.ifMatch,\n // };\n // }\n\n throw new Error('Unrecognized method');\n}\n\nexport async function batch<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function batch<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<BatchBundle<BundleContentType>>>;\nexport async function batch<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<BatchBundle<BundleContentType>> | FhirAsyncJobHandle> {\n const requestPayload = {\n resourceType: 'Bundle',\n type: 'batch',\n entry: input.requests.map((req) => batchInputRequestToBundleEntryItem(req, this.config)),\n };\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob('/', 'POST', requestPayload, requestMode, request);\n }\n\n const resp = await this.fhirRequest<BatchBundle<BundleContentType>>('/', 'POST')(requestPayload, request);\n // Validate each GET/HEAD retrieval entry against the tag config.\n // Violations are replaced with a synthetic 404 OperationOutcome entry; batch entries are independent.\n const rawEntries = resp.entry as Array<BundleEntry<BundleContentType>> | undefined;\n const processedEntries: Array<BundleEntry<BundleContentType>> | undefined =\n this.config.workspaceTag || this.config.ignoreTags?.length\n ? rawEntries?.map((entry, i) => {\n const req = input.requests[i];\n if (!req || !entry?.resource) return entry;\n if ((req.method === 'GET' || req.method === 'HEAD') && !isBatchSearchUrl(req.url)) {\n try {\n assertRetrievedResource(this.config, entry.resource);\n } catch (err) {\n if (!(err instanceof OystehrFHIRError)) throw err;\n return {\n request: entry.request,\n response: { status: '404', outcome: err.cause },\n } as unknown as BundleEntry<BundleContentType>;\n }\n }\n return entry;\n })\n : rawEntries;\n const bundle: BatchBundle<BundleContentType> = {\n ...resp,\n entry: processedEntries,\n unbundle: function (this: { entry?: Array<BundleEntry<BundleContentType>> | undefined }) {\n return (\n this.entry\n ?.map((entry) => entry.resource)\n .filter((resource): resource is BundleContentType => resource !== undefined) ?? []\n );\n },\n errors: function (this: { entry?: Array<BundleEntry<BundleContentType>> | undefined }) {\n return this.entry\n ?.filter((entry) => entry.response?.status?.startsWith('4') || entry.response?.status?.startsWith('5'))\n .map((entry) => entry.response?.outcome)\n .filter((outcome): outcome is OperationOutcome => outcome !== undefined);\n },\n };\n return bundle;\n}\n\nexport async function transaction<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request: OystehrClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function transaction<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: OystehrClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<TransactionBundle<BundleContentType>>>;\nexport async function transaction<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<TransactionBundle<BundleContentType>> | FhirAsyncJobHandle> {\n const requestPayload = {\n resourceType: 'Bundle',\n type: 'transaction',\n entry: input.requests.map((req) => batchInputRequestToBundleEntryItem(req, this.config)),\n };\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob('/', 'POST', requestPayload, requestMode, request);\n }\n\n const resp = await this.fhirRequest<TransactionBundle<BundleContentType>>('/', 'POST')(requestPayload, request);\n // Validate each GET/HEAD retrieval entry against the tag config.\n // A violation throws OystehrFHIRError(404) \u2014 transactions are all-or-nothing.\n if (this.config.workspaceTag || this.config.ignoreTags?.length) {\n (resp.entry as Array<BundleEntry<BundleContentType>> | undefined)?.forEach((entry, i) => {\n const req = input.requests[i];\n if (!req || !entry?.resource) return;\n if ((req.method === 'GET' || req.method === 'HEAD') && !isBatchSearchUrl(req.url)) {\n assertRetrievedResource(this.config, entry.resource);\n }\n });\n }\n const bundle: TransactionBundle<BundleContentType> = {\n ...resp,\n entry: resp.entry as Array<BundleEntry<BundleContentType>> | undefined,\n unbundle: function (this: { entry?: Array<BundleEntry<BundleContentType>> | undefined }) {\n return (\n this.entry\n ?.map((entry) => entry.resource)\n .filter((resource): resource is BundleContentType => resource !== undefined) ?? []\n );\n },\n };\n return bundle;\n}\n\nexport async function generateFriendlyPatientId(\n this: SDKResource,\n { id }: GenerateFriendlyPatientIdParams,\n request?: OystehrClientRequest\n): Promise<FhirFetcherResponse<FhirResource>> {\n return this.fhirRequest(`/Patient/${id}/$generate-friendly-patient-id`, 'POST')({}, request);\n}\n\nexport function formatAddress(\n address: AddressR4B | AddressR5,\n options?: { all?: boolean; use?: boolean; lineSeparator?: string }\n): string {\n const builder = [];\n\n if (address.line) {\n builder.push(...address.line);\n }\n\n if (address.city || address.state || address.postalCode) {\n const cityStateZip = [];\n if (address.city) {\n cityStateZip.push(address.city);\n }\n if (address.state) {\n cityStateZip.push(address.state);\n }\n if (address.postalCode) {\n cityStateZip.push(address.postalCode);\n }\n builder.push(cityStateZip.join(', '));\n }\n\n if (address.use && (options?.all || options?.use)) {\n builder.push('[' + address.use + ']');\n }\n\n return builder.join(options?.lineSeparator || ', ').trim();\n}\n\nexport function formatHumanName(\n name: HumanNameR4B | HumanNameR5,\n options?: {\n all?: boolean;\n prefix?: boolean;\n suffix?: boolean;\n use?: boolean;\n }\n): string {\n const builder = [];\n\n if (name.prefix && options?.prefix !== false) {\n builder.push(...name.prefix);\n }\n\n if (name.given) {\n builder.push(...name.given);\n }\n\n if (name.family) {\n builder.push(name.family);\n }\n\n if (name.suffix && options?.suffix !== false) {\n builder.push(...name.suffix);\n }\n\n if (name.use && (options?.all || options?.use)) {\n builder.push('[' + name.use + ']');\n }\n\n return builder.join(' ').trim();\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\nimport * as ext from './fhir-ext';\n\nexport class Fhir extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['fhirApiUrl'] ?? 'https://fhir-api.zapehr.com';\n }\n /**\n * Performs a FHIR search and returns the results as a Bundle resource\n * @param options FHIR resource type and FHIR search parameters\n * @param request optional OystehrClientRequest object\n * @returns FHIR Bundle resource\n */\n search = ext.search;\n create = ext.create;\n get = ext.get;\n getAsyncJob = ext.getAsyncJob;\n waitForAsyncJob = ext.waitForAsyncJob;\n cancelAsyncJob = ext.cancelAsyncJob;\n update = ext.update;\n patch = ext.patch;\n delete = ext.delete;\n history = ext.history;\n batch = ext.batch;\n transaction = ext.transaction;\n generateFriendlyPatientId = ext.generateFriendlyPatientId;\n formatAddress = ext.formatAddress;\n formatHumanName = ext.formatHumanName;\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n LabOrderableItemListParams,\n LabOrderableItemListResponse,\n LabOrderableItemQuestionnaireGetParams,\n LabOrderableItemQuestionnaireGetResponse,\n LabOrderSubmitParams,\n LabOrderSubmitResponse,\n LabRouteCreateParams,\n LabRouteCreateResponse,\n LabRouteDeleteParams,\n LabRouteGetParams,\n LabRouteGetResponse,\n LabRouteListResponse,\n OystehrClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Lab extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['labApiUrl'] ?? 'https://labs-api.zapehr.com/v1';\n }\n /**\n * Gets a list of Routes associated with the project. Returns an empty list if no Routes are found.\n *\n * Access Policy Requirements:\n * Action: `Lab:GetRoutes`\n * Access Policy Resource: `Lab:Route`\n */\n routeList(request?: OystehrClientRequest): Promise<LabRouteListResponse> {\n return this.request('/route', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a route. A Route represents that a lab and particular customer have a relationship, and a Route is necessary to submit an order to a lab. See [Route](https://docs.oystehr.com/oystehr/services/lab/onboarding-a-lab/#create-route) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:CreateRoute`\n * Access Policy Resource: `Lab:Route`\n */\n routeCreate(params: LabRouteCreateParams, request?: OystehrClientRequest): Promise<LabRouteCreateResponse> {\n return this.request('/route', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Gets a Route associated with the project by specified Guid.\n *\n * Access Policy Requirements:\n * Action: `Lab:GetSingleRoute`\n * Access Policy Resource: `Lab:Route`\n */\n routeGet(params: LabRouteGetParams, request?: OystehrClientRequest): Promise<LabRouteGetResponse> {\n return this.request('/route/{routeGuid}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete a route. Deleting a Route will permanently remove the `routeGuid`. Orders can no longer be submitted to this lab until a new Route is created. See [Route](https://docs.oystehr.com/oystehr/services/lab/onboarding-a-lab/#delete-route) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:DeleteRoute`\n * Access Policy Resource: `Lab:Route`\n */\n routeDelete(params: LabRouteDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/route/{routeGuid}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Returns list of active orderable items for the latest compendium version. Page size is default 25 and max 100 items. See [orderable item Search](https://docs.oystehr.com/oystehr/services/lab/explore-the-compendium/#orderable-item-search) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemList(\n params: LabOrderableItemListParams,\n request?: OystehrClientRequest\n ): Promise<LabOrderableItemListResponse>;\n /**\n * Returns list of active orderable items for the latest compendium version. Page size is default 25 and max 100 items. See [orderable item Search](https://docs.oystehr.com/oystehr/services/lab/explore-the-compendium/#orderable-item-search) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemList(request?: OystehrClientRequest): Promise<LabOrderableItemListResponse>;\n /**\n * Returns list of active orderable items for the latest compendium version. Page size is default 25 and max 100 items. See [orderable item Search](https://docs.oystehr.com/oystehr/services/lab/explore-the-compendium/#orderable-item-search) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemList(\n params?: LabOrderableItemListParams | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<LabOrderableItemListResponse> {\n return this.request('/orderableItem', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Retrieve the AOE (Answer on Entry) Questionnaire for the given orderable item. The orderable item is defined by its labGuid, compendiumVersion, and itemCode. See [AOE](https://docs.oystehr.com/oystehr/services/lab/explore-the-compendium/#AOE) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemQuestionnaireGet(\n params: LabOrderableItemQuestionnaireGetParams,\n request?: OystehrClientRequest\n ): Promise<LabOrderableItemQuestionnaireGetResponse> {\n return this.request(\n '/canonical-questionnaire/lab/{labGuid}/compendium/{compendiumVersion}/item/{itemCode}/questionnaire',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Submit a lab order. Oystehr's [Submit Lab](https://docs.oystehr.com/oystehr/services/lab/submit-an-order/) feature allows users to submit an order consisting of one or more well-configured ServiceRequests to an external lab. In order to successfully submit an order, a [Route](https://docs.oystehr.com/oystehr/services/lab/onboarding-a-lab/#create-route) to and Organization representing that lab must exist. If the lab requires its own requisition document (eReq) or an Advance Beneficiary Notice (ABN), the appropriate DocumentReferences will be included in the response.\n *\n * Access Policy Requirements:\n * Action: `Lab:SubmitOrder`\n * Access Policy Resource: `Lab:Order`\n */\n orderSubmit(params: LabOrderSubmitParams, request?: OystehrClientRequest): Promise<LabOrderSubmitResponse> {\n return this.request('/submit', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n M2mCreateParams,\n M2mCreateResponse,\n M2mDeleteParams,\n M2mGetParams,\n M2mGetResponse,\n M2mListResponse,\n M2mListV2Params,\n M2mListV2Response,\n M2mMeResponse,\n M2mRotateSecretParams,\n M2mRotateSecretResponse,\n M2mUpdateParams,\n M2mUpdateResponse,\n OystehrClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class M2m extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * DEPRECATED. Please use [v2/list](https://api-reference.oystehr.com/reference/get_m2m-v2-list) instead.\n *\n * Get a list of all M2M Clients. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n list(request?: OystehrClientRequest): Promise<M2mListResponse> {\n return this.request('/m2m', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new M2M Client. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:CreateM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n create(params: M2mCreateParams, request?: OystehrClientRequest): Promise<M2mCreateResponse> {\n return this.request('/m2m', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get information about the calling M2M Client. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:GetM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n me(request?: OystehrClientRequest): Promise<M2mMeResponse> {\n return this.request('/m2m/me', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get the M2M Client with the provided ID. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:GetM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n get(params: M2mGetParams, request?: OystehrClientRequest): Promise<M2mGetResponse> {\n return this.request('/m2m/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the M2M Client with the provided ID. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:UpdateM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n update(params: M2mUpdateParams, request?: OystehrClientRequest): Promise<M2mUpdateResponse> {\n return this.request('/m2m/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the M2M Client with the provided ID. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:DeleteM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n delete(params: M2mDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/m2m/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Rotate the client secret for the M2M Client with the provided ID. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:RotateM2MClientSecret`\n * Access Policy Resource: `IAM:M2MClient`\n */\n rotateSecret(params: M2mRotateSecretParams, request?: OystehrClientRequest): Promise<M2mRotateSecretResponse> {\n return this.request('/m2m/{id}/rotate-secret', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get M2M clients in the Project with pagination, sort, sort order and filtering. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n listV2(params: M2mListV2Params, request?: OystehrClientRequest): Promise<M2mListV2Response>;\n /**\n * Get M2M clients in the Project with pagination, sort, sort order and filtering. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n listV2(request?: OystehrClientRequest): Promise<M2mListV2Response>;\n /**\n * Get M2M clients in the Project with pagination, sort, sort order and filtering. [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients) are used to access Oystehr APIs from scripts and server-side code like [Zambda Functions](https://docs.oystehr.com/oystehr/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n listV2(params?: M2mListV2Params | OystehrClientRequest, request?: OystehrClientRequest): Promise<M2mListV2Response> {\n return this.request('/m2m/v2/list', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { MessagingGetMessagingConfigResponse, OystehrClientRequest } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Messaging extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get an information about the Messaging services configuration. This information includes phone number, phone number type and also rate limits of each service.\n */\n getMessagingConfig(request?: OystehrClientRequest): Promise<MessagingGetMessagingConfigResponse> {\n return this.request('/messaging/config', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n PaymentMethodDeleteParams,\n PaymentMethodListParams,\n PaymentMethodListResponse,\n PaymentMethodSetDefaultParams,\n PaymentMethodSetUpParams,\n PaymentMethodSetUpResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class PaymentMethod extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Enter a new credit card or other payment method for the user.\n *\n * Access Policy Requirements:\n * Action: `Payment:Setup`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n setUp(params: PaymentMethodSetUpParams, request?: OystehrClientRequest): Promise<PaymentMethodSetUpResponse> {\n return this.request('/payment/payment-method/setup', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Set a specified payment method for the user as default.\n *\n * Access Policy Requirements:\n * Action: `Payment:SetDefault`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n setDefault(params: PaymentMethodSetDefaultParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/payment/payment-method/set-default', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete a specified payment method for the beneficiary.\n *\n * Access Policy Requirements:\n * Action: `Payment:Delete`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n delete(params: PaymentMethodDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/payment/payment-method', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * List all payment methods for the patient.\n *\n * Access Policy Requirements:\n * Action: `Payment:Setup`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n list(params: PaymentMethodListParams, request?: OystehrClientRequest): Promise<PaymentMethodListResponse> {\n return this.request('/payment/payment-method/list', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { OystehrClientRequest, ProjectGetResponse, ProjectUpdateParams, ProjectUpdateResponse } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Project extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get the Project settings for a Project. Developers must specify a [project ID](https://docs.oystehr.com/oystehr/core-documentation/authenticating-api-requests/#x-oystehr-project-id-header) in the header. A Project is the logically-isolated instance of Oystehr that segments your data from other Projects. [Projects](https://docs.oystehr.com/oystehr/services/project/) are completely independent from each other, having their own separate [FHIR store](https://docs.oystehr.com/oystehr/services/fhir/basics/), [Applications](https://docs.oystehr.com/oystehr/services/app/applications/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), etc .\n *\n * Access Policy Action: `Project:GetProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n get(request?: OystehrClientRequest): Promise<ProjectGetResponse> {\n return this.request('/project', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Update the Project settings for the Project that corresponds to the project-id in the request header. A [Project](https://docs.oystehr.com/oystehr/services/project/) is the logically-isolated instance of Oystehr that segments your data from other Projects. Projects are completely independent from each other, having their own separate [FHIR store](https://docs.oystehr.com/oystehr/services/fhir/basics/), [Applications](https://docs.oystehr.com/oystehr/services/app/applications/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), etc .\n *\n * Access Policy Action: `Project:UpdateProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n update(params: ProjectUpdateParams, request?: OystehrClientRequest): Promise<ProjectUpdateResponse>;\n /**\n * Update the Project settings for the Project that corresponds to the project-id in the request header. A [Project](https://docs.oystehr.com/oystehr/services/project/) is the logically-isolated instance of Oystehr that segments your data from other Projects. Projects are completely independent from each other, having their own separate [FHIR store](https://docs.oystehr.com/oystehr/services/fhir/basics/), [Applications](https://docs.oystehr.com/oystehr/services/app/applications/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), etc .\n *\n * Access Policy Action: `Project:UpdateProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n update(request?: OystehrClientRequest): Promise<ProjectUpdateResponse>;\n /**\n * Update the Project settings for the Project that corresponds to the project-id in the request header. A [Project](https://docs.oystehr.com/oystehr/services/project/) is the logically-isolated instance of Oystehr that segments your data from other Projects. Projects are completely independent from each other, having their own separate [FHIR store](https://docs.oystehr.com/oystehr/services/fhir/basics/), [Applications](https://docs.oystehr.com/oystehr/services/app/applications/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), etc .\n *\n * Access Policy Action: `Project:UpdateProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n update(\n params?: ProjectUpdateParams | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<ProjectUpdateResponse> {\n return this.request('/project', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import { OystehrClientRequest, SDKResource } from '../../client/client';\nimport { OystehrSdkError } from '../../errors';\nimport { RcmGetPayerResponse } from '../types';\n\nfunction baseUrlThunk(this: SDKResource): string {\n return this.config.services?.['rcmApiUrl'] ?? 'https://rcm-api.zapehr.com/v1';\n}\n\nexport function constructPayerUrl(\n this: SDKResource,\n {\n id,\n }: {\n id: string;\n }\n): string {\n return `${baseUrlThunk.call(this)}/payer/${id}`;\n}\n\nexport async function getPayerByUrl(\n this: SDKResource,\n { url }: { url: string },\n request?: OystehrClientRequest\n): Promise<RcmGetPayerResponse> {\n if (!url.startsWith(constructPayerUrl.call(this, { id: '' }))) {\n throw new OystehrSdkError({ code: 400, message: 'Invalid payer URL.' });\n }\n const urlObj = new URL(url);\n const pathParts = urlObj.pathname.split('/').filter(Boolean);\n const id = pathParts[pathParts.length - 1];\n return this.request('/payer/{id}', 'get', baseUrlThunk.bind(this))({ id }, request);\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n RcmEligibilityCheckParams,\n RcmEligibilityCheckResponse,\n RcmGetPayerParams,\n RcmGetPayerResponse,\n RcmListPayersParams,\n RcmListPayersResponse,\n RcmSetClaimStatusParams,\n RcmSetClaimStatusResponse,\n RcmSubmitClaimParams,\n RcmSubmitClaimResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\nimport * as ext from './rcm-ext';\n\nexport class Rcm extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['rcmApiUrl'] ?? 'https://rcm-api.zapehr.com/v1';\n }\n constructPayerUrl = ext.constructPayerUrl;\n getPayerByUrl = ext.getPayerByUrl;\n /**\n * Check [Insurance Eligibility](https://docs.oystehr.com/oystehr/services/rcm/eligibility/).\n *\n * Access Policy Action: `RCM:CheckInsuranceEligibility`\n * Access Policy Resource: `RCM:InsuranceEligibility`\n *\n * Access Policy Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:CoverageEligibilityResponse`\n */\n eligibilityCheck(\n params: RcmEligibilityCheckParams,\n request?: OystehrClientRequest\n ): Promise<RcmEligibilityCheckResponse> {\n return this.request('/eligibility-check', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Submit a claim to a payer.\n *\n * Access Policy Action: `RCM:SubmitClaim`\n * Access Policy Resource: `RCM:Claim`\n *\n * Access Policy Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:ClaimResponse`\n */\n submitClaim(params: RcmSubmitClaimParams, request?: OystehrClientRequest): Promise<RcmSubmitClaimResponse> {\n return this.request('/claim/{claimId}/submit', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Emulate asynchronous claim responses by manually setting claim status.\n *\n * Access Policy Action: `RCM:SubmitClaim`\n * Access Policy Resource: `RCM:Claim`\n *\n * Access Policy Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:ClaimResponse`\n */\n setClaimStatus(params: RcmSetClaimStatusParams, request?: OystehrClientRequest): Promise<RcmSetClaimStatusResponse> {\n return this.request('/claim/{claimId}/status', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search for payers by name or identifier.\n *\n * Access Policy Action: `RCM:SearchPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n listPayers(params: RcmListPayersParams, request?: OystehrClientRequest): Promise<RcmListPayersResponse>;\n /**\n * Search for payers by name or identifier.\n *\n * Access Policy Action: `RCM:SearchPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n listPayers(request?: OystehrClientRequest): Promise<RcmListPayersResponse>;\n /**\n * Search for payers by name or identifier.\n *\n * Access Policy Action: `RCM:SearchPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n listPayers(\n params?: RcmListPayersParams | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<RcmListPayersResponse> {\n return this.request('/payer', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Retrieve a payer by its ID.\n *\n * Access Policy Action: `RCM:GetPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n getPayer(params: RcmGetPayerParams, request?: OystehrClientRequest): Promise<RcmGetPayerResponse> {\n return this.request('/payer/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n RoleCreateParams,\n RoleCreateResponse,\n RoleDeleteParams,\n RoleGetParams,\n RoleGetResponse,\n RoleListResponse,\n RoleUpdateParams,\n RoleUpdateResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Role extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get a list of all Roles. A [Role](https://docs.oystehr.com/oystehr/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), and [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:ListAllRoles`\n * Access Policy Resource: `IAM:Role`\n */\n list(request?: OystehrClientRequest): Promise<RoleListResponse> {\n return this.request('/iam/role', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new Role. A [Role](https://docs.oystehr.com/oystehr/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), and [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:CreateRole`\n * Access Policy Resource: `IAM:Role`\n */\n create(params: RoleCreateParams, request?: OystehrClientRequest): Promise<RoleCreateResponse> {\n return this.request('/iam/role', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the Role with the provided ID. A [Role](https://docs.oystehr.com/oystehr/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), and [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:GetRole`\n * Access Policy Resource: `IAM:Role`\n */\n get(params: RoleGetParams, request?: OystehrClientRequest): Promise<RoleGetResponse> {\n return this.request('/iam/role/{roleId}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Role with the provided ID. A [Role](https://docs.oystehr.com/oystehr/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), and [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:UpdateRole`\n * Access Policy Resource: `IAM:Role`\n */\n update(params: RoleUpdateParams, request?: OystehrClientRequest): Promise<RoleUpdateResponse> {\n return this.request('/iam/role/{roleId}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Role with the provided ID. A [Role](https://docs.oystehr.com/oystehr/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.oystehr.com/oystehr/services/iam/developers/), [Users](https://docs.oystehr.com/oystehr/services/app/users/), and [M2M Clients](https://docs.oystehr.com/oystehr/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:DeleteRole`\n * Access Policy Resource: `IAM:Role`\n * Will fail if any entities hold the Role or if Role is assigned as the default patient role for the project\n */\n delete(params: RoleDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/iam/role/{roleId}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n SecretDeleteParams,\n SecretGetParams,\n SecretGetResponse,\n SecretListResponse,\n SecretSetParams,\n SecretSetResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Secret extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get a list of all secrets in the Project.\n *\n * Access Policy Action: `Zambda:ListAllSecrets`\n * Access Policy Resource: `Zambda:Secret`\n */\n list(request?: OystehrClientRequest): Promise<SecretListResponse> {\n return this.request('/secret', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a secret for a project. If the secret is already defined, update it.\n *\n * Access Policy Action: `Zambda:CreateSecret`\n * Access Policy Resource: `Zambda:Secret`\n */\n set(params: SecretSetParams, request?: OystehrClientRequest): Promise<SecretSetResponse> {\n return this.request('/secret', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the secret with the provided name.\n *\n * Access Policy Action: `Zambda:GetSecret`\n * Access Policy Resource: `Zambda:Secret`\n */\n get(params: SecretGetParams, request?: OystehrClientRequest): Promise<SecretGetResponse> {\n return this.request('/secret/{name}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the secret with the provided name.\n *\n * Access Policy Action: `Zambda:DeleteSecret`\n * Access Policy Resource: `Zambda:Secret`\n */\n delete(params: SecretDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/secret/{name}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n TelemedCreateMeetingParams,\n TelemedCreateMeetingResponse,\n TelemedJoinMeetingParams,\n TelemedJoinMeetingResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Telemed extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Create a [telemedicine video meeting](https://docs.oystehr.com/oystehr/services/telemed/).\n *\n * Access Policy Requirements:\n * Action: `Telemed:CreateMeeting`\n * Access Policy Resource: `Telemed:Meeting`\n * Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:Encounter`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Encounter`\n */\n createMeeting(\n params: TelemedCreateMeetingParams,\n request?: OystehrClientRequest\n ): Promise<TelemedCreateMeetingResponse> {\n return this.request('/telemed/v2/meeting', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get Meeting and Attendee objects necessary to join a telemedicine video meeting.\n *\n * Access Policy Requirements:\n * Action: `Telemed:JoinMeeting`\n * Access Policy Resource: `Telemed:Meeting`\n * To use M2M token to join as anonymous user:\n * Action: `Telemed:AddAnonymousToMeeting`\n * Access Policy Resource: `Telemed:Meeting`\n */\n joinMeeting(params: TelemedJoinMeetingParams, request?: OystehrClientRequest): Promise<TelemedJoinMeetingResponse> {\n return this.request(\n '/telemed/v2/meeting/{encounterId}/join',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n TerminologySearchCptParams,\n TerminologySearchCptResponse,\n TerminologySearchHcpcsParams,\n TerminologySearchHcpcsResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Terminology extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['terminologyApiUrl'] ?? 'https://terminology-api.zapehr.com/v1';\n }\n /**\n * Search CPT (Current Procedural Terminology) codes by code or description. Supports exact matches, prefix searches, and full-text search with BM25 ranking.\n *\n * Access Policy Action: `Terminology:SearchCodes`\n * Access Policy Resource: `Terminology:Code:*`\n */\n searchCpt(params: TerminologySearchCptParams, request?: OystehrClientRequest): Promise<TerminologySearchCptResponse> {\n return this.request('/cpt/search', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search HCPCS (Healthcare Common Procedure Coding System) Level II codes by code or description. Supports exact matches, prefix searches, and full-text search with BM25 ranking.\n *\n * Access Policy Action: `Terminology:SearchCodes`\n * Access Policy Resource: `Terminology:Code:*`\n */\n searchHcpcs(\n params: TerminologySearchHcpcsParams,\n request?: OystehrClientRequest\n ): Promise<TerminologySearchHcpcsResponse> {\n return this.request('/hcpcs/search', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { OystehrClientRequest, TransactionalSMSSendParams, TransactionalSMSSendResponse } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class TransactionalSMS extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Send an SMS to any phone number. Oystehr's [Transactional SMS](https://docs.oystehr.com/oystehr/services/messaging/transactional-sms/) feature makes it easy to send a text message to your [Users](https://docs.oystehr.com/oystehr/services/app/users/) with a single API call. You can use this feature to send appointment reminders, prescription refill reminders, discharge information, and more.\n *\n * Access Policy Requirements:\n * Action: `Messaging:SendTransactionalSMS`\n * Access Policy Resource: `Messaging:TransactionalSMS`\n * Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:Communication`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Communication`\n *\n * You also need Read access for the resource to which you are sending a message. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n send(params: TransactionalSMSSendParams, request?: OystehrClientRequest): Promise<TransactionalSMSSendResponse> {\n return this.request('/messaging/transactional-sms/send', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n UserChangePasswordParams,\n UserDeleteParams,\n UserGetParams,\n UserGetResponse,\n UserInviteParams,\n UserInviteResponse,\n UserListResponse,\n UserListV2Params,\n UserListV2Response,\n UserMeResponse,\n UserResetMfaParams,\n UserResetPasswordLinkParams,\n UserUpdateParams,\n UserUpdateResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class User extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get your own User details. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Fetch details about the calling User. This endpoint has no access policy requirements, it is available to all authenticated Users.\n */\n me(request?: OystehrClientRequest): Promise<UserMeResponse> {\n return this.request('/user/me', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get the User with the provided ID. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:GetUser`\n * Access Policy Resource: `App:User`\n */\n get(params: UserGetParams, request?: OystehrClientRequest): Promise<UserGetResponse> {\n return this.request('/user/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the User with the provided ID. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:UpdateUser`\n * Access Policy Resource: `App:User`\n */\n update(params: UserUpdateParams, request?: OystehrClientRequest): Promise<UserUpdateResponse> {\n return this.request('/user/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the User with the provided ID. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:DeleteUser`\n * Access Policy Resource: `App:User`\n */\n delete(params: UserDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/user/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Reset MFA for the User with the provided ID. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:ResetUserMFA`\n * Access Policy Resource: `App:User`\n */\n resetMfa(params: UserResetMfaParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/user/{id}/reset-mfa', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Creates a password reset link for the User with the provided ID. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:GetUserPasswordResetLink`\n * Access Policy Resource: `App:User`\n */\n resetPasswordLink(params: UserResetPasswordLinkParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/user/{id}/reset-password-link', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Automatically changes the password for the User with the provided ID. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:ChangeUserPassword`\n * Access Policy Resource: `App:User`\n */\n changePassword(params: UserChangePasswordParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/user/{id}/change-password', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Invite a User to the Project. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:CreateUser`\n * Access Policy Resource: `App:User`\n */\n invite(params: UserInviteParams, request?: OystehrClientRequest): Promise<UserInviteResponse> {\n return this.request('/user/invite', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * DEPRECATED. Please use [v2/list](https://api-reference.oystehr.com/reference/get_user-v2-list) instead.\n *\n * Get all Users in the Project. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `App:ListAllUsers`\n * Access Policy Resource: `App:User`\n */\n list(request?: OystehrClientRequest): Promise<UserListResponse> {\n return this.request('/user', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get Users in the Project with pagination, sort, sort order and filtering. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(params: UserListV2Params, request?: OystehrClientRequest): Promise<UserListV2Response>;\n /**\n * Get Users in the Project with pagination, sort, sort order and filtering. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(request?: OystehrClientRequest): Promise<UserListV2Response>;\n /**\n * Get Users in the Project with pagination, sort, sort order and filtering. [Users](https://docs.oystehr.com/oystehr/services/app/users/) are the people who log into the [Applications](https://docs.oystehr.com/oystehr/services/app/applications/) you configure for securing the apps you build on top of Oystehr.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(\n params?: UserListV2Params | OystehrClientRequest,\n request?: OystehrClientRequest\n ): Promise<UserListV2Response> {\n return this.request('/user/v2/list', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { OystehrClientRequest, VersionGetResponse } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class Version extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get project API version. This endpoint is public so there are no access policy requirements.\n */\n get(request?: OystehrClientRequest): Promise<VersionGetResponse> {\n return this.request('/version', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n}\n", "import { defaultProjectApiUrl, SDKResource } from '../../client/client';\nimport { OystehrSdkError } from '../../errors';\nimport { Z3GetPresignedUrlParams, Z3GetPresignedUrlResponse } from '../types';\n\nfunction baseUrlThunk(this: SDKResource): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n}\n\n/**\n * Uploads a file to the bucket and key. Files should be Blobs.\n *\n * @param params upload file params\n */\nexport async function uploadFile(\n this: SDKResource,\n {\n bucketName,\n 'objectPath+': key,\n file,\n }: {\n bucketName: string;\n 'objectPath+': string;\n file: Blob;\n }\n): Promise<void> {\n const uploadUrl = await this.request(\n '/z3/{bucketName}/{objectPath+}',\n 'post',\n baseUrlThunk.bind(this)\n )({\n action: 'upload',\n bucketName,\n 'objectPath+': key,\n });\n await fetch(uploadUrl.signedUrl, {\n method: 'PUT',\n body: file,\n });\n}\n\n/**\n * Downloads an object matching the bucket and key. File content is returned as an ArrayBuffer.\n *\n * @param params download file params\n */\nexport async function downloadFile(\n this: SDKResource,\n {\n bucketName,\n 'objectPath+': key,\n }: {\n bucketName: string;\n 'objectPath+': string;\n }\n): Promise<ArrayBuffer> {\n const uploadUrl = await this.request(\n '/z3/{bucketName}/{objectPath+}',\n 'post',\n baseUrlThunk.bind(this)\n )({\n action: 'download',\n bucketName,\n 'objectPath+': key,\n });\n const resp = await fetch(uploadUrl.signedUrl, {\n method: 'GET',\n });\n if (!resp.ok) {\n throw new Error('Failed to download file');\n }\n return resp.arrayBuffer();\n}\n\n/**\n * This helper performs a `getPresignedUrl` request for Z3 URLs of the forms\n * `https://projects-api.oystehr.com/v1/z3/<bucket>/<key>` or `z3://<bucket>/<key>`\n * instead of the standard SDK `Z3GetPresignedUrlParams`.\n *\n * @param params url and action\n */\nexport async function getPresignedUrlForZ3Url(\n this: SDKResource,\n params: { url: string; action: Z3GetPresignedUrlParams['action'] }\n): Promise<Z3GetPresignedUrlResponse> {\n let bucket: string;\n let key: string;\n const url = new URL(params.url);\n if (url.protocol === 'z3:') {\n // remove leading forward slash\n const z3PathParts = url.pathname.split('/').slice(1);\n bucket = url.hostname;\n key = z3PathParts.join('/');\n } else if (url.href.startsWith(this.config.services?.['projectApiUrl'] ?? defaultProjectApiUrl)) {\n // remove leading `/v1/z3`\n const httpsPathParts = url.pathname.split('/').slice(3);\n bucket = httpsPathParts[0];\n key = httpsPathParts.slice(1).join('/');\n } else {\n throw new OystehrSdkError({ message: 'Invalid Z3 URL', code: 400 });\n }\n const requestParams: Z3GetPresignedUrlParams = {\n action: 'upload',\n bucketName: bucket,\n 'objectPath+': key,\n };\n return this.request('/z3/{bucketName}/{objectPath+}', 'post', baseUrlThunk.bind(this))(requestParams);\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n Z3CreateBucketParams,\n Z3CreateBucketResponse,\n Z3DeleteBucketParams,\n Z3DeleteObjectParams,\n Z3GetPresignedUrlParams,\n Z3GetPresignedUrlResponse,\n Z3ListBucketsResponse,\n Z3ListObjectsParams,\n Z3ListObjectsResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\nimport * as ext from './z3-ext';\n\nexport class Z3 extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Uploads a file to the bucket and key. Files should be Blobs.\n * @param params upload file params\n */\n uploadFile = ext.uploadFile;\n /**\n * Downloads an object matching the bucket and key. File content is returned as an ArrayBuffer.\n * @param params download file params\n */\n downloadFile = ext.downloadFile;\n /**\n * This helper performs a `getPresignedUrl` request for Z3 URLs of the forms\n * `https://projects-api.oystehr.com/v1/z3/<bucket>/<key>` or `z3://<bucket>/<key>`\n * instead of the standard SDK `Z3GetPresignedUrlParams`.\n * @param params url and action\n */\n getPresignedUrlForZ3Url = ext.getPresignedUrlForZ3Url;\n /**\n * List all Z3 Buckets. [Z3](https://docs.oystehr.com/oystehr/services/z3/) is Oystehr's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:ListBuckets`\n * Access Policy Resource: `Z3:BucketName`\n */\n listBuckets(request?: OystehrClientRequest): Promise<Z3ListBucketsResponse> {\n return this.request('/z3', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a Z3 Bucket with the provided name. [Z3](https://docs.oystehr.com/oystehr/services/z3/) is Oystehr's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:CreateBucket`\n * Access Policy Resource: `Z3:*`\n */\n createBucket(params: Z3CreateBucketParams, request?: OystehrClientRequest): Promise<Z3CreateBucketResponse> {\n return this.request('/z3/{bucketName}', 'put', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Z3 Bucket with the provided name. [Z3](https://docs.oystehr.com/oystehr/services/z3/) is Oystehr's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:DeleteBucket`\n * Access Policy Resource: `Z3:BucketName`\n */\n deleteBucket(params: Z3DeleteBucketParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/z3/{bucketName}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * List all Z3 Objects at the provided path in the Bucket with the provided name [Z3](https://docs.oystehr.com/oystehr/services/z3/) is Oystehr's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:ListObjects`\n * Access Policy Resource: `Z3:BucketName:ObjectPath`\n */\n listObjects(params: Z3ListObjectsParams, request?: OystehrClientRequest): Promise<Z3ListObjectsResponse> {\n return this.request('/z3/{bucketName}/{objectPath+}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get a link for downloading or uploading a Z3 Object to the provided path in the Bucket with the provided name. [Z3](https://docs.oystehr.com/oystehr/services/z3/) is Oystehr's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:PutObject` or `Z3:GetObject`\n * Access Policy Resource: `Z3:BucketName:ObjectPath`\n */\n getPresignedUrl(params: Z3GetPresignedUrlParams, request?: OystehrClientRequest): Promise<Z3GetPresignedUrlResponse> {\n return this.request('/z3/{bucketName}/{objectPath+}', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Z3 Object at the provided path in the Bucket with the provided name. [Z3](https://docs.oystehr.com/oystehr/services/z3/) is Oystehr's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:DeleteObject`\n * Access Policy Resource: `Z3:BucketName:ObjectPath`\n */\n deleteObject(params: Z3DeleteObjectParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/z3/{bucketName}/{objectPath+}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import { SDKResource } from '../../client/client';\nimport { OystehrSdkError } from '../../errors';\n\nfunction baseUrlThunk(this: SDKResource): string {\n return this.config.services?.['zambdaApiUrl'] ?? 'https://zambda-api.zapehr.com/v1';\n}\n\nexport async function uploadFile(\n this: SDKResource,\n {\n id,\n file,\n filename,\n }: {\n id: string;\n file: Blob;\n filename?: string | undefined;\n }\n): Promise<void> {\n const uploadUrl = await this.request(\n '/zambda/{id}/presigned-url',\n 'post',\n baseUrlThunk.bind(this)\n )({ id, action: 'upload', filename });\n const response = await fetch(uploadUrl.signedUrl, {\n method: 'PUT',\n body: file,\n });\n if (!response.ok) {\n throw new OystehrSdkError({ message: 'Failed to upload file', code: response.status, cause: response.statusText });\n }\n}\n\nexport async function downloadFile(this: SDKResource, { id }: { id: string }): Promise<ArrayBuffer> {\n const downloadUrl = await this.request(\n '/zambda/{id}/presigned-url',\n 'post',\n baseUrlThunk.bind(this)\n )({ id, action: 'download' });\n const response = await fetch(downloadUrl.signedUrl, {\n method: 'GET',\n });\n if (!response.ok) {\n throw new OystehrSdkError({\n message: 'Failed to download file',\n code: response.status,\n cause: response.statusText,\n });\n }\n return response.arrayBuffer();\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n ZambdaCreateParams,\n ZambdaCreateResponse,\n ZambdaDeleteParams,\n ZambdaExecuteParams,\n ZambdaExecutePublicParams,\n ZambdaExecutePublicResponse,\n ZambdaExecuteResponse,\n ZambdaGetParams,\n ZambdaGetPresignedUrlParams,\n ZambdaGetPresignedUrlResponse,\n ZambdaGetResponse,\n ZambdaListResponse,\n ZambdaS3UploadParams,\n ZambdaS3UploadResponse,\n ZambdaUpdateParams,\n ZambdaUpdateResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\nimport * as ext from './zambda-ext';\n\nexport class Zambda extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['zambdaApiUrl'] ?? 'https://zambda-api.zapehr.com/v1';\n }\n uploadFile = ext.uploadFile;\n downloadFile = ext.downloadFile;\n /**\n * Get a list of all Zambda Functions in the Project. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ListAllFunctions`\n * Access Policy Resource: `Zambda:Function`\n */\n list(request?: OystehrClientRequest): Promise<ZambdaListResponse> {\n return this.request('/zambda', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new Zambda Function. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:CreateFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n create(params: ZambdaCreateParams, request?: OystehrClientRequest): Promise<ZambdaCreateResponse> {\n return this.request('/zambda', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the Zambda Function with the provided ID or name. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:GetFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n get(params: ZambdaGetParams, request?: OystehrClientRequest): Promise<ZambdaGetResponse> {\n return this.request('/zambda/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Zambda Function with the provided ID or name. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:UpdateFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n update(params: ZambdaUpdateParams, request?: OystehrClientRequest): Promise<ZambdaUpdateResponse> {\n return this.request('/zambda/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Zambda Function with the provided ID or name. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:DeleteFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n delete(params: ZambdaDeleteParams, request?: OystehrClientRequest): Promise<void> {\n return this.request('/zambda/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Execute the [Authenticated Zambda Function](https://docs.oystehr.com/oystehr/services/zambda/types/authenticated/) with the provided ID. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:InvokeFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n execute(params: ZambdaExecuteParams, request?: OystehrClientRequest): Promise<ZambdaExecuteResponse> {\n return this.request('/zambda/{id}/execute', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Execute the [Public Zambda Function](https://docs.oystehr.com/oystehr/services/zambda/types/public/) with the provided ID. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Execute a zambda that has method http_open. This endpoint is public so there are no access policy requirements.\n */\n executePublic(\n params: ZambdaExecutePublicParams,\n request?: OystehrClientRequest\n ): Promise<ZambdaExecutePublicResponse> {\n return this.request('/zambda/{id}/execute-public', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * **Deprecated.** Use `POST /zambda/{id}/presigned-url` with `action: \"upload\"` instead. This endpoint will be removed in future releases.\n *\n * Returns a URL that is used to deploy code to the Zambda Function with the provided ID. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:UpdateFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n s3Upload(params: ZambdaS3UploadParams, request?: OystehrClientRequest): Promise<ZambdaS3UploadResponse> {\n return this.request('/zambda/{id}/s3-upload', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Returns a presigned URL to upload or download code for the Zambda Function with the provided ID. Pass `action: \"upload\"` to get a URL for deploying a new code zip, or `action: \"download\"` to get a URL for retrieving the currently deployed zip. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Upload: Access Policy Action: `Zambda:UpdateFunction`\n * Download: Access Policy Action: `Zambda:GetFunctionSource`\n * Access Policy Resource: `Zambda:Function`\n */\n getPresignedUrl(\n params: ZambdaGetPresignedUrlParams,\n request?: OystehrClientRequest\n ): Promise<ZambdaGetPresignedUrlResponse> {\n return this.request('/zambda/{id}/presigned-url', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n OystehrClientRequest,\n ZambdaLogStreamGetParams,\n ZambdaLogStreamGetResponse,\n ZambdaLogStreamListParams,\n ZambdaLogStreamListResponse,\n ZambdaLogStreamSearchParams,\n ZambdaLogStreamSearchResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { OystehrConfig } from '../../config';\n\nexport class ZambdaLogStream extends SDKResource {\n constructor(config: OystehrConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['zambdaApiUrl'] ?? 'https://zambda-api.zapehr.com/v1';\n }\n /**\n * Get the log streams for the Zambda Function with the provided ID. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ReadLogs`\n * Access Policy Resource: `Zambda:Function`\n */\n list(params: ZambdaLogStreamListParams, request?: OystehrClientRequest): Promise<ZambdaLogStreamListResponse> {\n return this.request('/zambda/{id}/logStream', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get all logs for the Zambda Function with the provided ID, filtered by any of: text in messages, minimum start date, and/or maximum end date. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ReadLogs`\n * Access Policy Resource: `Zambda:Function`\n */\n search(params: ZambdaLogStreamSearchParams, request?: OystehrClientRequest): Promise<ZambdaLogStreamSearchResponse> {\n return this.request('/zambda/{id}/logStream/search', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the logs from the specified log stream for the Zambda Function with the provided ID. [Zambdas](https://docs.oystehr.com/oystehr/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ReadLogs`\n * Access Policy Resource: `Zambda:Function`\n */\n get(params: ZambdaLogStreamGetParams, request?: OystehrClientRequest): Promise<ZambdaLogStreamGetResponse> {\n return this.request(\n '/zambda/{id}/logStream/{logStreamName}',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { OystehrConfig } from '../../config';\nimport { OystehrSdkError } from '../../errors';\nimport { Application } from './application';\nimport { Charge } from './charge';\nimport { Conversation } from './conversation';\nimport { Developer } from './developer';\nimport { Erx } from './erx';\nimport { Fax } from './fax';\nimport { Fhir } from './fhir';\nimport { Lab } from './lab';\nimport { M2m } from './m2m';\nimport { Messaging } from './messaging';\nimport { PaymentMethod } from './paymentMethod';\nimport { Project } from './project';\nimport { Rcm } from './rcm';\nimport { Role } from './role';\nimport { Secret } from './secret';\nimport { Telemed } from './telemed';\nimport { Terminology } from './terminology';\nimport { TransactionalSMS } from './transactionalSMS';\nimport { User } from './user';\nimport { Version } from './version';\nimport { Z3 } from './z3';\nimport { Zambda } from './zambda';\nimport { ZambdaLogStream } from './zambdaLogStream';\n\nexport class Oystehr {\n readonly config: OystehrConfig;\n readonly application: Application;\n readonly developer: Developer;\n readonly m2m: M2m;\n readonly messaging: Messaging;\n readonly conversation: Conversation;\n readonly transactionalSMS: TransactionalSMS;\n readonly paymentMethod: PaymentMethod;\n readonly charge: Charge;\n readonly project: Project;\n readonly role: Role;\n readonly secret: Secret;\n readonly telemed: Telemed;\n readonly user: User;\n readonly version: Version;\n readonly z3: Z3;\n readonly fax: Fax;\n readonly lab: Lab;\n readonly erx: Erx;\n readonly terminology: Terminology;\n readonly zambda: Zambda;\n readonly zambdaLogStream: ZambdaLogStream;\n readonly rcm: Rcm;\n readonly fhir: Fhir;\n constructor(config: OystehrConfig) {\n if (config.workspaceTag && config.ignoreTags) {\n throw new OystehrSdkError({\n message: 'workspaceTag and ignoreTags are mutually exclusive and cannot both be set in config',\n code: 400,\n });\n }\n this.config = config;\n this.config.services ??= {};\n this.config.services['projectApiUrl'] ??= config.projectApiUrl;\n this.config.services['fhirApiUrl'] ??= config.fhirApiUrl;\n this.application = new Application(config);\n this.developer = new Developer(config);\n this.m2m = new M2m(config);\n this.messaging = new Messaging(config);\n this.conversation = new Conversation(config);\n this.transactionalSMS = new TransactionalSMS(config);\n this.paymentMethod = new PaymentMethod(config);\n this.charge = new Charge(config);\n this.project = new Project(config);\n this.role = new Role(config);\n this.secret = new Secret(config);\n this.telemed = new Telemed(config);\n this.user = new User(config);\n this.version = new Version(config);\n this.z3 = new Z3(config);\n this.fax = new Fax(config);\n this.lab = new Lab(config);\n this.erx = new Erx(config);\n this.terminology = new Terminology(config);\n this.zambda = new Zambda(config);\n this.zambdaLogStream = new ZambdaLogStream(config);\n this.rcm = new Rcm(config);\n this.fhir = new Fhir(config);\n }\n}\n", "import type { OystehrConfig } from '../config';\nimport { Oystehr } from '../resources/classes';\n\n/** Browser or gateway base URL, e.g. http://localhost:8080 (demo-03) or http://localhost:8081 (Tyk). */\nexport type SijilClientConfig = {\n apiBaseUrl: string;\n accessToken?: string;\n projectId?: string;\n /** FHIR path prefix on the same host. Default `/fhir/r4` for Go; use `/fhir/R4` on Tyk open FHIR. */\n fhirPath?: string;\n} & Pick<OystehrConfig, 'logLevel' | 'fetch' | 'retry' | 'workspaceTag' | 'ignoreTags'>;\n\n/**\n * Maps a single Sijil API base URL to Oystehr-shaped service endpoints (Go gateway or Tyk).\n */\nexport function sijilServiceUrls(apiBaseUrl: string, fhirPath = '/fhir/r4'): NonNullable<OystehrConfig['services']> {\n const base = apiBaseUrl.replace(/\\/+$/, '');\n const fhir = `${base}${fhirPath.startsWith('/') ? fhirPath : `/${fhirPath}`}`;\n return {\n zambdaApiUrl: `${base}/v1`,\n projectApiUrl: `${base}/v1`,\n fhirApiUrl: fhir,\n };\n}\n\n/**\n * Create an Oystehr-compatible client pointed at Sijil Go or Tyk instead of zapehr.com.\n */\nexport function createSijilClient(config: SijilClientConfig): Oystehr {\n const services = sijilServiceUrls(config.apiBaseUrl, config.fhirPath);\n return new Oystehr({\n accessToken: config.accessToken,\n projectId: config.projectId,\n logLevel: config.logLevel,\n fetch: config.fetch,\n retry: config.retry,\n workspaceTag: config.workspaceTag,\n ignoreTags: config.ignoreTags,\n fhirApiUrl: services.fhirApiUrl,\n projectApiUrl: services.projectApiUrl,\n services,\n });\n}\n\n/**\n * Read `import.meta.env.VITE_SIJIL_API_URL` when available (Vite apps).\n */\nexport function apiBaseFromViteEnv(fallback = 'http://localhost:8080'): string {\n try {\n const env = (import.meta as ImportMeta & { env?: Record<string, string | undefined> }).env;\n return env?.VITE_SIJIL_API_URL?.trim() || fallback;\n } catch {\n return fallback;\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACGO,IAAM,kBAAN,MAAM,yBAAwB,MAAM;AAAA,EAEzC,YAAY,EAAE,SAAS,MAAM,MAAM,GAAuD;AACxF,UAAM,SAAS,EAAE,MAAM,CAAC;AACxB,WAAO,eAAe,MAAM,iBAAgB,SAAS;AACrD,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AAAA,EACA,WAAmB;AACjB,WAAO,GAAG,KAAK,IAAI,KAAK,KAAK,OAAO,WAAW,KAAK,IAAI;AAAA,EAC1D;AAAA,EACA,SAAc;AACZ,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;AAEA,SAAS,wCAAwC,OAAyD;AACxG,QAAM,SAAS,CAAC;AAChB,aAAW,SAAS,MAAM,SAAS,CAAC,GAAG;AACrC,QAAI,MAAM,WAAW,MAAM,QAAQ,MAAM;AACvC,aAAO,KAAK,MAAM,QAAQ,IAAI;AAAA,IAChC;AAAA,EACF;AACA,MAAI,CAAC,OAAO,QAAQ;AAClB,WAAO,KAAK,oBAAoB;AAAA,EAClC;AACA,SAAO,OAAO,KAAK,GAAG;AACxB;AAEO,IAAM,mBAAN,MAAM,0BAAyB,gBAAgB;AAAA,EAEpD,YAAY,EAAE,OAAO,KAAK,GAAsE;AAC9F,UAAM;AAAA,MACJ,SAAS,wCAAwC,KAAiD;AAAA,MAClG;AAAA,IACF,CAAC;AACD,WAAO,eAAe,MAAM,kBAAiB,SAAS;AACtD,SAAK,QAAQ;AACb,SAAK,OAAO;AAAA,EACd;AAAA,EACA,SAAc;AACZ,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,SAAS,KAAK;AAAA,MACd,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AACF;;;ACxDA,kBAAuD;;;ACAhD,IAAM,SAAN,MAAa;AAAA,EAElB,YAAY,EAAE,MAAM,GAA2C;AAC7D,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,SAAiB,QAA6B,CAAC,GAAS;AAC5D,QAAI,KAAK,UAAU,CAAC,SAAS,QAAQ,OAAO,EAAE,SAAS,KAAK,MAAM,GAAG;AACnE,cAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,KAAK,SAAiB,QAA6B,CAAC,GAAS;AAC3D,QAAI,KAAK,UAAU,CAAC,QAAQ,OAAO,EAAE,SAAS,KAAK,MAAM,GAAG;AAC1D,cAAQ,KAAK,KAAK,UAAU,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,SAAiB,QAA6B,CAAC,GAAS;AAC5D,QAAI,KAAK,UAAU,CAAC,OAAO,EAAE,SAAS,KAAK,MAAM,GAAG;AAClD,cAAQ,MAAM,KAAK,UAAU,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,KAAK,SAAiB,QAA6B,CAAC,GAAS;AAC3D,QAAI,KAAK,UAAU,CAAC,OAAO,EAAE,SAAS,KAAK,MAAM,GAAG;AAClD,cAAQ,KAAK,KAAK,UAAU,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,QAAQ,SAAiB,QAA6B,CAAC,GAAS;AAC9D,QAAI,KAAK,UAAU,CAAC,OAAO,EAAE,SAAS,KAAK,MAAM,GAAG;AAClD,cAAQ,QAAQ,KAAK,UAAU,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AAAA,IACvD;AAAA,EACF;AACF;;;ADnBO,IAAM,uBAAuB;AACpC,IAAM,oBAAoB;AAC1B,IAAM,wBAAwB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAC3D,IAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA0CO,IAAM,cAAN,MAAkB;AAAA,EAGvB,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,SAAK,SAAS,IAAI,OAAO;AAAA,MACvB,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEU,QAAQ,MAAc,QAAgBA,eAA6C;AAC3F,WAAO,OAAO,QAAa,YAA8D;AACvF,YAAM,cAAc,MAAqB,KAAK;AAC9C,YAAM,cAAc,MAAc,KAAK;AACvC,UAAI;AAEF,eAAO,MAAM,QAAQA,eAAc,aAAa,aAAa,MAAM,MAAM,EAAE,QAAQ,OAAO;AAAA,MAC5F,SAAS,KAAU;AACjB,cAAM,QAAQ;AACd,aAAK,OAAO,MAAM,MAAM,SAAS,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,CAAC;AACzE,cAAM,IAAI,gBAAgB,EAAE,SAAS,MAAM,SAAS,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,CAAC;AAAA,MAC5F;AAAA,IACF;AAAA,EACF;AAAA,EAEU,YACR,MACA,QAMA;AACA,WAAO,OAAO,QAAa,SAAiC,gBAAiD;AAC3G,UAAI;AACF,cAAMA,gBAAe,MAAc,KAAK,OAAO,UAAU,cAAc;AACvE,cAAM,cAAc,MAAqB,KAAK;AAC9C,cAAM,cAAc,MAAc,KAAK;AAEvC,eAAO,MAAM,QAAQA,eAAc,aAAa,aAAa,MAAM,MAAM,EAAE,QAAQ,SAAS,WAAW;AAAA,MACzG,SAAS,KAAc;AAErB,cAAM,YAAY;AAClB,YAAI,OAAO,UAAU,YAAY,UAAU;AACzC,gBAAM,IAAI,gBAAgB;AAAA,YACxB,SAAS,UAAU;AAAA,YACnB,MAAM,UAAU;AAAA,YAChB,OAAO,UAAU;AAAA,UACnB,CAAC;AAAA,QACH;AACA,cAAM,IAAI,iBAAiB;AAAA,UACzB,OAAO,UAAU;AAAA,UACjB,MAAM,UAAU;AAAA,QAClB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAgB,cACd,MACA,QACA,QACA,aACA,SAC6B;AAC7B,UAAM,OAAO,gBAAgB,eAAe,SAAS;AACrD,UAAM,YAAY,gBAAgB,eAAe,KAAK,uBAAuB,IAAI,IAAI;AAErF,UAAM,MAAM,MAAM,KAAK,YAAY,WAAW,MAAM;AAAA,MAClD;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,aAAa;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAEA,QAAI,IAAI,WAAW,KAAK;AACtB,YAAM,IAAI,gBAAgB;AAAA,QACxB,SAAS,6DAA6D,IAAI,MAAM;AAAA,QAChF,MAAM,IAAI;AAAA,MACZ,CAAC;AAAA,IACH;AAEA,UAAM,kBAAkB,KAAK,WAAW,IAAI,SAAS,kBAAkB;AACvE,QAAI,CAAC,iBAAiB;AACpB,YAAM,IAAI,gBAAgB;AAAA,QACxB,SAAS;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,UAAM,QAAQ,KAAK,gBAAgB,eAAe;AAClD,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,gBAAgB;AAAA,QACxB,SAAS,uDAAuD,eAAe;AAAA,QAC/E,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AAEA,WAAO,EAAE,OAAO,iBAAiB,KAAK;AAAA,EACxC;AAAA,EAEA,MAAgB,oBACd,OACA,SACgC;AAChC,UAAM,MAAM,MAAM,KAAK,YAAY,cAAc,KAAK,IAAI,KAAK;AAAA,MAC7D,CAAC;AAAA,MACD;AAAA,QACE,GAAG;AAAA,QACH,aAAa;AAAA,MACf;AAAA,IACF;AAEA,QAAI,IAAI,WAAW,KAAK;AACtB,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,WAAW,KAAK,WAAW,IAAI,SAAS,YAAY;AAAA,QACpD,YAAY,KAAK,WAAW,IAAI,SAAS,aAAa;AAAA,MACxD;AAAA,IACF;AAEA,QAAI,IAAI,WAAW,KAAK;AACtB,aAAO,EAAE,QAAQ,IAAI;AAAA,IACvB;AAEA,QAAI,IAAI,WAAW,KAAK;AACtB,aAAO,EAAE,QAAQ,IAAI;AAAA,IACvB;AAEA,QAAI,IAAI,WAAW,KAAK;AACtB,UAAI,KAAK,eAAe,IAAI,IAAI,GAAG;AACjC,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,UAAU,IAAI;AAAA,QAChB;AAAA,MACF;AAEA,YAAM,SAAS,IAAI;AACnB,UAAI,QAAQ,iBAAiB,YAAY,QAAQ,SAAS,kBAAkB;AAC1E,cAAM,SAAS,OAAO,QAAQ,CAAC;AAC/B,cAAM,oBAAoB,QAAQ,UAAU;AAC5C,cAAM,WAAW,QAAQ;AACzB,cAAM,UAAU,QAAQ,UAAU;AAClC,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM,IAAI;AAAA,MACZ;AAAA,IACF;AAEA,WAAO;AAAA,MACL,QAAQ,IAAI;AAAA,MACZ,MAAM,IAAI;AAAA,IACZ;AAAA,EACF;AAAA,EAEQ,WAAW,SAAiC,MAAkC;AACpF,UAAM,SAAS,QAAQ,IAAI;AAC3B,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,KAAK,YAAY;AAC/B,UAAM,MAAM,OAAO,KAAK,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,MAAM,KAAK;AACtE,WAAO,MAAM,QAAQ,GAAG,IAAI;AAAA,EAC9B;AAAA,EAEQ,gBAAgB,iBAA6C;AACnE,UAAM,WAAW,gBAAgB,MAAM,GAAG,EAAE,OAAO,OAAO;AAC1D,UAAM,gBAAgB,SAAS,YAAY,WAAW;AACtD,QAAI,gBAAgB,KAAK,gBAAgB,KAAK,SAAS,QAAQ;AAC7D,aAAO;AAAA,IACT;AAEA,WAAO,SAAS,gBAAgB,CAAC;AAAA,EACnC;AAAA,EAEQ,uBAAuB,MAAsB;AACnD,UAAM,YAAY,KAAK,SAAS,GAAG,IAAI,MAAM;AAC7C,WAAO,GAAG,IAAI,GAAG,SAAS,iBAAiB,mBAAmB,yBAAyB,CAAC;AAAA,EAC1F;AAAA,EAEQ,eAAe,MAA8C;AACnE,QAAI,QAAQ,QAAQ,OAAO,SAAS,UAAU;AAC5C,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ;AACd,WACE,OAAO,MAAM,oBAAoB,YACjC,OAAO,MAAM,YAAY,YACzB,OAAO,MAAM,wBAAwB,aACrC,MAAM,QAAQ,MAAM,MAAM,KAC1B,MAAM,QAAQ,MAAM,KAAK;AAAA,EAE7B;AACF;AAeA,SAAS,wBAAwB,SAAgE;AAC/F,SACE,iBAAiB,WAChB,eAAe,eAAW,YAAAC,UAAa,QAAQ,SAAS,KACxD,iBAAiB,WAAW,QAAQ,aAAa,MAAM,GAAG,EAAE,WAAW,KACxE,eAAe,WACd,aAAa,WAAW,QAAQ,QAAQ,WAAW,KAAK,KACzD,UAAU,WACV,iBAAiB;AAErB;AAEA,SAAS,wBAAwB,MAAwD;AACvF,MAAI,SAAS,kBAAkB,SAAS,cAAc;AACpD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAKA,SAAS,iBAAiB,WAAmD;AAC3E,MAAI;AAEF,UAAM,cAAc,UAAU,MAAM,yBAAyB;AAC7D,UAAM,SAAS,cAAc,SAAS,YAAY,CAAC,GAAG,EAAE,IAAI;AAG5D,UAAM,cAAc,UAAU,MAAM,8BAA8B;AAClE,UAAM,SAAS,cAAc,YAAY,CAAC,IAAI;AAE9C,QAAI,WAAW,QAAQ,WAAW,MAAM;AACtC,aAAO;AAAA,IACT;AAEA,WAAO,EAAE,QAAQ,OAAO;AAAA,EAC1B,SAAS,MAAM;AACb,WAAO;AAAA,EACT;AACF;AAEA,SAAS,QACPD,eACA,aACA,aACA,MACA,aACiB;AACjB,SAAO,OACL,QACA,SACA,gBAC6B;AAM7B,QAAI,CAAC,gBAAgB,UAAU,IAAI,wBAAwB,QAAQ,OAAO;AAC1E,gCAAe,CAAC;AAChB,eAAW,cAAX,WAAW,gBAAc,YAAAE,IAAO;AAChC,UAAM,SAAS,YAAY;AAC3B,UAAM,SAAS,YAAY;AAC3B,UAAM,SAAS,YAAY,YAAY;AACvC,WAAO,MAAM,mBAAmB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,WAAW,YAAY;AAAA,IACzB,CAAC;AACD,UAAM,YAAY,OAAO,SAAS;AAClC,UAAM,cAAc,YAAY,eAAe,OAAO;AACtD,UAAM,YAAY,YAAY,aAAa,OAAO;AAClD,QAAI,YAAY;AAChB,QAAI,cAAc;AAClB,QAAI,CAAC,MAAM,QAAQ,cAAc,GAAG;AAClC,YAAM,CAAC,YAAY,UAAU,IAAI,gBAAgB,MAAM,cAAc;AACrE,kBAAY;AACZ,oBAAc;AAAA,IAChB;AACA,WAAO,MAAM,kCAAkC;AAAA,MAC7C;AAAA,MACA;AAAA,MACA,WAAW,YAAY;AAAA,IACzB,CAAC;AACD,gBAAY,UAAU,QAAQ,OAAO,EAAE;AACvC,UAAM,mBAAmBF,cAAa;AACtC,UAAM,cAAc,iBAAiB,SAAS,GAAG,IAAI,mBAAmB,mBAAmB;AAC3F,UAAM,MAAM,IAAI,IAAI,WAAW,WAAW;AAC1C,QAAI;AAEJ,QAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,aAAO,KAAK,UAAU,WAAW;AAAA,IACnC,WAAW,OAAO,KAAK,WAAW,EAAE,QAAQ;AAC1C,UAAI,WAAW,OAAO;AACpB,0BAAkB,aAAa,IAAI,YAAY;AAAA,MACjD,WAAW,YAAY,gBAAgB,qCAAqC;AAC1E,cAAMG,UAAS,IAAI,gBAAgB;AACnC,0BAAkB,aAAaA,OAAM;AACrC,eAAOA,QAAO,SAAS;AAAA,MACzB,OAAO;AACL,eAAO,KAAK,UAAU,WAAW;AAAA,MACnC;AAAA,IACF,OAAO;AAEL,UAAI,YAAY,gBAAgB,uCAAuC,WAAW,QAAQ;AACxF,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,MAAM,yBAAyB;AAAA,MACpC;AAAA,MACA;AAAA,MACA,WAAW,YAAY;AAAA,IACzB,CAAC;AAED,UAAM,eAAe,wBAAwB,WAAW;AAExD,UAAM,UAAkC,OAAO;AAAA,MAC7C,YACI;AAAA,QACE,uBAAuB;AAAA,QACvB,wBAAwB;AAAA,MAC1B,IACA,CAAC;AAAA,MACL;AAAA,QACE,gBAAgB,YAAY,eAAe;AAAA,MAC7C;AAAA,MACA,eAAe,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,MAC3C,cAAc,EAAE,eAAe,UAAU,WAAW,GAAG,IAAI,CAAC;AAAA,MAC5D,YAAY,UAAU,EAAE,YAAY,WAAW,QAAQ,IAAI,CAAC;AAAA,MAC5D,EAAE,wBAAwB,YAAY,UAAU;AAAA,IAClD;AACA,UAAM,cAAsC;AAAA,MAC1C,SAAS,OAAO,OAAO,WAAW;AAAA,MAClC,QAAQ,OAAO,OAAO,UAAU;AAAA,MAChC,OAAO,OAAO,OAAO,SAAS;AAAA,MAC9B,SAAS,OAAO,OAAO;AAAA;AAAA,MAEvB,SAAS,CAAC,GAAI,OAAO,OAAO,WAAW,CAAC,GAAI,GAAG,qBAAqB;AAAA,IACtE;AACA,gBAAY,QAAQ,KAAK,GAAG,qBAAqB;AACjD,WAAO,MAAM,YAAY;AACvB,aAAO,KAAK,iBAAiB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,WAAW,YAAY;AAAA,MACzB,CAAC;AACD,YAAM,MAAM,KAAK,IAAI;AACrB,YAAM,WAAW,MAAM;AAAA,QACrB,IAAI,QAAQ,KAAK;AAAA,UACf,QAAQ,OAAO,YAAY;AAAA,UAC3B;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO,KAAK,eAAe;AAAA,QACzB;AAAA,QACA;AAAA,QACA,UAAU,KAAK,IAAI,IAAI;AAAA,QACvB,WAAW,YAAY;AAAA,MACzB,CAAC;AACD,YAAM,eAAe,SAAS,OAAO,MAAM,SAAS,KAAK,IAAI;AAC7D,UAAI;AACJ,YAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,UAAI;AACF,YACE,iBACC,aAAa,SAAS,kBAAkB,KAAK,aAAa,SAAS,uBAAuB,IAC3F;AACA,iBAAO,KAAK,8BAA8B;AAAA,YACxC;AAAA,YACA;AAAA,YACA,WAAW,YAAY;AAAA,UACzB,CAAC;AACD,yBAAe,KAAK,MAAM,YAAY;AACtC,iBAAO,QAAQ,8BAA8B;AAAA,YAC3C;AAAA,YACA;AAAA,YACA,WAAW,YAAY;AAAA,UACzB,CAAC;AAAA,QACH,WAAW,iBAAiB,aAAa,SAAS,iBAAiB,KAAK,aAAa,SAAS,UAAU,IAAI;AAE1G,iBAAO,KAAK,6BAA6B;AAAA,YACvC;AAAA,YACA;AAAA,YACA,WAAW,YAAY;AAAA,UACzB,CAAC;AACD,yBAAe,iBAAiB,YAAY;AAC5C,iBAAO,QAAQ,6BAA6B;AAAA,YAC1C;AAAA,YACA;AAAA,YACA,WAAW,YAAY;AAAA,UACzB,CAAC;AAAA,QACH,OAAO;AACL,yBAAe;AAAA,QACjB;AAAA,MACF,SAAS,MAAM;AAEb,uBAAe;AAAA,MACjB;AACA,aAAO,MAAM,yBAAyB;AAAA,QACpC;AAAA,QACA;AAAA,QACA,WAAW,YAAY;AAAA,MACzB,CAAC;AACD,UAAI,YAAY,aAAa;AAC3B,cAAM,gBAAwC,CAAC;AAC/C,iBAAS,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACvC,wBAAc,GAAG,IAAI;AAAA,QACvB,CAAC;AACD,eAAO;AAAA,UACL,QAAQ,SAAS;AAAA,UACjB,SAAS;AAAA,UACT,MAAM,gBAAgB;AAAA,QACxB;AAAA,MACF;AACA,YAAM,UAAU,CAAC,SAAS,MAAM,SAAS,UAAU;AACnD,UAAI,SAAS;AACX,cAAM,SAAS;AAAA,UACb,UACG,OAAO,cAAc,WAAW,WAC7B,aAAa,SACZ,cAAc,QAAoC;AAAA,UACvD,cAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA,SAAS;AAAA;AAAA,UACX,MACG,cAAc,QAAoC;AAAA,UACnD,cAAc;AAAA,UACd,SAAS;AAAA;AAAA,UACX;AAAA,QACF;AACA,cAAM;AAAA,MACR;AACA,aAAO;AAAA,IACT,GAAG,WAAW;AAAA,EAChB;AACF;AAOA,eAAe,MAAS,MAAuC,QAA4C;AACzG,MAAI;AACJ,aAAW,WAAW,MAAM,KAAK,EAAE,SAAS,OAAO,WAAW,KAAK,EAAE,GAAG,CAAC,GAAG,UAAU,KAAK,GAAG;AAC5F,QAAI;AACF,aAAO,MAAM,KAAK,OAAO;AAAA,IAC3B,SAAS,GAAQ;AACf,UAAI,cAAc;AAClB,UAAI,cAAc,GAAG;AAEnB,cAAM,MAAM;AACZ,sBAAc,OAAO,QAAQ,SAAS,IAAI,IAAI;AAE9C,kBAAU,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,KAAK;AAAA,MAC/C,OAAO;AACL,kBAAU;AAEV,YAAI,UAAU,KAAK,OAAO,EAAE,SAAS,UAAU;AAC7C,gBAAM,MAAM;AACZ,wBAAc,qBAAqB,SAAS,IAAI,IAAI;AAAA,QACtD;AAAA,MACF;AACA,UAAI,CAAC,aAAa;AAChB;AAAA,MACF;AACA,YAAM,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,SAAS,EAAE;AAC7D,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,OAAO,QAAQ,MAAM,CAAC;AACzE,UAAI,OAAO,WAAW,aAAa,OAAO,WAAW,IAAI;AACvD,eAAO,QAAQ,UAAU,CAAC;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AACA,QAAM;AACR;AAWA,SAAS,gBAAgB,MAAc,QAAmE;AACxG,QAAM,eAAe,EAAE,GAAG,OAAO;AAEjC,QAAM,aAAa,KAAK,QAAQ,gBAAgB,CAAC,GAAG,cAAc;AAChE,WAAO,aAAa,SAAS;AAE7B,QAAI,UAAU,MAAM,QAAQ,GAAG;AAC7B,aAAO,OAAO,SAAS,IAAI;AAAA,IAC7B;AAEA,QAAI,CAAC,OAAO,SAAS,KAAK,OAAO,SAAS,MAAM,IAAI;AAClD,YAAM,IAAI,gBAAgB,EAAE,SAAS,+CAA+C,SAAS,IAAI,MAAM,IAAI,CAAC;AAAA,IAC9G;AAEA,QAAI,OAAO,SAAS,GAAG;AACrB,aAAO,mBAAmB,OAAO,SAAS,IAAI,EAAE;AAAA,IAClD;AACA,WAAO;AAAA,EACT,CAAC;AAED,QAAM,aAAa,OAAO,KAAK,YAAY;AAC3C,QAAM,aAAa,WAAW,SAC1B,WAAW,OAAO,CAAC,KAAK,SAAS,EAAE,GAAG,KAAK,CAAC,GAAG,GAAG,aAAa,GAAG,EAAE,IAAI,CAAC,CAAC,IAC1E,CAAC;AACL,SAAO,CAAC,YAAY,UAAU;AAChC;AAOO,SAAS,kBAAkB,QAAiCA,SAA+B;AAChG,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,CAAC,MAAM,MAAM,QAAQ,MAAM,UAAaA,QAAO,OAAO,KAAK,CAAW,CAAC;AACrF;AAAA,IACF;AACA,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,MAAAA,QAAO,OAAO,KAAK,KAAe;AAAA,IACpC;AAAA,EACF;AACF;AAEO,SAAS,wBACd,QACA,SAC8D;AAC9D,QAAM,iBACJ,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,QAAQ,MAAM,KAAK,wBAAwB,MAAM,IAC5E,CAAC,IACA,UAAsC,CAAC;AAC9C,QAAM,aACJ,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,QAAQ,MAAM,KAAK,wBAAwB,MAAM,IAC3E,SACD;AACN,SAAO,CAAC,gBAAgB,UAAU;AACpC;;;AE/nBA;AAsBO,IAAM,cAAN,cAA0B,YAAY;AAAA,EAC3C,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,KAAK,SAAkE;AACrE,WAAO,KAAK,QAAQ,gBAAgB,OAAO,sBAAK,yCAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EACnF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAiC,SAAoE;AAC1G,WAAO,KAAK,QAAQ,gBAAgB,QAAQ,sBAAK,yCAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAA8B,SAAiE;AACjG,WAAO,KAAK,QAAQ,qBAAqB,OAAO,sBAAK,yCAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAiC,SAAoE;AAC1G,WAAO,KAAK,QAAQ,qBAAqB,SAAS,sBAAK,yCAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAiC,SAA+C;AACrF,WAAO,KAAK,QAAQ,qBAAqB,UAAU,sBAAK,yCAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aACE,QACA,SAC0C;AAC1C,WAAO,KAAK,QAAQ,mCAAmC,QAAQ,sBAAK,yCAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,mBACE,QACA,SACgD;AAChD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,yCAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBACE,QACA,SAC+C;AAC/C,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,yCAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AACF;AAhGO;AAIL,kBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;AC5BF,uBAAAC;AAMO,IAAM,SAAN,cAAqB,YAAY;AAAA,EACtC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,QAA2B,SAA+C;AAC9E,WAAO,KAAK,QAAQ,yBAAyB,QAAQ,sBAAK,mBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACrG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAO,QAA4B,SAA+D;AAChG,WAAO,KAAK,QAAQ,0BAA0B,QAAQ,sBAAK,mBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACtG;AACF;AAnCO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACTK,IAAM,6BAA6B;AACnC,IAAM,sCAAsC;AACnD,IAAM,6BAA6B;AAEnC,SAAS,cAAc,WAAiE;AACtF,SAAO,OAAO,OAAO,WAA0B,gBAAgB;AACjE;AAOO,SAAS,+BAA+B,WAA2D;AACxG,MAAI,cAAc,SAAS,GAAG;AAC5B,UAAM,iBAAiB,UAAU,gBAAgB;AAAA,MAC/C,CAAC,OAAO,GAAG,aAAa,WAAW;AAAA,IACrC;AACA,WAAO,gBAAgB;AAAA,EACzB;AACA,MAAI,CAAC,UAAU,UAAW;AAC1B,QAAM,0BAA0B,UAAU,UAAU,KAAK,CAAC,cAAc,UAAU,QAAQ,0BAA0B;AACpH,MAAI,CAAC,yBAAyB,UAAW;AACzC,QAAM,iBAAiB,wBAAwB,WAAW;AAAA,IACxD,CAAC,cAAc,UAAU,QAAQ;AAAA,EACnC,GAAG;AACH,SAAO;AACT;;;AC9BA,6BAAAC;AAeO,IAAM,eAAN,cAA2B,YAAY;AAAA,EAC5C,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAOL,sCAAiC;AACjC,+CAA0C;AAM1C;AAAA;AAAA;AAAA;AAAA;AAAA,0CAAqC;AAAA,EAXrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,OAAO,QAAkC,SAAqE;AAC5G,WAAO,KAAK,QAAQ,2BAA2B,QAAQ,sBAAK,yBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,SAAuE;AAC9E,WAAO,KAAK,QAAQ,iCAAiC,OAAO,sBAAK,yBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,eAAe,QAA0C,SAA+C;AACtG,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,yBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,kBAAkB,QAA6C,SAA+C;AAC5G,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,yBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,QAAmC,SAA+C;AACxF,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,yBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AACF;AAtFO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACrBF,0BAAAC;AAkBO,IAAM,YAAN,cAAwB,YAAY;AAAA,EACzC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,QAA4B,SAA+D;AAC7F,WAAO,KAAK,QAAQ,mBAAmB,OAAO,sBAAK,sBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA+B,SAAkE;AACtG,WAAO,KAAK,QAAQ,mBAAmB,SAAS,sBAAK,sBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA+B,SAA+C;AACnF,WAAO,KAAK,QAAQ,mBAAmB,UAAU,sBAAK,sBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA+B,SAAkE;AACtG,WAAO,KAAK,QAAQ,qBAAqB,QAAQ,sBAAK,sBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAK,SAAgE;AACnE,WAAO,KAAK,QAAQ,cAAc,OAAO,sBAAK,sBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,OACE,QACA,SACkC;AAClC,WAAO,KAAK,QAAQ,sBAAsB,OAAO,sBAAK,sBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACjG;AACF;AAhFO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACxBF,oBAAAC;AAkCO,IAAM,MAAN,cAAkB,YAAY;AAAA,EACnC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,gBACE,QACA,SACqC;AACrC,WAAO,KAAK,QAAQ,aAAa,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBACE,QACA,SACuC;AACvC,WAAO,KAAK,QAAQ,eAAe,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,cACE,QACA,SACmC;AACnC,WAAO,KAAK,QAAQ,uBAAuB,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,iBAAiB,SAAsE;AACrF,WAAO,KAAK,QAAQ,WAAW,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,yBACE,QACA,SAC8C;AAC9C,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,gBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,4BACE,QACA,SACiD;AACjD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,gBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,0BACE,QACA,SAC+C;AAC/C,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,gBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBACE,QACA,SAC0C;AAC1C,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,gBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,QAAqC,SAA+C;AACrG,WAAO,KAAK,QAAQ,mCAAmC,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC/G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,QAAqC,SAA+C;AACrG,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,gBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,QAA8B,SAA+C;AACvF,WAAO,KAAK,QAAQ,6BAA6B,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,iBACE,QACA,SACsC;AACtC,WAAO,KAAK,QAAQ,aAAa,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,oBACE,QACA,SACyC;AACzC,WAAO,KAAK,QAAQ,yBAAyB,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,4BACE,QACA,SACiD;AACjD,WAAO,KAAK,QAAQ,kCAAkC,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,QAAqC,SAA+C;AACrG,WAAO,KAAK,QAAQ,kCAAkC,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB,QAAuC,SAA+C;AACzG,WAAO,KAAK,QAAQ,kCAAkC,UAAU,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAChH;AACF;AAnOO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,WAAW,KAAK;AAChD;;;ACxCF,oBAAAC;AAYO,IAAM,MAAN,cAAkB,YAAY;AAAA,EACnC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,SAAS,SAA+C;AACtD,WAAO,KAAK,QAAQ,aAAa,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,SAA6D;AACnE,WAAO,KAAK,QAAQ,YAAY,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,SAAsE;AACrF,WAAO,KAAK,QAAQ,WAAW,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,KAAK,QAAuB,SAA0D;AACpF,WAAO,KAAK,QAAQ,SAAS,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACrF;AACF;AA/CO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,WAAW,KAAK;AAChD;;;ACmBF,IAAM,iBAAiB;AACvB,SAAS,eAAe,OAAuB;AAC7C,QAAM,OAAO,IAAI,WAAW,YAAY,EAAE,OAAO,KAAK;AACtD,MAAI,SAAS;AAEb,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,gBAAgB;AAChE,UAAM,QAAQ,KAAK,SAAS,OAAO,QAAQ,cAAc;AAEzD,cAAU,WAAW,KAAK,OAAO,cAAc,MAAM,QAAW,KAA4B,CAAC;AAAA,EAC/F;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAAuB;AAC7C,QAAM,eAAe,WAAW,KAAK,KAAK;AAC1C,QAAM,QAAQ,IAAI,WAAW,aAAa,MAAM;AAChD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC5C,UAAM,CAAC,IAAI,aAAa,WAAW,CAAC;AAAA,EACtC;AACA,SAAO,IAAI,WAAW,YAAY,EAAE,OAAO,KAAK;AAClD;AAKA,SAAS,iBAAiB,QAAwB;AAChD,SAAO,OAAO,SAAS,GAAG,OAAO,MAAM,IAAI,OAAO,QAAQ,EAAE,KAAK,OAAO,QAAQ;AAClF;AAGA,SAAS,cAAc,GAAW,GAAoB;AACpD,UAAQ,EAAE,UAAU,SAAS,EAAE,UAAU,QAAQ,EAAE,QAAQ,SAAS,EAAE,QAAQ;AAChF;AAMA,SAAS,qBAAqB,QAAuB,QAAkD;AACrG,QAAM,MAAqB,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC;AACnD,MAAI,OAAO,cAAc;AACvB,QAAI,KAAK,EAAE,MAAM,QAAQ,OAAO,iBAAiB,OAAO,YAAY,EAAE,CAAC;AAAA,EACzE,WAAW,OAAO,YAAY,QAAQ;AACpC,eAAW,OAAO,OAAO,YAAY;AACnC,UAAI,KAAK,EAAE,MAAM,YAAY,OAAO,iBAAiB,GAAG,EAAE,CAAC;AAAA,IAC7D;AAAA,EACF;AACA,SAAO;AACT;AAOA,SAAS,mBAA2C,QAAuB,UAAgB;AACzF,QAAM,eAAe;AAErB,MAAI,OAAO,YAAY,QAAQ;AAC7B,UAAM,eAAgB,aAAa,MAAM,OAAO,CAAC;AACjD,eAAW,WAAW,OAAO,YAAY;AACvC,UAAI,aAAa,KAAK,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG;AACvD,cAAM,IAAI,gBAAgB;AAAA,UACxB,SAAS,yCAAyC,QAAQ,UAAU,EAAE,aACpE,QAAQ,QAAQ,EAClB;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,cAAc;AACvB,UAAM,MAAM,OAAO;AACnB,UAAM,eAAgB,aAAa,MAAM,OAAO,CAAC;AACjD,QAAI,CAAC,aAAa,KAAK,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG;AACpD,aAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM;AAAA,UACJ,GAAG,aAAa;AAAA,UAChB,KAAK,CAAC,GAAG,cAAc,GAAG;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAUA,SAAS,0BAA0B,QAAuB,YAAsC;AAC9F,MAAI,OAAO,YAAY,QAAQ;AAC7B,eAAW,MAAM,YAAY;AAC3B,UAAI,GAAG,OAAO,SAAS,GAAG,OAAO,aAAa,GAAG,OAAO,QAAQ;AAC9D,cAAM,UAAmB,GAAG;AAC5B,YAAI,YAAY,QAAQ,YAAY,UAAa,OAAO,YAAY,UAAU;AAC5E,gBAAM,IAAI;AACV,cAAI,EAAE,SAAS,QAAW;AACxB,uBAAW,WAAW,OAAO,YAAY;AACvC,kBAAI,cAAc,GAAG,OAAO,GAAG;AAC7B,sBAAM,IAAI,gBAAgB;AAAA,kBACxB,SAAS,qDAAqD,QAAQ,UAAU,EAAE,aAChF,QAAQ,QAAQ,EAClB;AAAA,kBACA,MAAM;AAAA,gBACR,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,cAAc;AACvB,UAAM,MAAM,OAAO;AACnB,WAAO,WAAW,OAAoB,CAAC,QAAQ,OAAO;AAEpD,UAAI,GAAG,OAAO,YAAY,GAAG,SAAS,aAAa;AACjD,eAAO,KAAK,EAAE;AACd,eAAO,KAAK,EAAE,IAAI,OAAgB,MAAM,aAAa,OAAO,CAAC,GAAG,EAAE,CAAC;AACnE,eAAO;AAAA,MACT;AAGA,UAAI,GAAG,OAAO,YAAY,GAAG,SAAS,SAAS;AAC7C,eAAO,KAAK,EAAE;AACd,eAAO,KAAK,EAAE,IAAI,OAAgB,MAAM,SAAS,OAAO,EAAE,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AACxE,eAAO;AAAA,MACT;AAGA,WAAK,GAAG,OAAO,SAAS,GAAG,OAAO,cAAc,GAAG,SAAS,aAAa;AACvE,cAAM,OAAiB,MAAM,QAAQ,GAAG,KAAK,IAAK,GAAG,QAAqB,CAAC;AAC3E,YAAI,CAAC,KAAK,KAAK,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG;AAC5C,iBAAO,KAAK,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;AAAA,QAC9C,OAAO;AACL,iBAAO,KAAK,EAAE;AAAA,QAChB;AACA,eAAO;AAAA,MACT;AAGA,WAAK,GAAG,OAAO,SAAS,GAAG,OAAO,cAAc,GAAG,SAAS,SAAS;AACnE,cAAM,YACJ,GAAG,SAAS,QAAQ,OAAO,GAAG,UAAU,WAAY,GAAG,QAA+B,CAAC;AACzF,cAAM,OAAO,UAAU,OAAO,CAAC;AAC/B,YAAI,CAAC,KAAK,KAAK,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG;AAC5C,iBAAO,KAAK,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,WAAW,KAAK,CAAC,GAAG,MAAM,GAAG,EAAE,EAAE,CAAC;AAAA,QACrE,OAAO;AACL,iBAAO,KAAK,EAAE;AAAA,QAChB;AACA,eAAO;AAAA,MACT;AAIA,aAAO,KAAK,EAAE;AACd,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AAEA,SAAO;AACT;AAOA,SAAS,wBAAwB,QAAuB,UAA8B;AACpF,QAAM,eAAe;AACrB,QAAM,eAAgB,aAAa,MAAM,OAAO,CAAC;AAEjD,MAAI,OAAO,cAAc;AACvB,UAAM,MAAM,OAAO;AACnB,QAAI,CAAC,aAAa,KAAK,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG;AACpD,YAAM,IAAI,iBAAiB;AAAA,QACzB,OAAO;AAAA,UACL,cAAc;AAAA,UACd,IAAI;AAAA,UACJ,OAAO,CAAC,EAAE,UAAU,SAAS,MAAM,aAAa,SAAS,EAAE,MAAM,YAAY,EAAE,CAAC;AAAA,QAClF;AAAA,QACA,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA;AAAA,EACF;AAEA,MAAI,OAAO,YAAY,QAAQ;AAC7B,eAAW,WAAW,OAAO,YAAY;AACvC,UAAI,aAAa,KAAK,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG;AACvD,cAAM,IAAI,iBAAiB;AAAA,UACzB,OAAO;AAAA,YACL,cAAc;AAAA,YACd,IAAI;AAAA,YACJ,OAAO,CAAC,EAAE,UAAU,SAAS,MAAM,aAAa,SAAS,EAAE,MAAM,YAAY,EAAE,CAAC;AAAA,UAClF;AAAA,UACA,MAAM;AAAA,QACR,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAmBA,SAAS,mBAAmB,MAA+E;AACzG,SAAO,SAAS,kBAAkB,SAAS;AAC7C;AAmBA,eAAsB,OAEpB,QACA,SAC8D;AAC9D,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,eAAe,qBAAqB,KAAK,QAAQ,OAAO,MAAM;AACpE,MAAI;AACJ,MAAI,aAAa,QAAQ;AACvB,eAAW,aAAa,OAAO,CAAC,KAAK,UAAU;AAC7C,UAAI,CAAC,IAAI,MAAM,IAAI,GAAG;AACpB,YAAI,MAAM,IAAI,IAAI,CAAC;AAAA,MACrB;AACA,UAAI,MAAM,IAAI,EAAE,KAAK,MAAM,KAAK;AAChC,aAAO;AAAA,IACT,GAAG,CAAC,CAAwC;AAAA,EAC9C;AAEA,QAAM,cAAc,SAAS;AAC7B,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK,cAAc,IAAI,YAAY,YAAY,QAAQ,YAAY,CAAC,GAAG,aAAa;AAAA,MAC/F,GAAG;AAAA,MACH,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AAEA,QAAM,gBAAgB,MAAM,KAAK,YAA2B,IAAI,YAAY,YAAY,MAAM,EAAE,UAAU;AAAA,IACxG,GAAG;AAAA,IACH,aAAa;AAAA,EACf,CAAC;AACD,QAAM,SAAoB;AAAA,IACxB,GAAG;AAAA,IACH,OAAO,cAAc;AAAA,IACrB,UAAU,WAA+D;AACvE,aACE,KAAK,OAAO,IAAI,CAAC,UAAU,MAAM,QAAQ,EAAE,OAAO,CAAC,aAA4B,aAAa,MAAS,KAAK,CAAC;AAAA,IAE/G;AAAA,EACF;AACA,SAAO;AACT;AAYA,eAAsB,OAEpB,QACA,SAC+E;AAC/E,QAAM,SAAS,mBAAmB,KAAK,QAAQ,MAAM;AACrD,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,cAAc,SAAS;AAC7B,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB,IAAI,YAAY;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,YAAwC,IAAI,YAAY,IAAI,MAAM;AAAA,IAClF;AAAA,IACA;AAAA,EACF;AACF;AAYA,eAAsB,IAEpB,EAAE,cAAc,GAAG,GACnB,SAC+E;AAC/E,QAAM,cAAc,SAAS;AAC7B,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK,cAAc,IAAI,YAAY,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,aAAa,OAAO;AAAA,EAC3F;AAEA,QAAM,SAAS,MAAM,KAAK,YAAwC,IAAI,YAAY,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC,GAAG,OAAO;AAC9G,0BAAwB,KAAK,QAAQ,MAAM;AAC3C,SAAO;AACT;AAYA,eAAsB,OAEpB,QACA,SAC+E;AAC/E,QAAM,SAAS,mBAAmB,KAAK,QAAQ,MAAM;AACrD,QAAM,EAAE,IAAI,aAAa,IAAI;AAC7B,QAAM,cAAc,SAAS;AAC7B,QAAM,iBAAiB;AAAA,IACrB,GAAG;AAAA,IACH,SAAS,SAAS,6BAA6B,MAAM,QAAQ,0BAA0B,MAAM;AAAA,EAC/F;AAEA,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB,IAAI,YAAY,IAAI,EAAE;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,YAAwC,IAAI,YAAY,IAAI,EAAE,IAAI,KAAK;AAAA,IACvF;AAAA,IACA;AAAA,EACF;AACF;AAYA,eAAsB,MAEpB,EAAE,cAAc,IAAI,WAAW,GAC/B,SAC+E;AAC/E,QAAM,mBAAmB,0BAA0B,KAAK,QAAQ,UAAU;AAC1E,QAAM,cAAc,SAAS;AAC7B,QAAM,iBAAiB;AAAA,IACrB,GAAG;AAAA,IACH,SAAS,SAAS,6BAA6B,MAAM,QAAQ,0BAA0B,MAAM;AAAA,EAC/F;AAEA,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK;AAAA,MAChB,IAAI,YAAY,IAAI,EAAE;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,GAAG;AAAA,QACH,aAAa;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAEA,SAAO,KAAK,YAAwC,IAAI,YAAY,IAAI,EAAE,IAAI,OAAO,EAAE,kBAAkB;AAAA,IACvG,GAAG;AAAA,IACH,aAAa;AAAA,EACf,CAAC;AACH;AAYA,eAAe,IAEb,EAAE,cAAc,GAAG,GACnB,SAC+E;AAC/E,QAAM,cAAc,SAAS;AAC7B,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK,cAAc,IAAI,YAAY,IAAI,EAAE,IAAI,UAAU,CAAC,GAAG,aAAa,OAAO;AAAA,EAC9F;AAEA,SAAO,MAAM,KAAK,YAAwC,IAAI,YAAY,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC,GAAG,OAAO;AAC3G;AAGA,SAAS,gBAAgB,YAAgC,YAA4B;AACnF,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,OAAO,UAAU;AACnC,MAAI,OAAO,SAAS,SAAS,KAAK,aAAa,GAAG;AAChD,WAAO,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,GAAI,CAAC;AAAA,EACjD;AAEA,QAAM,cAAc,KAAK,MAAM,UAAU;AACzC,MAAI,OAAO,SAAS,WAAW,GAAG;AAChC,WAAO,KAAK,IAAI,GAAG,cAAc,KAAK,IAAI,CAAC;AAAA,EAC7C;AAEA,SAAO;AACT;AAEA,eAAsB,YAEpB,OACA,SACgC;AAChC,SAAO,MAAM,KAAK,oBAAuB,OAAO,OAAO;AACzD;AAEA,eAAsB,gBAEpB,OACA,SACA,SACgC;AAEhC,QAAM,iBAAiB,SAAS,kBAAkB;AAElD,QAAM,YAAY,SAAS,aAAa;AACxC,QAAM,WAAW,KAAK,IAAI,GAAG,KAAK,KAAK,YAAY,cAAc,CAAC;AAElE,WAAS,UAAU,GAAG,UAAU,UAAU,WAAW;AACnD,UAAM,SAAS,MAAM,KAAK,oBAAuB,OAAO,OAAO;AAC/D,QAAI,OAAO,WAAW,KAAK;AACzB,aAAO;AAAA,IACT;AAEA,QAAI,UAAU,WAAW,GAAG;AAC1B,YAAM,aAAa,gBAAgB,SAAS,OAAO,aAAa;AAChE,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,gBAAgB,YAAY,cAAc,CAAC,CAAC;AAAA,IACjG;AAAA,EACF;AAEA,QAAM,IAAI,gBAAgB;AAAA,IACxB,SAAS,aAAa,KAAK,4BAA4B,SAAS;AAAA,IAChE,MAAM;AAAA,EACR,CAAC;AACH;AAEA,eAAsB,eAAkC,OAAe,SAA+C;AACpH,QAAM,KAAK,YAAY,cAAc,KAAK,IAAI,QAAQ,EAAE,CAAC,GAAG,OAAO;AACrE;AA4BA,eAAsB,QAEpB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACA,SACuF;AACvF,QAAM,cAAc,SAAS;AAC7B,MAAI,mBAAmB,WAAW,GAAG;AACnC,QAAI,WAAW;AACb,aAAO,MAAM,KAAK,cAAc,IAAI,YAAY,IAAI,EAAE,aAAa,SAAS,IAAI,OAAO,CAAC,GAAG,aAAa,OAAO;AAAA,IACjH;AACA,WAAO,MAAM,KAAK,cAAc,IAAI,YAAY,IAAI,EAAE,aAAa,OAAO,CAAC,GAAG,aAAa,OAAO;AAAA,EACpG;AAEA,MAAI,WAAW;AACb,WAAO,KAAK,YAAe,IAAI,YAAY,IAAI,EAAE,aAAa,SAAS,IAAI,KAAK,EAAE,CAAC,GAAG,OAAO;AAAA,EAC/F;AACA,MAAI,OAAO;AACT,WAAO,KAAK;AAAA,MACV,IAAI,YAAY,IAAI,EAAE,oCAAoC,KAAK;AAAA,QAC7D,SAAS,YAAY,MAAM,KAAK,EAAE;AAAA,MACpC;AAAA,IACF,EAAE,CAAC,GAAG,OAAO;AAAA,EACf;AACA,SAAO,KAAK,YAAuB,IAAI,YAAY,IAAI,EAAE,6BAA6B,KAAK,EAAE,CAAC,GAAG,OAAO;AAC1G;AAQA,SAAS,iBAAiB,KAAsB;AAC9C,QAAM,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC;AAC7B,QAAM,WAAW,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAE/C,MAAI,SAAS,UAAU,EAAG,QAAO;AAEjC,SAAO,SAAS,CAAC,EAAE,WAAW,GAAG;AACnC;AAGA,SAAS,qBAAqB,KAAsB;AAClD,SAAO,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,SAAS,UAAU;AAC9C;AAEA,SAAS,mCACP,SACA,QAC4B;AAC5B,QAAM,EAAE,OAAO,IAAI;AACnB,MAAI,MAAM,QAAQ;AAKlB,OACI,WAAW,SAAS,WAAW,WAAW,iBAAiB,GAAG,KAC/D,WAAW,UAAU,qBAAqB,GAAG,GAC9C;AACA,QAAI,OAAO,cAAc;AACvB,cAAQ,IAAI,SAAS,GAAG,IAAI,MAAM,OAAO,QAAQ,iBAAiB,OAAO,YAAY,CAAC;AAAA,IACxF;AACA,QAAI,OAAO,YAAY,QAAQ;AAC7B,iBAAW,OAAO,OAAO,YAAY;AACnC,gBAAQ,IAAI,SAAS,GAAG,IAAI,MAAM,OAAO,YAAY,iBAAiB,GAAG,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc;AAAA,IAClB,SAAS;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAGA,MAAI,IAAI,MAAM,GAAG,EAAE,SAAS,GAAG;AAC7B,UAAM,CAAC,UAAU,KAAK,IAAI,IAAI,MAAM,GAAG;AACvC,UAAM,SAAS,MACZ,MAAM,GAAG,EACT,IAAI,CAAC,UAAU;AACd,YAAM,CAAC,MAAM,KAAK,IAAI,MAAM,MAAM,GAAG;AACrC,aAAO,EAAE,MAAM,MAAM;AAAA,IACvB,CAAC,EACA,OAAO,CAAC,KAAK,EAAE,MAAM,MAAM,MAAM;AAChC,UAAI,CAAC,MAAM;AACT,eAAO;AAAA,MACT;AACA,UAAI,CAAC,IAAI,IAAI,GAAG;AACd,YAAI,IAAI,IAAI,CAAC;AAAA,MACf;AACA,UAAI,IAAI,EAAE,KAAK,KAAK;AACpB,aAAO;AAAA,IACT,GAAG,CAAC,CAA6B;AACnC,UAAMC,UAAS,IAAI,gBAAgB;AACnC,sBAAkB,QAAQA,OAAM;AAChC,gBAAY,QAAQ,MAAM,GAAG,QAAQ,IAAIA,QAAO,SAAS,CAAC;AAAA,EAC5D;AAGA,MAAI,CAAC,OAAO,UAAU,MAAM,EAAE,SAAS,MAAM,GAAG;AAC9C,WAAO;AAAA,EACT;AAGA,MAAI,WAAW,OAAO;AACpB,UAAM,WAAW,mBAAmB,QAAQ,QAAQ,QAAQ;AAC5D,WAAO;AAAA,MACL,SAAS;AAAA,QACP,GAAG,YAAY;AAAA,QACf,SAAS,QAAQ;AAAA,MACnB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAGA,MAAI,WAAW,SAAS;AACtB,QAAI,cAAc,SAAS;AAEzB,UAAI,gBAAgB,QAAQ;AAC5B,YAAM,aAAa,cAAc;AACjC,UAAI,YAAY;AACd,cAAMC,cAAa,KAAK,MAAM,eAAe,UAAU,CAAC;AACxD,cAAM,mBAAmB,0BAA0B,QAAQA,WAAU;AACrE,wBAAgB,EAAE,GAAG,eAAe,MAAM,eAAe,KAAK,UAAU,gBAAgB,CAAC,EAAE;AAAA,MAC7F;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,GAAG,YAAY;AAAA,UACf,SAAS,QAAQ;AAAA,QACnB;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AACA,UAAM,aAAa,0BAA0B,QAAQ,QAAQ,UAAU;AACvE,UAAM,OAAO,eAAe,KAAK,UAAU,UAAU,CAAC;AACtD,WAAO;AAAA,MACL,GAAG;AAAA,MACH,UAAU;AAAA,QACR,cAAc;AAAA,QACd,aAAa;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,WAAW,UAAU,qBAAqB,GAAG,GAAG;AAClD,WAAO;AAAA,EACT;AAGA,MAAI,WAAW,UAAU,cAAc,SAAS;AAC9C,UAAM,WAAW,mBAAmB,QAAQ,QAAQ,QAAQ;AAC5D,UAAM,EAAE,QAAQ,IAAI;AACpB,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAUA,QAAM,IAAI,MAAM,qBAAqB;AACvC;AAYA,eAAsB,MAEpB,OACA,SACmF;AACnF,QAAM,iBAAiB;AAAA,IACrB,cAAc;AAAA,IACd,MAAM;AAAA,IACN,OAAO,MAAM,SAAS,IAAI,CAAC,QAAQ,mCAAmC,KAAK,KAAK,MAAM,CAAC;AAAA,EACzF;AACA,QAAM,cAAc,SAAS;AAC7B,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK,cAAc,KAAK,QAAQ,gBAAgB,aAAa,OAAO;AAAA,EACnF;AAEA,QAAM,OAAO,MAAM,KAAK,YAA4C,KAAK,MAAM,EAAE,gBAAgB,OAAO;AAGxG,QAAM,aAAa,KAAK;AACxB,QAAM,mBACJ,KAAK,OAAO,gBAAgB,KAAK,OAAO,YAAY,SAChD,YAAY,IAAI,CAAC,OAAO,MAAM;AAC5B,UAAM,MAAM,MAAM,SAAS,CAAC;AAC5B,QAAI,CAAC,OAAO,CAAC,OAAO,SAAU,QAAO;AACrC,SAAK,IAAI,WAAW,SAAS,IAAI,WAAW,WAAW,CAAC,iBAAiB,IAAI,GAAG,GAAG;AACjF,UAAI;AACF,gCAAwB,KAAK,QAAQ,MAAM,QAAQ;AAAA,MACrD,SAAS,KAAK;AACZ,YAAI,EAAE,eAAe,kBAAmB,OAAM;AAC9C,eAAO;AAAA,UACL,SAAS,MAAM;AAAA,UACf,UAAU,EAAE,QAAQ,OAAO,SAAS,IAAI,MAAM;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC,IACD;AACN,QAAM,SAAyC;AAAA,IAC7C,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU,WAA+E;AACvF,aACE,KAAK,OACD,IAAI,CAAC,UAAU,MAAM,QAAQ,EAC9B,OAAO,CAAC,aAA4C,aAAa,MAAS,KAAK,CAAC;AAAA,IAEvF;AAAA,IACA,QAAQ,WAA+E;AACrF,aAAO,KAAK,OACR,OAAO,CAAC,UAAU,MAAM,UAAU,QAAQ,WAAW,GAAG,KAAK,MAAM,UAAU,QAAQ,WAAW,GAAG,CAAC,EACrG,IAAI,CAAC,UAAU,MAAM,UAAU,OAAO,EACtC,OAAO,CAAC,YAAyC,YAAY,MAAS;AAAA,IAC3E;AAAA,EACF;AACA,SAAO;AACT;AAYA,eAAsB,YAEpB,OACA,SACyF;AACzF,QAAM,iBAAiB;AAAA,IACrB,cAAc;AAAA,IACd,MAAM;AAAA,IACN,OAAO,MAAM,SAAS,IAAI,CAAC,QAAQ,mCAAmC,KAAK,KAAK,MAAM,CAAC;AAAA,EACzF;AACA,QAAM,cAAc,SAAS;AAC7B,MAAI,mBAAmB,WAAW,GAAG;AACnC,WAAO,MAAM,KAAK,cAAc,KAAK,QAAQ,gBAAgB,aAAa,OAAO;AAAA,EACnF;AAEA,QAAM,OAAO,MAAM,KAAK,YAAkD,KAAK,MAAM,EAAE,gBAAgB,OAAO;AAG9G,MAAI,KAAK,OAAO,gBAAgB,KAAK,OAAO,YAAY,QAAQ;AAC9D,IAAC,KAAK,OAA6D,QAAQ,CAAC,OAAO,MAAM;AACvF,YAAM,MAAM,MAAM,SAAS,CAAC;AAC5B,UAAI,CAAC,OAAO,CAAC,OAAO,SAAU;AAC9B,WAAK,IAAI,WAAW,SAAS,IAAI,WAAW,WAAW,CAAC,iBAAiB,IAAI,GAAG,GAAG;AACjF,gCAAwB,KAAK,QAAQ,MAAM,QAAQ;AAAA,MACrD;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,SAA+C;AAAA,IACnD,GAAG;AAAA,IACH,OAAO,KAAK;AAAA,IACZ,UAAU,WAA+E;AACvF,aACE,KAAK,OACD,IAAI,CAAC,UAAU,MAAM,QAAQ,EAC9B,OAAO,CAAC,aAA4C,aAAa,MAAS,KAAK,CAAC;AAAA,IAEvF;AAAA,EACF;AACA,SAAO;AACT;AAEA,eAAsB,0BAEpB,EAAE,GAAG,GACL,SAC4C;AAC5C,SAAO,KAAK,YAAY,YAAY,EAAE,kCAAkC,MAAM,EAAE,CAAC,GAAG,OAAO;AAC7F;AAEO,SAAS,cACd,SACA,SACQ;AACR,QAAM,UAAU,CAAC;AAEjB,MAAI,QAAQ,MAAM;AAChB,YAAQ,KAAK,GAAG,QAAQ,IAAI;AAAA,EAC9B;AAEA,MAAI,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,YAAY;AACvD,UAAM,eAAe,CAAC;AACtB,QAAI,QAAQ,MAAM;AAChB,mBAAa,KAAK,QAAQ,IAAI;AAAA,IAChC;AACA,QAAI,QAAQ,OAAO;AACjB,mBAAa,KAAK,QAAQ,KAAK;AAAA,IACjC;AACA,QAAI,QAAQ,YAAY;AACtB,mBAAa,KAAK,QAAQ,UAAU;AAAA,IACtC;AACA,YAAQ,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,EACtC;AAEA,MAAI,QAAQ,QAAQ,SAAS,OAAO,SAAS,MAAM;AACjD,YAAQ,KAAK,MAAM,QAAQ,MAAM,GAAG;AAAA,EACtC;AAEA,SAAO,QAAQ,KAAK,SAAS,iBAAiB,IAAI,EAAE,KAAK;AAC3D;AAEO,SAAS,gBACd,MACA,SAMQ;AACR,QAAM,UAAU,CAAC;AAEjB,MAAI,KAAK,UAAU,SAAS,WAAW,OAAO;AAC5C,YAAQ,KAAK,GAAG,KAAK,MAAM;AAAA,EAC7B;AAEA,MAAI,KAAK,OAAO;AACd,YAAQ,KAAK,GAAG,KAAK,KAAK;AAAA,EAC5B;AAEA,MAAI,KAAK,QAAQ;AACf,YAAQ,KAAK,KAAK,MAAM;AAAA,EAC1B;AAEA,MAAI,KAAK,UAAU,SAAS,WAAW,OAAO;AAC5C,YAAQ,KAAK,GAAG,KAAK,MAAM;AAAA,EAC7B;AAEA,MAAI,KAAK,QAAQ,SAAS,OAAO,SAAS,MAAM;AAC9C,YAAQ,KAAK,MAAM,KAAK,MAAM,GAAG;AAAA,EACnC;AAEA,SAAO,QAAQ,KAAK,GAAG,EAAE,KAAK;AAChC;;;ACx7BA,qBAAAC;AAMO,IAAM,OAAN,cAAmB,YAAY;AAAA,EACpC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAaL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAa;AACb,kBAAa;AACb,eAAU;AACV,uBAAkB;AAClB,2BAAsB;AACtB,0BAAqB;AACrB,kBAAa;AACb,iBAAY;AACZ,kBAAa;AACb,mBAAc;AACd,iBAAY;AACZ,uBAAkB;AAClB,qCAAgC;AAChC,yBAAoB;AACpB,2BAAsB;AAAA,EAxBtB;AAyBF;AA5BO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,YAAY,KAAK;AACjD;;;ACZF,oBAAAC;AAoBO,IAAM,MAAN,cAAkB,YAAY;AAAA,EACnC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,SAA+D;AACvE,WAAO,KAAK,QAAQ,UAAU,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAA8B,SAAiE;AACzG,WAAO,KAAK,QAAQ,UAAU,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SAAS,QAA2B,SAA8D;AAChG,WAAO,KAAK,QAAQ,sBAAsB,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAA8B,SAA+C;AACvF,WAAO,KAAK,QAAQ,sBAAsB,UAAU,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,kBACE,QACA,SACuC;AACvC,WAAO,KAAK,QAAQ,kBAAkB,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,8BACE,QACA,SACmD;AACnD,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,gBAAAA,kBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,QAA8B,SAAiE;AACzG,WAAO,KAAK,QAAQ,WAAW,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACvF;AACF;AA1GO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,WAAW,KAAK;AAChD;;;AC1BF,oBAAAC;AAqBO,IAAM,MAAN,cAAkB,YAAY;AAAA,EACnC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK,SAA0D;AAC7D,WAAO,KAAK,QAAQ,QAAQ,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAyB,SAA4D;AAC1F,WAAO,KAAK,QAAQ,QAAQ,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,GAAG,SAAwD;AACzD,WAAO,KAAK,QAAQ,WAAW,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAsB,SAAyD;AACjF,WAAO,KAAK,QAAQ,aAAa,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAyB,SAA4D;AAC1F,WAAO,KAAK,QAAQ,aAAa,SAAS,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAyB,SAA+C;AAC7E,WAAO,KAAK,QAAQ,aAAa,UAAU,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,QAA+B,SAAkE;AAC5G,WAAO,KAAK,QAAQ,2BAA2B,QAAQ,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,OAAO,QAAiD,SAA4D;AAClH,WAAO,KAAK,QAAQ,gBAAgB,OAAO,sBAAK,gBAAAA,kBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC3F;AACF;AA/FO;AAILA,mBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;AC3BF,0BAAAC;AAMO,IAAM,YAAN,cAAwB,YAAY;AAAA,EACzC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA,EAOA,mBAAmB,SAA8E;AAC/F,WAAO,KAAK,QAAQ,qBAAqB,OAAO,sBAAK,sBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EACxF;AACF;AAbO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACZF,8BAAAC;AAcO,IAAM,gBAAN,cAA4B,YAAY;AAAA,EAC7C,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,QAAkC,SAAqE;AAC3G,WAAO,KAAK,QAAQ,iCAAiC,QAAQ,sBAAK,0BAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,WAAW,QAAuC,SAA+C;AAC/F,WAAO,KAAK,QAAQ,uCAAuC,QAAQ,sBAAK,0BAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACnH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,QAAmC,SAA+C;AACvF,WAAO,KAAK,QAAQ,2BAA2B,UAAU,sBAAK,0BAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,KAAK,QAAiC,SAAoE;AACxG,WAAO,KAAK,QAAQ,gCAAgC,QAAQ,sBAAK,0BAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC5G;AACF;AA/EO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACpBF,wBAAAC;AAMO,IAAM,UAAN,cAAsB,YAAY;AAAA,EACvC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,SAA6D;AAC/D,WAAO,KAAK,QAAQ,YAAY,OAAO,sBAAK,oBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,OACE,QACA,SACgC;AAChC,WAAO,KAAK,QAAQ,YAAY,SAAS,sBAAK,oBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACzF;AACF;AA1CO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACRF,SAAS,eAAwC;AAC/C,SAAO,KAAK,OAAO,WAAW,WAAW,KAAK;AAChD;AAEO,SAAS,kBAEd;AAAA,EACE;AACF,GAGQ;AACR,SAAO,GAAG,aAAa,KAAK,IAAI,CAAC,UAAU,EAAE;AAC/C;AAEA,eAAsB,cAEpB,EAAE,IAAI,GACN,SAC8B;AAC9B,MAAI,CAAC,IAAI,WAAW,kBAAkB,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG;AAC7D,UAAM,IAAI,gBAAgB,EAAE,MAAM,KAAK,SAAS,qBAAqB,CAAC;AAAA,EACxE;AACA,QAAM,SAAS,IAAI,IAAI,GAAG;AAC1B,QAAM,YAAY,OAAO,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;AAC3D,QAAM,KAAK,UAAU,UAAU,SAAS,CAAC;AACzC,SAAO,KAAK,QAAQ,eAAe,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO;AACpF;;;AC/BA,oBAAAC;AAmBO,IAAM,MAAN,cAAkB,YAAY;AAAA,EACnC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAOL,6BAAwB;AACxB,yBAAoB;AAAA,EALpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,iBACE,QACA,SACsC;AACtC,WAAO,KAAK,QAAQ,sBAAsB,QAAQ,sBAAK,gBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,YAAY,QAA8B,SAAiE;AACzG,WAAO,KAAK,QAAQ,2BAA2B,QAAQ,sBAAK,gBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe,QAAiC,SAAoE;AAClH,WAAO,KAAK,QAAQ,2BAA2B,QAAQ,sBAAK,gBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACvG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,WACE,QACA,SACgC;AAChC,WAAO,KAAK,QAAQ,UAAU,OAAO,sBAAK,gBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,QAA2B,SAA8D;AAChG,WAAO,KAAK,QAAQ,eAAe,OAAO,sBAAK,gBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC1F;AACF;AAnFO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,WAAW,KAAK;AAChD;;;ACzBF,qBAAAC;AAgBO,IAAM,OAAN,cAAmB,YAAY;AAAA,EACpC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,KAAK,SAA2D;AAC9D,WAAO,KAAK,QAAQ,aAAa,OAAO,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAChF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA0B,SAA6D;AAC5F,WAAO,KAAK,QAAQ,aAAa,QAAQ,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAuB,SAA0D;AACnF,WAAO,KAAK,QAAQ,sBAAsB,OAAO,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACjG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA0B,SAA6D;AAC5F,WAAO,KAAK,QAAQ,sBAAsB,SAAS,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAA0B,SAA+C;AAC9E,WAAO,KAAK,QAAQ,sBAAsB,UAAU,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACpG;AACF;AArDO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACtBF,uBAAAC;AAcO,IAAM,SAAN,cAAqB,YAAY;AAAA,EACtC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,KAAK,SAA6D;AAChE,WAAO,KAAK,QAAQ,WAAW,OAAO,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAyB,SAA4D;AACvF,WAAO,KAAK,QAAQ,WAAW,QAAQ,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAyB,SAA4D;AACvF,WAAO,KAAK,QAAQ,kBAAkB,OAAO,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA4B,SAA+C;AAChF,WAAO,KAAK,QAAQ,kBAAkB,UAAU,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAChG;AACF;AA3CO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACpBF,wBAAAC;AAYO,IAAM,UAAN,cAAsB,YAAY;AAAA,EACvC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,cACE,QACA,SACuC;AACvC,WAAO,KAAK,QAAQ,uBAAuB,QAAQ,sBAAK,oBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,YAAY,QAAkC,SAAqE;AACjH,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,oBAAAA,mBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AACF;AAzCO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;AClBF,4BAAAC;AAYO,IAAM,cAAN,cAA0B,YAAY;AAAA,EAC3C,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,QAAoC,SAAuE;AACnH,WAAO,KAAK,QAAQ,eAAe,OAAO,sBAAK,wBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YACE,QACA,SACyC;AACzC,WAAO,KAAK,QAAQ,iBAAiB,OAAO,sBAAK,wBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC5F;AACF;AA5BO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,mBAAmB,KAAK;AACxD;;;AClBF,iCAAAC;AAMO,IAAM,mBAAN,cAA+B,YAAY;AAAA,EAChD,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,KAAK,QAAoC,SAAuE;AAC9G,WAAO,KAAK,QAAQ,qCAAqC,QAAQ,sBAAK,6BAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACjH;AACF;AAzBO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACZF,qBAAAC;AAsBO,IAAM,OAAN,cAAmB,YAAY;AAAA,EACpC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,GAAG,SAAyD;AAC1D,WAAO,KAAK,QAAQ,YAAY,OAAO,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAuB,SAA0D;AACnF,WAAO,KAAK,QAAQ,cAAc,OAAO,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA0B,SAA6D;AAC5F,WAAO,KAAK,QAAQ,cAAc,SAAS,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA0B,SAA+C;AAC9E,WAAO,KAAK,QAAQ,cAAc,UAAU,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,QAA4B,SAA+C;AAClF,WAAO,KAAK,QAAQ,wBAAwB,QAAQ,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,kBAAkB,QAAqC,SAA+C;AACpG,WAAO,KAAK,QAAQ,kCAAkC,QAAQ,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAe,QAAkC,SAA+C;AAC9F,WAAO,KAAK,QAAQ,8BAA8B,QAAQ,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC1G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA0B,SAA6D;AAC5F,WAAO,KAAK,QAAQ,gBAAgB,QAAQ,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAK,SAA2D;AAC9D,WAAO,KAAK,QAAQ,SAAS,OAAO,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,OACE,QACA,SAC6B;AAC7B,WAAO,KAAK,QAAQ,iBAAiB,OAAO,sBAAK,iBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC5F;AACF;AAnHO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;AC5BF,wBAAAC;AAMO,IAAM,UAAN,cAAsB,YAAY;AAAA,EACvC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAA6D;AAC/D,WAAO,KAAK,QAAQ,YAAY,OAAO,sBAAK,oBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC/E;AACF;AAbO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACRF,SAASC,gBAAwC;AAC/C,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;AAOA,eAAsB,WAEpB;AAAA,EACE;AAAA,EACA,eAAe;AAAA,EACf;AACF,GAKe;AACf,QAAM,YAAY,MAAM,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,IACAA,cAAa,KAAK,IAAI;AAAA,EACxB,EAAE;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AACD,QAAM,MAAM,UAAU,WAAW;AAAA,IAC/B,QAAQ;AAAA,IACR,MAAM;AAAA,EACR,CAAC;AACH;AAOA,eAAsB,aAEpB;AAAA,EACE;AAAA,EACA,eAAe;AACjB,GAIsB;AACtB,QAAM,YAAY,MAAM,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,IACAA,cAAa,KAAK,IAAI;AAAA,EACxB,EAAE;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,eAAe;AAAA,EACjB,CAAC;AACD,QAAM,OAAO,MAAM,MAAM,UAAU,WAAW;AAAA,IAC5C,QAAQ;AAAA,EACV,CAAC;AACD,MAAI,CAAC,KAAK,IAAI;AACZ,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACA,SAAO,KAAK,YAAY;AAC1B;AASA,eAAsB,wBAEpB,QACoC;AACpC,MAAI;AACJ,MAAI;AACJ,QAAM,MAAM,IAAI,IAAI,OAAO,GAAG;AAC9B,MAAI,IAAI,aAAa,OAAO;AAE1B,UAAM,cAAc,IAAI,SAAS,MAAM,GAAG,EAAE,MAAM,CAAC;AACnD,aAAS,IAAI;AACb,UAAM,YAAY,KAAK,GAAG;AAAA,EAC5B,WAAW,IAAI,KAAK,WAAW,KAAK,OAAO,WAAW,eAAe,KAAK,oBAAoB,GAAG;AAE/F,UAAM,iBAAiB,IAAI,SAAS,MAAM,GAAG,EAAE,MAAM,CAAC;AACtD,aAAS,eAAe,CAAC;AACzB,UAAM,eAAe,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EACxC,OAAO;AACL,UAAM,IAAI,gBAAgB,EAAE,SAAS,kBAAkB,MAAM,IAAI,CAAC;AAAA,EACpE;AACA,QAAM,gBAAyC;AAAA,IAC7C,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,eAAe;AAAA,EACjB;AACA,SAAO,KAAK,QAAQ,kCAAkC,QAAQA,cAAa,KAAK,IAAI,CAAC,EAAE,aAAa;AACtG;;;AC1GA,mBAAAC;AAkBO,IAAM,KAAN,cAAiB,YAAY;AAAA,EAClC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAWL;AAAA;AAAA;AAAA;AAAA,sBAAiB;AAKjB;AAAA;AAAA;AAAA;AAAA,wBAAmB;AAOnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAA8B;AAAA,EApB9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,YAAY,SAAgE;AAC1E,WAAO,KAAK,QAAQ,OAAO,OAAO,sBAAK,eAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,QAA8B,SAAiE;AAC1G,WAAO,KAAK,QAAQ,oBAAoB,OAAO,sBAAK,eAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,QAA8B,SAA+C;AACxF,WAAO,KAAK,QAAQ,oBAAoB,UAAU,sBAAK,eAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAClG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,QAA6B,SAAgE;AACvG,WAAO,KAAK,QAAQ,kCAAkC,OAAO,sBAAK,eAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,QAAiC,SAAoE;AACnH,WAAO,KAAK,QAAQ,kCAAkC,QAAQ,sBAAK,eAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,QAA8B,SAA+C;AACxF,WAAO,KAAK,QAAQ,kCAAkC,UAAU,sBAAK,eAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAChH;AACF;AA9EO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,eAAe,KAAK;AACpD;;;ACrBF,SAASC,gBAAwC;AAC/C,SAAO,KAAK,OAAO,WAAW,cAAc,KAAK;AACnD;AAEA,eAAsBC,YAEpB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AACF,GAKe;AACf,QAAM,YAAY,MAAM,KAAK;AAAA,IAC3B;AAAA,IACA;AAAA,IACAD,cAAa,KAAK,IAAI;AAAA,EACxB,EAAE,EAAE,IAAI,QAAQ,UAAU,SAAS,CAAC;AACpC,QAAM,WAAW,MAAM,MAAM,UAAU,WAAW;AAAA,IAChD,QAAQ;AAAA,IACR,MAAM;AAAA,EACR,CAAC;AACD,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,gBAAgB,EAAE,SAAS,yBAAyB,MAAM,SAAS,QAAQ,OAAO,SAAS,WAAW,CAAC;AAAA,EACnH;AACF;AAEA,eAAsBE,cAAgC,EAAE,GAAG,GAAyC;AAClG,QAAM,cAAc,MAAM,KAAK;AAAA,IAC7B;AAAA,IACA;AAAA,IACAF,cAAa,KAAK,IAAI;AAAA,EACxB,EAAE,EAAE,IAAI,QAAQ,WAAW,CAAC;AAC5B,QAAM,WAAW,MAAM,MAAM,YAAY,WAAW;AAAA,IAClD,QAAQ;AAAA,EACV,CAAC;AACD,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,gBAAgB;AAAA,MACxB,SAAS;AAAA,MACT,MAAM,SAAS;AAAA,MACf,OAAO,SAAS;AAAA,IAClB,CAAC;AAAA,EACH;AACA,SAAO,SAAS,YAAY;AAC9B;;;AClDA,uBAAAG;AAyBO,IAAM,SAAN,cAAqB,YAAY;AAAA,EACtC,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAOL,sBAAiBC;AACjB,wBAAmBC;AAAA,EALnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,KAAK,SAA6D;AAChE,WAAO,KAAK,QAAQ,WAAW,OAAO,sBAAK,mBAAAF,mBAAc,KAAK,IAAI,CAAC,EAAE,OAAO;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA4B,SAA+D;AAChG,WAAO,KAAK,QAAQ,WAAW,QAAQ,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAyB,SAA4D;AACvF,WAAO,KAAK,QAAQ,gBAAgB,OAAO,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA4B,SAA+D;AAChG,WAAO,KAAK,QAAQ,gBAAgB,SAAS,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAA4B,SAA+C;AAChF,WAAO,KAAK,QAAQ,gBAAgB,UAAU,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,QAA6B,SAAgE;AACnG,WAAO,KAAK,QAAQ,wBAAwB,QAAQ,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACpG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cACE,QACA,SACsC;AACtC,WAAO,KAAK,QAAQ,+BAA+B,QAAQ,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,SAAS,QAA8B,SAAiE;AACtG,WAAO,KAAK,QAAQ,0BAA0B,QAAQ,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,gBACE,QACA,SACwC;AACxC,WAAO,KAAK,QAAQ,8BAA8B,QAAQ,sBAAK,mBAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC1G;AACF;AAlGO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,cAAc,KAAK;AACnD;;;AC/BF,gCAAAG;AAcO,IAAM,kBAAN,cAA8B,YAAY;AAAA,EAC/C,YAAY,QAAuB;AACjC,UAAM,MAAM;AAFT;AAAA,EAGL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,KAAK,QAAmC,SAAsE;AAC5G,WAAO,KAAK,QAAQ,0BAA0B,QAAQ,sBAAK,4BAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EACtG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QAAqC,SAAwE;AAClH,WAAO,KAAK,QAAQ,iCAAiC,QAAQ,sBAAK,4BAAAA,mBAAc,KAAK,IAAI,CAAC,EAAE,QAAQ,OAAO;AAAA,EAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,QAAkC,SAAqE;AACzG,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA,sBAAK,4BAAAA,mBAAc,KAAK,IAAI;AAAA,IAC9B,EAAE,QAAQ,OAAO;AAAA,EACnB;AACF;AAtCO;AAILA,oBAAa,WAAW;AACtB,SAAO,KAAK,OAAO,WAAW,cAAc,KAAK;AACnD;;;ACQK,IAAM,UAAN,MAAc;AAAA,EAyBnB,YAAY,QAAuB;AArDrC;AAsDI,QAAI,OAAO,gBAAgB,OAAO,YAAY;AAC5C,YAAM,IAAI,gBAAgB;AAAA,QACxB,SAAS;AAAA,QACT,MAAM;AAAA,MACR,CAAC;AAAA,IACH;AACA,SAAK,SAAS;AACd,eAAK,QAAO,aAAZ,GAAY,WAAa,CAAC;AAC1B,eAAK,OAAO,UAAZ,2CAA0C,OAAO;AACjD,eAAK,OAAO,UAAZ,qCAAuC,OAAO;AAC9C,SAAK,cAAc,IAAI,YAAY,MAAM;AACzC,SAAK,YAAY,IAAI,UAAU,MAAM;AACrC,SAAK,MAAM,IAAI,IAAI,MAAM;AACzB,SAAK,YAAY,IAAI,UAAU,MAAM;AACrC,SAAK,eAAe,IAAI,aAAa,MAAM;AAC3C,SAAK,mBAAmB,IAAI,iBAAiB,MAAM;AACnD,SAAK,gBAAgB,IAAI,cAAc,MAAM;AAC7C,SAAK,SAAS,IAAI,OAAO,MAAM;AAC/B,SAAK,UAAU,IAAI,QAAQ,MAAM;AACjC,SAAK,OAAO,IAAI,KAAK,MAAM;AAC3B,SAAK,SAAS,IAAI,OAAO,MAAM;AAC/B,SAAK,UAAU,IAAI,QAAQ,MAAM;AACjC,SAAK,OAAO,IAAI,KAAK,MAAM;AAC3B,SAAK,UAAU,IAAI,QAAQ,MAAM;AACjC,SAAK,KAAK,IAAI,GAAG,MAAM;AACvB,SAAK,MAAM,IAAI,IAAI,MAAM;AACzB,SAAK,MAAM,IAAI,IAAI,MAAM;AACzB,SAAK,MAAM,IAAI,IAAI,MAAM;AACzB,SAAK,cAAc,IAAI,YAAY,MAAM;AACzC,SAAK,SAAS,IAAI,OAAO,MAAM;AAC/B,SAAK,kBAAkB,IAAI,gBAAgB,MAAM;AACjD,SAAK,MAAM,IAAI,IAAI,MAAM;AACzB,SAAK,OAAO,IAAI,KAAK,MAAM;AAAA,EAC7B;AACF;;;ACxFA;AAeO,SAAS,iBAAiB,YAAoB,WAAW,YAAoD;AAClH,QAAM,OAAO,WAAW,QAAQ,QAAQ,EAAE;AAC1C,QAAM,OAAO,GAAG,IAAI,GAAG,SAAS,WAAW,GAAG,IAAI,WAAW,IAAI,QAAQ,EAAE;AAC3E,SAAO;AAAA,IACL,cAAc,GAAG,IAAI;AAAA,IACrB,eAAe,GAAG,IAAI;AAAA,IACtB,YAAY;AAAA,EACd;AACF;AAKO,SAAS,kBAAkB,QAAoC;AACpE,QAAM,WAAW,iBAAiB,OAAO,YAAY,OAAO,QAAQ;AACpE,SAAO,IAAI,QAAQ;AAAA,IACjB,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,OAAO,OAAO;AAAA,IACd,OAAO,OAAO;AAAA,IACd,cAAc,OAAO;AAAA,IACrB,YAAY,OAAO;AAAA,IACnB,YAAY,SAAS;AAAA,IACrB,eAAe,SAAS;AAAA,IACxB;AAAA,EACF,CAAC;AACH;AAKO,SAAS,mBAAmB,WAAW,yBAAiC;AAC7E,MAAI;AACF,UAAM,MAAO,YAA0E;AACvF,WAAO,KAAK,oBAAoB,KAAK,KAAK;AAAA,EAC5C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;AjCvCA,IAAMC,WAAN,cAAsB,QAAY;AAGlC;AAHMA,SACG,mBAA0B;AAD7BA,SAEG,kBAAyB;AAYlC,IAAO,gBAAQA;",
6
- "names": ["baseUrlThunk", "uuidValidate", "uuidv4", "search", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "search", "operations", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk", "baseUrlThunk_fn", "baseUrlThunk", "uploadFile", "downloadFile", "baseUrlThunk_fn", "uploadFile", "downloadFile", "baseUrlThunk_fn", "Oystehr"]
4
+ "sourcesContent": ["import type { SijilClientRequest } from './client/client';\nimport { SijilConfig } from './config';\nimport * as errors from './errors';\nimport { Sijil as SijilBase } from './resources/classes';\n\nexport * from './resources';\n\nexport type { SijilClientRequest };\nexport type { SijilConfig };\n\n// HACK: ideally we would only have to do this for CommonJS\n// where default + named exports are not allowed; however,\n// our ancient tsc settings are somehow grabbing js from\n// dist/esm and types from dist/cjs\n\nclass Sijil extends SijilBase {\n static SijilFHIRError = errors.SijilFHIRError;\n static SijilSdkError = errors.SijilSdkError;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Sijil {\n export type SijilFHIRError = errors.SijilFHIRError;\n export type SijilSdkError = errors.SijilSdkError;\n}\n\nexport { createSijilClient, sijilServiceUrls, apiBaseFromViteEnv } from './sijil/config';\nexport type { SijilClientConfig } from './sijil/config';\n\nexport default Sijil;\n", "import { OperationOutcome as OperationOutcomeR4B } from 'fhir/r4b';\nimport { OperationOutcome as OperationOutcomeR5 } from 'fhir/r5';\n\nexport class SijilSdkError extends Error {\n code: number;\n constructor({ message, code, cause }: { message: string; code: number; cause?: unknown }) {\n super(message, { cause });\n Object.setPrototypeOf(this, SijilSdkError.prototype);\n this.code = code;\n this.name = 'SijilSdkError';\n }\n toString(): string {\n return `${this.name}: ${this.message} (code: ${this.code})`;\n }\n toJSON(): any {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n cause: this.cause,\n };\n }\n}\n\nfunction transformOperationOutcomeToErrorMessage(cause: OperationOutcomeR4B | OperationOutcomeR5): string {\n const causes = [];\n for (const issue of cause.issue ?? []) {\n if (issue.details && issue.details.text) {\n causes.push(issue.details.text);\n }\n }\n if (!causes.length) {\n causes.push('Unknown FHIR error');\n }\n return causes.join(',');\n}\n\nexport class SijilFHIRError extends SijilSdkError {\n cause: OperationOutcomeR4B | OperationOutcomeR5;\n constructor({ error, code }: { error: OperationOutcomeR4B | OperationOutcomeR5; code: number }) {\n super({\n message: transformOperationOutcomeToErrorMessage(error as OperationOutcomeR4B | OperationOutcomeR5),\n code,\n });\n Object.setPrototypeOf(this, SijilFHIRError.prototype);\n this.cause = error as OperationOutcomeR4B | OperationOutcomeR5;\n this.name = 'SijilFHIRError';\n }\n toJSON(): any {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n cause: this.cause,\n };\n }\n}\n", "import { v4 as uuidv4, validate as uuidValidate } from 'uuid';\nimport { SijilConfig } from '../config';\nimport { SijilFHIRError, SijilSdkError } from '../errors';\nimport { Logger } from '../logger';\nimport {\n FhirAsyncBulkManifest,\n FhirAsyncCompletionBundle,\n FhirAsyncJobHandle,\n FhirAsyncJobStatus,\n FhirBundle,\n FhirResource,\n FhirResponseMode,\n OperationOutcome,\n} from '../resources/types';\n\ntype HttpMethod = 'get' | 'put' | 'post' | 'delete' | 'options' | 'head' | 'patch' | 'trace';\nexport const defaultProjectApiUrl = 'https://project-api.zapehr.com/v1';\nconst defaultFhirApiUrl = 'https://fhir-api.zapehr.com';\nconst STATUS_CODES_TO_RETRY = [408, 429, 500, 502, 503, 504];\nconst ERROR_CODES_TO_RETRY = [\n 'ECONNRESET',\n 'ECONNREFUSED',\n 'EPIPE',\n 'ETIMEDOUT',\n 'UND_ERR_CONNECT_TIMEOUT',\n 'UND_ERR_HEADERS_TIMEOUT',\n 'UND_ERR_HEADERS_TIMEOUT',\n 'UND_ERR_SOCKET',\n];\n\n/**\n * Optional parameter that can be passed to the client methods. It allows\n * overriding the access token or project ID, and setting various headers,\n * such as 'Content-Type'.\n */\nexport interface SijilClientRequest {\n /**\n * The access token to use for the request. If not provided, the access token from `sijil.init()` will be used.\n */\n accessToken?: string;\n /**\n * The project ID to use for the request. If not provided, the project ID from `sijil.init()` will be used.\n */\n projectId?: string;\n /**\n * The value of the 'Content-Type' header to use for the request.\n */\n contentType?: string;\n /**\n * Unique identifier for this request.\n */\n requestId?: string;\n /**\n * Optional execution mode for FHIR requests that support async behavior.\n * Defaults to `sync` when omitted.\n */\n mode?: FhirResponseMode;\n}\n\ninterface InternalClientRequest extends SijilClientRequest {\n ifMatch?: string;\n /**\n * Internal-only: returns raw response metadata ({ status, headers, body }) instead of throwing on non-2xx statuses.\n */\n rawResponse?: boolean;\n}\n\ntype FhirData<T extends FhirResource> = T | T[] | FhirBundle<T>;\nexport type FhirFetcherResponse<T extends FhirData<FhirResource> = any> = T;\n\nexport class SDKResource {\n protected readonly config: SijilConfig;\n protected readonly logger: Logger;\n constructor(config: SijilConfig) {\n this.config = config;\n this.logger = new Logger({\n level: this.config.logLevel,\n });\n }\n\n protected request(path: string, method: string, baseUrlThunk: () => string): FetcherFunction {\n return async (params: any, request?: InternalClientRequest): Promise<FetcherResponse> => {\n const configThunk = (): SijilConfig => this.config;\n const loggerThunk = (): Logger => this.logger;\n try {\n // must await here to catch\n return await fetcher(baseUrlThunk, configThunk, loggerThunk, path, method)(params, request);\n } catch (err: any) {\n const error = err as { message: string; code: number; cause?: unknown };\n this.logger.error(error.message, { code: error.code, cause: error.cause });\n throw new SijilSdkError({ message: error.message, code: error.code, cause: error.cause });\n }\n };\n }\n\n protected fhirRequest<T = FhirResource>(\n path: string,\n method: string\n ): {\n (params: any, request: InternalClientRequest & { rawResponse: true }, requestMode?: FhirResponseMode): Promise<\n RawFetcherResponse<T>\n >;\n (params: any, request?: InternalClientRequest, requestMode?: FhirResponseMode): Promise<T>;\n } {\n return async (params: any, request?: InternalClientRequest, requestMode?: FhirResponseMode): Promise<any> => {\n try {\n const baseUrlThunk = (): string => this.config.services?.fhirApiUrl ?? defaultFhirApiUrl;\n const configThunk = (): SijilConfig => this.config;\n const loggerThunk = (): Logger => this.logger;\n // must await here to catch\n return await fetcher(baseUrlThunk, configThunk, loggerThunk, path, method)(params, request, requestMode);\n } catch (err: unknown) {\n // FHIR API error messages are JSON strings\n const fullError = err as { message: string | Record<string, any>; code: number; cause?: unknown };\n if (typeof fullError.message === 'string') {\n throw new SijilSdkError({\n message: fullError.message,\n code: fullError.code,\n cause: fullError.cause,\n });\n }\n throw new SijilFHIRError({\n error: fullError.message as OperationOutcome,\n code: fullError.code,\n });\n }\n };\n }\n\n protected async startAsyncJob(\n path: string,\n method: string,\n params: Record<string, unknown>,\n requestMode: FhirResponseMode,\n request?: InternalClientRequest\n ): Promise<FhirAsyncJobHandle> {\n const mode = requestMode === 'async-bulk' ? 'bulk' : 'bundle';\n const asyncPath = requestMode === 'async-bulk' ? this.appendBulkOutputFormat(path) : path;\n\n const raw = await this.fhirRequest(asyncPath, method)(\n params,\n {\n ...request,\n rawResponse: true,\n },\n requestMode\n );\n\n if (raw.status !== 202) {\n throw new SijilSdkError({\n message: `Expected start async job to return 202 Accepted, received ${raw.status}`,\n code: raw.status,\n });\n }\n\n const contentLocation = this.readHeader(raw.headers, 'content-location');\n if (!contentLocation) {\n throw new SijilSdkError({\n message: 'Start Async job response missing Content-Location header',\n code: 500,\n });\n }\n\n const jobId = this.parseAsyncJobId(contentLocation);\n if (!jobId) {\n throw new SijilSdkError({\n message: `Could not parse async job id from Content-Location: ${contentLocation}`,\n code: 500,\n });\n }\n\n return { jobId, contentLocation, mode };\n }\n\n protected async fetchAsyncJobStatus<T extends FhirResource>(\n jobId: string,\n request?: SijilClientRequest\n ): Promise<FhirAsyncJobStatus<T>> {\n const raw = await this.fhirRequest(`/async-job/${jobId}`, 'GET')(\n {},\n {\n ...request,\n rawResponse: true,\n }\n );\n\n if (raw.status === 202) {\n return {\n status: 202,\n xProgress: this.readHeader(raw.headers, 'x-progress'),\n retryAfter: this.readHeader(raw.headers, 'retry-after'),\n };\n }\n\n if (raw.status === 410) {\n return { status: 410 };\n }\n\n if (raw.status === 404) {\n return { status: 404 };\n }\n\n if (raw.status === 200) {\n if (this.isBulkManifest(raw.body)) {\n return {\n status: 200,\n mode: 'bulk',\n manifest: raw.body,\n };\n }\n\n const bundle = raw.body as FhirAsyncCompletionBundle<T>;\n if (bundle?.resourceType === 'Bundle' && bundle?.type === 'batch-response') {\n const entry0 = bundle.entry?.[0];\n const interactionStatus = entry0?.response?.status;\n const resource = entry0?.resource;\n const outcome = entry0?.response?.outcome;\n return {\n status: 200,\n mode: 'bundle',\n bundle,\n interactionStatus,\n resource,\n outcome,\n };\n }\n\n return {\n status: 200,\n body: raw.body,\n };\n }\n\n return {\n status: raw.status,\n body: raw.body,\n };\n }\n\n private readHeader(headers: Record<string, string>, name: string): string | undefined {\n const direct = headers[name];\n if (direct != null) {\n return direct;\n }\n\n const lower = name.toLowerCase();\n const key = Object.keys(headers).find((h) => h.toLowerCase() === lower);\n return key ? headers[key] : undefined;\n }\n\n private parseAsyncJobId(contentLocation: string): string | undefined {\n const segments = contentLocation.split('/').filter(Boolean);\n const asyncJobIndex = segments.lastIndexOf('async-job');\n if (asyncJobIndex < 0 || asyncJobIndex + 1 >= segments.length) {\n return undefined;\n }\n\n return segments[asyncJobIndex + 1];\n }\n\n private appendBulkOutputFormat(path: string): string {\n const separator = path.includes('?') ? '&' : '?';\n return `${path}${separator}_outputFormat=${encodeURIComponent('application/fhir+ndjson')}`;\n }\n\n private isBulkManifest(body: unknown): body is FhirAsyncBulkManifest {\n if (body == null || typeof body !== 'object') {\n return false;\n }\n\n const maybe = body as Record<string, unknown>;\n return (\n typeof maybe.transactionTime === 'string' &&\n typeof maybe.request === 'string' &&\n typeof maybe.requiresAccessToken === 'boolean' &&\n Array.isArray(maybe.output) &&\n Array.isArray(maybe.error)\n );\n }\n}\n\nexport type FetcherError = { message: string; code: number };\nexport type FetcherResponse = any;\nexport type RawFetcherResponse<T = unknown> = {\n status: number;\n headers: Record<string, string>;\n body: T | null;\n};\nexport type FetcherFunction = (\n params?: Record<string, any> | [any] | InternalClientRequest,\n request?: InternalClientRequest,\n requestMode?: FhirResponseMode\n) => Promise<FetcherResponse>;\n\nfunction isInternalClientRequest(request: Record<string, any>): request is InternalClientRequest {\n return (\n 'accessToken' in request ||\n ('projectId' in request && uuidValidate(request.projectId)) ||\n ('contentType' in request && request.contentType?.split('/').length === 2) ||\n 'requestId' in request ||\n ('ifMatch' in request && request.ifMatch.startsWith('W/\"')) ||\n 'mode' in request ||\n 'rawResponse' in request\n );\n}\n\nfunction getPreferHeaderFromMode(mode: FhirResponseMode | undefined): string | undefined {\n if (mode === 'async-bundle' || mode === 'async-bulk') {\n return 'respond-async';\n }\n return undefined;\n}\n\n/**\n * Parse XML response in format <response><status>...</status><output>...</output></response>\n */\nfunction parseXmlResponse(xmlString: string): Record<string, unknown> | null {\n try {\n // Extract status\n const statusMatch = xmlString.match(/<status>(\\d+)<\\/status>/);\n const status = statusMatch ? parseInt(statusMatch[1], 10) : null;\n\n // Extract output - everything between <output> and </output>\n const outputMatch = xmlString.match(/<output>([\\s\\S]*?)<\\/output>/);\n const output = outputMatch ? outputMatch[1] : null;\n\n if (status === null || output === null) {\n return null;\n }\n\n return { status, output };\n } catch (_err) {\n return null;\n }\n}\n\nfunction fetcher(\n baseUrlThunk: () => string,\n configThunk: () => SijilConfig,\n loggerThunk: () => Logger,\n path: string,\n methodParam: string\n): FetcherFunction {\n return async (\n params?: Record<string, unknown> | [any] | InternalClientRequest,\n request?: InternalClientRequest,\n requestMode?: FhirResponseMode\n ): Promise<FetcherResponse> => {\n // this function supports multiple signatures. fetcher(baseUrl, path, method)(params, request) or fetcher(baseUrl, path, method)(request)\n // or fetcher(baseUrl, path, method)(params) or fetcher(baseUrl, path, method)(). the types for this are handled by Client<Path, Methods>\n // and this is the backend implementation behind it. the heuristic we're using is that if the first param is an object with an accessToken\n // and there is no second param, assume the first one is the request object instead\n // eslint-disable-next-line prefer-const\n let [providedParams, requestCtx] = extractParamsAndRequest(params, request);\n requestCtx ??= {};\n requestCtx.requestId ??= uuidv4();\n const config = configThunk();\n const logger = loggerThunk();\n const method = methodParam.toLowerCase() as HttpMethod;\n logger.debug('Beginning fetch', {\n method,\n path,\n requestId: requestCtx?.requestId,\n });\n const fetchImpl = config.fetch ?? fetch;\n const accessToken = requestCtx?.accessToken ?? config.accessToken;\n const projectId = requestCtx?.projectId ?? config.projectId;\n let finalPath = path;\n let finalParams = providedParams;\n if (!Array.isArray(providedParams)) {\n const [subbedPath, addlParams] = subParamsInPath(path, providedParams);\n finalPath = subbedPath;\n finalParams = addlParams;\n }\n logger.debug('Substituted parameters in path', {\n method,\n path,\n requestId: requestCtx?.requestId,\n });\n finalPath = finalPath.replace(/^\\//, ''); // remove leading slash\n const baseUrlEvaluated = baseUrlThunk();\n const fullBaseUrl = baseUrlEvaluated.endsWith('/') ? baseUrlEvaluated : baseUrlEvaluated + '/';\n const url = new URL(finalPath, fullBaseUrl);\n let body: any;\n\n if (Array.isArray(finalParams)) {\n body = JSON.stringify(finalParams);\n } else if (Object.keys(finalParams).length) {\n if (method === 'get') {\n addParamsToSearch(finalParams, url.searchParams);\n } else if (requestCtx?.contentType === 'application/x-www-form-urlencoded') {\n const search = new URLSearchParams();\n addParamsToSearch(finalParams, search);\n body = search.toString();\n } else {\n body = JSON.stringify(finalParams);\n }\n } else {\n // override for rpc call\n if (requestCtx?.contentType !== 'application/x-www-form-urlencoded' && method === 'post') {\n body = '{}';\n }\n }\n logger.debug('Prepared request body', {\n method,\n path,\n requestId: requestCtx?.requestId,\n });\n\n const preferHeader = getPreferHeaderFromMode(requestMode);\n\n const headers: Record<string, string> = Object.assign(\n projectId\n ? {\n 'x-zapehr-project-id': projectId,\n 'x-sijil-project-id': projectId,\n }\n : {},\n {\n 'content-type': requestCtx?.contentType ?? 'application/json',\n },\n preferHeader ? { Prefer: preferHeader } : {},\n accessToken ? { Authorization: `Bearer ${accessToken}` } : {},\n requestCtx?.ifMatch ? { 'If-Match': requestCtx.ifMatch } : {},\n { 'x-sijil-request-id': requestCtx?.requestId }\n );\n const retryConfig: ConstructedRetryConfig = {\n retries: config.retry?.retries ?? 3,\n jitter: config.retry?.jitter ?? 20,\n delay: config.retry?.delay ?? 100,\n onRetry: config.retry?.onRetry,\n // Using array instead of set because the length is too short for uniqueness to be important\n retryOn: [...(config.retry?.retryOn ?? []), ...STATUS_CODES_TO_RETRY],\n };\n retryConfig.retryOn.push(...STATUS_CODES_TO_RETRY);\n return retry(async () => {\n logger.info('Request start', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n const now = Date.now();\n const response = await fetchImpl(\n new Request(url, {\n method: method.toUpperCase(),\n body,\n headers,\n })\n );\n logger.info('Request end', {\n method,\n url,\n duration: Date.now() - now,\n requestId: requestCtx?.requestId,\n });\n const responseBody = response.body ? await response.text() : null;\n let responseJson: Record<string, unknown> | null;\n const contentType = response.headers.get('content-type');\n try {\n if (\n responseBody &&\n (contentType?.includes('application/json') || contentType?.includes('application/fhir+json'))\n ) {\n logger.time('Deserialized JSON response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n responseJson = JSON.parse(responseBody);\n logger.timeEnd('Deserialized JSON response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n } else if (responseBody && (contentType?.includes('application/xml') || contentType?.includes('text/xml'))) {\n // Parse XML response into { status, output } structure\n logger.time('Deserialized XML response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n responseJson = parseXmlResponse(responseBody);\n logger.timeEnd('Deserialized XML response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n } else {\n responseJson = null;\n }\n } catch (_err) {\n // ignore JSON.parse errors\n responseJson = null;\n }\n logger.debug('Deserialized response', {\n method,\n url,\n requestId: requestCtx?.requestId,\n });\n if (requestCtx?.rawResponse) {\n const headersRecord: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headersRecord[key] = value;\n });\n return {\n status: response.status,\n headers: headersRecord,\n body: responseJson ?? responseBody,\n } as RawFetcherResponse;\n }\n const isError = !response.ok || response.status >= 400;\n if (isError) {\n const errObj = {\n message:\n (typeof responseJson?.output === 'string'\n ? responseJson.output // XML error case - output is XML string\n : (responseJson?.output as Record<string, unknown>)?.message) ?? // official zambda output format (JSON)\n responseJson?.message ?? // normal endpoint output format\n responseJson ?? // parsable json\n responseBody ?? // raw response\n response.statusText, // fallback to status text\n code:\n (responseJson?.output as Record<string, unknown>)?.code ?? // official zambda output format\n responseJson?.code ?? // normal endpoint output format\n response.status, // fallback to status code\n response,\n };\n throw errObj;\n }\n return responseJson;\n }, retryConfig);\n };\n}\n\ntype ConstructedRetryConfig = Omit<NonNullable<SijilConfig['retry']>, 'retryOn'> & {\n jitter: NonNullable<NonNullable<SijilConfig['retry']>['jitter']>;\n delay: NonNullable<NonNullable<SijilConfig['retry']>['delay']>;\n retryOn: NonNullable<NonNullable<SijilConfig['retry']>['retryOn']>;\n};\nasync function retry<T>(work: (attempt: number) => Promise<T>, config: ConstructedRetryConfig): Promise<T> {\n let lastErr;\n for (const attempt of Array.from({ length: (config.retries ?? 0) + 1 }, (_, index) => index)) {\n try {\n return await work(attempt);\n } catch (e: any) {\n let isRetryable = false;\n if ('response' in e) {\n // error from API\n const err = e as FetcherError;\n isRetryable = config.retryOn.includes(err.code);\n // Removes response\n lastErr = { message: e.message, code: e.code };\n } else {\n lastErr = e;\n // error from fetch\n if ('code' in e && typeof e.code === 'string') {\n const err = e as { code: string };\n isRetryable = ERROR_CODES_TO_RETRY.includes(err.code);\n }\n }\n if (!isRetryable) {\n break;\n }\n const jitter = Math.floor(Math.random() * (config.jitter + 1));\n await new Promise((resolve) => setTimeout(resolve, config.delay + jitter));\n if (config.onRetry && attempt !== (config.retries ?? 0)) {\n config.onRetry(attempt + 1);\n }\n }\n }\n throw lastErr;\n}\n\n/**\n * Substitutes params in a path and returns the path with params substituted and any unused params.\n *\n * Uses the property names in the params object to determine the param to substitute in the path.\n *\n * @param path JSON API resource URI\n * @param params all params provided to the client method\n * @returns resource URI with params substituted and any unused params\n */\nfunction subParamsInPath(path: string, params: Record<string, unknown>): [string, Record<string, string>] {\n const unusedParams = { ...params };\n // capture everything of the form `{paramName}` and replace with the value of `params[paramName]`\n const subbedPath = path.replace(/\\{([^}]+)\\}/g, (_, paramName) => {\n delete unusedParams[paramName];\n // override for path params that are paths, indicated by a `+` at the end\n if (paramName.match(/^.*\\+$/)) {\n return params[paramName] + '';\n }\n // error if param value is empty\n if (!params[paramName] || params[paramName] === '') {\n throw new SijilSdkError({ message: `Required path parameter is an empty string: ${paramName}`, code: 400 });\n }\n // encode search params\n if (params[paramName]) {\n return encodeURIComponent(params[paramName] + ''); // coerce to string\n }\n return '';\n });\n\n const unusedKeys = Object.keys(unusedParams);\n const addlParams = unusedKeys.length\n ? unusedKeys.reduce((acc, key) => ({ ...acc, [key]: unusedParams[key] }), {})\n : {};\n return [subbedPath, addlParams];\n}\n\n/**\n * Adds params to a URLSearchParams object in such a way as to preserve array values.\n * @param params params\n * @param search URLSearchParams object\n */\nexport function addParamsToSearch(params: Record<string, unknown>, search: URLSearchParams): void {\n for (const [key, value] of Object.entries(params)) {\n if (Array.isArray(value)) {\n value.forEach((v) => v !== null && v !== undefined && search.append(key, v as string));\n continue;\n }\n if (value !== null && value !== undefined) {\n search.append(key, value as string);\n }\n }\n}\n\nexport function extractParamsAndRequest(\n params?: Record<string, unknown> | [any] | InternalClientRequest,\n request?: InternalClientRequest\n): [Record<string, unknown>, InternalClientRequest | undefined] {\n const providedParams: Record<string, unknown> | [any] =\n !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)\n ? {}\n : (params as Record<string, unknown>) ?? {};\n const requestCtx =\n !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)\n ? (params as InternalClientRequest)\n : request;\n return [providedParams, requestCtx];\n}\n", "export class Logger {\n _level?: 'error' | 'info' | 'debug';\n constructor({ level }: { level?: 'error' | 'info' | 'debug' }) {\n this._level = level;\n }\n\n error(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['error', 'info', 'debug'].includes(this._level)) {\n console.error(JSON.stringify({ message, ...extra }));\n }\n }\n\n info(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['info', 'debug'].includes(this._level)) {\n console.info(JSON.stringify({ message, ...extra }));\n }\n }\n\n debug(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['debug'].includes(this._level)) {\n console.debug(JSON.stringify({ message, ...extra }));\n }\n }\n\n time(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['debug'].includes(this._level)) {\n console.time(JSON.stringify({ message, ...extra }));\n }\n }\n\n timeEnd(message: string, extra: Record<string, any> = {}): void {\n if (this._level && ['debug'].includes(this._level)) {\n console.timeEnd(JSON.stringify({ message, ...extra }));\n }\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n ApplicationCreateParams,\n ApplicationCreateResponse,\n ApplicationDeleteParams,\n ApplicationGetParams,\n ApplicationGetResponse,\n ApplicationListResponse,\n ApplicationRevokeAccessTokenParams,\n ApplicationRevokeAccessTokenResponse,\n ApplicationRevokeRefreshTokenParams,\n ApplicationRevokeRefreshTokenResponse,\n ApplicationRotateSecretParams,\n ApplicationRotateSecretResponse,\n ApplicationUpdateParams,\n ApplicationUpdateResponse,\n SijilClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Application extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get a list of Applications. [Applications](https://docs.sijil.com/sijil/services/app/applications/) provide authentication in front of the web and mobile apps you build on Sijil.\n *\n * Access Policy Action: `App:ListAllApplications`\n * Access Policy Resource: `App:Application`\n */\n list(request?: SijilClientRequest): Promise<ApplicationListResponse> {\n return this.request('/application', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new Application. [Applications](https://docs.sijil.com/sijil/services/app/applications/) provide authentication in front of the web and mobile apps you build on Sijil.\n *\n * Access Policy Action: `App:CreateApplication`\n * Access Policy Resource: `App:Application`\n */\n create(params: ApplicationCreateParams, request?: SijilClientRequest): Promise<ApplicationCreateResponse> {\n return this.request('/application', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the Application with the provided ID. [Applications](https://docs.sijil.com/sijil/services/app/applications/) provide authentication in front of the web and mobile apps you build on Sijil.\n *\n * Access Policy Action: `App:GetApplication`\n * Access Policy Resource: `App:Application`\n */\n get(params: ApplicationGetParams, request?: SijilClientRequest): Promise<ApplicationGetResponse> {\n return this.request('/application/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Application with the provided ID. [Applications](https://docs.sijil.com/sijil/services/app/applications/) provide authentication in front of the web and mobile apps you build on Sijil.\n *\n * Access Policy Action: `App:UpdateApplication`\n * Access Policy Resource: `App:Application`\n */\n update(params: ApplicationUpdateParams, request?: SijilClientRequest): Promise<ApplicationUpdateResponse> {\n return this.request('/application/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Application with the provided ID. [Applications](https://docs.sijil.com/sijil/services/app/applications/) provide authentication in front of the web and mobile apps you build on Sijil.\n *\n * Access Policy Action: `App:DeleteApplication`\n * Access Policy Resource: `App:Application`\n */\n delete(params: ApplicationDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/application/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Rotate client's secrete associated with an application.\n *\n * Access Policy Action: `App:RotateApplicationSecret`\n * Access Policy Resource: `App:Application`\n */\n rotateSecret(\n params: ApplicationRotateSecretParams,\n request?: SijilClientRequest\n ): Promise<ApplicationRotateSecretResponse> {\n return this.request('/application/{id}/rotate-secret', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Revokes user's refresh token issued for the application.\n *\n * Access Policy Action: `App:RevokeRefreshToken`\n * Access Policy Resource: `App:Application`\n */\n revokeRefreshToken(\n params: ApplicationRevokeRefreshTokenParams,\n request?: SijilClientRequest\n ): Promise<ApplicationRevokeRefreshTokenResponse> {\n return this.request(\n '/application/{id}/revoke-refresh-token',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Revokes user's access token issued for the application.\n *\n * Access Policy Action: `App:RevokeAccessToken`\n * Access Policy Resource: `App:Application`\n */\n revokeAccessToken(\n params: ApplicationRevokeAccessTokenParams,\n request?: SijilClientRequest\n ): Promise<ApplicationRevokeAccessTokenResponse> {\n return this.request(\n '/application/{id}/revoke-access-token',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { ChargeIssueParams, ChargeStatusParams, ChargeStatusResponse, SijilClientRequest } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Charge extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Charge patient's default payment method for a specified encounter or charge item.\n *\n * Access Policy Requirements:\n * Action: `Payment:Issue`\n * Access Policy Resource: `Payment:Charge`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:ChargeItem:*,`FHIR:PaymentReconciliation:*`\n * Action: `FHIR:Read`\n * Access Policy Resources: `FHIR:Patient:*,FHIR:Encounter:*,FHIR:Coverage:*`\n */\n issue(params: ChargeIssueParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/payment/charge/issue', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Retrieve charge status for a specified encounter or charge item.\n *\n * Access Policy Requirements:\n * Action: `Payment:Status`\n * Access Policy Resource: `Payment:Charge`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:ChargeItem:*,`FHIR:PaymentReconciliation:*`\n * Action: `FHIR:Read`\n * Access Policy Resources: `FHIR:Patient:*,FHIR:Encounter:*,FHIR:Coverage:*`\n */\n status(params: ChargeStatusParams, request?: SijilClientRequest): Promise<ChargeStatusResponse> {\n return this.request('/payment/charge/status', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import { Encounter as EncounterR4B } from 'fhir/r4b';\nimport { Encounter as EncounterR5 } from 'fhir/r5';\n\nexport const ENCOUNTER_VS_EXTENSION_URL = 'https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release';\nexport const ENCOUNTER_VS_EXTENSION_RELATIVE_URL = 'addressString';\nconst ENCOUNTER_VS_CODING_SYSTEM = 'https://fhir.zapehr.com/virtual-service-type';\n\nfunction isR5Encounter(encounter: EncounterR4B | EncounterR5): encounter is EncounterR5 {\n return Object.hasOwn(encounter as EncounterR5, 'virtualService');\n}\n\n/**\n * Helper function to get a conversationId from an encounter created as an Sijil Conversation\n * @param encounter well-formed FHIR R4B or R5 Encounter\n * @returns conversationId\n */\nexport function getConversationIdFromEncounter(encounter: EncounterR4B | EncounterR5): string | undefined {\n if (isR5Encounter(encounter)) {\n const virtualService = encounter.virtualService?.find(\n (vs) => vs.channelType?.system === ENCOUNTER_VS_CODING_SYSTEM\n );\n return virtualService?.addressString;\n }\n if (!encounter.extension) return;\n const virtualServiceExtension = encounter.extension.find((extension) => extension.url === ENCOUNTER_VS_EXTENSION_URL);\n if (!virtualServiceExtension?.extension) return;\n const conversationId = virtualServiceExtension.extension?.find(\n (extension) => extension.url === ENCOUNTER_VS_EXTENSION_RELATIVE_URL\n )?.valueString;\n return conversationId;\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n ConversationAddParticipantParams,\n ConversationCreateParams,\n ConversationCreateResponse,\n ConversationGetTokenResponse,\n ConversationMessageParams,\n ConversationRemoveParticipantParams,\n SijilClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\nimport * as ext from './conversation-ext';\n\nexport class Conversation extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n ENCOUNTER_VS_EXTENSION_URL = ext.ENCOUNTER_VS_EXTENSION_URL;\n ENCOUNTER_VS_EXTENSION_RELATIVE_URL = ext.ENCOUNTER_VS_EXTENSION_RELATIVE_URL;\n /**\n * Helper function to get a conversationId from an encounter created as an Sijil Conversation\n * @param encounter well-formed FHIR R4B or R5 Encounter\n * @returns conversationId\n */\n getConversationIdFromEncounter = ext.getConversationIdFromEncounter;\n /**\n * Create a new Conversation. [Conversations](https://docs.sijil.com/sijil/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:CreateConversation`\n * Access Policy Resource: `Messaging:Conversation`\n * Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:Encounter`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Encounter`\n */\n create(params: ConversationCreateParams, request?: SijilClientRequest): Promise<ConversationCreateResponse> {\n return this.request('/messaging/conversation', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get a Conversation Token. Conversation Tokens are used to join the Conversation with the Twilio Conversations SDKs. [Conversations](https://docs.sijil.com/sijil/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Action: `Messaging:GetConversationToken`\n * Access Policy Resource: `Messaging:Conversation`.\n */\n getToken(request?: SijilClientRequest): Promise<ConversationGetTokenResponse> {\n return this.request('/messaging/conversation/token', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Add a participant to a Conversation. [Conversations](https://docs.sijil.com/sijil/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:ConversationAddParticipant`\n * Access Policy Resource: `Messaging:Conversation`\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Encounter`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Encounter`\n */\n addParticipant(params: ConversationAddParticipantParams, request?: SijilClientRequest): Promise<void> {\n return this.request(\n '/messaging/conversation/{conversationId}/participant',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Remove a participant from a Conversation. [Conversations](https://docs.sijil.com/sijil/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:ConversationRemoveParticipant`\n * Access Policy Resource: `Messaging:Conversation`\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`, `FHIR:Practitioner`, or `FHIR:RelatedPerson`\n */\n removeParticipant(params: ConversationRemoveParticipantParams, request?: SijilClientRequest): Promise<void> {\n return this.request(\n '/messaging/conversation/{conversationId}/participant',\n 'delete',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Send a message to a Conversation. [Conversations](https://docs.sijil.com/sijil/services/messaging/conversations/) allow you to build multi-channel bi-directional messaging workflows. For example, you might create a Conversation where a provider messages with a patient through a web app, and the patient receives and responds to messages via SMS on their phone.\n *\n * Access Policy Requirements:\n * Action: `Messaging:ConversationSendMessage`\n * Access Policy Resource: `Messaging:Conversation`\n */\n message(params: ConversationMessageParams, request?: SijilClientRequest): Promise<void> {\n return this.request(\n '/messaging/conversation/{conversationId}/message',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n DeveloperDeleteParams,\n DeveloperGetParams,\n DeveloperGetResponse,\n DeveloperInviteParams,\n DeveloperInviteResponse,\n DeveloperListResponse,\n DeveloperListV2Params,\n DeveloperListV2Response,\n DeveloperUpdateParams,\n DeveloperUpdateResponse,\n SijilClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Developer extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get the Developer with the provided ID. Developer accounts are used to log into the [Developer Console](https://console.sijil.com/) and administrate [Projects](https://docs.sijil.com/sijil/services/project/). [Developers](https://docs.sijil.com/sijil/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:GetDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n get(params: DeveloperGetParams, request?: SijilClientRequest): Promise<DeveloperGetResponse> {\n return this.request('/developer/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Developer with the provided ID. Developer accounts are used to log into the [Developer Console](https://console.sijil.com/) and administrate [Projects](https://docs.sijil.com/sijil/services/project/). [Developers](https://docs.sijil.com/sijil/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:UpdateDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n update(params: DeveloperUpdateParams, request?: SijilClientRequest): Promise<DeveloperUpdateResponse> {\n return this.request('/developer/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Remove the Developer with the provided ID from the project. Developer accounts are used to log into the [Developer Console](https://console.sijil.com/) and administrate [Projects](https://docs.sijil.com/sijil/services/project/). [Developers](https://docs.sijil.com/sijil/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:RemoveDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n delete(params: DeveloperDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/developer/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Invite a new Developer to the Project. Developer accounts are used to log into the [Developer Console](https://console.sijil.com/) and administrate [Projects](https://docs.sijil.com/sijil/services/project/). [Developers](https://docs.sijil.com/sijil/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:InviteDeveloper`\n * Access Policy Resource: `IAM:Developer`\n */\n invite(params: DeveloperInviteParams, request?: SijilClientRequest): Promise<DeveloperInviteResponse> {\n return this.request('/developer/invite', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * DEPRECATED. Please use [v2/list](https://api-reference.sijil.com/reference/get_developer-v2-list) instead.\n *\n * Get a list of all Developers who are part of the Project. Developer accounts are used to log into the [Developer Console](https://console.sijil.com/) and administrate [Projects](https://docs.sijil.com/sijil/services/project/). [Developers](https://docs.sijil.com/sijil/services/iam/developers/) are the only people who can belong to and act across multiple Projects, because they exist above the Project level.\n *\n * Access Policy Action: `IAM:ListAllDevelopers`\n * Access Policy Resource: `IAM:Developer`\n */\n list(request?: SijilClientRequest): Promise<DeveloperListResponse> {\n return this.request('/developer', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get Developers in the Project with pagination, sort, sort order and filtering. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(params: DeveloperListV2Params, request?: SijilClientRequest): Promise<DeveloperListV2Response>;\n /**\n * Get Developers in the Project with pagination, sort, sort order and filtering. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(request?: SijilClientRequest): Promise<DeveloperListV2Response>;\n /**\n * Get Developers in the Project with pagination, sort, sort order and filtering. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(\n params?: DeveloperListV2Params | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<DeveloperListV2Response> {\n return this.request('/developer/v2/list', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n ErxAddPatientPharmacyParams,\n ErxCancelPrescriptionParams,\n ErxCheckAllergyInteractionsParams,\n ErxCheckAllergyInteractionsResponse,\n ErxCheckMedicationInteractionsParams,\n ErxCheckMedicationInteractionsResponse,\n ErxCheckPractitionerEnrollmentParams,\n ErxCheckPractitionerEnrollmentResponse,\n ErxCheckPrecheckInteractionsParams,\n ErxCheckPrecheckInteractionsResponse,\n ErxConnectPractitionerParams,\n ErxConnectPractitionerResponse,\n ErxEnrollPractitionerParams,\n ErxGetConfigurationResponse,\n ErxGetMedicationHistoryParams,\n ErxGetMedicationHistoryResponse,\n ErxGetMedicationParams,\n ErxGetMedicationResponse,\n ErxSearchAllergensParams,\n ErxSearchAllergensResponse,\n ErxSearchMedicationsParams,\n ErxSearchMedicationsResponse,\n ErxSearchPharmaciesParams,\n ErxSearchPharmaciesResponse,\n ErxSyncPatientParams,\n ErxUnenrollPractitionerParams,\n SijilClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Erx extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['erxApiUrl'] ?? 'https://erx-api.zapehr.com/v3';\n }\n /**\n * Search for allergens.\n * Action: `eRx:SearchAllergen`\n * Access Policy Resource: `eRx:Allergen`\n */\n searchAllergens(\n params: ErxSearchAllergensParams,\n request?: SijilClientRequest\n ): Promise<ErxSearchAllergensResponse> {\n return this.request('/allergen', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search for medications.\n * Action: `eRx:SearchMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n searchMedications(\n params: ErxSearchMedicationsParams,\n request?: SijilClientRequest\n ): Promise<ErxSearchMedicationsResponse> {\n return this.request('/medication', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get full medication details.\n * Action: `eRx:GetMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n getMedication(params: ErxGetMedicationParams, request?: SijilClientRequest): Promise<ErxGetMedicationResponse>;\n /**\n * Get full medication details.\n * Action: `eRx:GetMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n getMedication(request?: SijilClientRequest): Promise<ErxGetMedicationResponse>;\n /**\n * Get full medication details.\n * Action: `eRx:GetMedication`\n * Access Policy Resource: `eRx:Medication`\n */\n getMedication(\n params?: ErxGetMedicationParams | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<ErxGetMedicationResponse> {\n return this.request('/medication/details', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get eRx configuration for project.\n * Action: `eRx:GetConfiguration`\n * Access Policy Resource: `eRx:Configuration`\n */\n getConfiguration(request?: SijilClientRequest): Promise<ErxGetConfigurationResponse> {\n return this.request('/config', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Check for drug-allergy interactions for a patient. This endpoint requires the patient's allergies to be synced with the upstream eRx provider.\n * Action: `eRx:Check`\n * Access Policy Resource: `eRx:Interaction`\n */\n checkAllergyInteractions(\n params: ErxCheckAllergyInteractionsParams,\n request?: SijilClientRequest\n ): Promise<ErxCheckAllergyInteractionsResponse> {\n return this.request(\n '/patient/{patientId}/interactions/allergy',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Check for drug-drug interactions for a patient. This endpoint requires the patient's medications to be synced with the upstream eRx provider.\n * Action: `eRx:Check`\n * Access Policy Resource: `eRx:Interaction`\n */\n checkMedicationInteractions(\n params: ErxCheckMedicationInteractionsParams,\n request?: SijilClientRequest\n ): Promise<ErxCheckMedicationInteractionsResponse> {\n return this.request(\n '/patient/{patientId}/interactions/medication',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Check for drug-allergy and drug-drug interactions with a specific drug for a patient. This endpoint requires the patient's allergies and medications to be synced with the upstream eRx provider.\n * Action: `eRx:Check`\n * Access Policy Resource: `eRx:Interaction`\n */\n checkPrecheckInteractions(\n params: ErxCheckPrecheckInteractionsParams,\n request?: SijilClientRequest\n ): Promise<ErxCheckPrecheckInteractionsResponse> {\n return this.request(\n '/patient/{patientId}/interactions/precheck/{drugId}',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Retrieve claims-based medication history for a patient. This endpoint requires the patient to be synced with the upstream eRx provider.\n * Action: `eRx:GetMedicationHistory`\n * Access Policy Resource: `eRx:Patient`\n */\n getMedicationHistory(\n params: ErxGetMedicationHistoryParams,\n request?: SijilClientRequest\n ): Promise<ErxGetMedicationHistoryResponse> {\n return this.request(\n '/patient/{patientId}/medication-history',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Adds pharmacy for a patient with the upstream eRx provider, setting it as primary if specified.\n * Action: `eRx:AddPatientPharmacy`\n * Access Policy Resource: `eRx:Patient`\n */\n addPatientPharmacy(params: ErxAddPatientPharmacyParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/patient/{patientId}/pharmacies', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Cancel prescription for patient.\n * Action: `eRx:CancelPrescription`\n * Access Policy Resource: `eRx:Prescription`\n */\n cancelPrescription(params: ErxCancelPrescriptionParams, request?: SijilClientRequest): Promise<void> {\n return this.request(\n '/patient/{patientId}/prescriptions/{medicationRequestId}',\n 'delete',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Syncs demographic, allergy, and medication data for a patient with the upstream eRx provider.\n * Action: `eRx:SyncPatient`\n * Access Policy Resource: `eRx:Patient`\n */\n syncPatient(params: ErxSyncPatientParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/patient/{patientId}/sync', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search for pharmacies by a variety of criteria.\n * Action: `eRx:SearchPharmacy`\n * Access Policy Resource: `eRx:Pharmacy`\n */\n searchPharmacies(\n params: ErxSearchPharmaciesParams,\n request?: SijilClientRequest\n ): Promise<ErxSearchPharmaciesResponse>;\n /**\n * Search for pharmacies by a variety of criteria.\n * Action: `eRx:SearchPharmacy`\n * Access Policy Resource: `eRx:Pharmacy`\n */\n searchPharmacies(request?: SijilClientRequest): Promise<ErxSearchPharmaciesResponse>;\n /**\n * Search for pharmacies by a variety of criteria.\n * Action: `eRx:SearchPharmacy`\n * Access Policy Resource: `eRx:Pharmacy`\n */\n searchPharmacies(\n params?: ErxSearchPharmaciesParams | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<ErxSearchPharmaciesResponse> {\n return this.request('/pharmacy', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Create an SSO link for a practitioner. This link can be used to log in to the eRx service as the specified practitioner.\n * Action: `eRx:Connect`\n * Access Policy Resource: `eRx:SSO`\n */\n connectPractitioner(\n params: ErxConnectPractitionerParams,\n request?: SijilClientRequest\n ): Promise<ErxConnectPractitionerResponse>;\n /**\n * Create an SSO link for a practitioner. This link can be used to log in to the eRx service as the specified practitioner.\n * Action: `eRx:Connect`\n * Access Policy Resource: `eRx:SSO`\n */\n connectPractitioner(request?: SijilClientRequest): Promise<ErxConnectPractitionerResponse>;\n /**\n * Create an SSO link for a practitioner. This link can be used to log in to the eRx service as the specified practitioner.\n * Action: `eRx:Connect`\n * Access Policy Resource: `eRx:SSO`\n */\n connectPractitioner(\n params?: ErxConnectPractitionerParams | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<ErxConnectPractitionerResponse> {\n return this.request('/practitioner/connect', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Check eRx enrollment and notifications for a practitioner.\n * Action: `eRx:Read`\n * Access Policy Resource: `eRx:Enrollment`\n */\n checkPractitionerEnrollment(\n params: ErxCheckPractitionerEnrollmentParams,\n request?: SijilClientRequest\n ): Promise<ErxCheckPractitionerEnrollmentResponse> {\n return this.request('/practitioner/{practitionerId}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Enroll a practitioner in the eRx service.\n * Action: `eRx:Create`\n * Access Policy Resource: `eRx:Enrollment`\n */\n enrollPractitioner(params: ErxEnrollPractitionerParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/practitioner/{practitionerId}', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Unenroll a practitioner from the eRx service.\n * Action: `eRx:Delete`\n * Access Policy Resource: `eRx:Enrollment`\n */\n unenrollPractitioner(params: ErxUnenrollPractitionerParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/practitioner/{practitionerId}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n FaxGetConfigurationResponse,\n FaxOnboardResponse,\n FaxSendParams,\n FaxSendResponse,\n SijilClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Fax extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['faxApiUrl'] ?? 'https://fax-api.zapehr.com/v1';\n }\n /**\n * Offboard a fax number. Sijil's [offboard](https://docs.sijil.com/sijil/services/fax/number/) feature makes it easy to stop using the fax service and release the project's assigned fax number with a single API call. Please note there is no way to guarantee getting the same number back again, so if you think this can break your project in any way we recommend not offboarding and avoid sending faxes until you're sure.\n *\n * Access Policy Requirements:\n * Action: `Fax:Offboard`\n * Access Policy Resource: `Fax:Number`\n */\n offboard(request?: SijilClientRequest): Promise<void> {\n return this.request('/offboard', 'post', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Onboard a fax number. Sijil's [onboard](https://docs.sijil.com/sijil/services/fax/number/) feature makes it easy to start using the fax service and purchase a new fax number for your project with a single API call.\n *\n * Access Policy Requirements:\n * Action: `Fax:Onboard`\n * Access Policy Resource: `Fax:Number`\n */\n onboard(request?: SijilClientRequest): Promise<FaxOnboardResponse> {\n return this.request('/onboard', 'post', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get fax service configuration.\n *\n * Access Policy Requirements:\n * Action: `Fax:GetConfiguration`\n * Access Policy Resource: `Fax:Configuration`\n */\n getConfiguration(request?: SijilClientRequest): Promise<FaxGetConfigurationResponse> {\n return this.request('/config', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Send a fax. Sijil's [fax sending](https://docs.sijil.com/sijil/services/fax/send/) feature makes it easy to send a fax to a chosen recipient with a single API call. You can use this feature to send referrals, medical records, prescriptions, and other documents that require fax transmission e.g. for HIPAA compliance.\n *\n * Access Policy Requirements:\n * Action: `Fax:Send`\n * Access Policy Resource: `Fax:Fax`\n */\n send(params: FaxSendParams, request?: SijilClientRequest): Promise<FaxSendResponse> {\n return this.request('/send', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import type { Operation } from 'fast-json-patch';\nimport { Address as AddressR4B, HumanName as HumanNameR4B } from 'fhir/r4b';\nimport { Address as AddressR5, HumanName as HumanNameR5 } from 'fhir/r5';\nimport {\n BatchBundle,\n BatchInput,\n BatchInputRequest,\n Binary,\n Bundle,\n BundleEntry,\n Coding,\n FhirAsyncJobHandle,\n FhirAsyncJobStatus,\n FhirAsyncWaitOptions,\n FhirBundle,\n FhirCreateParams,\n FhirDeleteParams,\n FhirGetParams,\n FhirHistoryGetParams,\n FhirHistorySearchParams,\n FhirPatchParams,\n FhirResource,\n FhirResourceReturnValue,\n FhirResponseMode,\n FhirSearchParams,\n FhirUpdateParams,\n GenerateFriendlyPatientIdParams,\n OperationOutcome,\n Resource,\n SearchParam,\n TransactionBundle,\n} from '../..';\nimport { addParamsToSearch, FhirFetcherResponse, SijilClientRequest, SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\nimport { SijilFHIRError, SijilSdkError } from '../../errors';\n\n// Code adapted from https://github.com/sindresorhus/uint8array-extras\nconst MAX_BLOCK_SIZE = 65_535;\nfunction stringToBase64(input: string): string {\n const data = new globalThis.TextEncoder().encode(input);\n let base64 = '';\n\n for (let index = 0; index < data.length; index += MAX_BLOCK_SIZE) {\n const chunk = data.subarray(index, index + MAX_BLOCK_SIZE);\n // Required as `btoa` and `atob` don't properly support Unicode: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n base64 += globalThis.btoa(String.fromCodePoint.apply(undefined, chunk as unknown as number[]));\n }\n return base64;\n}\n\nfunction base64ToString(input: string): string {\n const binaryString = globalThis.atob(input);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return new globalThis.TextDecoder().decode(bytes);\n}\n\n// \u2500\u2500\u2500 Tag-mode helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Converts a Coding to the FHIR _tag parameter value format \"system|code\". */\nfunction codingToTagValue(coding: Coding): string {\n return coding.system ? `${coding.system}|${coding.code ?? ''}` : coding.code ?? '';\n}\n\n/** Returns true if two Codings match on system (treating absent as empty string) and code. */\nfunction codingMatches(a: Coding, b: Coding): boolean {\n return (a.system ?? '') === (b.system ?? '') && (a.code ?? '') === (b.code ?? '');\n}\n\n/**\n * Appends _tag (tag-workspace mode) or _tag:not (ignore-tags mode) search\n * params to an existing SearchParam array and returns the new array.\n */\nfunction applyTagSearchParams(config: SijilConfig, params: SearchParam[] | undefined): SearchParam[] {\n const out: SearchParam[] = params ? [...params] : [];\n if (config.workspaceTag) {\n out.push({ name: '_tag', value: codingToTagValue(config.workspaceTag) });\n } else if (config.ignoreTags?.length) {\n for (const tag of config.ignoreTags) {\n out.push({ name: '_tag:not', value: codingToTagValue(tag) });\n }\n }\n return out;\n}\n\n/**\n * In ignore-tags mode: throws SijilSdkError if the resource carries any ignored tag.\n * In tag-workspace mode: injects the workspace tag into resource.meta.tag if not already present.\n * Returns the (possibly cloned) resource.\n */\nfunction applyTagToResource<T extends FhirResource>(config: SijilConfig, resource: T): T {\n const resourceLike = resource as unknown as Resource;\n\n if (config.ignoreTags?.length) {\n const resourceTags = (resourceLike.meta?.tag ?? []) as Coding[];\n for (const ignored of config.ignoreTags) {\n if (resourceTags.some((t) => codingMatches(t, ignored))) {\n throw new SijilSdkError({\n message: `Resource has an ignored tag (system: \"${ignored.system ?? ''}\", code: \"${\n ignored.code ?? ''\n }\") and cannot be mutated in ignoreTags mode`,\n code: 400,\n });\n }\n }\n return resource;\n }\n\n if (config.workspaceTag) {\n const tag = config.workspaceTag;\n const existingTags = (resourceLike.meta?.tag ?? []) as Coding[];\n if (!existingTags.some((t) => codingMatches(t, tag))) {\n return {\n ...resource,\n meta: {\n ...resourceLike.meta,\n tag: [...existingTags, tag],\n },\n } as T;\n }\n }\n\n return resource;\n}\n\n/**\n * In ignore-tags mode: throws SijilSdkError if any operation value resembles an ignored tag.\n * In tag-workspace mode: guards against removal or loss of the workspace tag:\n * - add/replace of the tag array: ensures workspace tag is present in the value\n * - add/replace of meta: ensures workspace tag is present in meta.tag\n * - remove of /meta/tag or /meta: keeps the remove and appends an operation to restore the workspace tag\n * - add of a single tag (path ends in /-): left unchanged (workspace tag already on the resource)\n */\nfunction applyTagToPatchOperations(config: SijilConfig, operations: Operation[]): Operation[] {\n if (config.ignoreTags?.length) {\n for (const op of operations) {\n if (op.op === 'add' || op.op === 'replace' || op.op === 'test') {\n const opValue: unknown = op.value;\n if (opValue !== null && opValue !== undefined && typeof opValue === 'object') {\n const v = opValue as Coding;\n if (v.code !== undefined) {\n for (const ignored of config.ignoreTags) {\n if (codingMatches(v, ignored)) {\n throw new SijilSdkError({\n message: `Patch operation contains an ignored tag (system: \"${ignored.system ?? ''}\", code: \"${\n ignored.code ?? ''\n }\") and cannot be applied in ignoreTags mode`,\n code: 400,\n });\n }\n }\n }\n }\n }\n }\n return operations;\n }\n\n if (config.workspaceTag) {\n const tag = config.workspaceTag;\n return operations.reduce<Operation[]>((result, op) => {\n // remove /meta/tag \u2014 restore workspace tag afterwards\n if (op.op === 'remove' && op.path === '/meta/tag') {\n result.push(op);\n result.push({ op: 'add' as const, path: '/meta/tag', value: [tag] });\n return result;\n }\n\n // remove /meta \u2014 restore workspace tag afterwards\n if (op.op === 'remove' && op.path === '/meta') {\n result.push(op);\n result.push({ op: 'add' as const, path: '/meta', value: { tag: [tag] } });\n return result;\n }\n\n // add/replace the entire tag array \u2014 ensure workspace tag is present\n if ((op.op === 'add' || op.op === 'replace') && op.path === '/meta/tag') {\n const tags: Coding[] = Array.isArray(op.value) ? (op.value as Coding[]) : [];\n if (!tags.some((t) => codingMatches(t, tag))) {\n result.push({ ...op, value: [...tags, tag] });\n } else {\n result.push(op);\n }\n return result;\n }\n\n // add/replace the entire meta object \u2014 ensure workspace tag is present in meta.tag\n if ((op.op === 'add' || op.op === 'replace') && op.path === '/meta') {\n const metaValue: { tag?: Coding[] } =\n op.value != null && typeof op.value === 'object' ? (op.value as { tag?: Coding[] }) : {};\n const tags = metaValue.tag ?? [];\n if (!tags.some((t) => codingMatches(t, tag))) {\n result.push({ ...op, value: { ...metaValue, tag: [...tags, tag] } });\n } else {\n result.push(op);\n }\n return result;\n }\n\n // All other operations (including add /meta/tag/- for individual tags) pass through unchanged.\n // Workspace tag is assumed already present on the resource from create/update.\n result.push(op);\n return result;\n }, []);\n }\n\n return operations;\n}\n\n/**\n * Throws SijilFHIRError (404) if the retrieved resource violates the tag configuration:\n * - workspaceTag mode: resource must carry the workspace tag\n * - ignoreTags mode: resource must not carry any ignored tag\n */\nfunction assertRetrievedResource(config: SijilConfig, resource: FhirResource): void {\n const resourceLike = resource as unknown as Resource;\n const resourceTags = (resourceLike.meta?.tag ?? []) as Coding[];\n\n if (config.workspaceTag) {\n const tag = config.workspaceTag;\n if (!resourceTags.some((t) => codingMatches(t, tag))) {\n throw new SijilFHIRError({\n error: {\n resourceType: 'OperationOutcome',\n id: 'not-found',\n issue: [{ severity: 'error', code: 'not-found', details: { text: 'Not found' } }],\n },\n code: 404,\n });\n }\n return;\n }\n\n if (config.ignoreTags?.length) {\n for (const ignored of config.ignoreTags) {\n if (resourceTags.some((t) => codingMatches(t, ignored))) {\n throw new SijilFHIRError({\n error: {\n resourceType: 'OperationOutcome',\n id: 'not-found',\n issue: [{ severity: 'error', code: 'not-found', details: { text: 'Not found' } }],\n },\n code: 404,\n });\n }\n }\n }\n}\n\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Optional parameter that can be passed to the client methods. It allows\n * overriding the access token or project ID, and setting various headers,\n * such as 'Content-Type'. Also support enabling optimistic locking.\n */\nexport interface SijilFHIRUpdateClientRequest extends SijilClientRequest {\n /**\n * Enable optimistic locking for the request. If set to a version ID, the request will\n * include the 'If-Match' header with that value in the FHIR optimistic-locking format.\n * If the resource has been updated since the version provided, the request\n * will fail with a 412 Precondition Failed error.\n */\n optimisticLockingVersionId?: string;\n}\n\nfunction isAsyncRequestMode(mode: FhirResponseMode | undefined): mode is Exclude<FhirResponseMode, 'sync'> {\n return mode === 'async-bundle' || mode === 'async-bulk';\n}\n\n/**\n * Performs a FHIR search and returns the results as a Bundle resource\n *\n * @param options FHIR resource type and FHIR search parameters\n * @param request optional SijilClientRequest object\n * @returns FHIR Bundle resource\n */\nexport async function search<T extends FhirResource>(\n this: SDKResource,\n params: FhirSearchParams<T>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function search<T extends FhirResource>(\n this: SDKResource,\n params: FhirSearchParams<T>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<Bundle<T>>>;\nexport async function search<T extends FhirResource>(\n this: SDKResource,\n params: FhirSearchParams<T>,\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<Bundle<T>> | FhirAsyncJobHandle> {\n const { resourceType } = params;\n const taggedParams = applyTagSearchParams(this.config, params.params);\n let paramMap: Record<string, (string | number)[]> | undefined;\n if (taggedParams.length) {\n paramMap = taggedParams.reduce((acc, param) => {\n if (!acc[param.name]) {\n acc[param.name] = [];\n }\n acc[param.name].push(param.value);\n return acc;\n }, {} as Record<string, (string | number)[]>);\n }\n\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(`/${resourceType}/_search`, 'POST', paramMap ?? {}, requestMode, {\n ...request,\n contentType: 'application/x-www-form-urlencoded',\n });\n }\n\n const requestBundle = await this.fhirRequest<FhirBundle<T>>(`/${resourceType}/_search`, 'POST')(paramMap, {\n ...request,\n contentType: 'application/x-www-form-urlencoded',\n });\n const bundle: Bundle<T> = {\n ...requestBundle,\n entry: requestBundle.entry as Array<BundleEntry<T>> | undefined,\n unbundle: function (this: { entry?: Array<BundleEntry<T>> | undefined }) {\n return (\n this.entry?.map((entry) => entry.resource).filter((resource): resource is T => resource !== undefined) ?? []\n );\n },\n };\n return bundle;\n}\n\nexport async function create<T extends FhirResource>(\n this: SDKResource,\n params: FhirCreateParams<T>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function create<T extends FhirResource>(\n this: SDKResource,\n params: FhirCreateParams<T>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function create<T extends FhirResource>(\n this: SDKResource,\n params: FhirCreateParams<T>,\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const tagged = applyTagToResource(this.config, params);\n const { resourceType } = tagged;\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(\n `/${resourceType}`,\n 'POST',\n tagged as unknown as Record<string, unknown>,\n requestMode,\n request\n );\n }\n\n return await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}`, 'POST')(\n tagged as unknown as Record<string, unknown>,\n request\n );\n}\n\nexport async function get<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirGetParams<T>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function get<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirGetParams<T>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function get<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirGetParams<T>,\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(`/${resourceType}/${id}`, 'GET', {}, requestMode, request);\n }\n\n const result = await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'GET')({}, request);\n assertRetrievedResource(this.config, result);\n return result;\n}\n\nexport async function update<T extends FhirResource>(\n this: SDKResource,\n params: FhirUpdateParams<T>,\n request: SijilFHIRUpdateClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function update<T extends FhirResource>(\n this: SDKResource,\n params: FhirUpdateParams<T>,\n request?: SijilFHIRUpdateClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function update<T extends FhirResource>(\n this: SDKResource,\n params: FhirUpdateParams<T>,\n request?: SijilFHIRUpdateClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const tagged = applyTagToResource(this.config, params);\n const { id, resourceType } = tagged;\n const requestMode = request?.mode;\n const ifMatchRequest = {\n ...request,\n ifMatch: request?.optimisticLockingVersionId ? `W/\"${request.optimisticLockingVersionId}\"` : undefined,\n };\n\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(\n `/${resourceType}/${id}`,\n 'PUT',\n tagged as unknown as Record<string, unknown>,\n requestMode,\n ifMatchRequest\n );\n }\n\n return await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'PUT')(\n tagged as unknown as Record<string, unknown>,\n ifMatchRequest\n );\n}\n\nexport async function patch<T extends FhirResource>(\n this: SDKResource,\n params: FhirPatchParams<T>,\n request: SijilFHIRUpdateClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function patch<T extends FhirResource>(\n this: SDKResource,\n params: FhirPatchParams<T>,\n request?: SijilFHIRUpdateClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nexport async function patch<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, operations }: FhirPatchParams<T>,\n request?: SijilFHIRUpdateClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const taggedOperations = applyTagToPatchOperations(this.config, operations);\n const requestMode = request?.mode;\n const ifMatchRequest = {\n ...request,\n ifMatch: request?.optimisticLockingVersionId ? `W/\"${request.optimisticLockingVersionId}\"` : undefined,\n };\n\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(\n `/${resourceType}/${id}`,\n 'PATCH',\n taggedOperations as unknown as Record<string, unknown>,\n requestMode,\n {\n ...ifMatchRequest,\n contentType: 'application/json-patch+json',\n }\n );\n }\n\n return this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'PATCH')(taggedOperations, {\n ...ifMatchRequest,\n contentType: 'application/json-patch+json',\n });\n}\n\nasync function del<T extends FhirResource>(\n this: SDKResource,\n params: FhirDeleteParams<T>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nasync function del<T extends FhirResource>(\n this: SDKResource,\n params: FhirDeleteParams<T>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>>>;\nasync function del<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirDeleteParams<T>,\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<FhirResourceReturnValue<T>> | FhirAsyncJobHandle> {\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob(`/${resourceType}/${id}`, 'DELETE', {}, requestMode, request);\n }\n\n return await this.fhirRequest<FhirResourceReturnValue<T>>(`/${resourceType}/${id}`, 'DELETE')({}, request);\n}\nexport { del as delete };\n\nfunction getRetryDelayMs(retryAfter: string | undefined, fallbackMs: number): number {\n if (!retryAfter) {\n return fallbackMs;\n }\n\n const asSeconds = Number(retryAfter);\n if (Number.isFinite(asSeconds) && asSeconds >= 0) {\n return Math.max(0, Math.floor(asSeconds * 1000));\n }\n\n const asTimestamp = Date.parse(retryAfter);\n if (Number.isFinite(asTimestamp)) {\n return Math.max(0, asTimestamp - Date.now());\n }\n\n return fallbackMs;\n}\n\nexport async function getAsyncJob<T extends FhirResource>(\n this: SDKResource,\n jobId: string,\n request?: SijilClientRequest\n): Promise<FhirAsyncJobStatus<T>> {\n return await this.fetchAsyncJobStatus<T>(jobId, request);\n}\n\nexport async function waitForAsyncJob<T extends FhirResource>(\n this: SDKResource,\n jobId: string,\n options?: FhirAsyncWaitOptions,\n request?: SijilClientRequest\n): Promise<FhirAsyncJobStatus<T>> {\n // 5 seconds poll interval by default\n const pollIntervalMs = options?.pollIntervalMs ?? 5000;\n // 15 minutes timout by default\n const timeoutMs = options?.timeoutMs ?? 900000;\n const attempts = Math.max(1, Math.ceil(timeoutMs / pollIntervalMs));\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n const status = await this.fetchAsyncJobStatus<T>(jobId, request);\n if (status.status !== 202) {\n return status;\n }\n\n if (attempt < attempts - 1) {\n const retryAfter = 'retryAfter' in status ? status.retryAfter : undefined;\n await new Promise((resolve) => setTimeout(resolve, getRetryDelayMs(retryAfter, pollIntervalMs)));\n }\n }\n\n throw new SijilSdkError({\n message: `Async job ${jobId} did not complete within ${timeoutMs} ms`,\n code: 408,\n });\n}\n\nexport async function cancelAsyncJob(this: SDKResource, jobId: string, request?: SijilClientRequest): Promise<void> {\n await this.fhirRequest(`/async-job/${jobId}`, 'DELETE')({}, request);\n}\n\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirHistorySearchParams<T>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, versionId }: FhirHistoryGetParams<T>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, versionId }: FhirHistoryGetParams<T>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<T>>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id }: FhirHistorySearchParams<T>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<Bundle<T>>>;\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n { resourceType, id, count, offset }: FhirHistorySearchParams<T>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<Bundle<T>>>;\n\nexport async function history<T extends FhirResource>(\n this: SDKResource,\n {\n resourceType,\n id,\n versionId,\n count,\n offset,\n }: { resourceType: string; id: string; versionId?: string; count?: number; offset?: number },\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<Bundle<T>> | FhirFetcherResponse<T> | FhirAsyncJobHandle> {\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n if (versionId) {\n return await this.startAsyncJob(`/${resourceType}/${id}/_history/${versionId}`, 'GET', {}, requestMode, request);\n }\n return await this.startAsyncJob(`/${resourceType}/${id}/_history`, 'GET', {}, requestMode, request);\n }\n\n if (versionId) {\n return this.fhirRequest<T>(`/${resourceType}/${id}/_history/${versionId}`, 'GET')({}, request);\n }\n if (count) {\n return this.fhirRequest<Bundle<T>>(\n `/${resourceType}/${id}/_history?_total=accurate&_count=${count}\n ${offset ? `&_offset=${offset}` : ''}`,\n 'GET'\n )({}, request);\n }\n return this.fhirRequest<Bundle<T>>(`/${resourceType}/${id}/_history?_total=accurate`, 'GET')({}, request);\n}\n\n/**\n * Returns true when a batch GET/HEAD URL is a search (e.g. \"Patient\" or \"Patient?name=foo\")\n * rather than a direct retrieval (e.g. \"Patient/abc-123\").\n * A retrieval URL has a path segment after the resource type that is not a FHIR operation\n * (operations start with \"_\", e.g. \"_search\" or \"_history\").\n */\nfunction isBatchSearchUrl(url: string): boolean {\n const path = url.split('?')[0];\n const segments = path.split('/').filter(Boolean);\n // Only one segment \u2192 bare resource type, always a search\n if (segments.length <= 1) return true;\n // Two or more segments: second segment is an ID if it doesn't start with '_'\n return segments[1].startsWith('_');\n}\n\n/** Returns true when a batch POST URL targets a `_search` endpoint (e.g. \"Patient/_search\"). */\nfunction isBatchSearchPostUrl(url: string): boolean {\n return url.split('?')[0].endsWith('/_search');\n}\n\nfunction batchInputRequestToBundleEntryItem<T extends FhirResource>(\n request: BatchInputRequest<T>,\n config: SijilConfig\n): BundleEntry<T | Binary<T>> {\n const { method } = request;\n let url = request.url;\n\n // Inject tag search params into search request URLs before URL encoding.\n // GET/HEAD: only for search URLs (not retrievals like Patient/<id>).\n // POST: only for _search endpoints (not creates).\n if (\n ((method === 'GET' || method === 'HEAD') && isBatchSearchUrl(url)) ||\n (method === 'POST' && isBatchSearchPostUrl(url))\n ) {\n if (config.workspaceTag) {\n url += (url.includes('?') ? '&' : '?') + `_tag=${codingToTagValue(config.workspaceTag)}`;\n }\n if (config.ignoreTags?.length) {\n for (const tag of config.ignoreTags) {\n url += (url.includes('?') ? '&' : '?') + `_tag:not=${codingToTagValue(tag)}`;\n }\n }\n }\n\n const baseRequest = {\n request: {\n method,\n url,\n },\n };\n\n // Escape query string parameters in entry.request.url\n if (url.split('?').length > 1) {\n const [resource, query] = url.split('?');\n const params = query\n .split('&')\n .map((param) => {\n const [name, value] = param.split('=');\n return { name, value };\n })\n .reduce((acc, { name, value }) => {\n if (!name) {\n return acc;\n }\n if (!acc[name]) {\n acc[name] = [];\n }\n acc[name].push(value);\n return acc;\n }, {} as Record<string, string[]>);\n const search = new URLSearchParams();\n addParamsToSearch(params, search);\n baseRequest.request.url = `${resource}?${search.toString()}`;\n }\n\n // GET, DELETE, and HEAD require no further parameters\n if (['GET', 'DELETE', 'HEAD'].includes(method)) {\n return baseRequest as BundleEntry<T>;\n }\n\n // PUT updates require a full resource\n if (method === 'PUT') {\n const resource = applyTagToResource(config, request.resource);\n return {\n request: {\n ...baseRequest.request,\n ifMatch: request.ifMatch,\n },\n resource: resource as T,\n } as BundleEntry<T>;\n }\n\n // PATCH can be Binary resource or JSON patch\n if (method === 'PATCH') {\n if ('resource' in request) {\n // Binary patch \u2014 decode operations, apply tag transforms, re-encode\n let patchResource = request.resource;\n const binaryData = patchResource.data;\n if (binaryData) {\n const operations = JSON.parse(base64ToString(binaryData)) as Operation[];\n const taggedOperations = applyTagToPatchOperations(config, operations);\n patchResource = { ...patchResource, data: stringToBase64(JSON.stringify(taggedOperations)) } as Binary<T>;\n }\n return {\n request: {\n ...baseRequest.request,\n ifMatch: request.ifMatch,\n },\n resource: patchResource,\n } as BundleEntry<Binary<T>>;\n }\n const operations = applyTagToPatchOperations(config, request.operations);\n const data = stringToBase64(JSON.stringify(operations));\n return {\n ...baseRequest,\n resource: {\n resourceType: 'Binary',\n contentType: 'application/json-patch+json',\n data,\n },\n } as BundleEntry<Binary<T>>;\n }\n\n // POST _search \u2014 no resource body; tag params were already injected into the URL above\n if (method === 'POST' && isBatchSearchPostUrl(url)) {\n return baseRequest as BundleEntry<T>;\n }\n\n // POST creates require a full resource\n if (method === 'POST' && 'resource' in request) {\n const resource = applyTagToResource(config, request.resource);\n const { fullUrl } = request;\n return {\n ...baseRequest,\n resource: resource as T,\n fullUrl,\n } as BundleEntry<T>;\n }\n\n // // Add ifMatch for the entries that support it\n // if ('ifMatch' in request) {\n // baseRequest.request = {\n // ...baseRequest.request,\n // ifMatch: request.ifMatch,\n // };\n // }\n\n throw new Error('Unrecognized method');\n}\n\nexport async function batch<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function batch<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<BatchBundle<BundleContentType>>>;\nexport async function batch<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<BatchBundle<BundleContentType>> | FhirAsyncJobHandle> {\n const requestPayload = {\n resourceType: 'Bundle',\n type: 'batch',\n entry: input.requests.map((req) => batchInputRequestToBundleEntryItem(req, this.config)),\n };\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob('/', 'POST', requestPayload, requestMode, request);\n }\n\n const resp = await this.fhirRequest<BatchBundle<BundleContentType>>('/', 'POST')(requestPayload, request);\n // Validate each GET/HEAD retrieval entry against the tag config.\n // Violations are replaced with a synthetic 404 OperationOutcome entry; batch entries are independent.\n const rawEntries = resp.entry as Array<BundleEntry<BundleContentType>> | undefined;\n const processedEntries: Array<BundleEntry<BundleContentType>> | undefined =\n this.config.workspaceTag || this.config.ignoreTags?.length\n ? rawEntries?.map((entry, i) => {\n const req = input.requests[i];\n if (!req || !entry?.resource) return entry;\n if ((req.method === 'GET' || req.method === 'HEAD') && !isBatchSearchUrl(req.url)) {\n try {\n assertRetrievedResource(this.config, entry.resource);\n } catch (err) {\n if (!(err instanceof SijilFHIRError)) throw err;\n return {\n request: entry.request,\n response: { status: '404', outcome: err.cause },\n } as unknown as BundleEntry<BundleContentType>;\n }\n }\n return entry;\n })\n : rawEntries;\n const bundle: BatchBundle<BundleContentType> = {\n ...resp,\n entry: processedEntries,\n unbundle: function (this: { entry?: Array<BundleEntry<BundleContentType>> | undefined }) {\n return (\n this.entry\n ?.map((entry) => entry.resource)\n .filter((resource): resource is BundleContentType => resource !== undefined) ?? []\n );\n },\n errors: function (this: { entry?: Array<BundleEntry<BundleContentType>> | undefined }) {\n return this.entry\n ?.filter((entry) => entry.response?.status?.startsWith('4') || entry.response?.status?.startsWith('5'))\n .map((entry) => entry.response?.outcome)\n .filter((outcome): outcome is OperationOutcome => outcome !== undefined);\n },\n };\n return bundle;\n}\n\nexport async function transaction<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request: SijilClientRequest & { mode: Exclude<FhirResponseMode, 'sync'> }\n): Promise<FhirAsyncJobHandle>;\nexport async function transaction<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: SijilClientRequest & { mode?: 'sync' | undefined }\n): Promise<FhirFetcherResponse<TransactionBundle<BundleContentType>>>;\nexport async function transaction<BundleContentType extends FhirResource>(\n this: SDKResource,\n input: BatchInput<BundleContentType>,\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<TransactionBundle<BundleContentType>> | FhirAsyncJobHandle> {\n const requestPayload = {\n resourceType: 'Bundle',\n type: 'transaction',\n entry: input.requests.map((req) => batchInputRequestToBundleEntryItem(req, this.config)),\n };\n const requestMode = request?.mode;\n if (isAsyncRequestMode(requestMode)) {\n return await this.startAsyncJob('/', 'POST', requestPayload, requestMode, request);\n }\n\n const resp = await this.fhirRequest<TransactionBundle<BundleContentType>>('/', 'POST')(requestPayload, request);\n // Validate each GET/HEAD retrieval entry against the tag config.\n // A violation throws SijilFHIRError(404) \u2014 transactions are all-or-nothing.\n if (this.config.workspaceTag || this.config.ignoreTags?.length) {\n (resp.entry as Array<BundleEntry<BundleContentType>> | undefined)?.forEach((entry, i) => {\n const req = input.requests[i];\n if (!req || !entry?.resource) return;\n if ((req.method === 'GET' || req.method === 'HEAD') && !isBatchSearchUrl(req.url)) {\n assertRetrievedResource(this.config, entry.resource);\n }\n });\n }\n const bundle: TransactionBundle<BundleContentType> = {\n ...resp,\n entry: resp.entry as Array<BundleEntry<BundleContentType>> | undefined,\n unbundle: function (this: { entry?: Array<BundleEntry<BundleContentType>> | undefined }) {\n return (\n this.entry\n ?.map((entry) => entry.resource)\n .filter((resource): resource is BundleContentType => resource !== undefined) ?? []\n );\n },\n };\n return bundle;\n}\n\nexport async function generateFriendlyPatientId(\n this: SDKResource,\n { id }: GenerateFriendlyPatientIdParams,\n request?: SijilClientRequest\n): Promise<FhirFetcherResponse<FhirResource>> {\n return this.fhirRequest(`/Patient/${id}/$generate-friendly-patient-id`, 'POST')({}, request);\n}\n\nexport function formatAddress(\n address: AddressR4B | AddressR5,\n options?: { all?: boolean; use?: boolean; lineSeparator?: string }\n): string {\n const builder = [];\n\n if (address.line) {\n builder.push(...address.line);\n }\n\n if (address.city || address.state || address.postalCode) {\n const cityStateZip = [];\n if (address.city) {\n cityStateZip.push(address.city);\n }\n if (address.state) {\n cityStateZip.push(address.state);\n }\n if (address.postalCode) {\n cityStateZip.push(address.postalCode);\n }\n builder.push(cityStateZip.join(', '));\n }\n\n if (address.use && (options?.all || options?.use)) {\n builder.push('[' + address.use + ']');\n }\n\n return builder.join(options?.lineSeparator || ', ').trim();\n}\n\nexport function formatHumanName(\n name: HumanNameR4B | HumanNameR5,\n options?: {\n all?: boolean;\n prefix?: boolean;\n suffix?: boolean;\n use?: boolean;\n }\n): string {\n const builder = [];\n\n if (name.prefix && options?.prefix !== false) {\n builder.push(...name.prefix);\n }\n\n if (name.given) {\n builder.push(...name.given);\n }\n\n if (name.family) {\n builder.push(name.family);\n }\n\n if (name.suffix && options?.suffix !== false) {\n builder.push(...name.suffix);\n }\n\n if (name.use && (options?.all || options?.use)) {\n builder.push('[' + name.use + ']');\n }\n\n return builder.join(' ').trim();\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\nimport * as ext from './fhir-ext';\n\nexport class Fhir extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['fhirApiUrl'] ?? 'https://fhir-api.zapehr.com';\n }\n /**\n * Performs a FHIR search and returns the results as a Bundle resource\n * @param options FHIR resource type and FHIR search parameters\n * @param request optional SijilClientRequest object\n * @returns FHIR Bundle resource\n */\n search = ext.search;\n create = ext.create;\n get = ext.get;\n getAsyncJob = ext.getAsyncJob;\n waitForAsyncJob = ext.waitForAsyncJob;\n cancelAsyncJob = ext.cancelAsyncJob;\n update = ext.update;\n patch = ext.patch;\n delete = ext.delete;\n history = ext.history;\n batch = ext.batch;\n transaction = ext.transaction;\n generateFriendlyPatientId = ext.generateFriendlyPatientId;\n formatAddress = ext.formatAddress;\n formatHumanName = ext.formatHumanName;\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n LabOrderableItemListParams,\n LabOrderableItemListResponse,\n LabOrderableItemQuestionnaireGetParams,\n LabOrderableItemQuestionnaireGetResponse,\n LabOrderSubmitParams,\n LabOrderSubmitResponse,\n LabRouteCreateParams,\n LabRouteCreateResponse,\n LabRouteDeleteParams,\n LabRouteGetParams,\n LabRouteGetResponse,\n LabRouteListResponse,\n SijilClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Lab extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['labApiUrl'] ?? 'https://labs-api.zapehr.com/v1';\n }\n /**\n * Gets a list of Routes associated with the project. Returns an empty list if no Routes are found.\n *\n * Access Policy Requirements:\n * Action: `Lab:GetRoutes`\n * Access Policy Resource: `Lab:Route`\n */\n routeList(request?: SijilClientRequest): Promise<LabRouteListResponse> {\n return this.request('/route', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a route. A Route represents that a lab and particular customer have a relationship, and a Route is necessary to submit an order to a lab. See [Route](https://docs.sijil.com/sijil/services/lab/onboarding-a-lab/#create-route) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:CreateRoute`\n * Access Policy Resource: `Lab:Route`\n */\n routeCreate(params: LabRouteCreateParams, request?: SijilClientRequest): Promise<LabRouteCreateResponse> {\n return this.request('/route', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Gets a Route associated with the project by specified Guid.\n *\n * Access Policy Requirements:\n * Action: `Lab:GetSingleRoute`\n * Access Policy Resource: `Lab:Route`\n */\n routeGet(params: LabRouteGetParams, request?: SijilClientRequest): Promise<LabRouteGetResponse> {\n return this.request('/route/{routeGuid}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete a route. Deleting a Route will permanently remove the `routeGuid`. Orders can no longer be submitted to this lab until a new Route is created. See [Route](https://docs.sijil.com/sijil/services/lab/onboarding-a-lab/#delete-route) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:DeleteRoute`\n * Access Policy Resource: `Lab:Route`\n */\n routeDelete(params: LabRouteDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/route/{routeGuid}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Returns list of active orderable items for the latest compendium version. Page size is default 25 and max 100 items. See [orderable item Search](https://docs.sijil.com/sijil/services/lab/explore-the-compendium/#orderable-item-search) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemList(\n params: LabOrderableItemListParams,\n request?: SijilClientRequest\n ): Promise<LabOrderableItemListResponse>;\n /**\n * Returns list of active orderable items for the latest compendium version. Page size is default 25 and max 100 items. See [orderable item Search](https://docs.sijil.com/sijil/services/lab/explore-the-compendium/#orderable-item-search) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemList(request?: SijilClientRequest): Promise<LabOrderableItemListResponse>;\n /**\n * Returns list of active orderable items for the latest compendium version. Page size is default 25 and max 100 items. See [orderable item Search](https://docs.sijil.com/sijil/services/lab/explore-the-compendium/#orderable-item-search) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemList(\n params?: LabOrderableItemListParams | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<LabOrderableItemListResponse> {\n return this.request('/orderableItem', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Retrieve the AOE (Answer on Entry) Questionnaire for the given orderable item. The orderable item is defined by its labGuid, compendiumVersion, and itemCode. See [AOE](https://docs.sijil.com/sijil/services/lab/explore-the-compendium/#AOE) for more details.\n *\n * Access Policy Requirements:\n * Action: `Lab:SearchOrderableItems`\n * Access Policy Resource: `Lab:OrderableItem`\n */\n orderableItemQuestionnaireGet(\n params: LabOrderableItemQuestionnaireGetParams,\n request?: SijilClientRequest\n ): Promise<LabOrderableItemQuestionnaireGetResponse> {\n return this.request(\n '/canonical-questionnaire/lab/{labGuid}/compendium/{compendiumVersion}/item/{itemCode}/questionnaire',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n /**\n * Submit a lab order. Sijil's [Submit Lab](https://docs.sijil.com/sijil/services/lab/submit-an-order/) feature allows users to submit an order consisting of one or more well-configured ServiceRequests to an external lab. In order to successfully submit an order, a [Route](https://docs.sijil.com/sijil/services/lab/onboarding-a-lab/#create-route) to and Organization representing that lab must exist. If the lab requires its own requisition document (eReq) or an Advance Beneficiary Notice (ABN), the appropriate DocumentReferences will be included in the response.\n *\n * Access Policy Requirements:\n * Action: `Lab:SubmitOrder`\n * Access Policy Resource: `Lab:Order`\n */\n orderSubmit(params: LabOrderSubmitParams, request?: SijilClientRequest): Promise<LabOrderSubmitResponse> {\n return this.request('/submit', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n M2mCreateParams,\n M2mCreateResponse,\n M2mDeleteParams,\n M2mGetParams,\n M2mGetResponse,\n M2mListResponse,\n M2mListV2Params,\n M2mListV2Response,\n M2mMeResponse,\n M2mRotateSecretParams,\n M2mRotateSecretResponse,\n M2mUpdateParams,\n M2mUpdateResponse,\n SijilClientRequest,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class M2m extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * DEPRECATED. Please use [v2/list](https://api-reference.sijil.com/reference/get_m2m-v2-list) instead.\n *\n * Get a list of all M2M Clients. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n list(request?: SijilClientRequest): Promise<M2mListResponse> {\n return this.request('/m2m', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new M2M Client. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:CreateM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n create(params: M2mCreateParams, request?: SijilClientRequest): Promise<M2mCreateResponse> {\n return this.request('/m2m', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get information about the calling M2M Client. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:GetM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n me(request?: SijilClientRequest): Promise<M2mMeResponse> {\n return this.request('/m2m/me', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get the M2M Client with the provided ID. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:GetM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n get(params: M2mGetParams, request?: SijilClientRequest): Promise<M2mGetResponse> {\n return this.request('/m2m/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the M2M Client with the provided ID. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:UpdateM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n update(params: M2mUpdateParams, request?: SijilClientRequest): Promise<M2mUpdateResponse> {\n return this.request('/m2m/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the M2M Client with the provided ID. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:DeleteM2MClient`\n * Access Policy Resource: `IAM:M2MClient`\n */\n delete(params: M2mDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/m2m/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Rotate the client secret for the M2M Client with the provided ID. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:RotateM2MClientSecret`\n * Access Policy Resource: `IAM:M2MClient`\n */\n rotateSecret(params: M2mRotateSecretParams, request?: SijilClientRequest): Promise<M2mRotateSecretResponse> {\n return this.request('/m2m/{id}/rotate-secret', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get M2M clients in the Project with pagination, sort, sort order and filtering. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n listV2(params: M2mListV2Params, request?: SijilClientRequest): Promise<M2mListV2Response>;\n /**\n * Get M2M clients in the Project with pagination, sort, sort order and filtering. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n listV2(request?: SijilClientRequest): Promise<M2mListV2Response>;\n /**\n * Get M2M clients in the Project with pagination, sort, sort order and filtering. [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients) are used to access Sijil APIs from scripts and server-side code like [Zambda Functions](https://docs.sijil.com/sijil/services/zambda).\n *\n * Access Policy Action: `App:ListAllM2MClients`\n * Access Policy Resource: `IAM:M2MClient`\n */\n listV2(params?: M2mListV2Params | SijilClientRequest, request?: SijilClientRequest): Promise<M2mListV2Response> {\n return this.request('/m2m/v2/list', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { MessagingGetMessagingConfigResponse, SijilClientRequest } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Messaging extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get an information about the Messaging services configuration. This information includes phone number, phone number type and also rate limits of each service.\n */\n getMessagingConfig(request?: SijilClientRequest): Promise<MessagingGetMessagingConfigResponse> {\n return this.request('/messaging/config', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n PaymentMethodDeleteParams,\n PaymentMethodListParams,\n PaymentMethodListResponse,\n PaymentMethodSetDefaultParams,\n PaymentMethodSetUpParams,\n PaymentMethodSetUpResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class PaymentMethod extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Enter a new credit card or other payment method for the user.\n *\n * Access Policy Requirements:\n * Action: `Payment:Setup`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n setUp(params: PaymentMethodSetUpParams, request?: SijilClientRequest): Promise<PaymentMethodSetUpResponse> {\n return this.request('/payment/payment-method/setup', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Set a specified payment method for the user as default.\n *\n * Access Policy Requirements:\n * Action: `Payment:SetDefault`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n setDefault(params: PaymentMethodSetDefaultParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/payment/payment-method/set-default', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete a specified payment method for the beneficiary.\n *\n * Access Policy Requirements:\n * Action: `Payment:Delete`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n delete(params: PaymentMethodDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/payment/payment-method', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * List all payment methods for the patient.\n *\n * Access Policy Requirements:\n * Action: `Payment:Setup`\n * Access Policy Resource: `Payment:PaymentMethod`\n * Actions: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Coverage:*`\n * Action: `FHIR:Read,FHIR:Create,FHIR:Update`\n * Access Policy Resource: `FHIR:Account:*`\n *\n * Also need to be able to read the patients' details. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n list(params: PaymentMethodListParams, request?: SijilClientRequest): Promise<PaymentMethodListResponse> {\n return this.request('/payment/payment-method/list', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { SijilClientRequest, ProjectGetResponse, ProjectUpdateParams, ProjectUpdateResponse } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Project extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get the Project settings for a Project. Developers must specify a [project ID](https://docs.sijil.com/sijil/core-documentation/authenticating-api-requests/#x-sijil-project-id-header) in the header. A Project is the logically-isolated instance of Sijil that segments your data from other Projects. [Projects](https://docs.sijil.com/sijil/services/project/) are completely independent from each other, having their own separate [FHIR store](https://docs.sijil.com/sijil/services/fhir/basics/), [Applications](https://docs.sijil.com/sijil/services/app/applications/), [Users](https://docs.sijil.com/sijil/services/app/users/), etc .\n *\n * Access Policy Action: `Project:GetProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n get(request?: SijilClientRequest): Promise<ProjectGetResponse> {\n return this.request('/project', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Update the Project settings for the Project that corresponds to the project-id in the request header. A [Project](https://docs.sijil.com/sijil/services/project/) is the logically-isolated instance of Sijil that segments your data from other Projects. Projects are completely independent from each other, having their own separate [FHIR store](https://docs.sijil.com/sijil/services/fhir/basics/), [Applications](https://docs.sijil.com/sijil/services/app/applications/), [Users](https://docs.sijil.com/sijil/services/app/users/), etc .\n *\n * Access Policy Action: `Project:UpdateProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n update(params: ProjectUpdateParams, request?: SijilClientRequest): Promise<ProjectUpdateResponse>;\n /**\n * Update the Project settings for the Project that corresponds to the project-id in the request header. A [Project](https://docs.sijil.com/sijil/services/project/) is the logically-isolated instance of Sijil that segments your data from other Projects. Projects are completely independent from each other, having their own separate [FHIR store](https://docs.sijil.com/sijil/services/fhir/basics/), [Applications](https://docs.sijil.com/sijil/services/app/applications/), [Users](https://docs.sijil.com/sijil/services/app/users/), etc .\n *\n * Access Policy Action: `Project:UpdateProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n update(request?: SijilClientRequest): Promise<ProjectUpdateResponse>;\n /**\n * Update the Project settings for the Project that corresponds to the project-id in the request header. A [Project](https://docs.sijil.com/sijil/services/project/) is the logically-isolated instance of Sijil that segments your data from other Projects. Projects are completely independent from each other, having their own separate [FHIR store](https://docs.sijil.com/sijil/services/fhir/basics/), [Applications](https://docs.sijil.com/sijil/services/app/applications/), [Users](https://docs.sijil.com/sijil/services/app/users/), etc .\n *\n * Access Policy Action: `Project:UpdateProjectInfo`\n * Access Policy Resource: `Project:Settings`\n */\n update(\n params?: ProjectUpdateParams | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<ProjectUpdateResponse> {\n return this.request('/project', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import { SijilClientRequest, SDKResource } from '../../client/client';\nimport { SijilSdkError } from '../../errors';\nimport { RcmGetPayerResponse } from '../types';\n\nfunction baseUrlThunk(this: SDKResource): string {\n return this.config.services?.['rcmApiUrl'] ?? 'https://rcm-api.zapehr.com/v1';\n}\n\nexport function constructPayerUrl(\n this: SDKResource,\n {\n id,\n }: {\n id: string;\n }\n): string {\n return `${baseUrlThunk.call(this)}/payer/${id}`;\n}\n\nexport async function getPayerByUrl(\n this: SDKResource,\n { url }: { url: string },\n request?: SijilClientRequest\n): Promise<RcmGetPayerResponse> {\n if (!url.startsWith(constructPayerUrl.call(this, { id: '' }))) {\n throw new SijilSdkError({ code: 400, message: 'Invalid payer URL.' });\n }\n const urlObj = new URL(url);\n const pathParts = urlObj.pathname.split('/').filter(Boolean);\n const id = pathParts[pathParts.length - 1];\n return this.request('/payer/{id}', 'get', baseUrlThunk.bind(this))({ id }, request);\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n RcmEligibilityCheckParams,\n RcmEligibilityCheckResponse,\n RcmGetPayerParams,\n RcmGetPayerResponse,\n RcmListPayersParams,\n RcmListPayersResponse,\n RcmSetClaimStatusParams,\n RcmSetClaimStatusResponse,\n RcmSubmitClaimParams,\n RcmSubmitClaimResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\nimport * as ext from './rcm-ext';\n\nexport class Rcm extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['rcmApiUrl'] ?? 'https://rcm-api.zapehr.com/v1';\n }\n constructPayerUrl = ext.constructPayerUrl;\n getPayerByUrl = ext.getPayerByUrl;\n /**\n * Check [Insurance Eligibility](https://docs.sijil.com/sijil/services/rcm/eligibility/).\n *\n * Access Policy Action: `RCM:CheckInsuranceEligibility`\n * Access Policy Resource: `RCM:InsuranceEligibility`\n *\n * Access Policy Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:CoverageEligibilityResponse`\n */\n eligibilityCheck(\n params: RcmEligibilityCheckParams,\n request?: SijilClientRequest\n ): Promise<RcmEligibilityCheckResponse> {\n return this.request('/eligibility-check', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Submit a claim to a payer.\n *\n * Access Policy Action: `RCM:SubmitClaim`\n * Access Policy Resource: `RCM:Claim`\n *\n * Access Policy Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:ClaimResponse`\n */\n submitClaim(params: RcmSubmitClaimParams, request?: SijilClientRequest): Promise<RcmSubmitClaimResponse> {\n return this.request('/claim/{claimId}/submit', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Emulate asynchronous claim responses by manually setting claim status.\n *\n * Access Policy Action: `RCM:SubmitClaim`\n * Access Policy Resource: `RCM:Claim`\n *\n * Access Policy Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:ClaimResponse`\n */\n setClaimStatus(params: RcmSetClaimStatusParams, request?: SijilClientRequest): Promise<RcmSetClaimStatusResponse> {\n return this.request('/claim/{claimId}/status', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search for payers by name or identifier.\n *\n * Access Policy Action: `RCM:SearchPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n listPayers(params: RcmListPayersParams, request?: SijilClientRequest): Promise<RcmListPayersResponse>;\n /**\n * Search for payers by name or identifier.\n *\n * Access Policy Action: `RCM:SearchPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n listPayers(request?: SijilClientRequest): Promise<RcmListPayersResponse>;\n /**\n * Search for payers by name or identifier.\n *\n * Access Policy Action: `RCM:SearchPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n listPayers(\n params?: RcmListPayersParams | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<RcmListPayersResponse> {\n return this.request('/payer', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Retrieve a payer by its ID.\n *\n * Access Policy Action: `RCM:GetPayer`\n * Access Policy Resource: `RCM:Payer`\n */\n getPayer(params: RcmGetPayerParams, request?: SijilClientRequest): Promise<RcmGetPayerResponse> {\n return this.request('/payer/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n RoleCreateParams,\n RoleCreateResponse,\n RoleDeleteParams,\n RoleGetParams,\n RoleGetResponse,\n RoleListResponse,\n RoleUpdateParams,\n RoleUpdateResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Role extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get a list of all Roles. A [Role](https://docs.sijil.com/sijil/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.sijil.com/sijil/services/iam/developers/), [Users](https://docs.sijil.com/sijil/services/app/users/), and [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:ListAllRoles`\n * Access Policy Resource: `IAM:Role`\n */\n list(request?: SijilClientRequest): Promise<RoleListResponse> {\n return this.request('/iam/role', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new Role. A [Role](https://docs.sijil.com/sijil/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.sijil.com/sijil/services/iam/developers/), [Users](https://docs.sijil.com/sijil/services/app/users/), and [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:CreateRole`\n * Access Policy Resource: `IAM:Role`\n */\n create(params: RoleCreateParams, request?: SijilClientRequest): Promise<RoleCreateResponse> {\n return this.request('/iam/role', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the Role with the provided ID. A [Role](https://docs.sijil.com/sijil/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.sijil.com/sijil/services/iam/developers/), [Users](https://docs.sijil.com/sijil/services/app/users/), and [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:GetRole`\n * Access Policy Resource: `IAM:Role`\n */\n get(params: RoleGetParams, request?: SijilClientRequest): Promise<RoleGetResponse> {\n return this.request('/iam/role/{roleId}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Role with the provided ID. A [Role](https://docs.sijil.com/sijil/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.sijil.com/sijil/services/iam/developers/), [Users](https://docs.sijil.com/sijil/services/app/users/), and [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:UpdateRole`\n * Access Policy Resource: `IAM:Role`\n */\n update(params: RoleUpdateParams, request?: SijilClientRequest): Promise<RoleUpdateResponse> {\n return this.request('/iam/role/{roleId}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Role with the provided ID. A [Role](https://docs.sijil.com/sijil/services/iam/roles/) defines an access policy that can be assigned to any number of [Developers](https://docs.sijil.com/sijil/services/iam/developers/), [Users](https://docs.sijil.com/sijil/services/app/users/), and [M2M Clients](https://docs.sijil.com/sijil/services/iam/m2m-clients/).\n *\n * Access Policy Action: `IAM:DeleteRole`\n * Access Policy Resource: `IAM:Role`\n * Will fail if any entities hold the Role or if Role is assigned as the default patient role for the project\n */\n delete(params: RoleDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/iam/role/{roleId}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n SecretDeleteParams,\n SecretGetParams,\n SecretGetResponse,\n SecretListResponse,\n SecretSetParams,\n SecretSetResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Secret extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get a list of all secrets in the Project.\n *\n * Access Policy Action: `Zambda:ListAllSecrets`\n * Access Policy Resource: `Zambda:Secret`\n */\n list(request?: SijilClientRequest): Promise<SecretListResponse> {\n return this.request('/secret', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a secret for a project. If the secret is already defined, update it.\n *\n * Access Policy Action: `Zambda:CreateSecret`\n * Access Policy Resource: `Zambda:Secret`\n */\n set(params: SecretSetParams, request?: SijilClientRequest): Promise<SecretSetResponse> {\n return this.request('/secret', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the secret with the provided name.\n *\n * Access Policy Action: `Zambda:GetSecret`\n * Access Policy Resource: `Zambda:Secret`\n */\n get(params: SecretGetParams, request?: SijilClientRequest): Promise<SecretGetResponse> {\n return this.request('/secret/{name}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the secret with the provided name.\n *\n * Access Policy Action: `Zambda:DeleteSecret`\n * Access Policy Resource: `Zambda:Secret`\n */\n delete(params: SecretDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/secret/{name}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n TelemedCreateMeetingParams,\n TelemedCreateMeetingResponse,\n TelemedJoinMeetingParams,\n TelemedJoinMeetingResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Telemed extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Create a [telemedicine video meeting](https://docs.sijil.com/sijil/services/telemed/).\n *\n * Access Policy Requirements:\n * Action: `Telemed:CreateMeeting`\n * Access Policy Resource: `Telemed:Meeting`\n * Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:Encounter`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Encounter`\n */\n createMeeting(\n params: TelemedCreateMeetingParams,\n request?: SijilClientRequest\n ): Promise<TelemedCreateMeetingResponse> {\n return this.request('/telemed/v2/meeting', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get Meeting and Attendee objects necessary to join a telemedicine video meeting.\n *\n * Access Policy Requirements:\n * Action: `Telemed:JoinMeeting`\n * Access Policy Resource: `Telemed:Meeting`\n * To use M2M token to join as anonymous user:\n * Action: `Telemed:AddAnonymousToMeeting`\n * Access Policy Resource: `Telemed:Meeting`\n */\n joinMeeting(params: TelemedJoinMeetingParams, request?: SijilClientRequest): Promise<TelemedJoinMeetingResponse> {\n return this.request(\n '/telemed/v2/meeting/{encounterId}/join',\n 'get',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n TerminologySearchCptParams,\n TerminologySearchCptResponse,\n TerminologySearchHcpcsParams,\n TerminologySearchHcpcsResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Terminology extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['terminologyApiUrl'] ?? 'https://terminology-api.zapehr.com/v1';\n }\n /**\n * Search CPT (Current Procedural Terminology) codes by code or description. Supports exact matches, prefix searches, and full-text search with BM25 ranking.\n *\n * Access Policy Action: `Terminology:SearchCodes`\n * Access Policy Resource: `Terminology:Code:*`\n */\n searchCpt(params: TerminologySearchCptParams, request?: SijilClientRequest): Promise<TerminologySearchCptResponse> {\n return this.request('/cpt/search', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Search HCPCS (Healthcare Common Procedure Coding System) Level II codes by code or description. Supports exact matches, prefix searches, and full-text search with BM25 ranking.\n *\n * Access Policy Action: `Terminology:SearchCodes`\n * Access Policy Resource: `Terminology:Code:*`\n */\n searchHcpcs(\n params: TerminologySearchHcpcsParams,\n request?: SijilClientRequest\n ): Promise<TerminologySearchHcpcsResponse> {\n return this.request('/hcpcs/search', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { SijilClientRequest, TransactionalSMSSendParams, TransactionalSMSSendResponse } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class TransactionalSMS extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Send an SMS to any phone number. Sijil's [Transactional SMS](https://docs.sijil.com/sijil/services/messaging/transactional-sms/) feature makes it easy to send a text message to your [Users](https://docs.sijil.com/sijil/services/app/users/) with a single API call. You can use this feature to send appointment reminders, prescription refill reminders, discharge information, and more.\n *\n * Access Policy Requirements:\n * Action: `Messaging:SendTransactionalSMS`\n * Access Policy Resource: `Messaging:TransactionalSMS`\n * Action: `FHIR:Create`\n * Access Policy Resource: `FHIR:Communication`\n * Action: `FHIR:Update`\n * Access Policy Resource: `FHIR:Communication`\n *\n * You also need Read access for the resource to which you are sending a message. For example:\n * Action: `FHIR:Read`\n * Access Policy Resource: `FHIR:Patient`\n */\n send(params: TransactionalSMSSendParams, request?: SijilClientRequest): Promise<TransactionalSMSSendResponse> {\n return this.request('/messaging/transactional-sms/send', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n UserChangePasswordParams,\n UserDeleteParams,\n UserGetParams,\n UserGetResponse,\n UserInviteParams,\n UserInviteResponse,\n UserListResponse,\n UserListV2Params,\n UserListV2Response,\n UserMeResponse,\n UserResetMfaParams,\n UserResetPasswordLinkParams,\n UserUpdateParams,\n UserUpdateResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class User extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get your own User details. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Fetch details about the calling User. This endpoint has no access policy requirements, it is available to all authenticated Users.\n */\n me(request?: SijilClientRequest): Promise<UserMeResponse> {\n return this.request('/user/me', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get the User with the provided ID. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:GetUser`\n * Access Policy Resource: `App:User`\n */\n get(params: UserGetParams, request?: SijilClientRequest): Promise<UserGetResponse> {\n return this.request('/user/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the User with the provided ID. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:UpdateUser`\n * Access Policy Resource: `App:User`\n */\n update(params: UserUpdateParams, request?: SijilClientRequest): Promise<UserUpdateResponse> {\n return this.request('/user/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the User with the provided ID. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:DeleteUser`\n * Access Policy Resource: `App:User`\n */\n delete(params: UserDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/user/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Reset MFA for the User with the provided ID. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:ResetUserMFA`\n * Access Policy Resource: `App:User`\n */\n resetMfa(params: UserResetMfaParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/user/{id}/reset-mfa', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Creates a password reset link for the User with the provided ID. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:GetUserPasswordResetLink`\n * Access Policy Resource: `App:User`\n */\n resetPasswordLink(params: UserResetPasswordLinkParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/user/{id}/reset-password-link', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Automatically changes the password for the User with the provided ID. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:ChangeUserPassword`\n * Access Policy Resource: `App:User`\n */\n changePassword(params: UserChangePasswordParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/user/{id}/change-password', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Invite a User to the Project. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:CreateUser`\n * Access Policy Resource: `App:User`\n */\n invite(params: UserInviteParams, request?: SijilClientRequest): Promise<UserInviteResponse> {\n return this.request('/user/invite', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * DEPRECATED. Please use [v2/list](https://api-reference.sijil.com/reference/get_user-v2-list) instead.\n *\n * Get all Users in the Project. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `App:ListAllUsers`\n * Access Policy Resource: `App:User`\n */\n list(request?: SijilClientRequest): Promise<UserListResponse> {\n return this.request('/user', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Get Users in the Project with pagination, sort, sort order and filtering. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(params: UserListV2Params, request?: SijilClientRequest): Promise<UserListV2Response>;\n /**\n * Get Users in the Project with pagination, sort, sort order and filtering. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(request?: SijilClientRequest): Promise<UserListV2Response>;\n /**\n * Get Users in the Project with pagination, sort, sort order and filtering. [Users](https://docs.sijil.com/sijil/services/app/users/) are the people who log into the [Applications](https://docs.sijil.com/sijil/services/app/applications/) you configure for securing the apps you build on top of Sijil.\n *\n * Access Policy Action: `Project:ListAllUsers`\n * Access Policy Resource: `Project:Settings`\n */\n listV2(\n params?: UserListV2Params | SijilClientRequest,\n request?: SijilClientRequest\n ): Promise<UserListV2Response> {\n return this.request('/user/v2/list', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { SijilClientRequest, VersionGetResponse } from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class Version extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Get project API version. This endpoint is public so there are no access policy requirements.\n */\n get(request?: SijilClientRequest): Promise<VersionGetResponse> {\n return this.request('/version', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n}\n", "import { defaultProjectApiUrl, SDKResource } from '../../client/client';\nimport { SijilSdkError } from '../../errors';\nimport { Z3GetPresignedUrlParams, Z3GetPresignedUrlResponse } from '../types';\n\nfunction baseUrlThunk(this: SDKResource): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n}\n\n/**\n * Uploads a file to the bucket and key. Files should be Blobs.\n *\n * @param params upload file params\n */\nexport async function uploadFile(\n this: SDKResource,\n {\n bucketName,\n 'objectPath+': key,\n file,\n }: {\n bucketName: string;\n 'objectPath+': string;\n file: Blob;\n }\n): Promise<void> {\n const uploadUrl = await this.request(\n '/z3/{bucketName}/{objectPath+}',\n 'post',\n baseUrlThunk.bind(this)\n )({\n action: 'upload',\n bucketName,\n 'objectPath+': key,\n });\n await fetch(uploadUrl.signedUrl, {\n method: 'PUT',\n body: file,\n });\n}\n\n/**\n * Downloads an object matching the bucket and key. File content is returned as an ArrayBuffer.\n *\n * @param params download file params\n */\nexport async function downloadFile(\n this: SDKResource,\n {\n bucketName,\n 'objectPath+': key,\n }: {\n bucketName: string;\n 'objectPath+': string;\n }\n): Promise<ArrayBuffer> {\n const uploadUrl = await this.request(\n '/z3/{bucketName}/{objectPath+}',\n 'post',\n baseUrlThunk.bind(this)\n )({\n action: 'download',\n bucketName,\n 'objectPath+': key,\n });\n const resp = await fetch(uploadUrl.signedUrl, {\n method: 'GET',\n });\n if (!resp.ok) {\n throw new Error('Failed to download file');\n }\n return resp.arrayBuffer();\n}\n\n/**\n * This helper performs a `getPresignedUrl` request for Z3 URLs of the forms\n * `https://projects-api.sijil.com/v1/z3/<bucket>/<key>` or `z3://<bucket>/<key>`\n * instead of the standard SDK `Z3GetPresignedUrlParams`.\n *\n * @param params url and action\n */\nexport async function getPresignedUrlForZ3Url(\n this: SDKResource,\n params: { url: string; action: Z3GetPresignedUrlParams['action'] }\n): Promise<Z3GetPresignedUrlResponse> {\n let bucket: string;\n let key: string;\n const url = new URL(params.url);\n if (url.protocol === 'z3:') {\n // remove leading forward slash\n const z3PathParts = url.pathname.split('/').slice(1);\n bucket = url.hostname;\n key = z3PathParts.join('/');\n } else if (url.href.startsWith(this.config.services?.['projectApiUrl'] ?? defaultProjectApiUrl)) {\n // remove leading `/v1/z3`\n const httpsPathParts = url.pathname.split('/').slice(3);\n bucket = httpsPathParts[0];\n key = httpsPathParts.slice(1).join('/');\n } else {\n throw new SijilSdkError({ message: 'Invalid Z3 URL', code: 400 });\n }\n const requestParams: Z3GetPresignedUrlParams = {\n action: 'upload',\n bucketName: bucket,\n 'objectPath+': key,\n };\n return this.request('/z3/{bucketName}/{objectPath+}', 'post', baseUrlThunk.bind(this))(requestParams);\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n Z3CreateBucketParams,\n Z3CreateBucketResponse,\n Z3DeleteBucketParams,\n Z3DeleteObjectParams,\n Z3GetPresignedUrlParams,\n Z3GetPresignedUrlResponse,\n Z3ListBucketsResponse,\n Z3ListObjectsParams,\n Z3ListObjectsResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\nimport * as ext from './z3-ext';\n\nexport class Z3 extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['projectApiUrl'] ?? 'https://project-api.zapehr.com/v1';\n }\n /**\n * Uploads a file to the bucket and key. Files should be Blobs.\n * @param params upload file params\n */\n uploadFile = ext.uploadFile;\n /**\n * Downloads an object matching the bucket and key. File content is returned as an ArrayBuffer.\n * @param params download file params\n */\n downloadFile = ext.downloadFile;\n /**\n * This helper performs a `getPresignedUrl` request for Z3 URLs of the forms\n * `https://projects-api.sijil.com/v1/z3/<bucket>/<key>` or `z3://<bucket>/<key>`\n * instead of the standard SDK `Z3GetPresignedUrlParams`.\n * @param params url and action\n */\n getPresignedUrlForZ3Url = ext.getPresignedUrlForZ3Url;\n /**\n * List all Z3 Buckets. [Z3](https://docs.sijil.com/sijil/services/z3/) is Sijil's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:ListBuckets`\n * Access Policy Resource: `Z3:BucketName`\n */\n listBuckets(request?: SijilClientRequest): Promise<Z3ListBucketsResponse> {\n return this.request('/z3', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a Z3 Bucket with the provided name. [Z3](https://docs.sijil.com/sijil/services/z3/) is Sijil's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:CreateBucket`\n * Access Policy Resource: `Z3:*`\n */\n createBucket(params: Z3CreateBucketParams, request?: SijilClientRequest): Promise<Z3CreateBucketResponse> {\n return this.request('/z3/{bucketName}', 'put', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Z3 Bucket with the provided name. [Z3](https://docs.sijil.com/sijil/services/z3/) is Sijil's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:DeleteBucket`\n * Access Policy Resource: `Z3:BucketName`\n */\n deleteBucket(params: Z3DeleteBucketParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/z3/{bucketName}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * List all Z3 Objects at the provided path in the Bucket with the provided name [Z3](https://docs.sijil.com/sijil/services/z3/) is Sijil's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:ListObjects`\n * Access Policy Resource: `Z3:BucketName:ObjectPath`\n */\n listObjects(params: Z3ListObjectsParams, request?: SijilClientRequest): Promise<Z3ListObjectsResponse> {\n return this.request('/z3/{bucketName}/{objectPath+}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get a link for downloading or uploading a Z3 Object to the provided path in the Bucket with the provided name. [Z3](https://docs.sijil.com/sijil/services/z3/) is Sijil's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:PutObject` or `Z3:GetObject`\n * Access Policy Resource: `Z3:BucketName:ObjectPath`\n */\n getPresignedUrl(params: Z3GetPresignedUrlParams, request?: SijilClientRequest): Promise<Z3GetPresignedUrlResponse> {\n return this.request('/z3/{bucketName}/{objectPath+}', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Z3 Object at the provided path in the Bucket with the provided name. [Z3](https://docs.sijil.com/sijil/services/z3/) is Sijil's built-in and fully integrated solution for file storage.\n *\n * Access Policy Action: `Z3:DeleteObject`\n * Access Policy Resource: `Z3:BucketName:ObjectPath`\n */\n deleteObject(params: Z3DeleteObjectParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/z3/{bucketName}/{objectPath+}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "import { SDKResource } from '../../client/client';\nimport { SijilSdkError } from '../../errors';\n\nfunction baseUrlThunk(this: SDKResource): string {\n return this.config.services?.['zambdaApiUrl'] ?? 'https://zambda-api.zapehr.com/v1';\n}\n\nexport async function uploadFile(\n this: SDKResource,\n {\n id,\n file,\n filename,\n }: {\n id: string;\n file: Blob;\n filename?: string | undefined;\n }\n): Promise<void> {\n const uploadUrl = await this.request(\n '/zambda/{id}/presigned-url',\n 'post',\n baseUrlThunk.bind(this)\n )({ id, action: 'upload', filename });\n const response = await fetch(uploadUrl.signedUrl, {\n method: 'PUT',\n body: file,\n });\n if (!response.ok) {\n throw new SijilSdkError({ message: 'Failed to upload file', code: response.status, cause: response.statusText });\n }\n}\n\nexport async function downloadFile(this: SDKResource, { id }: { id: string }): Promise<ArrayBuffer> {\n const downloadUrl = await this.request(\n '/zambda/{id}/presigned-url',\n 'post',\n baseUrlThunk.bind(this)\n )({ id, action: 'download' });\n const response = await fetch(downloadUrl.signedUrl, {\n method: 'GET',\n });\n if (!response.ok) {\n throw new SijilSdkError({\n message: 'Failed to download file',\n code: response.status,\n cause: response.statusText,\n });\n }\n return response.arrayBuffer();\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n ZambdaCreateParams,\n ZambdaCreateResponse,\n ZambdaDeleteParams,\n ZambdaExecuteParams,\n ZambdaExecutePublicParams,\n ZambdaExecutePublicResponse,\n ZambdaExecuteResponse,\n ZambdaGetParams,\n ZambdaGetPresignedUrlParams,\n ZambdaGetPresignedUrlResponse,\n ZambdaGetResponse,\n ZambdaListResponse,\n ZambdaS3UploadParams,\n ZambdaS3UploadResponse,\n ZambdaUpdateParams,\n ZambdaUpdateResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\nimport * as ext from './zambda-ext';\n\nexport class Zambda extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['zambdaApiUrl'] ?? 'https://zambda-api.zapehr.com/v1';\n }\n uploadFile = ext.uploadFile;\n downloadFile = ext.downloadFile;\n /**\n * Get a list of all Zambda Functions in the Project. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ListAllFunctions`\n * Access Policy Resource: `Zambda:Function`\n */\n list(request?: SijilClientRequest): Promise<ZambdaListResponse> {\n return this.request('/zambda', 'get', this.#baseUrlThunk.bind(this))(request);\n }\n /**\n * Create a new Zambda Function. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:CreateFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n create(params: ZambdaCreateParams, request?: SijilClientRequest): Promise<ZambdaCreateResponse> {\n return this.request('/zambda', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the Zambda Function with the provided ID or name. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:GetFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n get(params: ZambdaGetParams, request?: SijilClientRequest): Promise<ZambdaGetResponse> {\n return this.request('/zambda/{id}', 'get', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Update the Zambda Function with the provided ID or name. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:UpdateFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n update(params: ZambdaUpdateParams, request?: SijilClientRequest): Promise<ZambdaUpdateResponse> {\n return this.request('/zambda/{id}', 'patch', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Delete the Zambda Function with the provided ID or name. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:DeleteFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n delete(params: ZambdaDeleteParams, request?: SijilClientRequest): Promise<void> {\n return this.request('/zambda/{id}', 'delete', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Execute the [Authenticated Zambda Function](https://docs.sijil.com/sijil/services/zambda/types/authenticated/) with the provided ID. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:InvokeFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n execute(params: ZambdaExecuteParams, request?: SijilClientRequest): Promise<ZambdaExecuteResponse> {\n return this.request('/zambda/{id}/execute', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Execute the [Public Zambda Function](https://docs.sijil.com/sijil/services/zambda/types/public/) with the provided ID. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Execute a zambda that has method http_open. This endpoint is public so there are no access policy requirements.\n */\n executePublic(\n params: ZambdaExecutePublicParams,\n request?: SijilClientRequest\n ): Promise<ZambdaExecutePublicResponse> {\n return this.request('/zambda/{id}/execute-public', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * **Deprecated.** Use `POST /zambda/{id}/presigned-url` with `action: \"upload\"` instead. This endpoint will be removed in future releases.\n *\n * Returns a URL that is used to deploy code to the Zambda Function with the provided ID. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:UpdateFunction`\n * Access Policy Resource: `Zambda:Function`\n */\n s3Upload(params: ZambdaS3UploadParams, request?: SijilClientRequest): Promise<ZambdaS3UploadResponse> {\n return this.request('/zambda/{id}/s3-upload', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Returns a presigned URL to upload or download code for the Zambda Function with the provided ID. Pass `action: \"upload\"` to get a URL for deploying a new code zip, or `action: \"download\"` to get a URL for retrieving the currently deployed zip. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Upload: Access Policy Action: `Zambda:UpdateFunction`\n * Download: Access Policy Action: `Zambda:GetFunctionSource`\n * Access Policy Resource: `Zambda:Function`\n */\n getPresignedUrl(\n params: ZambdaGetPresignedUrlParams,\n request?: SijilClientRequest\n ): Promise<ZambdaGetPresignedUrlResponse> {\n return this.request('/zambda/{id}/presigned-url', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport {\n SijilClientRequest,\n ZambdaLogStreamGetParams,\n ZambdaLogStreamGetResponse,\n ZambdaLogStreamListParams,\n ZambdaLogStreamListResponse,\n ZambdaLogStreamSearchParams,\n ZambdaLogStreamSearchResponse,\n} from '../..';\nimport { SDKResource } from '../../client/client';\nimport { SijilConfig } from '../../config';\n\nexport class ZambdaLogStream extends SDKResource {\n constructor(config: SijilConfig) {\n super(config);\n }\n #baseUrlThunk(): string {\n return this.config.services?.['zambdaApiUrl'] ?? 'https://zambda-api.zapehr.com/v1';\n }\n /**\n * Get the log streams for the Zambda Function with the provided ID. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ReadLogs`\n * Access Policy Resource: `Zambda:Function`\n */\n list(params: ZambdaLogStreamListParams, request?: SijilClientRequest): Promise<ZambdaLogStreamListResponse> {\n return this.request('/zambda/{id}/logStream', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get all logs for the Zambda Function with the provided ID, filtered by any of: text in messages, minimum start date, and/or maximum end date. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ReadLogs`\n * Access Policy Resource: `Zambda:Function`\n */\n search(params: ZambdaLogStreamSearchParams, request?: SijilClientRequest): Promise<ZambdaLogStreamSearchResponse> {\n return this.request('/zambda/{id}/logStream/search', 'post', this.#baseUrlThunk.bind(this))(params, request);\n }\n /**\n * Get the logs from the specified log stream for the Zambda Function with the provided ID. [Zambdas](https://docs.sijil.com/sijil/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Sijil's APIs or to perform operations on third-party services.\n *\n * Access Policy Action: `Zambda:ReadLogs`\n * Access Policy Resource: `Zambda:Function`\n */\n get(params: ZambdaLogStreamGetParams, request?: SijilClientRequest): Promise<ZambdaLogStreamGetResponse> {\n return this.request(\n '/zambda/{id}/logStream/{logStreamName}',\n 'post',\n this.#baseUrlThunk.bind(this)\n )(params, request);\n }\n}\n", "// AUTOGENERATED -- DO NOT EDIT\n\nimport { SijilConfig } from '../../config';\nimport { SijilSdkError } from '../../errors';\nimport { Application } from './application';\nimport { Charge } from './charge';\nimport { Conversation } from './conversation';\nimport { Developer } from './developer';\nimport { Erx } from './erx';\nimport { Fax } from './fax';\nimport { Fhir } from './fhir';\nimport { Lab } from './lab';\nimport { M2m } from './m2m';\nimport { Messaging } from './messaging';\nimport { PaymentMethod } from './paymentMethod';\nimport { Project } from './project';\nimport { Rcm } from './rcm';\nimport { Role } from './role';\nimport { Secret } from './secret';\nimport { Telemed } from './telemed';\nimport { Terminology } from './terminology';\nimport { TransactionalSMS } from './transactionalSMS';\nimport { User } from './user';\nimport { Version } from './version';\nimport { Z3 } from './z3';\nimport { Zambda } from './zambda';\nimport { ZambdaLogStream } from './zambdaLogStream';\n\nexport class Sijil {\n readonly config: SijilConfig;\n readonly application: Application;\n readonly developer: Developer;\n readonly m2m: M2m;\n readonly messaging: Messaging;\n readonly conversation: Conversation;\n readonly transactionalSMS: TransactionalSMS;\n readonly paymentMethod: PaymentMethod;\n readonly charge: Charge;\n readonly project: Project;\n readonly role: Role;\n readonly secret: Secret;\n readonly telemed: Telemed;\n readonly user: User;\n readonly version: Version;\n readonly z3: Z3;\n readonly fax: Fax;\n readonly lab: Lab;\n readonly erx: Erx;\n readonly terminology: Terminology;\n readonly zambda: Zambda;\n readonly zambdaLogStream: ZambdaLogStream;\n readonly rcm: Rcm;\n readonly fhir: Fhir;\n constructor(config: SijilConfig) {\n if (config.workspaceTag && config.ignoreTags) {\n throw new SijilSdkError({\n message: 'workspaceTag and ignoreTags are mutually exclusive and cannot both be set in config',\n code: 400,\n });\n }\n this.config = config;\n this.config.services ??= {};\n this.config.services['projectApiUrl'] ??= config.projectApiUrl;\n this.config.services['fhirApiUrl'] ??= config.fhirApiUrl;\n this.application = new Application(config);\n this.developer = new Developer(config);\n this.m2m = new M2m(config);\n this.messaging = new Messaging(config);\n this.conversation = new Conversation(config);\n this.transactionalSMS = new TransactionalSMS(config);\n this.paymentMethod = new PaymentMethod(config);\n this.charge = new Charge(config);\n this.project = new Project(config);\n this.role = new Role(config);\n this.secret = new Secret(config);\n this.telemed = new Telemed(config);\n this.user = new User(config);\n this.version = new Version(config);\n this.z3 = new Z3(config);\n this.fax = new Fax(config);\n this.lab = new Lab(config);\n this.erx = new Erx(config);\n this.terminology = new Terminology(config);\n this.zambda = new Zambda(config);\n this.zambdaLogStream = new ZambdaLogStream(config);\n this.rcm = new Rcm(config);\n this.fhir = new Fhir(config);\n }\n}\n", "import type { SijilConfig } from '../config';\nimport { Sijil } from '../resources/classes';\n\n/** Browser or gateway base URL, e.g. http://localhost:8080 (demo-03) or http://localhost:8081 (Tyk). */\nexport type SijilClientConfig = {\n apiBaseUrl: string;\n accessToken?: string;\n projectId?: string;\n /** FHIR path prefix on the same host. Default `/fhir/r4` for Go; use `/fhir/R4` on Tyk open FHIR. */\n fhirPath?: string;\n} & Pick<SijilConfig, 'logLevel' | 'fetch' | 'retry' | 'workspaceTag' | 'ignoreTags'>;\n\n/**\n * Maps a single Sijil API base URL to Sijil-shaped service endpoints (Go gateway or Tyk).\n */\nexport function sijilServiceUrls(apiBaseUrl: string, fhirPath = '/fhir/r4'): NonNullable<SijilConfig['services']> {\n const base = apiBaseUrl.replace(/\\/+$/, '');\n const fhir = `${base}${fhirPath.startsWith('/') ? fhirPath : `/${fhirPath}`}`;\n return {\n zambdaApiUrl: `${base}/v1`,\n projectApiUrl: `${base}/v1`,\n fhirApiUrl: fhir,\n };\n}\n\n/**\n * Create an Sijil-compatible client pointed at Sijil Go or Tyk instead of zapehr.com.\n */\nexport function createSijilClient(config: SijilClientConfig): Sijil {\n const services = sijilServiceUrls(config.apiBaseUrl, config.fhirPath);\n return new Sijil({\n accessToken: config.accessToken,\n projectId: config.projectId,\n logLevel: config.logLevel,\n fetch: config.fetch,\n retry: config.retry,\n workspaceTag: config.workspaceTag,\n ignoreTags: config.ignoreTags,\n fhirApiUrl: services.fhirApiUrl,\n projectApiUrl: services.projectApiUrl,\n services,\n });\n}\n\n/**\n * Read `import.meta.env.VITE_SIJIL_API_URL` when available (Vite apps).\n */\nexport function apiBaseFromViteEnv(fallback = 'http://localhost:8080'): string {\n try {\n const env = (import.meta as ImportMeta & { env?: Record<string, string | undefined> }).env;\n return env?.VITE_SIJIL_API_URL?.trim() || fallback;\n } catch {\n return fallback;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["baseUrlThunk", "uuidValidate", "uuidv4", "search", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "search", "operations", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk_fn", "baseUrlThunk", "baseUrlThunk_fn", "baseUrlThunk", "uploadFile", "downloadFile", "baseUrlThunk_fn", "uploadFile", "downloadFile", "baseUrlThunk_fn", "Sijil"]
7
7
  }