@oystehr/sdk 4.3.2 → 4.3.4

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 (86) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/client/client.cjs +87 -13
  3. package/dist/cjs/client/client.cjs.map +1 -1
  4. package/dist/cjs/client/client.d.ts +3 -0
  5. package/dist/cjs/config.d.ts +19 -0
  6. package/dist/cjs/index.min.cjs +1 -1
  7. package/dist/cjs/index.min.cjs.map +1 -1
  8. package/dist/cjs/logger.cjs +36 -0
  9. package/dist/cjs/logger.cjs.map +1 -0
  10. package/dist/cjs/logger.d.ts +11 -0
  11. package/dist/cjs/resources/classes/erx.cjs +8 -0
  12. package/dist/cjs/resources/classes/erx.cjs.map +1 -1
  13. package/dist/cjs/resources/classes/erx.d.ts +7 -1
  14. package/dist/cjs/resources/classes/fhir-ext.cjs +290 -19
  15. package/dist/cjs/resources/classes/fhir-ext.cjs.map +1 -1
  16. package/dist/cjs/resources/classes/index.cjs +9 -2
  17. package/dist/cjs/resources/classes/index.cjs.map +1 -1
  18. package/dist/cjs/resources/classes/index.d.ts +1 -1
  19. package/dist/cjs/resources/classes/rcm.cjs +18 -0
  20. package/dist/cjs/resources/classes/rcm.cjs.map +1 -1
  21. package/dist/cjs/resources/classes/rcm.d.ts +22 -1
  22. package/dist/cjs/resources/classes/user.cjs +9 -0
  23. package/dist/cjs/resources/classes/user.cjs.map +1 -1
  24. package/dist/cjs/resources/classes/user.d.ts +8 -1
  25. package/dist/cjs/resources/types/ErxGetMedicationHistoryParams.d.ts +3 -0
  26. package/dist/cjs/resources/types/ErxGetMedicationHistoryResponse.d.ts +43 -0
  27. package/dist/cjs/resources/types/ErxGetMedicationResponse.d.ts +1 -1
  28. package/dist/cjs/resources/types/RcmGetPayerParams.d.ts +3 -0
  29. package/dist/cjs/resources/types/RcmGetPayerResponse.d.ts +5 -0
  30. package/dist/cjs/resources/types/RcmListPayersParams.d.ts +9 -0
  31. package/dist/cjs/resources/types/RcmListPayersResponse.d.ts +13 -0
  32. package/dist/cjs/resources/types/UserChangePasswordParams.d.ts +7 -0
  33. package/dist/cjs/resources/types/fhir.d.ts +13 -3
  34. package/dist/cjs/resources/types/index.d.ts +13 -6
  35. package/dist/esm/client/client.d.ts +3 -0
  36. package/dist/esm/client/client.js +88 -15
  37. package/dist/esm/client/client.js.map +1 -1
  38. package/dist/esm/config.d.ts +19 -0
  39. package/dist/esm/index.min.js +1 -1
  40. package/dist/esm/index.min.js.map +1 -1
  41. package/dist/esm/logger.d.ts +11 -0
  42. package/dist/esm/logger.js +34 -0
  43. package/dist/esm/logger.js.map +1 -0
  44. package/dist/esm/resources/classes/erx.d.ts +7 -1
  45. package/dist/esm/resources/classes/erx.js +8 -0
  46. package/dist/esm/resources/classes/erx.js.map +1 -1
  47. package/dist/esm/resources/classes/fhir-ext.js +290 -19
  48. package/dist/esm/resources/classes/fhir-ext.js.map +1 -1
  49. package/dist/esm/resources/classes/index.d.ts +1 -1
  50. package/dist/esm/resources/classes/index.js +9 -2
  51. package/dist/esm/resources/classes/index.js.map +1 -1
  52. package/dist/esm/resources/classes/rcm.d.ts +22 -1
  53. package/dist/esm/resources/classes/rcm.js +18 -0
  54. package/dist/esm/resources/classes/rcm.js.map +1 -1
  55. package/dist/esm/resources/classes/user.d.ts +8 -1
  56. package/dist/esm/resources/classes/user.js +9 -0
  57. package/dist/esm/resources/classes/user.js.map +1 -1
  58. package/dist/esm/resources/types/ErxGetMedicationHistoryParams.d.ts +3 -0
  59. package/dist/esm/resources/types/ErxGetMedicationHistoryResponse.d.ts +43 -0
  60. package/dist/esm/resources/types/ErxGetMedicationResponse.d.ts +1 -1
  61. package/dist/esm/resources/types/RcmGetPayerParams.d.ts +3 -0
  62. package/dist/esm/resources/types/RcmGetPayerResponse.d.ts +5 -0
  63. package/dist/esm/resources/types/RcmListPayersParams.d.ts +9 -0
  64. package/dist/esm/resources/types/RcmListPayersResponse.d.ts +13 -0
  65. package/dist/esm/resources/types/UserChangePasswordParams.d.ts +7 -0
  66. package/dist/esm/resources/types/fhir.d.ts +13 -3
  67. package/dist/esm/resources/types/index.d.ts +13 -6
  68. package/package.json +1 -1
  69. package/src/client/client.ts +95 -15
  70. package/src/config.ts +20 -0
  71. package/src/logger.ts +36 -0
  72. package/src/resources/classes/erx.ts +17 -0
  73. package/src/resources/classes/fhir-ext.ts +322 -19
  74. package/src/resources/classes/index.ts +9 -2
  75. package/src/resources/classes/rcm.ts +39 -0
  76. package/src/resources/classes/user.ts +10 -0
  77. package/src/resources/types/ErxGetMedicationHistoryParams.ts +5 -0
  78. package/src/resources/types/ErxGetMedicationHistoryResponse.ts +45 -0
  79. package/src/resources/types/ErxGetMedicationResponse.ts +1 -1
  80. package/src/resources/types/RcmGetPayerParams.ts +5 -0
  81. package/src/resources/types/RcmGetPayerResponse.ts +7 -0
  82. package/src/resources/types/RcmListPayersParams.ts +11 -0
  83. package/src/resources/types/RcmListPayersResponse.ts +15 -0
  84. package/src/resources/types/UserChangePasswordParams.ts +9 -0
  85. package/src/resources/types/fhir.ts +16 -0
  86. package/src/resources/types/index.ts +13 -6
package/README.md CHANGED
@@ -381,4 +381,4 @@ If you have questions about migrating to a new version of the Oystehr SDK, check
381
381
 
382
382
  ## Contact
383
383
 
384
- Questions? Join our [public Slack](https://join.slack.com/t/oystehr/shared_invite/zt-1se6hw93b-olDYmAzDGDhU5ibnEugCmA) or contact [support](mailto:support@oystehr.com).
384
+ Questions? Join our [public Slack](https://oystehr.com/slack) or contact [support](mailto:support@oystehr.com).
@@ -2,6 +2,7 @@
2
2
 
3
3
  var uuid = require('uuid');
4
4
  var index = require('../errors/index.cjs');
5
+ var logger = require('../logger.cjs');
5
6
 
6
7
  const defaultProjectApiUrl = 'https://project-api.zapehr.com/v1';
7
8
  const defaultFhirApiUrl = 'https://fhir-api.zapehr.com';
@@ -18,17 +19,24 @@ const ERROR_CODES_TO_RETRY = [
18
19
  ];
19
20
  class SDKResource {
20
21
  config;
22
+ logger;
21
23
  constructor(config) {
22
24
  this.config = config;
25
+ this.logger = new logger.Logger({
26
+ level: this.config.logLevel,
27
+ });
23
28
  }
24
29
  request(path, method, baseUrlThunk) {
25
30
  return async (params, request) => {
26
31
  const configThunk = () => this.config;
32
+ const loggerThunk = () => this.logger;
27
33
  try {
28
- return await fetcher(baseUrlThunk, configThunk, path, method)(params, request);
34
+ // must await here to catch
35
+ return await fetcher(baseUrlThunk, configThunk, loggerThunk, path, method)(params, request);
29
36
  }
30
37
  catch (err) {
31
38
  const error = err;
39
+ this.logger.error(error.message, { code: error.code, cause: error.cause });
32
40
  throw new index.OystehrSdkError({ message: error.message, code: error.code, cause: error.cause });
33
41
  }
34
42
  };
@@ -38,8 +46,9 @@ class SDKResource {
38
46
  try {
39
47
  const baseUrlThunk = () => this.config.services?.fhirApiUrl ?? defaultFhirApiUrl;
40
48
  const configThunk = () => this.config;
49
+ const loggerThunk = () => this.logger;
41
50
  // must await here to catch
42
- return await fetcher(baseUrlThunk, configThunk, path, method)(params, request);
51
+ return await fetcher(baseUrlThunk, configThunk, loggerThunk, path, method)(params, request);
43
52
  }
44
53
  catch (err) {
45
54
  // FHIR API error messages are JSON strings
@@ -60,7 +69,11 @@ class SDKResource {
60
69
  }
61
70
  }
62
71
  function isInternalClientRequest(request) {
63
- return 'accessToken' in request;
72
+ return ('accessToken' in request ||
73
+ ('projectId' in request && uuid.validate(request.projectId)) ||
74
+ ('contentType' in request && request.contentType?.split('/').length === 2) ||
75
+ 'requestId' in request ||
76
+ ('ifMatch' in request && request.ifMatch.startsWith('W/"')));
64
77
  }
65
78
  /**
66
79
  * Parse XML response in format <response><status>...</status><output>...</output></response>
@@ -82,23 +95,27 @@ function parseXmlResponse(xmlString) {
82
95
  return null;
83
96
  }
84
97
  }
85
- function fetcher(baseUrlThunk, configThunk, path, methodParam) {
98
+ function fetcher(baseUrlThunk, configThunk, loggerThunk, path, methodParam) {
86
99
  return async (params, request) => {
87
100
  // this function supports multiple signatures. fetcher(baseUrl, path, method)(params, request) or fetcher(baseUrl, path, method)(request)
88
101
  // or fetcher(baseUrl, path, method)(params) or fetcher(baseUrl, path, method)(). the types for this are handled by Client<Path, Methods>
89
102
  // 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
90
103
  // and there is no second param, assume the first one is the request object instead
91
- const providedParams = !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)
92
- ? {}
93
- : params ?? {};
94
- const requestCtx = !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)
95
- ? params
96
- : request;
97
- const method = methodParam.toLowerCase();
104
+ // eslint-disable-next-line prefer-const
105
+ let [providedParams, requestCtx] = extractParamsAndRequest(params, request);
106
+ requestCtx ??= {};
107
+ requestCtx.requestId ??= uuid.v4();
98
108
  const config = configThunk();
109
+ const logger = loggerThunk();
110
+ const method = methodParam.toLowerCase();
111
+ logger.debug('Beginning fetch', {
112
+ method,
113
+ path,
114
+ requestId: requestCtx?.requestId,
115
+ });
99
116
  const fetchImpl = config.fetch ?? fetch;
100
117
  const accessToken = requestCtx?.accessToken ?? config.accessToken;
101
- const projectId = requestCtx?.projectId ?? configThunk().projectId;
118
+ const projectId = requestCtx?.projectId ?? config.projectId;
102
119
  let finalPath = path;
103
120
  let finalParams = providedParams;
104
121
  if (!Array.isArray(providedParams)) {
@@ -106,6 +123,11 @@ function fetcher(baseUrlThunk, configThunk, path, methodParam) {
106
123
  finalPath = subbedPath;
107
124
  finalParams = addlParams;
108
125
  }
126
+ logger.debug('Substituted parameters in path', {
127
+ method,
128
+ path,
129
+ requestId: requestCtx?.requestId,
130
+ });
109
131
  finalPath = finalPath.replace(/^\//, ''); // remove leading slash
110
132
  const baseUrlEvaluated = baseUrlThunk();
111
133
  const fullBaseUrl = baseUrlEvaluated.endsWith('/') ? baseUrlEvaluated : baseUrlEvaluated + '/';
@@ -133,6 +155,11 @@ function fetcher(baseUrlThunk, configThunk, path, methodParam) {
133
155
  body = '{}';
134
156
  }
135
157
  }
158
+ logger.debug('Prepared request body', {
159
+ method,
160
+ path,
161
+ requestId: requestCtx?.requestId,
162
+ });
136
163
  const headers = Object.assign(projectId
137
164
  ? {
138
165
  'x-zapehr-project-id': projectId,
@@ -140,7 +167,7 @@ function fetcher(baseUrlThunk, configThunk, path, methodParam) {
140
167
  }
141
168
  : {}, {
142
169
  'content-type': requestCtx?.contentType ?? 'application/json',
143
- }, accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, requestCtx?.ifMatch ? { 'If-Match': requestCtx.ifMatch } : {}, { 'x-oystehr-request-id': requestCtx?.requestId ?? uuid.v4() });
170
+ }, accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, requestCtx?.ifMatch ? { 'If-Match': requestCtx.ifMatch } : {}, { 'x-oystehr-request-id': requestCtx?.requestId });
144
171
  const retryConfig = {
145
172
  retries: config.retry?.retries ?? 3,
146
173
  jitter: config.retry?.jitter ?? 20,
@@ -151,22 +178,54 @@ function fetcher(baseUrlThunk, configThunk, path, methodParam) {
151
178
  };
152
179
  retryConfig.retryOn.push(...STATUS_CODES_TO_RETRY);
153
180
  return retry(async () => {
181
+ logger.info('Request start', {
182
+ method,
183
+ url,
184
+ requestId: requestCtx?.requestId,
185
+ });
186
+ const now = Date.now();
154
187
  const response = await fetchImpl(new Request(url, {
155
188
  method: method.toUpperCase(),
156
189
  body,
157
190
  headers,
158
191
  }));
192
+ logger.info('Request end', {
193
+ method,
194
+ url,
195
+ duration: Date.now() - now,
196
+ requestId: requestCtx?.requestId,
197
+ });
159
198
  const responseBody = response.body ? await response.text() : null;
160
199
  let responseJson;
161
200
  const contentType = response.headers.get('content-type');
162
201
  try {
163
202
  if (responseBody &&
164
203
  (contentType?.includes('application/json') || contentType?.includes('application/fhir+json'))) {
204
+ logger.time('Deserialized JSON response', {
205
+ method,
206
+ url,
207
+ requestId: requestCtx?.requestId,
208
+ });
165
209
  responseJson = JSON.parse(responseBody);
210
+ logger.timeEnd('Deserialized JSON response', {
211
+ method,
212
+ url,
213
+ requestId: requestCtx?.requestId,
214
+ });
166
215
  }
167
216
  else if (responseBody && (contentType?.includes('application/xml') || contentType?.includes('text/xml'))) {
168
217
  // Parse XML response into { status, output } structure
218
+ logger.time('Deserialized XML response', {
219
+ method,
220
+ url,
221
+ requestId: requestCtx?.requestId,
222
+ });
169
223
  responseJson = parseXmlResponse(responseBody);
224
+ logger.timeEnd('Deserialized XML response', {
225
+ method,
226
+ url,
227
+ requestId: requestCtx?.requestId,
228
+ });
170
229
  }
171
230
  else {
172
231
  responseJson = null;
@@ -176,6 +235,11 @@ function fetcher(baseUrlThunk, configThunk, path, methodParam) {
176
235
  // ignore JSON.parse errors
177
236
  responseJson = null;
178
237
  }
238
+ logger.debug('Deserialized response', {
239
+ method,
240
+ url,
241
+ requestId: requestCtx?.requestId,
242
+ });
179
243
  const isError = !response.ok || response.status >= 400;
180
244
  if (isError) {
181
245
  const errObj = {
@@ -280,8 +344,18 @@ function addParamsToSearch(params, search) {
280
344
  search.append(key, value);
281
345
  }
282
346
  }
347
+ function extractParamsAndRequest(params, request) {
348
+ const providedParams = !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)
349
+ ? {}
350
+ : params ?? {};
351
+ const requestCtx = !!params && !request && !Array.isArray(params) && isInternalClientRequest(params)
352
+ ? params
353
+ : request;
354
+ return [providedParams, requestCtx];
355
+ }
283
356
 
284
357
  exports.SDKResource = SDKResource;
285
358
  exports.addParamsToSearch = addParamsToSearch;
286
359
  exports.defaultProjectApiUrl = defaultProjectApiUrl;
360
+ exports.extractParamsAndRequest = extractParamsAndRequest;
287
361
  //# sourceMappingURL=client.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","sources":["../../../src/client/client.ts"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid';\nimport { OystehrConfig } from '../config';\nimport { OystehrFHIRError, OystehrSdkError } from '../errors';\nimport { FhirBundle, FhirResource, OperationOutcome } 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\ninterface InternalClientRequest extends OystehrClientRequest {\n ifMatch?: string;\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 constructor(config: OystehrConfig) {\n this.config = config;\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 try {\n return await fetcher(baseUrlThunk, configThunk, path, method)(params, request);\n } catch (err: any) {\n const error = err as { message: string; code: number; cause?: unknown };\n throw new OystehrSdkError({ message: error.message, code: error.code, cause: error.cause });\n }\n };\n }\n\n protected fhirRequest<T extends FhirResource = any>(path: string, method: string) {\n return async (params: any, request?: InternalClientRequest): Promise<FhirFetcherResponse<T>> => {\n try {\n const baseUrlThunk = (): string => this.config.services?.fhirApiUrl ?? defaultFhirApiUrl;\n const configThunk = (): OystehrConfig => this.config;\n // must await here to catch\n return await fetcher(baseUrlThunk, configThunk, path, method)(params, request);\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\nexport type FetcherError = { message: string; code: number };\nexport type FetcherResponse = any;\nexport type FetcherFunction = (\n params?: Record<string, any> | [any] | InternalClientRequest,\n request?: InternalClientRequest\n) => Promise<FetcherResponse>;\n\nfunction isInternalClientRequest(request: Record<string, any>): request is InternalClientRequest {\n return 'accessToken' in request;\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 path: string,\n methodParam: string\n): FetcherFunction {\n return async (\n params?: Record<string, unknown> | [any] | InternalClientRequest,\n request?: InternalClientRequest\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 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 const method = methodParam.toLowerCase() as HttpMethod;\n const config = configThunk();\n const fetchImpl = config.fetch ?? fetch;\n const accessToken = requestCtx?.accessToken ?? config.accessToken;\n const projectId = requestCtx?.projectId ?? configThunk().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 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\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 accessToken ? { Authorization: `Bearer ${accessToken}` } : {},\n requestCtx?.ifMatch ? { 'If-Match': requestCtx.ifMatch } : {},\n { 'x-oystehr-request-id': requestCtx?.requestId ?? uuidv4() }\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 const response = await fetchImpl(\n new Request(url, {\n method: method.toUpperCase(),\n body,\n headers,\n })\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 responseJson = JSON.parse(responseBody);\n } else if (responseBody && (contentType?.includes('application/xml') || contentType?.includes('text/xml'))) {\n // Parse XML response into { status, output } structure\n responseJson = parseXmlResponse(responseBody);\n } else {\n responseJson = null;\n }\n } catch (_err) {\n // ignore JSON.parse errors\n responseJson = null;\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) => search.append(key, v as string));\n continue;\n }\n search.append(key, value as string);\n }\n}\n"],"names":["OystehrSdkError","OystehrFHIRError","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 { FhirBundle, FhirResource, OperationOutcome } 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\ninterface InternalClientRequest extends OystehrClientRequest {\n ifMatch?: string;\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 extends FhirResource = any>(path: string, method: string) {\n return async (params: any, request?: InternalClientRequest): Promise<FhirFetcherResponse<T>> => {\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);\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\nexport type FetcherError = { message: string; code: number };\nexport type FetcherResponse = any;\nexport type FetcherFunction = (\n params?: Record<string, any> | [any] | InternalClientRequest,\n request?: InternalClientRequest\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 );\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 ): 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 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 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 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) => search.append(key, v as string));\n continue;\n }\n search.append(key, value as string);\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,4 +1,5 @@
1
1
  import { OystehrConfig } from '../config';
2
+ import { Logger } from '../logger';
2
3
  import { FhirBundle, FhirResource } from '../resources/types';
3
4
  export declare const defaultProjectApiUrl = "https://project-api.zapehr.com/v1";
4
5
  /**
@@ -31,6 +32,7 @@ type FhirData<T extends FhirResource> = T | T[] | FhirBundle<T>;
31
32
  export type FhirFetcherResponse<T extends FhirData<FhirResource> = any> = T;
32
33
  export declare class SDKResource {
33
34
  protected readonly config: OystehrConfig;
35
+ protected readonly logger: Logger;
34
36
  constructor(config: OystehrConfig);
35
37
  protected request(path: string, method: string, baseUrlThunk: () => string): FetcherFunction;
36
38
  protected fhirRequest<T extends FhirResource = any>(path: string, method: string): (params: any, request?: InternalClientRequest) => Promise<FhirFetcherResponse<T>>;
@@ -47,4 +49,5 @@ export type FetcherFunction = (params?: Record<string, any> | [any] | InternalCl
47
49
  * @param search URLSearchParams object
48
50
  */
49
51
  export declare function addParamsToSearch(params: Record<string, unknown>, search: URLSearchParams): void;
52
+ export declare function extractParamsAndRequest(params?: Record<string, unknown> | [any] | InternalClientRequest, request?: InternalClientRequest): [Record<string, unknown>, InternalClientRequest | undefined];
50
53
  export {};
@@ -1,3 +1,4 @@
1
+ import type { Coding } from './resources/types/fhir';
1
2
  /**
2
3
  * Configuration for the Oystehr SDK client
3
4
  */
@@ -10,6 +11,10 @@ export interface OystehrConfig {
10
11
  * Optional Oystehr Project ID. Required for developer accessTokens.
11
12
  */
12
13
  projectId?: string;
14
+ /**
15
+ * Optional log level for the SDK logger. Possible values are 'error', 'info', and 'debug'.
16
+ */
17
+ logLevel?: 'error' | 'info' | 'debug';
13
18
  fhirApiUrl?: string;
14
19
  projectApiUrl?: string;
15
20
  services?: {
@@ -58,6 +63,20 @@ export interface OystehrConfig {
58
63
  */
59
64
  retryOn?: number[];
60
65
  };
66
+ /**
67
+ * Optional workspace tag configuration. When set, all FHIR searches will be
68
+ * filtered to only return resources with this tag, and all FHIR mutations
69
+ * (create, update, patch) will have this tag injected automatically.
70
+ * Mutually exclusive with `ignoreTags`.
71
+ */
72
+ workspaceTag?: Coding;
73
+ /**
74
+ * Optional list of tags to ignore. When set, all FHIR searches will be
75
+ * filtered to exclude resources matching any of these tags, and mutations
76
+ * will throw an error if the resource carries any of these tags.
77
+ * Mutually exclusive with `workspaceTag`.
78
+ */
79
+ ignoreTags?: Coding[];
61
80
  }
62
81
  export declare function getConfig(): OystehrConfig;
63
82
  export declare function setConfig(config: OystehrConfig): void;
@@ -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(r,n){function o(t){try{c(s.next(t))}catch(e){n(e)}}function u(t){try{c(s.throw(t))}catch(e){n(e)}}function c(t){var e;t.done?r(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,u)}c((s=s.apply(t,e||[])).next())}))}function r(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;const n=[];for(let te=0;te<256;++te)n.push((te+256).toString(16).slice(1));let o;const u=new Uint8Array(16);var c={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function a(t,e,i){if(c.randomUUID&&!t)return c.randomUUID();const s=(t=t||{}).random??t.rng?.()??function(){if(!o){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");o=crypto.getRandomValues.bind(crypto)}return o(u)}();if(s.length<16)throw new Error("Random bytes length must be >= 16");return s[6]=15&s[6]|64,s[8]=63&s[8]|128,function(t,e=0){return(n[t[e+0]]+n[t[e+1]]+n[t[e+2]]+n[t[e+3]]+"-"+n[t[e+4]]+n[t[e+5]]+"-"+n[t[e+6]]+n[t[e+7]]+"-"+n[t[e+8]]+n[t[e+9]]+"-"+n[t[e+10]]+n[t[e+11]]+n[t[e+12]]+n[t[e+13]]+n[t[e+14]]+n[t[e+15]]).toLowerCase()}(s)}const d=[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 l{constructor(t){this.config=t}request(e,i,r){return(n,o)=>s(this,void 0,void 0,(function*(){const s=()=>this.config;try{return yield m(r,s,e,i)(n,o)}catch(u){const e=u;throw new t({message:e.message,code:e.code,cause:e.cause})}}))}fhirRequest(e,r){return(n,o)=>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;return yield m(t,i,e,r)(n,o)}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})}}))}}function p(t){return"accessToken"in t}function m(e,i,r,n){return(o,u)=>s(this,void 0,void 0,(function*(){var c,l,m,f,g,b,y,q,j,w,U,k,S,O,x;const T=o&&!u&&!Array.isArray(o)&&p(o)?{}:null!==(c=o)&&void 0!==c?c:{},E=o&&!u&&!Array.isArray(o)&&p(o)?o:u,z=n.toLowerCase(),A=i(),I=null!==(l=A.fetch)&&void 0!==l?l:fetch,P=null!==(m=null==E?void 0:E.accessToken)&&void 0!==m?m:A.accessToken,R=null!==(f=null==E?void 0:E.projectId)&&void 0!==f?f:i().projectId;let N=r,$=T;if(!Array.isArray(T)){const[e,i]=function(e,i){const s=Object.assign({},i),r=e.replace(/\{([^}]+)\}/g,((e,r)=>{if(delete s[r],r.match(/^.*\+$/))return i[r]+"";if(!i[r]||""===i[r])throw new t({message:`Required path parameter is an empty string: ${r}`,code:400});return i[r]?encodeURIComponent(i[r]+""):""})),n=Object.keys(s);return[r,n.length?n.reduce(((t,e)=>Object.assign(Object.assign({},t),{[e]:s[e]})),{}):{}]}(r,T);N=e,$=i}N=N.replace(/^\//,"");const W=e(),C=W.endsWith("/")?W:W+"/",_=new URL(N,C);let M;if(Array.isArray($))M=JSON.stringify($);else if(Object.keys($).length)if("get"===z)v($,_.searchParams);else if("application/x-www-form-urlencoded"===(null==E?void 0:E.contentType)){const t=new URLSearchParams;v($,t),M=t.toString()}else M=JSON.stringify($);else"application/x-www-form-urlencoded"!==(null==E?void 0:E.contentType)&&"post"===z&&(M="{}");const L=Object.assign(R?{"x-zapehr-project-id":R,"x-oystehr-project-id":R}:{},{"content-type":null!==(g=null==E?void 0:E.contentType)&&void 0!==g?g:"application/json"},P?{Authorization:`Bearer ${P}`}:{},(null==E?void 0:E.ifMatch)?{"If-Match":E.ifMatch}:{},{"x-oystehr-request-id":null!==(b=null==E?void 0:E.requestId)&&void 0!==b?b:a()}),D={retries:null!==(q=null===(y=A.retry)||void 0===y?void 0:y.retries)&&void 0!==q?q:3,jitter:null!==(w=null===(j=A.retry)||void 0===j?void 0:j.jitter)&&void 0!==w?w:20,delay:null!==(k=null===(U=A.retry)||void 0===U?void 0:U.delay)&&void 0!==k?k:100,onRetry:null===(S=A.retry)||void 0===S?void 0:S.onRetry,retryOn:[...null!==(x=null===(O=A.retry)||void 0===O?void 0:O.retryOn)&&void 0!==x?x:[],...d]};return D.retryOn.push(...d),function(t,e){return s(this,void 0,void 0,(function*(){var i,s;let r;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(n){let t=!1;if("response"in n){const i=n;t=e.retryOn.includes(i.code),r={message:n.message,code:n.code}}else if(r=n,"code"in n&&"string"==typeof n.code){const e=n;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 r}))}((()=>s(this,void 0,void 0,(function*(){var t,e,i,s,r,n,o,u;const c=yield I(new Request(_,{method:z.toUpperCase(),body:M,headers:L})),a=c.body?yield c.text():null;let d;const h=c.headers.get("content-type");try{d=a&&((null==h?void 0:h.includes("application/json"))||(null==h?void 0:h.includes("application/fhir+json")))?JSON.parse(a):a&&((null==h?void 0:h.includes("application/xml"))||(null==h?void 0:h.includes("text/xml")))?function(t){try{const e=t.match(/<status>(\d+)<\/status>/),i=e?parseInt(e[1],10):null,s=t.match(/<output>([\s\S]*?)<\/output>/),r=s?s[1]:null;return null===i||null===r?null:{status:i,output:r}}catch(e){return null}}(a):null}catch(l){d=null}if(!c.ok||c.status>=400)throw{message:null!==(r=null!==(s=null!==(i=null!==(e="string"==typeof(null==d?void 0:d.output)?d.output:null===(t=null==d?void 0:d.output)||void 0===t?void 0:t.message)&&void 0!==e?e:null==d?void 0:d.message)&&void 0!==i?i:d)&&void 0!==s?s:a)&&void 0!==r?r:c.statusText,code:null!==(u=null!==(o=null===(n=null==d?void 0:d.output)||void 0===n?void 0:n.code)&&void 0!==o?o:null==d?void 0:d.code)&&void 0!==u?u:c.status,response:c};return d}))),D)}))}function v(t,e){for(const[i,s]of Object.entries(t))Array.isArray(s)?s.forEach((t=>e.append(i,t))):e.append(i,s)}var f,g,b,y;class q extends l{constructor(t){super(t),f.add(this)}list(t){return this.request("/application","get",r(this,f,"m",g).bind(this))(t)}create(t,e){return this.request("/application","post",r(this,f,"m",g).bind(this))(t,e)}get(t,e){return this.request("/application/{id}","get",r(this,f,"m",g).bind(this))(t,e)}update(t,e){return this.request("/application/{id}","patch",r(this,f,"m",g).bind(this))(t,e)}delete(t,e){return this.request("/application/{id}","delete",r(this,f,"m",g).bind(this))(t,e)}rotateSecret(t,e){return this.request("/application/{id}/rotate-secret","post",r(this,f,"m",g).bind(this))(t,e)}revokeRefreshToken(t,e){return this.request("/application/{id}/revoke-refresh-token","post",r(this,f,"m",g).bind(this))(t,e)}revokeAccessToken(t,e){return this.request("/application/{id}/revoke-access-token","post",r(this,f,"m",g).bind(this))(t,e)}}f=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 j extends l{constructor(t){super(t),b.add(this)}issue(t,e){return this.request("/payment/charge/issue","post",r(this,b,"m",y).bind(this))(t,e)}status(t,e){return this.request("/payment/charge/status","post",r(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 w="https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release",U="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 r=t.extension.find((t=>t.url===w));return(null==r?void 0:r.extension)?null===(s=null===(i=r.extension)||void 0===i?void 0:i.find((t=>t.url===U)))||void 0===s?void 0:s.valueString:void 0}var S,O,x,T,E,z,A,I;class P extends l{constructor(t){super(t),S.add(this),this.ENCOUNTER_VS_EXTENSION_URL=w,this.ENCOUNTER_VS_EXTENSION_RELATIVE_URL=U,this.getConversationIdFromEncounter=k}create(t,e){return this.request("/messaging/conversation","post",r(this,S,"m",O).bind(this))(t,e)}getToken(t){return this.request("/messaging/conversation/token","get",r(this,S,"m",O).bind(this))(t)}addParticipant(t,e){return this.request("/messaging/conversation/{conversationId}/participant","post",r(this,S,"m",O).bind(this))(t,e)}removeParticipant(t,e){return this.request("/messaging/conversation/{conversationId}/participant","delete",r(this,S,"m",O).bind(this))(t,e)}message(t,e){return this.request("/messaging/conversation/{conversationId}/message","post",r(this,S,"m",O).bind(this))(t,e)}}S=new WeakSet,O=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 l{constructor(t){super(t),x.add(this)}get(t,e){return this.request("/developer/{id}","get",r(this,x,"m",T).bind(this))(t,e)}update(t,e){return this.request("/developer/{id}","patch",r(this,x,"m",T).bind(this))(t,e)}delete(t,e){return this.request("/developer/{id}","delete",r(this,x,"m",T).bind(this))(t,e)}invite(t,e){return this.request("/developer/invite","post",r(this,x,"m",T).bind(this))(t,e)}list(t){return this.request("/developer","get",r(this,x,"m",T).bind(this))(t)}listV2(t,e){return this.request("/developer/v2/list","get",r(this,x,"m",T).bind(this))(t,e)}}x=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 N extends l{constructor(t){super(t),E.add(this)}searchAllergens(t,e){return this.request("/allergen","get",r(this,E,"m",z).bind(this))(t,e)}searchMedications(t,e){return this.request("/medication","get",r(this,E,"m",z).bind(this))(t,e)}getMedication(t,e){return this.request("/medication/details","get",r(this,E,"m",z).bind(this))(t,e)}getConfiguration(t){return this.request("/config","get",r(this,E,"m",z).bind(this))(t)}checkAllergyInteractions(t,e){return this.request("/patient/{patientId}/interactions/allergy","get",r(this,E,"m",z).bind(this))(t,e)}checkMedicationInteractions(t,e){return this.request("/patient/{patientId}/interactions/medication","get",r(this,E,"m",z).bind(this))(t,e)}checkPrecheckInteractions(t,e){return this.request("/patient/{patientId}/interactions/precheck/{drugId}","get",r(this,E,"m",z).bind(this))(t,e)}addPatientPharmacy(t,e){return this.request("/patient/{patientId}/pharmacies","post",r(this,E,"m",z).bind(this))(t,e)}cancelPrescription(t,e){return this.request("/patient/{patientId}/prescriptions/{medicationRequestId}","delete",r(this,E,"m",z).bind(this))(t,e)}syncPatient(t,e){return this.request("/patient/{patientId}/sync","post",r(this,E,"m",z).bind(this))(t,e)}searchPharmacies(t,e){return this.request("/pharmacy","get",r(this,E,"m",z).bind(this))(t,e)}connectPractitioner(t,e){return this.request("/practitioner/connect","get",r(this,E,"m",z).bind(this))(t,e)}checkPractitionerEnrollment(t,e){return this.request("/practitioner/{practitionerId}","get",r(this,E,"m",z).bind(this))(t,e)}enrollPractitioner(t,e){return this.request("/practitioner/{practitionerId}","post",r(this,E,"m",z).bind(this))(t,e)}unenrollPractitioner(t,e){return this.request("/practitioner/{practitionerId}","delete",r(this,E,"m",z).bind(this))(t,e)}}E=new WeakSet,z=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 l{constructor(t){super(t),A.add(this)}offboard(t){return this.request("/offboard","post",r(this,A,"m",I).bind(this))(t)}onboard(t){return this.request("/onboard","post",r(this,A,"m",I).bind(this))(t)}getConfiguration(t){return this.request("/config","get",r(this,A,"m",I).bind(this))(t)}send(t,e){return this.request("/send","post",r(this,A,"m",I).bind(this))(t,e)}}A=new WeakSet,I=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 W=65535;function C(t,e){return s(this,void 0,void 0,(function*(){const{resourceType:i,params:s}=t;let r;s&&(r=Object.entries(s).reduce(((t,[e,i])=>(t[i.name]||(t[i.name]=[]),t[i.name].push(i.value),t)),{}));const n=yield this.fhirRequest(`/${i}/_search`,"POST")(r,Object.assign(Object.assign({},e),{contentType:"application/x-www-form-urlencoded"}));return Object.assign(Object.assign({},n),{entry:n.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 _(t,e){return s(this,void 0,void 0,(function*(){const{resourceType:i}=t;return this.fhirRequest(`/${i}`,"POST")(t,e)}))}function M(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e},i){return this.fhirRequest(`/${t}/${e}`,"GET")({},i)}))}function L(t,e){return s(this,void 0,void 0,(function*(){const{id:i,resourceType:s}=t;return this.fhirRequest(`/${s}/${i}`,"PUT")(t,Object.assign(Object.assign({},e),{ifMatch:(null==e?void 0:e.optimisticLockingVersionId)?`W/"${e.optimisticLockingVersionId}"`:void 0}))}))}function D(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e,operations:i},s){return this.fhirRequest(`/${t}/${e}`,"PATCH")(i,Object.assign(Object.assign({},s),{contentType:"application/json-patch+json",ifMatch:(null==s?void 0:s.optimisticLockingVersionId)?`W/"${s.optimisticLockingVersionId}"`:void 0}))}))}function V(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e},i){return this.fhirRequest(`/${t}/${e}`,"DELETE")({},i)}))}function G(t,e){return s(this,arguments,void 0,(function*({resourceType:t,id:e,versionId:i,count:s,offset:r},n){return i?this.fhirRequest(`/${t}/${e}/_history/${i}`,"GET")({},n):s?this.fhirRequest(`/${t}/${e}/_history?_total=accurate&_count=${s}\n ${r?`&_offset=${r}`:""}`,"GET")({},n):this.fhirRequest(`/${t}/${e}/_history?_total=accurate`,"GET")({},n)}))}function F(t){const{method:e,url:i}=t,s={request:{method:e,url:i}};if(i.split("?").length>1){const[t,e]=i.split("?"),r=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),{}),n=new URLSearchParams;v(r,n),s.request.url=`${t}?${n.toString()}`}if(["GET","DELETE","HEAD"].includes(e))return s;if("PUT"===e){const{resource:e}=t;return{request:Object.assign(Object.assign({},s.request),{ifMatch:t.ifMatch}),resource:e}}if("PATCH"===e){if("resource"in t)return{request:Object.assign(Object.assign({},s.request),{ifMatch:t.ifMatch}),resource:t.resource};const e=function(t){const e=(new globalThis.TextEncoder).encode(t);let i="";for(let s=0;s<e.length;s+=W){const t=e.subarray(s,s+W);i+=globalThis.btoa(String.fromCodePoint.apply(void 0,t))}return i}(JSON.stringify(t.operations));return Object.assign(Object.assign({},s),{resource:{resourceType:"Binary",contentType:"application/json-patch+json",data:e}})}if("POST"===e){const{resource:e,fullUrl:i}=t;return Object.assign(Object.assign({},s),{resource:e,fullUrl:i})}throw new Error("Unrecognized method")}function H(t,e){return s(this,void 0,void 0,(function*(){const i=yield this.fhirRequest("/","POST")({resourceType:"Bundle",type:"batch",entry:t.requests.map(F)},e);return Object.assign(Object.assign({},i),{entry:i.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:[]},errors:function(){var t;return null===(t=this.entry)||void 0===t?void 0:t.filter((t=>{var e,i,s,r;return(null===(i=null===(e=t.response)||void 0===e?void 0:e.status)||void 0===i?void 0:i.startsWith("4"))||(null===(r=null===(s=t.response)||void 0===s?void 0:s.status)||void 0===r?void 0:r.startsWith("5"))})).map((t=>{var e;return null===(e=t.response)||void 0===e?void 0:e.outcome})).filter((t=>void 0!==t))}})}))}function B(t,e){return s(this,void 0,void 0,(function*(){const i=yield this.fhirRequest("/","POST")({resourceType:"Bundle",type:"transaction",entry:t.requests.map(F)},e);return Object.assign(Object.assign({},i),{entry:i.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 J(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 X(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 Z,K,Q,Y,tt,et,it,st,rt,nt,ot,ut,ct,at,dt,ht,lt,pt,mt,vt,ft,gt,bt,yt,qt,jt,wt,Ut,kt,St,Ot,xt,Tt;class Et extends l{constructor(t){super(t),Z.add(this),this.search=C,this.create=_,this.get=M,this.update=L,this.patch=D,this.delete=V,this.history=G,this.batch=H,this.transaction=B,this.formatAddress=J,this.formatHumanName=X}}Z=new WeakSet;class zt extends l{constructor(t){super(t),K.add(this)}routeList(t){return this.request("/route","get",r(this,K,"m",Q).bind(this))(t)}routeCreate(t,e){return this.request("/route","post",r(this,K,"m",Q).bind(this))(t,e)}routeGet(t,e){return this.request("/route/{routeGuid}","get",r(this,K,"m",Q).bind(this))(t,e)}routeDelete(t,e){return this.request("/route/{routeGuid}","delete",r(this,K,"m",Q).bind(this))(t,e)}orderableItemList(t,e){return this.request("/orderableItem","get",r(this,K,"m",Q).bind(this))(t,e)}orderableItemQuestionnaireGet(t,e){return this.request("/canonical-questionnaire/lab/{labGuid}/compendium/{compendiumVersion}/item/{itemCode}/questionnaire","get",r(this,K,"m",Q).bind(this))(t,e)}orderSubmit(t,e){return this.request("/submit","post",r(this,K,"m",Q).bind(this))(t,e)}}K=new WeakSet,Q=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 At extends l{constructor(t){super(t),Y.add(this)}list(t){return this.request("/m2m","get",r(this,Y,"m",tt).bind(this))(t)}create(t,e){return this.request("/m2m","post",r(this,Y,"m",tt).bind(this))(t,e)}me(t){return this.request("/m2m/me","get",r(this,Y,"m",tt).bind(this))(t)}get(t,e){return this.request("/m2m/{id}","get",r(this,Y,"m",tt).bind(this))(t,e)}update(t,e){return this.request("/m2m/{id}","patch",r(this,Y,"m",tt).bind(this))(t,e)}delete(t,e){return this.request("/m2m/{id}","delete",r(this,Y,"m",tt).bind(this))(t,e)}rotateSecret(t,e){return this.request("/m2m/{id}/rotate-secret","post",r(this,Y,"m",tt).bind(this))(t,e)}listV2(t,e){return this.request("/m2m/v2/list","get",r(this,Y,"m",tt).bind(this))(t,e)}}Y=new WeakSet,tt=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 It extends l{constructor(t){super(t),et.add(this)}getMessagingConfig(t){return this.request("/messaging/config","get",r(this,et,"m",it).bind(this))(t)}}et=new WeakSet,it=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 Pt extends l{constructor(t){super(t),st.add(this)}setUp(t,e){return this.request("/payment/payment-method/setup","post",r(this,st,"m",rt).bind(this))(t,e)}setDefault(t,e){return this.request("/payment/payment-method/set-default","post",r(this,st,"m",rt).bind(this))(t,e)}delete(t,e){return this.request("/payment/payment-method","delete",r(this,st,"m",rt).bind(this))(t,e)}list(t,e){return this.request("/payment/payment-method/list","post",r(this,st,"m",rt).bind(this))(t,e)}}st=new WeakSet,rt=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 Rt extends l{constructor(t){super(t),nt.add(this)}get(t){return this.request("/project","get",r(this,nt,"m",ot).bind(this))(t)}update(t,e){return this.request("/project","patch",r(this,nt,"m",ot).bind(this))(t,e)}}nt=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 Nt extends l{constructor(t){super(t),ut.add(this)}eligibilityCheck(t,e){return this.request("/eligibility-check","post",r(this,ut,"m",ct).bind(this))(t,e)}submitClaim(t,e){return this.request("/claim/{claimId}/submit","post",r(this,ut,"m",ct).bind(this))(t,e)}setClaimStatus(t,e){return this.request("/claim/{claimId}/status","post",r(this,ut,"m",ct).bind(this))(t,e)}}ut=new WeakSet,ct=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 $t extends l{constructor(t){super(t),at.add(this)}list(t){return this.request("/iam/role","get",r(this,at,"m",dt).bind(this))(t)}create(t,e){return this.request("/iam/role","post",r(this,at,"m",dt).bind(this))(t,e)}get(t,e){return this.request("/iam/role/{roleId}","get",r(this,at,"m",dt).bind(this))(t,e)}update(t,e){return this.request("/iam/role/{roleId}","patch",r(this,at,"m",dt).bind(this))(t,e)}delete(t,e){return this.request("/iam/role/{roleId}","delete",r(this,at,"m",dt).bind(this))(t,e)}}at=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 Wt extends l{constructor(t){super(t),ht.add(this)}list(t){return this.request("/secret","get",r(this,ht,"m",lt).bind(this))(t)}set(t,e){return this.request("/secret","post",r(this,ht,"m",lt).bind(this))(t,e)}get(t,e){return this.request("/secret/{name}","get",r(this,ht,"m",lt).bind(this))(t,e)}delete(t,e){return this.request("/secret/{name}","delete",r(this,ht,"m",lt).bind(this))(t,e)}}ht=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 Ct extends l{constructor(t){super(t),pt.add(this)}createMeeting(t,e){return this.request("/telemed/v2/meeting","post",r(this,pt,"m",mt).bind(this))(t,e)}joinMeeting(t,e){return this.request("/telemed/v2/meeting/{encounterId}/join","get",r(this,pt,"m",mt).bind(this))(t,e)}}pt=new WeakSet,mt=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 _t extends l{constructor(t){super(t),vt.add(this)}searchCpt(t,e){return this.request("/cpt/search","get",r(this,vt,"m",ft).bind(this))(t,e)}searchHcpcs(t,e){return this.request("/hcpcs/search","get",r(this,vt,"m",ft).bind(this))(t,e)}}vt=new WeakSet,ft=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 Mt extends l{constructor(t){super(t),gt.add(this)}send(t,e){return this.request("/messaging/transactional-sms/send","post",r(this,gt,"m",bt).bind(this))(t,e)}}gt=new WeakSet,bt=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 Lt extends l{constructor(t){super(t),yt.add(this)}me(t){return this.request("/user/me","get",r(this,yt,"m",qt).bind(this))(t)}get(t,e){return this.request("/user/{id}","get",r(this,yt,"m",qt).bind(this))(t,e)}update(t,e){return this.request("/user/{id}","patch",r(this,yt,"m",qt).bind(this))(t,e)}delete(t,e){return this.request("/user/{id}","delete",r(this,yt,"m",qt).bind(this))(t,e)}resetMfa(t,e){return this.request("/user/{id}/reset-mfa","post",r(this,yt,"m",qt).bind(this))(t,e)}resetPasswordLink(t,e){return this.request("/user/{id}/reset-password-link","post",r(this,yt,"m",qt).bind(this))(t,e)}invite(t,e){return this.request("/user/invite","post",r(this,yt,"m",qt).bind(this))(t,e)}list(t){return this.request("/user","get",r(this,yt,"m",qt).bind(this))(t)}listV2(t,e){return this.request("/user/v2/list","get",r(this,yt,"m",qt).bind(this))(t,e)}}yt=new WeakSet,qt=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 Dt extends l{constructor(t){super(t),jt.add(this)}get(t){return this.request("/version","get",r(this,jt,"m",wt).bind(this))(t)}}function Vt(){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 Gt(t){return s(this,arguments,void 0,(function*({bucketName:t,"objectPath+":e,file:i}){const s=yield this.request("/z3/{bucketName}/{objectPath+}","post",Vt.bind(this))({action:"upload",bucketName:t,"objectPath+":e});yield fetch(s.signedUrl,{method:"PUT",body:i})}))}function Ft(t){return s(this,arguments,void 0,(function*({bucketName:t,"objectPath+":e}){const i=yield this.request("/z3/{bucketName}/{objectPath+}","post",Vt.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 Ht(e){return s(this,void 0,void 0,(function*(){var i,s;let r,n;const o=new URL(e.url);if("z3:"===o.protocol){const t=o.pathname.split("/").slice(1);r=o.hostname,n=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);r=t[0],n=t.slice(1).join("/")}}const u={action:"upload",bucketName:r,"objectPath+":n};return this.request("/z3/{bucketName}/{objectPath+}","post",Vt.bind(this))(u)}))}jt=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 Bt extends l{constructor(t){super(t),Ut.add(this),this.uploadFile=Gt,this.downloadFile=Ft,this.getPresignedUrlForZ3Url=Ht}listBuckets(t){return this.request("/z3","get",r(this,Ut,"m",kt).bind(this))(t)}createBucket(t,e){return this.request("/z3/{bucketName}","put",r(this,Ut,"m",kt).bind(this))(t,e)}deleteBucket(t,e){return this.request("/z3/{bucketName}","delete",r(this,Ut,"m",kt).bind(this))(t,e)}listObjects(t,e){return this.request("/z3/{bucketName}/{objectPath+}","get",r(this,Ut,"m",kt).bind(this))(t,e)}getPresignedUrl(t,e){return this.request("/z3/{bucketName}/{objectPath+}","post",r(this,Ut,"m",kt).bind(this))(t,e)}deleteObject(t,e){return this.request("/z3/{bucketName}/{objectPath+}","delete",r(this,Ut,"m",kt).bind(this))(t,e)}}function Jt(){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 Xt(t){return s(this,arguments,void 0,(function*({id:t,file:e,filename:i}){const s=yield this.request("/zambda/{id}/s3-upload","post",Jt.bind(this))({id:t,filename:i});yield fetch(s.signedUrl,{method:"PUT",body:e})}))}Ut=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 Zt extends l{constructor(t){super(t),St.add(this),this.uploadFile=Xt}list(t){return this.request("/zambda","get",r(this,St,"m",Ot).bind(this))(t)}create(t,e){return this.request("/zambda","post",r(this,St,"m",Ot).bind(this))(t,e)}get(t,e){return this.request("/zambda/{id}","get",r(this,St,"m",Ot).bind(this))(t,e)}update(t,e){return this.request("/zambda/{id}","patch",r(this,St,"m",Ot).bind(this))(t,e)}delete(t,e){return this.request("/zambda/{id}","delete",r(this,St,"m",Ot).bind(this))(t,e)}execute(t,e){return this.request("/zambda/{id}/execute","post",r(this,St,"m",Ot).bind(this))(t,e)}executePublic(t,e){return this.request("/zambda/{id}/execute-public","post",r(this,St,"m",Ot).bind(this))(t,e)}s3Upload(t,e){return this.request("/zambda/{id}/s3-upload","post",r(this,St,"m",Ot).bind(this))(t,e)}}St=new WeakSet,Ot=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 Kt extends l{constructor(t){super(t),xt.add(this)}list(t,e){return this.request("/zambda/{id}/logStream","post",r(this,xt,"m",Tt).bind(this))(t,e)}search(t,e){return this.request("/zambda/{id}/logStream/search","post",r(this,xt,"m",Tt).bind(this))(t,e)}get(t,e){return this.request("/zambda/{id}/logStream/{logStreamName}","post",r(this,xt,"m",Tt).bind(this))(t,e)}}xt=new WeakSet,Tt=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 Qt=class{constructor(t){var e,i,s,r,n,o;this.config=t,null!==(e=(r=this.config).services)&&void 0!==e||(r.services={}),null!==(i=(n=this.config.services).projectApiUrl)&&void 0!==i||(n.projectApiUrl=t.projectApiUrl),null!==(s=(o=this.config.services).fhirApiUrl)&&void 0!==s||(o.fhirApiUrl=t.fhirApiUrl),this.application=new q(t),this.developer=new R(t),this.m2m=new At(t),this.messaging=new It(t),this.conversation=new P(t),this.transactionalSMS=new Mt(t),this.paymentMethod=new Pt(t),this.charge=new j(t),this.project=new Rt(t),this.role=new $t(t),this.secret=new Wt(t),this.telemed=new Ct(t),this.user=new Lt(t),this.version=new Dt(t),this.z3=new Bt(t),this.fax=new $(t),this.lab=new zt(t),this.erx=new N(t),this.rcm=new Nt(t),this.terminology=new _t(t),this.zambda=new Zt(t),this.zambdaLogStream=new Kt(t),this.fhir=new Et(t)}};class Yt extends Qt{}Yt.OystehrFHIRError=i,Yt.OystehrSdkError=t,exports.default=Yt;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class e extends Error{constructor({message:t,code:i,cause:s}){super(t,{cause:s}),Object.setPrototypeOf(this,e.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 t(e){var t;const i=[];for(const s of null!==(t=e.issue)&&void 0!==t?t:[])s.details&&s.details.text&&i.push(s.details.text);return i.length||i.push("Unknown FHIR error"),i.join(",")}class i extends e{constructor({error:e,code:s}){super({message:t(e),code:s}),Object.setPrototypeOf(this,i.prototype),this.cause=e,this.name="OystehrFHIRError"}toJSON(){return{name:this.name,message:this.message,code:this.code,cause:this.cause}}}function s(e,t,i,s){return new(i||(i=Promise))((function(r,n){function o(e){try{a(s.next(e))}catch(t){n(t)}}function u(e){try{a(s.throw(e))}catch(t){n(t)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i((function(e){e(t)}))).then(o,u)}a((s=s.apply(e,t||[])).next())}))}function r(e,t,i,s){if("a"===i&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?s:"a"===i?s.call(e):s?s.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;var n=/^(?:[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 ct=0;ct<256;++ct)o.push((ct+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:e}){this._level=e}error(e,t={}){this._level&&["error","info","debug"].includes(this._level)&&console.error(JSON.stringify(Object.assign({message:e},t)))}info(e,t={}){this._level&&["info","debug"].includes(this._level)&&console.info(JSON.stringify(Object.assign({message:e},t)))}debug(e,t={}){this._level&&["debug"].includes(this._level)&&console.debug(JSON.stringify(Object.assign({message:e},t)))}time(e,t={}){this._level&&["debug"].includes(this._level)&&console.time(JSON.stringify(Object.assign({message:e},t)))}timeEnd(e,t={}){this._level&&["debug"].includes(this._level)&&console.timeEnd(JSON.stringify(Object.assign({message:e},t)))}}const h=[408,429,500,502,503,504],l=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET"];class p{constructor(e){this.config=e,this.logger=new d({level:this.config.logLevel})}request(t,i,r){return(n,o)=>s(this,void 0,void 0,(function*(){const s=()=>this.config,u=()=>this.logger;try{return yield m(r,s,u,t,i)(n,o)}catch(a){const t=a;throw this.logger.error(t.message,{code:t.code,cause:t.cause}),new e({message:t.message,code:t.code,cause:t.cause})}}))}fhirRequest(t,r){return(n,o)=>s(this,void 0,void 0,(function*(){try{const e=()=>{var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.fhirApiUrl)&&void 0!==t?t:"https://fhir-api.zapehr.com"},i=()=>this.config,s=()=>this.logger;return yield m(e,i,s,t,r)(n,o)}catch(s){const t=s;if("string"==typeof t.message)throw new e({message:t.message,code:t.code,cause:t.cause});throw new i({error:t.message,code:t.code})}}))}}function v(e){var t,i;return"accessToken"in e||"projectId"in e&&"string"==typeof(i=e.projectId)&&n.test(i)||"contentType"in e&&2===(null===(t=e.contentType)||void 0===t?void 0:t.split("/").length)||"requestId"in e||"ifMatch"in e&&e.ifMatch.startsWith('W/"')}function m(t,i,r,n,d){return(p,m)=>s(this,void 0,void 0,(function*(){var g,b,y,q,w,j,T,O,k,S,I,U,E,x;let[z,A]=function(e,t){var i;return[e&&!t&&!Array.isArray(e)&&v(e)?{}:null!==(i=e)&&void 0!==i?i:{},e&&!t&&!Array.isArray(e)&&v(e)?e:t]}(p,m);null!=A||(A={}),null!==(g=A.requestId)&&void 0!==g||(A.requestId=function(e){if(c.randomUUID&&!e)return c.randomUUID();const t=(e=e||{}).random??e.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(t.length<16)throw new Error("Random bytes length must be >= 16");return t[6]=15&t[6]|64,t[8]=63&t[8]|128,function(e,t=0){return(o[e[t+0]]+o[e[t+1]]+o[e[t+2]]+o[e[t+3]]+"-"+o[e[t+4]]+o[e[t+5]]+"-"+o[e[t+6]]+o[e[t+7]]+"-"+o[e[t+8]]+o[e[t+9]]+"-"+o[e[t+10]]+o[e[t+11]]+o[e[t+12]]+o[e[t+13]]+o[e[t+14]]+o[e[t+15]]).toLowerCase()}(t)}());const P=i(),R=r(),N=d.toLowerCase();R.debug("Beginning fetch",{method:N,path:n,requestId:null==A?void 0:A.requestId});const _=null!==(b=P.fetch)&&void 0!==b?b:fetch,$=null!==(y=null==A?void 0:A.accessToken)&&void 0!==y?y:P.accessToken,W=null!==(q=null==A?void 0:A.projectId)&&void 0!==q?q:P.projectId;let M=n,C=z;if(!Array.isArray(z)){const[t,i]=function(t,i){const s=Object.assign({},i),r=t.replace(/\{([^}]+)\}/g,((t,r)=>{if(delete s[r],r.match(/^.*\+$/))return i[r]+"";if(!i[r]||""===i[r])throw new e({message:`Required path parameter is an empty string: ${r}`,code:400});return i[r]?encodeURIComponent(i[r]+""):""})),n=Object.keys(s);return[r,n.length?n.reduce(((e,t)=>Object.assign(Object.assign({},e),{[t]:s[t]})),{}):{}]}(n,z);M=t,C=i}R.debug("Substituted parameters in path",{method:N,path:n,requestId:null==A?void 0:A.requestId}),M=M.replace(/^\//,"");const D=t(),L=D.endsWith("/")?D:D+"/",J=new URL(M,L);let G;if(Array.isArray(C))G=JSON.stringify(C);else if(Object.keys(C).length)if("get"===N)f(C,J.searchParams);else if("application/x-www-form-urlencoded"===(null==A?void 0:A.contentType)){const e=new URLSearchParams;f(C,e),G=e.toString()}else G=JSON.stringify(C);else"application/x-www-form-urlencoded"!==(null==A?void 0:A.contentType)&&"post"===N&&(G="{}");R.debug("Prepared request body",{method:N,path:n,requestId:null==A?void 0:A.requestId});const H=Object.assign(W?{"x-zapehr-project-id":W,"x-oystehr-project-id":W}:{},{"content-type":null!==(w=null==A?void 0:A.contentType)&&void 0!==w?w:"application/json"},$?{Authorization:`Bearer ${$}`}:{},(null==A?void 0:A.ifMatch)?{"If-Match":A.ifMatch}:{},{"x-oystehr-request-id":null==A?void 0:A.requestId}),V={retries:null!==(T=null===(j=P.retry)||void 0===j?void 0:j.retries)&&void 0!==T?T:3,jitter:null!==(k=null===(O=P.retry)||void 0===O?void 0:O.jitter)&&void 0!==k?k:20,delay:null!==(I=null===(S=P.retry)||void 0===S?void 0:S.delay)&&void 0!==I?I:100,onRetry:null===(U=P.retry)||void 0===U?void 0:U.onRetry,retryOn:[...null!==(x=null===(E=P.retry)||void 0===E?void 0:E.retryOn)&&void 0!==x?x:[],...h]};return V.retryOn.push(...h),function(e,t){return s(this,void 0,void 0,(function*(){var i,s;let r;for(const o of Array.from({length:(null!==(i=t.retries)&&void 0!==i?i:0)+1},((e,t)=>t)))try{return yield e()}catch(n){let e=!1;if("response"in n){const i=n;e=t.retryOn.includes(i.code),r={message:n.message,code:n.code}}else if(r=n,"code"in n&&"string"==typeof n.code){const t=n;e=l.includes(t.code)}if(!e)break;const i=Math.floor(Math.random()*(t.jitter+1));yield new Promise((e=>setTimeout(e,t.delay+i))),t.onRetry&&o!==(null!==(s=t.retries)&&void 0!==s?s:0)&&t.onRetry(o+1)}throw r}))}((()=>s(this,void 0,void 0,(function*(){var e,t,i,s,r,n,o,u;R.info("Request start",{method:N,url:J,requestId:null==A?void 0:A.requestId});const a=Date.now(),c=yield _(new Request(J,{method:N.toUpperCase(),body:G,headers:H}));R.info("Request end",{method:N,url:J,duration:Date.now()-a,requestId:null==A?void 0:A.requestId});const d=c.body?yield c.text():null;let h;const l=c.headers.get("content-type");try{d&&((null==l?void 0:l.includes("application/json"))||(null==l?void 0:l.includes("application/fhir+json")))?(R.time("Deserialized JSON response",{method:N,url:J,requestId:null==A?void 0:A.requestId}),h=JSON.parse(d),R.timeEnd("Deserialized JSON response",{method:N,url:J,requestId:null==A?void 0:A.requestId})):d&&((null==l?void 0:l.includes("application/xml"))||(null==l?void 0:l.includes("text/xml")))?(R.time("Deserialized XML response",{method:N,url:J,requestId:null==A?void 0:A.requestId}),h=function(e){try{const t=e.match(/<status>(\d+)<\/status>/),i=t?parseInt(t[1],10):null,s=e.match(/<output>([\s\S]*?)<\/output>/),r=s?s[1]:null;return null===i||null===r?null:{status:i,output:r}}catch(t){return null}}(d),R.timeEnd("Deserialized XML response",{method:N,url:J,requestId:null==A?void 0:A.requestId})):h=null}catch(p){h=null}if(R.debug("Deserialized response",{method:N,url:J,requestId:null==A?void 0:A.requestId}),!c.ok||c.status>=400)throw{message:null!==(r=null!==(s=null!==(i=null!==(t="string"==typeof(null==h?void 0:h.output)?h.output:null===(e=null==h?void 0:h.output)||void 0===e?void 0:e.message)&&void 0!==t?t:null==h?void 0:h.message)&&void 0!==i?i:h)&&void 0!==s?s:d)&&void 0!==r?r:c.statusText,code:null!==(u=null!==(o=null===(n=null==h?void 0:h.output)||void 0===n?void 0:n.code)&&void 0!==o?o:null==h?void 0:h.code)&&void 0!==u?u:c.status,response:c};return h}))),V)}))}function f(e,t){for(const[i,s]of Object.entries(e))Array.isArray(s)?s.forEach((e=>t.append(i,e))):t.append(i,s)}var g,b,y,q;class w extends p{constructor(e){super(e),g.add(this)}list(e){return this.request("/application","get",r(this,g,"m",b).bind(this))(e)}create(e,t){return this.request("/application","post",r(this,g,"m",b).bind(this))(e,t)}get(e,t){return this.request("/application/{id}","get",r(this,g,"m",b).bind(this))(e,t)}update(e,t){return this.request("/application/{id}","patch",r(this,g,"m",b).bind(this))(e,t)}delete(e,t){return this.request("/application/{id}","delete",r(this,g,"m",b).bind(this))(e,t)}rotateSecret(e,t){return this.request("/application/{id}/rotate-secret","post",r(this,g,"m",b).bind(this))(e,t)}revokeRefreshToken(e,t){return this.request("/application/{id}/revoke-refresh-token","post",r(this,g,"m",b).bind(this))(e,t)}revokeAccessToken(e,t){return this.request("/application/{id}/revoke-access-token","post",r(this,g,"m",b).bind(this))(e,t)}}g=new WeakSet,b=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class j extends p{constructor(e){super(e),y.add(this)}issue(e,t){return this.request("/payment/charge/issue","post",r(this,y,"m",q).bind(this))(e,t)}status(e,t){return this.request("/payment/charge/status","post",r(this,y,"m",q).bind(this))(e,t)}}y=new WeakSet,q=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};const T="https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release",O="addressString";function k(e){var t,i,s;if(function(e){return Object.hasOwn(e,"virtualService")}(e)){const i=null===(t=e.virtualService)||void 0===t?void 0:t.find((e=>{var t;return"https://fhir.zapehr.com/virtual-service-type"===(null===(t=e.channelType)||void 0===t?void 0:t.system)}));return null==i?void 0:i.addressString}if(!e.extension)return;const r=e.extension.find((e=>e.url===T));return(null==r?void 0:r.extension)?null===(s=null===(i=r.extension)||void 0===i?void 0:i.find((e=>e.url===O)))||void 0===s?void 0:s.valueString:void 0}var S,I,U,E,x,z,A,P;class R extends p{constructor(e){super(e),S.add(this),this.ENCOUNTER_VS_EXTENSION_URL=T,this.ENCOUNTER_VS_EXTENSION_RELATIVE_URL=O,this.getConversationIdFromEncounter=k}create(e,t){return this.request("/messaging/conversation","post",r(this,S,"m",I).bind(this))(e,t)}getToken(e){return this.request("/messaging/conversation/token","get",r(this,S,"m",I).bind(this))(e)}addParticipant(e,t){return this.request("/messaging/conversation/{conversationId}/participant","post",r(this,S,"m",I).bind(this))(e,t)}removeParticipant(e,t){return this.request("/messaging/conversation/{conversationId}/participant","delete",r(this,S,"m",I).bind(this))(e,t)}message(e,t){return this.request("/messaging/conversation/{conversationId}/message","post",r(this,S,"m",I).bind(this))(e,t)}}S=new WeakSet,I=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class N extends p{constructor(e){super(e),U.add(this)}get(e,t){return this.request("/developer/{id}","get",r(this,U,"m",E).bind(this))(e,t)}update(e,t){return this.request("/developer/{id}","patch",r(this,U,"m",E).bind(this))(e,t)}delete(e,t){return this.request("/developer/{id}","delete",r(this,U,"m",E).bind(this))(e,t)}invite(e,t){return this.request("/developer/invite","post",r(this,U,"m",E).bind(this))(e,t)}list(e){return this.request("/developer","get",r(this,U,"m",E).bind(this))(e)}listV2(e,t){return this.request("/developer/v2/list","get",r(this,U,"m",E).bind(this))(e,t)}}U=new WeakSet,E=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class _ extends p{constructor(e){super(e),x.add(this)}searchAllergens(e,t){return this.request("/allergen","get",r(this,x,"m",z).bind(this))(e,t)}searchMedications(e,t){return this.request("/medication","get",r(this,x,"m",z).bind(this))(e,t)}getMedication(e,t){return this.request("/medication/details","get",r(this,x,"m",z).bind(this))(e,t)}getConfiguration(e){return this.request("/config","get",r(this,x,"m",z).bind(this))(e)}checkAllergyInteractions(e,t){return this.request("/patient/{patientId}/interactions/allergy","get",r(this,x,"m",z).bind(this))(e,t)}checkMedicationInteractions(e,t){return this.request("/patient/{patientId}/interactions/medication","get",r(this,x,"m",z).bind(this))(e,t)}checkPrecheckInteractions(e,t){return this.request("/patient/{patientId}/interactions/precheck/{drugId}","get",r(this,x,"m",z).bind(this))(e,t)}getMedicationHistory(e,t){return this.request("/patient/{patientId}/medication-history","get",r(this,x,"m",z).bind(this))(e,t)}addPatientPharmacy(e,t){return this.request("/patient/{patientId}/pharmacies","post",r(this,x,"m",z).bind(this))(e,t)}cancelPrescription(e,t){return this.request("/patient/{patientId}/prescriptions/{medicationRequestId}","delete",r(this,x,"m",z).bind(this))(e,t)}syncPatient(e,t){return this.request("/patient/{patientId}/sync","post",r(this,x,"m",z).bind(this))(e,t)}searchPharmacies(e,t){return this.request("/pharmacy","get",r(this,x,"m",z).bind(this))(e,t)}connectPractitioner(e,t){return this.request("/practitioner/connect","get",r(this,x,"m",z).bind(this))(e,t)}checkPractitionerEnrollment(e,t){return this.request("/practitioner/{practitionerId}","get",r(this,x,"m",z).bind(this))(e,t)}enrollPractitioner(e,t){return this.request("/practitioner/{practitionerId}","post",r(this,x,"m",z).bind(this))(e,t)}unenrollPractitioner(e,t){return this.request("/practitioner/{practitionerId}","delete",r(this,x,"m",z).bind(this))(e,t)}}x=new WeakSet,z=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.erxApiUrl)&&void 0!==t?t:"https://erx-api.zapehr.com/v3"};class $ extends p{constructor(e){super(e),A.add(this)}offboard(e){return this.request("/offboard","post",r(this,A,"m",P).bind(this))(e)}onboard(e){return this.request("/onboard","post",r(this,A,"m",P).bind(this))(e)}getConfiguration(e){return this.request("/config","get",r(this,A,"m",P).bind(this))(e)}send(e,t){return this.request("/send","post",r(this,A,"m",P).bind(this))(e,t)}}A=new WeakSet,P=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.faxApiUrl)&&void 0!==t?t:"https://fax-api.zapehr.com/v1"};const W=65535;function M(e){const t=(new globalThis.TextEncoder).encode(e);let i="";for(let s=0;s<t.length;s+=W){const e=t.subarray(s,s+W);i+=globalThis.btoa(String.fromCodePoint.apply(void 0,e))}return i}function C(e){var t,i;return e.system?`${e.system}|${null!==(t=e.code)&&void 0!==t?t:""}`:null!==(i=e.code)&&void 0!==i?i:""}function D(e,t){var i,s,r,n;return(null!==(i=e.system)&&void 0!==i?i:"")===(null!==(s=t.system)&&void 0!==s?s:"")&&(null!==(r=e.code)&&void 0!==r?r:"")===(null!==(n=t.code)&&void 0!==n?n:"")}function L(t,i){var s,r,n,o,u,a,c;const d=i;if(null===(s=t.ignoreTags)||void 0===s?void 0:s.length){const s=null!==(n=null===(r=d.meta)||void 0===r?void 0:r.tag)&&void 0!==n?n:[];for(const i of t.ignoreTags)if(s.some((e=>D(e,i))))throw new e({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(t.workspaceTag){const e=t.workspaceTag,s=null!==(c=null===(a=d.meta)||void 0===a?void 0:a.tag)&&void 0!==c?c:[];if(!s.some((t=>D(t,e))))return Object.assign(Object.assign({},i),{meta:Object.assign(Object.assign({},d.meta),{tag:[...s,e]})})}return i}function J(t,i){var s,r,n;if(null===(s=t.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 t.ignoreTags)if(D(s,i))throw new e({message:`Patch operation contains an ignored tag (system: "${null!==(r=i.system)&&void 0!==r?r:""}", code: "${null!==(n=i.code)&&void 0!==n?n:""}") and cannot be applied in ignoreTags mode`,code:400})}}return i}if(t.workspaceTag){const e=t.workspaceTag;return i.reduce(((t,i)=>{var s;if("remove"===i.op&&"/meta/tag"===i.path)return t.push(i),t.push({op:"add",path:"/meta/tag",value:[e]}),t;if("remove"===i.op&&"/meta"===i.path)return t.push(i),t.push({op:"add",path:"/meta",value:{tag:[e]}}),t;if(("add"===i.op||"replace"===i.op)&&"/meta/tag"===i.path){const s=Array.isArray(i.value)?i.value:[];return s.some((t=>D(t,e)))?t.push(i):t.push(Object.assign(Object.assign({},i),{value:[...s,e]})),t}if(("add"===i.op||"replace"===i.op)&&"/meta"===i.path){const r=null!=i.value&&"object"==typeof i.value?i.value:{},n=null!==(s=r.tag)&&void 0!==s?s:[];return n.some((t=>D(t,e)))?t.push(i):t.push(Object.assign(Object.assign({},i),{value:Object.assign(Object.assign({},r),{tag:[...n,e]})})),t}return t.push(i),t}),[])}return i}function G(e,t){var s,r,n;const o=null!==(r=null===(s=t.meta)||void 0===s?void 0:s.tag)&&void 0!==r?r:[];if(e.workspaceTag){const t=e.workspaceTag;if(!o.some((e=>D(e,t))))throw new i({error:{resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},code:404})}else if(null===(n=e.ignoreTags)||void 0===n?void 0:n.length)for(const u of e.ignoreTags)if(o.some((e=>D(e,u))))throw new i({error:{resourceType:"OperationOutcome",id:"not-found",issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},code:404})}function H(e,t){return s(this,void 0,void 0,(function*(){const{resourceType:i}=e,s=function(e,t){var i;const s=t?[...t]:[];if(e.workspaceTag)s.push({name:"_tag",value:C(e.workspaceTag)});else if(null===(i=e.ignoreTags)||void 0===i?void 0:i.length)for(const r of e.ignoreTags)s.push({name:"_tag:not",value:C(r)});return s}(this.config,e.params);let r;s.length&&(r=s.reduce(((e,t)=>(e[t.name]||(e[t.name]=[]),e[t.name].push(t.value),e)),{}));const n=yield this.fhirRequest(`/${i}/_search`,"POST")(r,Object.assign(Object.assign({},t),{contentType:"application/x-www-form-urlencoded"}));return Object.assign(Object.assign({},n),{entry:n.entry,unbundle:function(){var e,t;return null!==(t=null===(e=this.entry)||void 0===e?void 0:e.map((e=>e.resource)).filter((e=>void 0!==e)))&&void 0!==t?t:[]}})}))}function V(e,t){return s(this,void 0,void 0,(function*(){const i=L(this.config,e),{resourceType:s}=i;return this.fhirRequest(`/${s}`,"POST")(i,t)}))}function B(e,t){return s(this,arguments,void 0,(function*({resourceType:e,id:t},i){const s=yield this.fhirRequest(`/${e}/${t}`,"GET")({},i);return G(this.config,s),s}))}function F(e,t){return s(this,void 0,void 0,(function*(){const i=L(this.config,e),{id:s,resourceType:r}=i;return this.fhirRequest(`/${r}/${s}`,"PUT")(i,Object.assign(Object.assign({},t),{ifMatch:(null==t?void 0:t.optimisticLockingVersionId)?`W/"${t.optimisticLockingVersionId}"`:void 0}))}))}function X(e,t){return s(this,arguments,void 0,(function*({resourceType:e,id:t,operations:i},s){const r=J(this.config,i);return this.fhirRequest(`/${e}/${t}`,"PATCH")(r,Object.assign(Object.assign({},s),{contentType:"application/json-patch+json",ifMatch:(null==s?void 0:s.optimisticLockingVersionId)?`W/"${s.optimisticLockingVersionId}"`:void 0}))}))}function Z(e,t){return s(this,arguments,void 0,(function*({resourceType:e,id:t},i){return this.fhirRequest(`/${e}/${t}`,"DELETE")({},i)}))}function K(e,t){return s(this,arguments,void 0,(function*({resourceType:e,id:t,versionId:i,count:s,offset:r},n){return i?this.fhirRequest(`/${e}/${t}/_history/${i}`,"GET")({},n):s?this.fhirRequest(`/${e}/${t}/_history?_total=accurate&_count=${s}\n ${r?`&_offset=${r}`:""}`,"GET")({},n):this.fhirRequest(`/${e}/${t}/_history?_total=accurate`,"GET")({},n)}))}function Q(e){const t=e.split("?")[0].split("/").filter(Boolean);return t.length<=1||t[1].startsWith("_")}function Y(e){return e.split("?")[0].endsWith("/_search")}function ee(e,t){var i;const{method:s}=e;let r=e.url;if((("GET"===s||"HEAD"===s)&&Q(r)||"POST"===s&&Y(r))&&(t.workspaceTag&&(r+=(r.includes("?")?"&":"?")+`_tag=${C(t.workspaceTag)}`),null===(i=t.ignoreTags)||void 0===i?void 0:i.length))for(const o of t.ignoreTags)r+=(r.includes("?")?"&":"?")+`_tag:not=${C(o)}`;const n={request:{method:s,url:r}};if(r.split("?").length>1){const[e,t]=r.split("?"),i=t.split("&").map((e=>{const[t,i]=e.split("=");return{name:t,value:i}})).reduce(((e,{name:t,value:i})=>t?(e[t]||(e[t]=[]),e[t].push(i),e):e),{}),s=new URLSearchParams;f(i,s),n.request.url=`${e}?${s.toString()}`}if(["GET","DELETE","HEAD"].includes(s))return n;if("PUT"===s){const i=L(t,e.resource);return{request:Object.assign(Object.assign({},n.request),{ifMatch:e.ifMatch}),resource:i}}if("PATCH"===s){if("resource"in e){let i=e.resource;const s=i.data;if(s){const e=J(t,JSON.parse(function(e){const t=globalThis.atob(e),i=new Uint8Array(t.length);for(let s=0;s<t.length;s++)i[s]=t.charCodeAt(s);return(new globalThis.TextDecoder).decode(i)}(s)));i=Object.assign(Object.assign({},i),{data:M(JSON.stringify(e))})}return{request:Object.assign(Object.assign({},n.request),{ifMatch:e.ifMatch}),resource:i}}const i=J(t,e.operations),s=M(JSON.stringify(i));return Object.assign(Object.assign({},n),{resource:{resourceType:"Binary",contentType:"application/json-patch+json",data:s}})}if("POST"===s&&Y(r))return n;if("POST"===s&&"resource"in e){const i=L(t,e.resource),{fullUrl:s}=e;return Object.assign(Object.assign({},n),{resource:i,fullUrl:s})}throw new Error("Unrecognized method")}function te(e,t){return s(this,void 0,void 0,(function*(){var s;const r=yield this.fhirRequest("/","POST")({resourceType:"Bundle",type:"batch",entry:e.requests.map((e=>ee(e,this.config)))},t),n=r.entry,o=this.config.workspaceTag||(null===(s=this.config.ignoreTags)||void 0===s?void 0:s.length)?null==n?void 0:n.map(((t,s)=>{const r=e.requests[s];if(!r||!(null==t?void 0:t.resource))return t;if(("GET"===r.method||"HEAD"===r.method)&&!Q(r.url))try{G(this.config,t.resource)}catch(n){if(!(n instanceof i))throw n;return{request:t.request,response:{status:"404",outcome:n.cause}}}return t})):n,u=Object.assign(Object.assign({},r),{entry:o,unbundle:function(){var e,t;return null!==(t=null===(e=this.entry)||void 0===e?void 0:e.map((e=>e.resource)).filter((e=>void 0!==e)))&&void 0!==t?t:[]},errors:function(){var e;return null===(e=this.entry)||void 0===e?void 0:e.filter((e=>{var t,i,s,r;return(null===(i=null===(t=e.response)||void 0===t?void 0:t.status)||void 0===i?void 0:i.startsWith("4"))||(null===(r=null===(s=e.response)||void 0===s?void 0:s.status)||void 0===r?void 0:r.startsWith("5"))})).map((e=>{var t;return null===(t=e.response)||void 0===t?void 0:t.outcome})).filter((e=>void 0!==e))}});return u}))}function ie(e,t){return s(this,void 0,void 0,(function*(){var i,s;const r=yield this.fhirRequest("/","POST")({resourceType:"Bundle",type:"transaction",entry:e.requests.map((e=>ee(e,this.config)))},t);(this.config.workspaceTag||(null===(i=this.config.ignoreTags)||void 0===i?void 0:i.length))&&(null===(s=r.entry)||void 0===s||s.forEach(((t,i)=>{const s=e.requests[i];s&&(null==t?void 0:t.resource)&&("GET"!==s.method&&"HEAD"!==s.method||Q(s.url)||G(this.config,t.resource))})));const n=Object.assign(Object.assign({},r),{entry:r.entry,unbundle:function(){var e,t;return null!==(t=null===(e=this.entry)||void 0===e?void 0:e.map((e=>e.resource)).filter((e=>void 0!==e)))&&void 0!==t?t:[]}});return n}))}function se(e,t){const i=[];if(e.line&&i.push(...e.line),e.city||e.state||e.postalCode){const t=[];e.city&&t.push(e.city),e.state&&t.push(e.state),e.postalCode&&t.push(e.postalCode),i.push(t.join(", "))}return e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&i.push("["+e.use+"]"),i.join((null==t?void 0:t.lineSeparator)||", ").trim()}function re(e,t){const i=[];return e.prefix&&!1!==(null==t?void 0:t.prefix)&&i.push(...e.prefix),e.given&&i.push(...e.given),e.family&&i.push(e.family),e.suffix&&!1!==(null==t?void 0:t.suffix)&&i.push(...e.suffix),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&i.push("["+e.use+"]"),i.join(" ").trim()}var ne,oe,ue,ae,ce,de,he,le,pe,ve,me,fe,ge,be,ye,qe,we,je,Te,Oe,ke,Se,Ie,Ue,Ee,xe,ze,Ae,Pe,Re,Ne,_e,$e;class We extends p{constructor(e){super(e),ne.add(this),this.search=H,this.create=V,this.get=B,this.update=F,this.patch=X,this.delete=Z,this.history=K,this.batch=te,this.transaction=ie,this.formatAddress=se,this.formatHumanName=re}}ne=new WeakSet;class Me extends p{constructor(e){super(e),oe.add(this)}routeList(e){return this.request("/route","get",r(this,oe,"m",ue).bind(this))(e)}routeCreate(e,t){return this.request("/route","post",r(this,oe,"m",ue).bind(this))(e,t)}routeGet(e,t){return this.request("/route/{routeGuid}","get",r(this,oe,"m",ue).bind(this))(e,t)}routeDelete(e,t){return this.request("/route/{routeGuid}","delete",r(this,oe,"m",ue).bind(this))(e,t)}orderableItemList(e,t){return this.request("/orderableItem","get",r(this,oe,"m",ue).bind(this))(e,t)}orderableItemQuestionnaireGet(e,t){return this.request("/canonical-questionnaire/lab/{labGuid}/compendium/{compendiumVersion}/item/{itemCode}/questionnaire","get",r(this,oe,"m",ue).bind(this))(e,t)}orderSubmit(e,t){return this.request("/submit","post",r(this,oe,"m",ue).bind(this))(e,t)}}oe=new WeakSet,ue=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.labApiUrl)&&void 0!==t?t:"https://labs-api.zapehr.com/v1"};class Ce extends p{constructor(e){super(e),ae.add(this)}list(e){return this.request("/m2m","get",r(this,ae,"m",ce).bind(this))(e)}create(e,t){return this.request("/m2m","post",r(this,ae,"m",ce).bind(this))(e,t)}me(e){return this.request("/m2m/me","get",r(this,ae,"m",ce).bind(this))(e)}get(e,t){return this.request("/m2m/{id}","get",r(this,ae,"m",ce).bind(this))(e,t)}update(e,t){return this.request("/m2m/{id}","patch",r(this,ae,"m",ce).bind(this))(e,t)}delete(e,t){return this.request("/m2m/{id}","delete",r(this,ae,"m",ce).bind(this))(e,t)}rotateSecret(e,t){return this.request("/m2m/{id}/rotate-secret","post",r(this,ae,"m",ce).bind(this))(e,t)}listV2(e,t){return this.request("/m2m/v2/list","get",r(this,ae,"m",ce).bind(this))(e,t)}}ae=new WeakSet,ce=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class De extends p{constructor(e){super(e),de.add(this)}getMessagingConfig(e){return this.request("/messaging/config","get",r(this,de,"m",he).bind(this))(e)}}de=new WeakSet,he=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Le extends p{constructor(e){super(e),le.add(this)}setUp(e,t){return this.request("/payment/payment-method/setup","post",r(this,le,"m",pe).bind(this))(e,t)}setDefault(e,t){return this.request("/payment/payment-method/set-default","post",r(this,le,"m",pe).bind(this))(e,t)}delete(e,t){return this.request("/payment/payment-method","delete",r(this,le,"m",pe).bind(this))(e,t)}list(e,t){return this.request("/payment/payment-method/list","post",r(this,le,"m",pe).bind(this))(e,t)}}le=new WeakSet,pe=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Je extends p{constructor(e){super(e),ve.add(this)}get(e){return this.request("/project","get",r(this,ve,"m",me).bind(this))(e)}update(e,t){return this.request("/project","patch",r(this,ve,"m",me).bind(this))(e,t)}}ve=new WeakSet,me=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Ge extends p{constructor(e){super(e),fe.add(this)}eligibilityCheck(e,t){return this.request("/eligibility-check","post",r(this,fe,"m",ge).bind(this))(e,t)}submitClaim(e,t){return this.request("/claim/{claimId}/submit","post",r(this,fe,"m",ge).bind(this))(e,t)}setClaimStatus(e,t){return this.request("/claim/{claimId}/status","post",r(this,fe,"m",ge).bind(this))(e,t)}listPayers(e,t){return this.request("/payer","get",r(this,fe,"m",ge).bind(this))(e,t)}getPayer(e,t){return this.request("/payer/{id}","get",r(this,fe,"m",ge).bind(this))(e,t)}}fe=new WeakSet,ge=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.rcmApiUrl)&&void 0!==t?t:"https://rcm-api.zapehr.com/v1"};class He extends p{constructor(e){super(e),be.add(this)}list(e){return this.request("/iam/role","get",r(this,be,"m",ye).bind(this))(e)}create(e,t){return this.request("/iam/role","post",r(this,be,"m",ye).bind(this))(e,t)}get(e,t){return this.request("/iam/role/{roleId}","get",r(this,be,"m",ye).bind(this))(e,t)}update(e,t){return this.request("/iam/role/{roleId}","patch",r(this,be,"m",ye).bind(this))(e,t)}delete(e,t){return this.request("/iam/role/{roleId}","delete",r(this,be,"m",ye).bind(this))(e,t)}}be=new WeakSet,ye=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Ve extends p{constructor(e){super(e),qe.add(this)}list(e){return this.request("/secret","get",r(this,qe,"m",we).bind(this))(e)}set(e,t){return this.request("/secret","post",r(this,qe,"m",we).bind(this))(e,t)}get(e,t){return this.request("/secret/{name}","get",r(this,qe,"m",we).bind(this))(e,t)}delete(e,t){return this.request("/secret/{name}","delete",r(this,qe,"m",we).bind(this))(e,t)}}qe=new WeakSet,we=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Be extends p{constructor(e){super(e),je.add(this)}createMeeting(e,t){return this.request("/telemed/v2/meeting","post",r(this,je,"m",Te).bind(this))(e,t)}joinMeeting(e,t){return this.request("/telemed/v2/meeting/{encounterId}/join","get",r(this,je,"m",Te).bind(this))(e,t)}}je=new WeakSet,Te=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Fe extends p{constructor(e){super(e),Oe.add(this)}searchCpt(e,t){return this.request("/cpt/search","get",r(this,Oe,"m",ke).bind(this))(e,t)}searchHcpcs(e,t){return this.request("/hcpcs/search","get",r(this,Oe,"m",ke).bind(this))(e,t)}}Oe=new WeakSet,ke=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.terminologyApiUrl)&&void 0!==t?t:"https://terminology-api.zapehr.com/v1"};class Xe extends p{constructor(e){super(e),Se.add(this)}send(e,t){return this.request("/messaging/transactional-sms/send","post",r(this,Se,"m",Ie).bind(this))(e,t)}}Se=new WeakSet,Ie=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Ze extends p{constructor(e){super(e),Ue.add(this)}me(e){return this.request("/user/me","get",r(this,Ue,"m",Ee).bind(this))(e)}get(e,t){return this.request("/user/{id}","get",r(this,Ue,"m",Ee).bind(this))(e,t)}update(e,t){return this.request("/user/{id}","patch",r(this,Ue,"m",Ee).bind(this))(e,t)}delete(e,t){return this.request("/user/{id}","delete",r(this,Ue,"m",Ee).bind(this))(e,t)}resetMfa(e,t){return this.request("/user/{id}/reset-mfa","post",r(this,Ue,"m",Ee).bind(this))(e,t)}resetPasswordLink(e,t){return this.request("/user/{id}/reset-password-link","post",r(this,Ue,"m",Ee).bind(this))(e,t)}changePassword(e,t){return this.request("/user/{id}/change-password","post",r(this,Ue,"m",Ee).bind(this))(e,t)}invite(e,t){return this.request("/user/invite","post",r(this,Ue,"m",Ee).bind(this))(e,t)}list(e){return this.request("/user","get",r(this,Ue,"m",Ee).bind(this))(e)}listV2(e,t){return this.request("/user/v2/list","get",r(this,Ue,"m",Ee).bind(this))(e,t)}}Ue=new WeakSet,Ee=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class Ke extends p{constructor(e){super(e),xe.add(this)}get(e){return this.request("/version","get",r(this,xe,"m",ze).bind(this))(e)}}function Qe(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"}function Ye(e){return s(this,arguments,void 0,(function*({bucketName:e,"objectPath+":t,file:i}){const s=yield this.request("/z3/{bucketName}/{objectPath+}","post",Qe.bind(this))({action:"upload",bucketName:e,"objectPath+":t});yield fetch(s.signedUrl,{method:"PUT",body:i})}))}function et(e){return s(this,arguments,void 0,(function*({bucketName:e,"objectPath+":t}){const i=yield this.request("/z3/{bucketName}/{objectPath+}","post",Qe.bind(this))({action:"download",bucketName:e,"objectPath+":t}),s=yield fetch(i.signedUrl,{method:"GET"});if(!s.ok)throw new Error("Failed to download file");return s.arrayBuffer()}))}function tt(t){return s(this,void 0,void 0,(function*(){var i,s;let r,n;const o=new URL(t.url);if("z3:"===o.protocol){const e=o.pathname.split("/").slice(1);r=o.hostname,n=e.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 e({message:"Invalid Z3 URL",code:400});{const e=o.pathname.split("/").slice(3);r=e[0],n=e.slice(1).join("/")}}const u={action:"upload",bucketName:r,"objectPath+":n};return this.request("/z3/{bucketName}/{objectPath+}","post",Qe.bind(this))(u)}))}xe=new WeakSet,ze=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class it extends p{constructor(e){super(e),Ae.add(this),this.uploadFile=Ye,this.downloadFile=et,this.getPresignedUrlForZ3Url=tt}listBuckets(e){return this.request("/z3","get",r(this,Ae,"m",Pe).bind(this))(e)}createBucket(e,t){return this.request("/z3/{bucketName}","put",r(this,Ae,"m",Pe).bind(this))(e,t)}deleteBucket(e,t){return this.request("/z3/{bucketName}","delete",r(this,Ae,"m",Pe).bind(this))(e,t)}listObjects(e,t){return this.request("/z3/{bucketName}/{objectPath+}","get",r(this,Ae,"m",Pe).bind(this))(e,t)}getPresignedUrl(e,t){return this.request("/z3/{bucketName}/{objectPath+}","post",r(this,Ae,"m",Pe).bind(this))(e,t)}deleteObject(e,t){return this.request("/z3/{bucketName}/{objectPath+}","delete",r(this,Ae,"m",Pe).bind(this))(e,t)}}function st(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"}function rt(e){return s(this,arguments,void 0,(function*({id:e,file:t,filename:i}){const s=yield this.request("/zambda/{id}/s3-upload","post",st.bind(this))({id:e,filename:i});yield fetch(s.signedUrl,{method:"PUT",body:t})}))}Ae=new WeakSet,Pe=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.projectApiUrl)&&void 0!==t?t:"https://project-api.zapehr.com/v1"};class nt extends p{constructor(e){super(e),Re.add(this),this.uploadFile=rt}list(e){return this.request("/zambda","get",r(this,Re,"m",Ne).bind(this))(e)}create(e,t){return this.request("/zambda","post",r(this,Re,"m",Ne).bind(this))(e,t)}get(e,t){return this.request("/zambda/{id}","get",r(this,Re,"m",Ne).bind(this))(e,t)}update(e,t){return this.request("/zambda/{id}","patch",r(this,Re,"m",Ne).bind(this))(e,t)}delete(e,t){return this.request("/zambda/{id}","delete",r(this,Re,"m",Ne).bind(this))(e,t)}execute(e,t){return this.request("/zambda/{id}/execute","post",r(this,Re,"m",Ne).bind(this))(e,t)}executePublic(e,t){return this.request("/zambda/{id}/execute-public","post",r(this,Re,"m",Ne).bind(this))(e,t)}s3Upload(e,t){return this.request("/zambda/{id}/s3-upload","post",r(this,Re,"m",Ne).bind(this))(e,t)}}Re=new WeakSet,Ne=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.zambdaApiUrl)&&void 0!==t?t:"https://zambda-api.zapehr.com/v1"};class ot extends p{constructor(e){super(e),_e.add(this)}list(e,t){return this.request("/zambda/{id}/logStream","post",r(this,_e,"m",$e).bind(this))(e,t)}search(e,t){return this.request("/zambda/{id}/logStream/search","post",r(this,_e,"m",$e).bind(this))(e,t)}get(e,t){return this.request("/zambda/{id}/logStream/{logStreamName}","post",r(this,_e,"m",$e).bind(this))(e,t)}}_e=new WeakSet,$e=function(){var e,t;return null!==(t=null===(e=this.config.services)||void 0===e?void 0:e.zambdaApiUrl)&&void 0!==t?t:"https://zambda-api.zapehr.com/v1"};let ut=class{constructor(t){var i,s,r,n,o,u;if(t.workspaceTag&&t.ignoreTags)throw new e({message:"workspaceTag and ignoreTags are mutually exclusive and cannot both be set in config",code:400});this.config=t,null!==(i=(n=this.config).services)&&void 0!==i||(n.services={}),null!==(s=(o=this.config.services).projectApiUrl)&&void 0!==s||(o.projectApiUrl=t.projectApiUrl),null!==(r=(u=this.config.services).fhirApiUrl)&&void 0!==r||(u.fhirApiUrl=t.fhirApiUrl),this.application=new w(t),this.developer=new N(t),this.m2m=new Ce(t),this.messaging=new De(t),this.conversation=new R(t),this.transactionalSMS=new Xe(t),this.paymentMethod=new Le(t),this.charge=new j(t),this.project=new Je(t),this.role=new He(t),this.secret=new Ve(t),this.telemed=new Be(t),this.user=new Ze(t),this.version=new Ke(t),this.z3=new it(t),this.fax=new $(t),this.lab=new Me(t),this.erx=new _(t),this.terminology=new Fe(t),this.zambda=new nt(t),this.zambdaLogStream=new ot(t),this.rcm=new Ge(t),this.fhir=new We(t)}};class at extends ut{}at.OystehrFHIRError=i,at.OystehrSdkError=e,exports.default=at;
2
2
  //# sourceMappingURL=index.min.cjs.map