@metriport/commonwell-sdk 0.30.0-alpha.1

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 (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/dist/__tests__/env-setup.d.ts +2 -0
  4. package/dist/__tests__/env-setup.d.ts.map +1 -0
  5. package/dist/__tests__/env-setup.js +35 -0
  6. package/dist/__tests__/env-setup.js.map +1 -0
  7. package/dist/client/common.d.ts +39 -0
  8. package/dist/client/common.d.ts.map +1 -0
  9. package/dist/client/common.js +15 -0
  10. package/dist/client/common.js.map +1 -0
  11. package/dist/client/commonwell-api.d.ts +103 -0
  12. package/dist/client/commonwell-api.d.ts.map +1 -0
  13. package/dist/client/commonwell-api.js +3 -0
  14. package/dist/client/commonwell-api.js.map +1 -0
  15. package/dist/client/commonwell-base.d.ts +47 -0
  16. package/dist/client/commonwell-base.d.ts.map +1 -0
  17. package/dist/client/commonwell-base.js +105 -0
  18. package/dist/client/commonwell-base.js.map +1 -0
  19. package/dist/client/commonwell-member-api.d.ts +29 -0
  20. package/dist/client/commonwell-member-api.d.ts.map +1 -0
  21. package/dist/client/commonwell-member-api.js +3 -0
  22. package/dist/client/commonwell-member-api.js.map +1 -0
  23. package/dist/client/commonwell-member.d.ts +168 -0
  24. package/dist/client/commonwell-member.d.ts.map +1 -0
  25. package/dist/client/commonwell-member.js +349 -0
  26. package/dist/client/commonwell-member.js.map +1 -0
  27. package/dist/client/commonwell.d.ts +245 -0
  28. package/dist/client/commonwell.d.ts.map +1 -0
  29. package/dist/client/commonwell.js +502 -0
  30. package/dist/client/commonwell.js.map +1 -0
  31. package/dist/common/__tests__/util.test.d.ts +2 -0
  32. package/dist/common/__tests__/util.test.d.ts.map +1 -0
  33. package/dist/common/__tests__/util.test.js +51 -0
  34. package/dist/common/__tests__/util.test.js.map +1 -0
  35. package/dist/common/__tests__/validate-npi.test.d.ts +2 -0
  36. package/dist/common/__tests__/validate-npi.test.d.ts.map +1 -0
  37. package/dist/common/__tests__/validate-npi.test.js +44 -0
  38. package/dist/common/__tests__/validate-npi.test.js.map +1 -0
  39. package/dist/common/certificate.d.ts +3 -0
  40. package/dist/common/certificate.d.ts.map +1 -0
  41. package/dist/common/certificate.js +11 -0
  42. package/dist/common/certificate.js.map +1 -0
  43. package/dist/common/commonwell-error.d.ts +23 -0
  44. package/dist/common/commonwell-error.d.ts.map +1 -0
  45. package/dist/common/commonwell-error.js +33 -0
  46. package/dist/common/commonwell-error.js.map +1 -0
  47. package/dist/common/fileDownload.d.ts +37 -0
  48. package/dist/common/fileDownload.d.ts.map +1 -0
  49. package/dist/common/fileDownload.js +53 -0
  50. package/dist/common/fileDownload.js.map +1 -0
  51. package/dist/common/make-jwt.d.ts +60 -0
  52. package/dist/common/make-jwt.d.ts.map +1 -0
  53. package/dist/common/make-jwt.js +124 -0
  54. package/dist/common/make-jwt.js.map +1 -0
  55. package/dist/common/util.d.ts +78 -0
  56. package/dist/common/util.d.ts.map +1 -0
  57. package/dist/common/util.js +104 -0
  58. package/dist/common/util.js.map +1 -0
  59. package/dist/common/validate-npi.d.ts +2 -0
  60. package/dist/common/validate-npi.d.ts.map +1 -0
  61. package/dist/common/validate-npi.js +6 -0
  62. package/dist/common/validate-npi.js.map +1 -0
  63. package/dist/common/zod.d.ts +13 -0
  64. package/dist/common/zod.d.ts.map +1 -0
  65. package/dist/common/zod.js +38 -0
  66. package/dist/common/zod.js.map +1 -0
  67. package/dist/index.d.ts +20 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +45 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/models/__tests__/address.test.d.ts +2 -0
  72. package/dist/models/__tests__/address.test.d.ts.map +1 -0
  73. package/dist/models/__tests__/address.test.js +348 -0
  74. package/dist/models/__tests__/address.test.js.map +1 -0
  75. package/dist/models/__tests__/demographics.test.d.ts +2 -0
  76. package/dist/models/__tests__/demographics.test.d.ts.map +1 -0
  77. package/dist/models/__tests__/demographics.test.js +96 -0
  78. package/dist/models/__tests__/demographics.test.js.map +1 -0
  79. package/dist/models/address.d.ts +177 -0
  80. package/dist/models/address.d.ts.map +1 -0
  81. package/dist/models/address.js +94 -0
  82. package/dist/models/address.js.map +1 -0
  83. package/dist/models/certificates.d.ts +77 -0
  84. package/dist/models/certificates.d.ts.map +1 -0
  85. package/dist/models/certificates.js +27 -0
  86. package/dist/models/certificates.js.map +1 -0
  87. package/dist/models/contact.d.ts +47 -0
  88. package/dist/models/contact.d.ts.map +1 -0
  89. package/dist/models/contact.js +30 -0
  90. package/dist/models/contact.js.map +1 -0
  91. package/dist/models/date.d.ts +4 -0
  92. package/dist/models/date.d.ts.map +1 -0
  93. package/dist/models/date.js +10 -0
  94. package/dist/models/date.js.map +1 -0
  95. package/dist/models/demographics.d.ts +290 -0
  96. package/dist/models/demographics.d.ts.map +1 -0
  97. package/dist/models/demographics.js +57 -0
  98. package/dist/models/demographics.js.map +1 -0
  99. package/dist/models/document.d.ts +7823 -0
  100. package/dist/models/document.d.ts.map +1 -0
  101. package/dist/models/document.js +106 -0
  102. package/dist/models/document.js.map +1 -0
  103. package/dist/models/facility.d.ts +82 -0
  104. package/dist/models/facility.d.ts.map +1 -0
  105. package/dist/models/facility.js +11 -0
  106. package/dist/models/facility.js.map +1 -0
  107. package/dist/models/human-name.d.ts +56 -0
  108. package/dist/models/human-name.d.ts.map +1 -0
  109. package/dist/models/human-name.js +39 -0
  110. package/dist/models/human-name.js.map +1 -0
  111. package/dist/models/identifier.d.ts +110 -0
  112. package/dist/models/identifier.d.ts.map +1 -0
  113. package/dist/models/identifier.js +37 -0
  114. package/dist/models/identifier.js.map +1 -0
  115. package/dist/models/organization.d.ts +2390 -0
  116. package/dist/models/organization.d.ts.map +1 -0
  117. package/dist/models/organization.js +139 -0
  118. package/dist/models/organization.js.map +1 -0
  119. package/dist/models/patient-organization.d.ts +36 -0
  120. package/dist/models/patient-organization.d.ts.map +1 -0
  121. package/dist/models/patient-organization.js +10 -0
  122. package/dist/models/patient-organization.js.map +1 -0
  123. package/dist/models/patient.d.ts +5350 -0
  124. package/dist/models/patient.d.ts.map +1 -0
  125. package/dist/models/patient.js +94 -0
  126. package/dist/models/patient.js.map +1 -0
  127. package/dist/models/period.d.ts +13 -0
  128. package/dist/models/period.d.ts.map +1 -0
  129. package/dist/models/period.js +13 -0
  130. package/dist/models/period.js.map +1 -0
  131. package/dist/models/reference.d.ts +109 -0
  132. package/dist/models/reference.d.ts.map +1 -0
  133. package/dist/models/reference.js +12 -0
  134. package/dist/models/reference.js.map +1 -0
  135. package/package.json +82 -0
@@ -0,0 +1,502 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CommonWell = void 0;
7
+ const shared_1 = require("@metriport/shared");
8
+ const axios_1 = require("axios");
9
+ const http_status_1 = __importDefault(require("http-status"));
10
+ const commonwell_error_1 = require("../common/commonwell-error");
11
+ const fileDownload_1 = require("../common/fileDownload");
12
+ const make_jwt_1 = require("../common/make-jwt");
13
+ const util_1 = require("../common/util");
14
+ const date_1 = require("../models/date");
15
+ const document_1 = require("../models/document");
16
+ const patient_1 = require("../models/patient");
17
+ const commonwell_base_1 = require("./commonwell-base");
18
+ /**
19
+ * Implementation of the CommonWell API, v4.
20
+ * @see https://www.commonwellalliance.org/specification/
21
+ */
22
+ class CommonWell extends commonwell_base_1.CommonWellBase {
23
+ /**
24
+ * Creates a new instance of the CommonWell API client pertaining to an
25
+ * organization to make requests on behalf of.
26
+ */
27
+ constructor({ orgCert, rsaPrivateKey, orgName, oid, npi, homeCommunityId, apiMode, authGrantorReferenceOid: authGrantorReference, options = {}, }) {
28
+ super({
29
+ orgCert,
30
+ rsaPrivateKey,
31
+ apiMode,
32
+ options,
33
+ });
34
+ this._orgName = orgName;
35
+ this._oid = oid;
36
+ this._npi = npi;
37
+ this._homeCommunityId = homeCommunityId;
38
+ this._authGrantorReferenceOid = authGrantorReference;
39
+ }
40
+ get oid() {
41
+ return this._oid;
42
+ }
43
+ get npi() {
44
+ return this._npi;
45
+ }
46
+ get orgName() {
47
+ return this._orgName;
48
+ }
49
+ get homeCommunityId() {
50
+ return this._homeCommunityId;
51
+ }
52
+ //--------------------------------------------------------------------------------------------
53
+ // Patient Management
54
+ //--------------------------------------------------------------------------------------------
55
+ /**
56
+ * Register a new patient.
57
+ *
58
+ * @param patient The patient to register.
59
+ * @param options Optional parameters.
60
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
61
+ * @returns The patient collection containing the patient in the first position.
62
+ */
63
+ async createOrUpdatePatient(patient, options) {
64
+ const headers = this.buildQueryHeaders(options?.meta);
65
+ const url = buildPatientEndpoint(this.oid);
66
+ const normalizedPatient = normalizePatient(patient);
67
+ const resp = await this.executeWithRetriesOn500IfEnabled(() => this.api.post(url, normalizedPatient, { headers }), true);
68
+ const parsed = patient_1.patientResponseSchema.parse(resp.data);
69
+ const links = parsed.Patients[0].Links;
70
+ return {
71
+ Links: links,
72
+ status: parsed.status ?? undefined,
73
+ };
74
+ }
75
+ async getPatient(idOrParams, options) {
76
+ let patientId;
77
+ if (typeof idOrParams !== "string") {
78
+ patientId = idOrParams.id;
79
+ const { assignAuthority, assignAuthorityType } = idOrParams;
80
+ patientId = (0, util_1.encodeCwPatientId)({
81
+ patientId,
82
+ assignAuthority,
83
+ assignAuthorityType,
84
+ });
85
+ }
86
+ else {
87
+ if (!idOrParams) {
88
+ throw new Error("Programming error: 'id' is required when providing separate parameters");
89
+ }
90
+ patientId = idOrParams;
91
+ }
92
+ const headers = this.buildQueryHeaders(options?.meta);
93
+ const url = buildPatientEndpoint(this.oid, patientId);
94
+ const resp = await this.executeWithRetriesOn500IfEnabled(() => this.api.get(url, { headers }));
95
+ const parsed = patient_1.patientResponseSchema.parse(resp.data);
96
+ if (parsed.Patients.length > 1) {
97
+ throw new shared_1.MetriportError("Multiple patients found for the given ID", undefined, {
98
+ patientId,
99
+ count: parsed.Patients.length,
100
+ });
101
+ }
102
+ return parsed.Patients[0];
103
+ }
104
+ /**
105
+ * Deletes a patient.
106
+ *
107
+ * @param patientId The patient to be deleted.
108
+ * @param options Optional parameters.
109
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
110
+ */
111
+ async deletePatient(patientId, options) {
112
+ const headers = this.buildQueryHeaders(options?.meta);
113
+ const url = buildPatientEndpoint(this.oid, patientId);
114
+ await this.executeWithRetriesOn500IfEnabled(() => this.api.delete(url, { headers }));
115
+ }
116
+ //--------------------------------------------------------------------------------------------
117
+ // Link Management
118
+ //--------------------------------------------------------------------------------------------
119
+ /**
120
+ * Merges two patients into one.
121
+ *
122
+ * @param nonSurvivingPatientId The local Patient ID of the non-surviving Patient Record (This patient gets replaced).
123
+ * @param survivingPatientId The patient ID of the patient that will replace the non surviving patient
124
+ * @param options Optional parameters.
125
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
126
+ * @returns The patient merge response.
127
+ */
128
+ async mergePatients({ nonSurvivingPatientId, survivingPatientId, }, options) {
129
+ const headers = this.buildQueryHeaders(options?.meta);
130
+ const url = buildPatientMergeEndpoint(this.oid, nonSurvivingPatientId);
131
+ const resp = await this.executeWithRetriesOn500IfEnabled(() => this.api.put(url, {
132
+ link: {
133
+ other: {
134
+ reference: `Patient/${survivingPatientId}`,
135
+ },
136
+ type: "replaced-by",
137
+ },
138
+ }, {
139
+ headers,
140
+ }));
141
+ return patient_1.statusResponseSchema.parse(resp.data);
142
+ }
143
+ /**
144
+ * Returns the links the patient has with other patients.
145
+ *
146
+ * An Edge System can search and request Patient Links by a local patient identifier. The result of the query will
147
+ * include local and remote patient's links that are autolinked by the rules engine or manually linked.
148
+ *
149
+ * The links returned are confirmed links of LOLA 2 or higher.
150
+ *
151
+ * Note, there is no retry logic included for this method, since it's best used with custom logic.
152
+ *
153
+ * @param meta Metadata about the request.
154
+ * @param patientId The person id to be link to a patient.
155
+ * @returns Response with list of links to Patients
156
+ */
157
+ async getPatientLinksByPatientId(patientId, options) {
158
+ const headers = this.buildQueryHeaders(options?.meta);
159
+ const url = buildPatientLinkEndpoint(this.oid, patientId);
160
+ try {
161
+ const resp = await this.api.get(url, { headers });
162
+ return patient_1.patientExistingLinksSchema.parse(resp.data);
163
+ }
164
+ catch (error) {
165
+ throw this.getDescriptiveError(error, "Failed to get patient links by patient id");
166
+ }
167
+ }
168
+ /**
169
+ * Returns the potential links the patient has. Those are links the CommonWell MPI was not
170
+ * confident enough to confirm (LOLA2+), but could potentially be a match in case some of
171
+ * the patient's demographics have changed.
172
+ *
173
+ * An Edge System can request probable patient links by a local patient identifier. MPI will identify probable
174
+ * patients based on MPI match scores that are within a certain threshold range but are not auto matched.
175
+ * Probable matches are determined by probabilistic algorithms. This will enable Edge Systems to confirm
176
+ * additional patient matches across other organizations. On confirmation, the patient will be matched to a
177
+ * person. Probable links need to be manually linked to the local patient before documents can be requested.
178
+ *
179
+ * The links returned are LOLA 1.
180
+ *
181
+ * Note, there is no retry logic included for this method, since it's best used with custom logic.
182
+ *
183
+ * @param patientId The ID of the patient to get probable links for.
184
+ * @returns Response with list of probable (LOLA1) links to other Patients
185
+ */
186
+ async getProbableLinksById(patientId, options) {
187
+ const headers = this.buildQueryHeaders(options?.meta);
188
+ const url = buildProbableLinkEndpoint(this.oid, patientId);
189
+ try {
190
+ const resp = await this.api.get(url, { headers });
191
+ return patient_1.patientProbableLinksRespSchema.parse(resp.data);
192
+ }
193
+ catch (error) {
194
+ throw this.getDescriptiveError(error, "Failed to get probable links by patient id");
195
+ }
196
+ }
197
+ /**
198
+ * Returns the potential links for a patient with the provided demographics.
199
+ *
200
+ * An Edge System can request probable patient links by a local patient identifier. MPI will identify probable
201
+ * patients based on MPI match scores that are within a certain threshold range but are not auto matched.
202
+ * Probable matches are determined by probabilistic algorithms. This will enable Edge Systems to confirm
203
+ * additional patient matches across other organizations. On confirmation, the patient will be matched to a
204
+ * person. Probable links need to be manually linked to the local patient before documents can be requested.
205
+ *
206
+ * The links returned are LOLA 1.
207
+ *
208
+ * @param firstName The first name of the patient.
209
+ * @param lastName The last name of the patient.
210
+ * @param dob The date of birth of the patient.
211
+ * @param gender The gender of the patient.
212
+ * @param zip The zip code of the patient.
213
+ * @param options Optional parameters.
214
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
215
+ * @returns Response with list of probable (LOLA1) links to existing Patients
216
+ */
217
+ async getProbableLinksByDemographics({ firstName, lastName, dob, gender, zip, }, options) {
218
+ const headers = this.buildQueryHeaders(options?.meta);
219
+ const params = new URLSearchParams();
220
+ params.append("fname", firstName);
221
+ params.append("lname", lastName);
222
+ params.append("dob", dob);
223
+ params.append("gender", gender);
224
+ params.append("zip", zip);
225
+ const url = buildProbableLinkEndpoint(this.oid);
226
+ const resp = await this.executeWithRetriesOn500IfEnabled(() => this.api.get(url + `?${params.toString()}`, { headers }));
227
+ return patient_1.patientProbableLinksRespSchema.parse(resp.data);
228
+ }
229
+ /**
230
+ * An Edge System reviews the probable matches. An Edge System can link remote patient(s) if these patients are
231
+ * the same as local patient.
232
+ *
233
+ * Use getPatientLinksByPatientId to get the Link URL.
234
+ *
235
+ * Remote patients will be linked with the local patient and now considered as a manual confirmed LOLA 2 link.
236
+ *
237
+ * @param urlToLinkPatients The URL to link the patients.
238
+ * @param options Optional parameters.
239
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
240
+ */
241
+ async linkPatients(urlToLinkPatients, options) {
242
+ const headers = this.buildQueryHeaders(options?.meta);
243
+ const resp = await this.executeWithRetriesOn500IfEnabled(() => this.api.put(urlToLinkPatients, {}, { headers }));
244
+ return patient_1.statusResponseSchema.parse(resp.data);
245
+ }
246
+ /**
247
+ * After reviewing remote patient links for their local patient, an Edge System can unlink a remote patient that
248
+ * does not belong in the Patient collection and remove the existing LOLA2 network link.
249
+ *
250
+ * Use getPatientLinksByPatientId to get the Unlink URL.
251
+ *
252
+ * Patient Links that are manually unlinked will no longer be autolinked to the same patient in the future by the
253
+ * matching algorithm.
254
+ *
255
+ * @param urlToUnlinkPatients The URL to unlink the patients.
256
+ * @param options Optional parameters.
257
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
258
+ */
259
+ async unlinkPatients(urlToUnlinkPatients, options) {
260
+ const headers = this.buildQueryHeaders(options?.meta);
261
+ const resp = await this.executeWithRetriesOn500IfEnabled(() => this.api.put(urlToUnlinkPatients, {}, { headers }));
262
+ return patient_1.statusResponseSchema.parse(resp.data);
263
+ }
264
+ /**
265
+ * Edge Systems can perform a “reset” to a Patient which will detach all LOLA 2 links to the specified Patient. This
266
+ * patient may be linked to the same collection of Patients (Person) again in the future.
267
+ *
268
+ * Use getPatientLinksByPatientId to get the ResetLink URL.
269
+ *
270
+ * @param urlToResetPatientLinks The URL to reset the patient links.
271
+ * @param options Optional parameters.
272
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
273
+ */
274
+ async resetPatientLinks(urlToResetPatientLinks, options) {
275
+ const headers = this.buildQueryHeaders(options?.meta);
276
+ const resp = await this.executeWithRetriesOn500IfEnabled(() => this.api.put(urlToResetPatientLinks, {}, { headers }));
277
+ return patient_1.statusResponseSchema.parse(resp.data);
278
+ }
279
+ //--------------------------------------------------------------------------------------------
280
+ // Document Management
281
+ //--------------------------------------------------------------------------------------------
282
+ async queryDocumentsInternal(patientId, options
283
+ //eslint-disable-next-line @typescript-eslint/no-explicit-any
284
+ ) {
285
+ const { meta, ...params } = options ?? {};
286
+ const headers = this.buildQueryHeaders(meta);
287
+ const actualParams = {
288
+ ...params,
289
+ status: options?.status ?? "current",
290
+ };
291
+ const subjectId = (0, util_1.encodePatientIdForDocumentExchange)(patientId);
292
+ if (!subjectId) {
293
+ throw new commonwell_error_1.CommonwellError(`Could not determine subject ID for document query`, undefined, {
294
+ patientId,
295
+ });
296
+ }
297
+ const url = buildDocumentQueryUrl(subjectId, actualParams);
298
+ const response = await this.executeWithRetriesOn500IfEnabled(() => this.api.get(url, { headers }));
299
+ return response.data;
300
+ }
301
+ /**
302
+ * Queries a patient's Documents. Returns only documents.
303
+ *
304
+ * @param patientId The patient's ID.
305
+ * @param options Query parameters and query parameters.
306
+ * @param options.status The status of the document. Defaults to `current`, even if a param is
307
+ * provided without status.
308
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
309
+ * @returns an array of DocumentReference FHIR resources.
310
+ */
311
+ async queryDocuments(patientId, options) {
312
+ const response = await this.queryDocumentsInternal(patientId, options);
313
+ const entry = document_1.documentQueryResponseSchema.parse(response).entry;
314
+ return entry?.flatMap(entry => entry.resource ?? []) ?? [];
315
+ }
316
+ /**
317
+ * Queries a patient's Documents. Returns documents and errors from the fanout to other gateways.
318
+ *
319
+ * @param patientId The patient's ID.
320
+ * @param options Query parameters and query parameters.
321
+ * @param options.status The status of the document. Defaults to `current`, even if a param is
322
+ * provided without status.
323
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
324
+ * @returns a Bundle containing DocumentReferences of a patient's available DocumentReferences
325
+ * and/or OperationOutcomes denoting problems with the query.
326
+ */
327
+ async queryDocumentsFull(patientId, options) {
328
+ const response = await this.queryDocumentsInternal(patientId, options);
329
+ return document_1.documentQueryFullResponseSchema.parse(response);
330
+ }
331
+ /**
332
+ * Retrieve a Document and send its bytes to the outputStream.
333
+ *
334
+ * @param inputUrl The URL of the file to be downloaded. Obtained from a DocumentReference that
335
+ * was retrieved from a previous call to `queryDocuments`.
336
+ * @param outputStream The stream to receive the downloaded file's bytes.
337
+ * @param options Optional parameters.
338
+ * @param options.meta Metadata about the request. Defaults to the data used to initialize the client.
339
+ * @returns The content type and size of the downloaded file.
340
+ */
341
+ async retrieveDocument(inputUrl, outputStream, options) {
342
+ const headers = this.buildQueryHeaders(options?.meta);
343
+ try {
344
+ const binary = await this.executeWithRetriesOn500IfEnabled(() => (0, fileDownload_1.downloadFileInMemory)({
345
+ url: inputUrl,
346
+ client: this.api,
347
+ responseType: "json",
348
+ headers,
349
+ }));
350
+ if (typeof binary === "string") {
351
+ try {
352
+ const dataBuffer = (0, shared_1.base64ToBuffer)(binary);
353
+ outputStream.write(dataBuffer);
354
+ outputStream.end();
355
+ return { contentType: "application/xml", size: dataBuffer.byteLength };
356
+ }
357
+ catch (error) {
358
+ // Continue with the flow...
359
+ }
360
+ }
361
+ const errorMessage = "Invalid binary contents";
362
+ if (!("resourceType" in binary)) {
363
+ throw new commonwell_error_1.CommonwellError(errorMessage, undefined, { reason: "Missing resourceType" });
364
+ }
365
+ const resourceType = binary.resourceType;
366
+ if (typeof resourceType !== "string" || resourceType !== "Binary") {
367
+ throw new commonwell_error_1.CommonwellError(errorMessage, undefined, { reason: "Invalid resourceType" });
368
+ }
369
+ const contentType = binary.contentType;
370
+ if (!contentType || typeof contentType !== "string") {
371
+ throw new commonwell_error_1.CommonwellError(errorMessage, undefined, {
372
+ reason: "Missing or invalid contentType",
373
+ contentType,
374
+ });
375
+ }
376
+ const data = binary.data;
377
+ if (!data) {
378
+ throw new commonwell_error_1.CommonwellError(errorMessage, undefined, {
379
+ reason: "Missing data",
380
+ contentType,
381
+ resourceType,
382
+ properties: typeof binary === "object" && binary != null
383
+ ? Object.keys(binary).join(", ")
384
+ : "not-an-object",
385
+ inputUrl,
386
+ });
387
+ }
388
+ const dataBuffer = (0, shared_1.base64ToBuffer)(data);
389
+ outputStream.write(dataBuffer);
390
+ return { contentType, size: dataBuffer.byteLength };
391
+ }
392
+ catch (error) {
393
+ throw this.getDescriptiveError(error, "Failed to download document");
394
+ }
395
+ finally {
396
+ outputStream.end();
397
+ }
398
+ }
399
+ //--------------------------------------------------------------------------------------------
400
+ // Private methods
401
+ //--------------------------------------------------------------------------------------------
402
+ buildQueryHeaders(metaParam) {
403
+ const meta = metaParam ?? this.buildOrganizationQueryMeta();
404
+ const jwt = (0, make_jwt_1.makeJwt)({
405
+ rsaPrivateKey: this.rsaPrivateKey,
406
+ role: meta.role,
407
+ subjectId: meta.subjectId,
408
+ orgName: this.orgName,
409
+ oid: this.oid,
410
+ purposeOfUse: meta.purposeOfUse,
411
+ npi: meta.npi,
412
+ authGrantorReference: meta.authGrantorReference,
413
+ });
414
+ return { Authorization: `Bearer ${jwt}` };
415
+ }
416
+ buildOrganizationQueryMeta() {
417
+ const base = (0, util_1.buildBaseQueryMeta)(this.orgName);
418
+ return {
419
+ ...base,
420
+ npi: this.npi,
421
+ ...(this._authGrantorReferenceOid
422
+ ? { authGrantorReference: this._authGrantorReferenceOid }
423
+ : {}),
424
+ };
425
+ }
426
+ getDescriptiveError(error, title) {
427
+ if ((0, axios_1.isAxiosError)(error)) {
428
+ const status = error.response?.status;
429
+ const data = isOperationOutcome(error.response?.data)
430
+ ? getPrimaryIssueDetails(error.response?.data.issue)
431
+ : undefined;
432
+ const cwReference = this.lastTransactionId;
433
+ const additionalInfo = { status, cwReference, ...data };
434
+ if (status === http_status_1.default.BAD_REQUEST) {
435
+ return new shared_1.BadRequestError(title, error, additionalInfo);
436
+ }
437
+ if (status === http_status_1.default.NOT_FOUND) {
438
+ return new shared_1.NotFoundError(title, error, additionalInfo);
439
+ }
440
+ return new shared_1.MetriportError(title, error, additionalInfo);
441
+ }
442
+ return error;
443
+ }
444
+ }
445
+ exports.CommonWell = CommonWell;
446
+ function isOperationOutcome(data) {
447
+ return (typeof data === "object" &&
448
+ data != null &&
449
+ "resourceType" in data &&
450
+ data.resourceType === "OperationOutcome");
451
+ }
452
+ function getPrimaryIssueDetails(issue) {
453
+ const primaryIssue = issue?.[0];
454
+ if (!primaryIssue)
455
+ return undefined;
456
+ return {
457
+ code: primaryIssue.code,
458
+ severity: primaryIssue.severity ?? "error",
459
+ diagnostics: primaryIssue.diagnostics ?? primaryIssue.details?.text ?? "Unknown error",
460
+ };
461
+ }
462
+ function buildOrgEndpoint(orgId) {
463
+ return `/v2/org/${orgId}`;
464
+ }
465
+ function buildPatientEndpoint(orgId, patientId) {
466
+ return `${buildOrgEndpoint(orgId)}/Patient${patientId ? `/${patientId}` : ""}`;
467
+ }
468
+ function buildPatientLinkEndpoint(orgId, patientId) {
469
+ return `${buildOrgEndpoint(orgId)}/PatientLink/${patientId}`;
470
+ }
471
+ function buildProbableLinkEndpoint(orgId, patientId) {
472
+ return `${buildOrgEndpoint(orgId)}/ProbableLink${patientId ? `/${patientId}` : ""}`;
473
+ }
474
+ function buildPatientMergeEndpoint(orgId, nonSurvivingPatientId) {
475
+ return `${buildPatientEndpoint(orgId, nonSurvivingPatientId)}/Merge`;
476
+ }
477
+ function buildDocumentQueryUrl(patientId, params) {
478
+ const urlParams = new URLSearchParams();
479
+ urlParams.append("patient.identifier", patientId);
480
+ if (params.status)
481
+ urlParams.append("status", params.status);
482
+ if (params.author?.given)
483
+ urlParams.append("author.given", params.author.given);
484
+ if (params.author?.family)
485
+ urlParams.append("author.family", params.author.family);
486
+ if (params.period?.start)
487
+ urlParams.append("period.start", params.period.start);
488
+ if (params.period?.end)
489
+ urlParams.append("period.end", params.period.end);
490
+ if (params.date?.start)
491
+ urlParams.append("date.start", params.date.start);
492
+ if (params.date?.end)
493
+ urlParams.append("date.end", params.date.end);
494
+ return `/v2/R4/DocumentReference?${urlParams.toString()}`;
495
+ }
496
+ function normalizePatient(patient) {
497
+ return {
498
+ ...patient,
499
+ ...(patient.birthDate ? { birthDate: (0, date_1.normalizeDatetime)(patient.birthDate) } : {}),
500
+ };
501
+ }
502
+ //# sourceMappingURL=commonwell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commonwell.js","sourceRoot":"","sources":["../../src/client/commonwell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=util.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.test.d.ts","sourceRoot":"","sources":["../../../src/common/__tests__/util.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable @typescript-eslint/no-empty-function */
4
+ const util_1 = require("../util");
5
+ describe("util", () => {
6
+ describe("decodeCwPatientId", () => {
7
+ it("returns decoded patient id with all components when valid", async () => {
8
+ const res = (0, util_1.decodeCwPatientIdV2)("601^^^&2.16.840.1.113883.3.2611.9.99.101.1&ISO");
9
+ expect(res).toBeTruthy();
10
+ expect(res.value).toBe("601");
11
+ expect(res.assignAuthority).toBe("2.16.840.1.113883.3.2611.9.99.101.1");
12
+ expect(res.assignAuthorityType).toBe("ISO");
13
+ });
14
+ it("returns value and assignAuthority when assignAuthType is not provided", async () => {
15
+ const res = (0, util_1.decodeCwPatientIdV2)("601^^^&2.16.840.1.113883.3.2611.9.99.101.1");
16
+ expect(res).toBeTruthy();
17
+ expect(res.value).toBe("601");
18
+ expect(res.assignAuthority).toBe("2.16.840.1.113883.3.2611.9.99.101.1");
19
+ expect(res.assignAuthorityType).toBeUndefined();
20
+ });
21
+ it("doesnt return value when assignAuthority is not provided", async () => {
22
+ const res = (0, util_1.decodeCwPatientIdV2)("601^^^&&ISO");
23
+ expect(res).toBeTruthy();
24
+ expect(res.value).toBeUndefined();
25
+ expect(res.assignAuthority).toBeUndefined();
26
+ expect(res.assignAuthorityType).toBeUndefined();
27
+ });
28
+ it("doesnt return value when assignAuthority and assignAuthType are not provided", async () => {
29
+ const res = (0, util_1.decodeCwPatientIdV2)("601^^^");
30
+ expect(res).toBeTruthy();
31
+ expect(res.value).toBeUndefined();
32
+ expect(res.assignAuthority).toBeUndefined();
33
+ expect(res.assignAuthorityType).toBeUndefined();
34
+ });
35
+ it("doesnt return assigningAuthority when value is not provided", async () => {
36
+ const res = (0, util_1.decodeCwPatientIdV2)("^^^&2.16.840.1.113883.3.2611.9.99.101.1&ISO");
37
+ expect(res).toBeTruthy();
38
+ expect(res.value).toBeUndefined();
39
+ expect(res.assignAuthority).toBeUndefined();
40
+ expect(res.assignAuthorityType).toBeUndefined();
41
+ });
42
+ it("returns emtpy object when value is empty string", async () => {
43
+ const res = (0, util_1.decodeCwPatientIdV2)("");
44
+ expect(res).toBeTruthy();
45
+ expect(res.value).toBeUndefined();
46
+ expect(res.assignAuthority).toBeUndefined();
47
+ expect(res.assignAuthorityType).toBeUndefined();
48
+ });
49
+ });
50
+ });
51
+ //# sourceMappingURL=util.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.test.js","sourceRoot":"","sources":["../../../src/common/__tests__/util.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validate-npi.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-npi.test.d.ts","sourceRoot":"","sources":["../../../src/common/__tests__/validate-npi.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable @typescript-eslint/no-empty-function */
4
+ const faker_1 = require("@faker-js/faker");
5
+ const validate_npi_1 = require("../validate-npi");
6
+ const validNPIs = [
7
+ "2974324529",
8
+ "1407080450",
9
+ "1053415810",
10
+ "1730961061",
11
+ "1427836782",
12
+ "1447933353",
13
+ "1013414374",
14
+ "1831886555",
15
+ "1649966466",
16
+ "1285017277",
17
+ "1093408148",
18
+ "1104925569",
19
+ ];
20
+ describe("validateNPI", () => {
21
+ it("returns false when undefined", async () => {
22
+ const res = (0, validate_npi_1.validateNPI)(undefined);
23
+ expect(res).toBeFalsy();
24
+ });
25
+ it("returns false when empty string", async () => {
26
+ const npi = "";
27
+ const res = (0, validate_npi_1.validateNPI)(npi);
28
+ expect(res).toBeFalsy();
29
+ });
30
+ it("returns false when alpha string", async () => {
31
+ const npi = faker_1.faker.lorem.word();
32
+ const res = (0, validate_npi_1.validateNPI)(npi);
33
+ expect(res).toBeFalsy();
34
+ });
35
+ describe("returns true for valid NPI", () => {
36
+ for (const npi of validNPIs) {
37
+ it(` - npi ${npi}`, async () => {
38
+ const res = (0, validate_npi_1.validateNPI)(npi);
39
+ expect(res).toBeTruthy();
40
+ });
41
+ }
42
+ });
43
+ });
44
+ //# sourceMappingURL=validate-npi.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-npi.test.js","sourceRoot":"","sources":["../../../src/common/__tests__/validate-npi.test.ts"],"names":[],"mappings":";;AAAA,yDAAyD;AACzD,2CAAwC;AACxC,kDAA8C;AAE9C,MAAM,SAAS,GAAa;IAC1B,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;CACb,CAAC;AAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,SAA8B,CAAC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,GAAG,GAAG,aAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;YAC3B,EAAE,CAAC,UAAU,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE;gBAC7B,MAAM,GAAG,GAAG,IAAA,0BAAW,EAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Certificate } from "../models/certificates";
2
+ export declare function normalizeCertificate(certificate: Certificate): Certificate;
3
+ //# sourceMappingURL=certificate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"certificate.d.ts","sourceRoot":"","sources":["../../src/common/certificate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAK1E"}