@segment/actions-core 1.3.0-next.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 (81) hide show
  1. package/dist/cjs/create-request-client.d.ts +5 -0
  2. package/dist/cjs/create-request-client.js +24 -0
  3. package/dist/cjs/dayjs.d.ts +2 -0
  4. package/dist/cjs/dayjs.js +10 -0
  5. package/dist/cjs/defaults.d.ts +2 -0
  6. package/dist/cjs/defaults.js +15 -0
  7. package/dist/cjs/destination-kit/action.d.ts +86 -0
  8. package/dist/cjs/destination-kit/action.js +217 -0
  9. package/dist/cjs/destination-kit/fields-to-jsonschema.d.ts +4 -0
  10. package/dist/cjs/destination-kit/fields-to-jsonschema.js +38 -0
  11. package/dist/cjs/destination-kit/index.d.ts +84 -0
  12. package/dist/cjs/destination-kit/index.js +165 -0
  13. package/dist/cjs/destination-kit/step.d.ts +38 -0
  14. package/dist/cjs/destination-kit/step.js +54 -0
  15. package/dist/cjs/destination-kit/types.d.ts +39 -0
  16. package/dist/cjs/destination-kit/types.js +3 -0
  17. package/dist/cjs/get.d.ts +5 -0
  18. package/dist/cjs/get.js +22 -0
  19. package/dist/cjs/index.d.ts +12 -0
  20. package/dist/cjs/index.js +26 -0
  21. package/dist/cjs/json-object.d.ts +11 -0
  22. package/dist/cjs/json-object.js +3 -0
  23. package/dist/cjs/mapping-kit/index.d.ts +8 -0
  24. package/dist/cjs/mapping-kit/index.js +182 -0
  25. package/dist/cjs/mapping-kit/is-directive.d.ts +2 -0
  26. package/dist/cjs/mapping-kit/is-directive.js +22 -0
  27. package/dist/cjs/mapping-kit/placeholders.d.ts +4 -0
  28. package/dist/cjs/mapping-kit/placeholders.js +51 -0
  29. package/dist/cjs/mapping-kit/validate.d.ts +1 -0
  30. package/dist/cjs/mapping-kit/validate.js +280 -0
  31. package/dist/cjs/omit.d.ts +4 -0
  32. package/dist/cjs/omit.js +15 -0
  33. package/dist/cjs/real-type-of.d.ts +12 -0
  34. package/dist/cjs/real-type-of.js +25 -0
  35. package/dist/cjs/remove-undefined.d.ts +1 -0
  36. package/dist/cjs/remove-undefined.js +24 -0
  37. package/dist/cjs/segment-event.d.ts +127 -0
  38. package/dist/cjs/segment-event.js +3 -0
  39. package/dist/cjs/time.d.ts +8 -0
  40. package/dist/cjs/time.js +18 -0
  41. package/dist/esm/create-request-client.d.ts +5 -0
  42. package/dist/esm/create-request-client.js +18 -0
  43. package/dist/esm/dayjs.d.ts +2 -0
  44. package/dist/esm/dayjs.js +5 -0
  45. package/dist/esm/defaults.d.ts +2 -0
  46. package/dist/esm/defaults.js +11 -0
  47. package/dist/esm/destination-kit/action.d.ts +86 -0
  48. package/dist/esm/destination-kit/action.js +209 -0
  49. package/dist/esm/destination-kit/fields-to-jsonschema.d.ts +4 -0
  50. package/dist/esm/destination-kit/fields-to-jsonschema.js +33 -0
  51. package/dist/esm/destination-kit/index.d.ts +84 -0
  52. package/dist/esm/destination-kit/index.js +157 -0
  53. package/dist/esm/destination-kit/step.d.ts +38 -0
  54. package/dist/esm/destination-kit/step.js +49 -0
  55. package/dist/esm/destination-kit/types.d.ts +39 -0
  56. package/dist/esm/destination-kit/types.js +2 -0
  57. package/dist/esm/get.d.ts +5 -0
  58. package/dist/esm/get.js +18 -0
  59. package/dist/esm/index.d.ts +12 -0
  60. package/dist/esm/index.js +9 -0
  61. package/dist/esm/json-object.d.ts +11 -0
  62. package/dist/esm/json-object.js +2 -0
  63. package/dist/esm/mapping-kit/index.d.ts +8 -0
  64. package/dist/esm/mapping-kit/index.js +175 -0
  65. package/dist/esm/mapping-kit/is-directive.d.ts +2 -0
  66. package/dist/esm/mapping-kit/is-directive.js +18 -0
  67. package/dist/esm/mapping-kit/placeholders.d.ts +4 -0
  68. package/dist/esm/mapping-kit/placeholders.js +47 -0
  69. package/dist/esm/mapping-kit/validate.d.ts +1 -0
  70. package/dist/esm/mapping-kit/validate.js +274 -0
  71. package/dist/esm/omit.d.ts +4 -0
  72. package/dist/esm/omit.js +11 -0
  73. package/dist/esm/real-type-of.d.ts +12 -0
  74. package/dist/esm/real-type-of.js +18 -0
  75. package/dist/esm/remove-undefined.d.ts +1 -0
  76. package/dist/esm/remove-undefined.js +20 -0
  77. package/dist/esm/segment-event.d.ts +127 -0
  78. package/dist/esm/segment-event.js +2 -0
  79. package/dist/esm/time.d.ts +8 -0
  80. package/dist/esm/time.js +13 -0
  81. package/package.json +74 -0
@@ -0,0 +1,5 @@
1
+ import { ExtendOptions, Got } from 'got';
2
+ /**
3
+ * Creates a Got client instance with Segment's default configuration + custom options
4
+ */
5
+ export default function createRequestClient(...options: ExtendOptions[]): Got;
@@ -0,0 +1,24 @@
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 got_1 = __importDefault(require("got"));
7
+ /**
8
+ * Creates a Got client instance with Segment's default configuration + custom options
9
+ */
10
+ function createRequestClient(...options) {
11
+ const defaultOptions = {
12
+ // disable automatic retries
13
+ retry: 0,
14
+ // default is no timeout
15
+ timeout: 5000,
16
+ headers: {
17
+ 'user-agent': 'Segment'
18
+ }
19
+ };
20
+ const client = got_1.default.extend(defaultOptions, ...options);
21
+ return client;
22
+ }
23
+ exports.default = createRequestClient;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXJlcXVlc3QtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NyZWF0ZS1yZXF1ZXN0LWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhDQUE2QztBQUU3Qzs7R0FFRztBQUNILFNBQXdCLG1CQUFtQixDQUFDLEdBQUcsT0FBd0I7SUFDckUsTUFBTSxjQUFjLEdBQUc7UUFDckIsNEJBQTRCO1FBQzVCLEtBQUssRUFBRSxDQUFDO1FBQ1Isd0JBQXdCO1FBQ3hCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFLFNBQVM7U0FDeEI7S0FDRixDQUFBO0lBRUQsTUFBTSxNQUFNLEdBQUcsYUFBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQTtJQUNyRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFiRCxzQ0FhQyJ9
@@ -0,0 +1,2 @@
1
+ import dayjs from 'dayjs';
2
+ export default dayjs;
@@ -0,0 +1,10 @@
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 dayjs_1 = __importDefault(require("dayjs"));
7
+ const utc_1 = __importDefault(require("dayjs/plugin/utc"));
8
+ dayjs_1.default.extend(utc_1.default);
9
+ exports.default = dayjs_1.default;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5anMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF5anMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBeUI7QUFDekIsMkRBQWtDO0FBRWxDLGVBQUssQ0FBQyxNQUFNLENBQUMsYUFBRyxDQUFDLENBQUE7QUFFakIsa0JBQWUsZUFBSyxDQUFBIn0=
@@ -0,0 +1,2 @@
1
+ import type { JSONSchema4Type } from 'json-schema';
2
+ export declare function defaultValues(fields: Record<string, unknown>): Record<string, JSONSchema4Type>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultValues = void 0;
4
+ function defaultValues(fields) {
5
+ const obj = {};
6
+ for (const field of Object.keys(fields)) {
7
+ const defaultValue = fields[field].default;
8
+ if (typeof defaultValue !== 'undefined') {
9
+ obj[field] = defaultValue;
10
+ }
11
+ }
12
+ return obj;
13
+ }
14
+ exports.defaultValues = defaultValues;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVmYXVsdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsU0FBZ0IsYUFBYSxDQUFDLE1BQStCO0lBQzNELE1BQU0sR0FBRyxHQUFvQyxFQUFFLENBQUE7SUFFL0MsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sWUFBWSxHQUFJLE1BQU0sQ0FBQyxLQUFLLENBQWlCLENBQUMsT0FBTyxDQUFBO1FBQzNELElBQUksT0FBTyxZQUFZLEtBQUssV0FBVyxFQUFFO1lBQ3ZDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUE7U0FDMUI7S0FDRjtJQUVELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQztBQVhELHNDQVdDIn0=
@@ -0,0 +1,86 @@
1
+ /// <reference types="node" />
2
+ import Ajv from 'ajv';
3
+ import { EventEmitter } from 'events';
4
+ import { Got } from 'got';
5
+ import { JSONLikeObject } from '../json-object';
6
+ import { ExecuteInput, Step, StepResult, Steps } from './step';
7
+ import type { InputField, RequestExtension } from './types';
8
+ export declare type RequestFn<Settings, Payload> = (request: Got, data: ExecuteInput<Settings, Payload>) => any;
9
+ export interface ActionDefinition<Settings, Payload = any> {
10
+ /** The unique identifier for the action, e.g. `postToChannel` */
11
+ /** The display title of the action */
12
+ title: string;
13
+ /** The display description of the action */
14
+ description: string;
15
+ /** Whether the action is recommended for quick setup */
16
+ recommended?: boolean;
17
+ /** An optional fql query that will be used to prepopulate the action when it is first set up */
18
+ defaultSubscription?: string;
19
+ /** Whether or not this action should be visible/configurable in the UI */
20
+ hidden?: boolean;
21
+ /**
22
+ * The fields used to perform the action. These fields should match what the partner API expects.
23
+ *
24
+ * This is a set of JSON Schema properties right now.
25
+ * We may eventually auto-generate the JSON Schema from a definition object
26
+ * instead of requiring devs to build and modify JSON Schema directly.
27
+ *
28
+ * Plus, JSON Schema cannot fully represent our action or field definitions
29
+ * without many custom keywords.
30
+ */
31
+ fields: Record<string, InputField>;
32
+ /**
33
+ * Temporary way to "register" autocomplete fields.
34
+ * This is likely going to change as we productionalize the data model and definition object
35
+ */
36
+ autocompleteFields?: {
37
+ [K in keyof Payload]?: RequestFn<Settings, Payload>;
38
+ };
39
+ /**
40
+ * Register fields that should be executed, cached and provided
41
+ * to the action's `perform` function
42
+ */
43
+ cachedFields?: {
44
+ [field: string]: {
45
+ key: (data: ExecuteInput<Settings, Payload>) => string;
46
+ ttl: number;
47
+ value: RequestFn<Settings, Payload>;
48
+ negative?: boolean;
49
+ };
50
+ };
51
+ /** The operation to perform when this action is triggered */
52
+ perform: RequestFn<Settings, Payload>;
53
+ }
54
+ export declare class Validate<Settings, Payload> extends Step<Settings, Payload> {
55
+ field: ExecuteInputField;
56
+ validate: Ajv.ValidateFunction;
57
+ constructor(field: ExecuteInputField, schema: object);
58
+ executeStep(data: ExecuteInput<Settings, Payload>): Promise<string>;
59
+ }
60
+ interface ExecuteAutocompleteInput<Settings, Payload> {
61
+ settings: Settings;
62
+ payload: Payload;
63
+ cachedFields: {
64
+ [key: string]: string;
65
+ };
66
+ page?: string;
67
+ }
68
+ declare type ExecuteInputField = 'payload' | 'settings';
69
+ /**
70
+ * Action is the beginning step for all partner actions. Entrypoints always start with the
71
+ * MapAndValidateInput step.
72
+ */
73
+ export declare class Action<Settings, Payload extends JSONLikeObject> extends EventEmitter {
74
+ readonly steps: Steps<Settings, Payload>;
75
+ private requestExtensions;
76
+ private autocompleteCache;
77
+ constructor(definition: ActionDefinition<Settings, Payload>, extendRequest?: RequestExtension<Settings, Payload>);
78
+ execute(data: ExecuteInput<Settings, Payload>): Promise<StepResult[]>;
79
+ executeAutocomplete(field: string, data: ExecuteAutocompleteInput<Settings, Payload>): any;
80
+ private loadDefinition;
81
+ private validatePayload;
82
+ private autocomplete;
83
+ private request;
84
+ private cachedRequest;
85
+ }
86
+ export {};
@@ -0,0 +1,217 @@
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.Action = exports.Validate = void 0;
7
+ // @ts-ignore no types
8
+ const ajv_human_errors_1 = require("@segment/ajv-human-errors");
9
+ const ajv_1 = __importDefault(require("ajv"));
10
+ const events_1 = require("events");
11
+ const node_cache_1 = __importDefault(require("node-cache"));
12
+ const create_request_client_1 = __importDefault(require("../create-request-client"));
13
+ const get_1 = require("../get");
14
+ const mapping_kit_1 = require("../mapping-kit");
15
+ const fields_to_jsonschema_1 = require("./fields-to-jsonschema");
16
+ const step_1 = require("./step");
17
+ class MapInput extends step_1.Step {
18
+ executeStep(data) {
19
+ // Transforms the initial payload (event) + action settings (from `subscriptions[0].mapping`)
20
+ // into input data that the action can use to talk to partner apis
21
+ if (data.mapping) {
22
+ // Technically we can't know whether or not `transform` returns the exact shape of Payload here, hence the casting
23
+ // It will be validated in subsequent steps
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ data.payload = mapping_kit_1.transform(data.mapping, data.payload);
26
+ }
27
+ return Promise.resolve('MapInput completed');
28
+ }
29
+ }
30
+ class Validate extends step_1.Step {
31
+ constructor(field, schema) {
32
+ super();
33
+ this.field = field;
34
+ const ajv = new ajv_1.default({
35
+ // Coerce types to be a bit more liberal.
36
+ coerceTypes: true,
37
+ // Return all validation errors, not just the first.
38
+ allErrors: true,
39
+ // Include reference to schema and data in error values.
40
+ verbose: true,
41
+ // Use a more parse-able format for JSON paths.
42
+ jsonPointers: true
43
+ });
44
+ this.validate = ajv.compile(schema);
45
+ }
46
+ executeStep(data) {
47
+ if (!this.validate(data[this.field])) {
48
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
49
+ throw new ajv_human_errors_1.AggregateAjvError(this.validate.errors);
50
+ }
51
+ return Promise.resolve('Validate completed');
52
+ }
53
+ }
54
+ exports.Validate = Validate;
55
+ /**
56
+ * Request handles delivering a payload to an external API. It uses the `got` library under the hood.
57
+ *
58
+ * The callback should be able to return the raw request instead of needing to do `return response.data` etc.
59
+ */
60
+ class Request extends step_1.Step {
61
+ constructor(extensions, requestFn) {
62
+ super();
63
+ this.extensions = extensions || [];
64
+ this.requestFn = requestFn;
65
+ }
66
+ async executeStep(data) {
67
+ if (!this.requestFn) {
68
+ return '';
69
+ }
70
+ const request = this.createRequestClient(data);
71
+ const response = await this.requestFn(request, data);
72
+ if (response === null) {
73
+ return 'TODO: null';
74
+ }
75
+ return response.body;
76
+ }
77
+ createRequestClient(data) {
78
+ const options = this.extensions.map((extension) => extension(data));
79
+ const client = create_request_client_1.default(...options).extend({
80
+ hooks: {
81
+ beforeError: [
82
+ (error) => {
83
+ // @ts-ignore the type is wrong in got
84
+ const { response } = error;
85
+ this.emit('response', response);
86
+ return error;
87
+ }
88
+ ],
89
+ afterResponse: [
90
+ (response) => {
91
+ this.emit('response', response);
92
+ return response;
93
+ }
94
+ ]
95
+ }
96
+ });
97
+ return client;
98
+ }
99
+ }
100
+ // CachedRequest is like Request but cached. Next question.
101
+ class CachedRequest extends Request {
102
+ constructor(extensions, config) {
103
+ super(extensions);
104
+ this.keyFn = config.key;
105
+ this.valueFn = config.value;
106
+ this.as = config.as;
107
+ this.negative = config.negative || false;
108
+ this.cache = new node_cache_1.default({
109
+ stdTTL: config.ttl,
110
+ maxKeys: 1000
111
+ });
112
+ }
113
+ async executeStep(data) {
114
+ const k = this.keyFn(data);
115
+ let v = this.cache.get(k);
116
+ if (v !== undefined) {
117
+ data.cachedFields[this.as] = v;
118
+ return 'cache hit';
119
+ }
120
+ const request = this.createRequestClient(data);
121
+ try {
122
+ v = await this.valueFn(request, data);
123
+ }
124
+ catch (e) {
125
+ if (get_1.get(e, 'response.statusCode') === 404) {
126
+ v = undefined;
127
+ }
128
+ else {
129
+ throw e;
130
+ }
131
+ }
132
+ // Only cache if value is not negative *or* negative option is set. Negative caching is off by
133
+ // default because the common cases are: A) auth token generation, which should never be
134
+ // negative, and B) create-or-update patterns, where the resource should exist after the first
135
+ // negative value.
136
+ if ((v !== null && v !== undefined) || this.negative) {
137
+ this.cache.set(k, v);
138
+ }
139
+ return 'cache miss';
140
+ }
141
+ }
142
+ /**
143
+ * Action is the beginning step for all partner actions. Entrypoints always start with the
144
+ * MapAndValidateInput step.
145
+ */
146
+ class Action extends events_1.EventEmitter {
147
+ constructor(definition, extendRequest) {
148
+ super();
149
+ this.steps = new step_1.Steps();
150
+ const step = new MapInput();
151
+ this.steps.push(step);
152
+ this.autocompleteCache = {};
153
+ this.requestExtensions = [];
154
+ if (extendRequest) {
155
+ // This must come before we load the definition because
156
+ // it instantiates "steps" with whatever request extensions
157
+ // are defined at that moment in time
158
+ this.requestExtensions.push(extendRequest);
159
+ }
160
+ this.loadDefinition(definition);
161
+ }
162
+ async execute(data) {
163
+ const results = await this.steps.execute(data);
164
+ const finalResult = results[results.length - 1];
165
+ if (finalResult.error) {
166
+ throw finalResult.error;
167
+ }
168
+ return results;
169
+ }
170
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
171
+ executeAutocomplete(field, data) {
172
+ if (!this.autocompleteCache[field]) {
173
+ return {
174
+ data: [],
175
+ pagination: {}
176
+ };
177
+ }
178
+ const step = new Request(this.requestExtensions, this.autocompleteCache[field]);
179
+ return step.executeStep(data);
180
+ }
181
+ loadDefinition(definition) {
182
+ var _a, _b;
183
+ if (definition.fields) {
184
+ this.validatePayload(definition.fields);
185
+ }
186
+ Object.entries((_a = definition.autocompleteFields) !== null && _a !== void 0 ? _a : {}).forEach(([field, callback]) => {
187
+ this.autocomplete(field, callback);
188
+ });
189
+ Object.entries((_b = definition.cachedFields) !== null && _b !== void 0 ? _b : {}).forEach(([field, cacheConfig]) => {
190
+ this.cachedRequest({
191
+ ...cacheConfig,
192
+ as: field
193
+ });
194
+ });
195
+ if (definition.perform) {
196
+ this.request(definition.perform);
197
+ }
198
+ }
199
+ validatePayload(fields) {
200
+ const step = new Validate('payload', fields_to_jsonschema_1.fieldsToJsonSchema(fields));
201
+ this.steps.push(step);
202
+ }
203
+ autocomplete(field, callback) {
204
+ this.autocompleteCache[field] = callback;
205
+ }
206
+ request(requestFn) {
207
+ const step = new Request(this.requestExtensions, requestFn);
208
+ step.on('response', (response) => this.emit('response', response));
209
+ this.steps.push(step);
210
+ }
211
+ cachedRequest(config) {
212
+ const step = new CachedRequest(this.requestExtensions, config);
213
+ this.steps.push(step);
214
+ }
215
+ }
216
+ exports.Action = Action;
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Rlc3RpbmF0aW9uLWtpdC9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0JBQXNCO0FBQ3RCLGdFQUE2RDtBQUM3RCw4Q0FBcUI7QUFDckIsbUNBQXFDO0FBRXJDLDREQUFrQztBQUNsQyxxRkFBMEQ7QUFDMUQsZ0NBQTRCO0FBRTVCLGdEQUEwQztBQUMxQyxpRUFBMkQ7QUFDM0QsaUNBQThEO0FBK0Q5RCxNQUFNLFFBQW1ELFNBQVEsV0FBdUI7SUFDdEYsV0FBVyxDQUFDLElBQXFDO1FBQy9DLDZGQUE2RjtRQUM3RixrRUFBa0U7UUFDbEUsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLGtIQUFrSDtZQUNsSCwyQ0FBMkM7WUFDM0MsOERBQThEO1lBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsdUJBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFjLENBQVksQ0FBQTtTQUN2RTtRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzlDLENBQUM7Q0FDRjtBQUVELE1BQWEsUUFBNEIsU0FBUSxXQUF1QjtJQUl0RSxZQUFZLEtBQXdCLEVBQUUsTUFBYztRQUNsRCxLQUFLLEVBQUUsQ0FBQTtRQUVQLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBRWxCLE1BQU0sR0FBRyxHQUFHLElBQUksYUFBRyxDQUFDO1lBQ2xCLHlDQUF5QztZQUN6QyxXQUFXLEVBQUUsSUFBSTtZQUNqQixvREFBb0Q7WUFDcEQsU0FBUyxFQUFFLElBQUk7WUFDZix3REFBd0Q7WUFDeEQsT0FBTyxFQUFFLElBQUk7WUFDYiwrQ0FBK0M7WUFDL0MsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBcUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BDLDZEQUE2RDtZQUM3RCxNQUFNLElBQUksb0NBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNsRDtRQUVELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQzlDLENBQUM7Q0FDRjtBQS9CRCw0QkErQkM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUEyQixTQUFRLFdBQXVCO0lBSzlELFlBQVksVUFBZ0QsRUFBRSxTQUF3QztRQUNwRyxLQUFLLEVBQUUsQ0FBQTtRQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQTtRQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFxQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixPQUFPLEVBQUUsQ0FBQTtTQUNWO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTlDLE1BQU0sUUFBUSxHQUFxQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBRXRGLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtZQUNyQixPQUFPLFlBQVksQ0FBQTtTQUNwQjtRQUVELE9BQU8sUUFBUSxDQUFDLElBQWMsQ0FBQTtJQUNoQyxDQUFDO0lBRVMsbUJBQW1CLENBQUMsSUFBcUM7UUFDakUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ25FLE1BQU0sTUFBTSxHQUFHLCtCQUFtQixDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3BELEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUU7b0JBQ1gsQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDUixzQ0FBc0M7d0JBQ3RDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUE7d0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO3dCQUMvQixPQUFPLEtBQUssQ0FBQTtvQkFDZCxDQUFDO2lCQUNGO2dCQUNELGFBQWEsRUFBRTtvQkFDYixDQUFDLFFBQVEsRUFBRSxFQUFFO3dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO3dCQUMvQixPQUFPLFFBQVEsQ0FBQTtvQkFDakIsQ0FBQztpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0NBQ0Y7QUFVRCwyREFBMkQ7QUFDM0QsTUFBTSxhQUFpQyxTQUFRLE9BQTBCO0lBT3ZFLFlBQVksVUFBZ0QsRUFBRSxNQUE4QztRQUMxRyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFakIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUMzQixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUE7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQTtRQUV4QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksb0JBQVMsQ0FBQztZQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUc7WUFDbEIsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFxQztRQUNyRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzFCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFTLENBQUMsQ0FBQyxDQUFBO1FBRWpDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDOUIsT0FBTyxXQUFXLENBQUE7U0FDbkI7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFOUMsSUFBSTtZQUNGLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFBO1NBQ3RDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLFNBQUcsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLENBQUMsS0FBSyxHQUFHLEVBQUU7Z0JBQ3pDLENBQUMsR0FBRyxTQUFTLENBQUE7YUFDZDtpQkFBTTtnQkFDTCxNQUFNLENBQUMsQ0FBQTthQUNSO1NBQ0Y7UUFFRCw4RkFBOEY7UUFDOUYsd0ZBQXdGO1FBQ3hGLDhGQUE4RjtRQUM5RixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ3JCO1FBRUQsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztDQUNGO0FBV0Q7OztHQUdHO0FBQ0gsTUFBYSxNQUFpRCxTQUFRLHFCQUFZO0lBS2hGLFlBQVksVUFBK0MsRUFBRSxhQUFtRDtRQUM5RyxLQUFLLEVBQUUsQ0FBQTtRQUVQLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxZQUFLLEVBQUUsQ0FBQTtRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsRUFBcUIsQ0FBQTtRQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUE7UUFFM0IsSUFBSSxhQUFhLEVBQUU7WUFDakIsdURBQXVEO1lBQ3ZELDJEQUEyRDtZQUMzRCxxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUMzQztRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBcUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU5QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUMvQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDckIsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFBO1NBQ3hCO1FBRUQsT0FBTyxPQUFPLENBQUE7SUFDaEIsQ0FBQztJQUVELDhEQUE4RDtJQUM5RCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsSUFBaUQ7UUFDbEYsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNsQyxPQUFPO2dCQUNMLElBQUksRUFBRSxFQUFFO2dCQUNSLFVBQVUsRUFBRSxFQUFFO2FBQ2YsQ0FBQTtTQUNGO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQW9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUVsRyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDL0IsQ0FBQztJQUVPLGNBQWMsQ0FBQyxVQUErQzs7UUFDcEUsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQ3hDO1FBRUQsTUFBTSxDQUFDLE9BQU8sT0FBQyxVQUFVLENBQUMsa0JBQWtCLG1DQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBd0MsQ0FBQyxDQUFBO1FBQ3BFLENBQUMsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLE9BQU8sT0FBQyxVQUFVLENBQUMsWUFBWSxtQ0FBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFO1lBQzdFLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ2pCLEdBQUcsV0FBVztnQkFDZCxFQUFFLEVBQUUsS0FBSzthQUNWLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxNQUFrQztRQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUseUNBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWEsRUFBRSxRQUFzQztRQUN4RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFBO0lBQzFDLENBQUM7SUFFTyxPQUFPLENBQUMsU0FBdUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQW9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUM5RSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QixDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQThDO1FBQ2xFLE1BQU0sSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2QixDQUFDO0NBQ0Y7QUExRkQsd0JBMEZDIn0=
@@ -0,0 +1,4 @@
1
+ import { JSONSchema4 } from 'json-schema';
2
+ import type { InputField } from './types';
3
+ export declare function fieldsToJsonSchema(fields?: Record<string, InputField>): JSONSchema4;
4
+ export declare function jsonSchemaToFields(schema?: JSONSchema4): Record<string, InputField>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonSchemaToFields = exports.fieldsToJsonSchema = void 0;
4
+ function fieldsToJsonSchema(fields = {}) {
5
+ const required = [];
6
+ const properties = {};
7
+ for (const key of Object.keys(fields)) {
8
+ const field = fields[key];
9
+ // Remove the `required` property from fields because it'll get lifted up into an array of required keys
10
+ properties[key] = Object.assign({}, field);
11
+ delete properties[key].required;
12
+ // Grab all the field keys with `required: true`
13
+ if (field.required) {
14
+ required.push(key);
15
+ }
16
+ }
17
+ return {
18
+ $schema: 'http://json-schema.org/schema#',
19
+ type: 'object',
20
+ additionalProperties: false,
21
+ properties,
22
+ required
23
+ };
24
+ }
25
+ exports.fieldsToJsonSchema = fieldsToJsonSchema;
26
+ function jsonSchemaToFields(schema = {}) {
27
+ var _a, _b;
28
+ const requiredFields = (_a = schema.required) !== null && _a !== void 0 ? _a : [];
29
+ const properties = (_b = schema.properties) !== null && _b !== void 0 ? _b : {};
30
+ for (const key of Object.keys(properties)) {
31
+ if (requiredFields.includes(key)) {
32
+ properties[key].required = true;
33
+ }
34
+ }
35
+ return properties;
36
+ }
37
+ exports.jsonSchemaToFields = jsonSchemaToFields;
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLXRvLWpzb25zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzdGluYXRpb24ta2l0L2ZpZWxkcy10by1qc29uc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLFNBQWdCLGtCQUFrQixDQUFDLFNBQXFDLEVBQUU7SUFDeEUsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFBO0lBQzdCLE1BQU0sVUFBVSxHQUFnQyxFQUFFLENBQUE7SUFFbEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV6Qix3R0FBd0c7UUFDeEcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBZ0IsQ0FBQTtRQUN6RCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFFL0IsZ0RBQWdEO1FBQ2hELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQ25CO0tBQ0Y7SUFFRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGdDQUFnQztRQUN6QyxJQUFJLEVBQUUsUUFBUTtRQUNkLG9CQUFvQixFQUFFLEtBQUs7UUFDM0IsVUFBVTtRQUNWLFFBQVE7S0FDVCxDQUFBO0FBQ0gsQ0FBQztBQXhCRCxnREF3QkM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxTQUFzQixFQUFFOztJQUN6RCxNQUFNLGNBQWMsU0FBSSxNQUFNLENBQUMsUUFBcUIsbUNBQUksRUFBRSxDQUFBO0lBQzFELE1BQU0sVUFBVSxTQUFJLE1BQU0sQ0FBQyxVQUF5QyxtQ0FBSSxFQUFFLENBQUE7SUFFMUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ3pDLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtTQUNoQztLQUNGO0lBRUQsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQVhELGdEQVdDIn0=
@@ -0,0 +1,84 @@
1
+ import { CancelableRequest, Got, Response } from 'got';
2
+ import { JSONSchema4 } from 'json-schema';
3
+ import { Action, ActionDefinition } from './action';
4
+ import { ExecuteInput, StepResult } from './step';
5
+ import { JSONLikeObject, JSONObject } from '../json-object';
6
+ import { SegmentEvent } from '../segment-event';
7
+ import { fieldsToJsonSchema, jsonSchemaToFields } from './fields-to-jsonschema';
8
+ import type { InputField, RequestExtension } from './types';
9
+ export type { ActionDefinition, ExecuteInput };
10
+ export { fieldsToJsonSchema, jsonSchemaToFields };
11
+ export interface SubscriptionStats {
12
+ duration: number;
13
+ destination: string;
14
+ action: string;
15
+ subscribe: string;
16
+ state: string;
17
+ input: JSONLikeObject;
18
+ output: StepResult[] | null;
19
+ }
20
+ interface PartnerActions<Settings, Payload extends JSONLikeObject> {
21
+ [key: string]: Action<Settings, Payload>;
22
+ }
23
+ export interface DestinationDefinition<Settings = unknown> {
24
+ /** The name of the destination */
25
+ name: string;
26
+ /** An optional function to extend requests sent from the destination (including all actions) */
27
+ extendRequest?: RequestExtension<Settings>;
28
+ /** Optional authentication configuration */
29
+ authentication?: AuthenticationScheme<Settings>;
30
+ /** Actions */
31
+ actions: {
32
+ [key: string]: ActionDefinition<Settings>;
33
+ };
34
+ /** Subscription presets automatically applied in quick setup */
35
+ presets?: Subscription[];
36
+ }
37
+ export interface Subscription {
38
+ name?: string;
39
+ partnerAction: string;
40
+ subscribe: string;
41
+ mapping?: JSONObject;
42
+ }
43
+ interface TestAuthSettings<Settings> {
44
+ settings: Settings;
45
+ }
46
+ interface Authentication<Settings> {
47
+ scheme: 'basic' | 'custom';
48
+ fields: Record<string, InputField>;
49
+ testAuthentication: (req: Got, input: TestAuthSettings<Settings>) => CancelableRequest<Response<string>>;
50
+ }
51
+ export interface CustomAuthentication<Settings> extends Authentication<Settings> {
52
+ /** Typically used for "API Key" authentication. */
53
+ scheme: 'custom';
54
+ }
55
+ export interface BasicAuthentication<Settings> extends Authentication<Settings> {
56
+ scheme: 'basic';
57
+ }
58
+ export declare type AuthenticationScheme<Settings = any> = BasicAuthentication<Settings> | CustomAuthentication<Settings>;
59
+ interface EventInput<Settings> {
60
+ readonly event: SegmentEvent;
61
+ readonly mapping: JSONObject;
62
+ readonly settings: Settings;
63
+ }
64
+ export declare class Destination<Settings = JSONObject> {
65
+ readonly definition: DestinationDefinition<Settings>;
66
+ readonly name: string;
67
+ readonly authentication?: AuthenticationScheme<Settings>;
68
+ readonly extendRequest?: RequestExtension<Settings>;
69
+ readonly actions: PartnerActions<Settings, any>;
70
+ readonly responses: Response[];
71
+ readonly settingsSchema?: JSONSchema4;
72
+ constructor(destination: DestinationDefinition<Settings>);
73
+ testAuthentication(settings: Settings): Promise<void>;
74
+ private partnerAction;
75
+ protected executeAction(actionSlug: string, { event, mapping, settings }: EventInput<Settings>): Promise<StepResult[]>;
76
+ private onSubscription;
77
+ /**
78
+ * Note: Until we move subscriptions upstream (into int-consumer) we've opted
79
+ * to have failures abort the set of subscriptions and get potentially retried by centrifuge
80
+ */
81
+ onEvent(event: SegmentEvent, settings: JSONObject, onComplete?: (stats: SubscriptionStats) => void): Promise<StepResult[]>;
82
+ private getSubscriptions;
83
+ private getDestinationSettings;
84
+ }