@metriport/api-sdk 14.0.4 → 14.0.5-alpha.0

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 (25) hide show
  1. package/dist/__tests__/env-setup.d.ts +2 -0
  2. package/dist/__tests__/env-setup.d.ts.map +1 -0
  3. package/dist/__tests__/env-setup.js +35 -0
  4. package/dist/__tests__/env-setup.js.map +1 -0
  5. package/dist/devices/client/__tests__/metriport.test.d.ts +2 -0
  6. package/dist/devices/client/__tests__/metriport.test.d.ts.map +1 -0
  7. package/dist/devices/client/__tests__/metriport.test.js +26 -0
  8. package/dist/devices/client/__tests__/metriport.test.js.map +1 -0
  9. package/dist/medical/client/__tests__/metriport.test.d.ts +2 -0
  10. package/dist/medical/client/__tests__/metriport.test.d.ts.map +1 -0
  11. package/dist/medical/client/__tests__/metriport.test.e2e.d.ts +2 -0
  12. package/dist/medical/client/__tests__/metriport.test.e2e.d.ts.map +1 -0
  13. package/dist/medical/client/__tests__/metriport.test.e2e.js +158 -0
  14. package/dist/medical/client/__tests__/metriport.test.e2e.js.map +1 -0
  15. package/dist/medical/client/__tests__/metriport.test.js +86 -0
  16. package/dist/medical/client/__tests__/metriport.test.js.map +1 -0
  17. package/dist/medical/models/__tests__/contact.d.ts +3 -0
  18. package/dist/medical/models/__tests__/contact.d.ts.map +1 -0
  19. package/dist/medical/models/__tests__/contact.js +12 -0
  20. package/dist/medical/models/__tests__/contact.js.map +1 -0
  21. package/dist/medical/models/__tests__/demographics.test.d.ts +2 -0
  22. package/dist/medical/models/__tests__/demographics.test.d.ts.map +1 -0
  23. package/dist/medical/models/__tests__/demographics.test.js +57 -0
  24. package/dist/medical/models/__tests__/demographics.test.js.map +1 -0
  25. package/package.json +4 -4
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=env-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/env-setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const dotenv = __importStar(require("dotenv"));
30
+ const path_1 = __importDefault(require("path"));
31
+ const cwd = process.cwd();
32
+ const paths = [cwd, ...(cwd.includes("packages") ? [] : ["packages", "api-sdk"])];
33
+ dotenv.config({ path: path_1.default.resolve(...paths, ".env") });
34
+ // Keep dotenv import and config before everything else
35
+ //# sourceMappingURL=env-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-setup.js","sourceRoot":"","sources":["../../src/__tests__/env-setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,gDAAwB;AACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1B,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACxD,uDAAuD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metriport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metriport.test.d.ts","sourceRoot":"","sources":["../../../../src/devices/client/__tests__/metriport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
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
+ const jest_mock_1 = require("jest-mock");
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const metriport_1 = require("../metriport");
9
+ const faker_1 = require("@faker-js/faker");
10
+ jest.mock("axios");
11
+ describe("getMetriportUserId", () => {
12
+ const userId = faker_1.faker.string.uuid();
13
+ const apiKey = faker_1.faker.string.uuid();
14
+ const mockedAxios = (0, jest_mock_1.mocked)(axios_1.default);
15
+ it("returns the userId", async () => {
16
+ const metriportClient = new metriport_1.MetriportDevicesApi(apiKey);
17
+ metriportClient["api"] = mockedAxios;
18
+ jest.spyOn(metriportClient, "getMetriportUserId");
19
+ mockedAxios.post.mockResolvedValueOnce({ data: { userId } });
20
+ const result = await metriportClient.getMetriportUserId(userId);
21
+ expect(mockedAxios.post).toHaveBeenCalledTimes(1);
22
+ expect(axios_1.default.post).toHaveBeenCalledWith(`/user`, null, { params: { appUserId: userId } });
23
+ expect(result).toEqual(userId);
24
+ });
25
+ });
26
+ //# sourceMappingURL=metriport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metriport.test.js","sourceRoot":"","sources":["../../../../src/devices/client/__tests__/metriport.test.ts"],"names":[],"mappings":";;;;;AAAA,yCAAmC;AACnC,kDAA0B;AAC1B,4CAAmD;AACnD,2CAAwC;AAExC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEnB,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,MAAM,MAAM,GAAG,aAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,aAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,IAAA,kBAAM,EAAC,eAAK,CAAC,CAAC;IAElC,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,eAAe,GAAG,IAAI,+BAAmB,CAAC,MAAM,CAAC,CAAC;QAExD,eAAe,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QAErC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;QAElD,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEhE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,eAAK,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metriport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metriport.test.d.ts","sourceRoot":"","sources":["../../../../src/medical/client/__tests__/metriport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metriport.test.e2e.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metriport.test.e2e.d.ts","sourceRoot":"","sources":["../../../../src/medical/client/__tests__/metriport.test.e2e.ts"],"names":[],"mappings":""}
@@ -0,0 +1,158 @@
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
+ /* eslint-disable @typescript-eslint/no-empty-function */
7
+ const dayjs_1 = __importDefault(require("dayjs"));
8
+ const uuid_1 = require("uuid");
9
+ const shared_1 = require("../../../shared");
10
+ const metriport_1 = require("../metriport");
11
+ jest.setTimeout(15000);
12
+ const METRIPORT = "METRIPORT";
13
+ const COMMONWELL = "COMMONWELL";
14
+ const CAREQUALITY = "CAREQUALITY";
15
+ const apiKey = (0, shared_1.getEnvVarOrFail)("TEST_API_KEY");
16
+ const baseAddress = (0, shared_1.getEnvVarOrFail)("API_URL");
17
+ const patientId = (0, shared_1.getEnvVar)("TEST_PATIENT_ID");
18
+ const metriport = new metriport_1.MetriportMedicalApi(apiKey, { baseAddress });
19
+ describe("listDocuments", () => {
20
+ if (!patientId) {
21
+ console.log(`Missing TEST_PATIENT_ID env var, SKIPPING the listDocuments related E2E TESTS!!!`);
22
+ it.skip("skipping e2e tests", () => { });
23
+ return;
24
+ }
25
+ // TODO we should have a beforeAll()/afterAll() to setup/teardown the test data
26
+ // so the result of the tests is more deterministic.
27
+ // As an alternative, could move these to the API's metriport.test.e2e.ts
28
+ it("returns documents when no filters", async () => {
29
+ const { documents } = await metriport.listDocuments(patientId);
30
+ expect(documents).toBeTruthy();
31
+ expect(documents.length).toBeGreaterThanOrEqual(1);
32
+ });
33
+ it("returns no documents when dateFrom is future", async () => {
34
+ const filters = { dateFrom: (0, dayjs_1.default)().add(3, "day").format(shared_1.ISO_DATE) };
35
+ const { documents } = await metriport.listDocuments(patientId, filters);
36
+ expect(documents).toBeTruthy();
37
+ expect(documents.length).toEqual(0);
38
+ });
39
+ it("returns no documents when dateTo is ancient", async () => {
40
+ const filters = {
41
+ dateTo: (0, dayjs_1.default)().subtract(100, "years").format(shared_1.ISO_DATE),
42
+ };
43
+ const { documents } = await metriport.listDocuments(patientId, filters);
44
+ expect(documents).toBeTruthy();
45
+ expect(documents.length).toEqual(0);
46
+ });
47
+ it("returns documents when dateFrom is past", async () => {
48
+ const filters = {
49
+ dateFrom: (0, dayjs_1.default)().subtract(10, "years").format(shared_1.ISO_DATE),
50
+ };
51
+ const { documents } = await metriport.listDocuments(patientId, filters);
52
+ expect(documents).toBeTruthy();
53
+ expect(documents.length).toBeGreaterThanOrEqual(1);
54
+ });
55
+ it("converts dateFrom Date to ISO string", async () => {
56
+ const filters = {
57
+ dateFrom: (0, dayjs_1.default)().subtract(10, "years").toDate(),
58
+ };
59
+ const { documents } = await metriport.listDocuments(patientId, filters);
60
+ expect(documents).toBeTruthy();
61
+ expect(documents.length).toBeGreaterThanOrEqual(1);
62
+ });
63
+ it("returns documents when dateTo is today", async () => {
64
+ const filters = {
65
+ dateTo: (0, dayjs_1.default)().format(shared_1.ISO_DATE),
66
+ };
67
+ const { documents } = await metriport.listDocuments(patientId, filters);
68
+ expect(documents).toBeTruthy();
69
+ expect(documents.length).toBeGreaterThanOrEqual(1);
70
+ });
71
+ it("converts dateFrom Date to ISO string", async () => {
72
+ const filters = {
73
+ dateTo: new Date(),
74
+ };
75
+ const { documents } = await metriport.listDocuments(patientId, filters);
76
+ expect(documents).toBeTruthy();
77
+ expect(documents.length).toBeGreaterThanOrEqual(1);
78
+ });
79
+ it("returns documents filtering by content", async () => {
80
+ const filters = {
81
+ content: "org",
82
+ };
83
+ const { documents } = await metriport.listDocuments(patientId, filters);
84
+ expect(documents).toBeTruthy();
85
+ expect(documents.length).toBeGreaterThanOrEqual(1);
86
+ });
87
+ it("does not return documents filtering by unknown content", async () => {
88
+ const filters = {
89
+ content: (0, uuid_1.v4)(),
90
+ };
91
+ const { documents } = await metriport.listDocuments(patientId, filters);
92
+ expect(documents).toBeTruthy();
93
+ expect(documents.length).toEqual(0);
94
+ });
95
+ it("fails if content filter is less than 3 chars", async () => {
96
+ const filters = {
97
+ content: "jo",
98
+ };
99
+ await expect(metriport.listDocuments(patientId, filters)).rejects.toThrow();
100
+ });
101
+ it("returns documents when all filters are combined", async () => {
102
+ const filters = {
103
+ dateFrom: (0, dayjs_1.default)().subtract(10, "years").format(shared_1.ISO_DATE),
104
+ dateTo: (0, dayjs_1.default)().add(1, "day").format(shared_1.ISO_DATE),
105
+ content: "org",
106
+ };
107
+ const { documents } = await metriport.listDocuments(patientId, filters);
108
+ expect(documents).toBeTruthy();
109
+ expect(documents.length).toBeGreaterThanOrEqual(1);
110
+ });
111
+ it("returns document in FHIR format", async () => {
112
+ const filters = {
113
+ dateFrom: (0, dayjs_1.default)().subtract(10, "years").format(shared_1.ISO_DATE),
114
+ dateTo: (0, dayjs_1.default)().add(1, "day").format(shared_1.ISO_DATE),
115
+ };
116
+ const { documents } = await metriport.listDocuments(patientId, filters);
117
+ expect(documents).toBeTruthy();
118
+ expect(documents.length).toBeGreaterThanOrEqual(1);
119
+ const doc = documents[0];
120
+ expect(doc.resourceType).toEqual("DocumentReference");
121
+ expect(doc.id).toBeTruthy();
122
+ expect(doc.meta).toBeTruthy();
123
+ expect(doc.contained).toBeTruthy();
124
+ expect(doc.extension).toBeTruthy();
125
+ expect(doc.masterIdentifier).toBeTruthy();
126
+ expect(doc.identifier).toBeTruthy();
127
+ expect(doc.status).toBeTruthy();
128
+ expect(doc.type).toBeTruthy();
129
+ expect(doc.date).toBeTruthy();
130
+ expect(doc.author).toBeTruthy();
131
+ expect(doc.content).toBeTruthy();
132
+ });
133
+ it("only returns doc refs from Metriport and HIEs", async () => {
134
+ const expectedExtensionCodes = [METRIPORT, COMMONWELL, CAREQUALITY];
135
+ const { documents } = await metriport.listDocuments(patientId);
136
+ expect(documents).toBeTruthy();
137
+ expect(documents.length).toBeGreaterThanOrEqual(1);
138
+ const docsWithValidExtensions = documents.filter(doc => {
139
+ const contains = doc.extension?.filter(e => e.valueCoding?.code && expectedExtensionCodes.includes(e.valueCoding?.code));
140
+ return contains && contains.length > 0;
141
+ }).length;
142
+ expect(docsWithValidExtensions).toEqual(documents.length);
143
+ });
144
+ it("returns documents as DTO", async () => {
145
+ const documents = await metriport.listDocumentsAsDTO(patientId);
146
+ expect(documents).toBeTruthy();
147
+ expect(documents.length).toBeGreaterThanOrEqual(1);
148
+ const doc = documents[0];
149
+ expect(doc.id).toBeTruthy();
150
+ expect(doc.description).toBeTruthy();
151
+ expect(doc.fileName).toBeTruthy();
152
+ expect(doc.type).toBeTruthy();
153
+ expect(doc.status).toBeTruthy();
154
+ expect(doc.mimeType).toBeTruthy();
155
+ expect(doc.size).toBeTruthy();
156
+ });
157
+ });
158
+ //# sourceMappingURL=metriport.test.e2e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metriport.test.e2e.js","sourceRoot":"","sources":["../../../../src/medical/client/__tests__/metriport.test.e2e.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
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
+ /* eslint-disable @typescript-eslint/no-empty-function */
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const metriport_1 = require("../metriport");
9
+ describe("api-sdk client", () => {
10
+ describe("verifyWebhookSignature", () => {
11
+ const webhookKey = "testWebhookKey";
12
+ function generateValidSignature(key, body) {
13
+ return crypto_1.default.createHmac("sha256", key).update(body).digest("hex");
14
+ }
15
+ it("returns true for a valid signature with body as string", () => {
16
+ const validBody = JSON.stringify({ event: "test_event" });
17
+ const validSignature = generateValidSignature(webhookKey, validBody);
18
+ const result = metriport_1.MetriportMedicalApi.verifyWebhookSignature(webhookKey, validBody, validSignature);
19
+ expect(result).toBe(true);
20
+ });
21
+ it("returns true for a valid signature with body as Buffer", () => {
22
+ const validBody = Buffer.from(JSON.stringify({ event: "test_event" }));
23
+ const validSignature = generateValidSignature(webhookKey, validBody.toString());
24
+ const result = metriport_1.MetriportMedicalApi.verifyWebhookSignature(webhookKey, validBody, validSignature);
25
+ expect(result).toBe(true);
26
+ });
27
+ it("throws when body is not a string or Buffer", () => {
28
+ const validBody = { event: "test_event" };
29
+ const invalidSignature = "invalid_signature";
30
+ expect(() => metriport_1.MetriportMedicalApi.verifyWebhookSignature(webhookKey, validBody, invalidSignature)).toThrow("Body must be a string or Buffer");
31
+ });
32
+ it("returns false for an invalid signature", () => {
33
+ const validBody = JSON.stringify({ event: "test_event" });
34
+ const invalidSignature = "invalid_signature";
35
+ const result = metriport_1.MetriportMedicalApi.verifyWebhookSignature(webhookKey, validBody, invalidSignature);
36
+ expect(result).toBe(false);
37
+ });
38
+ it("returns false when body is modified", () => {
39
+ const validBody = JSON.stringify({ event: "test_event" });
40
+ const validSignature = generateValidSignature(webhookKey, validBody);
41
+ const modifiedBody = JSON.stringify({ event: "modified_event" });
42
+ const result = metriport_1.MetriportMedicalApi.verifyWebhookSignature(webhookKey, modifiedBody, validSignature);
43
+ expect(result).toBe(false);
44
+ });
45
+ it("returns false when webhook key is incorrect", () => {
46
+ const validBody = JSON.stringify({ event: "test_event" });
47
+ const validSignature = generateValidSignature(webhookKey, validBody);
48
+ const incorrectKey = "incorrectWebhookKey";
49
+ const result = metriport_1.MetriportMedicalApi.verifyWebhookSignature(incorrectKey, validBody, validSignature);
50
+ expect(result).toBe(false);
51
+ });
52
+ describe("uses timingSafeEqual", () => {
53
+ const validBody = JSON.stringify({ event: "test_event" });
54
+ const validSignature = generateValidSignature(webhookKey, validBody);
55
+ let mockTimingSafeEqual;
56
+ beforeAll(() => {
57
+ jest.restoreAllMocks();
58
+ mockTimingSafeEqual = jest.fn();
59
+ jest.spyOn(crypto_1.default, "timingSafeEqual").mockImplementation(mockTimingSafeEqual);
60
+ jest.spyOn(crypto_1.default, "createHmac").mockReturnValue({
61
+ update: jest.fn().mockReturnThis(),
62
+ digest: jest.fn().mockReturnValue(validSignature),
63
+ }); // eslint-disable-line @typescript-eslint/no-explicit-any
64
+ });
65
+ beforeEach(() => {
66
+ jest.clearAllMocks();
67
+ });
68
+ afterAll(() => {
69
+ jest.restoreAllMocks();
70
+ });
71
+ it("uses crypto.timingSafeEqual for comparison", () => {
72
+ mockTimingSafeEqual.mockReturnValueOnce(true);
73
+ const result = metriport_1.MetriportMedicalApi.verifyWebhookSignature(webhookKey, validBody, validSignature);
74
+ expect(mockTimingSafeEqual).toHaveBeenCalled();
75
+ expect(result).toBe(true);
76
+ });
77
+ it("returns false when timingSafeEqual returns false", () => {
78
+ mockTimingSafeEqual.mockReturnValueOnce(false);
79
+ const result = metriport_1.MetriportMedicalApi.verifyWebhookSignature(webhookKey, validBody, validSignature);
80
+ expect(mockTimingSafeEqual).toHaveBeenCalled();
81
+ expect(result).toBe(false);
82
+ });
83
+ });
84
+ });
85
+ });
86
+ //# sourceMappingURL=metriport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metriport.test.js","sourceRoot":"","sources":["../../../../src/medical/client/__tests__/metriport.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Contact } from "../demographics";
2
+ export declare function makeContact(params?: Partial<Contact>): Contact;
3
+ //# sourceMappingURL=contact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact.d.ts","sourceRoot":"","sources":["../../../../src/medical/models/__tests__/contact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,wBAAgB,WAAW,CAAC,MAAM,GAAE,OAAO,CAAC,OAAO,CAAM,GAAG,OAAO,CAKlE"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeContact = void 0;
4
+ const faker_1 = require("@faker-js/faker");
5
+ function makeContact(params = {}) {
6
+ return {
7
+ phone: params.phone ?? faker_1.faker.phone.number("##########"),
8
+ email: params.email ?? faker_1.faker.internet.email(),
9
+ };
10
+ }
11
+ exports.makeContact = makeContact;
12
+ //# sourceMappingURL=contact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact.js","sourceRoot":"","sources":["../../../../src/medical/models/__tests__/contact.ts"],"names":[],"mappings":";;;AACA,2CAAwC;AAExC,SAAgB,WAAW,CAAC,SAA2B,EAAE;IACvD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC;QACvD,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,aAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;KAC9C,CAAC;AACJ,CAAC;AALD,kCAKC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=demographics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demographics.test.d.ts","sourceRoot":"","sources":["../../../../src/medical/models/__tests__/demographics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const demographics_1 = require("../demographics");
4
+ const contact_1 = require("./contact");
5
+ describe("demographicsSchema", () => {
6
+ describe("contactSchema", () => {
7
+ it("accepts simple email", async () => {
8
+ const contact = (0, contact_1.makeContact)({ email: "test@metriport.com" });
9
+ expect(() => demographics_1.contactSchema.parse(contact)).not.toThrow();
10
+ });
11
+ it("accepts null email", async () => {
12
+ const contact = (0, contact_1.makeContact)();
13
+ contact.email = null;
14
+ expect(() => demographics_1.contactSchema.parse(contact)).not.toThrow();
15
+ });
16
+ it("accepts undefined email", async () => {
17
+ const contact = (0, contact_1.makeContact)();
18
+ contact.email = undefined;
19
+ expect(() => demographics_1.contactSchema.parse(contact)).not.toThrow();
20
+ });
21
+ });
22
+ describe("emailSchema", () => {
23
+ const casesToSucceed = [
24
+ "t@m.co",
25
+ "test@metriport.com",
26
+ "test.second@metriport.com",
27
+ "test_second@metriport.com",
28
+ "test-second@metriport.com",
29
+ "user123@metriport.com",
30
+ "123user@metriport.com",
31
+ "user@metriport.com.br",
32
+ ];
33
+ const casesToFail = [
34
+ null,
35
+ undefined,
36
+ " test@metriport.com",
37
+ "test@metriport.com ",
38
+ "test:second@metriport.com",
39
+ "test second@metriport.com",
40
+ "test metriport.com",
41
+ "test@ metriport.com",
42
+ "test@metriport",
43
+ "test@.com",
44
+ ];
45
+ for (const email of casesToSucceed) {
46
+ it(`accepts '${email}'`, async () => {
47
+ expect(() => demographics_1.emailSchema.parse(email)).not.toThrow();
48
+ });
49
+ }
50
+ for (const email of casesToFail) {
51
+ it(`fails when gets '${email}'`, async () => {
52
+ expect(() => demographics_1.emailSchema.parse(email)).toThrow();
53
+ });
54
+ }
55
+ });
56
+ });
57
+ //# sourceMappingURL=demographics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demographics.test.js","sourceRoot":"","sources":["../../../../src/medical/models/__tests__/demographics.test.ts"],"names":[],"mappings":";;AAAA,kDAA6D;AAC7D,uCAAwC;AAExC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YACpC,MAAM,OAAO,GAAG,IAAA,qBAAW,EAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,4BAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,OAAO,GAAG,IAAA,qBAAW,GAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,GAAG,EAAE,CAAC,4BAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;YACvC,MAAM,OAAO,GAAG,IAAA,qBAAW,GAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,4BAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,MAAM,cAAc,GAAa;YAC/B,QAAQ;YACR,oBAAoB;YACpB,2BAA2B;YAC3B,2BAA2B;YAC3B,2BAA2B;YAC3B,uBAAuB;YACvB,uBAAuB;YACvB,uBAAuB;SACxB,CAAC;QACF,MAAM,WAAW,GAAkC;YACjD,IAAI;YACJ,SAAS;YACT,qBAAqB;YACrB,qBAAqB;YACrB,2BAA2B;YAC3B,2BAA2B;YAC3B,oBAAoB;YACpB,qBAAqB;YACrB,gBAAgB;YAChB,WAAW;SACZ,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;YAClC,EAAE,CAAC,YAAY,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE;gBAClC,MAAM,CAAC,GAAG,EAAE,CAAC,0BAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACvD,CAAC,CAAC,CAAC;SACJ;QACD,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE;YAC/B,EAAE,CAAC,oBAAoB,KAAK,GAAG,EAAE,KAAK,IAAI,EAAE;gBAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,0BAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACnD,CAAC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metriport/api-sdk",
3
- "version": "14.0.4",
3
+ "version": "14.0.5-alpha.0",
4
4
  "description": "Metriport helps you access and manage health and medical data, through a single open source API.",
5
5
  "author": "Metriport Inc. <contact@metriport.com>",
6
6
  "homepage": "https://metriport.com/",
@@ -58,8 +58,8 @@
58
58
  },
59
59
  "dependencies": {
60
60
  "@medplum/fhirtypes": "^2.0.32",
61
- "@metriport/commonwell-sdk": "^5.1.11",
62
- "@metriport/shared": "^0.14.6",
61
+ "@metriport/commonwell-sdk": "^5.1.12-alpha.0",
62
+ "@metriport/shared": "^0.14.7-alpha.0",
63
63
  "axios": "^1.4.0",
64
64
  "dayjs": "^1.11.7",
65
65
  "dotenv": "^16.3.1",
@@ -77,5 +77,5 @@
77
77
  "ts-jest": "29.1.1",
78
78
  "typescript": "^4.9.5"
79
79
  },
80
- "gitHead": "d02df8fb901eefd47694da54c894f25fab14b542"
80
+ "gitHead": "ff0f96acd37aaa229f8b3a849c5f3cafff6d4d8b"
81
81
  }