@awell-health/awell-extensions 2.0.43 → 2.0.44
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.js +27 -10
- package/dist/extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.js.map +1 -1
- package/dist/extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.test.js +43 -0
- package/dist/extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.test.js.map +1 -1
- package/package.json +1 -1
@@ -4,6 +4,7 @@ exports.getSetPasswordLink = void 0;
|
|
4
4
|
const extensions_core_1 = require("@awell-health/extensions-core");
|
5
5
|
const config_1 = require("./config");
|
6
6
|
const validatePayloadAndCreateSdk_1 = require("../../lib/sdk/validatePayloadAndCreateSdk");
|
7
|
+
const lodash_1 = require("lodash");
|
7
8
|
exports.getSetPasswordLink = {
|
8
9
|
key: 'getSetPasswordLink',
|
9
10
|
category: extensions_core_1.Category.EHR_INTEGRATIONS,
|
@@ -14,24 +15,40 @@ exports.getSetPasswordLink = {
|
|
14
15
|
dataPoints: config_1.dataPoints,
|
15
16
|
onActivityCreated: async (payload, onComplete, onError) => {
|
16
17
|
var _a, _b;
|
18
|
+
const MAX_RETRIES = 3;
|
19
|
+
const BASE_DELAY_MS = process.env.NODE_ENV === 'test' ? 10 : 1000;
|
17
20
|
const { fields, healthieSdk } = await (0, validatePayloadAndCreateSdk_1.validatePayloadAndCreateSdk)({
|
18
21
|
fieldsSchema: config_1.FieldsValidationSchema,
|
19
22
|
payload,
|
20
23
|
});
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
24
|
+
let setPasswordLink;
|
25
|
+
/**
|
26
|
+
* We need to retry the API call because:
|
27
|
+
* - The setPasswordLink field is not immediately available after creating a new user.
|
28
|
+
* - The API response is inconsistent
|
29
|
+
*/
|
30
|
+
for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {
|
31
|
+
const res = await healthieSdk.client.query({
|
32
|
+
user: {
|
33
|
+
__args: {
|
34
|
+
id: fields.healthiePatientId,
|
35
|
+
},
|
36
|
+
set_password_link: true,
|
25
37
|
},
|
26
|
-
|
27
|
-
|
28
|
-
|
38
|
+
});
|
39
|
+
if (!(0, lodash_1.isNil)((_a = res.user) === null || _a === void 0 ? void 0 : _a.set_password_link)) {
|
40
|
+
setPasswordLink = String((_b = res.user) === null || _b === void 0 ? void 0 : _b.set_password_link);
|
41
|
+
break;
|
42
|
+
}
|
43
|
+
// Exponential backoff delay calculation
|
44
|
+
const delay = BASE_DELAY_MS * Math.pow(2, attempt);
|
45
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
46
|
+
}
|
29
47
|
await onComplete({
|
30
48
|
data_points: {
|
31
|
-
setPasswordLink:
|
32
|
-
((_b = res.user) === null || _b === void 0 ? void 0 : _b.set_password_link) === null
|
49
|
+
setPasswordLink: setPasswordLink === undefined || setPasswordLink === null
|
33
50
|
? undefined
|
34
|
-
: String(
|
51
|
+
: String(setPasswordLink),
|
35
52
|
},
|
36
53
|
});
|
37
54
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getSetPasswordLink.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.ts"],"names":[],"mappings":";;;AACA,mEAAwD;AAExD,qCAAqE;AACrE,2FAAuF;
|
1
|
+
{"version":3,"file":"getSetPasswordLink.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.ts"],"names":[],"mappings":";;;AACA,mEAAwD;AAExD,qCAAqE;AACrE,2FAAuF;AACvF,mCAA8B;AAEjB,QAAA,kBAAkB,GAA2C;IACxE,GAAG,EAAE,oBAAoB;IACzB,QAAQ,EAAE,0BAAQ,CAAC,gBAAgB;IACnC,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EAAE,yCAAyC;IACtD,MAAM,EAAN,eAAM;IACN,WAAW,EAAE,KAAK;IAClB,UAAU,EAAV,mBAAU;IACV,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAiB,EAAE;;QACvE,MAAM,WAAW,GAAG,CAAC,CAAA;QACrB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAEjE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,yDAA2B,EAAC;YAChE,YAAY,EAAE,+BAAsB;YACpC,OAAO;SACR,CAAC,CAAA;QAEF,IAAI,eAAmC,CAAA;QAEvC;;;;WAIG;QACH,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,OAAO,EAAE,EAAE;YACtD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;gBACzC,IAAI,EAAE;oBACJ,MAAM,EAAE;wBACN,EAAE,EAAE,MAAM,CAAC,iBAAiB;qBAC7B;oBACD,iBAAiB,EAAE,IAAI;iBACxB;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,IAAA,cAAK,EAAC,MAAA,GAAG,CAAC,IAAI,0CAAE,iBAAiB,CAAC,EAAE;gBACvC,eAAe,GAAG,MAAM,CAAC,MAAA,GAAG,CAAC,IAAI,0CAAE,iBAAiB,CAAC,CAAA;gBACrD,MAAK;aACN;YAED,wCAAwC;YACxC,MAAM,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAClD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;SAC3D;QAED,MAAM,UAAU,CAAC;YACf,WAAW,EAAE;gBACX,eAAe,EACb,eAAe,KAAK,SAAS,IAAI,eAAe,KAAK,IAAI;oBACvD,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;aAC9B;SACF,CAAC,CAAA;IACJ,CAAC;CACF,CAAA"}
|
@@ -7,6 +7,7 @@ const _1 = require(".");
|
|
7
7
|
jest.mock('@extensions/healthie/lib/sdk/genql', () => ({
|
8
8
|
HealthieSdk: jest.fn().mockImplementation(() => ({
|
9
9
|
client: {
|
10
|
+
mutation: jest.fn(),
|
10
11
|
query: jest.fn().mockResolvedValue({
|
11
12
|
user: {
|
12
13
|
set_password_link: 'https://securestaging.gethealthie.com/set_initial_password?signup_token=some-token',
|
@@ -17,9 +18,14 @@ jest.mock('@extensions/healthie/lib/sdk/genql', () => ({
|
|
17
18
|
}));
|
18
19
|
const mockedHealthieSdk = jest.mocked(genql_1.HealthieSdk);
|
19
20
|
describe('Healthie - Get password link', () => {
|
21
|
+
let mockedClient;
|
20
22
|
const { extensionAction: action, onComplete, onError, helpers, clearMocks, } = extensions_core_1.TestHelpers.fromAction(_1.getSetPasswordLink);
|
21
23
|
beforeEach(() => {
|
22
24
|
clearMocks();
|
25
|
+
mockedClient = {
|
26
|
+
query: jest.fn(),
|
27
|
+
mutation: jest.fn(),
|
28
|
+
};
|
23
29
|
});
|
24
30
|
test('Should call onComplete', async () => {
|
25
31
|
await action.onEvent({
|
@@ -44,5 +50,42 @@ describe('Healthie - Get password link', () => {
|
|
44
50
|
},
|
45
51
|
});
|
46
52
|
});
|
53
|
+
test('Should retry if set_password_link is null and succeed after retries', async () => {
|
54
|
+
// Mock the SDK to return null for the first two attempts, and succeed on the third attempt
|
55
|
+
mockedClient.query
|
56
|
+
.mockResolvedValueOnce({ user: { set_password_link: null } }) // First attempt
|
57
|
+
.mockResolvedValueOnce({ user: { set_password_link: null } }) // Second attempt
|
58
|
+
.mockResolvedValueOnce({
|
59
|
+
user: {
|
60
|
+
set_password_link: 'https://securestaging.gethealthie.com/set_initial_password?signup_token=some-token',
|
61
|
+
},
|
62
|
+
}) // Third attempt
|
63
|
+
;
|
64
|
+
genql_1.HealthieSdk.mockImplementationOnce(() => ({
|
65
|
+
client: mockedClient,
|
66
|
+
}));
|
67
|
+
await action.onEvent({
|
68
|
+
payload: {
|
69
|
+
...tests_1.testPayload,
|
70
|
+
fields: {
|
71
|
+
healthiePatientId: '453019',
|
72
|
+
},
|
73
|
+
settings: {
|
74
|
+
apiUrl: 'https://staging-api.gethealthie.com/graphql',
|
75
|
+
apiKey: 'apiKey',
|
76
|
+
},
|
77
|
+
},
|
78
|
+
onComplete,
|
79
|
+
onError,
|
80
|
+
helpers,
|
81
|
+
});
|
82
|
+
// Ensure the query was called 3 times and succeeded on the third attempt
|
83
|
+
expect(mockedClient.query).toHaveBeenCalledTimes(3);
|
84
|
+
expect(onComplete).toHaveBeenCalledWith({
|
85
|
+
data_points: {
|
86
|
+
setPasswordLink: 'https://securestaging.gethealthie.com/set_initial_password?signup_token=some-token',
|
87
|
+
},
|
88
|
+
});
|
89
|
+
});
|
47
90
|
});
|
48
91
|
//# sourceMappingURL=getSetPasswordLink.test.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"getSetPasswordLink.test.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.test.ts"],"names":[],"mappings":";;AAAA,mCAAqC;AACrC,mEAA2D;AAC3D,8DAAgE;AAChE,wBAAyD;AAEzD,IAAI,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACrD,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE;YACN,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;gBACjC,IAAI,EAAE;oBACJ,iBAAiB,EACf,oFAAoF;iBACvF;aACF,CAAC;SACH;KACF,CAAC,CAAC;CACJ,CAAC,CAAC,CAAA;AAEH,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAA;AAElD,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,MAAM,EACJ,eAAe,EAAE,MAAM,EACvB,UAAU,EACV,OAAO,EACP,OAAO,EACP,UAAU,GACX,GAAG,6BAAW,CAAC,UAAU,CAAC,qBAAe,CAAC,CAAA;IAE3C,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,EAAE,CAAA;
|
1
|
+
{"version":3,"file":"getSetPasswordLink.test.js","sourceRoot":"","sources":["../../../../../extensions/healthie/actions/getSetPasswordLink/getSetPasswordLink.test.ts"],"names":[],"mappings":"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"}
|