@oystehr/sdk 3.0.4 → 3.0.6

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 (162) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/config.d.ts +8 -0
  3. package/dist/cjs/index.cjs +856 -642
  4. package/dist/cjs/index.cjs.map +1 -1
  5. package/dist/cjs/index.min.cjs +1 -1
  6. package/dist/cjs/index.min.cjs.map +1 -1
  7. package/dist/cjs/resources/classes/application.d.ts +8 -8
  8. package/dist/cjs/resources/classes/charge.d.ts +2 -2
  9. package/dist/cjs/resources/classes/conversation.d.ts +5 -5
  10. package/dist/cjs/resources/classes/developer.d.ts +6 -6
  11. package/dist/cjs/resources/classes/erx.d.ts +13 -5
  12. package/dist/cjs/resources/classes/fax.d.ts +30 -0
  13. package/dist/cjs/resources/classes/index.d.ts +2 -0
  14. package/dist/cjs/resources/classes/m2m.d.ts +7 -7
  15. package/dist/cjs/resources/classes/messaging.d.ts +1 -1
  16. package/dist/cjs/resources/classes/paymentMethod.d.ts +4 -4
  17. package/dist/cjs/resources/classes/project.d.ts +2 -2
  18. package/dist/cjs/resources/classes/rcm.d.ts +4 -4
  19. package/dist/cjs/resources/classes/role.d.ts +5 -5
  20. package/dist/cjs/resources/classes/secret.d.ts +4 -4
  21. package/dist/cjs/resources/classes/telemed.d.ts +2 -2
  22. package/dist/cjs/resources/classes/transactionalSMS.d.ts +1 -1
  23. package/dist/cjs/resources/classes/user.d.ts +7 -7
  24. package/dist/cjs/resources/classes/version.d.ts +1 -1
  25. package/dist/cjs/resources/classes/z3.d.ts +7 -7
  26. package/dist/cjs/resources/classes/zambda.d.ts +8 -8
  27. package/dist/cjs/resources/classes/zambdaLogStream.d.ts +3 -3
  28. package/dist/cjs/resources/types/ConversationAddParticipantParams.d.ts +1 -1
  29. package/dist/cjs/resources/types/ConversationCreateResponse.d.ts +1 -1
  30. package/dist/cjs/resources/types/ConversationRemoveParticipantParams.d.ts +1 -1
  31. package/dist/cjs/resources/types/ErxCancelOrderParams.d.ts +6 -0
  32. package/dist/cjs/resources/types/ErxCancelOrderResponse.d.ts +6 -0
  33. package/dist/cjs/resources/types/ErxCancelPrescriptionParams.d.ts +6 -0
  34. package/dist/cjs/resources/types/ErxCancelPrescriptionResponse.d.ts +6 -0
  35. package/dist/cjs/resources/types/FaxSendParams.d.ts +18 -0
  36. package/dist/cjs/resources/types/FaxSendResponse.d.ts +10 -0
  37. package/dist/cjs/resources/types/TelemedCreateMeetingParams.d.ts +1 -1
  38. package/dist/cjs/resources/types/TelemedCreateMeetingResponse.d.ts +1 -1
  39. package/dist/cjs/resources/types/index.d.ts +6 -0
  40. package/dist/cjs/tests/setup/constants.d.ts +1 -1
  41. package/dist/esm/client/client.js +14 -11
  42. package/dist/esm/client/client.js.map +1 -1
  43. package/dist/esm/config.d.ts +8 -0
  44. package/dist/esm/index.min.js +1 -1
  45. package/dist/esm/index.min.js.map +1 -1
  46. package/dist/esm/resources/classes/application.d.ts +8 -8
  47. package/dist/esm/resources/classes/application.js +72 -56
  48. package/dist/esm/resources/classes/application.js.map +1 -1
  49. package/dist/esm/resources/classes/charge.d.ts +2 -2
  50. package/dist/esm/resources/classes/charge.js +28 -24
  51. package/dist/esm/resources/classes/charge.js.map +1 -1
  52. package/dist/esm/resources/classes/conversation.d.ts +5 -5
  53. package/dist/esm/resources/classes/conversation.js +59 -49
  54. package/dist/esm/resources/classes/conversation.js.map +1 -1
  55. package/dist/esm/resources/classes/developer.d.ts +6 -6
  56. package/dist/esm/resources/classes/developer.js +56 -44
  57. package/dist/esm/resources/classes/developer.js.map +1 -1
  58. package/dist/esm/resources/classes/erx.d.ts +13 -5
  59. package/dist/esm/resources/classes/erx.js +36 -16
  60. package/dist/esm/resources/classes/erx.js.map +1 -1
  61. package/dist/esm/resources/classes/fax.d.ts +30 -0
  62. package/dist/esm/resources/classes/fax.js +41 -0
  63. package/dist/esm/resources/classes/fax.js.map +1 -0
  64. package/dist/esm/resources/classes/fhir-ext.js +3 -0
  65. package/dist/esm/resources/classes/fhir-ext.js.map +1 -1
  66. package/dist/esm/resources/classes/index.d.ts +2 -0
  67. package/dist/esm/resources/classes/index.js +2 -0
  68. package/dist/esm/resources/classes/index.js.map +1 -1
  69. package/dist/esm/resources/classes/m2m.d.ts +7 -7
  70. package/dist/esm/resources/classes/m2m.js +65 -51
  71. package/dist/esm/resources/classes/m2m.js.map +1 -1
  72. package/dist/esm/resources/classes/messaging.d.ts +1 -1
  73. package/dist/esm/resources/classes/messaging.js +6 -4
  74. package/dist/esm/resources/classes/messaging.js.map +1 -1
  75. package/dist/esm/resources/classes/paymentMethod.d.ts +4 -4
  76. package/dist/esm/resources/classes/paymentMethod.js +72 -64
  77. package/dist/esm/resources/classes/paymentMethod.js.map +1 -1
  78. package/dist/esm/resources/classes/project.d.ts +2 -2
  79. package/dist/esm/resources/classes/project.js +18 -14
  80. package/dist/esm/resources/classes/project.js.map +1 -1
  81. package/dist/esm/resources/classes/rcm.d.ts +4 -4
  82. package/dist/esm/resources/classes/rcm.js +39 -33
  83. package/dist/esm/resources/classes/rcm.js.map +1 -1
  84. package/dist/esm/resources/classes/role.d.ts +5 -5
  85. package/dist/esm/resources/classes/role.js +46 -36
  86. package/dist/esm/resources/classes/role.js.map +1 -1
  87. package/dist/esm/resources/classes/secret.d.ts +4 -4
  88. package/dist/esm/resources/classes/secret.js +36 -28
  89. package/dist/esm/resources/classes/secret.js.map +1 -1
  90. package/dist/esm/resources/classes/telemed.d.ts +2 -2
  91. package/dist/esm/resources/classes/telemed.js +27 -23
  92. package/dist/esm/resources/classes/telemed.js.map +1 -1
  93. package/dist/esm/resources/classes/transactionalSMS.d.ts +1 -1
  94. package/dist/esm/resources/classes/transactionalSMS.js +18 -16
  95. package/dist/esm/resources/classes/transactionalSMS.js.map +1 -1
  96. package/dist/esm/resources/classes/user.d.ts +7 -7
  97. package/dist/esm/resources/classes/user.js +64 -50
  98. package/dist/esm/resources/classes/user.js.map +1 -1
  99. package/dist/esm/resources/classes/version.d.ts +1 -1
  100. package/dist/esm/resources/classes/version.js +6 -4
  101. package/dist/esm/resources/classes/version.js.map +1 -1
  102. package/dist/esm/resources/classes/z3.d.ts +7 -7
  103. package/dist/esm/resources/classes/z3.js +55 -43
  104. package/dist/esm/resources/classes/z3.js.map +1 -1
  105. package/dist/esm/resources/classes/zambda.d.ts +8 -8
  106. package/dist/esm/resources/classes/zambda.js +71 -55
  107. package/dist/esm/resources/classes/zambda.js.map +1 -1
  108. package/dist/esm/resources/classes/zambdaLogStream.d.ts +3 -3
  109. package/dist/esm/resources/classes/zambdaLogStream.js +27 -21
  110. package/dist/esm/resources/classes/zambdaLogStream.js.map +1 -1
  111. package/dist/esm/resources/types/ConversationAddParticipantParams.d.ts +1 -1
  112. package/dist/esm/resources/types/ConversationCreateResponse.d.ts +1 -1
  113. package/dist/esm/resources/types/ConversationRemoveParticipantParams.d.ts +1 -1
  114. package/dist/esm/resources/types/ErxCancelOrderParams.d.ts +6 -0
  115. package/dist/esm/resources/types/ErxCancelOrderResponse.d.ts +6 -0
  116. package/dist/esm/resources/types/ErxCancelPrescriptionParams.d.ts +6 -0
  117. package/dist/esm/resources/types/ErxCancelPrescriptionResponse.d.ts +6 -0
  118. package/dist/esm/resources/types/FaxSendParams.d.ts +18 -0
  119. package/dist/esm/resources/types/FaxSendResponse.d.ts +10 -0
  120. package/dist/esm/resources/types/TelemedCreateMeetingParams.d.ts +1 -1
  121. package/dist/esm/resources/types/TelemedCreateMeetingResponse.d.ts +1 -1
  122. package/dist/esm/resources/types/index.d.ts +6 -0
  123. package/dist/esm/tests/setup/constants.d.ts +1 -1
  124. package/package.json +4 -4
  125. package/src/client/client.ts +8 -3
  126. package/src/config.ts +8 -0
  127. package/src/resources/classes/application.ts +27 -19
  128. package/src/resources/classes/charge.ts +6 -4
  129. package/src/resources/classes/conversation.ts +15 -10
  130. package/src/resources/classes/developer.ts +18 -11
  131. package/src/resources/classes/erx.ts +33 -8
  132. package/src/resources/classes/fax.ts +41 -0
  133. package/src/resources/classes/fhir-ext.ts +3 -0
  134. package/src/resources/classes/index.ts +3 -0
  135. package/src/resources/classes/m2m.ts +21 -13
  136. package/src/resources/classes/messaging.ts +3 -2
  137. package/src/resources/classes/paymentMethod.ts +12 -8
  138. package/src/resources/classes/project.ts +6 -3
  139. package/src/resources/classes/rcm.ts +13 -9
  140. package/src/resources/classes/role.ts +15 -9
  141. package/src/resources/classes/secret.ts +12 -7
  142. package/src/resources/classes/telemed.ts +7 -7
  143. package/src/resources/classes/transactionalSMS.ts +3 -2
  144. package/src/resources/classes/user.ts +21 -12
  145. package/src/resources/classes/version.ts +3 -1
  146. package/src/resources/classes/z3.ts +19 -14
  147. package/src/resources/classes/zambda.ts +25 -15
  148. package/src/resources/classes/zambdaLogStream.ts +9 -8
  149. package/src/resources/types/ConversationAddParticipantParams.ts +1 -1
  150. package/src/resources/types/ConversationCreateResponse.ts +1 -1
  151. package/src/resources/types/ConversationRemoveParticipantParams.ts +1 -1
  152. package/src/resources/types/ErxCancelOrderParams.ts +8 -0
  153. package/src/resources/types/ErxCancelOrderResponse.ts +8 -0
  154. package/src/resources/types/ErxCancelPrescriptionParams.ts +8 -0
  155. package/src/resources/types/ErxCancelPrescriptionResponse.ts +8 -0
  156. package/src/resources/types/FaxSendParams.ts +20 -0
  157. package/src/resources/types/FaxSendResponse.ts +12 -0
  158. package/src/resources/types/TelemedCreateMeetingParams.ts +1 -1
  159. package/src/resources/types/TelemedCreateMeetingResponse.ts +1 -1
  160. package/src/resources/types/index.ts +6 -0
  161. /package/dist/cjs/tests/{common.d.ts → integrational/common.d.ts} +0 -0
  162. /package/dist/esm/tests/{common.d.ts → integrational/common.d.ts} +0 -0
@@ -11,53 +11,53 @@ export declare class Zambda extends SDKResource {
11
11
  * Access Policy Action: `Zambda:ListAllFunctions`
12
12
  * Access Policy Resource: `Zambda:Function`
13
13
  */
14
- list: (request?: OystehrClientRequest) => Promise<ZambdaListResponse>;
14
+ list(request?: OystehrClientRequest): Promise<ZambdaListResponse>;
15
15
  /**
16
16
  * Create a new Zambda Function. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
17
17
  *
18
18
  * Access Policy Action: `Zambda:CreateFunction`
19
19
  * Access Policy Resource: `Zambda:Function`
20
20
  */
21
- create: (params: ZambdaCreateParams, request?: OystehrClientRequest) => Promise<ZambdaCreateResponse>;
21
+ create(params: ZambdaCreateParams, request?: OystehrClientRequest): Promise<ZambdaCreateResponse>;
22
22
  /**
23
23
  * Get the Zambda Function with the provided ID or name. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
24
24
  *
25
25
  * Access Policy Action: `Zambda:GetFunction`
26
26
  * Access Policy Resource: `Zambda:Function`
27
27
  */
28
- get: (params: ZambdaGetParams, request?: OystehrClientRequest) => Promise<ZambdaGetResponse>;
28
+ get(params: ZambdaGetParams, request?: OystehrClientRequest): Promise<ZambdaGetResponse>;
29
29
  /**
30
30
  * Update the Zambda Function with the provided ID or name. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
31
31
  *
32
32
  * Access Policy Action: `Zambda:UpdateFunction`
33
33
  * Access Policy Resource: `Zambda:Function`
34
34
  */
35
- update: (params: ZambdaUpdateParams, request?: OystehrClientRequest) => Promise<ZambdaUpdateResponse>;
35
+ update(params: ZambdaUpdateParams, request?: OystehrClientRequest): Promise<ZambdaUpdateResponse>;
36
36
  /**
37
37
  * Delete the Zambda Function with the provided ID or name. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
38
38
  *
39
39
  * Access Policy Action: `Zambda:DeleteFunction`
40
40
  * Access Policy Resource: `Zambda:Function`
41
41
  */
42
- delete: (params: ZambdaDeleteParams, request?: OystehrClientRequest) => Promise<void>;
42
+ delete(params: ZambdaDeleteParams, request?: OystehrClientRequest): Promise<void>;
43
43
  /**
44
44
  * Execute the [Authenticated Zambda Function](https://docs.oystehr.com/services/zambda/types/authenticated/) with the provided ID. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
45
45
  *
46
46
  * Access Policy Action: `Zambda:InvokeFunction`
47
47
  * Access Policy Resource: `Zambda:Function`
48
48
  */
49
- execute: (params: ZambdaExecuteParams, request?: OystehrClientRequest) => Promise<ZambdaExecuteResponse>;
49
+ execute(params: ZambdaExecuteParams, request?: OystehrClientRequest): Promise<ZambdaExecuteResponse>;
50
50
  /**
51
51
  * Execute the [Public Zambda Function](https://docs.oystehr.com/services/zambda/types/public/) with the provided ID. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
52
52
  *
53
53
  * Execute a zambda that has method http_open. This endpoint is public so there are no access policy requirements.
54
54
  */
55
- executePublic: (params: ZambdaExecutePublicParams, request?: OystehrClientRequest) => Promise<ZambdaExecutePublicResponse>;
55
+ executePublic(params: ZambdaExecutePublicParams, request?: OystehrClientRequest): Promise<ZambdaExecutePublicResponse>;
56
56
  /**
57
57
  * Returns a URL that is used to deploy code to the Zambda Function with the provided ID. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
58
58
  *
59
59
  * Access Policy Action: `Zambda:UpdateFunction`
60
60
  * Access Policy Resource: `Zambda:Function`
61
61
  */
62
- s3Upload: (params: ZambdaS3UploadParams, request?: OystehrClientRequest) => Promise<ZambdaS3UploadResponse>;
62
+ s3Upload(params: ZambdaS3UploadParams, request?: OystehrClientRequest): Promise<ZambdaS3UploadResponse>;
63
63
  }
@@ -9,19 +9,19 @@ export declare class ZambdaLogStream extends SDKResource {
9
9
  * Access Policy Action: `Zambda:ReadLogs`
10
10
  * Access Policy Resource: `Zambda:Function`
11
11
  */
12
- list: (params: ZambdaLogStreamListParams, request?: OystehrClientRequest) => Promise<ZambdaLogStreamListResponse>;
12
+ list(params: ZambdaLogStreamListParams, request?: OystehrClientRequest): Promise<ZambdaLogStreamListResponse>;
13
13
  /**
14
14
  * Get all logs for the Zambda Function with the provided ID, filtered by any of: text in messages, minimum start date, and/or maximum end date. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
15
15
  *
16
16
  * Access Policy Action: `Zambda:ReadLogs`
17
17
  * Access Policy Resource: `Zambda:Function`
18
18
  */
19
- search: (params: ZambdaLogStreamSearchParams, request?: OystehrClientRequest) => Promise<ZambdaLogStreamSearchResponse>;
19
+ search(params: ZambdaLogStreamSearchParams, request?: OystehrClientRequest): Promise<ZambdaLogStreamSearchResponse>;
20
20
  /**
21
21
  * Get the logs from the specified log stream for the Zambda Function with the provided ID. [Zambdas](https://docs.oystehr.com/services/zambda/) are functions that can be used to execute your code. They can be used to process data received from Oystehr's APIs or to perform operations on third-party services.
22
22
  *
23
23
  * Access Policy Action: `Zambda:ReadLogs`
24
24
  * Access Policy Resource: `Zambda:Function`
25
25
  */
26
- get: (params: ZambdaLogStreamGetParams, request?: OystehrClientRequest) => Promise<ZambdaLogStreamGetResponse>;
26
+ get(params: ZambdaLogStreamGetParams, request?: OystehrClientRequest): Promise<ZambdaLogStreamGetResponse>;
27
27
  }
@@ -1,6 +1,6 @@
1
1
  export interface ConversationAddParticipantParams {
2
2
  /**
3
- * A valid FHIR Encounter relative reference in the format: `Encounter/some-uuid`. This reference must be a valid Encounter in the FHIR store which has the https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release extension from being created by `POST /message/conversation`.
3
+ * A valid FHIR Encounter relative reference in the format: `Encounter/some-uuid`. This reference must be a valid Encounter in the FHIR store which has the https://extensions.fhir.oystehr.com/encounter-virtual-service-pre-release extension from being created by `POST /message/conversation`.
4
4
  */
5
5
  encounterReference: string;
6
6
  participants: {
@@ -4,7 +4,7 @@ import { Encounter } from 'fhir/r4b';
4
4
  */
5
5
  export interface ConversationCreateResponse {
6
6
  /**
7
- * The FHIR Encounter resource that represents the Conversation in the FHIR Store modified to include the https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release extension which holds the Twilio Conversation SID.
7
+ * The FHIR Encounter resource that represents the Conversation in the FHIR Store modified to include the https://extensions.fhir.oystehr.com/encounter-virtual-service-pre-release extension which holds the Twilio Conversation SID.
8
8
  */
9
9
  encounter: Encounter;
10
10
  }
@@ -1,6 +1,6 @@
1
1
  export interface ConversationRemoveParticipantParams {
2
2
  /**
3
- * A valid FHIR Encounter relative reference in the format: `Encounter/some-uuid`. This reference must be a valid Encounter in the FHIR store which has the https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release extension from being created by `POST /message/conversation`.
3
+ * A valid FHIR Encounter relative reference in the format: `Encounter/some-uuid`. This reference must be a valid Encounter in the FHIR store which has the https://extensions.fhir.oystehr.com/encounter-virtual-service-pre-release extension from being created by `POST /message/conversation`.
4
4
  */
5
5
  encounterReference: string;
6
6
  /**
@@ -0,0 +1,6 @@
1
+ export interface ErxCancelOrderParams {
2
+ /**
3
+ * A photon id of the order to cancel.
4
+ */
5
+ orderId: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Cancelled order
3
+ */
4
+ export interface ErxCancelOrderResponse {
5
+ orderId: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ export interface ErxCancelPrescriptionParams {
2
+ /**
3
+ * A photon id of the prescription to cancel.
4
+ */
5
+ prescriptionId: string;
6
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Cancelled prescription
3
+ */
4
+ export interface ErxCancelPrescriptionResponse {
5
+ prescriptionId: string;
6
+ }
@@ -0,0 +1,18 @@
1
+ export interface FaxSendParams {
2
+ /**
3
+ * A Z3 URL of the document you want to send. Your user must have access to this document.
4
+ */
5
+ media: string;
6
+ /**
7
+ * The quality of the document you want sent.
8
+ */
9
+ quality: 'standard' | 'fine' | 'superfine';
10
+ /**
11
+ * The recipient of the fax. This must be a valid FHIR CareTeam, HealthcareService, Organization, Patient, Practitioner, PractitionerRole, or RelatedPerson relative reference in the format: `the-resource-type/some-valid-uuid`. This reference must be a valid resource and have a number in the `telecom` field with a `system` of `fax`.
12
+ */
13
+ recipient: string;
14
+ /**
15
+ * The sender of the fax. This must be a valid FHIR HealthcareService, Organization, Patient, Practitioner, PractitionerRole, or RelatedPerson relative reference in the format: `the-resource-type/some-valid-uuid`. This reference must be a valid resource and have your [onboarded fax number](https://docs.oystehr.com/services/fax/number/) in the `telecom` field with a `system` of `fax`.
16
+ */
17
+ sender: string;
18
+ }
@@ -0,0 +1,10 @@
1
+ import { Communication } from 'fhir/r4b';
2
+ /**
3
+ * Successfully sent a fax.
4
+ */
5
+ export interface FaxSendResponse {
6
+ /**
7
+ * The FHIR Communication resource that represents the sent fax in the FHIR Store modified to include the https://extensions.fhir.oystehr.com/outbound-fax-status extension which holds the fax status that will be updated automatically.
8
+ */
9
+ communicationResource: Communication;
10
+ }
@@ -1,7 +1,7 @@
1
1
  import { Encounter } from 'fhir/r4b';
2
2
  export interface TelemedCreateMeetingParams {
3
3
  /**
4
- * Well formed Encounter with the https://extensions.fhir.zapehr.com/encounter-other-participants extension specified optionally.
4
+ * Well formed Encounter with the https://extensions.fhir.oystehr.com/encounter-other-participants extension specified optionally.
5
5
  */
6
6
  encounter?: Encounter;
7
7
  }
@@ -4,7 +4,7 @@ import { Encounter } from 'fhir/r4b';
4
4
  */
5
5
  export interface TelemedCreateMeetingResponse {
6
6
  /**
7
- * Returns well formed Encounter with video meeting information in the https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release extension.
7
+ * Returns well formed Encounter with video meeting information in the https://extensions.fhir.oystehr.com/encounter-virtual-service-pre-release extension.
8
8
  */
9
9
  encounter?: Encounter;
10
10
  }
@@ -95,10 +95,16 @@ export * from './ErxSyncPatientParams';
95
95
  export * from './ErxSyncPatientResponse';
96
96
  export * from './ErxAllergySearchParams';
97
97
  export * from './ErxAllergySearchResponse';
98
+ export * from './ErxCancelOrderParams';
99
+ export * from './ErxCancelOrderResponse';
100
+ export * from './ErxCancelPrescriptionParams';
101
+ export * from './ErxCancelPrescriptionResponse';
98
102
  export * from './ErxMedicationSearchParams';
99
103
  export * from './ErxMedicationSearchResponse';
100
104
  export * from './ErxMedicationSearchV2Params';
101
105
  export * from './ErxMedicationSearchV2Response';
106
+ export * from './FaxSendParams';
107
+ export * from './FaxSendResponse';
102
108
  export * from './RoleListResponse';
103
109
  export * from './RoleCreateParams';
104
110
  export * from './RoleCreateResponse';
@@ -3,7 +3,7 @@ export declare const projectId = "eb1306aa-fba5-416a-a2a4-6b69eca58d87";
3
3
  export declare const FHIR_API_URL = "http://localhost:3030/dev";
4
4
  export declare const PLATFORM_API_URL = "http://localhost:3031/dev";
5
5
  export declare const PROJECT_API_URL = "http://localhost:3032/dev";
6
- export declare const FHIR_VERSION: any;
6
+ export declare const FHIR_VERSION: import("@zapehr/core").FhirVersion;
7
7
  export declare const config: {
8
8
  accessToken: string;
9
9
  projectId: string;
@@ -62,7 +62,7 @@ function isInternalClientRequest(request) {
62
62
  }
63
63
  function fetcher(baseUrlThunk, configThunk, path, methodParam) {
64
64
  return (params, request) => __awaiter(this, void 0, void 0, function* () {
65
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
65
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
66
66
  // this function supports multiple signatures. fetcher(baseUrl, path, method)(params, request) or fetcher(baseUrl, path, method)(request)
67
67
  // or fetcher(baseUrl, path, method)(params) or fetcher(baseUrl, path, method)(). the types for this are handled by Client<Path, Methods>
68
68
  // 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
@@ -122,13 +122,15 @@ function fetcher(baseUrlThunk, configThunk, path, methodParam) {
122
122
  }, accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, (requestCtx === null || requestCtx === void 0 ? void 0 : requestCtx.ifMatch) ? { 'If-Match': requestCtx.ifMatch } : {}, { 'x-oystehr-request-id': (_f = requestCtx === null || requestCtx === void 0 ? void 0 : requestCtx.requestId) !== null && _f !== void 0 ? _f : v4() });
123
123
  const retryConfig = {
124
124
  retries: (_h = (_g = config.retry) === null || _g === void 0 ? void 0 : _g.retries) !== null && _h !== void 0 ? _h : 3,
125
- onRetry: (_j = config.retry) === null || _j === void 0 ? void 0 : _j.onRetry,
125
+ jitter: (_k = (_j = config.retry) === null || _j === void 0 ? void 0 : _j.jitter) !== null && _k !== void 0 ? _k : 20,
126
+ delay: (_m = (_l = config.retry) === null || _l === void 0 ? void 0 : _l.delay) !== null && _m !== void 0 ? _m : 100,
127
+ onRetry: (_o = config.retry) === null || _o === void 0 ? void 0 : _o.onRetry,
126
128
  // Using array instead of set because the length is too short for uniqueness to be important
127
- retryOn: [...((_l = (_k = config.retry) === null || _k === void 0 ? void 0 : _k.retryOn) !== null && _l !== void 0 ? _l : []), ...STATUS_CODES_TO_RETRY],
129
+ retryOn: [...((_q = (_p = config.retry) === null || _p === void 0 ? void 0 : _p.retryOn) !== null && _q !== void 0 ? _q : []), ...STATUS_CODES_TO_RETRY],
128
130
  };
129
131
  retryConfig.retryOn.push(...STATUS_CODES_TO_RETRY);
130
- return retry((attempt) => __awaiter(this, void 0, void 0, function* () {
131
- var _m, _o, _p, _q, _r, _s;
132
+ return retry(() => __awaiter(this, void 0, void 0, function* () {
133
+ var _r, _s, _t, _u, _v, _w;
132
134
  const response = yield fetchImpl(new Request(url, {
133
135
  method: method.toUpperCase(),
134
136
  body,
@@ -139,21 +141,20 @@ function fetcher(baseUrlThunk, configThunk, path, methodParam) {
139
141
  try {
140
142
  responseJson =
141
143
  responseBody &&
142
- (((_m = response.headers.get('content-type')) === null || _m === void 0 ? void 0 : _m.includes('application/json')) ||
143
- ((_o = response.headers.get('content-type')) === null || _o === void 0 ? void 0 : _o.includes('application/fhir+json')))
144
+ (((_r = response.headers.get('content-type')) === null || _r === void 0 ? void 0 : _r.includes('application/json')) ||
145
+ ((_s = response.headers.get('content-type')) === null || _s === void 0 ? void 0 : _s.includes('application/fhir+json')))
144
146
  ? JSON.parse(responseBody)
145
147
  : null;
146
148
  }
147
- catch (err) {
149
+ catch (_err) {
148
150
  // ignore JSON.parse errors
149
151
  responseJson = null;
150
152
  }
151
153
  const isError = !response.ok || response.status >= 400;
152
154
  if (isError) {
153
- headers['x-oystehr-fetch-attempts'] = `${attempt}`;
154
155
  const errObj = {
155
- message: (_r = (_q = (_p = responseJson === null || responseJson === void 0 ? void 0 : responseJson.message) !== null && _p !== void 0 ? _p : responseJson) !== null && _q !== void 0 ? _q : responseBody) !== null && _r !== void 0 ? _r : response.statusText,
156
- code: (_s = responseJson === null || responseJson === void 0 ? void 0 : responseJson.code) !== null && _s !== void 0 ? _s : response.status,
156
+ message: (_v = (_u = (_t = responseJson === null || responseJson === void 0 ? void 0 : responseJson.message) !== null && _t !== void 0 ? _t : responseJson) !== null && _u !== void 0 ? _u : responseBody) !== null && _v !== void 0 ? _v : response.statusText,
157
+ code: (_w = responseJson === null || responseJson === void 0 ? void 0 : responseJson.code) !== null && _w !== void 0 ? _w : response.status,
157
158
  response,
158
159
  };
159
160
  throw errObj;
@@ -190,6 +191,8 @@ function retry(work, config) {
190
191
  if (!isRetryable) {
191
192
  break;
192
193
  }
194
+ const jitter = Math.floor(Math.random() * (config.jitter + 1));
195
+ yield new Promise((resolve) => setTimeout(resolve, config.delay + jitter));
193
196
  if (config.onRetry && attempt !== ((_b = config.retries) !== null && _b !== void 0 ? _b : 0)) {
194
197
  config.onRetry(attempt + 1);
195
198
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","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): FetcherFunction {\n return async (params: any, request?: InternalClientRequest): Promise<FetcherResponse> => {\n const baseUrlThunk = (): string => this.config.projectApiUrl ?? defaultProjectApiUrl;\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 };\n throw new OystehrSdkError({ message: error.message, code: error.code });\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.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 };\n if (typeof fullError.message === 'string') {\n throw new OystehrSdkError({\n message: fullError.message,\n code: fullError.code,\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\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 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 (attempt) => {\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 try {\n responseJson =\n responseBody &&\n (response.headers.get('content-type')?.includes('application/json') ||\n response.headers.get('content-type')?.includes('application/fhir+json'))\n ? JSON.parse(responseBody)\n : null;\n } catch (err) {\n // ignore JSON.parse errors\n responseJson = null;\n }\n const isError = !response.ok || response.status >= 400;\n if (isError) {\n headers['x-oystehr-fetch-attempts'] = `${attempt}`;\n const errObj = {\n message: responseJson?.message ?? responseJson ?? responseBody ?? response.statusText,\n code: responseJson?.code ?? response.status,\n response,\n };\n throw errObj;\n }\n return responseJson;\n }, retryConfig);\n };\n}\n\ntype ConstructedRetryConfig = Omit<NonNullable<OystehrConfig['retry']>, 'retryOn'> & {\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 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":["uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","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): FetcherFunction {\n return async (params: any, request?: InternalClientRequest): Promise<FetcherResponse> => {\n const baseUrlThunk = (): string => this.config.projectApiUrl ?? defaultProjectApiUrl;\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 };\n throw new OystehrSdkError({ message: error.message, code: error.code });\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.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 };\n if (typeof fullError.message === 'string') {\n throw new OystehrSdkError({\n message: fullError.message,\n code: fullError.code,\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\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 try {\n responseJson =\n responseBody &&\n (response.headers.get('content-type')?.includes('application/json') ||\n response.headers.get('content-type')?.includes('application/fhir+json'))\n ? JSON.parse(responseBody)\n : null;\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: responseJson?.message ?? responseJson ?? responseBody ?? response.statusText,\n code: responseJson?.code ?? response.status,\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":["uuidv4"],"mappings":";;;;AAMO,MAAM,oBAAoB,GAAG,oCAAoC;AACxE,MAAM,iBAAiB,GAAG,6BAA6B,CAAC;AACxD,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC7D,MAAM,oBAAoB,GAAG;IAC3B,YAAY;IACZ,cAAc;IACd,OAAO;IACP,WAAW;IACX,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,gBAAgB;CACjB,CAAC;MAiCW,WAAW,CAAA;AAEtB,IAAA,WAAA,CAAY,MAAqB,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB;IAES,OAAO,CAAC,IAAY,EAAE,MAAc,EAAA;AAC5C,QAAA,OAAO,CAAO,MAAW,EAAE,OAA+B,KAA8B,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;AACtF,YAAA,MAAM,YAAY,GAAG,MAAa,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,oBAAoB,CAAA,EAAA,CAAC;YACrF,MAAM,WAAW,GAAG,MAAqB,IAAI,CAAC,MAAM,CAAC;YACrD,IAAI;AACF,gBAAA,OAAO,MAAM,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChF,aAAA;AAAC,YAAA,OAAO,GAAQ,EAAE;gBACjB,MAAM,KAAK,GAAG,GAAwC,CAAC;AACvD,gBAAA,MAAM,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACzE,aAAA;AACH,SAAC,CAAA,CAAC;KACH;IAES,WAAW,CAA+B,IAAY,EAAE,MAAc,EAAA;AAC9E,QAAA,OAAO,CAAO,MAAW,EAAE,OAA+B,KAAqC,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;YAC7F,IAAI;AACF,gBAAA,MAAM,YAAY,GAAG,MAAa,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,iBAAiB,CAAA,EAAA,CAAC;gBAC/E,MAAM,WAAW,GAAG,MAAqB,IAAI,CAAC,MAAM,CAAC;;AAErD,gBAAA,OAAO,MAAM,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAChF,aAAA;AAAC,YAAA,OAAO,GAAY,EAAE;;gBAErB,MAAM,SAAS,GAAG,GAA8D,CAAC;AACjF,gBAAA,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,EAAE;oBACzC,MAAM,IAAI,eAAe,CAAC;wBACxB,OAAO,EAAE,SAAS,CAAC,OAAO;wBAC1B,IAAI,EAAE,SAAS,CAAC,IAAI;AACrB,qBAAA,CAAC,CAAC;AACJ,iBAAA;gBACD,MAAM,IAAI,gBAAgB,CAAC;oBACzB,KAAK,EAAE,SAAS,CAAC,OAA2B;oBAC5C,IAAI,EAAE,SAAS,CAAC,IAAI;AACrB,iBAAA,CAAC,CAAC;AACJ,aAAA;AACH,SAAC,CAAA,CAAC;KACH;AACF,CAAA;AASD,SAAS,uBAAuB,CAAC,OAA4B,EAAA;IAC3D,OAAO,aAAa,IAAI,OAAO,CAAC;AAClC,CAAC;AAED,SAAS,OAAO,CACd,YAA0B,EAC1B,WAAgC,EAChC,IAAY,EACZ,WAAmB,EAAA;AAEnB,IAAA,OAAO,CACL,MAAgE,EAChE,OAA+B,KACH,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;;;;;;QAK5B,MAAM,cAAc,GAClB,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,uBAAuB,CAAC,MAAM,CAAC;AAC/E,cAAE,EAAE;AACJ,cAAE,CAAA,EAAA,GAAC,MAAkC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;QAChD,MAAM,UAAU,GACd,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,uBAAuB,CAAC,MAAM,CAAC;AAC/E,cAAG,MAAgC;cACjC,OAAO,CAAC;AACd,QAAA,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,EAAgB,CAAC;AACvD,QAAA,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC;AACxC,QAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,WAAW,CAAC;AAClE,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,UAAU,aAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,WAAW,EAAE,CAAC,SAAS,CAAC;QACnE,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,WAAW,GAAG,cAAc,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACvE,SAAS,GAAG,UAAU,CAAC;YACvB,WAAW,GAAG,UAAU,CAAC;AAC1B,SAAA;QACD,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACzC,QAAA,MAAM,gBAAgB,GAAG,YAAY,EAAE,CAAC;AACxC,QAAA,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,GAAG,CAAC;QAC/F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC5C,QAAA,IAAI,IAAS,CAAC;AAEd,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC9B,YAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACpC,SAAA;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE;YAC1C,IAAI,MAAM,KAAK,KAAK,EAAE;AACpB,gBAAA,iBAAiB,CAAC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;AAClD,aAAA;iBAAM,IAAI,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,WAAW,MAAK,mCAAmC,EAAE;AAC1E,gBAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;AACrC,gBAAA,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACvC,gBAAA,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC1B,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACpC,aAAA;AACF,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAA,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,WAAW,MAAK,mCAAmC,IAAI,MAAM,KAAK,MAAM,EAAE;gBACxF,IAAI,GAAG,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AAED,QAAA,MAAM,OAAO,GAA2B,MAAM,CAAC,MAAM,CACnD,SAAS;AACP,cAAE;AACE,gBAAA,qBAAqB,EAAE,SAAS;AAChC,gBAAA,sBAAsB,EAAE,SAAS;AAClC,aAAA;cACD,EAAE,EACN;YACE,cAAc,EAAE,CAAA,EAAA,GAAA,UAAU,KAAV,IAAA,IAAA,UAAU,uBAAV,UAAU,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,kBAAkB;SAC9D,EACD,WAAW,GAAG,EAAE,aAAa,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE,EAAE,GAAG,EAAE,EAC7D,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,OAAO,IAAG,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,EAC7D,EAAE,sBAAsB,EAAE,MAAA,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAV,UAAU,CAAE,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAIA,EAAM,EAAE,EAAE,CAC9D,CAAC;AACF,QAAA,MAAM,WAAW,GAA2B;YAC1C,OAAO,EAAE,MAAA,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC;YACnC,MAAM,EAAE,MAAA,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE;YAClC,KAAK,EAAE,MAAA,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,GAAG;AACjC,YAAA,OAAO,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,KAAK,0CAAE,OAAO;;AAE9B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAA,EAAA,GAAA,MAAA,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAC,EAAE,GAAG,qBAAqB,CAAC;SACtE,CAAC;QACF,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC,MAAW,SAAA,CAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAA,EAAA,aAAA;;YACtB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,IAAI,OAAO,CAAC,GAAG,EAAE;AACf,gBAAA,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC5B,IAAI;gBACJ,OAAO;AACR,aAAA,CAAC,CACH,CAAC;AACF,YAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;AAClE,YAAA,IAAI,YAA4C,CAAC;YACjD,IAAI;gBACF,YAAY;oBACV,YAAY;AACZ,yBAAC,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,kBAAkB,CAAC;AACjE,6BAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAA,CAAC;AACxE,0BAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;0BACxB,IAAI,CAAC;AACZ,aAAA;AAAC,YAAA,OAAO,IAAI,EAAE;;gBAEb,YAAY,GAAG,IAAI,CAAC;AACrB,aAAA;AACD,YAAA,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC;AACvD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,MAAM,GAAG;AACb,oBAAA,OAAO,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,OAAO,mCAAI,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,QAAQ,CAAC,UAAU;AACrF,oBAAA,IAAI,EAAE,CAAA,EAAA,GAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAY,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,QAAQ,CAAC,MAAM;oBAC3C,QAAQ;iBACT,CAAC;AACF,gBAAA,MAAM,MAAM,CAAC;AACd,aAAA;AACD,YAAA,OAAO,YAAY,CAAC;AACtB,SAAC,CAAA,EAAE,WAAW,CAAC,CAAC;AAClB,KAAC,CAAA,CAAC;AACJ,CAAC;AAOD,SAAe,KAAK,CAAI,IAAqC,EAAE,MAA8B,EAAA;;;AAC3F,QAAA,IAAI,OAAO,CAAC;AACZ,QAAA,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,EAAE;YAC5F,IAAI;AACF,gBAAA,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5B,aAAA;AAAC,YAAA,OAAO,CAAM,EAAE;gBACf,IAAI,WAAW,GAAG,KAAK,CAAC;gBACxB,IAAI,UAAU,IAAI,CAAC,EAAE;;oBAEnB,MAAM,GAAG,GAAG,CAAiB,CAAC;oBAC9B,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAEhD,oBAAA,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAChD,iBAAA;AAAM,qBAAA;oBACL,OAAO,GAAG,CAAC,CAAC;;oBAEZ,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;wBAC7C,MAAM,GAAG,GAAG,CAAqB,CAAC;wBAClC,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvD,qBAAA;AACF,iBAAA;gBACD,IAAI,CAAC,WAAW,EAAE;oBAChB,MAAM;AACP,iBAAA;AACD,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/D,gBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AAC3E,gBAAA,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,EAAE;AACvD,oBAAA,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;AAC7B,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,MAAM,OAAO,CAAC;;AACf,CAAA;AAED;;;;;;;;AAQG;AACH,SAAS,eAAe,CAAC,IAAY,EAAE,MAA+B,EAAA;AACpE,IAAA,MAAM,YAAY,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAQ,MAAM,CAAE,CAAC;;AAEnC,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,SAAS,KAAI;AAC/D,QAAA,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;;AAE/B,QAAA,IAAI,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAC7B,YAAA,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAC/B,SAAA;;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE;AAClD,YAAA,MAAM,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,CAAA,4CAAA,EAA+C,SAAS,CAAA,CAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/G,SAAA;;AAED,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE;YACrB,OAAO,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;AACZ,KAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC7C,IAAA,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM;UAChC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,GAAG,CAAE,EAAA,EAAA,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAA,CAAA,CAAG,EAAE,EAAE,CAAC;UAC3E,EAAE,CAAC;AACP,IAAA,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;;AAIG;AACa,SAAA,iBAAiB,CAAC,MAA+B,EAAE,MAAuB,EAAA;AACxF,IAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACjD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAW,CAAC,CAAC,CAAC;YACtD,SAAS;AACV,SAAA;AACD,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAe,CAAC,CAAC;AACrC,KAAA;AACH;;;;"}
@@ -28,6 +28,14 @@ export interface OystehrConfig {
28
28
  * Number of retries.
29
29
  */
30
30
  retries: number;
31
+ /**
32
+ * Shift retries by up to this many milliseconds. Defaults to 20 milliseconds.
33
+ */
34
+ jitter?: number;
35
+ /**
36
+ * Wait this many milliseconds between retries. Defaults to 100 milliseconds.
37
+ */
38
+ delay?: number;
31
39
  /**
32
40
  * Optional, non-async function to call when a request is retried.
33
41
  * @param attempt
@@ -1,2 +1,2 @@
1
- import{v4 as e}from"uuid";class t extends Error{constructor({message:e,code:s}){super(e),Object.setPrototypeOf(this,t.prototype),this.code=s,this.name="OystehrSdkError"}toString(){return`${this.name}: ${this.message} (code: ${this.code})`}}function s(e){var t;const s=[];for(const i of null!==(t=e.issue)&&void 0!==t?t:[])i.details&&i.details.text&&s.push(i.details.text);return s.length||s.push("Unknown FHIR error"),s.join(",")}class i extends t{constructor({error:e,code:t}){super({message:s(e),code:t}),Object.setPrototypeOf(this,i.prototype),this.cause=e,this.name="OystehrFHIRError"}}function r(e,t,s,i){return new(s||(s=Promise))((function(r,n){function o(e){try{u(i.next(e))}catch(e){n(e)}}function c(e){try{u(i.throw(e))}catch(e){n(e)}}function u(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,c)}u((i=i.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const n="https://project-api.zapehr.com/v1",o=[408,429,500,502,503,504],c=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET"];class u{constructor(e){this.config=e}request(e,s){return(i,o)=>r(this,void 0,void 0,(function*(){const r=()=>{var e;return null!==(e=this.config.projectApiUrl)&&void 0!==e?e:n},c=()=>this.config;try{return yield h(r,c,e,s)(i,o)}catch(e){const s=e;throw new t({message:s.message,code:s.code})}}))}fhirRequest(e,s){return(n,o)=>r(this,void 0,void 0,(function*(){try{const t=()=>{var e;return null!==(e=this.config.fhirApiUrl)&&void 0!==e?e:"https://fhir-api.zapehr.com"},i=()=>this.config;return yield h(t,i,e,s)(n,o)}catch(e){const s=e;if("string"==typeof s.message)throw new t({message:s.message,code:s.code});throw new i({error:s.message,code:s.code})}}))}}function a(e){return"accessToken"in e}function h(s,i,n,u){return(h,d)=>r(this,void 0,void 0,(function*(){var p,m,f,v,g,y,q,b,j,O,w;const x=h&&!d&&!Array.isArray(h)&&a(h)?{}:null!==(p=h)&&void 0!==p?p:{},E=h&&!d&&!Array.isArray(h)&&a(h)?h:d,T=u.toLowerCase(),S=i(),k=null!==(m=S.fetch)&&void 0!==m?m:fetch,R=null!==(f=null==E?void 0:E.accessToken)&&void 0!==f?f:S.accessToken,U=null!==(v=null==E?void 0:E.projectId)&&void 0!==v?v:i().projectId;let N=n,P=x;if(!Array.isArray(x)){const[e,s]=function(e,s){const i=Object.assign({},s),r=e.replace(/\{([^}]+)\}/g,((e,r)=>{if(delete i[r],r.match(/^.*\+$/))return s[r]+"";if(!s[r]||""===s[r])throw new t({message:`Required path parameter is an empty string: ${r}`,code:400});return s[r]?encodeURIComponent(s[r]+""):""})),n=Object.keys(i),o=n.length?n.reduce(((e,t)=>Object.assign(Object.assign({},e),{[t]:i[t]})),{}):{};return[r,o]}(n,x);N=e,P=s}N=N.replace(/^\//,"");const z=s(),I=z.endsWith("/")?z:z+"/",$=new URL(N,I);let A;if(Array.isArray(P))A=JSON.stringify(P);else if(Object.keys(P).length)if("get"===T)l(P,$.searchParams);else if("application/x-www-form-urlencoded"===(null==E?void 0:E.contentType)){const e=new URLSearchParams;l(P,e),A=e.toString()}else A=JSON.stringify(P);else"application/x-www-form-urlencoded"!==(null==E?void 0:E.contentType)&&"post"===T&&(A="{}");const C=Object.assign(U?{"x-zapehr-project-id":U,"x-oystehr-project-id":U}:{},{"content-type":null!==(g=null==E?void 0:E.contentType)&&void 0!==g?g:"application/json"},R?{Authorization:`Bearer ${R}`}:{},(null==E?void 0:E.ifMatch)?{"If-Match":E.ifMatch}:{},{"x-oystehr-request-id":null!==(y=null==E?void 0:E.requestId)&&void 0!==y?y:e()}),_={retries:null!==(b=null===(q=S.retry)||void 0===q?void 0:q.retries)&&void 0!==b?b:3,onRetry:null===(j=S.retry)||void 0===j?void 0:j.onRetry,retryOn:[...null!==(w=null===(O=S.retry)||void 0===O?void 0:O.retryOn)&&void 0!==w?w:[],...o]};return _.retryOn.push(...o),function(e,t){var s,i;return r(this,void 0,void 0,(function*(){let r;for(const n of Array.from({length:(null!==(s=t.retries)&&void 0!==s?s:0)+1},((e,t)=>t)))try{return yield e(n)}catch(e){let s=!1;if("response"in e){const i=e;s=t.retryOn.includes(i.code),r={message:e.message,code:e.code}}else if(r=e,"code"in e&&"string"==typeof e.code){const t=e;s=c.includes(t.code)}if(!s)break;t.onRetry&&n!==(null!==(i=t.retries)&&void 0!==i?i:0)&&t.onRetry(n+1)}throw r}))}((e=>r(this,void 0,void 0,(function*(){var t,s,i,r,n,o;const c=yield k(new Request($,{method:T.toUpperCase(),body:A,headers:C})),u=c.body?yield c.text():null;let a;try{a=u&&((null===(t=c.headers.get("content-type"))||void 0===t?void 0:t.includes("application/json"))||(null===(s=c.headers.get("content-type"))||void 0===s?void 0:s.includes("application/fhir+json")))?JSON.parse(u):null}catch(e){a=null}if(!c.ok||c.status>=400){C["x-oystehr-fetch-attempts"]=`${e}`;throw{message:null!==(n=null!==(r=null!==(i=null==a?void 0:a.message)&&void 0!==i?i:a)&&void 0!==r?r:u)&&void 0!==n?n:c.statusText,code:null!==(o=null==a?void 0:a.code)&&void 0!==o?o:c.status,response:c}}return a}))),_)}))}function l(e,t){for(const[s,i]of Object.entries(e))Array.isArray(i)?i.forEach((e=>t.append(s,e))):t.append(s,i)}class d extends u{constructor(e){super(e),this.list=e=>this.request("/application","get")(e),this.create=(e,t)=>this.request("/application","post")(e,t),this.get=(e,t)=>this.request("/application/{id}","get")(e,t),this.update=(e,t)=>this.request("/application/{id}","patch")(e,t),this.delete=(e,t)=>this.request("/application/{id}","delete")(e,t),this.rotateSecret=(e,t)=>this.request("/application/{id}/rotate-secret","post")(e,t),this.revokeRefreshToken=(e,t)=>this.request("/application/{id}/revoke-refresh-token","post")(e,t),this.revokeAccessToken=(e,t)=>this.request("/application/{id}/revoke-access-token","post")(e,t)}}class p extends u{constructor(e){super(e),this.issue=(e,t)=>this.request("/payment/charge/issue","post")(e,t),this.status=(e,t)=>this.request("/payment/charge/status","post")(e,t)}}const m="https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release",f="addressString";function v(e){var t,s,i;if(function(e){return Object.hasOwn(e,"virtualService")}(e)){const s=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==s?void 0:s.addressString}if(!e.extension)return;const r=e.extension.find((e=>e.url===m));if(!(null==r?void 0:r.extension))return;return null===(i=null===(s=r.extension)||void 0===s?void 0:s.find((e=>e.url===f)))||void 0===i?void 0:i.valueString}class g extends u{constructor(e){super(e),this.ENCOUNTER_VS_EXTENSION_URL=m,this.ENCOUNTER_VS_EXTENSION_RELATIVE_URL=f,this.getConversationIdFromEncounter=v,this.create=(e,t)=>this.request("/messaging/conversation","post")(e,t),this.getToken=e=>this.request("/messaging/conversation/token","get")(e),this.addParticipant=(e,t)=>this.request("/messaging/conversation/{conversationId}/participant","post")(e,t),this.removeParticipant=(e,t)=>this.request("/messaging/conversation/{conversationId}/participant","delete")(e,t),this.message=(e,t)=>this.request("/messaging/conversation/{conversationId}/message","post")(e,t)}}class y extends u{constructor(e){super(e),this.get=(e,t)=>this.request("/developer/{id}","get")(e,t),this.update=(e,t)=>this.request("/developer/{id}","patch")(e,t),this.delete=(e,t)=>this.request("/developer/{id}","delete")(e,t),this.invite=(e,t)=>this.request("/developer/invite","post")(e,t),this.list=e=>this.request("/developer","get")(e),this.listV2=(e,t)=>this.request("/developer/v2/list","get")(e,t)}}class q extends u{constructor(e){super(e),this.syncPatient=(e,t)=>this.request("/erx/sync-patient/{patientId}","post")(e,t),this.allergySearch=(e,t)=>this.request("/erx/allergy/search","get")(e,t),this.medicationSearch=(e,t)=>this.request("/erx/medication/search","get")(e,t),this.medicationSearchV2=(e,t)=>this.request("/erx/v2/medication/search","get")(e,t)}}function b(e,t){return r(this,void 0,void 0,(function*(){const{resourceType:s,params:i}=e;let r;i&&(r=Object.entries(i).reduce(((e,[t,s])=>(e[s.name]||(e[s.name]=[]),e[s.name].push(s.value),e)),{}));const n=yield this.fhirRequest(`/${s}/_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 j(e,t){return r(this,void 0,void 0,(function*(){const{resourceType:s}=e;return this.fhirRequest(`/${s}`,"POST")(e,t)}))}function O({resourceType:e,id:t},s){return r(this,void 0,void 0,(function*(){return this.fhirRequest(`/${e}/${t}`,"GET")({},s)}))}function w(e,t){return r(this,void 0,void 0,(function*(){const{id:s,resourceType:i}=e;return this.fhirRequest(`/${i}/${s}`,"PUT")(e,Object.assign(Object.assign({},t),{ifMatch:(null==t?void 0:t.optimisticLockingVersionId)?`W/"${t.optimisticLockingVersionId}"`:void 0}))}))}function x({resourceType:e,id:t,operations:s},i){return r(this,void 0,void 0,(function*(){return this.fhirRequest(`/${e}/${t}`,"PATCH")(s,Object.assign(Object.assign({},i),{contentType:"application/json-patch+json",ifMatch:(null==i?void 0:i.optimisticLockingVersionId)?`W/"${i.optimisticLockingVersionId}"`:void 0}))}))}function E({resourceType:e,id:t},s){return r(this,void 0,void 0,(function*(){return this.fhirRequest(`/${e}/${t}`,"DELETE")({},s)}))}function T({resourceType:e,id:t,versionId:s},i){return r(this,void 0,void 0,(function*(){return this.fhirRequest(`/${e}/${t}/_history${s?`/${s}`:""}`,"GET")({},i)}))}function S(e){const{method:t,url:s}=e,i={request:{method:t,url:s}};if(s.split("?").length>1){const[e,t]=s.split("?"),r=t.split("&").map((e=>{const[t,s]=e.split("=");return{name:t,value:s}})).reduce(((e,{name:t,value:s})=>(e[t]||(e[t]=[]),e[t].push(s),e)),{}),n=new URLSearchParams;l(r,n),i.request.url=`${e}?${n.toString()}`}if(["GET","DELETE","HEAD"].includes(t))return i;if("PUT"===t){const{resource:t}=e;return Object.assign(Object.assign({},i),{resource:t})}if("PATCH"===t)return"resource"in e?Object.assign(Object.assign({},i),{resource:e.resource}):Object.assign(Object.assign({},i),{resource:{resourceType:"Binary",contentType:"application/json-patch+json",data:Buffer.from(JSON.stringify(e.operations),"utf8").toString("base64")}});if("POST"===t){const{resource:t,fullUrl:s}=e;return Object.assign(Object.assign({},i),{resource:t,fullUrl:s})}throw new Error("Unrecognized method")}function k(e){return function(t,s){return r(this,void 0,void 0,(function*(){return this.fhirRequest("/","POST")({resourceType:"Bundle",type:e,entry:t.requests.map(S)},s)}))}}const R=k("batch"),U=k("transaction");function N(e,t){const s=[];if(e.line&&s.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),s.push(t.join(", "))}return e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&s.push("["+e.use+"]"),s.join((null==t?void 0:t.lineSeparator)||", ").trim()}function P(e,t){const s=[];return e.prefix&&!1!==(null==t?void 0:t.prefix)&&s.push(...e.prefix),e.given&&s.push(...e.given),e.family&&s.push(e.family),e.suffix&&!1!==(null==t?void 0:t.suffix)&&s.push(...e.suffix),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&s.push("["+e.use+"]"),s.join(" ").trim()}class z extends u{constructor(e){super(e),this.search=b,this.create=j,this.get=O,this.update=w,this.patch=x,this.delete=E,this.history=T,this.batch=R,this.transaction=U,this.formatAddress=N,this.formatHumanName=P}}class I extends u{constructor(e){super(e),this.list=e=>this.request("/m2m","get")(e),this.create=(e,t)=>this.request("/m2m","post")(e,t),this.get=(e,t)=>this.request("/m2m/{id}","get")(e,t),this.update=(e,t)=>this.request("/m2m/{id}","patch")(e,t),this.delete=(e,t)=>this.request("/m2m/{id}","delete")(e,t),this.rotateSecret=(e,t)=>this.request("/m2m/{id}/rotate-secret","post")(e,t),this.listV2=(e,t)=>this.request("/m2m/v2/list","get")(e,t)}}class $ extends u{constructor(e){super(e),this.getMessagingConfig=e=>this.request("/messaging/config","get")(e)}}class A extends u{constructor(e){super(e),this.setUp=(e,t)=>this.request("/payment/payment-method/setup","post")(e,t),this.setDefault=(e,t)=>this.request("/payment/payment-method/set-default","post")(e,t),this.delete=(e,t)=>this.request("/payment/payment-method","delete")(e,t),this.list=(e,t)=>this.request("/payment/payment-method/list","post")(e,t)}}class C extends u{constructor(e){super(e),this.get=e=>this.request("/project","get")(e),this.update=(e,t)=>this.request("/project","patch")(e,t)}}class _ extends u{constructor(e){super(e),this.eligibilityCheck=(e,t)=>this.request("/rcm/eligibility-check","post")(e,t),this.validateProfessionalClaim=(e,t)=>this.request("/rcm/professional-claim/validate","post")(e,t),this.submitProfessionalClaim=(e,t)=>this.request("/rcm/professional-claim/submit","post")(e,t)}}class L extends u{constructor(e){super(e),this.list=e=>this.request("/iam/role","get")(e),this.create=(e,t)=>this.request("/iam/role","post")(e,t),this.get=(e,t)=>this.request("/iam/role/{roleId}","get")(e,t),this.update=(e,t)=>this.request("/iam/role/{roleId}","patch")(e,t),this.delete=(e,t)=>this.request("/iam/role/{roleId}","delete")(e,t)}}class M extends u{constructor(e){super(e),this.list=e=>this.request("/secret","get")(e),this.set=(e,t)=>this.request("/secret","post")(e,t),this.get=(e,t)=>this.request("/secret/{name}","get")(e,t),this.delete=(e,t)=>this.request("/secret/{name}","delete")(e,t)}}class D extends u{constructor(e){super(e),this.createMeeting=(e,t)=>this.request("/telemed/v2/meeting","post")(e,t),this.joinMeeting=(e,t)=>this.request("/telemed/v2/meeting/{encounterId}/join","get")(e,t)}}class V extends u{constructor(e){super(e),this.send=(e,t)=>this.request("/messaging/transactional-sms/send","post")(e,t)}}class F extends u{constructor(e){super(e),this.me=e=>this.request("/user/me","get")(e),this.get=(e,t)=>this.request("/user/{id}","get")(e,t),this.update=(e,t)=>this.request("/user/{id}","patch")(e,t),this.delete=(e,t)=>this.request("/user/{id}","delete")(e,t),this.invite=(e,t)=>this.request("/user/invite","post")(e,t),this.list=e=>this.request("/user","get")(e),this.listV2=(e,t)=>this.request("/user/v2/list","get")(e,t)}}class H extends u{constructor(e){super(e),this.get=e=>this.request("/version","get")(e)}}function B({bucketName:e,"objectPath+":t,file:s}){return r(this,void 0,void 0,(function*(){const i=yield this.request("/z3/{bucketName}/{objectPath+}","post")({action:"upload",bucketName:e,"objectPath+":t});yield fetch(i.signedUrl,{method:"PUT",body:s})}))}function G({bucketName:e,"objectPath+":t}){return r(this,void 0,void 0,(function*(){const s=yield this.request("/z3/{bucketName}/{objectPath+}","post")({action:"download",bucketName:e,"objectPath+":t}),i=yield fetch(s.signedUrl,{method:"GET"});if(!i.ok)throw new Error("Failed to download file");return i.arrayBuffer()}))}function J(e){var s;return r(this,void 0,void 0,(function*(){let i,r;const o=new URL(e.url);if("z3:"===o.protocol){const e=o.pathname.split("/").slice(1);i=o.hostname,r=e.join("/")}else{if(!o.href.startsWith(null!==(s=this.config.projectApiUrl)&&void 0!==s?s:n))throw new t({message:"Invalid Z3 URL",code:400});{const e=o.pathname.split("/").slice(3);i=e[0],r=e.slice(1).join("/")}}const c={action:"upload",bucketName:i,"objectPath+":r};return this.request("/z3/{bucketName}/{objectPath+}","post")(c)}))}class W extends u{constructor(e){super(e),this.uploadFile=B,this.downloadFile=G,this.getPresignedUrlForZ3Url=J,this.listBuckets=e=>this.request("/z3","get")(e),this.createBucket=(e,t)=>this.request("/z3/{bucketName}","put")(e,t),this.deleteBucket=(e,t)=>this.request("/z3/{bucketName}","delete")(e,t),this.listObjects=(e,t)=>this.request("/z3/{bucketName}/{objectPath+}","get")(e,t),this.getPresignedUrl=(e,t)=>this.request("/z3/{bucketName}/{objectPath+}","post")(e,t),this.deleteObject=(e,t)=>this.request("/z3/{bucketName}/{objectPath+}","delete")(e,t)}}function X({id:e,file:t,filename:s}){return r(this,void 0,void 0,(function*(){const i=yield this.request("/zambda/{id}/s3-upload","post")({id:e,filename:s});yield fetch(i.signedUrl,{method:"PUT",body:t})}))}class Z extends u{constructor(e){super(e),this.uploadFile=X,this.list=e=>this.request("/zambda","get")(e),this.create=(e,t)=>this.request("/zambda","post")(e,t),this.get=(e,t)=>this.request("/zambda/{id}","get")(e,t),this.update=(e,t)=>this.request("/zambda/{id}","patch")(e,t),this.delete=(e,t)=>this.request("/zambda/{id}","delete")(e,t),this.execute=(e,t)=>this.request("/zambda/{id}/execute","post")(e,t),this.executePublic=(e,t)=>this.request("/zambda/{id}/execute-public","post")(e,t),this.s3Upload=(e,t)=>this.request("/zambda/{id}/s3-upload","post")(e,t)}}class K extends u{constructor(e){super(e),this.list=(e,t)=>this.request("/zambda/{id}/logStream","post")(e,t),this.search=(e,t)=>this.request("/zambda/{id}/logStream/search","post")(e,t),this.get=(e,t)=>this.request("/zambda/{id}/logStream/{logStreamName}","post")(e,t)}}let Q=class{constructor(e){this.config=e,this.application=new d(e),this.developer=new y(e),this.m2m=new I(e),this.messaging=new $(e),this.conversation=new g(e),this.transactionalSMS=new V(e),this.paymentMethod=new A(e),this.charge=new p(e),this.project=new C(e),this.rcm=new _(e),this.erx=new q(e),this.role=new L(e),this.secret=new M(e),this.telemed=new D(e),this.user=new F(e),this.version=new H(e),this.z3=new W(e),this.zambda=new Z(e),this.zambdaLogStream=new K(e),this.fhir=new z(e)}};class Y extends Q{}Y.OystehrFHIRError=i,Y.OystehrSdkError=t;export{Y as default};
1
+ import{v4 as e}from"uuid";class t extends Error{constructor({message:e,code:r}){super(e),Object.setPrototypeOf(this,t.prototype),this.code=r,this.name="OystehrSdkError"}toString(){return`${this.name}: ${this.message} (code: ${this.code})`}}function r(e){var t;const r=[];for(const s of null!==(t=e.issue)&&void 0!==t?t:[])s.details&&s.details.text&&r.push(s.details.text);return r.length||r.push("Unknown FHIR error"),r.join(",")}class s extends t{constructor({error:e,code:t}){super({message:r(e),code:t}),Object.setPrototypeOf(this,s.prototype),this.cause=e,this.name="OystehrFHIRError"}}function i(e,t,r,s){return new(r||(r=Promise))((function(i,n){function o(e){try{c(s.next(e))}catch(e){n(e)}}function u(e){try{c(s.throw(e))}catch(e){n(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,u)}c((s=s.apply(e,t||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const n="https://project-api.zapehr.com/v1",o=[408,429,500,502,503,504],u=["ECONNRESET","ECONNREFUSED","EPIPE","ETIMEDOUT","UND_ERR_CONNECT_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_HEADERS_TIMEOUT","UND_ERR_SOCKET"];class c{constructor(e){this.config=e}request(e,r){return(s,o)=>i(this,void 0,void 0,(function*(){const i=()=>{var e;return null!==(e=this.config.projectApiUrl)&&void 0!==e?e:n},u=()=>this.config;try{return yield d(i,u,e,r)(s,o)}catch(e){const r=e;throw new t({message:r.message,code:r.code})}}))}fhirRequest(e,r){return(n,o)=>i(this,void 0,void 0,(function*(){try{const t=()=>{var e;return null!==(e=this.config.fhirApiUrl)&&void 0!==e?e:"https://fhir-api.zapehr.com"},s=()=>this.config;return yield d(t,s,e,r)(n,o)}catch(e){const r=e;if("string"==typeof r.message)throw new t({message:r.message,code:r.code});throw new s({error:r.message,code:r.code})}}))}}function a(e){return"accessToken"in e}function d(r,s,n,c){return(d,h)=>i(this,void 0,void 0,(function*(){var p,m,f,v,g,y,q,b,j,x,w,O,T,E,S;const k=d&&!h&&!Array.isArray(d)&&a(d)?{}:null!==(p=d)&&void 0!==p?p:{},R=d&&!h&&!Array.isArray(d)&&a(d)?d:h,P=c.toLowerCase(),U=s(),N=null!==(m=U.fetch)&&void 0!==m?m:fetch,z=null!==(f=null==R?void 0:R.accessToken)&&void 0!==f?f:U.accessToken,I=null!==(v=null==R?void 0:R.projectId)&&void 0!==v?v:s().projectId;let $=n,A=k;if(!Array.isArray(k)){const[e,r]=function(e,r){const s=Object.assign({},r),i=e.replace(/\{([^}]+)\}/g,((e,i)=>{if(delete s[i],i.match(/^.*\+$/))return r[i]+"";if(!r[i]||""===r[i])throw new t({message:`Required path parameter is an empty string: ${i}`,code:400});return r[i]?encodeURIComponent(r[i]+""):""})),n=Object.keys(s),o=n.length?n.reduce(((e,t)=>Object.assign(Object.assign({},e),{[t]:s[t]})),{}):{};return[i,o]}(n,k);$=e,A=r}$=$.replace(/^\//,"");const C=r(),_=C.endsWith("/")?C:C+"/",L=new URL($,_);let M;if(Array.isArray(A))M=JSON.stringify(A);else if(Object.keys(A).length)if("get"===P)l(A,L.searchParams);else if("application/x-www-form-urlencoded"===(null==R?void 0:R.contentType)){const e=new URLSearchParams;l(A,e),M=e.toString()}else M=JSON.stringify(A);else"application/x-www-form-urlencoded"!==(null==R?void 0:R.contentType)&&"post"===P&&(M="{}");const D=Object.assign(I?{"x-zapehr-project-id":I,"x-oystehr-project-id":I}:{},{"content-type":null!==(g=null==R?void 0:R.contentType)&&void 0!==g?g:"application/json"},z?{Authorization:`Bearer ${z}`}:{},(null==R?void 0:R.ifMatch)?{"If-Match":R.ifMatch}:{},{"x-oystehr-request-id":null!==(y=null==R?void 0:R.requestId)&&void 0!==y?y:e()}),V={retries:null!==(b=null===(q=U.retry)||void 0===q?void 0:q.retries)&&void 0!==b?b:3,jitter:null!==(x=null===(j=U.retry)||void 0===j?void 0:j.jitter)&&void 0!==x?x:20,delay:null!==(O=null===(w=U.retry)||void 0===w?void 0:w.delay)&&void 0!==O?O:100,onRetry:null===(T=U.retry)||void 0===T?void 0:T.onRetry,retryOn:[...null!==(S=null===(E=U.retry)||void 0===E?void 0:E.retryOn)&&void 0!==S?S:[],...o]};return V.retryOn.push(...o),function(e,t){var r,s;return i(this,void 0,void 0,(function*(){let i;for(const n of Array.from({length:(null!==(r=t.retries)&&void 0!==r?r:0)+1},((e,t)=>t)))try{return yield e(n)}catch(e){let r=!1;if("response"in e){const s=e;r=t.retryOn.includes(s.code),i={message:e.message,code:e.code}}else if(i=e,"code"in e&&"string"==typeof e.code){const t=e;r=u.includes(t.code)}if(!r)break;const o=Math.floor(Math.random()*(t.jitter+1));yield new Promise((e=>setTimeout(e,t.delay+o))),t.onRetry&&n!==(null!==(s=t.retries)&&void 0!==s?s:0)&&t.onRetry(n+1)}throw i}))}((()=>i(this,void 0,void 0,(function*(){var e,t,r,s,i,n;const o=yield N(new Request(L,{method:P.toUpperCase(),body:M,headers:D})),u=o.body?yield o.text():null;let c;try{c=u&&((null===(e=o.headers.get("content-type"))||void 0===e?void 0:e.includes("application/json"))||(null===(t=o.headers.get("content-type"))||void 0===t?void 0:t.includes("application/fhir+json")))?JSON.parse(u):null}catch(e){c=null}if(!o.ok||o.status>=400){throw{message:null!==(i=null!==(s=null!==(r=null==c?void 0:c.message)&&void 0!==r?r:c)&&void 0!==s?s:u)&&void 0!==i?i:o.statusText,code:null!==(n=null==c?void 0:c.code)&&void 0!==n?n:o.status,response:o}}return c}))),V)}))}function l(e,t){for(const[r,s]of Object.entries(e))Array.isArray(s)?s.forEach((e=>t.append(r,e))):t.append(r,s)}class h extends c{constructor(e){super(e)}list(e){return this.request("/application","get")(e)}create(e,t){return this.request("/application","post")(e,t)}get(e,t){return this.request("/application/{id}","get")(e,t)}update(e,t){return this.request("/application/{id}","patch")(e,t)}delete(e,t){return this.request("/application/{id}","delete")(e,t)}rotateSecret(e,t){return this.request("/application/{id}/rotate-secret","post")(e,t)}revokeRefreshToken(e,t){return this.request("/application/{id}/revoke-refresh-token","post")(e,t)}revokeAccessToken(e,t){return this.request("/application/{id}/revoke-access-token","post")(e,t)}}class p extends c{constructor(e){super(e)}issue(e,t){return this.request("/payment/charge/issue","post")(e,t)}status(e,t){return this.request("/payment/charge/status","post")(e,t)}}const m="https://extensions.fhir.zapehr.com/encounter-virtual-service-pre-release",f="addressString";function v(e){var t,r,s;if(function(e){return Object.hasOwn(e,"virtualService")}(e)){const r=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==r?void 0:r.addressString}if(!e.extension)return;const i=e.extension.find((e=>e.url===m));if(!(null==i?void 0:i.extension))return;return null===(s=null===(r=i.extension)||void 0===r?void 0:r.find((e=>e.url===f)))||void 0===s?void 0:s.valueString}class g extends c{constructor(e){super(e),this.ENCOUNTER_VS_EXTENSION_URL=m,this.ENCOUNTER_VS_EXTENSION_RELATIVE_URL=f,this.getConversationIdFromEncounter=v}create(e,t){return this.request("/messaging/conversation","post")(e,t)}getToken(e){return this.request("/messaging/conversation/token","get")(e)}addParticipant(e,t){return this.request("/messaging/conversation/{conversationId}/participant","post")(e,t)}removeParticipant(e,t){return this.request("/messaging/conversation/{conversationId}/participant","delete")(e,t)}message(e,t){return this.request("/messaging/conversation/{conversationId}/message","post")(e,t)}}class y extends c{constructor(e){super(e)}get(e,t){return this.request("/developer/{id}","get")(e,t)}update(e,t){return this.request("/developer/{id}","patch")(e,t)}delete(e,t){return this.request("/developer/{id}","delete")(e,t)}invite(e,t){return this.request("/developer/invite","post")(e,t)}list(e){return this.request("/developer","get")(e)}listV2(e,t){return this.request("/developer/v2/list","get")(e,t)}}class q extends c{constructor(e){super(e)}syncPatient(e,t){return this.request("/erx/sync-patient/{patientId}","post")(e,t)}allergySearch(e,t){return this.request("/erx/allergy/search","get")(e,t)}cancelOrder(e,t){return this.request("/erx/cancel-order","post")(e,t)}cancelPrescription(e,t){return this.request("/erx/cancel-prescription","post")(e,t)}medicationSearch(e,t){return this.request("/erx/medication/search","get")(e,t)}medicationSearchV2(e,t){return this.request("/erx/v2/medication/search","get")(e,t)}}class b extends c{constructor(e){super(e)}offboard(e){return this.request("/fax/offboard","post")(e)}onboard(e){return this.request("/fax/onboard","post")(e)}send(e,t){return this.request("/fax/send","post")(e,t)}}function j(e,t){return i(this,void 0,void 0,(function*(){const{resourceType:r,params:s}=e;let i;s&&(i=Object.entries(s).reduce(((e,[t,r])=>(e[r.name]||(e[r.name]=[]),e[r.name].push(r.value),e)),{}));const n=yield this.fhirRequest(`/${r}/_search`,"POST")(i,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 x(e,t){return i(this,void 0,void 0,(function*(){const{resourceType:r}=e;return this.fhirRequest(`/${r}`,"POST")(e,t)}))}function w({resourceType:e,id:t},r){return i(this,void 0,void 0,(function*(){return this.fhirRequest(`/${e}/${t}`,"GET")({},r)}))}function O(e,t){return i(this,void 0,void 0,(function*(){const{id:r,resourceType:s}=e;return this.fhirRequest(`/${s}/${r}`,"PUT")(e,Object.assign(Object.assign({},t),{ifMatch:(null==t?void 0:t.optimisticLockingVersionId)?`W/"${t.optimisticLockingVersionId}"`:void 0}))}))}function T({resourceType:e,id:t,operations:r},s){return i(this,void 0,void 0,(function*(){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 E({resourceType:e,id:t},r){return i(this,void 0,void 0,(function*(){return this.fhirRequest(`/${e}/${t}`,"DELETE")({},r)}))}function S({resourceType:e,id:t,versionId:r},s){return i(this,void 0,void 0,(function*(){return this.fhirRequest(`/${e}/${t}/_history${r?`/${r}`:""}`,"GET")({},s)}))}function k(e){const{method:t,url:r}=e,s={request:{method:t,url:r}};if(r.split("?").length>1){const[e,t]=r.split("?"),i=t.split("&").map((e=>{const[t,r]=e.split("=");return{name:t,value:r}})).reduce(((e,{name:t,value:r})=>t?(e[t]||(e[t]=[]),e[t].push(r),e):e),{}),n=new URLSearchParams;l(i,n),s.request.url=`${e}?${n.toString()}`}if(["GET","DELETE","HEAD"].includes(t))return s;if("PUT"===t){const{resource:t}=e;return Object.assign(Object.assign({},s),{resource:t})}if("PATCH"===t)return"resource"in e?Object.assign(Object.assign({},s),{resource:e.resource}):Object.assign(Object.assign({},s),{resource:{resourceType:"Binary",contentType:"application/json-patch+json",data:Buffer.from(JSON.stringify(e.operations),"utf8").toString("base64")}});if("POST"===t){const{resource:t,fullUrl:r}=e;return Object.assign(Object.assign({},s),{resource:t,fullUrl:r})}throw new Error("Unrecognized method")}function R(e){return function(t,r){return i(this,void 0,void 0,(function*(){return this.fhirRequest("/","POST")({resourceType:"Bundle",type:e,entry:t.requests.map(k)},r)}))}}const P=R("batch"),U=R("transaction");function N(e,t){const r=[];if(e.line&&r.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),r.push(t.join(", "))}return e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&r.push("["+e.use+"]"),r.join((null==t?void 0:t.lineSeparator)||", ").trim()}function z(e,t){const r=[];return e.prefix&&!1!==(null==t?void 0:t.prefix)&&r.push(...e.prefix),e.given&&r.push(...e.given),e.family&&r.push(e.family),e.suffix&&!1!==(null==t?void 0:t.suffix)&&r.push(...e.suffix),e.use&&((null==t?void 0:t.all)||(null==t?void 0:t.use))&&r.push("["+e.use+"]"),r.join(" ").trim()}class I extends c{constructor(e){super(e),this.search=j,this.create=x,this.get=w,this.update=O,this.patch=T,this.delete=E,this.history=S,this.batch=P,this.transaction=U,this.formatAddress=N,this.formatHumanName=z}}class $ extends c{constructor(e){super(e)}list(e){return this.request("/m2m","get")(e)}create(e,t){return this.request("/m2m","post")(e,t)}get(e,t){return this.request("/m2m/{id}","get")(e,t)}update(e,t){return this.request("/m2m/{id}","patch")(e,t)}delete(e,t){return this.request("/m2m/{id}","delete")(e,t)}rotateSecret(e,t){return this.request("/m2m/{id}/rotate-secret","post")(e,t)}listV2(e,t){return this.request("/m2m/v2/list","get")(e,t)}}class A extends c{constructor(e){super(e)}getMessagingConfig(e){return this.request("/messaging/config","get")(e)}}class C extends c{constructor(e){super(e)}setUp(e,t){return this.request("/payment/payment-method/setup","post")(e,t)}setDefault(e,t){return this.request("/payment/payment-method/set-default","post")(e,t)}delete(e,t){return this.request("/payment/payment-method","delete")(e,t)}list(e,t){return this.request("/payment/payment-method/list","post")(e,t)}}class _ extends c{constructor(e){super(e)}get(e){return this.request("/project","get")(e)}update(e,t){return this.request("/project","patch")(e,t)}}class L extends c{constructor(e){super(e)}eligibilityCheck(e,t){return this.request("/rcm/eligibility-check","post")(e,t)}validateProfessionalClaim(e,t){return this.request("/rcm/professional-claim/validate","post")(e,t)}submitProfessionalClaim(e,t){return this.request("/rcm/professional-claim/submit","post")(e,t)}}class M extends c{constructor(e){super(e)}list(e){return this.request("/iam/role","get")(e)}create(e,t){return this.request("/iam/role","post")(e,t)}get(e,t){return this.request("/iam/role/{roleId}","get")(e,t)}update(e,t){return this.request("/iam/role/{roleId}","patch")(e,t)}delete(e,t){return this.request("/iam/role/{roleId}","delete")(e,t)}}class D extends c{constructor(e){super(e)}list(e){return this.request("/secret","get")(e)}set(e,t){return this.request("/secret","post")(e,t)}get(e,t){return this.request("/secret/{name}","get")(e,t)}delete(e,t){return this.request("/secret/{name}","delete")(e,t)}}class V extends c{constructor(e){super(e)}createMeeting(e,t){return this.request("/telemed/v2/meeting","post")(e,t)}joinMeeting(e,t){return this.request("/telemed/v2/meeting/{encounterId}/join","get")(e,t)}}class F extends c{constructor(e){super(e)}send(e,t){return this.request("/messaging/transactional-sms/send","post")(e,t)}}class H extends c{constructor(e){super(e)}me(e){return this.request("/user/me","get")(e)}get(e,t){return this.request("/user/{id}","get")(e,t)}update(e,t){return this.request("/user/{id}","patch")(e,t)}delete(e,t){return this.request("/user/{id}","delete")(e,t)}invite(e,t){return this.request("/user/invite","post")(e,t)}list(e){return this.request("/user","get")(e)}listV2(e,t){return this.request("/user/v2/list","get")(e,t)}}class B extends c{constructor(e){super(e)}get(e){return this.request("/version","get")(e)}}function G({bucketName:e,"objectPath+":t,file:r}){return i(this,void 0,void 0,(function*(){const s=yield this.request("/z3/{bucketName}/{objectPath+}","post")({action:"upload",bucketName:e,"objectPath+":t});yield fetch(s.signedUrl,{method:"PUT",body:r})}))}function J({bucketName:e,"objectPath+":t}){return i(this,void 0,void 0,(function*(){const r=yield this.request("/z3/{bucketName}/{objectPath+}","post")({action:"download",bucketName:e,"objectPath+":t}),s=yield fetch(r.signedUrl,{method:"GET"});if(!s.ok)throw new Error("Failed to download file");return s.arrayBuffer()}))}function W(e){var r;return i(this,void 0,void 0,(function*(){let s,i;const o=new URL(e.url);if("z3:"===o.protocol){const e=o.pathname.split("/").slice(1);s=o.hostname,i=e.join("/")}else{if(!o.href.startsWith(null!==(r=this.config.projectApiUrl)&&void 0!==r?r:n))throw new t({message:"Invalid Z3 URL",code:400});{const e=o.pathname.split("/").slice(3);s=e[0],i=e.slice(1).join("/")}}const u={action:"upload",bucketName:s,"objectPath+":i};return this.request("/z3/{bucketName}/{objectPath+}","post")(u)}))}class X extends c{constructor(e){super(e),this.uploadFile=G,this.downloadFile=J,this.getPresignedUrlForZ3Url=W}listBuckets(e){return this.request("/z3","get")(e)}createBucket(e,t){return this.request("/z3/{bucketName}","put")(e,t)}deleteBucket(e,t){return this.request("/z3/{bucketName}","delete")(e,t)}listObjects(e,t){return this.request("/z3/{bucketName}/{objectPath+}","get")(e,t)}getPresignedUrl(e,t){return this.request("/z3/{bucketName}/{objectPath+}","post")(e,t)}deleteObject(e,t){return this.request("/z3/{bucketName}/{objectPath+}","delete")(e,t)}}function Z({id:e,file:t,filename:r}){return i(this,void 0,void 0,(function*(){const s=yield this.request("/zambda/{id}/s3-upload","post")({id:e,filename:r});yield fetch(s.signedUrl,{method:"PUT",body:t})}))}class K extends c{constructor(e){super(e),this.uploadFile=Z}list(e){return this.request("/zambda","get")(e)}create(e,t){return this.request("/zambda","post")(e,t)}get(e,t){return this.request("/zambda/{id}","get")(e,t)}update(e,t){return this.request("/zambda/{id}","patch")(e,t)}delete(e,t){return this.request("/zambda/{id}","delete")(e,t)}execute(e,t){return this.request("/zambda/{id}/execute","post")(e,t)}executePublic(e,t){return this.request("/zambda/{id}/execute-public","post")(e,t)}s3Upload(e,t){return this.request("/zambda/{id}/s3-upload","post")(e,t)}}class Q extends c{constructor(e){super(e)}list(e,t){return this.request("/zambda/{id}/logStream","post")(e,t)}search(e,t){return this.request("/zambda/{id}/logStream/search","post")(e,t)}get(e,t){return this.request("/zambda/{id}/logStream/{logStreamName}","post")(e,t)}}let Y=class{constructor(e){this.config=e,this.application=new h(e),this.developer=new y(e),this.m2m=new $(e),this.messaging=new A(e),this.conversation=new g(e),this.transactionalSMS=new F(e),this.paymentMethod=new C(e),this.charge=new p(e),this.project=new _(e),this.rcm=new L(e),this.erx=new q(e),this.fax=new b(e),this.role=new M(e),this.secret=new D(e),this.telemed=new V(e),this.user=new H(e),this.version=new B(e),this.z3=new X(e),this.zambda=new K(e),this.zambdaLogStream=new Q(e),this.fhir=new I(e)}};class ee extends Y{}ee.OystehrFHIRError=s,ee.OystehrSdkError=t;export{ee as default};
2
2
  //# sourceMappingURL=index.min.js.map