@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.
- package/dist/cjs/create-request-client.d.ts +5 -0
- package/dist/cjs/create-request-client.js +24 -0
- package/dist/cjs/dayjs.d.ts +2 -0
- package/dist/cjs/dayjs.js +10 -0
- package/dist/cjs/defaults.d.ts +2 -0
- package/dist/cjs/defaults.js +15 -0
- package/dist/cjs/destination-kit/action.d.ts +86 -0
- package/dist/cjs/destination-kit/action.js +217 -0
- package/dist/cjs/destination-kit/fields-to-jsonschema.d.ts +4 -0
- package/dist/cjs/destination-kit/fields-to-jsonschema.js +38 -0
- package/dist/cjs/destination-kit/index.d.ts +84 -0
- package/dist/cjs/destination-kit/index.js +165 -0
- package/dist/cjs/destination-kit/step.d.ts +38 -0
- package/dist/cjs/destination-kit/step.js +54 -0
- package/dist/cjs/destination-kit/types.d.ts +39 -0
- package/dist/cjs/destination-kit/types.js +3 -0
- package/dist/cjs/get.d.ts +5 -0
- package/dist/cjs/get.js +22 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.js +26 -0
- package/dist/cjs/json-object.d.ts +11 -0
- package/dist/cjs/json-object.js +3 -0
- package/dist/cjs/mapping-kit/index.d.ts +8 -0
- package/dist/cjs/mapping-kit/index.js +182 -0
- package/dist/cjs/mapping-kit/is-directive.d.ts +2 -0
- package/dist/cjs/mapping-kit/is-directive.js +22 -0
- package/dist/cjs/mapping-kit/placeholders.d.ts +4 -0
- package/dist/cjs/mapping-kit/placeholders.js +51 -0
- package/dist/cjs/mapping-kit/validate.d.ts +1 -0
- package/dist/cjs/mapping-kit/validate.js +280 -0
- package/dist/cjs/omit.d.ts +4 -0
- package/dist/cjs/omit.js +15 -0
- package/dist/cjs/real-type-of.d.ts +12 -0
- package/dist/cjs/real-type-of.js +25 -0
- package/dist/cjs/remove-undefined.d.ts +1 -0
- package/dist/cjs/remove-undefined.js +24 -0
- package/dist/cjs/segment-event.d.ts +127 -0
- package/dist/cjs/segment-event.js +3 -0
- package/dist/cjs/time.d.ts +8 -0
- package/dist/cjs/time.js +18 -0
- package/dist/esm/create-request-client.d.ts +5 -0
- package/dist/esm/create-request-client.js +18 -0
- package/dist/esm/dayjs.d.ts +2 -0
- package/dist/esm/dayjs.js +5 -0
- package/dist/esm/defaults.d.ts +2 -0
- package/dist/esm/defaults.js +11 -0
- package/dist/esm/destination-kit/action.d.ts +86 -0
- package/dist/esm/destination-kit/action.js +209 -0
- package/dist/esm/destination-kit/fields-to-jsonschema.d.ts +4 -0
- package/dist/esm/destination-kit/fields-to-jsonschema.js +33 -0
- package/dist/esm/destination-kit/index.d.ts +84 -0
- package/dist/esm/destination-kit/index.js +157 -0
- package/dist/esm/destination-kit/step.d.ts +38 -0
- package/dist/esm/destination-kit/step.js +49 -0
- package/dist/esm/destination-kit/types.d.ts +39 -0
- package/dist/esm/destination-kit/types.js +2 -0
- package/dist/esm/get.d.ts +5 -0
- package/dist/esm/get.js +18 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/json-object.d.ts +11 -0
- package/dist/esm/json-object.js +2 -0
- package/dist/esm/mapping-kit/index.d.ts +8 -0
- package/dist/esm/mapping-kit/index.js +175 -0
- package/dist/esm/mapping-kit/is-directive.d.ts +2 -0
- package/dist/esm/mapping-kit/is-directive.js +18 -0
- package/dist/esm/mapping-kit/placeholders.d.ts +4 -0
- package/dist/esm/mapping-kit/placeholders.js +47 -0
- package/dist/esm/mapping-kit/validate.d.ts +1 -0
- package/dist/esm/mapping-kit/validate.js +274 -0
- package/dist/esm/omit.d.ts +4 -0
- package/dist/esm/omit.js +11 -0
- package/dist/esm/real-type-of.d.ts +12 -0
- package/dist/esm/real-type-of.js +18 -0
- package/dist/esm/remove-undefined.d.ts +1 -0
- package/dist/esm/remove-undefined.js +20 -0
- package/dist/esm/segment-event.d.ts +127 -0
- package/dist/esm/segment-event.js +2 -0
- package/dist/esm/time.d.ts +8 -0
- package/dist/esm/time.js +13 -0
- package/package.json +74 -0
|
@@ -0,0 +1,165 @@
|
|
|
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.Destination = exports.jsonSchemaToFields = exports.fieldsToJsonSchema = void 0;
|
|
7
|
+
const fab5_subscriptions_1 = require("@segment/fab5-subscriptions");
|
|
8
|
+
const http_errors_1 = require("http-errors");
|
|
9
|
+
const got_1 = __importDefault(require("got"));
|
|
10
|
+
const action_1 = require("./action");
|
|
11
|
+
const time_1 = require("../time");
|
|
12
|
+
const fields_to_jsonschema_1 = require("./fields-to-jsonschema");
|
|
13
|
+
Object.defineProperty(exports, "fieldsToJsonSchema", { enumerable: true, get: function () { return fields_to_jsonschema_1.fieldsToJsonSchema; } });
|
|
14
|
+
Object.defineProperty(exports, "jsonSchemaToFields", { enumerable: true, get: function () { return fields_to_jsonschema_1.jsonSchemaToFields; } });
|
|
15
|
+
class Destination {
|
|
16
|
+
constructor(destination) {
|
|
17
|
+
var _a;
|
|
18
|
+
this.definition = destination;
|
|
19
|
+
this.name = destination.name;
|
|
20
|
+
this.extendRequest = destination.extendRequest;
|
|
21
|
+
this.actions = {};
|
|
22
|
+
this.authentication = destination.authentication;
|
|
23
|
+
this.responses = [];
|
|
24
|
+
// Convert to complete JSON Schema
|
|
25
|
+
if ((_a = this.authentication) === null || _a === void 0 ? void 0 : _a.fields) {
|
|
26
|
+
this.settingsSchema = fields_to_jsonschema_1.fieldsToJsonSchema(this.authentication.fields);
|
|
27
|
+
}
|
|
28
|
+
for (const action of Object.keys(destination.actions)) {
|
|
29
|
+
this.partnerAction(action, destination.actions[action]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async testAuthentication(settings) {
|
|
33
|
+
var _a;
|
|
34
|
+
const context = { settings, payload: {}, cachedFields: {} };
|
|
35
|
+
if (this.settingsSchema) {
|
|
36
|
+
const step = new action_1.Validate('settings', this.settingsSchema);
|
|
37
|
+
await step.executeStep(context);
|
|
38
|
+
}
|
|
39
|
+
if (!((_a = this.authentication) === null || _a === void 0 ? void 0 : _a.testAuthentication)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
let request = got_1.default.extend({
|
|
43
|
+
retry: 0,
|
|
44
|
+
timeout: 3000,
|
|
45
|
+
headers: {
|
|
46
|
+
'user-agent': undefined
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
if (typeof this.extendRequest === 'function') {
|
|
50
|
+
request = request.extend(this.extendRequest(context));
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
await this.authentication.testAuthentication(request, { settings });
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new Error('Credentials are invalid');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
partnerAction(slug, definition) {
|
|
60
|
+
const action = new action_1.Action(definition, this.extendRequest);
|
|
61
|
+
action.on('response', (response) => {
|
|
62
|
+
if (response) {
|
|
63
|
+
this.responses.push(response);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
this.actions[slug] = action;
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
executeAction(actionSlug, { event, mapping, settings }) {
|
|
70
|
+
const action = this.actions[actionSlug];
|
|
71
|
+
if (!action) {
|
|
72
|
+
throw new http_errors_1.BadRequest(`"${actionSlug}" is not a valid action`);
|
|
73
|
+
}
|
|
74
|
+
return action.execute({
|
|
75
|
+
cachedFields: {},
|
|
76
|
+
mapping,
|
|
77
|
+
payload: event,
|
|
78
|
+
settings
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async onSubscription(subscription, event, settings, onComplete) {
|
|
82
|
+
const subscriptionStartedAt = time_1.time();
|
|
83
|
+
const actionSlug = subscription.partnerAction;
|
|
84
|
+
const input = {
|
|
85
|
+
event,
|
|
86
|
+
mapping: subscription.mapping || {},
|
|
87
|
+
settings
|
|
88
|
+
};
|
|
89
|
+
let state = 'pending';
|
|
90
|
+
let results = null;
|
|
91
|
+
try {
|
|
92
|
+
if (typeof subscription.subscribe !== 'string') {
|
|
93
|
+
state = 'skipped';
|
|
94
|
+
results = [{ output: 'invalid subscription' }];
|
|
95
|
+
return results;
|
|
96
|
+
}
|
|
97
|
+
const isSubscribed = fab5_subscriptions_1.validate(fab5_subscriptions_1.parseFql(subscription.subscribe), event);
|
|
98
|
+
if (!isSubscribed) {
|
|
99
|
+
state = 'skipped';
|
|
100
|
+
results = [{ output: 'not subscribed' }];
|
|
101
|
+
return results;
|
|
102
|
+
}
|
|
103
|
+
results = await this.executeAction(actionSlug, input);
|
|
104
|
+
state = 'done';
|
|
105
|
+
return results;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
state = 'errored';
|
|
109
|
+
results = [{ error }];
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
113
|
+
const subscriptionEndedAt = time_1.time();
|
|
114
|
+
const subscriptionDuration = time_1.duration(subscriptionStartedAt, subscriptionEndedAt);
|
|
115
|
+
onComplete === null || onComplete === void 0 ? void 0 : onComplete({
|
|
116
|
+
duration: subscriptionDuration,
|
|
117
|
+
destination: this.name,
|
|
118
|
+
action: actionSlug,
|
|
119
|
+
subscribe: subscription.subscribe,
|
|
120
|
+
state,
|
|
121
|
+
input: {
|
|
122
|
+
event: input.event,
|
|
123
|
+
mapping: input.mapping,
|
|
124
|
+
settings: input.settings
|
|
125
|
+
},
|
|
126
|
+
output: results
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Note: Until we move subscriptions upstream (into int-consumer) we've opted
|
|
132
|
+
* to have failures abort the set of subscriptions and get potentially retried by centrifuge
|
|
133
|
+
*/
|
|
134
|
+
async onEvent(event, settings, onComplete) {
|
|
135
|
+
const subscriptions = this.getSubscriptions(settings);
|
|
136
|
+
const destinationSettings = this.getDestinationSettings(settings);
|
|
137
|
+
const promises = subscriptions.map((subscription) => this.onSubscription(subscription, event, destinationSettings, onComplete));
|
|
138
|
+
const results = await Promise.all(promises);
|
|
139
|
+
return [].concat(...results);
|
|
140
|
+
}
|
|
141
|
+
getSubscriptions(settings) {
|
|
142
|
+
const { subscription, subscriptions } = settings;
|
|
143
|
+
let parsedSubscriptions;
|
|
144
|
+
// To support event tester we need to parse and validate multiple subscriptions from the settings
|
|
145
|
+
if (subscription) {
|
|
146
|
+
parsedSubscriptions = [subscription];
|
|
147
|
+
}
|
|
148
|
+
else if (typeof subscriptions === 'string') {
|
|
149
|
+
parsedSubscriptions = JSON.parse(subscriptions);
|
|
150
|
+
}
|
|
151
|
+
else if (Array.isArray(subscriptions)) {
|
|
152
|
+
parsedSubscriptions = subscriptions;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
parsedSubscriptions = [];
|
|
156
|
+
}
|
|
157
|
+
return parsedSubscriptions;
|
|
158
|
+
}
|
|
159
|
+
getDestinationSettings(settings) {
|
|
160
|
+
const { subcription, subscriptions, ...otherSettings } = settings;
|
|
161
|
+
return otherSettings;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
exports.Destination = Destination;
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzdGluYXRpb24ta2l0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9FQUFnRTtBQUNoRSw2Q0FBd0M7QUFDeEMsOENBQTJEO0FBRTNELHFDQUE2RDtBQUU3RCxrQ0FBd0M7QUFHeEMsaUVBQStFO0FBSXRFLG1HQUpBLHlDQUFrQixPQUlBO0FBQUUsbUdBSkEseUNBQWtCLE9BSUE7QUFxRS9DLE1BQWEsV0FBVztJQVV0QixZQUFZLFdBQTRDOztRQUN0RCxJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQTtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUE7UUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFBO1FBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQTtRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQTtRQUVuQixrQ0FBa0M7UUFDbEMsVUFBSSxJQUFJLENBQUMsY0FBYywwQ0FBRSxNQUFNLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyx5Q0FBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1NBQ3JFO1FBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7U0FDeEQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQWtCOztRQUN6QyxNQUFNLE9BQU8sR0FBK0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUE7UUFFdkYsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksaUJBQVEsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1lBQzFELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUNoQztRQUVELElBQUksUUFBQyxJQUFJLENBQUMsY0FBYywwQ0FBRSxrQkFBa0IsQ0FBQSxFQUFFO1lBQzVDLE9BQU07U0FDUDtRQUVELElBQUksT0FBTyxHQUFHLGFBQUcsQ0FBQyxNQUFNLENBQUM7WUFDdkIsS0FBSyxFQUFFLENBQUM7WUFDUixPQUFPLEVBQUUsSUFBSTtZQUNiLE9BQU8sRUFBRTtnQkFDUCxZQUFZLEVBQUUsU0FBUzthQUN4QjtTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRTtZQUM1QyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7U0FDdEQ7UUFFRCxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7U0FDcEU7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtTQUMzQztJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsSUFBWSxFQUFFLFVBQXNDO1FBQ3hFLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFlLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFFdkUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTthQUM5QjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUE7UUFFM0IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRVMsYUFBYSxDQUNyQixVQUFrQixFQUNsQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUF3QjtRQUVsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLElBQUksd0JBQVUsQ0FBQyxJQUFJLFVBQVUseUJBQXlCLENBQUMsQ0FBQTtTQUM5RDtRQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNwQixZQUFZLEVBQUUsRUFBRTtZQUNoQixPQUFPO1lBQ1AsT0FBTyxFQUFFLEtBQUs7WUFDZCxRQUFRO1NBQ1QsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQzFCLFlBQTBCLEVBQzFCLEtBQW1CLEVBQ25CLFFBQWtCLEVBQ2xCLFVBQStDO1FBRS9DLE1BQU0scUJBQXFCLEdBQUcsV0FBSSxFQUFFLENBQUE7UUFDcEMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQTtRQUM3QyxNQUFNLEtBQUssR0FBRztZQUNaLEtBQUs7WUFDTCxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sSUFBSSxFQUFFO1lBQ25DLFFBQVE7U0FDVCxDQUFBO1FBRUQsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFBO1FBQ3JCLElBQUksT0FBTyxHQUF3QixJQUFJLENBQUE7UUFFdkMsSUFBSTtZQUNGLElBQUksT0FBTyxZQUFZLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtnQkFDOUMsS0FBSyxHQUFHLFNBQVMsQ0FBQTtnQkFDakIsT0FBTyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFBO2dCQUM5QyxPQUFPLE9BQU8sQ0FBQTthQUNmO1lBRUQsTUFBTSxZQUFZLEdBQUcsNkJBQVEsQ0FBQyw2QkFBUSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN0RSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNqQixLQUFLLEdBQUcsU0FBUyxDQUFBO2dCQUNqQixPQUFPLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUE7Z0JBQ3hDLE9BQU8sT0FBTyxDQUFBO2FBQ2Y7WUFFRCxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNyRCxLQUFLLEdBQUcsTUFBTSxDQUFBO1lBRWQsT0FBTyxPQUFPLENBQUE7U0FDZjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsS0FBSyxHQUFHLFNBQVMsQ0FBQTtZQUNqQixPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7WUFDckIsTUFBTSxLQUFLLENBQUE7U0FDWjtnQkFBUztZQUNSLE1BQU0sbUJBQW1CLEdBQUcsV0FBSSxFQUFFLENBQUE7WUFDbEMsTUFBTSxvQkFBb0IsR0FBRyxlQUFRLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtZQUVqRixVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUc7Z0JBQ1gsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUN0QixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTO2dCQUNqQyxLQUFLO2dCQUNMLEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUcsS0FBSyxDQUFDLEtBQW1DO29CQUNqRCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQ3RCLFFBQVEsRUFBRyxLQUFLLENBQUMsUUFBc0M7aUJBQ3hEO2dCQUNELE1BQU0sRUFBRSxPQUFPO2FBQ2hCLEVBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsT0FBTyxDQUNsQixLQUFtQixFQUNuQixRQUFvQixFQUNwQixVQUErQztRQUUvQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDckQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFakUsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ2xELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxVQUFVLENBQUMsQ0FDMUUsQ0FBQTtRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUzQyxPQUFRLEVBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQW9CO1FBQzNDLE1BQU0sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEdBQUcsUUFBUSxDQUFBO1FBQ2hELElBQUksbUJBQW1CLENBQUE7UUFFdkIsaUdBQWlHO1FBQ2pHLElBQUksWUFBWSxFQUFFO1lBQ2hCLG1CQUFtQixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7U0FDckM7YUFBTSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUM1QyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1NBQ2hEO2FBQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3ZDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQTtTQUNwQzthQUFNO1lBQ0wsbUJBQW1CLEdBQUcsRUFBRSxDQUFBO1NBQ3pCO1FBRUQsT0FBTyxtQkFBcUMsQ0FBQTtJQUM5QyxDQUFDO0lBRU8sc0JBQXNCLENBQUMsUUFBb0I7UUFDakQsTUFBTSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxRQUFRLENBQUE7UUFDakUsT0FBUSxhQUFxQyxDQUFBO0lBQy9DLENBQUM7Q0FDRjtBQWhNRCxrQ0FnTUMifQ==
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { JSONObject } from '../json-object';
|
|
4
|
+
export interface StepResult {
|
|
5
|
+
output?: JSONObject | string | null | undefined;
|
|
6
|
+
error?: JSONObject | null;
|
|
7
|
+
}
|
|
8
|
+
export interface ExecuteInput<Settings, Payload> {
|
|
9
|
+
/** The subscription mapping definition */
|
|
10
|
+
readonly mapping?: JSONObject;
|
|
11
|
+
/** The global destination settings */
|
|
12
|
+
readonly settings: Settings;
|
|
13
|
+
/** The transformed input data, based on `mapping` + `event` */
|
|
14
|
+
payload: Payload;
|
|
15
|
+
/** The ids from cached requests */
|
|
16
|
+
cachedFields: {
|
|
17
|
+
[key: string]: string;
|
|
18
|
+
};
|
|
19
|
+
/** The page used in autocomplete */
|
|
20
|
+
page?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Step is the base class for all discrete execution steps. It handles executing the step, logging,
|
|
24
|
+
* catching errors, and returning a result object.
|
|
25
|
+
*/
|
|
26
|
+
export declare class Step<Settings, Payload> extends EventEmitter {
|
|
27
|
+
executeStep?(data: ExecuteInput<Settings, Payload>): Promise<string>;
|
|
28
|
+
execute(data: ExecuteInput<Settings, Payload>): Promise<StepResult>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Steps is a list of one or more Step instances that can be executed in-order.
|
|
32
|
+
*/
|
|
33
|
+
export declare class Steps<Settings, Payload> {
|
|
34
|
+
steps: Step<Settings, Payload>[];
|
|
35
|
+
constructor();
|
|
36
|
+
push(step: Step<Settings, Payload>): void;
|
|
37
|
+
execute(data: ExecuteInput<Settings, Payload>): Promise<StepResult[]>;
|
|
38
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Steps = exports.Step = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
/**
|
|
6
|
+
* Step is the base class for all discrete execution steps. It handles executing the step, logging,
|
|
7
|
+
* catching errors, and returning a result object.
|
|
8
|
+
*/
|
|
9
|
+
class Step extends events_1.EventEmitter {
|
|
10
|
+
async execute(data) {
|
|
11
|
+
const result = {
|
|
12
|
+
output: null,
|
|
13
|
+
error: null
|
|
14
|
+
};
|
|
15
|
+
if (!this.executeStep) {
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
result.output = await this.executeStep(data);
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
result.error = e;
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.Step = Step;
|
|
28
|
+
/**
|
|
29
|
+
* Steps is a list of one or more Step instances that can be executed in-order.
|
|
30
|
+
*/
|
|
31
|
+
class Steps {
|
|
32
|
+
constructor() {
|
|
33
|
+
this.steps = [];
|
|
34
|
+
}
|
|
35
|
+
push(step) {
|
|
36
|
+
this.steps.push(step);
|
|
37
|
+
}
|
|
38
|
+
async execute(data) {
|
|
39
|
+
if (this.steps.length === 0) {
|
|
40
|
+
throw new Error('no steps defined');
|
|
41
|
+
}
|
|
42
|
+
const results = [];
|
|
43
|
+
for (const step of this.steps) {
|
|
44
|
+
const result = await step.execute(data);
|
|
45
|
+
results.push(result);
|
|
46
|
+
if (result.error) {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return results;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.Steps = Steps;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZXN0aW5hdGlvbi1raXQvc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBcUM7QUFxQnJDOzs7R0FHRztBQUNILE1BQWEsSUFBd0IsU0FBUSxxQkFBWTtJQUd2RCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQXFDO1FBQ2pELE1BQU0sTUFBTSxHQUFlO1lBQ3pCLE1BQU0sRUFBRSxJQUFJO1lBQ1osS0FBSyxFQUFFLElBQUk7U0FDWixDQUFBO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsT0FBTyxNQUFNLENBQUE7U0FDZDtRQUVELElBQUk7WUFDRixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUM3QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7U0FDakI7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7Q0FDRjtBQXJCRCxvQkFxQkM7QUFFRDs7R0FFRztBQUNILE1BQWEsS0FBSztJQUdoQjtRQUNFLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBNkI7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBcUM7UUFDakQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1NBQ3BDO1FBRUQsTUFBTSxPQUFPLEdBQWlCLEVBQUUsQ0FBQTtRQUVoQyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBRXZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7WUFFcEIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNoQixNQUFLO2FBQ047U0FDRjtRQUVELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7Q0FDRjtBQTlCRCxzQkE4QkMifQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Options } from 'got';
|
|
2
|
+
import { JSONSchema4 } from 'json-schema';
|
|
3
|
+
import { ExecuteInput } from './step';
|
|
4
|
+
export interface AutocompleteResponse {
|
|
5
|
+
body: {
|
|
6
|
+
data: AutocompleteItem[];
|
|
7
|
+
pagination: {
|
|
8
|
+
nextPage?: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export interface AutocompleteItem {
|
|
13
|
+
label: string;
|
|
14
|
+
value: string;
|
|
15
|
+
}
|
|
16
|
+
export interface InputField extends Omit<JSONSchema4, 'required'> {
|
|
17
|
+
required?: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The supported request options you can use to extend the instance of our `request`
|
|
21
|
+
*/
|
|
22
|
+
export interface RequestOptions {
|
|
23
|
+
headers?: Options['headers'];
|
|
24
|
+
method?: Options['method'];
|
|
25
|
+
username?: Options['username'];
|
|
26
|
+
password?: Options['password'];
|
|
27
|
+
prefixUrl?: Options['prefixUrl'];
|
|
28
|
+
responseType?: Options['responseType'];
|
|
29
|
+
searchParams?: Options['searchParams'];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A function to configure a request client instance with options
|
|
33
|
+
* that will be applied to every request made by that instance
|
|
34
|
+
*/
|
|
35
|
+
export declare type RequestExtension<Settings, Payload = unknown> = (data: ExecuteInput<Settings, Payload>) => RequestOptions;
|
|
36
|
+
/**
|
|
37
|
+
* A set of request extensions to apply to a request client instance
|
|
38
|
+
*/
|
|
39
|
+
export declare type RequestExtensions<Settings, Payload = unknown> = RequestExtension<Settings, Payload>[];
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVzdGluYXRpb24ta2l0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight alternative to lodash.get with similar coverage
|
|
3
|
+
* Supports basic path lookup via dot notation `'foo.bar[0].baz'` or an array ['foo', 'bar', '0', 'baz']
|
|
4
|
+
*/
|
|
5
|
+
export declare function get<T = unknown, Default = undefined>(obj: any, path: string | string[], defValue?: Default): T | Default | undefined;
|
package/dist/cjs/get.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.get = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Lightweight alternative to lodash.get with similar coverage
|
|
6
|
+
* Supports basic path lookup via dot notation `'foo.bar[0].baz'` or an array ['foo', 'bar', '0', 'baz']
|
|
7
|
+
*/
|
|
8
|
+
function get(
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
obj, path, defValue) {
|
|
11
|
+
// If path is not defined or it has false value
|
|
12
|
+
if (!path)
|
|
13
|
+
return defValue;
|
|
14
|
+
// Check if path is string or array. Regex : ensure that we do not have '.' and brackets.
|
|
15
|
+
// Regex explained: https://regexr.com/58j0k
|
|
16
|
+
const pathArray = Array.isArray(path) ? path : path.match(/([^[.\]])+/g);
|
|
17
|
+
// Find value if exist return otherwise return undefined value
|
|
18
|
+
const value = pathArray.reduce((prevObj, key) => prevObj && prevObj[key], obj);
|
|
19
|
+
return typeof value !== 'undefined' ? value : defValue;
|
|
20
|
+
}
|
|
21
|
+
exports.get = get;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxTQUFnQixHQUFHO0FBQ2pCLDhEQUE4RDtBQUM5RCxHQUFRLEVBQ1IsSUFBdUIsRUFDdkIsUUFBa0I7SUFFbEIsK0NBQStDO0lBQy9DLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxRQUFRLENBQUE7SUFFMUIseUZBQXlGO0lBQ3pGLDRDQUE0QztJQUM1QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFjLENBQUE7SUFFdEYsOERBQThEO0lBQzlELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzlFLE9BQU8sT0FBTyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtBQUN4RCxDQUFDO0FBaEJELGtCQWdCQyJ9
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { Destination, fieldsToJsonSchema, jsonSchemaToFields } from './destination-kit';
|
|
2
|
+
export { transform } from './mapping-kit';
|
|
3
|
+
export { defaultValues } from './defaults';
|
|
4
|
+
export { get } from './get';
|
|
5
|
+
export { omit } from './omit';
|
|
6
|
+
export { removeUndefined } from './remove-undefined';
|
|
7
|
+
export { time, duration } from './time';
|
|
8
|
+
export { realTypeOf, isObject, isArray, isString } from './real-type-of';
|
|
9
|
+
export type { ActionDefinition, DestinationDefinition, ExecuteInput, Subscription, SubscriptionStats, AuthenticationScheme, BasicAuthentication, CustomAuthentication } from './destination-kit';
|
|
10
|
+
export type { AutocompleteResponse, AutocompleteItem, InputField, RequestOptions, RequestExtension, RequestExtensions } from './destination-kit/types';
|
|
11
|
+
export type { JSONPrimitive, JSONValue, JSONObject, JSONArray, JSONLike, JSONLikeObject } from './json-object';
|
|
12
|
+
export type { SegmentEvent } from './segment-event';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isString = exports.isArray = exports.isObject = exports.realTypeOf = exports.duration = exports.time = exports.removeUndefined = exports.omit = exports.get = exports.defaultValues = exports.transform = exports.jsonSchemaToFields = exports.fieldsToJsonSchema = exports.Destination = void 0;
|
|
4
|
+
var destination_kit_1 = require("./destination-kit");
|
|
5
|
+
Object.defineProperty(exports, "Destination", { enumerable: true, get: function () { return destination_kit_1.Destination; } });
|
|
6
|
+
Object.defineProperty(exports, "fieldsToJsonSchema", { enumerable: true, get: function () { return destination_kit_1.fieldsToJsonSchema; } });
|
|
7
|
+
Object.defineProperty(exports, "jsonSchemaToFields", { enumerable: true, get: function () { return destination_kit_1.jsonSchemaToFields; } });
|
|
8
|
+
var mapping_kit_1 = require("./mapping-kit");
|
|
9
|
+
Object.defineProperty(exports, "transform", { enumerable: true, get: function () { return mapping_kit_1.transform; } });
|
|
10
|
+
var defaults_1 = require("./defaults");
|
|
11
|
+
Object.defineProperty(exports, "defaultValues", { enumerable: true, get: function () { return defaults_1.defaultValues; } });
|
|
12
|
+
var get_1 = require("./get");
|
|
13
|
+
Object.defineProperty(exports, "get", { enumerable: true, get: function () { return get_1.get; } });
|
|
14
|
+
var omit_1 = require("./omit");
|
|
15
|
+
Object.defineProperty(exports, "omit", { enumerable: true, get: function () { return omit_1.omit; } });
|
|
16
|
+
var remove_undefined_1 = require("./remove-undefined");
|
|
17
|
+
Object.defineProperty(exports, "removeUndefined", { enumerable: true, get: function () { return remove_undefined_1.removeUndefined; } });
|
|
18
|
+
var time_1 = require("./time");
|
|
19
|
+
Object.defineProperty(exports, "time", { enumerable: true, get: function () { return time_1.time; } });
|
|
20
|
+
Object.defineProperty(exports, "duration", { enumerable: true, get: function () { return time_1.duration; } });
|
|
21
|
+
var real_type_of_1 = require("./real-type-of");
|
|
22
|
+
Object.defineProperty(exports, "realTypeOf", { enumerable: true, get: function () { return real_type_of_1.realTypeOf; } });
|
|
23
|
+
Object.defineProperty(exports, "isObject", { enumerable: true, get: function () { return real_type_of_1.isObject; } });
|
|
24
|
+
Object.defineProperty(exports, "isArray", { enumerable: true, get: function () { return real_type_of_1.isArray; } });
|
|
25
|
+
Object.defineProperty(exports, "isString", { enumerable: true, get: function () { return real_type_of_1.isString; } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVGO0FBQTlFLDhHQUFBLFdBQVcsT0FBQTtBQUFFLHFIQUFBLGtCQUFrQixPQUFBO0FBQUUscUhBQUEsa0JBQWtCLE9BQUE7QUFDNUQsNkNBQXlDO0FBQWhDLHdHQUFBLFNBQVMsT0FBQTtBQUNsQix1Q0FBMEM7QUFBakMseUdBQUEsYUFBYSxPQUFBO0FBQ3RCLDZCQUEyQjtBQUFsQiwwRkFBQSxHQUFHLE9BQUE7QUFDWiwrQkFBNkI7QUFBcEIsNEZBQUEsSUFBSSxPQUFBO0FBQ2IsdURBQW9EO0FBQTNDLG1IQUFBLGVBQWUsT0FBQTtBQUN4QiwrQkFBdUM7QUFBOUIsNEZBQUEsSUFBSSxPQUFBO0FBQUUsZ0dBQUEsUUFBUSxPQUFBO0FBRXZCLCtDQUF3RTtBQUEvRCwwR0FBQSxVQUFVLE9BQUE7QUFBRSx3R0FBQSxRQUFRLE9BQUE7QUFBRSx1R0FBQSxPQUFPLE9BQUE7QUFBRSx3R0FBQSxRQUFRLE9BQUEifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare type JSONPrimitive = string | number | boolean | null;
|
|
2
|
+
export declare type JSONValue = JSONPrimitive | JSONObject | JSONArray;
|
|
3
|
+
export declare type JSONObject = {
|
|
4
|
+
[member: string]: JSONValue;
|
|
5
|
+
};
|
|
6
|
+
export declare type JSONArray = Array<JSONValue>;
|
|
7
|
+
export declare type JSONLike = JSONPrimitive | JSONLikeObject | Array<JSONLike> | Date | undefined;
|
|
8
|
+
export declare type JSONLikeObject = {
|
|
9
|
+
[member: string]: JSONLike;
|
|
10
|
+
[member: number]: JSONLike;
|
|
11
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1vYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvanNvbi1vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JSONObject, JSONLikeObject } from '../json-object';
|
|
2
|
+
/**
|
|
3
|
+
* Validates and transforms a mapping by applying the input payload
|
|
4
|
+
* based on the directives and raw values defined in the mapping object
|
|
5
|
+
* @param mapping - the directives and raw values
|
|
6
|
+
* @param payload - the input data to apply to directives
|
|
7
|
+
*/
|
|
8
|
+
export declare function transform(mapping: JSONLikeObject, payload?: JSONObject): JSONObject;
|
|
@@ -0,0 +1,182 @@
|
|
|
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.transform = void 0;
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
const dayjs_1 = __importDefault(require("../dayjs"));
|
|
9
|
+
const get_1 = require("../get");
|
|
10
|
+
const is_directive_1 = require("./is-directive");
|
|
11
|
+
const placeholders_1 = require("./placeholders");
|
|
12
|
+
const real_type_of_1 = require("../real-type-of");
|
|
13
|
+
const remove_undefined_1 = require("../remove-undefined");
|
|
14
|
+
const validate_1 = __importDefault(require("./validate"));
|
|
15
|
+
const directives = {};
|
|
16
|
+
const directiveRegExp = /^@[a-z][a-zA-Z0-9]+$/;
|
|
17
|
+
function registerDirective(name, fn) {
|
|
18
|
+
if (!directiveRegExp.exec(name)) {
|
|
19
|
+
throw new Error(`"${name}" is an invalid directive name`);
|
|
20
|
+
}
|
|
21
|
+
directives[name] = fn;
|
|
22
|
+
}
|
|
23
|
+
function registerStringDirective(name, fn) {
|
|
24
|
+
registerDirective(name, (value, payload) => {
|
|
25
|
+
const str = resolve(value, payload);
|
|
26
|
+
if (typeof str !== 'string') {
|
|
27
|
+
throw new Error(`${name}: expected string, got ${real_type_of_1.realTypeOf(str)}`);
|
|
28
|
+
}
|
|
29
|
+
return fn(str, payload);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function runDirective(obj, payload) {
|
|
33
|
+
const name = Object.keys(obj).find((key) => key.startsWith('@'));
|
|
34
|
+
const directiveFn = directives[name];
|
|
35
|
+
const value = obj[name];
|
|
36
|
+
if (typeof directiveFn !== 'function') {
|
|
37
|
+
throw new Error(`${name} is not a valid directive, got ${real_type_of_1.realTypeOf(directiveFn)}`);
|
|
38
|
+
}
|
|
39
|
+
return directiveFn(value, payload);
|
|
40
|
+
}
|
|
41
|
+
registerStringDirective('@base64', (str, _payload) => {
|
|
42
|
+
return Buffer.from(str).toString('base64');
|
|
43
|
+
});
|
|
44
|
+
registerDirective('@if', (opts, payload) => {
|
|
45
|
+
let condition = false;
|
|
46
|
+
if (!real_type_of_1.isObject(opts)) {
|
|
47
|
+
throw new Error('@if requires an object with one of: "exists", "true"');
|
|
48
|
+
}
|
|
49
|
+
if (opts.exists !== undefined) {
|
|
50
|
+
const value = resolve(opts.exists, payload);
|
|
51
|
+
condition = value !== undefined && value !== null;
|
|
52
|
+
}
|
|
53
|
+
else if (opts.true !== undefined) {
|
|
54
|
+
const value = resolve(opts.true, payload);
|
|
55
|
+
condition = value !== null && value !== undefined && value.toString().toLowerCase() === 'true';
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
throw new Error('@if requires one of: exists, true');
|
|
59
|
+
}
|
|
60
|
+
if (condition && opts.then !== undefined) {
|
|
61
|
+
return resolve(opts.then, payload);
|
|
62
|
+
}
|
|
63
|
+
else if (!condition && opts.else) {
|
|
64
|
+
return resolve(opts.else, payload);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
registerDirective('@json', (value, payload) => {
|
|
68
|
+
return JSON.stringify(resolve(value, payload));
|
|
69
|
+
});
|
|
70
|
+
registerStringDirective('@lowercase', (str, _payload) => {
|
|
71
|
+
return str.toLowerCase();
|
|
72
|
+
});
|
|
73
|
+
registerDirective('@merge', (arr, payload) => {
|
|
74
|
+
if (!Array.isArray(arr)) {
|
|
75
|
+
throw new Error(`@merge: expected array, got ${real_type_of_1.realTypeOf(arr)}`);
|
|
76
|
+
}
|
|
77
|
+
const objects = arr.map((v) => resolve(v, payload));
|
|
78
|
+
return Object.assign({}, ...objects);
|
|
79
|
+
});
|
|
80
|
+
function resolveObjectAndFields(directive, opts, payload) {
|
|
81
|
+
if (!real_type_of_1.isObject(opts)) {
|
|
82
|
+
throw new Error(`${directive}: expected object, got ${real_type_of_1.realTypeOf(opts)}`);
|
|
83
|
+
}
|
|
84
|
+
const obj = resolve(opts.object, payload);
|
|
85
|
+
if (!real_type_of_1.isObject(obj)) {
|
|
86
|
+
throw new Error(`${directive}: expected object, got ${real_type_of_1.realTypeOf(obj)}`);
|
|
87
|
+
}
|
|
88
|
+
const fields = resolve(opts.fields, payload);
|
|
89
|
+
if (!Array.isArray(fields)) {
|
|
90
|
+
throw new Error(`${directive}: expected fields as array, got ${real_type_of_1.realTypeOf(fields)}`);
|
|
91
|
+
}
|
|
92
|
+
return [obj, fields];
|
|
93
|
+
}
|
|
94
|
+
registerDirective('@omit', (opts, payload) => {
|
|
95
|
+
const [obj, fields] = resolveObjectAndFields('@omit', opts, payload);
|
|
96
|
+
const clonedObj = JSON.parse(JSON.stringify(obj));
|
|
97
|
+
fields.forEach((f) => delete clonedObj[f]);
|
|
98
|
+
return clonedObj;
|
|
99
|
+
});
|
|
100
|
+
registerStringDirective('@path', (path, payload) => {
|
|
101
|
+
return get_1.get(payload, path.replace('$.', ''));
|
|
102
|
+
});
|
|
103
|
+
registerDirective('@pick', (opts, payload) => {
|
|
104
|
+
const [obj, fields] = resolveObjectAndFields('@pick', opts, payload);
|
|
105
|
+
const clean = {};
|
|
106
|
+
fields.forEach((f) => {
|
|
107
|
+
if (Object.prototype.hasOwnProperty.call(obj, f)) {
|
|
108
|
+
clean[f] = obj[f];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
return clean;
|
|
112
|
+
});
|
|
113
|
+
registerDirective('@root', (_, payload) => payload);
|
|
114
|
+
registerStringDirective('@template', (template, payload) => {
|
|
115
|
+
return placeholders_1.render(template, payload);
|
|
116
|
+
});
|
|
117
|
+
registerDirective('@timestamp', (opts, payload) => {
|
|
118
|
+
if (!real_type_of_1.isObject(opts)) {
|
|
119
|
+
throw new Error(`@timestamp: requires an object, got ${real_type_of_1.realTypeOf(opts)}`);
|
|
120
|
+
}
|
|
121
|
+
const ts = resolve(opts.timestamp, payload);
|
|
122
|
+
if (!real_type_of_1.isString(ts)) {
|
|
123
|
+
throw new Error(`@timestamp: timestamp must be a string, got ${real_type_of_1.realTypeOf(ts)}`);
|
|
124
|
+
}
|
|
125
|
+
const format = resolve(opts.format, payload);
|
|
126
|
+
if (!real_type_of_1.isString(format)) {
|
|
127
|
+
throw new Error(`@timestamp: format must be a string, got ${real_type_of_1.realTypeOf(format)}`);
|
|
128
|
+
}
|
|
129
|
+
const inputFormat = resolve(opts.inputFormat, payload);
|
|
130
|
+
if (inputFormat !== undefined && !real_type_of_1.isString(inputFormat)) {
|
|
131
|
+
throw new Error(`@timestamp: inputFormat must be a string, got ${real_type_of_1.realTypeOf(inputFormat)}`);
|
|
132
|
+
}
|
|
133
|
+
const dayjsTs = dayjs_1.default.utc(ts, inputFormat);
|
|
134
|
+
if (format === 'json') {
|
|
135
|
+
return dayjsTs.toJSON();
|
|
136
|
+
}
|
|
137
|
+
return dayjsTs.format(format);
|
|
138
|
+
});
|
|
139
|
+
registerDirective('@uuid', (_, _payload) => uuid_1.v4());
|
|
140
|
+
/**
|
|
141
|
+
* Resolves a mapping value/object by applying the input payload based on directives
|
|
142
|
+
* *WARNING* This function mutates `mapping` when an object
|
|
143
|
+
* @param mapping - the mapping directives or raw values to resolve
|
|
144
|
+
* @param payload - the input data to apply to the mapping directives
|
|
145
|
+
* @todo support arrays or array directives?
|
|
146
|
+
*/
|
|
147
|
+
function resolve(mapping, payload) {
|
|
148
|
+
if (!real_type_of_1.isObject(mapping) && !real_type_of_1.isArray(mapping)) {
|
|
149
|
+
return mapping;
|
|
150
|
+
}
|
|
151
|
+
if (is_directive_1.isDirective(mapping)) {
|
|
152
|
+
return runDirective(mapping, payload);
|
|
153
|
+
}
|
|
154
|
+
if (Array.isArray(mapping)) {
|
|
155
|
+
return mapping.map((value) => resolve(value, payload));
|
|
156
|
+
}
|
|
157
|
+
for (const key of Object.keys(mapping)) {
|
|
158
|
+
const value = mapping[key];
|
|
159
|
+
mapping[key] = resolve(value, payload);
|
|
160
|
+
}
|
|
161
|
+
return mapping;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Validates and transforms a mapping by applying the input payload
|
|
165
|
+
* based on the directives and raw values defined in the mapping object
|
|
166
|
+
* @param mapping - the directives and raw values
|
|
167
|
+
* @param payload - the input data to apply to directives
|
|
168
|
+
*/
|
|
169
|
+
function transform(mapping, payload = {}) {
|
|
170
|
+
const payloadType = real_type_of_1.realTypeOf(payload);
|
|
171
|
+
if (payloadType !== 'object') {
|
|
172
|
+
throw new Error(`payload must be an object, got ${payloadType}`);
|
|
173
|
+
}
|
|
174
|
+
// throws if the mapping config is invalid
|
|
175
|
+
validate_1.default(mapping);
|
|
176
|
+
let resolved = resolve(mapping, payload);
|
|
177
|
+
resolved = remove_undefined_1.removeUndefined(resolved);
|
|
178
|
+
// Cast because we know there are no `undefined` values anymore
|
|
179
|
+
return resolved;
|
|
180
|
+
}
|
|
181
|
+
exports.transform = transform;
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWFwcGluZy1raXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsK0JBQW1DO0FBQ25DLHFEQUE0QjtBQUM1QixnQ0FBNEI7QUFFNUIsaURBQTRDO0FBQzVDLGlEQUF1QztBQUN2QyxrREFBeUU7QUFDekUsMERBQXFEO0FBQ3JELDBEQUFpQztBQVNqQyxNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUE7QUFDakMsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUE7QUFFOUMsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsRUFBYTtJQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxnQ0FBZ0MsQ0FBQyxDQUFBO0tBQzFEO0lBRUQsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtBQUN2QixDQUFDO0FBRUQsU0FBUyx1QkFBdUIsQ0FBQyxJQUFZLEVBQUUsRUFBbUI7SUFDaEUsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbkMsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksMEJBQTBCLHlCQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQ3BFO1FBRUQsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3pCLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEdBQWUsRUFBRSxPQUFtQjtJQUN4RCxNQUFNLElBQUksR0FBRyxNQUFN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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDirective = void 0;
|
|
4
|
+
const real_type_of_1 = require("../real-type-of");
|
|
5
|
+
function isDirective(obj) {
|
|
6
|
+
if (!real_type_of_1.isObject(obj)) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const keys = Object.keys(obj);
|
|
10
|
+
const hasDirectivePrefix = keys.some((key) => key.startsWith('@'));
|
|
11
|
+
if (!hasDirectivePrefix) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
// Ensure there aren't any other keys besides `@directive` or `_metadata`
|
|
15
|
+
const otherKeys = keys.filter((key) => !key.startsWith('@') && key !== '_metadata');
|
|
16
|
+
if (otherKeys.length === 0) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
exports.isDirective = isDirective;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hcHBpbmcta2l0L2lzLWRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxrREFBMEM7QUFFMUMsU0FBZ0IsV0FBVyxDQUFDLEdBQVk7SUFDdEMsSUFBSSxDQUFDLHVCQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbEIsT0FBTyxLQUFLLENBQUE7S0FDYjtJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDbEUsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1FBQ3ZCLE9BQU8sS0FBSyxDQUFBO0tBQ2I7SUFFRCx5RUFBeUU7SUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQTtJQUNuRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzFCLE9BQU8sSUFBSSxDQUFBO0tBQ1o7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFsQkQsa0NBa0JDIn0=
|