@awell-health/awell-extensions 1.0.192 → 1.0.194

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/dist/extensions/icd/actions/tfu/config/fields.js +1 -1
  2. package/dist/extensions/icd/actions/tfu/config/fields.js.map +1 -1
  3. package/dist/extensions/icd/index.js +2 -2
  4. package/dist/extensions/icd/index.js.map +1 -1
  5. package/dist/extensions/index.js +2 -0
  6. package/dist/extensions/index.js.map +1 -1
  7. package/dist/extensions/markdown.json +4 -0
  8. package/dist/extensions/textline/actions/getMessages/config/dataPoints.d.ts +14 -0
  9. package/dist/extensions/textline/actions/getMessages/config/dataPoints.js +18 -0
  10. package/dist/extensions/textline/actions/getMessages/config/dataPoints.js.map +1 -0
  11. package/dist/extensions/textline/actions/getMessages/config/fields.d.ts +19 -0
  12. package/dist/extensions/textline/actions/getMessages/config/fields.js +20 -0
  13. package/dist/extensions/textline/actions/getMessages/config/fields.js.map +1 -0
  14. package/dist/extensions/textline/actions/getMessages/config/index.d.ts +2 -0
  15. package/dist/extensions/textline/actions/getMessages/config/index.js +9 -0
  16. package/dist/extensions/textline/actions/getMessages/config/index.js.map +1 -0
  17. package/dist/extensions/textline/actions/getMessages/getMessages.d.ts +4 -0
  18. package/dist/extensions/textline/actions/getMessages/getMessages.js +96 -0
  19. package/dist/extensions/textline/actions/getMessages/getMessages.js.map +1 -0
  20. package/dist/extensions/textline/actions/getMessages/getMessages.test.d.ts +1 -0
  21. package/dist/extensions/textline/actions/getMessages/getMessages.test.js +75 -0
  22. package/dist/extensions/textline/actions/getMessages/getMessages.test.js.map +1 -0
  23. package/dist/extensions/textline/actions/getMessages/index.d.ts +1 -0
  24. package/dist/extensions/textline/actions/getMessages/index.js +6 -0
  25. package/dist/extensions/textline/actions/getMessages/index.js.map +1 -0
  26. package/dist/extensions/textline/actions/index.d.ts +73 -0
  27. package/dist/extensions/textline/actions/index.js +10 -0
  28. package/dist/extensions/textline/actions/index.js.map +1 -0
  29. package/dist/extensions/textline/actions/sendSms/config/dataPoints.d.ts +6 -0
  30. package/dist/extensions/textline/actions/sendSms/config/dataPoints.js +10 -0
  31. package/dist/extensions/textline/actions/sendSms/config/dataPoints.js.map +1 -0
  32. package/dist/extensions/textline/actions/sendSms/config/fields.d.ts +31 -0
  33. package/dist/extensions/textline/actions/sendSms/config/fields.js +29 -0
  34. package/dist/extensions/textline/actions/sendSms/config/fields.js.map +1 -0
  35. package/dist/extensions/textline/actions/sendSms/config/index.d.ts +2 -0
  36. package/dist/extensions/textline/actions/sendSms/config/index.js +9 -0
  37. package/dist/extensions/textline/actions/sendSms/config/index.js.map +1 -0
  38. package/dist/extensions/textline/actions/sendSms/index.d.ts +1 -0
  39. package/dist/extensions/textline/actions/sendSms/index.js +6 -0
  40. package/dist/extensions/textline/actions/sendSms/index.js.map +1 -0
  41. package/dist/extensions/textline/actions/sendSms/sendSms.d.ts +4 -0
  42. package/dist/extensions/textline/actions/sendSms/sendSms.js +72 -0
  43. package/dist/extensions/textline/actions/sendSms/sendSms.js.map +1 -0
  44. package/dist/extensions/textline/actions/sendSms/sendSms.test.d.ts +1 -0
  45. package/dist/extensions/textline/actions/sendSms/sendSms.test.js +64 -0
  46. package/dist/extensions/textline/actions/sendSms/sendSms.test.js.map +1 -0
  47. package/dist/extensions/textline/client/schema.d.ts +161 -0
  48. package/dist/extensions/textline/client/schema.js +22 -0
  49. package/dist/extensions/textline/client/schema.js.map +1 -0
  50. package/dist/extensions/textline/client/textLineApi.d.ts +13 -0
  51. package/dist/extensions/textline/client/textLineApi.js +93 -0
  52. package/dist/extensions/textline/client/textLineApi.js.map +1 -0
  53. package/dist/extensions/textline/index.d.ts +2 -0
  54. package/dist/extensions/textline/index.js +19 -0
  55. package/dist/extensions/textline/index.js.map +1 -0
  56. package/dist/extensions/textline/settings.d.ts +37 -0
  57. package/dist/extensions/textline/settings.js +33 -0
  58. package/dist/extensions/textline/settings.js.map +1 -0
  59. package/dist/extensions/textline/validation.d.ts +2 -0
  60. package/dist/extensions/textline/validation.js +9 -0
  61. package/dist/extensions/textline/validation.js.map +1 -0
  62. package/package.json +1 -1
@@ -0,0 +1,72 @@
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.sendSms = void 0;
7
+ const zod_1 = require("zod");
8
+ const zod_validation_error_1 = require("zod-validation-error");
9
+ const settings_1 = require("../../settings");
10
+ const extensions_core_1 = require("@awell-health/extensions-core");
11
+ const config_1 = require("./config");
12
+ const textLineApi_1 = __importDefault(require("../../client/textLineApi"));
13
+ exports.sendSms = {
14
+ key: 'sendSms',
15
+ title: 'Send SMS (with from number)',
16
+ description: 'Send a text message from a given telephone number to a recipient of your choice.',
17
+ category: extensions_core_1.Category.COMMUNICATION,
18
+ fields: config_1.fields,
19
+ previewable: true,
20
+ dataPoints: config_1.dataPoints,
21
+ onActivityCreated: async (payload, onComplete, onError) => {
22
+ try {
23
+ const { settings: { email, password, apiKey }, fields: { recipient, message }, } = (0, extensions_core_1.validate)({
24
+ schema: zod_1.z.object({
25
+ settings: settings_1.SettingsValidationSchema,
26
+ fields: config_1.FieldsValidationSchema,
27
+ }),
28
+ payload,
29
+ });
30
+ const textLineApi = new textLineApi_1.default(email, password, apiKey);
31
+ const response = await textLineApi.sendMessage(recipient, message);
32
+ await onComplete({
33
+ data_points: {
34
+ conversationId: response.post.conversation_uuid,
35
+ },
36
+ });
37
+ }
38
+ catch (err) {
39
+ if (err instanceof zod_1.ZodError) {
40
+ const error = (0, zod_validation_error_1.fromZodError)(err);
41
+ await onError({
42
+ events: [
43
+ {
44
+ date: new Date().toISOString(),
45
+ text: { en: error.message },
46
+ error: {
47
+ category: 'BAD_REQUEST',
48
+ message: error.message,
49
+ },
50
+ },
51
+ ],
52
+ });
53
+ }
54
+ else {
55
+ const message = err.message;
56
+ await onError({
57
+ events: [
58
+ {
59
+ date: new Date().toISOString(),
60
+ text: { en: message },
61
+ error: {
62
+ category: 'SERVER_ERROR',
63
+ message,
64
+ },
65
+ },
66
+ ],
67
+ });
68
+ }
69
+ }
70
+ },
71
+ };
72
+ //# sourceMappingURL=sendSms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendSms.js","sourceRoot":"","sources":["../../../../../extensions/textline/actions/sendSms/sendSms.ts"],"names":[],"mappings":";;;;;;AAAA,6BAAiC;AACjC,+DAAmD;AAEnD,6CAAwE;AACxE,mEAAkE;AAClE,qCAAqE;AACrE,2EAAkD;AAGrC,QAAA,OAAO,GAA2C;IAC7D,GAAG,EAAE,SAAS;IACd,KAAK,EAAE,6BAA6B;IACpC,WAAW,EACT,kFAAkF;IACpF,QAAQ,EAAE,0BAAQ,CAAC,aAAa;IAChC,MAAM,EAAN,eAAM;IACN,WAAW,EAAE,IAAI;IACjB,UAAU,EAAV,mBAAU;IACV,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;QACxD,IAAI;YACF,MAAM,EACJ,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EACrC,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,GAC/B,GAAG,IAAA,0BAAQ,EAAC;gBACX,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;oBACf,QAAQ,EAAE,mCAAwB;oBAClC,MAAM,EAAE,+BAAsB;iBAC/B,CAAC;gBACF,OAAO;aACR,CAAC,CAAA;YAEF,MAAM,WAAW,GAAG,IAAI,qBAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;YAC5D,MAAM,QAAQ,GAAwB,MAAM,WAAW,CAAC,WAAW,CACjE,SAAS,EACT,OAAO,CACR,CAAA;YACD,MAAM,UAAU,CAAC;gBACf,WAAW,EAAE;oBACX,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB;iBAChD;aACF,CAAC,CAAA;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,cAAQ,EAAE;gBAC3B,MAAM,KAAK,GAAG,IAAA,mCAAY,EAAC,GAAG,CAAC,CAAA;gBAC/B,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAC9B,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE;4BAC3B,KAAK,EAAE;gCACL,QAAQ,EAAE,aAAa;gCACvB,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB;yBACF;qBACF;iBACF,CAAC,CAAA;aACH;iBAAM;gBACL,MAAM,OAAO,GAAI,GAAa,CAAC,OAAO,CAAA;gBACtC,MAAM,OAAO,CAAC;oBACZ,MAAM,EAAE;wBACN;4BACE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAC9B,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE;4BACrB,KAAK,EAAE;gCACL,QAAQ,EAAE,cAAc;gCACxB,OAAO;6BACR;yBACF;qBACF;iBACF,CAAC,CAAA;aACH;SACF;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sendSms_1 = require("./sendSms");
4
+ const tests_1 = require("../../../../src/tests");
5
+ const textLineApi_1 = require("../../client/__mocks__/textLineApi");
6
+ jest.mock('../../client/textLineApi', () => jest.fn(() => textLineApi_1.mockReturnValue));
7
+ describe('Send SMS action', () => {
8
+ const onComplete = jest.fn();
9
+ const onError = jest.fn();
10
+ beforeEach(() => {
11
+ onComplete.mockClear();
12
+ onError.mockClear();
13
+ });
14
+ test('Should call the onComplete callback', async () => {
15
+ await sendSms_1.sendSms.onActivityCreated((0, tests_1.generateTestPayload)({
16
+ fields: {
17
+ message: 'Message content',
18
+ recipient: '+13108820245',
19
+ },
20
+ settings: {
21
+ email: 'user',
22
+ password: 'password',
23
+ apiKey: 'apikey',
24
+ },
25
+ }), onComplete, onError);
26
+ expect(onComplete).toHaveBeenCalledWith({
27
+ data_points: {
28
+ conversationId: '30cded5d-90b7-4aae-9f51-b6b143376bb2',
29
+ },
30
+ });
31
+ expect(onError).not.toHaveBeenCalled();
32
+ }, 20000);
33
+ test('Should call the onError callback when there is no recipient', async () => {
34
+ await sendSms_1.sendSms.onActivityCreated((0, tests_1.generateTestPayload)({
35
+ fields: {
36
+ message: 'Message content',
37
+ recipient: undefined,
38
+ },
39
+ settings: {
40
+ email: 'user',
41
+ password: 'password',
42
+ apiKey: 'apikey',
43
+ },
44
+ }), onComplete, onError);
45
+ expect(onComplete).not.toHaveBeenCalled();
46
+ expect(onError).toHaveBeenCalled();
47
+ });
48
+ test('Should call the onError callback when there is no message', async () => {
49
+ await sendSms_1.sendSms.onActivityCreated((0, tests_1.generateTestPayload)({
50
+ fields: {
51
+ message: undefined,
52
+ recipient: '+13108820245',
53
+ },
54
+ settings: {
55
+ email: 'user',
56
+ password: 'password',
57
+ apiKey: 'apikey',
58
+ },
59
+ }), onComplete, onError);
60
+ expect(onComplete).not.toHaveBeenCalled();
61
+ expect(onError).toHaveBeenCalled();
62
+ });
63
+ });
64
+ //# sourceMappingURL=sendSms.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sendSms.test.js","sourceRoot":"","sources":["../../../../../extensions/textline/actions/sendSms/sendSms.test.ts"],"names":[],"mappings":";;AAAA,uCAAmC;AACnC,iDAA2D;AAC3D,oEAAoE;AAEpE,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,6BAAe,CAAC,CAAC,CAAA;AAE3E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,CAAC,SAAS,EAAE,CAAA;QACtB,OAAO,CAAC,SAAS,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,iBAAO,CAAC,iBAAiB,CAC7B,IAAA,2BAAmB,EAAC;YAClB,MAAM,EAAE;gBACN,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,cAAc;aAC1B;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC,EACF,UAAU,EACV,OAAO,CACR,CAAA;QACD,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;YACtC,WAAW,EAAE;gBACX,cAAc,EAAE,sCAAsC;aACvD;SACF,CAAC,CAAA;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;IACxC,CAAC,EAAE,KAAK,CAAC,CAAA;IAET,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,iBAAO,CAAC,iBAAiB,CAC7B,IAAA,2BAAmB,EAAC;YAClB,MAAM,EAAE;gBACN,OAAO,EAAE,iBAAiB;gBAC1B,SAAS,EAAE,SAAS;aACrB;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC,EACF,UAAU,EACV,OAAO,CACR,CAAA;QACD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,iBAAO,CAAC,iBAAiB,CAC7B,IAAA,2BAAmB,EAAC;YAClB,MAAM,EAAE;gBACN,OAAO,EAAE,SAAS;gBAClB,SAAS,EAAE,cAAc;aAC1B;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,QAAQ;aACjB;SACF,CAAC,EACF,UAAU,EACV,OAAO,CACR,CAAA;QACD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACzC,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,161 @@
1
+ import { z } from 'zod';
2
+ declare const PostSchema: z.ZodObject<{
3
+ body: z.ZodString;
4
+ created_at: z.ZodNumber;
5
+ creator: z.ZodObject<{
6
+ phone_number: z.ZodOptional<z.ZodString>;
7
+ type: z.ZodString;
8
+ name: z.ZodString;
9
+ }, "strip", z.ZodTypeAny, {
10
+ type: string;
11
+ name: string;
12
+ phone_number?: string | undefined;
13
+ }, {
14
+ type: string;
15
+ name: string;
16
+ phone_number?: string | undefined;
17
+ }>;
18
+ conversation_uuid: z.ZodString;
19
+ }, "strip", z.ZodTypeAny, {
20
+ body: string;
21
+ created_at: number;
22
+ creator: {
23
+ type: string;
24
+ name: string;
25
+ phone_number?: string | undefined;
26
+ };
27
+ conversation_uuid: string;
28
+ }, {
29
+ body: string;
30
+ created_at: number;
31
+ creator: {
32
+ type: string;
33
+ name: string;
34
+ phone_number?: string | undefined;
35
+ };
36
+ conversation_uuid: string;
37
+ }>;
38
+ export declare const GetMessagesSchema: z.ZodObject<{
39
+ posts: z.ZodOptional<z.ZodArray<z.ZodObject<{
40
+ body: z.ZodString;
41
+ created_at: z.ZodNumber;
42
+ creator: z.ZodObject<{
43
+ phone_number: z.ZodOptional<z.ZodString>;
44
+ type: z.ZodString;
45
+ name: z.ZodString;
46
+ }, "strip", z.ZodTypeAny, {
47
+ type: string;
48
+ name: string;
49
+ phone_number?: string | undefined;
50
+ }, {
51
+ type: string;
52
+ name: string;
53
+ phone_number?: string | undefined;
54
+ }>;
55
+ conversation_uuid: z.ZodString;
56
+ }, "strip", z.ZodTypeAny, {
57
+ body: string;
58
+ created_at: number;
59
+ creator: {
60
+ type: string;
61
+ name: string;
62
+ phone_number?: string | undefined;
63
+ };
64
+ conversation_uuid: string;
65
+ }, {
66
+ body: string;
67
+ created_at: number;
68
+ creator: {
69
+ type: string;
70
+ name: string;
71
+ phone_number?: string | undefined;
72
+ };
73
+ conversation_uuid: string;
74
+ }>, "many">>;
75
+ }, "strip", z.ZodTypeAny, {
76
+ posts?: {
77
+ body: string;
78
+ created_at: number;
79
+ creator: {
80
+ type: string;
81
+ name: string;
82
+ phone_number?: string | undefined;
83
+ };
84
+ conversation_uuid: string;
85
+ }[] | undefined;
86
+ }, {
87
+ posts?: {
88
+ body: string;
89
+ created_at: number;
90
+ creator: {
91
+ type: string;
92
+ name: string;
93
+ phone_number?: string | undefined;
94
+ };
95
+ conversation_uuid: string;
96
+ }[] | undefined;
97
+ }>;
98
+ declare const SendMessageResponseSchema: z.ZodObject<{
99
+ post: z.ZodObject<{
100
+ body: z.ZodString;
101
+ created_at: z.ZodNumber;
102
+ creator: z.ZodObject<{
103
+ phone_number: z.ZodOptional<z.ZodString>;
104
+ type: z.ZodString;
105
+ name: z.ZodString;
106
+ }, "strip", z.ZodTypeAny, {
107
+ type: string;
108
+ name: string;
109
+ phone_number?: string | undefined;
110
+ }, {
111
+ type: string;
112
+ name: string;
113
+ phone_number?: string | undefined;
114
+ }>;
115
+ conversation_uuid: z.ZodString;
116
+ }, "strip", z.ZodTypeAny, {
117
+ body: string;
118
+ created_at: number;
119
+ creator: {
120
+ type: string;
121
+ name: string;
122
+ phone_number?: string | undefined;
123
+ };
124
+ conversation_uuid: string;
125
+ }, {
126
+ body: string;
127
+ created_at: number;
128
+ creator: {
129
+ type: string;
130
+ name: string;
131
+ phone_number?: string | undefined;
132
+ };
133
+ conversation_uuid: string;
134
+ }>;
135
+ }, "strip", z.ZodTypeAny, {
136
+ post: {
137
+ body: string;
138
+ created_at: number;
139
+ creator: {
140
+ type: string;
141
+ name: string;
142
+ phone_number?: string | undefined;
143
+ };
144
+ conversation_uuid: string;
145
+ };
146
+ }, {
147
+ post: {
148
+ body: string;
149
+ created_at: number;
150
+ creator: {
151
+ type: string;
152
+ name: string;
153
+ phone_number?: string | undefined;
154
+ };
155
+ conversation_uuid: string;
156
+ };
157
+ }>;
158
+ export type SendMessageResponse = z.infer<typeof SendMessageResponseSchema>;
159
+ export type GetMessagesResponse = z.infer<typeof GetMessagesSchema>;
160
+ export type Post = z.infer<typeof PostSchema>;
161
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetMessagesSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const CreatorSchema = zod_1.z.object({
6
+ phone_number: zod_1.z.optional(zod_1.z.string()),
7
+ type: zod_1.z.string(),
8
+ name: zod_1.z.string(),
9
+ });
10
+ const PostSchema = zod_1.z.object({
11
+ body: zod_1.z.string(),
12
+ created_at: zod_1.z.number(),
13
+ creator: CreatorSchema,
14
+ conversation_uuid: zod_1.z.string(),
15
+ });
16
+ exports.GetMessagesSchema = zod_1.z.object({
17
+ posts: zod_1.z.optional(zod_1.z.array(PostSchema)),
18
+ });
19
+ const SendMessageResponseSchema = zod_1.z.object({
20
+ post: PostSchema,
21
+ });
22
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../extensions/textline/client/schema.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEvB,MAAM,aAAa,GAAG,OAAC,CAAC,MAAM,CAAC;IAC7B,YAAY,EAAE,OAAC,CAAC,QAAQ,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;IACpC,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,aAAa;IACtB,iBAAiB,EAAE,OAAC,CAAC,MAAM,EAAE;CAC9B,CAAC,CAAA;AAEW,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,OAAC,CAAC,QAAQ,CAAC,OAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;CACvC,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,UAAU;CACjB,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { type SendMessageResponse, type GetMessagesResponse } from './schema';
2
+ declare class TextLineApi {
3
+ private readonly email;
4
+ private readonly password;
5
+ private readonly apiKey;
6
+ private readonly baseUrl;
7
+ constructor(email: string, password: string, apiKey: string);
8
+ private constructUrl;
9
+ getMessages(phoneNumber?: string, page?: number, pageSize?: number): Promise<GetMessagesResponse>;
10
+ authenticate(): Promise<string>;
11
+ sendMessage(content: string, recipient: string): Promise<SendMessageResponse>;
12
+ }
13
+ export default TextLineApi;
@@ -0,0 +1,93 @@
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 extensions_core_1 = require("@awell-health/extensions-core");
7
+ const lodash_1 = require("lodash");
8
+ const node_fetch_1 = __importDefault(require("node-fetch"));
9
+ const schema_1 = require("./schema");
10
+ class TextLineApi {
11
+ constructor(email, password, apiKey) {
12
+ this.baseUrl = 'https://application.textline.com';
13
+ this.email = email;
14
+ this.password = password;
15
+ this.apiKey = apiKey;
16
+ }
17
+ constructUrl(url, params) {
18
+ const nonEmptyParams = (0, lodash_1.omitBy)(params, lodash_1.isNil);
19
+ const stringParams = Object.fromEntries(Object.entries(nonEmptyParams).map(([key, value]) => [key, String(value)]));
20
+ const queryParams = new URLSearchParams(stringParams);
21
+ return `${this.baseUrl}${url}?${queryParams.toString()}`;
22
+ }
23
+ async getMessages(phoneNumber, page, pageSize) {
24
+ const accessToken = await this.authenticate();
25
+ const url = this.constructUrl(`/api/conversations.json`, {
26
+ phone_number: phoneNumber,
27
+ page_size: pageSize,
28
+ page,
29
+ });
30
+ const response = await (0, extensions_core_1.fetchTyped)(url, schema_1.GetMessagesSchema, {
31
+ headers: {
32
+ Accept: 'application/json',
33
+ 'Content-Type': 'application/json',
34
+ 'X-TGP-ACCESS-TOKEN': accessToken,
35
+ },
36
+ });
37
+ return response;
38
+ }
39
+ async authenticate() {
40
+ var _a, _b;
41
+ const url = this.constructUrl(`/auth/sign_in.json`);
42
+ const response = await (0, node_fetch_1.default)(url, {
43
+ method: 'POST',
44
+ headers: {
45
+ Accept: 'application/json',
46
+ 'Content-Type': 'application/json',
47
+ },
48
+ body: JSON.stringify({
49
+ user: {
50
+ email: this.email,
51
+ password: this.password,
52
+ },
53
+ api_key: this.apiKey,
54
+ }),
55
+ });
56
+ const result = await response.json();
57
+ if (response.status >= 400) {
58
+ throw new Error((0, lodash_1.isNil)(result === null || result === void 0 ? void 0 : result.error)
59
+ ? 'Unable to authenticate'
60
+ : `Authentication failed with error: ${JSON.stringify(result.error)}`);
61
+ }
62
+ if ((0, lodash_1.isNil)((_a = result === null || result === void 0 ? void 0 : result.access_token) === null || _a === void 0 ? void 0 : _a.token)) {
63
+ throw new Error(`Can't get access token from authentication response ${JSON.stringify(result)}`);
64
+ }
65
+ return (_b = result === null || result === void 0 ? void 0 : result.access_token) === null || _b === void 0 ? void 0 : _b.token;
66
+ }
67
+ async sendMessage(content, recipient) {
68
+ var _a;
69
+ const accessToken = await this.authenticate();
70
+ const url = this.constructUrl(`/api/conversations.json`);
71
+ const response = await (0, node_fetch_1.default)(url, {
72
+ method: 'POST',
73
+ headers: {
74
+ Accept: 'application/json',
75
+ 'Content-Type': 'application/json',
76
+ 'X-TGP-ACCESS-TOKEN': accessToken,
77
+ },
78
+ body: JSON.stringify({
79
+ phone_number: recipient,
80
+ comment: {
81
+ body: content,
82
+ },
83
+ }),
84
+ });
85
+ const result = await response.json();
86
+ if (response.status >= 400) {
87
+ throw new Error((_a = result === null || result === void 0 ? void 0 : result.message) !== null && _a !== void 0 ? _a : 'Unknown error in TextLine API has occurred');
88
+ }
89
+ return result;
90
+ }
91
+ }
92
+ exports.default = TextLineApi;
93
+ //# sourceMappingURL=textLineApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textLineApi.js","sourceRoot":"","sources":["../../../../extensions/textline/client/textLineApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type Extension } from '@awell-health/extensions-core';
2
+ export declare const TextLine: Extension;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextLine = void 0;
4
+ const extensions_core_1 = require("@awell-health/extensions-core");
5
+ const actions_1 = require("./actions");
6
+ const settings_1 = require("./settings");
7
+ exports.TextLine = {
8
+ key: 'textline',
9
+ title: 'TextLine',
10
+ icon_url: 'https://res.cloudinary.com/da7x4rzl4/image/upload/v1709035140/Awell%20Extensions/OkNMApXr_400x400.jpg',
11
+ description: "Textline's business texting software offers solutions for sales, marketing, customer service, and beyond. Utilize the power of SMS to grow quickly.",
12
+ category: extensions_core_1.Category.COMMUNICATION,
13
+ author: {
14
+ authorType: extensions_core_1.AuthorType.AWELL,
15
+ },
16
+ actions: actions_1.actions,
17
+ settings: settings_1.settings,
18
+ };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../extensions/textline/index.ts"],"names":[],"mappings":";;;AACA,mEAAoE;AACpE,uCAAmC;AACnC,yCAAqC;AAExB,QAAA,QAAQ,GAAc;IACjC,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,QAAQ,EACN,uGAAuG;IACzG,WAAW,EACT,qJAAqJ;IACvJ,QAAQ,EAAE,0BAAQ,CAAC,aAAa;IAChC,MAAM,EAAE;QACN,UAAU,EAAE,4BAAU,CAAC,KAAK;KAC7B;IACD,OAAO,EAAP,iBAAO;IACP,QAAQ,EAAR,mBAAQ;CACT,CAAA"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ export declare const settings: {
3
+ email: {
4
+ label: string;
5
+ key: string;
6
+ obfuscated: false;
7
+ required: true;
8
+ description: string;
9
+ };
10
+ password: {
11
+ label: string;
12
+ key: string;
13
+ obfuscated: true;
14
+ required: true;
15
+ description: string;
16
+ };
17
+ apiKey: {
18
+ label: string;
19
+ key: string;
20
+ obfuscated: true;
21
+ required: true;
22
+ description: string;
23
+ };
24
+ };
25
+ export declare const SettingsValidationSchema: z.ZodObject<{
26
+ password: z.ZodString;
27
+ email: z.ZodString;
28
+ apiKey: z.ZodString;
29
+ }, "strip", z.ZodTypeAny, {
30
+ password: string;
31
+ email: string;
32
+ apiKey: string;
33
+ }, {
34
+ password: string;
35
+ email: string;
36
+ apiKey: string;
37
+ }>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SettingsValidationSchema = exports.settings = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.settings = {
6
+ email: {
7
+ label: 'Email',
8
+ key: 'email',
9
+ obfuscated: false,
10
+ required: true,
11
+ description: 'Your TextLine agent email',
12
+ },
13
+ password: {
14
+ label: 'Password',
15
+ key: 'password',
16
+ obfuscated: true,
17
+ required: true,
18
+ description: 'Your TextLine agent password',
19
+ },
20
+ apiKey: {
21
+ label: 'Api Key',
22
+ key: 'apiKey',
23
+ obfuscated: true,
24
+ required: true,
25
+ description: 'Find your API key at https://application.textline.com/organization/api_settings.',
26
+ },
27
+ };
28
+ exports.SettingsValidationSchema = zod_1.z.object({
29
+ password: zod_1.z.string().min(1, { message: 'Missing TextLine password' }),
30
+ email: zod_1.z.string().min(1, { message: 'Missing TextLine email' }),
31
+ apiKey: zod_1.z.string().min(1, { message: 'Missing TextLine access token' }),
32
+ });
33
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../extensions/textline/settings.ts"],"names":[],"mappings":";;;AACA,6BAAwC;AAE3B,QAAA,QAAQ,GAAG;IACtB,KAAK,EAAE;QACL,KAAK,EAAE,OAAO;QACd,GAAG,EAAE,OAAO;QACZ,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,2BAA2B;KACzC;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU;QACjB,GAAG,EAAE,UAAU;QACf,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,8BAA8B;KAC5C;IACD,MAAM,EAAE;QACN,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,QAAQ;QACb,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;QACd,WAAW,EACT,kFAAkF;KACrF;CACgC,CAAA;AAEtB,QAAA,wBAAwB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC/C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC;IACrE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC;IAC/D,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;CACpB,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { z } from 'zod';
2
+ export declare const MessageValidationSchema: z.ZodString;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageValidationSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.MessageValidationSchema = zod_1.z
6
+ .string()
7
+ .min(1, { message: 'Missing or empty message' })
8
+ .max(1600, { message: 'Message can not be longer than 1600 characters' });
9
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../extensions/textline/validation.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,uBAAuB,GAAG,OAAC;KACrC,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;KAC/C,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,gDAAgD,EAAE,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awell-health/awell-extensions",
3
- "version": "1.0.192",
3
+ "version": "1.0.194",
4
4
  "packageManager": "yarn@3.4.1",
5
5
  "main": "dist/src/index.js",
6
6
  "repository": {