@scopieflows/apps-common 0.12.3

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 (81) hide show
  1. package/package.json +19 -0
  2. package/src/index.d.ts +6 -0
  3. package/src/index.d.ts.map +1 -0
  4. package/src/index.js +9 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/authentication/index.d.ts +16 -0
  7. package/src/lib/authentication/index.d.ts.map +1 -0
  8. package/src/lib/authentication/index.js +9 -0
  9. package/src/lib/authentication/index.js.map +1 -0
  10. package/src/lib/helpers/index.d.ts +37 -0
  11. package/src/lib/helpers/index.d.ts.map +1 -0
  12. package/src/lib/helpers/index.js +268 -0
  13. package/src/lib/helpers/index.js.map +1 -0
  14. package/src/lib/http/axios/axios-http-client.d.ts +13 -0
  15. package/src/lib/http/axios/axios-http-client.d.ts.map +1 -0
  16. package/src/lib/http/axios/axios-http-client.js +96 -0
  17. package/src/lib/http/axios/axios-http-client.js.map +1 -0
  18. package/src/lib/http/core/base-http-client.d.ts +20 -0
  19. package/src/lib/http/core/base-http-client.d.ts.map +1 -0
  20. package/src/lib/http/core/base-http-client.js +52 -0
  21. package/src/lib/http/core/base-http-client.js.map +1 -0
  22. package/src/lib/http/core/delegating-authentication-converter.d.ts +18 -0
  23. package/src/lib/http/core/delegating-authentication-converter.d.ts.map +1 -0
  24. package/src/lib/http/core/delegating-authentication-converter.js +33 -0
  25. package/src/lib/http/core/delegating-authentication-converter.js.map +1 -0
  26. package/src/lib/http/core/http-client.d.ts +10 -0
  27. package/src/lib/http/core/http-client.d.ts.map +1 -0
  28. package/src/lib/http/core/http-client.js +6 -0
  29. package/src/lib/http/core/http-client.js.map +1 -0
  30. package/src/lib/http/core/http-error.d.ts +24 -0
  31. package/src/lib/http/core/http-error.d.ts.map +1 -0
  32. package/src/lib/http/core/http-error.js +46 -0
  33. package/src/lib/http/core/http-error.js.map +1 -0
  34. package/src/lib/http/core/http-header.d.ts +7 -0
  35. package/src/lib/http/core/http-header.d.ts.map +1 -0
  36. package/src/lib/http/core/http-header.js +11 -0
  37. package/src/lib/http/core/http-header.js.map +1 -0
  38. package/src/lib/http/core/http-headers.d.ts +2 -0
  39. package/src/lib/http/core/http-headers.d.ts.map +1 -0
  40. package/src/lib/http/core/http-headers.js +3 -0
  41. package/src/lib/http/core/http-headers.js.map +1 -0
  42. package/src/lib/http/core/http-message-body.d.ts +2 -0
  43. package/src/lib/http/core/http-message-body.d.ts.map +1 -0
  44. package/src/lib/http/core/http-message-body.js +3 -0
  45. package/src/lib/http/core/http-message-body.js.map +1 -0
  46. package/src/lib/http/core/http-method.d.ts +9 -0
  47. package/src/lib/http/core/http-method.d.ts.map +1 -0
  48. package/src/lib/http/core/http-method.js +13 -0
  49. package/src/lib/http/core/http-method.js.map +1 -0
  50. package/src/lib/http/core/http-request-body.d.ts +3 -0
  51. package/src/lib/http/core/http-request-body.d.ts.map +1 -0
  52. package/src/lib/http/core/http-request-body.js +3 -0
  53. package/src/lib/http/core/http-request-body.js.map +1 -0
  54. package/src/lib/http/core/http-request.d.ts +18 -0
  55. package/src/lib/http/core/http-request.d.ts.map +1 -0
  56. package/src/lib/http/core/http-request.js +3 -0
  57. package/src/lib/http/core/http-request.js.map +1 -0
  58. package/src/lib/http/core/http-response.d.ts +8 -0
  59. package/src/lib/http/core/http-response.d.ts.map +1 -0
  60. package/src/lib/http/core/http-response.js +3 -0
  61. package/src/lib/http/core/http-response.js.map +1 -0
  62. package/src/lib/http/core/media-type.d.ts +5 -0
  63. package/src/lib/http/core/media-type.d.ts.map +1 -0
  64. package/src/lib/http/core/media-type.js +9 -0
  65. package/src/lib/http/core/media-type.js.map +1 -0
  66. package/src/lib/http/core/query-params.d.ts +2 -0
  67. package/src/lib/http/core/query-params.d.ts.map +1 -0
  68. package/src/lib/http/core/query-params.js +3 -0
  69. package/src/lib/http/core/query-params.js.map +1 -0
  70. package/src/lib/http/index.d.ts +14 -0
  71. package/src/lib/http/index.d.ts.map +1 -0
  72. package/src/lib/http/index.js +17 -0
  73. package/src/lib/http/index.js.map +1 -0
  74. package/src/lib/polling/index.d.ts +58 -0
  75. package/src/lib/polling/index.d.ts.map +1 -0
  76. package/src/lib/polling/index.js +136 -0
  77. package/src/lib/polling/index.js.map +1 -0
  78. package/src/lib/validation/index.d.ts +5 -0
  79. package/src/lib/validation/index.d.ts.map +1 -0
  80. package/src/lib/validation/index.js +26 -0
  81. package/src/lib/validation/index.js.map +1 -0
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@scopieflows/apps-common",
3
+ "version": "0.12.3",
4
+ "type": "commonjs",
5
+ "main": "./src/index.js",
6
+ "types": "./src/index.d.ts",
7
+ "dependencies": {
8
+ "@scopieflows/apps-framework": "0.28.1",
9
+ "@scopieflows/shared": "0.54.0",
10
+ "axios": "1.15.0",
11
+ "axios-retry": "4.4.1",
12
+ "form-data": "4.0.4",
13
+ "http-proxy-agent": "7.0.2",
14
+ "https-proxy-agent": "7.0.6",
15
+ "mime-types": "2.1.35",
16
+ "tslib": "2.6.2",
17
+ "zod": "4.3.6"
18
+ }
19
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export * from './lib/authentication';
2
+ export * from './lib/helpers';
3
+ export * from './lib/http';
4
+ export * from './lib/polling';
5
+ export * from './lib/validation';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC"}
package/src/index.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./lib/authentication"), exports);
5
+ tslib_1.__exportStar(require("./lib/helpers"), exports);
6
+ tslib_1.__exportStar(require("./lib/http"), exports);
7
+ tslib_1.__exportStar(require("./lib/polling"), exports);
8
+ tslib_1.__exportStar(require("./lib/validation"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,wDAA8B;AAC9B,qDAA2B;AAC3B,wDAA8B;AAC9B,2DAAiC"}
@@ -0,0 +1,16 @@
1
+ export type Authentication = BearerTokenAuthentication | BasicAuthentication;
2
+ export declare enum AuthenticationType {
3
+ BEARER_TOKEN = "BEARER_TOKEN",
4
+ BASIC = "BASIC"
5
+ }
6
+ export type BaseAuthentication<T extends AuthenticationType> = {
7
+ type: T;
8
+ };
9
+ export type BearerTokenAuthentication = BaseAuthentication<AuthenticationType.BEARER_TOKEN> & {
10
+ token: string;
11
+ };
12
+ export type BasicAuthentication = BaseAuthentication<AuthenticationType.BASIC> & {
13
+ username: string;
14
+ password: string;
15
+ };
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/authentication/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,yBAAyB,GAAG,mBAAmB,CAAC;AAE7E,oBAAY,kBAAkB;IAC5B,YAAY,iBAAiB;IAC7B,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,kBAAkB,IAAI;IAC7D,IAAI,EAAE,CAAC,CAAC;CACT,CAAC;AAEF,MAAM,MAAM,yBAAyB,GACnC,kBAAkB,CAAC,kBAAkB,CAAC,YAAY,CAAC,GAAG;IACpD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEJ,MAAM,MAAM,mBAAmB,GAC7B,kBAAkB,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthenticationType = void 0;
4
+ var AuthenticationType;
5
+ (function (AuthenticationType) {
6
+ AuthenticationType["BEARER_TOKEN"] = "BEARER_TOKEN";
7
+ AuthenticationType["BASIC"] = "BASIC";
8
+ })(AuthenticationType || (exports.AuthenticationType = AuthenticationType = {}));
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/authentication/index.ts"],"names":[],"mappings":";;;AAEA,IAAY,kBAGX;AAHD,WAAY,kBAAkB;IAC5B,mDAA6B,CAAA;IAC7B,qCAAe,CAAA;AACjB,CAAC,EAHW,kBAAkB,kCAAlB,kBAAkB,QAG7B"}
@@ -0,0 +1,37 @@
1
+ import { OAuth2PropertyValue, PieceAuthProperty, Property, StaticDropdownProperty, StaticPropsValue, InputPropertyMap, AppConnectionValueForAuthProperty, ExtractPieceAuthPropertyTypeForMethods } from '@scopieflows/apps-framework';
2
+ import { HttpHeaders, HttpMethod, QueryParams } from '../http';
3
+ export declare const getAccessTokenOrThrow: (auth: OAuth2PropertyValue | undefined) => string;
4
+ type BaseUrlGetter<PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined> = (auth?: AppConnectionValueForAuthProperty<ExtractPieceAuthPropertyTypeForMethods<PieceAuth>>) => string;
5
+ export declare function createCustomApiCallAction<PieceAuth extends PieceAuthProperty | PieceAuthProperty[] | undefined>({ auth, baseUrl, authMapping, description, displayName, name, props, extraProps, authLocation, }: {
6
+ auth?: PieceAuth;
7
+ baseUrl: BaseUrlGetter<PieceAuth>;
8
+ authMapping?: (auth: AppConnectionValueForAuthProperty<ExtractPieceAuthPropertyTypeForMethods<PieceAuth>>, propsValue: StaticPropsValue<any>) => Promise<HttpHeaders | QueryParams>;
9
+ description?: string | null;
10
+ displayName?: string | null;
11
+ name?: string | null;
12
+ props?: {
13
+ url?: Partial<ReturnType<typeof Property.ShortText>>;
14
+ method?: Partial<StaticDropdownProperty<HttpMethod, boolean>>;
15
+ headers?: Partial<ReturnType<typeof Property.Object>>;
16
+ queryParams?: Partial<ReturnType<typeof Property.Object>>;
17
+ body?: Partial<ReturnType<typeof Property.Json>>;
18
+ failsafe?: Partial<ReturnType<typeof Property.Checkbox>>;
19
+ timeout?: Partial<ReturnType<typeof Property.Number>>;
20
+ };
21
+ extraProps?: InputPropertyMap;
22
+ authLocation?: 'headers' | 'queryParams';
23
+ }): import("@scopieflows/apps-framework").IAction<PieceAuth, {
24
+ url: import("@scopieflows/apps-framework").DynamicProperties<true, PieceAuth | undefined>;
25
+ method: StaticDropdownProperty<HttpMethod, false> | StaticDropdownProperty<HttpMethod, true>;
26
+ headers: import("@scopieflows/apps-framework").ObjectProperty<false> | import("@scopieflows/apps-framework").ObjectProperty<true>;
27
+ queryParams: import("@scopieflows/apps-framework").ObjectProperty<false> | import("@scopieflows/apps-framework").ObjectProperty<true>;
28
+ body_type: StaticDropdownProperty<string, false>;
29
+ body: import("@scopieflows/apps-framework").DynamicProperties<false, PieceAuth | undefined>;
30
+ response_is_binary: import("@scopieflows/apps-framework").CheckboxProperty<false>;
31
+ failsafe: import("@scopieflows/apps-framework").CheckboxProperty<false> | import("@scopieflows/apps-framework").CheckboxProperty<true>;
32
+ timeout: import("@scopieflows/apps-framework").NumberProperty<false> | import("@scopieflows/apps-framework").NumberProperty<true>;
33
+ followRedirects: import("@scopieflows/apps-framework").CheckboxProperty<false>;
34
+ }>;
35
+ export declare function is_chromium_installed(): boolean;
36
+ export {};
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,QAAQ,EACR,sBAAsB,EAEtB,gBAAgB,EAChB,gBAAgB,EAEhB,iCAAiC,EACjC,sCAAsC,EAEvC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,WAAW,EACX,UAAU,EAEV,WAAW,EAEZ,MAAM,SAAS,CAAC;AAMjB,eAAO,MAAM,qBAAqB,SAC1B,mBAAmB,GAAG,SAAS,KACpC,MAQF,CAAC;AAqCF,KAAK,aAAa,CAChB,SAAS,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,SAAS,IACnE,CACF,IAAI,CAAC,EAAE,iCAAiC,CACtC,sCAAsC,CAAC,SAAS,CAAC,CAClD,KACE,MAAM,CAAC;AACZ,wBAAgB,yBAAyB,CACvC,SAAS,SAAS,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,SAAS,EACrE,EACA,IAAI,EACJ,OAAO,EACP,WAAW,EACX,WAAW,EACX,WAAW,EACX,IAAI,EACJ,KAAK,EACL,UAAU,EACV,YAAwB,GACzB,EAAE;IACD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,CACZ,IAAI,EAAE,iCAAiC,CACrC,sCAAsC,CAAC,SAAS,CAAC,CAClD,EACD,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAC9B,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC;IAExC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,WAAW,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzD,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;KACvD,CAAC;IACF,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CAC1C;;;;;;;;;;;GA8QA;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C"}
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAccessTokenOrThrow = void 0;
4
+ exports.createCustomApiCallAction = createCustomApiCallAction;
5
+ exports.is_chromium_installed = is_chromium_installed;
6
+ const tslib_1 = require("tslib");
7
+ const pieces_framework_1 = require("@scopieflows/apps-framework");
8
+ const http_1 = require("../http");
9
+ const shared_1 = require("@scopieflows/shared");
10
+ const fs_1 = tslib_1.__importDefault(require("fs"));
11
+ const mime_types_1 = tslib_1.__importDefault(require("mime-types"));
12
+ const form_data_1 = tslib_1.__importDefault(require("form-data"));
13
+ const getAccessTokenOrThrow = (auth) => {
14
+ const accessToken = auth === null || auth === void 0 ? void 0 : auth.access_token;
15
+ if (accessToken === undefined) {
16
+ throw new Error('Invalid bearer token');
17
+ }
18
+ return accessToken;
19
+ };
20
+ exports.getAccessTokenOrThrow = getAccessTokenOrThrow;
21
+ const joinBaseUrlWithRelativePath = ({ baseUrl, relativePath, }) => {
22
+ const baseUrlWithSlash = baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
23
+ const relativePathWithoutSlash = relativePath.startsWith('/')
24
+ ? relativePath.slice(1)
25
+ : relativePath;
26
+ return `${baseUrlWithSlash}${relativePathWithoutSlash}`;
27
+ };
28
+ const getBaseUrlForDescription = (baseUrl, auth) => {
29
+ const exampleBaseUrl = `https://api.example.com`;
30
+ try {
31
+ const baseUrlValue = auth ? baseUrl(auth) : undefined;
32
+ const baseUrlValueWithoutTrailingSlash = (baseUrlValue === null || baseUrlValue === void 0 ? void 0 : baseUrlValue.endsWith('/'))
33
+ ? baseUrlValue.slice(0, -1)
34
+ : baseUrlValue;
35
+ return baseUrlValueWithoutTrailingSlash !== null && baseUrlValueWithoutTrailingSlash !== void 0 ? baseUrlValueWithoutTrailingSlash : exampleBaseUrl;
36
+ }
37
+ catch (error) {
38
+ //If baseUrl fails we stil want to return a valid baseUrl for description
39
+ {
40
+ return exampleBaseUrl;
41
+ }
42
+ }
43
+ };
44
+ function createCustomApiCallAction({ auth, baseUrl, authMapping, description, displayName, name, props, extraProps, authLocation = 'headers', }) {
45
+ var _a, _b, _c, _d, _e;
46
+ return (0, pieces_framework_1.createAction)({
47
+ name: name ? name : 'custom_api_call',
48
+ displayName: displayName ? displayName : 'Custom API Call',
49
+ description: description
50
+ ? description
51
+ : 'Make a custom API call to a specific endpoint',
52
+ auth,
53
+ requireAuth: auth ? true : false,
54
+ props: Object.assign({ url: pieces_framework_1.Property.DynamicProperties({
55
+ auth,
56
+ displayName: '',
57
+ required: true,
58
+ refreshers: [],
59
+ props: (_a) => tslib_1.__awaiter(this, [_a], void 0, function* ({ auth }) {
60
+ var _b;
61
+ return {
62
+ url: pieces_framework_1.Property.ShortText(Object.assign({ displayName: 'URL', description: `You can either use the full URL or the relative path to the base URL
63
+ i.e ${getBaseUrlForDescription(baseUrl, auth)}/resource or /resource`, required: true, defaultValue: auth ? baseUrl(auth) : '' }, ((_b = props === null || props === void 0 ? void 0 : props.url) !== null && _b !== void 0 ? _b : {}))),
64
+ };
65
+ }),
66
+ }), method: pieces_framework_1.Property.StaticDropdown(Object.assign({ displayName: 'Method', required: true, options: {
67
+ options: Object.values(http_1.HttpMethod).map((v) => {
68
+ return {
69
+ label: v,
70
+ value: v,
71
+ };
72
+ }),
73
+ } }, ((_a = props === null || props === void 0 ? void 0 : props.method) !== null && _a !== void 0 ? _a : {}))), headers: pieces_framework_1.Property.Object(Object.assign({ displayName: 'Headers', description: 'Authorization headers are injected automatically from your connection.', required: true }, ((_b = props === null || props === void 0 ? void 0 : props.headers) !== null && _b !== void 0 ? _b : {}))), queryParams: pieces_framework_1.Property.Object(Object.assign({ displayName: 'Query Parameters', required: true }, ((_c = props === null || props === void 0 ? void 0 : props.queryParams) !== null && _c !== void 0 ? _c : {}))), body_type: pieces_framework_1.Property.StaticDropdown({
74
+ displayName: 'Body Type',
75
+ required: false,
76
+ defaultValue: 'none',
77
+ options: {
78
+ disabled: false,
79
+ options: [
80
+ {
81
+ label: 'None',
82
+ value: 'none',
83
+ },
84
+ {
85
+ label: 'JSON',
86
+ value: 'json',
87
+ },
88
+ {
89
+ label: 'Form Data',
90
+ value: 'form_data',
91
+ },
92
+ {
93
+ label: 'Raw',
94
+ value: 'raw',
95
+ },
96
+ ],
97
+ },
98
+ }), body: pieces_framework_1.Property.DynamicProperties({
99
+ auth,
100
+ displayName: 'Body',
101
+ refreshers: ['body_type'],
102
+ required: false,
103
+ props: (_a) => tslib_1.__awaiter(this, [_a], void 0, function* ({ body_type }) {
104
+ var _b;
105
+ if (!body_type)
106
+ return {};
107
+ const bodyTypeInput = body_type;
108
+ const fields = {};
109
+ switch (bodyTypeInput) {
110
+ case 'none':
111
+ break;
112
+ case 'json':
113
+ fields['data'] = pieces_framework_1.Property.Json(Object.assign({ displayName: 'JSON Body', required: true }, ((_b = props === null || props === void 0 ? void 0 : props.body) !== null && _b !== void 0 ? _b : {})));
114
+ break;
115
+ case 'raw':
116
+ fields['data'] = pieces_framework_1.Property.LongText({
117
+ displayName: 'Raw Body',
118
+ required: true,
119
+ });
120
+ break;
121
+ case 'form_data':
122
+ fields['data'] = pieces_framework_1.Property.Array({
123
+ displayName: 'Form Data',
124
+ required: true,
125
+ properties: {
126
+ fieldName: pieces_framework_1.Property.ShortText({
127
+ displayName: 'Field Name',
128
+ required: true,
129
+ }),
130
+ fieldType: pieces_framework_1.Property.StaticDropdown({
131
+ displayName: 'Field Type',
132
+ required: true,
133
+ options: {
134
+ disabled: false,
135
+ options: [
136
+ { label: 'Text', value: 'text' },
137
+ { label: 'File', value: 'file' },
138
+ ],
139
+ },
140
+ }),
141
+ textFieldValue: pieces_framework_1.Property.LongText({
142
+ displayName: 'Text Field Value',
143
+ required: false,
144
+ }),
145
+ fileFieldValue: pieces_framework_1.Property.File({
146
+ displayName: 'File Field Value',
147
+ required: false,
148
+ }),
149
+ },
150
+ });
151
+ break;
152
+ }
153
+ return fields;
154
+ }),
155
+ }), response_is_binary: pieces_framework_1.Property.Checkbox({
156
+ displayName: 'Response is Binary ?',
157
+ description: 'Enable for files like PDFs, images, etc.',
158
+ required: false,
159
+ defaultValue: false,
160
+ }), failsafe: pieces_framework_1.Property.Checkbox(Object.assign({ displayName: 'No Error on Failure', required: false }, ((_d = props === null || props === void 0 ? void 0 : props.failsafe) !== null && _d !== void 0 ? _d : {}))), timeout: pieces_framework_1.Property.Number(Object.assign({ displayName: 'Timeout (in seconds)', required: false }, ((_e = props === null || props === void 0 ? void 0 : props.timeout) !== null && _e !== void 0 ? _e : {}))), followRedirects: pieces_framework_1.Property.Checkbox({
161
+ displayName: 'Follow redirects',
162
+ required: false,
163
+ defaultValue: false,
164
+ }) }, extraProps),
165
+ run: (context) => tslib_1.__awaiter(this, void 0, void 0, function* () {
166
+ var _a;
167
+ const { method, url, headers, queryParams, body, body_type, failsafe, timeout, response_is_binary, followRedirects, } = context.propsValue;
168
+ (0, shared_1.assertNotNullOrUndefined)(method, 'Method');
169
+ (0, shared_1.assertNotNullOrUndefined)(url, 'URL');
170
+ const authValue = !(0, shared_1.isNil)(authMapping)
171
+ ? yield authMapping(context.auth, context.propsValue)
172
+ : {};
173
+ const urlValue = url['url'];
174
+ const fullUrl = urlValue.startsWith('http://') || urlValue.startsWith('https://')
175
+ ? urlValue
176
+ : joinBaseUrlWithRelativePath({
177
+ baseUrl: baseUrl(context.auth),
178
+ relativePath: urlValue,
179
+ });
180
+ const request = {
181
+ method,
182
+ url: fullUrl,
183
+ headers: Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (authLocation === 'headers' || !(0, shared_1.isNil)(authLocation)
184
+ ? authValue
185
+ : {})),
186
+ queryParams: Object.assign(Object.assign({}, (authLocation === 'queryParams' ? authValue : {})), ((_a = queryParams) !== null && _a !== void 0 ? _a : {})),
187
+ timeout: timeout ? timeout * 1000 : 0,
188
+ followRedirects,
189
+ };
190
+ // Set response type to arraybuffer if binary response is expected
191
+ if (response_is_binary) {
192
+ request.responseType = 'arraybuffer';
193
+ }
194
+ if (body) {
195
+ if (body_type && body_type !== 'none') {
196
+ const bodyInput = body['data'];
197
+ if (body_type === 'form_data') {
198
+ const formBodyInput = bodyInput;
199
+ const formData = new form_data_1.default();
200
+ for (const { fieldName, fieldType, textFieldValue, fileFieldValue, } of formBodyInput) {
201
+ if (fieldType === 'text' && !(0, shared_1.isEmpty)(textFieldValue)) {
202
+ formData.append(fieldName, textFieldValue);
203
+ }
204
+ else if (fieldType === 'file' && !(0, shared_1.isEmpty)(fileFieldValue)) {
205
+ formData.append(fieldName, fileFieldValue.data, {
206
+ filename: fileFieldValue === null || fileFieldValue === void 0 ? void 0 : fileFieldValue.filename,
207
+ });
208
+ }
209
+ }
210
+ request.body = formData;
211
+ request.headers = Object.assign(Object.assign({}, request.headers), formData.getHeaders());
212
+ }
213
+ else {
214
+ request.body = bodyInput;
215
+ }
216
+ }
217
+ else if (!body_type) {
218
+ request.body = body;
219
+ }
220
+ }
221
+ try {
222
+ const response = yield http_1.httpClient.sendRequest(request);
223
+ return yield handleBinaryResponse(context.files, response.body, response.status, response.headers, response_is_binary);
224
+ }
225
+ catch (error) {
226
+ if (failsafe) {
227
+ return error.errorMessage();
228
+ }
229
+ throw error;
230
+ }
231
+ }),
232
+ });
233
+ }
234
+ function is_chromium_installed() {
235
+ const chromiumPath = '/usr/bin/chromium';
236
+ return fs_1.default.existsSync(chromiumPath);
237
+ }
238
+ const handleBinaryResponse = (files, bodyContent, status, headers, isBinary) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
239
+ let body;
240
+ if (isBinary && isBinaryBody(bodyContent)) {
241
+ const contentTypeValue = Array.isArray(headers === null || headers === void 0 ? void 0 : headers['content-type'])
242
+ ? headers['content-type'][0]
243
+ : headers === null || headers === void 0 ? void 0 : headers['content-type'];
244
+ const fileExtension = mime_types_1.default.extension(contentTypeValue !== null && contentTypeValue !== void 0 ? contentTypeValue : '') || 'txt';
245
+ let bufferData;
246
+ if (bodyContent instanceof ArrayBuffer) {
247
+ bufferData = Buffer.from(new Uint8Array(bodyContent));
248
+ }
249
+ else if (Buffer.isBuffer(bodyContent)) {
250
+ bufferData = bodyContent;
251
+ }
252
+ else {
253
+ bufferData = Buffer.from(bodyContent);
254
+ }
255
+ body = yield files.write({
256
+ fileName: `output.${fileExtension}`,
257
+ data: bufferData,
258
+ });
259
+ }
260
+ else {
261
+ body = bodyContent;
262
+ }
263
+ return { status, headers, body };
264
+ });
265
+ const isBinaryBody = (body) => {
266
+ return body instanceof ArrayBuffer || Buffer.isBuffer(body);
267
+ };
268
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/helpers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { DelegatingAuthenticationConverter } from '../core/delegating-authentication-converter';
3
+ import { BaseHttpClient } from '../core/base-http-client';
4
+ import { HttpMessageBody } from '../core/http-message-body';
5
+ import { HttpRequest } from '../core/http-request';
6
+ import { HttpResponse } from '../core/http-response';
7
+ import { HttpRequestBody } from '../core/http-request-body';
8
+ export declare class AxiosHttpClient extends BaseHttpClient {
9
+ constructor(baseUrl?: string, authenticationConverter?: DelegatingAuthenticationConverter);
10
+ sendRequest<ResponseBody extends HttpMessageBody = any>(request: HttpRequest<HttpRequestBody>, axiosClient?: AxiosInstance): Promise<HttpResponse<ResponseBody>>;
11
+ private getAxiosRequestMethod;
12
+ }
13
+ //# sourceMappingURL=axios-http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios-http-client.d.ts","sourceRoot":"","sources":["../../../../../src/lib/http/axios/axios-http-client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAsB,MAAM,OAAO,CAAC;AAIjE,OAAO,EAAE,iCAAiC,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAI5D,qBAAa,eAAgB,SAAQ,cAAc;gBAE/C,OAAO,SAAK,EACZ,uBAAuB,GAAE,iCAA2E;IAKhG,WAAW,CAAC,YAAY,SAAS,eAAe,GAAG,GAAG,EAC1D,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,EACrC,WAAW,CAAC,EAAE,aAAa,GAC1B,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAmFtC,OAAO,CAAC,qBAAqB;CAG9B"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AxiosHttpClient = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const axios_retry_1 = tslib_1.__importDefault(require("axios-retry"));
7
+ const http_proxy_agent_1 = require("http-proxy-agent");
8
+ const https_proxy_agent_1 = require("https-proxy-agent");
9
+ const delegating_authentication_converter_1 = require("../core/delegating-authentication-converter");
10
+ const base_http_client_1 = require("../core/base-http-client");
11
+ const http_error_1 = require("../core/http-error");
12
+ class AxiosHttpClient extends base_http_client_1.BaseHttpClient {
13
+ constructor(baseUrl = '', authenticationConverter = new delegating_authentication_converter_1.DelegatingAuthenticationConverter()) {
14
+ super(baseUrl, authenticationConverter);
15
+ }
16
+ sendRequest(request, axiosClient) {
17
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
18
+ var _a, _b;
19
+ try {
20
+ const axiosInstance = axiosClient || axios_1.default.create();
21
+ process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0';
22
+ const { urlWithoutQueryParams, queryParams: urlQueryParams } = this.getUrl(request);
23
+ const headers = this.getHeaders(request);
24
+ const axiosRequestMethod = this.getAxiosRequestMethod(request.method);
25
+ const timeout = request.timeout ? request.timeout : 0;
26
+ const queryParams = request.queryParams || {};
27
+ const responseType = request.responseType || 'json';
28
+ for (const [key, value] of Object.entries(queryParams)) {
29
+ urlQueryParams.append(key, value);
30
+ }
31
+ const config = {
32
+ method: axiosRequestMethod,
33
+ url: urlWithoutQueryParams,
34
+ params: urlQueryParams,
35
+ headers,
36
+ data: request.body,
37
+ timeout,
38
+ responseType,
39
+ };
40
+ const httpProxy = (_a = process.env['HTTP_PROXY']) !== null && _a !== void 0 ? _a : process.env['http_proxy'];
41
+ const httpsProxy = (_b = process.env['HTTPS_PROXY']) !== null && _b !== void 0 ? _b : process.env['https_proxy'];
42
+ if (httpProxy) {
43
+ config.httpAgent = new http_proxy_agent_1.HttpProxyAgent(httpProxy);
44
+ }
45
+ if (httpsProxy) {
46
+ config.httpsAgent = new https_proxy_agent_1.HttpsProxyAgent(httpsProxy);
47
+ }
48
+ if (httpProxy || httpsProxy) {
49
+ config.proxy = false;
50
+ }
51
+ if (request.followRedirects === false) {
52
+ config.maxRedirects = 0;
53
+ config.validateStatus = (status) => {
54
+ var _a;
55
+ if (status >= 400)
56
+ return false;
57
+ if ((_a = request.followRedirects) !== null && _a !== void 0 ? _a : false) {
58
+ return status >= 200 && status < 300;
59
+ }
60
+ return status >= 200 && status < 400;
61
+ };
62
+ }
63
+ if (request.retries && request.retries > 0) {
64
+ (0, axios_retry_1.default)(axiosInstance, {
65
+ retries: request.retries,
66
+ retryDelay: axios_retry_1.default.exponentialDelay,
67
+ retryCondition: (error) => {
68
+ return (axios_retry_1.default.isNetworkOrIdempotentRequestError(error) ||
69
+ (error.response && error.response.status >= 500) ||
70
+ false);
71
+ },
72
+ });
73
+ }
74
+ const response = yield axiosInstance.request(config);
75
+ return {
76
+ status: response.status,
77
+ headers: response.headers,
78
+ body: response.data,
79
+ };
80
+ }
81
+ catch (e) {
82
+ if (axios_1.default.isAxiosError(e)) {
83
+ const httpError = new http_error_1.HttpError(request.body, e);
84
+ console.error('[HttpClient#(sanitized error message)] Request failed:', httpError);
85
+ throw httpError;
86
+ }
87
+ throw e;
88
+ }
89
+ });
90
+ }
91
+ getAxiosRequestMethod(httpMethod) {
92
+ return httpMethod.toString();
93
+ }
94
+ }
95
+ exports.AxiosHttpClient = AxiosHttpClient;
96
+ //# sourceMappingURL=axios-http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios-http-client.js","sourceRoot":"","sources":["../../../../../src/lib/http/axios/axios-http-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { DelegatingAuthenticationConverter } from './delegating-authentication-converter';
2
+ import type { HttpClient } from './http-client';
3
+ import type { HttpHeaders } from './http-headers';
4
+ import type { HttpMessageBody } from './http-message-body';
5
+ import type { HttpRequest } from './http-request';
6
+ import { HttpRequestBody } from './http-request-body';
7
+ import { HttpResponse } from './http-response';
8
+ export declare abstract class BaseHttpClient implements HttpClient {
9
+ private readonly baseUrl;
10
+ private readonly authenticationConverter;
11
+ constructor(baseUrl: string, authenticationConverter: DelegatingAuthenticationConverter);
12
+ abstract sendRequest<RequestBody extends HttpMessageBody, ResponseBody extends HttpMessageBody>(request: HttpRequest<RequestBody>): Promise<HttpResponse<ResponseBody>>;
13
+ protected getUrl<RequestBody extends HttpMessageBody>(request: HttpRequest<RequestBody>): {
14
+ urlWithoutQueryParams: string;
15
+ queryParams: URLSearchParams;
16
+ };
17
+ protected getHeaders<RequestBody extends HttpRequestBody>(request: HttpRequest<RequestBody>): HttpHeaders;
18
+ private populateAuthentication;
19
+ }
20
+ //# sourceMappingURL=base-http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-http-client.d.ts","sourceRoot":"","sources":["../../../../../src/lib/http/core/base-http-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iCAAiC,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,8BAAsB,cAAe,YAAW,UAAU;IAEtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;gBADvB,OAAO,EAAE,MAAM,EACf,uBAAuB,EAAE,iCAAiC;IAG7E,QAAQ,CAAC,WAAW,CAClB,WAAW,SAAS,eAAe,EACnC,YAAY,SAAS,eAAe,EACpC,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAEzE,SAAS,CAAC,MAAM,CAAC,WAAW,SAAS,eAAe,EAClD,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,GAChC;QACD,qBAAqB,EAAE,MAAM,CAAC;QAC9B,WAAW,EAAE,eAAe,CAAC;KAC9B;IAcD,SAAS,CAAC,UAAU,CAAC,WAAW,SAAS,eAAe,EACtD,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,GAChC,WAAW;IA0Bd,OAAO,CAAC,sBAAsB;CAM/B"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseHttpClient = void 0;
4
+ const http_header_1 = require("./http-header");
5
+ const media_type_1 = require("./media-type");
6
+ class BaseHttpClient {
7
+ constructor(baseUrl, authenticationConverter) {
8
+ this.baseUrl = baseUrl;
9
+ this.authenticationConverter = authenticationConverter;
10
+ }
11
+ getUrl(request) {
12
+ const url = new URL(`${this.baseUrl}${request.url}`);
13
+ const urlWithoutQueryParams = `${url.origin}${url.pathname}`;
14
+ const queryParams = new URLSearchParams();
15
+ // Extract query parameters
16
+ url.searchParams.forEach((value, key) => {
17
+ queryParams.append(key, value);
18
+ });
19
+ return {
20
+ urlWithoutQueryParams,
21
+ queryParams,
22
+ };
23
+ }
24
+ getHeaders(request) {
25
+ var _a;
26
+ let requestHeaders = {
27
+ [http_header_1.HttpHeader.ACCEPT]: media_type_1.MediaType.APPLICATION_JSON,
28
+ };
29
+ if (request.authentication) {
30
+ this.populateAuthentication(request.authentication, requestHeaders);
31
+ }
32
+ if (request.body) {
33
+ switch ((_a = request.headers) === null || _a === void 0 ? void 0 : _a['Content-Type']) {
34
+ case 'text/csv':
35
+ requestHeaders[http_header_1.HttpHeader.CONTENT_TYPE] = media_type_1.MediaType.TEXT_CSV;
36
+ break;
37
+ default:
38
+ requestHeaders[http_header_1.HttpHeader.CONTENT_TYPE] = media_type_1.MediaType.APPLICATION_JSON;
39
+ break;
40
+ }
41
+ }
42
+ if (request.headers) {
43
+ requestHeaders = Object.assign(Object.assign({}, requestHeaders), request.headers);
44
+ }
45
+ return requestHeaders;
46
+ }
47
+ populateAuthentication(authentication, headers) {
48
+ this.authenticationConverter.convert(authentication, headers);
49
+ }
50
+ }
51
+ exports.BaseHttpClient = BaseHttpClient;
52
+ //# sourceMappingURL=base-http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-http-client.js","sourceRoot":"","sources":["../../../../../src/lib/http/core/base-http-client.ts"],"names":[],"mappings":";;;AAGA,+CAA2C;AAM3C,6CAAyC;AAEzC,MAAsB,cAAc;IAClC,YACmB,OAAe,EACf,uBAA0D;QAD1D,YAAO,GAAP,OAAO,CAAQ;QACf,4BAAuB,GAAvB,uBAAuB,CAAmC;IAC1E,CAAC;IAOM,MAAM,CACd,OAAiC;QAKjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,qBAAqB,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC;QAC1C,2BAA2B;QAC3B,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACtC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,OAAO;YACL,qBAAqB;YACrB,WAAW;SACZ,CAAC;IACJ,CAAC;IAES,UAAU,CAClB,OAAiC;;QAEjC,IAAI,cAAc,GAAgB;YAChC,CAAC,wBAAU,CAAC,MAAM,CAAC,EAAE,sBAAS,CAAC,gBAAgB;SAChD,CAAC;QAEF,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,QAAQ,MAAA,OAAO,CAAC,OAAO,0CAAG,cAAc,CAAC,EAAE,CAAC;gBAC1C,KAAK,UAAU;oBACb,cAAc,CAAC,wBAAU,CAAC,YAAY,CAAC,GAAG,sBAAS,CAAC,QAAQ,CAAC;oBAC7D,MAAM;gBAER;oBACE,cAAc,CAAC,wBAAU,CAAC,YAAY,CAAC,GAAG,sBAAS,CAAC,gBAAgB,CAAC;oBACrE,MAAM;YACV,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,cAAc,mCAAQ,cAAc,GAAK,OAAO,CAAC,OAAO,CAAE,CAAC;QAC7D,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,sBAAsB,CAC5B,cAA8B,EAC9B,OAAoB;QAEpB,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF;AAhED,wCAgEC"}