@oystehr/sdk 4.3.10 → 4.3.12

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 (93) hide show
  1. package/dist/cjs/client/client.cjs +12 -5
  2. package/dist/cjs/client/client.cjs.map +1 -1
  3. package/dist/cjs/client/client.d.ts +5 -0
  4. package/dist/cjs/index.min.cjs +1 -1
  5. package/dist/cjs/index.min.cjs.map +1 -1
  6. package/dist/cjs/resources/classes/erx.cjs +8 -0
  7. package/dist/cjs/resources/classes/erx.cjs.map +1 -1
  8. package/dist/cjs/resources/classes/erx.d.ts +7 -1
  9. package/dist/cjs/resources/classes/fhir-ext.cjs +27 -4
  10. package/dist/cjs/resources/classes/fhir-ext.cjs.map +1 -1
  11. package/dist/cjs/resources/classes/fhir-ext.d.ts +23 -3
  12. package/dist/cjs/resources/classes/fhir.cjs +31 -0
  13. package/dist/cjs/resources/classes/fhir.cjs.map +1 -1
  14. package/dist/cjs/resources/classes/fhir.d.ts +31 -0
  15. package/dist/cjs/resources/classes/rcm.cjs +9 -0
  16. package/dist/cjs/resources/classes/rcm.cjs.map +1 -1
  17. package/dist/cjs/resources/classes/rcm.d.ts +8 -1
  18. package/dist/cjs/resources/classes/terminology.cjs +9 -0
  19. package/dist/cjs/resources/classes/terminology.cjs.map +1 -1
  20. package/dist/cjs/resources/classes/terminology.d.ts +8 -1
  21. package/dist/cjs/resources/classes/z3.cjs +9 -0
  22. package/dist/cjs/resources/classes/z3.cjs.map +1 -1
  23. package/dist/cjs/resources/classes/z3.d.ts +8 -1
  24. package/dist/cjs/resources/types/ErxGetMedicationHistoryResponse.d.ts +1 -1
  25. package/dist/cjs/resources/types/ErxGetPharmacyParams.d.ts +3 -0
  26. package/dist/cjs/resources/types/ErxGetPharmacyResponse.d.ts +16 -0
  27. package/dist/cjs/resources/types/ErxSearchPharmaciesResponse.d.ts +2 -2
  28. package/dist/cjs/resources/types/LabOrderSubmitParams.d.ts +4 -0
  29. package/dist/cjs/resources/types/RcmProcessEraParams.d.ts +6 -0
  30. package/dist/cjs/resources/types/RcmProcessEraResponse.d.ts +5 -0
  31. package/dist/cjs/resources/types/TerminologySearchIcd10Params.d.ts +9 -0
  32. package/dist/cjs/resources/types/TerminologySearchIcd10Response.d.ts +27 -0
  33. package/dist/cjs/resources/types/Z3EmptyBucketParams.d.ts +3 -0
  34. package/dist/cjs/resources/types/Z3EmptyBucketResponse.d.ts +9 -0
  35. package/dist/cjs/resources/types/fhir.d.ts +13 -0
  36. package/dist/cjs/resources/types/index.d.ts +8 -0
  37. package/dist/esm/client/client.d.ts +5 -0
  38. package/dist/esm/client/client.js +12 -5
  39. package/dist/esm/client/client.js.map +1 -1
  40. package/dist/esm/index.min.js +1 -1
  41. package/dist/esm/index.min.js.map +1 -1
  42. package/dist/esm/resources/classes/erx.d.ts +7 -1
  43. package/dist/esm/resources/classes/erx.js +8 -0
  44. package/dist/esm/resources/classes/erx.js.map +1 -1
  45. package/dist/esm/resources/classes/fhir-ext.d.ts +23 -3
  46. package/dist/esm/resources/classes/fhir-ext.js +27 -4
  47. package/dist/esm/resources/classes/fhir-ext.js.map +1 -1
  48. package/dist/esm/resources/classes/fhir.d.ts +31 -0
  49. package/dist/esm/resources/classes/fhir.js +31 -0
  50. package/dist/esm/resources/classes/fhir.js.map +1 -1
  51. package/dist/esm/resources/classes/rcm.d.ts +8 -1
  52. package/dist/esm/resources/classes/rcm.js +9 -0
  53. package/dist/esm/resources/classes/rcm.js.map +1 -1
  54. package/dist/esm/resources/classes/terminology.d.ts +8 -1
  55. package/dist/esm/resources/classes/terminology.js +9 -0
  56. package/dist/esm/resources/classes/terminology.js.map +1 -1
  57. package/dist/esm/resources/classes/z3.d.ts +8 -1
  58. package/dist/esm/resources/classes/z3.js +9 -0
  59. package/dist/esm/resources/classes/z3.js.map +1 -1
  60. package/dist/esm/resources/types/ErxGetMedicationHistoryResponse.d.ts +1 -1
  61. package/dist/esm/resources/types/ErxGetPharmacyParams.d.ts +3 -0
  62. package/dist/esm/resources/types/ErxGetPharmacyResponse.d.ts +16 -0
  63. package/dist/esm/resources/types/ErxSearchPharmaciesResponse.d.ts +2 -2
  64. package/dist/esm/resources/types/LabOrderSubmitParams.d.ts +4 -0
  65. package/dist/esm/resources/types/RcmProcessEraParams.d.ts +6 -0
  66. package/dist/esm/resources/types/RcmProcessEraResponse.d.ts +5 -0
  67. package/dist/esm/resources/types/TerminologySearchIcd10Params.d.ts +9 -0
  68. package/dist/esm/resources/types/TerminologySearchIcd10Response.d.ts +27 -0
  69. package/dist/esm/resources/types/Z3EmptyBucketParams.d.ts +3 -0
  70. package/dist/esm/resources/types/Z3EmptyBucketResponse.d.ts +9 -0
  71. package/dist/esm/resources/types/fhir.d.ts +13 -0
  72. package/dist/esm/resources/types/index.d.ts +8 -0
  73. package/package.json +1 -1
  74. package/src/client/client.ts +22 -8
  75. package/src/resources/classes/erx.ts +10 -0
  76. package/src/resources/classes/fhir-ext.ts +52 -7
  77. package/src/resources/classes/fhir.ts +31 -0
  78. package/src/resources/classes/rcm.ts +11 -0
  79. package/src/resources/classes/terminology.ts +14 -0
  80. package/src/resources/classes/z3.ts +11 -0
  81. package/src/resources/types/ErxGetMedicationHistoryResponse.ts +1 -1
  82. package/src/resources/types/ErxGetPharmacyParams.ts +5 -0
  83. package/src/resources/types/ErxGetPharmacyResponse.ts +18 -0
  84. package/src/resources/types/ErxSearchPharmaciesResponse.ts +2 -2
  85. package/src/resources/types/LabOrderSubmitParams.ts +4 -0
  86. package/src/resources/types/RcmProcessEraParams.ts +8 -0
  87. package/src/resources/types/RcmProcessEraResponse.ts +7 -0
  88. package/src/resources/types/TerminologySearchIcd10Params.ts +11 -0
  89. package/src/resources/types/TerminologySearchIcd10Response.ts +29 -0
  90. package/src/resources/types/Z3EmptyBucketParams.ts +5 -0
  91. package/src/resources/types/Z3EmptyBucketResponse.ts +11 -0
  92. package/src/resources/types/fhir.ts +13 -0
  93. package/src/resources/types/index.ts +8 -0
@@ -186,9 +186,13 @@ function isInternalClientRequest(request) {
186
186
  ('contentType' in request && request.contentType?.split('/').length === 2) ||
187
187
  'requestId' in request ||
188
188
  ('ifMatch' in request && request.ifMatch.startsWith('W/"')) ||
189
+ 'ifNoneExist' in request ||
189
190
  'mode' in request ||
190
191
  'rawResponse' in request);
191
192
  }
193
+ function isResourcePayload(params) {
194
+ return typeof params.resourceType === 'string' && params.resourceType.length > 0;
195
+ }
192
196
  function getPreferHeaderFromMode(mode) {
193
197
  if (mode === 'async-bundle' || mode === 'async-bulk') {
194
198
  return 'respond-async';
@@ -288,7 +292,7 @@ function fetcher(baseUrlThunk, configThunk, loggerThunk, path, methodParam) {
288
292
  }
289
293
  : {}, {
290
294
  'content-type': requestCtx?.contentType ?? 'application/json',
291
- }, preferHeader ? { Prefer: preferHeader } : {}, accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, requestCtx?.ifMatch ? { 'If-Match': requestCtx.ifMatch } : {}, { 'x-oystehr-request-id': requestCtx?.requestId });
295
+ }, preferHeader ? { Prefer: preferHeader } : {}, accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, requestCtx?.ifMatch ? { 'If-Match': requestCtx.ifMatch } : {}, requestCtx?.ifNoneExist ? { 'If-None-Exist': requestCtx.ifNoneExist } : {}, { 'x-oystehr-request-id': requestCtx?.requestId });
292
296
  const retryConfig = {
293
297
  retries: config.retry?.retries ?? 3,
294
298
  jitter: config.retry?.jitter ?? 20,
@@ -479,12 +483,15 @@ function addParamsToSearch(params, search) {
479
483
  }
480
484
  }
481
485
  function extractParamsAndRequest(params, request) {
482
- const providedParams = !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)
486
+ const shouldUseFirstArgAsRequest = !!params &&
487
+ !request &&
488
+ !Array.isArray(params) &&
489
+ isInternalClientRequest(params) &&
490
+ !isResourcePayload(params);
491
+ const providedParams = shouldUseFirstArgAsRequest
483
492
  ? {}
484
493
  : params ?? {};
485
- const requestCtx = !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)
486
- ? params
487
- : request;
494
+ const requestCtx = shouldUseFirstArgAsRequest ? params : request;
488
495
  return [providedParams, requestCtx];
489
496
  }
490
497
 
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","sources":["../../../src/client/client.ts"],"sourcesContent":["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"],"names":["Logger","OystehrSdkError","OystehrFHIRError","uuidValidate","uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"client.cjs","sources":["../../../src/client/client.ts"],"sourcesContent":["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: the value of the 'If-None-Exist' header, used for FHIR\n * conditional creates. A FHIR search query string (e.g. \"identifier=sys|123\").\n */\n ifNoneExist?: 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 'ifNoneExist' in request ||\n 'mode' in request ||\n 'rawResponse' in request\n );\n}\n\nfunction isResourcePayload(params: Record<string, unknown>): boolean {\n return typeof params.resourceType === 'string' && params.resourceType.length > 0;\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 requestCtx?.ifNoneExist ? { 'If-None-Exist': requestCtx.ifNoneExist } : {},\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 shouldUseFirstArgAsRequest =\n !!params &&\n !request &&\n !Array.isArray(params) &&\n isInternalClientRequest(params) &&\n !isResourcePayload(params as Record<string, unknown>);\n\n const providedParams: Record<string, unknown> | [any] = shouldUseFirstArgAsRequest\n ? {}\n : (params as Record<string, unknown>) ?? {};\n const requestCtx = shouldUseFirstArgAsRequest ? (params as InternalClientRequest) : request;\n return [providedParams, requestCtx];\n}\n"],"names":["Logger","OystehrSdkError","OystehrFHIRError","uuidValidate","uuidv4"],"mappings":"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"}
@@ -32,6 +32,11 @@ export interface OystehrClientRequest {
32
32
  }
33
33
  interface InternalClientRequest extends OystehrClientRequest {
34
34
  ifMatch?: string;
35
+ /**
36
+ * Internal-only: the value of the 'If-None-Exist' header, used for FHIR
37
+ * conditional creates. A FHIR search query string (e.g. "identifier=sys|123").
38
+ */
39
+ ifNoneExist?: string;
35
40
  /**
36
41
  * Internal-only: returns raw response metadata ({ status, headers, body }) instead of throwing on non-2xx statuses.
37
42
  */
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class t extends Error{constructor({message:e,code:i,cause:s}){super(e,{cause:s}),Object.setPrototypeOf(this,t.prototype),this.code=i,this.name="OystehrSdkError"}toString(){return`${this.name}: ${this.message} (code: ${this.code})`}toJSON(){return{name:this.name,message:this.message,code:this.code,cause:this.cause}}}function e(t){var e;const i=[];for(const s of null!==(e=t.issue)&&void 0!==e?e:[])s.details&&s.details.text&&i.push(s.details.text);return i.length||i.push("Unknown FHIR error"),i.join(",")}class i extends t{constructor({error:t,code:s}){super({message:e(t),code:s}),Object.setPrototypeOf(this,i.prototype),this.cause=t,this.name="OystehrFHIRError"}toJSON(){return{name:this.name,message:this.message,code:this.code,cause:this.cause}}}function s(t,e,i,s){return new(i||(i=Promise))((function(n,r){function o(t){try{a(s.next(t))}catch(e){r(e)}}function u(t){try{a(s.throw(t))}catch(e){r(e)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,u)}a((s=s.apply(t,e||[])).next())}))}function n(t,e,i,s){if("a"===i&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?s:"a"===i?s.call(t):s?s.value:e.get(t)}"function"==typeof SuppressedError&&SuppressedError;var r=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;const o=[];for(let Oe=0;Oe<256;++Oe)o.push((Oe+256).toString(16).slice(1));let u;const a=new Uint8Array(16);var c={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};class d{constructor({level:t}){this._level=t}error(t,e={}){this._level&&["error","info","debug"].includes(this._level)&&console.error(JSON.stringify(Object.assign({message:t},e)))}info(t,e={}){this._level&&["info","debug"].includes(this._level)&&console.info(JSON.stringify(Object.assign({message:t},e)))}debug(t,e={}){this._level&&["debug"].includes(this._level)&&console.debug(JSON.stringify(Object.assign({message:t},e)))}time(t,e={}){this._level&&["debug"].includes(this._level)&&console.time(JSON.stringify(Object.assign({message:t},e)))}timeEnd(t,e={}){this._level&&["debug"].includes(this._level)&&console.timeEnd(JSON.stringify(Object.assign({message:t},e)))}}const l=[408,429,500,502,503,504],h=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET"];class p{constructor(t){this.config=t,this.logger=new d({level:this.config.logLevel})}request(e,i,n){return(r,o)=>s(this,void 0,void 0,(function*(){const s=()=>this.config,u=()=>this.logger;try{return yield f(n,s,u,e,i)(r,o)}catch(a){const e=a;throw this.logger.error(e.message,{code:e.code,cause:e.cause}),new t({message:e.message,code:e.code,cause:e.cause})}}))}fhirRequest(e,n){return(r,o,u)=>s(this,void 0,void 0,(function*(){try{const t=()=>{var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.fhirApiUrl)&&void 0!==e?e:"https://fhir-api.zapehr.com"},i=()=>this.config,s=()=>this.logger;return yield f(t,i,s,e,n)(r,o,u)}catch(s){const e=s;if("string"==typeof e.message)throw new t({message:e.message,code:e.code,cause:e.cause});throw new i({error:e.message,code:e.code})}}))}startAsyncJob(e,i,n,r,o){return s(this,void 0,void 0,(function*(){const s="async-bulk"===r?"bulk":"bundle",u="async-bulk"===r?this.appendBulkOutputFormat(e):e,a=yield this.fhirRequest(u,i)(n,Object.assign(Object.assign({},o),{rawResponse:!0}),r);if(202!==a.status)throw new t({message:`Expected start async job to return 202 Accepted, received ${a.status}`,code:a.status});const c=this.readHeader(a.headers,"content-location");if(!c)throw new t({message:"Start Async job response missing Content-Location header",code:500});const d=this.parseAsyncJobId(c);if(!d)throw new t({message:`Could not parse async job id from Content-Location: ${c}`,code:500});return{jobId:d,contentLocation:c,mode:s}}))}fetchAsyncJobStatus(t,e){return s(this,void 0,void 0,(function*(){var i,s,n;const r=yield this.fhirRequest(`/async-job/${t}`,"GET")({},Object.assign(Object.assign({},e),{rawResponse:!0}));if(202===r.status)return{status:202,xProgress:this.readHeader(r.headers,"x-progress"),retryAfter:this.readHeader(r.headers,"retry-after")};if(410===r.status)return{status:410};if(404===r.status)return{status:404};if(200===r.status){if(this.isBulkManifest(r.body))return{status:200,mode:"bulk",manifest:r.body};const t=r.body;if("Bundle"===(null==t?void 0:t.resourceType)&&"batch-response"===(null==t?void 0:t.type)){const e=null===(i=t.entry)||void 0===i?void 0:i[0];return{status:200,mode:"bundle",bundle:t,interactionStatus:null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status,resource:null==e?void 0:e.resource,outcome:null===(n=null==e?void 0:e.response)||void 0===n?void 0:n.outcome}}return{status:200,body:r.body}}return{status:r.status,body:r.body}}))}readHeader(t,e){const i=t[e];if(null!=i)return i;const s=e.toLowerCase(),n=Object.keys(t).find((t=>t.toLowerCase()===s));return n?t[n]:void 0}parseAsyncJobId(t){const e=t.split("/").filter(Boolean),i=e.lastIndexOf("async-job");if(!(i<0||i+1>=e.length))return e[i+1]}appendBulkOutputFormat(t){const e=t.includes("?")?"&":"?";return`${t}${e}_outputFormat=${encodeURIComponent("application/fhir+ndjson")}`}isBulkManifest(t){if(null==t||"object"!=typeof t)return!1;const e=t;return"string"==typeof e.transactionTime&&"string"==typeof e.request&&"boolean"==typeof e.requiresAccessToken&&Array.isArray(e.output)&&Array.isArray(e.error)}}function v(t){var e,i;return"accessToken"in t||"projectId"in t&&"string"==typeof(i=t.projectId)&&r.test(i)||"contentType"in t&&2===(null===(e=t.contentType)||void 0===e?void 0:e.split("/").length)||"requestId"in t||"ifMatch"in t&&t.ifMatch.startsWith('W/"')||"mode"in t||"rawResponse"in t}function f(e,i,n,r,d){return(p,f,g)=>s(this,void 0,void 0,(function*(){var b,y,q,w,j,O,T,k,A,S,I,E,U,x;let[P,$]=function(t,e){var i;return[t&&!e&&!Array.isArray(t)&&v(t)?{}:null!==(i=t)&&void 0!==i?i:{},t&&!e&&!Array.isArray(t)&&v(t)?t:e]}(p,f);null!=$||($={}),null!==(b=$.requestId)&&void 0!==b||($.requestId=function(t){if(c.randomUUID&&!t)return c.randomUUID();const e=(t=t||{}).random??t.rng?.()??function(){if(!u){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");u=crypto.getRandomValues.bind(crypto)}return u(a)}();if(e.length<16)throw new Error("Random bytes length must be >= 16");return e[6]=15&e[6]|64,e[8]=63&e[8]|128,function(t,e=0){return(o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]).toLowerCase()}(e)}());const z=i(),R=n(),N=d.toLowerCase();R.debug("Beginning fetch",{method:N,path:r,requestId:null==$?void 0:$.requestId});const _=null!==(y=z.fetch)&&void 0!==y?y:fetch,M=null!==(q=null==$?void 0:$.accessToken)&&void 0!==q?q:z.accessToken,C=null!==(w=null==$?void 0:$.projectId)&&void 0!==w?w:z.projectId;let J=r,D=P;if(!Array.isArray(P)){const[e,i]=function(e,i){const s=Object.assign({},i),n=e.replace(/\{([^}]+)\}/g,((e,n)=>{if(delete s[n],n.match(/^.*\+$/))return i[n]+"";if(!i[n]||""===i[n])throw new t({message:`Required path parameter is an empty string: ${n}`,code:400});return i[n]?encodeURIComponent(i[n]+""):""})),r=Object.keys(s);return[n,r.length?r.reduce(((t,e)=>Object.assign(Object.assign({},t),{[e]:s[e]})),{}):{}]}(r,P);J=e,D=i}R.debug("Substituted parameters in path",{method:N,path:r,requestId:null==$?void 0:$.requestId}),J=J.replace(/^\//,"");const W=e(),L=W.endsWith("/")?W:W+"/",B=new URL(J,L);let F;if(Array.isArray(D))F=JSON.stringify(D);else if(Object.keys(D).length)if("get"===N)m(D,B.searchParams);else if("application/x-www-form-urlencoded"===(null==$?void 0:$.contentType)){const t=new URLSearchParams;m(D,t),F=t.toString()}else F=JSON.stringify(D);else"application/x-www-form-urlencoded"!==(null==$?void 0:$.contentType)&&"post"===N&&(F="{}");R.debug("Prepared request body",{method:N,path:r,requestId:null==$?void 0:$.requestId});const G=function(t){if("async-bundle"===t||"async-bulk"===t)return"respond-async"}(g),H=Object.assign(C?{"x-zapehr-project-id":C,"x-oystehr-project-id":C}:{},{"content-type":null!==(j=null==$?void 0:$.contentType)&&void 0!==j?j:"application/json"},G?{Prefer:G}:{},M?{Authorization:`Bearer ${M}`}:{},(null==$?void 0:$.ifMatch)?{"If-Match":$.ifMatch}:{},{"x-oystehr-request-id":null==$?void 0:$.requestId}),V={retries:null!==(T=null===(O=z.retry)||void 0===O?void 0:O.retries)&&void 0!==T?T:3,jitter:null!==(A=null===(k=z.retry)||void 0===k?void 0:k.jitter)&&void 0!==A?A:20,delay:null!==(I=null===(S=z.retry)||void 0===S?void 0:S.delay)&&void 0!==I?I:100,onRetry:null===(E=z.retry)||void 0===E?void 0:E.onRetry,retryOn:[...null!==(x=null===(U=z.retry)||void 0===U?void 0:U.retryOn)&&void 0!==x?x:[],...l]};return V.retryOn.push(...l),function(t,e){return s(this,void 0,void 0,(function*(){var i,s;let n;for(const o of Array.from({length:(null!==(i=e.retries)&&void 0!==i?i:0)+1},((t,e)=>e)))try{return yield t()}catch(r){let t=!1;if("response"in r){const i=r;t=e.retryOn.includes(i.code),n={message:r.message,code:r.code}}else if(n=r,"code"in r&&"string"==typeof r.code){const e=r;t=h.includes(e.code)}if(!t)break;const i=Math.floor(Math.random()*(e.jitter+1));yield new Promise((t=>setTimeout(t,e.delay+i))),e.onRetry&&o!==(null!==(s=e.retries)&&void 0!==s?s:0)&&e.onRetry(o+1)}throw n}))}((()=>s(this,void 0,void 0,(function*(){var t,e,i,s,n,r,o,u;R.info("Request start",{method:N,url:B,requestId:null==$?void 0:$.requestId});const a=Date.now(),c=yield _(new Request(B,{method:N.toUpperCase(),body:F,headers:H}));R.info("Request end",{method:N,url:B,duration:Date.now()-a,requestId:null==$?void 0:$.requestId});const d=c.body?yield c.text():null;let l;const h=c.headers.get("content-type");try{d&&((null==h?void 0:h.includes("application/json"))||(null==h?void 0:h.includes("application/fhir+json")))?(R.time("Deserialized JSON response",{method:N,url:B,requestId:null==$?void 0:$.requestId}),l=JSON.parse(d),R.timeEnd("Deserialized JSON response",{method:N,url:B,requestId:null==$?void 0:$.requestId})):d&&((null==h?void 0:h.includes("application/xml"))||(null==h?void 0:h.includes("text/xml")))?(R.time("Deserialized XML response",{method:N,url:B,requestId:null==$?void 0:$.requestId}),l=function(t){try{const e=t.match(/<status>(\d+)<\/status>/),i=e?parseInt(e[1],10):null,s=t.match(/<output>([\s\S]*?)<\/output>/),n=s?s[1]:null;return null===i||null===n?null:{status:i,output:n}}catch(e){return null}}(d),R.timeEnd("Deserialized XML response",{method:N,url:B,requestId:null==$?void 0:$.requestId})):l=null}catch(p){l=null}if(R.debug("Deserialized response",{method:N,url:B,requestId:null==$?void 0:$.requestId}),null==$?void 0:$.rawResponse){const t={};return c.headers.forEach(((e,i)=>{t[i]=e})),{status:c.status,headers:t,body:null!=l?l:d}}if(!c.ok||c.status>=400)throw{message:null!==(n=null!==(s=null!==(i=null!==(e="string"==typeof(null==l?void 0:l.output)?l.output:null===(t=null==l?void 0:l.output)||void 0===t?void 0:t.message)&&void 0!==e?e:null==l?void 0:l.message)&&void 0!==i?i:l)&&void 0!==s?s:d)&&void 0!==n?n:c.statusText,code:null!==(u=null!==(o=null===(r=null==l?void 0:l.output)||void 0===r?void 0:r.code)&&void 0!==o?o:null==l?void 0:l.code)&&void 0!==u?u:c.status,response:c};return l}))),V)}))}function m(t,e){for(const[i,s]of Object.entries(t))Array.isArray(s)?s.forEach((t=>null!=t&&e.append(i,t))):null!=s&&e.append(i,s)}var g,b,y,q;class w extends p{constructor(t){super(t),g.add(this)}list(t){return this.request("/application","get",n(this,g,"m",b).bind(this))(t)}create(t,e){return this.request("/application","post",n(this,g,"m",b).bind(this))(t,e)}get(t,e){return this.request("/application/{id}","get",n(this,g,"m",b).bind(this))(t,e)}update(t,e){return this.request("/application/{id}","patch",n(this,g,"m",b).bind(this))(t,e)}delete(t,e){return this.request("/application/{id}","delete",n(this,g,"m",b).bind(this))(t,e)}rotateSecret(t,e){return this.request("/application/{id}/rotate-secret","post",n(this,g,"m",b).bind(this))(t,e)}revokeRefreshToken(t,e){return this.request("/application/{id}/revoke-refresh-token","post",n(this,g,"m",b).bind(this))(t,e)}revokeAccessToken(t,e){return this.request("/application/{id}/revoke-access-token","post",n(this,g,"m",b).bind(this))(t,e)}}g=new WeakSet,b=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class j extends p{constructor(t){super(t),y.add(this)}issue(t,e){return this.request("/payment/charge/issue","post",n(this,y,"m",q).bind(this))(t,e)}status(t,e){return this.request("/payment/charge/status","post",n(this,y,"m",q).bind(this))(t,e)}}y=new WeakSet,q=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};const O="https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release",T="addressString";function k(t){var e,i,s;if(function(t){return Object.hasOwn(t,"virtualService")}(t)){const i=null===(e=t.virtualService)||void 0===e?void 0:e.find((t=>{var e;return"https://fhir.zapehr.com/virtual-service-type"===(null===(e=t.channelType)||void 0===e?void 0:e.system)}));return null==i?void 0:i.addressString}if(!t.extension)return;const n=t.extension.find((t=>t.url===O));return(null==n?void 0:n.extension)?null===(s=null===(i=n.extension)||void 0===i?void 0:i.find((t=>t.url===T)))||void 0===s?void 0:s.valueString:void 0}var A,S,I,E,U,x,P,$;class z extends p{constructor(t){super(t),A.add(this),this.ENCOUNTER_VS_EXTENSION_URL=O,this.ENCOUNTER_VS_EXTENSION_RELATIVE_URL=T,this.getConversationIdFromEncounter=k}create(t,e){return this.request("/messaging/conversation","post",n(this,A,"m",S).bind(this))(t,e)}getToken(t){return this.request("/messaging/conversation/token","get",n(this,A,"m",S).bind(this))(t)}addParticipant(t,e){return this.request("/messaging/conversation/{conversationId}/participant","post",n(this,A,"m",S).bind(this))(t,e)}removeParticipant(t,e){return this.request("/messaging/conversation/{conversationId}/participant","delete",n(this,A,"m",S).bind(this))(t,e)}message(t,e){return this.request("/messaging/conversation/{conversationId}/message","post",n(this,A,"m",S).bind(this))(t,e)}}A=new WeakSet,S=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class R extends p{constructor(t){super(t),I.add(this)}get(t,e){return this.request("/developer/{id}","get",n(this,I,"m",E).bind(this))(t,e)}update(t,e){return this.request("/developer/{id}","patch",n(this,I,"m",E).bind(this))(t,e)}delete(t,e){return this.request("/developer/{id}","delete",n(this,I,"m",E).bind(this))(t,e)}invite(t,e){return this.request("/developer/invite","post",n(this,I,"m",E).bind(this))(t,e)}list(t){return this.request("/developer","get",n(this,I,"m",E).bind(this))(t)}listV2(t,e){return this.request("/developer/v2/list","get",n(this,I,"m",E).bind(this))(t,e)}}I=new WeakSet,E=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class N extends p{constructor(t){super(t),U.add(this)}searchAllergens(t,e){return this.request("/allergen","get",n(this,U,"m",x).bind(this))(t,e)}searchMedications(t,e){return this.request("/medication","get",n(this,U,"m",x).bind(this))(t,e)}getMedication(t,e){return this.request("/medication/details","get",n(this,U,"m",x).bind(this))(t,e)}getConfiguration(t){return this.request("/config","get",n(this,U,"m",x).bind(this))(t)}checkAllergyInteractions(t,e){return this.request("/patient/{patientId}/interactions/allergy","get",n(this,U,"m",x).bind(this))(t,e)}checkMedicationInteractions(t,e){return this.request("/patient/{patientId}/interactions/medication","get",n(this,U,"m",x).bind(this))(t,e)}checkPrecheckInteractions(t,e){return this.request("/patient/{patientId}/interactions/precheck/{drugId}","get",n(this,U,"m",x).bind(this))(t,e)}getMedicationHistory(t,e){return this.request("/patient/{patientId}/medication-history","get",n(this,U,"m",x).bind(this))(t,e)}addPatientPharmacy(t,e){return this.request("/patient/{patientId}/pharmacies","post",n(this,U,"m",x).bind(this))(t,e)}cancelPrescription(t,e){return this.request("/patient/{patientId}/prescriptions/{medicationRequestId}","delete",n(this,U,"m",x).bind(this))(t,e)}syncPatient(t,e){return this.request("/patient/{patientId}/sync","post",n(this,U,"m",x).bind(this))(t,e)}searchPharmacies(t,e){return this.request("/pharmacy","get",n(this,U,"m",x).bind(this))(t,e)}connectPractitioner(t,e){return this.request("/practitioner/connect","get",n(this,U,"m",x).bind(this))(t,e)}checkPractitionerEnrollment(t,e){return this.request("/practitioner/{practitionerId}","get",n(this,U,"m",x).bind(this))(t,e)}enrollPractitioner(t,e){return this.request("/practitioner/{practitionerId}","post",n(this,U,"m",x).bind(this))(t,e)}unenrollPractitioner(t,e){return this.request("/practitioner/{practitionerId}","delete",n(this,U,"m",x).bind(this))(t,e)}}U=new WeakSet,x=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.erxApiUrl)&&void 0!==e?e:"https://erx-api.zapehr.com/v3"};class _ extends p{constructor(t){super(t),P.add(this)}offboard(t){return this.request("/offboard","post",n(this,P,"m",$).bind(this))(t)}onboard(t){return this.request("/onboard","post",n(this,P,"m",$).bind(this))(t)}getConfiguration(t){return this.request("/config","get",n(this,P,"m",$).bind(this))(t)}send(t,e){return this.request("/send","post",n(this,P,"m",$).bind(this))(t,e)}}P=new WeakSet,$=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.faxApiUrl)&&void 0!==e?e:"https://fax-api.zapehr.com/v1"};const M=65535;function C(t){const e=(new globalThis.TextEncoder).encode(t);let i="";for(let s=0;s<e.length;s+=M){const t=e.subarray(s,s+M);i+=globalThis.btoa(String.fromCodePoint.apply(void 0,t))}return i}function J(t){var e,i;return t.system?`${t.system}|${null!==(e=t.code)&&void 0!==e?e:""}`:null!==(i=t.code)&&void 0!==i?i:""}function D(t,e){var i,s,n,r;return(null!==(i=t.system)&&void 0!==i?i:"")===(null!==(s=e.system)&&void 0!==s?s:"")&&(null!==(n=t.code)&&void 0!==n?n:"")===(null!==(r=e.code)&&void 0!==r?r:"")}function W(e,i){var s,n,r,o,u,a,c;const d=i;if(null===(s=e.ignoreTags)||void 0===s?void 0:s.length){const s=null!==(r=null===(n=d.meta)||void 0===n?void 0:n.tag)&&void 0!==r?r:[];for(const i of e.ignoreTags)if(s.some((t=>D(t,i))))throw new t({message:`Resource has an ignored tag (system: "${null!==(o=i.system)&&void 0!==o?o:""}", code: "${null!==(u=i.code)&&void 0!==u?u:""}") and cannot be mutated in ignoreTags mode`,code:400});return i}if(e.workspaceTag){const t=e.workspaceTag,s=null!==(c=null===(a=d.meta)||void 0===a?void 0:a.tag)&&void 0!==c?c:[];if(!s.some((e=>D(e,t))))return Object.assign(Object.assign({},i),{meta:Object.assign(Object.assign({},d.meta),{tag:[...s,t]})})}return i}function L(e,i){var s,n,r;if(null===(s=e.ignoreTags)||void 0===s?void 0:s.length){for(const s of i)if("add"===s.op||"replace"===s.op||"test"===s.op){const i=s.value;if(null!=i&&"object"==typeof i){const s=i;if(void 0!==s.code)for(const i of e.ignoreTags)if(D(s,i))throw new t({message:`Patch operation contains an ignored tag (system: "${null!==(n=i.system)&&void 0!==n?n:""}", code: "${null!==(r=i.code)&&void 0!==r?r:""}") and cannot be applied in ignoreTags mode`,code:400})}}return i}if(e.workspaceTag){const t=e.workspaceTag;return i.reduce(((e,i)=>{var s;if("remove"===i.op&&"/meta/tag"===i.path)return e.push(i),e.push({op:"add",path:"/meta/tag",value:[t]}),e;if("remove"===i.op&&"/meta"===i.path)return e.push(i),e.push({op:"add",path:"/meta",value:{tag:[t]}}),e;if(("add"===i.op||"replace"===i.op)&&"/meta/tag"===i.path){const s=Array.isArray(i.value)?i.value:[];return s.some((e=>D(e,t)))?e.push(i):e.push(Object.assign(Object.assign({},i),{value:[...s,t]})),e}if(("add"===i.op||"replace"===i.op)&&"/meta"===i.path){const n=null!=i.value&&"object"==typeof i.value?i.value:{},r=null!==(s=n.tag)&&void 0!==s?s:[];return r.some((e=>D(e,t)))?e.push(i):e.push(Object.assign(Object.assign({},i),{value:Object.assign(Object.assign({},n),{tag:[...r,t]})})),e}return e.push(i),e}),[])}return i}function B(t,e){var s,n,r;const o=null!==(n=null===(s=e.meta)||void 0===s?void 0:s.tag)&&void 0!==n?n:[];if(t.workspaceTag){const e=t.workspaceTag;if(!o.some((t=>D(t,e))))throw new i({error:{resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},code:404})}else if(null===(r=t.ignoreTags)||void 0===r?void 0:r.length)for(const u of t.ignoreTags)if(o.some((t=>D(t,u))))throw new i({error:{resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},code:404})}function F(t){return"async-bundle"===t||"async-bulk"===t}function G(t,e){return s(this,void 0,void 0,(function*(){const{resourceType:i}=t,s=function(t,e){var i;const s=e?[...e]:[];if(t.workspaceTag)s.push({name:"_tag",value:J(t.workspaceTag)});else if(null===(i=t.ignoreTags)||void 0===i?void 0:i.length)for(const n of t.ignoreTags)s.push({name:"_tag:not",value:J(n)});return s}(this.config,t.params);let n;s.length&&(n=s.reduce(((t,e)=>(t[e.name]||(t[e.name]=[]),t[e.name].push(e.value),t)),{}));const r=null==e?void 0:e.mode;if(F(r))return yield this.startAsyncJob(`/${i}/_search`,"POST",null!=n?n:{},r,Object.assign(Object.assign({},e),{contentType:"application/x-www-form-urlencoded"}));const o=yield this.fhirRequest(`/${i}/_search`,"POST")(n,Object.assign(Object.assign({},e),{contentType:"application/x-www-form-urlencoded"}));return Object.assign(Object.assign({},o),{entry:o.entry,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}})}))}function H(t,e){return s(this,void 0,void 0,(function*(){var i,s,n,r,o;const{pageSize:u}=t,a=function(t,e){var i={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&e.indexOf(s)<0&&(i[s]=t[s]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(s=Object.getOwnPropertySymbols(t);n<s.length;n++)e.indexOf(s[n])<0&&Object.prototype.propertyIsEnumerable.call(t,s[n])&&(i[s[n]]=t[s[n]])}return i}(t,["pageSize"]);let c=a;if(u){const t=null!==(s=(null!==(i=a.params)&&void 0!==i?i:[]).filter((t=>"_count"!==t.name)))&&void 0!==s?s:[];c=Object.assign(Object.assign({},a),{params:[...t,{name:"_count",value:u}]})}const d=[],l=G;let h=yield l.call(this,c,e);const p=Object.assign(Object.assign({},h),{link:null===(n=h.link)||void 0===n?void 0:n.filter((t=>"next"!==t.relation))});for(;;){const t=h.entry;t&&d.push(...t);const i=null===(o=null===(r=h.link)||void 0===r?void 0:r.find((t=>"next"===t.relation)))||void 0===o?void 0:o.url;if(!i)break;h=yield this.fhirRequest(i,"GET")({},e)}return Object.assign(Object.assign({},p),{entry:d.length?d:void 0,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}})}))}function V(t,e){return s(this,void 0,void 0,(function*(){const i=W(this.config,t),{resourceType:s}=i,n=null==e?void 0:e.mode;return F(n)?yield this.startAsyncJob(`/${s}`,"POST",i,n,e):yield this.fhirRequest(`/${s}`,"POST")(i,e)}))}function X(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e},i){const s=null==i?void 0:i.mode;if(F(s))return yield this.startAsyncJob(`/${t}/${e}`,"GET",{},s,i);const n=yield this.fhirRequest(`/${t}/${e}`,"GET")({},i);return B(this.config,n),n}))}function Z(t,e){return s(this,void 0,void 0,(function*(){const i=W(this.config,t),{id:s,resourceType:n}=i,r=null==e?void 0:e.mode,o=Object.assign(Object.assign({},e),{ifMatch:(null==e?void 0:e.optimisticLockingVersionId)?`W/"${e.optimisticLockingVersionId}"`:void 0});return F(r)?yield this.startAsyncJob(`/${n}/${s}`,"PUT",i,r,o):yield this.fhirRequest(`/${n}/${s}`,"PUT")(i,o)}))}function K(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e,operations:i},s){const n=L(this.config,i),r=null==s?void 0:s.mode,o=Object.assign(Object.assign({},s),{ifMatch:(null==s?void 0:s.optimisticLockingVersionId)?`W/"${s.optimisticLockingVersionId}"`:void 0});return F(r)?yield this.startAsyncJob(`/${t}/${e}`,"PATCH",n,r,Object.assign(Object.assign({},o),{contentType:"application/json-patch+json"})):this.fhirRequest(`/${t}/${e}`,"PATCH")(n,Object.assign(Object.assign({},o),{contentType:"application/json-patch+json"}))}))}function Q(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e},i){const s=null==i?void 0:i.mode;return F(s)?yield this.startAsyncJob(`/${t}/${e}`,"DELETE",{},s,i):yield this.fhirRequest(`/${t}/${e}`,"DELETE")({},i)}))}function Y(t,e){if(!t)return e;const i=Number(t);if(Number.isFinite(i)&&i>=0)return Math.max(0,Math.floor(1e3*i));const s=Date.parse(t);return Number.isFinite(s)?Math.max(0,s-Date.now()):e}function tt(t,e){return s(this,void 0,void 0,(function*(){return yield this.fetchAsyncJobStatus(t,e)}))}function et(e,i,n){return s(this,void 0,void 0,(function*(){var s,r;const o=null!==(s=null==i?void 0:i.pollIntervalMs)&&void 0!==s?s:5e3,u=null!==(r=null==i?void 0:i.timeoutMs)&&void 0!==r?r:9e5,a=Math.max(1,Math.ceil(u/o));for(let t=0;t<a;t++){const i=yield this.fetchAsyncJobStatus(e,n);if(202!==i.status)return i;if(t<a-1){const t="retryAfter"in i?i.retryAfter:void 0;yield new Promise((e=>setTimeout(e,Y(t,o))))}}throw new t({message:`Async job ${e} did not complete within ${u} ms`,code:408})}))}function it(e,i){const s=[],n=e.split("\n");for(let o=0;o<n.length;o++){const e=n[o].trim();if(0!==e.length)try{s.push(JSON.parse(e))}catch(r){throw new t({message:`Failed to parse NDJSON line ${o+1} from ${i}`,code:500,cause:r})}}return s}function st(e,i,n){return s(this,void 0,void 0,(function*(){var r,o,u;const a=yield et.call(this,e,i,n);if(404===a.status)throw new t({message:`Async job ${e} not found`,code:404});if(410===a.status)throw new t({message:`Async job ${e} expired`,code:410});if(200!==a.status||!("mode"in a)||"bulk"!==a.mode)throw new t({message:`Async job ${e} did not complete in bulk mode`,code:a.status});const c=null!==(r=null==n?void 0:n.accessToken)&&void 0!==r?r:this.config.accessToken,d=null!==(o=null==n?void 0:n.projectId)&&void 0!==o?o:this.config.projectId;if(a.manifest.requiresAccessToken&&!c)throw new t({message:`Bulk output for async job ${e} requires an access token`,code:401});const l=null!==(u=this.config.fetch)&&void 0!==u?u:fetch,h={};d&&(h["x-zapehr-project-id"]=d,h["x-oystehr-project-id"]=d),a.manifest.requiresAccessToken&&c&&(h.Authorization=`Bearer ${c}`);const p=Object.keys(h).length>0?h:void 0,v=yield Promise.all(a.manifest.output.map((e=>s(this,void 0,void 0,(function*(){const i=yield l(new Request(e.url,{method:"GET",headers:p}));if(!i.ok)throw new t({message:`Failed to download bulk output (${e.type}): HTTP ${i.status}`,code:i.status});const s=yield i.text();return Object.assign(Object.assign({},e),{resources:it(s,e.url)})})))));return{manifest:a.manifest,output:v}}))}function nt(t,e,i){return s(this,void 0,void 0,(function*(){return{resourceType:"Bundle",type:"collection",entry:(yield st.call(this,t,e,i)).output.flatMap((t=>t.resources)).map((t=>({resource:t}))),unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}}}))}function rt(t,e){return s(this,void 0,void 0,(function*(){yield this.fhirRequest(`/async-job/${t}`,"DELETE")({},e)}))}function ot(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e,versionId:i,count:s,offset:n},r){const o=null==r?void 0:r.mode;return F(o)?i?yield this.startAsyncJob(`/${t}/${e}/_history/${i}`,"GET",{},o,r):yield this.startAsyncJob(`/${t}/${e}/_history`,"GET",{},o,r):i?this.fhirRequest(`/${t}/${e}/_history/${i}`,"GET")({},r):s?this.fhirRequest(`/${t}/${e}/_history?_total=accurate&_count=${s}\n ${n?`&_offset=${n}`:""}`,"GET")({},r):this.fhirRequest(`/${t}/${e}/_history?_total=accurate`,"GET")({},r)}))}function ut(t){const e=t.split("?")[0].split("/").filter(Boolean);return e.length<=1||e[1].startsWith("_")}function at(t){return t.split("?")[0].endsWith("/_search")}function ct(t,e){var i;const{method:s}=t;let n=t.url;if((("GET"===s||"HEAD"===s)&&ut(n)||"POST"===s&&at(n))&&(e.workspaceTag&&(n+=(n.includes("?")?"&":"?")+`_tag=${J(e.workspaceTag)}`),null===(i=e.ignoreTags)||void 0===i?void 0:i.length))for(const o of e.ignoreTags)n+=(n.includes("?")?"&":"?")+`_tag:not=${J(o)}`;const r={request:{method:s,url:n}};if(n.split("?").length>1){const[t,e]=n.split("?"),i=e.split("&").map((t=>{const[e,i]=t.split("=");return{name:e,value:i}})).reduce(((t,{name:e,value:i})=>e?(t[e]||(t[e]=[]),t[e].push(i),t):t),{}),s=new URLSearchParams;m(i,s),r.request.url=`${t}?${s.toString()}`}if(["GET","DELETE","HEAD"].includes(s))return r;if("PUT"===s){const i=W(e,t.resource);return{request:Object.assign(Object.assign({},r.request),{ifMatch:t.ifMatch}),resource:i}}if("PATCH"===s){if("resource"in t){let i=t.resource;const s=i.data;if(s){const t=L(e,JSON.parse(function(t){const e=globalThis.atob(t),i=new Uint8Array(e.length);for(let s=0;s<e.length;s++)i[s]=e.charCodeAt(s);return(new globalThis.TextDecoder).decode(i)}(s)));i=Object.assign(Object.assign({},i),{data:C(JSON.stringify(t))})}return{request:Object.assign(Object.assign({},r.request),{ifMatch:t.ifMatch}),resource:i}}const i=L(e,t.operations),s=C(JSON.stringify(i));return Object.assign(Object.assign({},r),{resource:{resourceType:"Binary",contentType:"application/json-patch+json",data:s}})}if("POST"===s&&at(n))return r;if("POST"===s&&"resource"in t){const i=W(e,t.resource),{fullUrl:s}=t;return Object.assign(Object.assign({},r),{resource:i,fullUrl:s})}throw new Error("Unrecognized method")}function dt(t,e){return s(this,void 0,void 0,(function*(){var s;const n={resourceType:"Bundle",type:"batch",entry:t.requests.map((t=>ct(t,this.config)))},r=null==e?void 0:e.mode;if(F(r))return yield this.startAsyncJob("/","POST",n,r,e);const o=yield this.fhirRequest("/","POST")(n,e),u=o.entry,a=this.config.workspaceTag||(null===(s=this.config.ignoreTags)||void 0===s?void 0:s.length)?null==u?void 0:u.map(((e,s)=>{const n=t.requests[s];if(!n||!(null==e?void 0:e.resource))return e;if(("GET"===n.method||"HEAD"===n.method)&&!ut(n.url))try{B(this.config,e.resource)}catch(r){if(!(r instanceof i))throw r;return{request:e.request,response:{status:"404",outcome:r.cause}}}return e})):u,c=Object.assign(Object.assign({},o),{entry:a,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]},errors:function(){var t;return null===(t=this.entry)||void 0===t?void 0:t.filter((t=>{var e,i,s,n;return(null===(i=null===(e=t.response)||void 0===e?void 0:e.status)||void 0===i?void 0:i.startsWith("4"))||(null===(n=null===(s=t.response)||void 0===s?void 0:s.status)||void 0===n?void 0:n.startsWith("5"))})).map((t=>{var e;return null===(e=t.response)||void 0===e?void 0:e.outcome})).filter((t=>void 0!==t))}});return c}))}function lt(t,e){return s(this,void 0,void 0,(function*(){var i,s;const n={resourceType:"Bundle",type:"transaction",entry:t.requests.map((t=>ct(t,this.config)))},r=null==e?void 0:e.mode;if(F(r))return yield this.startAsyncJob("/","POST",n,r,e);const o=yield this.fhirRequest("/","POST")(n,e);(this.config.workspaceTag||(null===(i=this.config.ignoreTags)||void 0===i?void 0:i.length))&&(null===(s=o.entry)||void 0===s||s.forEach(((e,i)=>{const s=t.requests[i];s&&(null==e?void 0:e.resource)&&("GET"!==s.method&&"HEAD"!==s.method||ut(s.url)||B(this.config,e.resource))})));const u=Object.assign(Object.assign({},o),{entry:o.entry,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}});return u}))}function ht(t,e){return s(this,arguments,void 0,(function*({id:t},e){return this.fhirRequest(`/Patient/${t}/$generate-friendly-patient-id`,"POST")({},e)}))}function pt(t,e){const i=[];if(t.line&&i.push(...t.line),t.city||t.state||t.postalCode){const e=[];t.city&&e.push(t.city),t.state&&e.push(t.state),t.postalCode&&e.push(t.postalCode),i.push(e.join(", "))}return t.use&&((null==e?void 0:e.all)||(null==e?void 0:e.use))&&i.push("["+t.use+"]"),i.join((null==e?void 0:e.lineSeparator)||", ").trim()}function vt(t,e){const i=[];return t.prefix&&!1!==(null==e?void 0:e.prefix)&&i.push(...t.prefix),t.given&&i.push(...t.given),t.family&&i.push(t.family),t.suffix&&!1!==(null==e?void 0:e.suffix)&&i.push(...t.suffix),t.use&&((null==e?void 0:e.all)||(null==e?void 0:e.use))&&i.push("["+t.use+"]"),i.join(" ").trim()}var ft,mt,gt,bt,yt,qt,wt,jt,Ot,Tt,kt,At,St,It,Et,Ut,xt,Pt,$t,zt,Rt,Nt,_t,Mt,Ct,Jt,Dt,Wt,Lt,Bt,Ft,Gt,Ht;class Vt extends p{constructor(t){super(t),ft.add(this),this.search=G,this.searchAndGetAllPages=H,this.create=V,this.get=X,this.update=Z,this.patch=K,this.delete=Q,this.getAsyncJob=tt,this.waitForAsyncJob=et,this.waitForAsyncBulkOutput=st,this.waitForAsyncBulkBundle=nt,this.cancelAsyncJob=rt,this.history=ot,this.batch=dt,this.transaction=lt,this.generateFriendlyPatientId=ht,this.formatAddress=pt,this.formatHumanName=vt}}ft=new WeakSet;class Xt extends p{constructor(t){super(t),mt.add(this)}routeList(t){return this.request("/route","get",n(this,mt,"m",gt).bind(this))(t)}routeCreate(t,e){return this.request("/route","post",n(this,mt,"m",gt).bind(this))(t,e)}routeGet(t,e){return this.request("/route/{routeGuid}","get",n(this,mt,"m",gt).bind(this))(t,e)}routeDelete(t,e){return this.request("/route/{routeGuid}","delete",n(this,mt,"m",gt).bind(this))(t,e)}orderableItemList(t,e){return this.request("/orderableItem","get",n(this,mt,"m",gt).bind(this))(t,e)}orderableItemQuestionnaireGet(t,e){return this.request("/canonical-questionnaire/lab/{labGuid}/compendium/{compendiumVersion}/item/{itemCode}/questionnaire","get",n(this,mt,"m",gt).bind(this))(t,e)}orderSubmit(t,e){return this.request("/submit","post",n(this,mt,"m",gt).bind(this))(t,e)}}mt=new WeakSet,gt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.labApiUrl)&&void 0!==e?e:"https://labs-api.zapehr.com/v1"};class Zt extends p{constructor(t){super(t),bt.add(this)}list(t){return this.request("/m2m","get",n(this,bt,"m",yt).bind(this))(t)}create(t,e){return this.request("/m2m","post",n(this,bt,"m",yt).bind(this))(t,e)}me(t){return this.request("/m2m/me","get",n(this,bt,"m",yt).bind(this))(t)}get(t,e){return this.request("/m2m/{id}","get",n(this,bt,"m",yt).bind(this))(t,e)}update(t,e){return this.request("/m2m/{id}","patch",n(this,bt,"m",yt).bind(this))(t,e)}delete(t,e){return this.request("/m2m/{id}","delete",n(this,bt,"m",yt).bind(this))(t,e)}rotateSecret(t,e){return this.request("/m2m/{id}/rotate-secret","post",n(this,bt,"m",yt).bind(this))(t,e)}listV2(t,e){return this.request("/m2m/v2/list","get",n(this,bt,"m",yt).bind(this))(t,e)}}bt=new WeakSet,yt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class Kt extends p{constructor(t){super(t),qt.add(this)}getMessagingConfig(t){return this.request("/messaging/config","get",n(this,qt,"m",wt).bind(this))(t)}}qt=new WeakSet,wt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class Qt extends p{constructor(t){super(t),jt.add(this)}setUp(t,e){return this.request("/payment/payment-method/setup","post",n(this,jt,"m",Ot).bind(this))(t,e)}setDefault(t,e){return this.request("/payment/payment-method/set-default","post",n(this,jt,"m",Ot).bind(this))(t,e)}delete(t,e){return this.request("/payment/payment-method","delete",n(this,jt,"m",Ot).bind(this))(t,e)}list(t,e){return this.request("/payment/payment-method/list","post",n(this,jt,"m",Ot).bind(this))(t,e)}}jt=new WeakSet,Ot=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class Yt extends p{constructor(t){super(t),Tt.add(this)}get(t){return this.request("/project","get",n(this,Tt,"m",kt).bind(this))(t)}update(t,e){return this.request("/project","patch",n(this,Tt,"m",kt).bind(this))(t,e)}}function te(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.rcmApiUrl)&&void 0!==e?e:"https://rcm-api.zapehr.com/v1"}function ee({id:t}){return`${te.call(this)}/payer/${t}`}function ie(e,i){return s(this,arguments,void 0,(function*({url:e},i){if(!e.startsWith(ee.call(this,{id:""})))throw new t({code:400,message:"Invalid payer URL."});const s=new URL(e).pathname.split("/").filter(Boolean),n=s[s.length-1];return this.request("/payer/{id}","get",te.bind(this))({id:n},i)}))}Tt=new WeakSet,kt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class se extends p{constructor(t){super(t),At.add(this),this.constructPayerUrl=ee,this.getPayerByUrl=ie}eligibilityCheck(t,e){return this.request("/eligibility-check","post",n(this,At,"m",St).bind(this))(t,e)}submitClaim(t,e){return this.request("/claim/{claimId}/submit","post",n(this,At,"m",St).bind(this))(t,e)}setClaimStatus(t,e){return this.request("/claim/{claimId}/status","post",n(this,At,"m",St).bind(this))(t,e)}listPayers(t,e){return this.request("/payer","get",n(this,At,"m",St).bind(this))(t,e)}getPayer(t,e){return this.request("/payer/{id}","get",n(this,At,"m",St).bind(this))(t,e)}}At=new WeakSet,St=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.rcmApiUrl)&&void 0!==e?e:"https://rcm-api.zapehr.com/v1"};class ne extends p{constructor(t){super(t),It.add(this)}list(t){return this.request("/iam/role","get",n(this,It,"m",Et).bind(this))(t)}create(t,e){return this.request("/iam/role","post",n(this,It,"m",Et).bind(this))(t,e)}get(t,e){return this.request("/iam/role/{roleId}","get",n(this,It,"m",Et).bind(this))(t,e)}update(t,e){return this.request("/iam/role/{roleId}","patch",n(this,It,"m",Et).bind(this))(t,e)}delete(t,e){return this.request("/iam/role/{roleId}","delete",n(this,It,"m",Et).bind(this))(t,e)}}It=new WeakSet,Et=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class re extends p{constructor(t){super(t),Ut.add(this)}list(t){return this.request("/secret","get",n(this,Ut,"m",xt).bind(this))(t)}set(t,e){return this.request("/secret","post",n(this,Ut,"m",xt).bind(this))(t,e)}get(t,e){return this.request("/secret/{name}","get",n(this,Ut,"m",xt).bind(this))(t,e)}delete(t,e){return this.request("/secret/{name}","delete",n(this,Ut,"m",xt).bind(this))(t,e)}}Ut=new WeakSet,xt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class oe extends p{constructor(t){super(t),Pt.add(this)}createMeeting(t,e){return this.request("/telemed/v2/meeting","post",n(this,Pt,"m",$t).bind(this))(t,e)}joinMeeting(t,e){return this.request("/telemed/v2/meeting/{encounterId}/join","get",n(this,Pt,"m",$t).bind(this))(t,e)}}Pt=new WeakSet,$t=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class ue extends p{constructor(t){super(t),zt.add(this)}searchCpt(t,e){return this.request("/cpt/search","get",n(this,zt,"m",Rt).bind(this))(t,e)}searchHcpcs(t,e){return this.request("/hcpcs/search","get",n(this,zt,"m",Rt).bind(this))(t,e)}}zt=new WeakSet,Rt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.terminologyApiUrl)&&void 0!==e?e:"https://terminology-api.zapehr.com/v1"};class ae extends p{constructor(t){super(t),Nt.add(this)}send(t,e){return this.request("/messaging/transactional-sms/send","post",n(this,Nt,"m",_t).bind(this))(t,e)}}Nt=new WeakSet,_t=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class ce extends p{constructor(t){super(t),Mt.add(this)}me(t){return this.request("/user/me","get",n(this,Mt,"m",Ct).bind(this))(t)}get(t,e){return this.request("/user/{id}","get",n(this,Mt,"m",Ct).bind(this))(t,e)}update(t,e){return this.request("/user/{id}","patch",n(this,Mt,"m",Ct).bind(this))(t,e)}delete(t,e){return this.request("/user/{id}","delete",n(this,Mt,"m",Ct).bind(this))(t,e)}resetMfa(t,e){return this.request("/user/{id}/reset-mfa","post",n(this,Mt,"m",Ct).bind(this))(t,e)}resetPasswordLink(t,e){return this.request("/user/{id}/reset-password-link","post",n(this,Mt,"m",Ct).bind(this))(t,e)}changePassword(t,e){return this.request("/user/{id}/change-password","post",n(this,Mt,"m",Ct).bind(this))(t,e)}invite(t,e){return this.request("/user/invite","post",n(this,Mt,"m",Ct).bind(this))(t,e)}list(t){return this.request("/user","get",n(this,Mt,"m",Ct).bind(this))(t)}listV2(t,e){return this.request("/user/v2/list","get",n(this,Mt,"m",Ct).bind(this))(t,e)}}Mt=new WeakSet,Ct=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class de extends p{constructor(t){super(t),Jt.add(this)}get(t){return this.request("/version","get",n(this,Jt,"m",Dt).bind(this))(t)}}function le(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"}function he(t){return s(this,arguments,void 0,(function*({bucketName:t,"objectPath+":e,file:i}){const s=yield this.request("/z3/{bucketName}/{objectPath+}","post",le.bind(this))({action:"upload",bucketName:t,"objectPath+":e});yield fetch(s.signedUrl,{method:"PUT",body:i})}))}function pe(t){return s(this,arguments,void 0,(function*({bucketName:t,"objectPath+":e}){const i=yield this.request("/z3/{bucketName}/{objectPath+}","post",le.bind(this))({action:"download",bucketName:t,"objectPath+":e}),s=yield fetch(i.signedUrl,{method:"GET"});if(!s.ok)throw new Error("Failed to download file");return s.arrayBuffer()}))}function ve(e){return s(this,void 0,void 0,(function*(){var i,s;let n,r;const o=new URL(e.url);if("z3:"===o.protocol){const t=o.pathname.split("/").slice(1);n=o.hostname,r=t.join("/")}else{if(!o.href.startsWith(null!==(s=null===(i=this.config.services)||void 0===i?void 0:i.projectApiUrl)&&void 0!==s?s:"https://project-api.zapehr.com/v1"))throw new t({message:"Invalid Z3 URL",code:400});{const t=o.pathname.split("/").slice(3);n=t[0],r=t.slice(1).join("/")}}const u={action:"upload",bucketName:n,"objectPath+":r};return this.request("/z3/{bucketName}/{objectPath+}","post",le.bind(this))(u)}))}Jt=new WeakSet,Dt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class fe extends p{constructor(t){super(t),Wt.add(this),this.uploadFile=he,this.downloadFile=pe,this.getPresignedUrlForZ3Url=ve}listBuckets(t){return this.request("/z3","get",n(this,Wt,"m",Lt).bind(this))(t)}createBucket(t,e){return this.request("/z3/{bucketName}","put",n(this,Wt,"m",Lt).bind(this))(t,e)}deleteBucket(t,e){return this.request("/z3/{bucketName}","delete",n(this,Wt,"m",Lt).bind(this))(t,e)}listObjects(t,e){return this.request("/z3/{bucketName}/{objectPath+}","get",n(this,Wt,"m",Lt).bind(this))(t,e)}getPresignedUrl(t,e){return this.request("/z3/{bucketName}/{objectPath+}","post",n(this,Wt,"m",Lt).bind(this))(t,e)}deleteObject(t,e){return this.request("/z3/{bucketName}/{objectPath+}","delete",n(this,Wt,"m",Lt).bind(this))(t,e)}}function me(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.zambdaApiUrl)&&void 0!==e?e:"https://zambda-api.zapehr.com/v1"}function ge(e){return s(this,arguments,void 0,(function*({id:e,file:i,filename:s}){const n=yield this.request("/zambda/{id}/presigned-url","post",me.bind(this))({id:e,action:"upload",filename:s}),r=yield fetch(n.signedUrl,{method:"PUT",body:i});if(!r.ok)throw new t({message:"Failed to upload file",code:r.status,cause:r.statusText})}))}function be(e){return s(this,arguments,void 0,(function*({id:e}){const i=yield this.request("/zambda/{id}/presigned-url","post",me.bind(this))({id:e,action:"download"}),s=yield fetch(i.signedUrl,{method:"GET"});if(!s.ok)throw new t({message:"Failed to download file",code:s.status,cause:s.statusText});return s.arrayBuffer()}))}Wt=new WeakSet,Lt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class ye extends p{constructor(t){super(t),Bt.add(this),this.uploadFile=ge,this.downloadFile=be}list(t){return this.request("/zambda","get",n(this,Bt,"m",Ft).bind(this))(t)}create(t,e){return this.request("/zambda","post",n(this,Bt,"m",Ft).bind(this))(t,e)}get(t,e){return this.request("/zambda/{id}","get",n(this,Bt,"m",Ft).bind(this))(t,e)}update(t,e){return this.request("/zambda/{id}","patch",n(this,Bt,"m",Ft).bind(this))(t,e)}delete(t,e){return this.request("/zambda/{id}","delete",n(this,Bt,"m",Ft).bind(this))(t,e)}execute(t,e){return this.request("/zambda/{id}/execute","post",n(this,Bt,"m",Ft).bind(this))(t,e)}executePublic(t,e){return this.request("/zambda/{id}/execute-public","post",n(this,Bt,"m",Ft).bind(this))(t,e)}s3Upload(t,e){return this.request("/zambda/{id}/s3-upload","post",n(this,Bt,"m",Ft).bind(this))(t,e)}getPresignedUrl(t,e){return this.request("/zambda/{id}/presigned-url","post",n(this,Bt,"m",Ft).bind(this))(t,e)}}Bt=new WeakSet,Ft=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.zambdaApiUrl)&&void 0!==e?e:"https://zambda-api.zapehr.com/v1"};class qe extends p{constructor(t){super(t),Gt.add(this)}list(t,e){return this.request("/zambda/{id}/logStream","post",n(this,Gt,"m",Ht).bind(this))(t,e)}search(t,e){return this.request("/zambda/{id}/logStream/search","post",n(this,Gt,"m",Ht).bind(this))(t,e)}get(t,e){return this.request("/zambda/{id}/logStream/{logStreamName}","post",n(this,Gt,"m",Ht).bind(this))(t,e)}}Gt=new WeakSet,Ht=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.zambdaApiUrl)&&void 0!==e?e:"https://zambda-api.zapehr.com/v1"};let we=class{constructor(e){var i,s,n,r,o,u;if(e.workspaceTag&&e.ignoreTags)throw new t({message:"workspaceTag and ignoreTags are mutually exclusive and cannot both be set in config",code:400});this.config=e,null!==(i=(r=this.config).services)&&void 0!==i||(r.services={}),null!==(s=(o=this.config.services).projectApiUrl)&&void 0!==s||(o.projectApiUrl=e.projectApiUrl),null!==(n=(u=this.config.services).fhirApiUrl)&&void 0!==n||(u.fhirApiUrl=e.fhirApiUrl),this.application=new w(e),this.developer=new R(e),this.m2m=new Zt(e),this.messaging=new Kt(e),this.conversation=new z(e),this.transactionalSMS=new ae(e),this.paymentMethod=new Qt(e),this.charge=new j(e),this.project=new Yt(e),this.role=new ne(e),this.secret=new re(e),this.telemed=new oe(e),this.user=new ce(e),this.version=new de(e),this.z3=new fe(e),this.fax=new _(e),this.lab=new Xt(e),this.erx=new N(e),this.terminology=new ue(e),this.zambda=new ye(e),this.zambdaLogStream=new qe(e),this.rcm=new se(e),this.fhir=new Vt(e)}};class je extends we{}je.OystehrFHIRError=i,je.OystehrSdkError=t,exports.default=je;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class t extends Error{constructor({message:e,code:i,cause:s}){super(e,{cause:s}),Object.setPrototypeOf(this,t.prototype),this.code=i,this.name="OystehrSdkError"}toString(){return`${this.name}: ${this.message} (code: ${this.code})`}toJSON(){return{name:this.name,message:this.message,code:this.code,cause:this.cause}}}function e(t){var e;const i=[];for(const s of null!==(e=t.issue)&&void 0!==e?e:[])s.details&&s.details.text&&i.push(s.details.text);return i.length||i.push("Unknown FHIR error"),i.join(",")}class i extends t{constructor({error:t,code:s}){super({message:e(t),code:s}),Object.setPrototypeOf(this,i.prototype),this.cause=t,this.name="OystehrFHIRError"}toJSON(){return{name:this.name,message:this.message,code:this.code,cause:this.cause}}}function s(t,e,i,s){return new(i||(i=Promise))((function(n,r){function o(t){try{a(s.next(t))}catch(e){r(e)}}function u(t){try{a(s.throw(t))}catch(e){r(e)}}function a(t){var e;t.done?n(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,u)}a((s=s.apply(t,e||[])).next())}))}function n(t,e,i,s){if("a"===i&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?s:"a"===i?s.call(t):s?s.value:e.get(t)}"function"==typeof SuppressedError&&SuppressedError;var r=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;const o=[];for(let Oe=0;Oe<256;++Oe)o.push((Oe+256).toString(16).slice(1));let u;const a=new Uint8Array(16);var c={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};class d{constructor({level:t}){this._level=t}error(t,e={}){this._level&&["error","info","debug"].includes(this._level)&&console.error(JSON.stringify(Object.assign({message:t},e)))}info(t,e={}){this._level&&["info","debug"].includes(this._level)&&console.info(JSON.stringify(Object.assign({message:t},e)))}debug(t,e={}){this._level&&["debug"].includes(this._level)&&console.debug(JSON.stringify(Object.assign({message:t},e)))}time(t,e={}){this._level&&["debug"].includes(this._level)&&console.time(JSON.stringify(Object.assign({message:t},e)))}timeEnd(t,e={}){this._level&&["debug"].includes(this._level)&&console.timeEnd(JSON.stringify(Object.assign({message:t},e)))}}const l=[408,429,500,502,503,504],h=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET"];class p{constructor(t){this.config=t,this.logger=new d({level:this.config.logLevel})}request(e,i,n){return(r,o)=>s(this,void 0,void 0,(function*(){const s=()=>this.config,u=()=>this.logger;try{return yield v(n,s,u,e,i)(r,o)}catch(a){const e=a;throw this.logger.error(e.message,{code:e.code,cause:e.cause}),new t({message:e.message,code:e.code,cause:e.cause})}}))}fhirRequest(e,n){return(r,o,u)=>s(this,void 0,void 0,(function*(){try{const t=()=>{var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.fhirApiUrl)&&void 0!==e?e:"https://fhir-api.zapehr.com"},i=()=>this.config,s=()=>this.logger;return yield v(t,i,s,e,n)(r,o,u)}catch(s){const e=s;if("string"==typeof e.message)throw new t({message:e.message,code:e.code,cause:e.cause});throw new i({error:e.message,code:e.code})}}))}startAsyncJob(e,i,n,r,o){return s(this,void 0,void 0,(function*(){const s="async-bulk"===r?"bulk":"bundle",u="async-bulk"===r?this.appendBulkOutputFormat(e):e,a=yield this.fhirRequest(u,i)(n,Object.assign(Object.assign({},o),{rawResponse:!0}),r);if(202!==a.status)throw new t({message:`Expected start async job to return 202 Accepted, received ${a.status}`,code:a.status});const c=this.readHeader(a.headers,"content-location");if(!c)throw new t({message:"Start Async job response missing Content-Location header",code:500});const d=this.parseAsyncJobId(c);if(!d)throw new t({message:`Could not parse async job id from Content-Location: ${c}`,code:500});return{jobId:d,contentLocation:c,mode:s}}))}fetchAsyncJobStatus(t,e){return s(this,void 0,void 0,(function*(){var i,s,n;const r=yield this.fhirRequest(`/async-job/${t}`,"GET")({},Object.assign(Object.assign({},e),{rawResponse:!0}));if(202===r.status)return{status:202,xProgress:this.readHeader(r.headers,"x-progress"),retryAfter:this.readHeader(r.headers,"retry-after")};if(410===r.status)return{status:410};if(404===r.status)return{status:404};if(200===r.status){if(this.isBulkManifest(r.body))return{status:200,mode:"bulk",manifest:r.body};const t=r.body;if("Bundle"===(null==t?void 0:t.resourceType)&&"batch-response"===(null==t?void 0:t.type)){const e=null===(i=t.entry)||void 0===i?void 0:i[0];return{status:200,mode:"bundle",bundle:t,interactionStatus:null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status,resource:null==e?void 0:e.resource,outcome:null===(n=null==e?void 0:e.response)||void 0===n?void 0:n.outcome}}return{status:200,body:r.body}}return{status:r.status,body:r.body}}))}readHeader(t,e){const i=t[e];if(null!=i)return i;const s=e.toLowerCase(),n=Object.keys(t).find((t=>t.toLowerCase()===s));return n?t[n]:void 0}parseAsyncJobId(t){const e=t.split("/").filter(Boolean),i=e.lastIndexOf("async-job");if(!(i<0||i+1>=e.length))return e[i+1]}appendBulkOutputFormat(t){const e=t.includes("?")?"&":"?";return`${t}${e}_outputFormat=${encodeURIComponent("application/fhir+ndjson")}`}isBulkManifest(t){if(null==t||"object"!=typeof t)return!1;const e=t;return"string"==typeof e.transactionTime&&"string"==typeof e.request&&"boolean"==typeof e.requiresAccessToken&&Array.isArray(e.output)&&Array.isArray(e.error)}}function v(e,i,n,d,p){return(v,m,g)=>s(this,void 0,void 0,(function*(){var b,y,q,w,j,O,T,k,S,A,E,x,I,U;let[P,$]=function(t,e){var i;const s=!!t&&!e&&!Array.isArray(t)&&function(t){var e,i;return"accessToken"in t||"projectId"in t&&"string"==typeof(i=t.projectId)&&r.test(i)||"contentType"in t&&2===(null===(e=t.contentType)||void 0===e?void 0:e.split("/").length)||"requestId"in t||"ifMatch"in t&&t.ifMatch.startsWith('W/"')||"ifNoneExist"in t||"mode"in t||"rawResponse"in t}(t)&&!function(t){return"string"==typeof t.resourceType&&t.resourceType.length>0}(t);return[s?{}:null!==(i=t)&&void 0!==i?i:{},s?t:e]}(v,m);null!=$||($={}),null!==(b=$.requestId)&&void 0!==b||($.requestId=function(t){if(c.randomUUID&&!t)return c.randomUUID();const e=(t=t||{}).random??t.rng?.()??function(){if(!u){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");u=crypto.getRandomValues.bind(crypto)}return u(a)}();if(e.length<16)throw new Error("Random bytes length must be >= 16");return e[6]=15&e[6]|64,e[8]=63&e[8]|128,function(t,e=0){return(o[t[e+0]]+o[t[e+1]]+o[t[e+2]]+o[t[e+3]]+"-"+o[t[e+4]]+o[t[e+5]]+"-"+o[t[e+6]]+o[t[e+7]]+"-"+o[t[e+8]]+o[t[e+9]]+"-"+o[t[e+10]]+o[t[e+11]]+o[t[e+12]]+o[t[e+13]]+o[t[e+14]]+o[t[e+15]]).toLowerCase()}(e)}());const z=i(),R=n(),N=p.toLowerCase();R.debug("Beginning fetch",{method:N,path:d,requestId:null==$?void 0:$.requestId});const _=null!==(y=z.fetch)&&void 0!==y?y:fetch,M=null!==(q=null==$?void 0:$.accessToken)&&void 0!==q?q:z.accessToken,C=null!==(w=null==$?void 0:$.projectId)&&void 0!==w?w:z.projectId;let J=d,D=P;if(!Array.isArray(P)){const[e,i]=function(e,i){const s=Object.assign({},i),n=e.replace(/\{([^}]+)\}/g,((e,n)=>{if(delete s[n],n.match(/^.*\+$/))return i[n]+"";if(!i[n]||""===i[n])throw new t({message:`Required path parameter is an empty string: ${n}`,code:400});return i[n]?encodeURIComponent(i[n]+""):""})),r=Object.keys(s);return[n,r.length?r.reduce(((t,e)=>Object.assign(Object.assign({},t),{[e]:s[e]})),{}):{}]}(d,P);J=e,D=i}R.debug("Substituted parameters in path",{method:N,path:d,requestId:null==$?void 0:$.requestId}),J=J.replace(/^\//,"");const W=e(),L=W.endsWith("/")?W:W+"/",B=new URL(J,L);let F;if(Array.isArray(D))F=JSON.stringify(D);else if(Object.keys(D).length)if("get"===N)f(D,B.searchParams);else if("application/x-www-form-urlencoded"===(null==$?void 0:$.contentType)){const t=new URLSearchParams;f(D,t),F=t.toString()}else F=JSON.stringify(D);else"application/x-www-form-urlencoded"!==(null==$?void 0:$.contentType)&&"post"===N&&(F="{}");R.debug("Prepared request body",{method:N,path:d,requestId:null==$?void 0:$.requestId});const G=function(t){if("async-bundle"===t||"async-bulk"===t)return"respond-async"}(g),H=Object.assign(C?{"x-zapehr-project-id":C,"x-oystehr-project-id":C}:{},{"content-type":null!==(j=null==$?void 0:$.contentType)&&void 0!==j?j:"application/json"},G?{Prefer:G}:{},M?{Authorization:`Bearer ${M}`}:{},(null==$?void 0:$.ifMatch)?{"If-Match":$.ifMatch}:{},(null==$?void 0:$.ifNoneExist)?{"If-None-Exist":$.ifNoneExist}:{},{"x-oystehr-request-id":null==$?void 0:$.requestId}),V={retries:null!==(T=null===(O=z.retry)||void 0===O?void 0:O.retries)&&void 0!==T?T:3,jitter:null!==(S=null===(k=z.retry)||void 0===k?void 0:k.jitter)&&void 0!==S?S:20,delay:null!==(E=null===(A=z.retry)||void 0===A?void 0:A.delay)&&void 0!==E?E:100,onRetry:null===(x=z.retry)||void 0===x?void 0:x.onRetry,retryOn:[...null!==(U=null===(I=z.retry)||void 0===I?void 0:I.retryOn)&&void 0!==U?U:[],...l]};return V.retryOn.push(...l),function(t,e){return s(this,void 0,void 0,(function*(){var i,s;let n;for(const o of Array.from({length:(null!==(i=e.retries)&&void 0!==i?i:0)+1},((t,e)=>e)))try{return yield t()}catch(r){let t=!1;if("response"in r){const i=r;t=e.retryOn.includes(i.code),n={message:r.message,code:r.code}}else if(n=r,"code"in r&&"string"==typeof r.code){const e=r;t=h.includes(e.code)}if(!t)break;const i=Math.floor(Math.random()*(e.jitter+1));yield new Promise((t=>setTimeout(t,e.delay+i))),e.onRetry&&o!==(null!==(s=e.retries)&&void 0!==s?s:0)&&e.onRetry(o+1)}throw n}))}((()=>s(this,void 0,void 0,(function*(){var t,e,i,s,n,r,o,u;R.info("Request start",{method:N,url:B,requestId:null==$?void 0:$.requestId});const a=Date.now(),c=yield _(new Request(B,{method:N.toUpperCase(),body:F,headers:H}));R.info("Request end",{method:N,url:B,duration:Date.now()-a,requestId:null==$?void 0:$.requestId});const d=c.body?yield c.text():null;let l;const h=c.headers.get("content-type");try{d&&((null==h?void 0:h.includes("application/json"))||(null==h?void 0:h.includes("application/fhir+json")))?(R.time("Deserialized JSON response",{method:N,url:B,requestId:null==$?void 0:$.requestId}),l=JSON.parse(d),R.timeEnd("Deserialized JSON response",{method:N,url:B,requestId:null==$?void 0:$.requestId})):d&&((null==h?void 0:h.includes("application/xml"))||(null==h?void 0:h.includes("text/xml")))?(R.time("Deserialized XML response",{method:N,url:B,requestId:null==$?void 0:$.requestId}),l=function(t){try{const e=t.match(/<status>(\d+)<\/status>/),i=e?parseInt(e[1],10):null,s=t.match(/<output>([\s\S]*?)<\/output>/),n=s?s[1]:null;return null===i||null===n?null:{status:i,output:n}}catch(e){return null}}(d),R.timeEnd("Deserialized XML response",{method:N,url:B,requestId:null==$?void 0:$.requestId})):l=null}catch(p){l=null}if(R.debug("Deserialized response",{method:N,url:B,requestId:null==$?void 0:$.requestId}),null==$?void 0:$.rawResponse){const t={};return c.headers.forEach(((e,i)=>{t[i]=e})),{status:c.status,headers:t,body:null!=l?l:d}}if(!c.ok||c.status>=400)throw{message:null!==(n=null!==(s=null!==(i=null!==(e="string"==typeof(null==l?void 0:l.output)?l.output:null===(t=null==l?void 0:l.output)||void 0===t?void 0:t.message)&&void 0!==e?e:null==l?void 0:l.message)&&void 0!==i?i:l)&&void 0!==s?s:d)&&void 0!==n?n:c.statusText,code:null!==(u=null!==(o=null===(r=null==l?void 0:l.output)||void 0===r?void 0:r.code)&&void 0!==o?o:null==l?void 0:l.code)&&void 0!==u?u:c.status,response:c};return l}))),V)}))}function f(t,e){for(const[i,s]of Object.entries(t))Array.isArray(s)?s.forEach((t=>null!=t&&e.append(i,t))):null!=s&&e.append(i,s)}var m,g,b,y;class q extends p{constructor(t){super(t),m.add(this)}list(t){return this.request("/application","get",n(this,m,"m",g).bind(this))(t)}create(t,e){return this.request("/application","post",n(this,m,"m",g).bind(this))(t,e)}get(t,e){return this.request("/application/{id}","get",n(this,m,"m",g).bind(this))(t,e)}update(t,e){return this.request("/application/{id}","patch",n(this,m,"m",g).bind(this))(t,e)}delete(t,e){return this.request("/application/{id}","delete",n(this,m,"m",g).bind(this))(t,e)}rotateSecret(t,e){return this.request("/application/{id}/rotate-secret","post",n(this,m,"m",g).bind(this))(t,e)}revokeRefreshToken(t,e){return this.request("/application/{id}/revoke-refresh-token","post",n(this,m,"m",g).bind(this))(t,e)}revokeAccessToken(t,e){return this.request("/application/{id}/revoke-access-token","post",n(this,m,"m",g).bind(this))(t,e)}}m=new WeakSet,g=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class w extends p{constructor(t){super(t),b.add(this)}issue(t,e){return this.request("/payment/charge/issue","post",n(this,b,"m",y).bind(this))(t,e)}status(t,e){return this.request("/payment/charge/status","post",n(this,b,"m",y).bind(this))(t,e)}}b=new WeakSet,y=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};const j="https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release",O="addressString";function T(t){var e,i,s;if(function(t){return Object.hasOwn(t,"virtualService")}(t)){const i=null===(e=t.virtualService)||void 0===e?void 0:e.find((t=>{var e;return"https://fhir.zapehr.com/virtual-service-type"===(null===(e=t.channelType)||void 0===e?void 0:e.system)}));return null==i?void 0:i.addressString}if(!t.extension)return;const n=t.extension.find((t=>t.url===j));return(null==n?void 0:n.extension)?null===(s=null===(i=n.extension)||void 0===i?void 0:i.find((t=>t.url===O)))||void 0===s?void 0:s.valueString:void 0}var k,S,A,E,x,I,U,P;class $ extends p{constructor(t){super(t),k.add(this),this.ENCOUNTER_VS_EXTENSION_URL=j,this.ENCOUNTER_VS_EXTENSION_RELATIVE_URL=O,this.getConversationIdFromEncounter=T}create(t,e){return this.request("/messaging/conversation","post",n(this,k,"m",S).bind(this))(t,e)}getToken(t){return this.request("/messaging/conversation/token","get",n(this,k,"m",S).bind(this))(t)}addParticipant(t,e){return this.request("/messaging/conversation/{conversationId}/participant","post",n(this,k,"m",S).bind(this))(t,e)}removeParticipant(t,e){return this.request("/messaging/conversation/{conversationId}/participant","delete",n(this,k,"m",S).bind(this))(t,e)}message(t,e){return this.request("/messaging/conversation/{conversationId}/message","post",n(this,k,"m",S).bind(this))(t,e)}}k=new WeakSet,S=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class z extends p{constructor(t){super(t),A.add(this)}get(t,e){return this.request("/developer/{id}","get",n(this,A,"m",E).bind(this))(t,e)}update(t,e){return this.request("/developer/{id}","patch",n(this,A,"m",E).bind(this))(t,e)}delete(t,e){return this.request("/developer/{id}","delete",n(this,A,"m",E).bind(this))(t,e)}invite(t,e){return this.request("/developer/invite","post",n(this,A,"m",E).bind(this))(t,e)}list(t){return this.request("/developer","get",n(this,A,"m",E).bind(this))(t)}listV2(t,e){return this.request("/developer/v2/list","get",n(this,A,"m",E).bind(this))(t,e)}}A=new WeakSet,E=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class R extends p{constructor(t){super(t),x.add(this)}searchAllergens(t,e){return this.request("/allergen","get",n(this,x,"m",I).bind(this))(t,e)}searchMedications(t,e){return this.request("/medication","get",n(this,x,"m",I).bind(this))(t,e)}getMedication(t,e){return this.request("/medication/details","get",n(this,x,"m",I).bind(this))(t,e)}getConfiguration(t){return this.request("/config","get",n(this,x,"m",I).bind(this))(t)}checkAllergyInteractions(t,e){return this.request("/patient/{patientId}/interactions/allergy","get",n(this,x,"m",I).bind(this))(t,e)}checkMedicationInteractions(t,e){return this.request("/patient/{patientId}/interactions/medication","get",n(this,x,"m",I).bind(this))(t,e)}checkPrecheckInteractions(t,e){return this.request("/patient/{patientId}/interactions/precheck/{drugId}","get",n(this,x,"m",I).bind(this))(t,e)}getMedicationHistory(t,e){return this.request("/patient/{patientId}/medication-history","get",n(this,x,"m",I).bind(this))(t,e)}addPatientPharmacy(t,e){return this.request("/patient/{patientId}/pharmacies","post",n(this,x,"m",I).bind(this))(t,e)}cancelPrescription(t,e){return this.request("/patient/{patientId}/prescriptions/{medicationRequestId}","delete",n(this,x,"m",I).bind(this))(t,e)}syncPatient(t,e){return this.request("/patient/{patientId}/sync","post",n(this,x,"m",I).bind(this))(t,e)}searchPharmacies(t,e){return this.request("/pharmacy","get",n(this,x,"m",I).bind(this))(t,e)}getPharmacy(t,e){return this.request("/pharmacy/{pharmacyId}","get",n(this,x,"m",I).bind(this))(t,e)}connectPractitioner(t,e){return this.request("/practitioner/connect","get",n(this,x,"m",I).bind(this))(t,e)}checkPractitionerEnrollment(t,e){return this.request("/practitioner/{practitionerId}","get",n(this,x,"m",I).bind(this))(t,e)}enrollPractitioner(t,e){return this.request("/practitioner/{practitionerId}","post",n(this,x,"m",I).bind(this))(t,e)}unenrollPractitioner(t,e){return this.request("/practitioner/{practitionerId}","delete",n(this,x,"m",I).bind(this))(t,e)}}x=new WeakSet,I=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.erxApiUrl)&&void 0!==e?e:"https://erx-api.zapehr.com/v3"};class N extends p{constructor(t){super(t),U.add(this)}offboard(t){return this.request("/offboard","post",n(this,U,"m",P).bind(this))(t)}onboard(t){return this.request("/onboard","post",n(this,U,"m",P).bind(this))(t)}getConfiguration(t){return this.request("/config","get",n(this,U,"m",P).bind(this))(t)}send(t,e){return this.request("/send","post",n(this,U,"m",P).bind(this))(t,e)}}U=new WeakSet,P=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.faxApiUrl)&&void 0!==e?e:"https://fax-api.zapehr.com/v1"};const _=65535;function M(t){const e=(new globalThis.TextEncoder).encode(t);let i="";for(let s=0;s<e.length;s+=_){const t=e.subarray(s,s+_);i+=globalThis.btoa(String.fromCodePoint.apply(void 0,t))}return i}function C(t){var e,i;return t.system?`${t.system}|${null!==(e=t.code)&&void 0!==e?e:""}`:null!==(i=t.code)&&void 0!==i?i:""}function J(t,e){var i,s,n,r;return(null!==(i=t.system)&&void 0!==i?i:"")===(null!==(s=e.system)&&void 0!==s?s:"")&&(null!==(n=t.code)&&void 0!==n?n:"")===(null!==(r=e.code)&&void 0!==r?r:"")}function D(e,i){var s,n,r,o,u,a,c;const d=i;if(null===(s=e.ignoreTags)||void 0===s?void 0:s.length){const s=null!==(r=null===(n=d.meta)||void 0===n?void 0:n.tag)&&void 0!==r?r:[];for(const i of e.ignoreTags)if(s.some((t=>J(t,i))))throw new t({message:`Resource has an ignored tag (system: "${null!==(o=i.system)&&void 0!==o?o:""}", code: "${null!==(u=i.code)&&void 0!==u?u:""}") and cannot be mutated in ignoreTags mode`,code:400});return i}if(e.workspaceTag){const t=e.workspaceTag,s=null!==(c=null===(a=d.meta)||void 0===a?void 0:a.tag)&&void 0!==c?c:[];if(!s.some((e=>J(e,t))))return Object.assign(Object.assign({},i),{meta:Object.assign(Object.assign({},d.meta),{tag:[...s,t]})})}return i}function W(e,i){var s,n,r;if(null===(s=e.ignoreTags)||void 0===s?void 0:s.length){for(const s of i)if("add"===s.op||"replace"===s.op||"test"===s.op){const i=s.value;if(null!=i&&"object"==typeof i){const s=i;if(void 0!==s.code)for(const i of e.ignoreTags)if(J(s,i))throw new t({message:`Patch operation contains an ignored tag (system: "${null!==(n=i.system)&&void 0!==n?n:""}", code: "${null!==(r=i.code)&&void 0!==r?r:""}") and cannot be applied in ignoreTags mode`,code:400})}}return i}if(e.workspaceTag){const t=e.workspaceTag;return i.reduce(((e,i)=>{var s;if("remove"===i.op&&"/meta/tag"===i.path)return e.push(i),e.push({op:"add",path:"/meta/tag",value:[t]}),e;if("remove"===i.op&&"/meta"===i.path)return e.push(i),e.push({op:"add",path:"/meta",value:{tag:[t]}}),e;if(("add"===i.op||"replace"===i.op)&&"/meta/tag"===i.path){const s=Array.isArray(i.value)?i.value:[];return s.some((e=>J(e,t)))?e.push(i):e.push(Object.assign(Object.assign({},i),{value:[...s,t]})),e}if(("add"===i.op||"replace"===i.op)&&"/meta"===i.path){const n=null!=i.value&&"object"==typeof i.value?i.value:{},r=null!==(s=n.tag)&&void 0!==s?s:[];return r.some((e=>J(e,t)))?e.push(i):e.push(Object.assign(Object.assign({},i),{value:Object.assign(Object.assign({},n),{tag:[...r,t]})})),e}return e.push(i),e}),[])}return i}function L(t,e){var s,n,r;const o=null!==(n=null===(s=e.meta)||void 0===s?void 0:s.tag)&&void 0!==n?n:[];if(t.workspaceTag){const e=t.workspaceTag;if(!o.some((t=>J(t,e))))throw new i({error:{resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},code:404})}else if(null===(r=t.ignoreTags)||void 0===r?void 0:r.length)for(const u of t.ignoreTags)if(o.some((t=>J(t,u))))throw new i({error:{resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},code:404})}function B(t){if("string"==typeof t)return t;const e=new URLSearchParams;for(const i of t)e.append(i.name,String(i.value));return e.toString()}function F(t){return"async-bundle"===t||"async-bulk"===t}function G(t,e){return s(this,void 0,void 0,(function*(){const{resourceType:i}=t,s=function(t,e){var i;const s=e?[...e]:[];if(t.workspaceTag)s.push({name:"_tag",value:C(t.workspaceTag)});else if(null===(i=t.ignoreTags)||void 0===i?void 0:i.length)for(const n of t.ignoreTags)s.push({name:"_tag:not",value:C(n)});return s}(this.config,t.params);let n;s.length&&(n=s.reduce(((t,e)=>(t[e.name]||(t[e.name]=[]),t[e.name].push(e.value),t)),{}));const r=null==e?void 0:e.mode;if(F(r))return yield this.startAsyncJob(`/${i}/_search`,"POST",null!=n?n:{},r,Object.assign(Object.assign({},e),{contentType:"application/x-www-form-urlencoded"}));const o=yield this.fhirRequest(`/${i}/_search`,"POST")(n,Object.assign(Object.assign({},e),{contentType:"application/x-www-form-urlencoded"}));return Object.assign(Object.assign({},o),{entry:o.entry,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}})}))}function H(t,e){return s(this,void 0,void 0,(function*(){var i,s,n,r,o;const{pageSize:u}=t,a=function(t,e){var i={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&e.indexOf(s)<0&&(i[s]=t[s]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(s=Object.getOwnPropertySymbols(t);n<s.length;n++)e.indexOf(s[n])<0&&Object.prototype.propertyIsEnumerable.call(t,s[n])&&(i[s[n]]=t[s[n]])}return i}(t,["pageSize"]);let c=a;if(u){const t=null!==(s=(null!==(i=a.params)&&void 0!==i?i:[]).filter((t=>"_count"!==t.name)))&&void 0!==s?s:[];c=Object.assign(Object.assign({},a),{params:[...t,{name:"_count",value:u}]})}const d=[],l=G;let h=yield l.call(this,c,e);const p=Object.assign(Object.assign({},h),{link:null===(n=h.link)||void 0===n?void 0:n.filter((t=>"next"!==t.relation))});for(;;){const t=h.entry;t&&d.push(...t);const i=null===(o=null===(r=h.link)||void 0===r?void 0:r.find((t=>"next"===t.relation)))||void 0===o?void 0:o.url;if(!i)break;h=yield this.fhirRequest(i,"GET")({},e)}return Object.assign(Object.assign({},p),{entry:d.length?d:void 0,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}})}))}function V(t,e){return s(this,void 0,void 0,(function*(){const i=D(this.config,t),{resourceType:s}=i,n=null==e?void 0:e.mode,r=Object.assign(Object.assign({},e),{ifNoneExist:void 0!==(null==e?void 0:e.ifNoneExist)?B(e.ifNoneExist):void 0});return F(n)?yield this.startAsyncJob(`/${s}`,"POST",i,n,r):yield this.fhirRequest(`/${s}`,"POST")(i,r)}))}function X(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e},i){const s=null==i?void 0:i.mode;if(F(s))return yield this.startAsyncJob(`/${t}/${e}`,"GET",{},s,i);const n=yield this.fhirRequest(`/${t}/${e}`,"GET")({},i);return L(this.config,n),n}))}function Z(t,e){return s(this,void 0,void 0,(function*(){const i=D(this.config,t),{id:s,resourceType:n}=i,r=null==e?void 0:e.mode,o=Object.assign(Object.assign({},e),{ifMatch:(null==e?void 0:e.optimisticLockingVersionId)?`W/"${e.optimisticLockingVersionId}"`:void 0});return F(r)?yield this.startAsyncJob(`/${n}/${s}`,"PUT",i,r,o):yield this.fhirRequest(`/${n}/${s}`,"PUT")(i,o)}))}function K(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e,operations:i},s){const n=W(this.config,i),r=null==s?void 0:s.mode,o=Object.assign(Object.assign({},s),{ifMatch:(null==s?void 0:s.optimisticLockingVersionId)?`W/"${s.optimisticLockingVersionId}"`:void 0});return F(r)?yield this.startAsyncJob(`/${t}/${e}`,"PATCH",n,r,Object.assign(Object.assign({},o),{contentType:"application/json-patch+json"})):this.fhirRequest(`/${t}/${e}`,"PATCH")(n,Object.assign(Object.assign({},o),{contentType:"application/json-patch+json"}))}))}function Q(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e},i){const s=null==i?void 0:i.mode;return F(s)?yield this.startAsyncJob(`/${t}/${e}`,"DELETE",{},s,i):yield this.fhirRequest(`/${t}/${e}`,"DELETE")({},i)}))}function Y(t,e){if(!t)return e;const i=Number(t);if(Number.isFinite(i)&&i>=0)return Math.max(0,Math.floor(1e3*i));const s=Date.parse(t);return Number.isFinite(s)?Math.max(0,s-Date.now()):e}function tt(t,e){return s(this,void 0,void 0,(function*(){return yield this.fetchAsyncJobStatus(t,e)}))}function et(e,i,n){return s(this,void 0,void 0,(function*(){var s,r;const o=null!==(s=null==i?void 0:i.pollIntervalMs)&&void 0!==s?s:5e3,u=null!==(r=null==i?void 0:i.timeoutMs)&&void 0!==r?r:9e5,a=Math.max(1,Math.ceil(u/o));for(let t=0;t<a;t++){const i=yield this.fetchAsyncJobStatus(e,n);if(202!==i.status)return i;if(t<a-1){const t="retryAfter"in i?i.retryAfter:void 0;yield new Promise((e=>setTimeout(e,Y(t,o))))}}throw new t({message:`Async job ${e} did not complete within ${u} ms`,code:408})}))}function it(e,i){const s=[],n=e.split("\n");for(let o=0;o<n.length;o++){const e=n[o].trim();if(0!==e.length)try{s.push(JSON.parse(e))}catch(r){throw new t({message:`Failed to parse NDJSON line ${o+1} from ${i}`,code:500,cause:r})}}return s}function st(e,i,n){return s(this,void 0,void 0,(function*(){var r,o,u;const a=yield et.call(this,e,i,n);if(404===a.status)throw new t({message:`Async job ${e} not found`,code:404});if(410===a.status)throw new t({message:`Async job ${e} expired`,code:410});if(200!==a.status||!("mode"in a)||"bulk"!==a.mode)throw new t({message:`Async job ${e} did not complete in bulk mode`,code:a.status});const c=null!==(r=null==n?void 0:n.accessToken)&&void 0!==r?r:this.config.accessToken,d=null!==(o=null==n?void 0:n.projectId)&&void 0!==o?o:this.config.projectId;if(a.manifest.requiresAccessToken&&!c)throw new t({message:`Bulk output for async job ${e} requires an access token`,code:401});const l=null!==(u=this.config.fetch)&&void 0!==u?u:fetch,h={};d&&(h["x-zapehr-project-id"]=d,h["x-oystehr-project-id"]=d),a.manifest.requiresAccessToken&&c&&(h.Authorization=`Bearer ${c}`);const p=Object.keys(h).length>0?h:void 0,v=yield Promise.all(a.manifest.output.map((e=>s(this,void 0,void 0,(function*(){const i=yield l(new Request(e.url,{method:"GET",headers:p}));if(!i.ok)throw new t({message:`Failed to download bulk output (${e.type}): HTTP ${i.status}`,code:i.status});const s=yield i.text();return Object.assign(Object.assign({},e),{resources:it(s,e.url)})})))));return{manifest:a.manifest,output:v}}))}function nt(t,e,i){return s(this,void 0,void 0,(function*(){return{resourceType:"Bundle",type:"collection",entry:(yield st.call(this,t,e,i)).output.flatMap((t=>t.resources)).map((t=>({resource:t}))),unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}}}))}function rt(t,e){return s(this,void 0,void 0,(function*(){yield this.fhirRequest(`/async-job/${t}`,"DELETE")({},e)}))}function ot(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e,versionId:i,count:s,offset:n},r){const o=null==r?void 0:r.mode;return F(o)?i?yield this.startAsyncJob(`/${t}/${e}/_history/${i}`,"GET",{},o,r):yield this.startAsyncJob(`/${t}/${e}/_history`,"GET",{},o,r):i?this.fhirRequest(`/${t}/${e}/_history/${i}`,"GET")({},r):s?this.fhirRequest(`/${t}/${e}/_history?_total=accurate&_count=${s}\n ${n?`&_offset=${n}`:""}`,"GET")({},r):this.fhirRequest(`/${t}/${e}/_history?_total=accurate`,"GET")({},r)}))}function ut(t){const e=t.split("?")[0].split("/").filter(Boolean);return e.length<=1||e[1].startsWith("_")}function at(t){return t.split("?")[0].endsWith("/_search")}function ct(t,e){var i;const{method:s}=t;let n=t.url;if((("GET"===s||"HEAD"===s)&&ut(n)||"POST"===s&&at(n))&&(e.workspaceTag&&(n+=(n.includes("?")?"&":"?")+`_tag=${C(e.workspaceTag)}`),null===(i=e.ignoreTags)||void 0===i?void 0:i.length))for(const o of e.ignoreTags)n+=(n.includes("?")?"&":"?")+`_tag:not=${C(o)}`;const r={request:{method:s,url:n}};if(n.split("?").length>1){const[t,e]=n.split("?"),i=e.split("&").map((t=>{const[e,i]=t.split("=");return{name:e,value:i}})).reduce(((t,{name:e,value:i})=>e?(t[e]||(t[e]=[]),t[e].push(i),t):t),{}),s=new URLSearchParams;f(i,s),r.request.url=`${t}?${s.toString()}`}if(["GET","DELETE","HEAD"].includes(s))return r;if("PUT"===s){const i=D(e,t.resource);return{request:Object.assign(Object.assign({},r.request),{ifMatch:t.ifMatch}),resource:i}}if("PATCH"===s){if("resource"in t){let i=t.resource;const s=i.data;if(s){const t=W(e,JSON.parse(function(t){const e=globalThis.atob(t),i=new Uint8Array(e.length);for(let s=0;s<e.length;s++)i[s]=e.charCodeAt(s);return(new globalThis.TextDecoder).decode(i)}(s)));i=Object.assign(Object.assign({},i),{data:M(JSON.stringify(t))})}return{request:Object.assign(Object.assign({},r.request),{ifMatch:t.ifMatch}),resource:i}}const i=W(e,t.operations),s=M(JSON.stringify(i));return Object.assign(Object.assign({},r),{resource:{resourceType:"Binary",contentType:"application/json-patch+json",data:s}})}if("POST"===s&&at(n))return r;if("POST"===s&&"resource"in t){const i=D(e,t.resource),{fullUrl:s,ifNoneExist:n}=t;return{request:Object.assign(Object.assign({},r.request),{ifNoneExist:void 0!==n?B(n):void 0}),resource:i,fullUrl:s}}throw new Error("Unrecognized method")}function dt(t,e){return s(this,void 0,void 0,(function*(){var s;const n={resourceType:"Bundle",type:"batch",entry:t.requests.map((t=>ct(t,this.config)))},r=null==e?void 0:e.mode;if(F(r))return yield this.startAsyncJob("/","POST",n,r,e);const o=yield this.fhirRequest("/","POST")(n,e),u=o.entry,a=this.config.workspaceTag||(null===(s=this.config.ignoreTags)||void 0===s?void 0:s.length)?null==u?void 0:u.map(((e,s)=>{const n=t.requests[s];if(!n||!(null==e?void 0:e.resource))return e;if(("GET"===n.method||"HEAD"===n.method)&&!ut(n.url))try{L(this.config,e.resource)}catch(r){if(!(r instanceof i))throw r;return{request:e.request,response:{status:"404",outcome:r.cause}}}return e})):u,c=Object.assign(Object.assign({},o),{entry:a,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]},errors:function(){var t;return null===(t=this.entry)||void 0===t?void 0:t.filter((t=>{var e,i,s,n;return(null===(i=null===(e=t.response)||void 0===e?void 0:e.status)||void 0===i?void 0:i.startsWith("4"))||(null===(n=null===(s=t.response)||void 0===s?void 0:s.status)||void 0===n?void 0:n.startsWith("5"))})).map((t=>{var e;return null===(e=t.response)||void 0===e?void 0:e.outcome})).filter((t=>void 0!==t))}});return c}))}function lt(t,e){return s(this,void 0,void 0,(function*(){var i,s;const n={resourceType:"Bundle",type:"transaction",entry:t.requests.map((t=>ct(t,this.config)))},r=null==e?void 0:e.mode;if(F(r))return yield this.startAsyncJob("/","POST",n,r,e);const o=yield this.fhirRequest("/","POST")(n,e);(this.config.workspaceTag||(null===(i=this.config.ignoreTags)||void 0===i?void 0:i.length))&&(null===(s=o.entry)||void 0===s||s.forEach(((e,i)=>{const s=t.requests[i];s&&(null==e?void 0:e.resource)&&("GET"!==s.method&&"HEAD"!==s.method||ut(s.url)||L(this.config,e.resource))})));const u=Object.assign(Object.assign({},o),{entry:o.entry,unbundle:function(){var t,e;return null!==(e=null===(t=this.entry)||void 0===t?void 0:t.map((t=>t.resource)).filter((t=>void 0!==t)))&&void 0!==e?e:[]}});return u}))}function ht(t,e){return s(this,arguments,void 0,(function*({id:t},e){return this.fhirRequest(`/Patient/${t}/$generate-friendly-patient-id`,"POST")({},e)}))}function pt(t,e){const i=[];if(t.line&&i.push(...t.line),t.city||t.state||t.postalCode){const e=[];t.city&&e.push(t.city),t.state&&e.push(t.state),t.postalCode&&e.push(t.postalCode),i.push(e.join(", "))}return t.use&&((null==e?void 0:e.all)||(null==e?void 0:e.use))&&i.push("["+t.use+"]"),i.join((null==e?void 0:e.lineSeparator)||", ").trim()}function vt(t,e){const i=[];return t.prefix&&!1!==(null==e?void 0:e.prefix)&&i.push(...t.prefix),t.given&&i.push(...t.given),t.family&&i.push(t.family),t.suffix&&!1!==(null==e?void 0:e.suffix)&&i.push(...t.suffix),t.use&&((null==e?void 0:e.all)||(null==e?void 0:e.use))&&i.push("["+t.use+"]"),i.join(" ").trim()}var ft,mt,gt,bt,yt,qt,wt,jt,Ot,Tt,kt,St,At,Et,xt,It,Ut,Pt,$t,zt,Rt,Nt,_t,Mt,Ct,Jt,Dt,Wt,Lt,Bt,Ft,Gt,Ht;class Vt extends p{constructor(t){super(t),ft.add(this),this.search=G,this.searchAndGetAllPages=H,this.create=V,this.get=X,this.update=Z,this.patch=K,this.delete=Q,this.getAsyncJob=tt,this.waitForAsyncJob=et,this.waitForAsyncBulkOutput=st,this.waitForAsyncBulkBundle=nt,this.cancelAsyncJob=rt,this.history=ot,this.batch=dt,this.transaction=lt,this.generateFriendlyPatientId=ht,this.formatAddress=pt,this.formatHumanName=vt}}ft=new WeakSet;class Xt extends p{constructor(t){super(t),mt.add(this)}routeList(t){return this.request("/route","get",n(this,mt,"m",gt).bind(this))(t)}routeCreate(t,e){return this.request("/route","post",n(this,mt,"m",gt).bind(this))(t,e)}routeGet(t,e){return this.request("/route/{routeGuid}","get",n(this,mt,"m",gt).bind(this))(t,e)}routeDelete(t,e){return this.request("/route/{routeGuid}","delete",n(this,mt,"m",gt).bind(this))(t,e)}orderableItemList(t,e){return this.request("/orderableItem","get",n(this,mt,"m",gt).bind(this))(t,e)}orderableItemQuestionnaireGet(t,e){return this.request("/canonical-questionnaire/lab/{labGuid}/compendium/{compendiumVersion}/item/{itemCode}/questionnaire","get",n(this,mt,"m",gt).bind(this))(t,e)}orderSubmit(t,e){return this.request("/submit","post",n(this,mt,"m",gt).bind(this))(t,e)}}mt=new WeakSet,gt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.labApiUrl)&&void 0!==e?e:"https://labs-api.zapehr.com/v1"};class Zt extends p{constructor(t){super(t),bt.add(this)}list(t){return this.request("/m2m","get",n(this,bt,"m",yt).bind(this))(t)}create(t,e){return this.request("/m2m","post",n(this,bt,"m",yt).bind(this))(t,e)}me(t){return this.request("/m2m/me","get",n(this,bt,"m",yt).bind(this))(t)}get(t,e){return this.request("/m2m/{id}","get",n(this,bt,"m",yt).bind(this))(t,e)}update(t,e){return this.request("/m2m/{id}","patch",n(this,bt,"m",yt).bind(this))(t,e)}delete(t,e){return this.request("/m2m/{id}","delete",n(this,bt,"m",yt).bind(this))(t,e)}rotateSecret(t,e){return this.request("/m2m/{id}/rotate-secret","post",n(this,bt,"m",yt).bind(this))(t,e)}listV2(t,e){return this.request("/m2m/v2/list","get",n(this,bt,"m",yt).bind(this))(t,e)}}bt=new WeakSet,yt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class Kt extends p{constructor(t){super(t),qt.add(this)}getMessagingConfig(t){return this.request("/messaging/config","get",n(this,qt,"m",wt).bind(this))(t)}}qt=new WeakSet,wt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class Qt extends p{constructor(t){super(t),jt.add(this)}setUp(t,e){return this.request("/payment/payment-method/setup","post",n(this,jt,"m",Ot).bind(this))(t,e)}setDefault(t,e){return this.request("/payment/payment-method/set-default","post",n(this,jt,"m",Ot).bind(this))(t,e)}delete(t,e){return this.request("/payment/payment-method","delete",n(this,jt,"m",Ot).bind(this))(t,e)}list(t,e){return this.request("/payment/payment-method/list","post",n(this,jt,"m",Ot).bind(this))(t,e)}}jt=new WeakSet,Ot=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class Yt extends p{constructor(t){super(t),Tt.add(this)}get(t){return this.request("/project","get",n(this,Tt,"m",kt).bind(this))(t)}update(t,e){return this.request("/project","patch",n(this,Tt,"m",kt).bind(this))(t,e)}}function te(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.rcmApiUrl)&&void 0!==e?e:"https://rcm-api.zapehr.com/v1"}function ee({id:t}){return`${te.call(this)}/payer/${t}`}function ie(e,i){return s(this,arguments,void 0,(function*({url:e},i){if(!e.startsWith(ee.call(this,{id:""})))throw new t({code:400,message:"Invalid payer URL."});const s=new URL(e).pathname.split("/").filter(Boolean),n=s[s.length-1];return this.request("/payer/{id}","get",te.bind(this))({id:n},i)}))}Tt=new WeakSet,kt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class se extends p{constructor(t){super(t),St.add(this),this.constructPayerUrl=ee,this.getPayerByUrl=ie}eligibilityCheck(t,e){return this.request("/eligibility-check","post",n(this,St,"m",At).bind(this))(t,e)}submitClaim(t,e){return this.request("/claim/{claimId}/submit","post",n(this,St,"m",At).bind(this))(t,e)}setClaimStatus(t,e){return this.request("/claim/{claimId}/status","post",n(this,St,"m",At).bind(this))(t,e)}listPayers(t,e){return this.request("/payer","get",n(this,St,"m",At).bind(this))(t,e)}getPayer(t,e){return this.request("/payer/{id}","get",n(this,St,"m",At).bind(this))(t,e)}processEra(t,e){return this.request("/process-era","post",n(this,St,"m",At).bind(this))(t,e)}}St=new WeakSet,At=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.rcmApiUrl)&&void 0!==e?e:"https://rcm-api.zapehr.com/v1"};class ne extends p{constructor(t){super(t),Et.add(this)}list(t){return this.request("/iam/role","get",n(this,Et,"m",xt).bind(this))(t)}create(t,e){return this.request("/iam/role","post",n(this,Et,"m",xt).bind(this))(t,e)}get(t,e){return this.request("/iam/role/{roleId}","get",n(this,Et,"m",xt).bind(this))(t,e)}update(t,e){return this.request("/iam/role/{roleId}","patch",n(this,Et,"m",xt).bind(this))(t,e)}delete(t,e){return this.request("/iam/role/{roleId}","delete",n(this,Et,"m",xt).bind(this))(t,e)}}Et=new WeakSet,xt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class re extends p{constructor(t){super(t),It.add(this)}list(t){return this.request("/secret","get",n(this,It,"m",Ut).bind(this))(t)}set(t,e){return this.request("/secret","post",n(this,It,"m",Ut).bind(this))(t,e)}get(t,e){return this.request("/secret/{name}","get",n(this,It,"m",Ut).bind(this))(t,e)}delete(t,e){return this.request("/secret/{name}","delete",n(this,It,"m",Ut).bind(this))(t,e)}}It=new WeakSet,Ut=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class oe extends p{constructor(t){super(t),Pt.add(this)}createMeeting(t,e){return this.request("/telemed/v2/meeting","post",n(this,Pt,"m",$t).bind(this))(t,e)}joinMeeting(t,e){return this.request("/telemed/v2/meeting/{encounterId}/join","get",n(this,Pt,"m",$t).bind(this))(t,e)}}Pt=new WeakSet,$t=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class ue extends p{constructor(t){super(t),zt.add(this)}searchCpt(t,e){return this.request("/cpt/search","get",n(this,zt,"m",Rt).bind(this))(t,e)}searchHcpcs(t,e){return this.request("/hcpcs/search","get",n(this,zt,"m",Rt).bind(this))(t,e)}searchIcd10(t,e){return this.request("/icd10/search","get",n(this,zt,"m",Rt).bind(this))(t,e)}}zt=new WeakSet,Rt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.terminologyApiUrl)&&void 0!==e?e:"https://terminology-api.zapehr.com/v1"};class ae extends p{constructor(t){super(t),Nt.add(this)}send(t,e){return this.request("/messaging/transactional-sms/send","post",n(this,Nt,"m",_t).bind(this))(t,e)}}Nt=new WeakSet,_t=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class ce extends p{constructor(t){super(t),Mt.add(this)}me(t){return this.request("/user/me","get",n(this,Mt,"m",Ct).bind(this))(t)}get(t,e){return this.request("/user/{id}","get",n(this,Mt,"m",Ct).bind(this))(t,e)}update(t,e){return this.request("/user/{id}","patch",n(this,Mt,"m",Ct).bind(this))(t,e)}delete(t,e){return this.request("/user/{id}","delete",n(this,Mt,"m",Ct).bind(this))(t,e)}resetMfa(t,e){return this.request("/user/{id}/reset-mfa","post",n(this,Mt,"m",Ct).bind(this))(t,e)}resetPasswordLink(t,e){return this.request("/user/{id}/reset-password-link","post",n(this,Mt,"m",Ct).bind(this))(t,e)}changePassword(t,e){return this.request("/user/{id}/change-password","post",n(this,Mt,"m",Ct).bind(this))(t,e)}invite(t,e){return this.request("/user/invite","post",n(this,Mt,"m",Ct).bind(this))(t,e)}list(t){return this.request("/user","get",n(this,Mt,"m",Ct).bind(this))(t)}listV2(t,e){return this.request("/user/v2/list","get",n(this,Mt,"m",Ct).bind(this))(t,e)}}Mt=new WeakSet,Ct=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class de extends p{constructor(t){super(t),Jt.add(this)}get(t){return this.request("/version","get",n(this,Jt,"m",Dt).bind(this))(t)}}function le(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"}function he(t){return s(this,arguments,void 0,(function*({bucketName:t,"objectPath+":e,file:i}){const s=yield this.request("/z3/{bucketName}/{objectPath+}","post",le.bind(this))({action:"upload",bucketName:t,"objectPath+":e});yield fetch(s.signedUrl,{method:"PUT",body:i})}))}function pe(t){return s(this,arguments,void 0,(function*({bucketName:t,"objectPath+":e}){const i=yield this.request("/z3/{bucketName}/{objectPath+}","post",le.bind(this))({action:"download",bucketName:t,"objectPath+":e}),s=yield fetch(i.signedUrl,{method:"GET"});if(!s.ok)throw new Error("Failed to download file");return s.arrayBuffer()}))}function ve(e){return s(this,void 0,void 0,(function*(){var i,s;let n,r;const o=new URL(e.url);if("z3:"===o.protocol){const t=o.pathname.split("/").slice(1);n=o.hostname,r=t.join("/")}else{if(!o.href.startsWith(null!==(s=null===(i=this.config.services)||void 0===i?void 0:i.projectApiUrl)&&void 0!==s?s:"https://project-api.zapehr.com/v1"))throw new t({message:"Invalid Z3 URL",code:400});{const t=o.pathname.split("/").slice(3);n=t[0],r=t.slice(1).join("/")}}const u={action:"upload",bucketName:n,"objectPath+":r};return this.request("/z3/{bucketName}/{objectPath+}","post",le.bind(this))(u)}))}Jt=new WeakSet,Dt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class fe extends p{constructor(t){super(t),Wt.add(this),this.uploadFile=he,this.downloadFile=pe,this.getPresignedUrlForZ3Url=ve}listBuckets(t){return this.request("/z3","get",n(this,Wt,"m",Lt).bind(this))(t)}createBucket(t,e){return this.request("/z3/{bucketName}","put",n(this,Wt,"m",Lt).bind(this))(t,e)}deleteBucket(t,e){return this.request("/z3/{bucketName}","delete",n(this,Wt,"m",Lt).bind(this))(t,e)}emptyBucket(t,e){return this.request("/z3/{bucketName}/objects","delete",n(this,Wt,"m",Lt).bind(this))(t,e)}listObjects(t,e){return this.request("/z3/{bucketName}/{objectPath+}","get",n(this,Wt,"m",Lt).bind(this))(t,e)}getPresignedUrl(t,e){return this.request("/z3/{bucketName}/{objectPath+}","post",n(this,Wt,"m",Lt).bind(this))(t,e)}deleteObject(t,e){return this.request("/z3/{bucketName}/{objectPath+}","delete",n(this,Wt,"m",Lt).bind(this))(t,e)}}function me(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.zambdaApiUrl)&&void 0!==e?e:"https://zambda-api.zapehr.com/v1"}function ge(e){return s(this,arguments,void 0,(function*({id:e,file:i,filename:s}){const n=yield this.request("/zambda/{id}/presigned-url","post",me.bind(this))({id:e,action:"upload",filename:s}),r=yield fetch(n.signedUrl,{method:"PUT",body:i});if(!r.ok)throw new t({message:"Failed to upload file",code:r.status,cause:r.statusText})}))}function be(e){return s(this,arguments,void 0,(function*({id:e}){const i=yield this.request("/zambda/{id}/presigned-url","post",me.bind(this))({id:e,action:"download"}),s=yield fetch(i.signedUrl,{method:"GET"});if(!s.ok)throw new t({message:"Failed to download file",code:s.status,cause:s.statusText});return s.arrayBuffer()}))}Wt=new WeakSet,Lt=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.projectApiUrl)&&void 0!==e?e:"https://project-api.zapehr.com/v1"};class ye extends p{constructor(t){super(t),Bt.add(this),this.uploadFile=ge,this.downloadFile=be}list(t){return this.request("/zambda","get",n(this,Bt,"m",Ft).bind(this))(t)}create(t,e){return this.request("/zambda","post",n(this,Bt,"m",Ft).bind(this))(t,e)}get(t,e){return this.request("/zambda/{id}","get",n(this,Bt,"m",Ft).bind(this))(t,e)}update(t,e){return this.request("/zambda/{id}","patch",n(this,Bt,"m",Ft).bind(this))(t,e)}delete(t,e){return this.request("/zambda/{id}","delete",n(this,Bt,"m",Ft).bind(this))(t,e)}execute(t,e){return this.request("/zambda/{id}/execute","post",n(this,Bt,"m",Ft).bind(this))(t,e)}executePublic(t,e){return this.request("/zambda/{id}/execute-public","post",n(this,Bt,"m",Ft).bind(this))(t,e)}s3Upload(t,e){return this.request("/zambda/{id}/s3-upload","post",n(this,Bt,"m",Ft).bind(this))(t,e)}getPresignedUrl(t,e){return this.request("/zambda/{id}/presigned-url","post",n(this,Bt,"m",Ft).bind(this))(t,e)}}Bt=new WeakSet,Ft=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.zambdaApiUrl)&&void 0!==e?e:"https://zambda-api.zapehr.com/v1"};class qe extends p{constructor(t){super(t),Gt.add(this)}list(t,e){return this.request("/zambda/{id}/logStream","post",n(this,Gt,"m",Ht).bind(this))(t,e)}search(t,e){return this.request("/zambda/{id}/logStream/search","post",n(this,Gt,"m",Ht).bind(this))(t,e)}get(t,e){return this.request("/zambda/{id}/logStream/{logStreamName}","post",n(this,Gt,"m",Ht).bind(this))(t,e)}}Gt=new WeakSet,Ht=function(){var t,e;return null!==(e=null===(t=this.config.services)||void 0===t?void 0:t.zambdaApiUrl)&&void 0!==e?e:"https://zambda-api.zapehr.com/v1"};let we=class{constructor(e){var i,s,n,r,o,u;if(e.workspaceTag&&e.ignoreTags)throw new t({message:"workspaceTag and ignoreTags are mutually exclusive and cannot both be set in config",code:400});this.config=e,null!==(i=(r=this.config).services)&&void 0!==i||(r.services={}),null!==(s=(o=this.config.services).projectApiUrl)&&void 0!==s||(o.projectApiUrl=e.projectApiUrl),null!==(n=(u=this.config.services).fhirApiUrl)&&void 0!==n||(u.fhirApiUrl=e.fhirApiUrl),this.application=new q(e),this.developer=new z(e),this.m2m=new Zt(e),this.messaging=new Kt(e),this.conversation=new $(e),this.transactionalSMS=new ae(e),this.paymentMethod=new Qt(e),this.charge=new w(e),this.project=new Yt(e),this.role=new ne(e),this.secret=new re(e),this.telemed=new oe(e),this.user=new ce(e),this.version=new de(e),this.z3=new fe(e),this.fax=new N(e),this.lab=new Xt(e),this.erx=new R(e),this.terminology=new ue(e),this.zambda=new ye(e),this.zambdaLogStream=new qe(e),this.rcm=new se(e),this.fhir=new Vt(e)}};class je extends we{}je.OystehrFHIRError=i,je.OystehrSdkError=t,exports.default=je;
2
2
  //# sourceMappingURL=index.min.cjs.map