@segment/actions-core 2.3.1-alpha.0 → 2.3.2-alpha.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/destination-kit/action.d.ts +0 -12
- package/dist/cjs/destination-kit/action.js +0 -49
- package/dist/cjs/destination-kit/action.js.map +1 -1
- package/dist/cjs/destination-kit/index.d.ts +16 -5
- package/dist/cjs/destination-kit/index.js +48 -14
- package/dist/cjs/destination-kit/index.js.map +1 -1
- package/dist/cjs/destination-kit/parse-settings.d.ts +9 -0
- package/dist/cjs/destination-kit/parse-settings.js +32 -0
- package/dist/cjs/destination-kit/parse-settings.js.map +1 -0
- package/dist/cjs/destination-kit/step.d.ts +2 -3
- package/dist/cjs/destination-kit/step.js.map +1 -1
- package/dist/esm/destination-kit/action.d.ts +0 -12
- package/dist/esm/destination-kit/action.js +0 -49
- package/dist/esm/destination-kit/action.js.map +1 -1
- package/dist/esm/destination-kit/index.d.ts +16 -5
- package/dist/esm/destination-kit/index.js +49 -15
- package/dist/esm/destination-kit/index.js.map +1 -1
- package/dist/esm/destination-kit/parse-settings.d.ts +9 -0
- package/dist/esm/destination-kit/parse-settings.js +26 -0
- package/dist/esm/destination-kit/parse-settings.js.map +1 -0
- package/dist/esm/destination-kit/step.d.ts +2 -3
- package/dist/esm/destination-kit/step.js.map +1 -1
- package/package.json +2 -3
|
@@ -17,14 +17,6 @@ export interface ActionDefinition<Settings, Payload = any> {
|
|
|
17
17
|
dynamicFields?: {
|
|
18
18
|
[K in keyof Payload]?: RequestFn<Settings, Payload, DynamicFieldResponse>;
|
|
19
19
|
};
|
|
20
|
-
cachedFields?: {
|
|
21
|
-
[field: string]: {
|
|
22
|
-
key: (data: ExecuteInput<Settings, Payload>) => string;
|
|
23
|
-
ttl: number;
|
|
24
|
-
value: RequestFn<Settings, Payload>;
|
|
25
|
-
negative?: boolean;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
20
|
perform: RequestFn<Settings, Payload>;
|
|
29
21
|
}
|
|
30
22
|
export declare class Validate<Settings, Payload> extends Step<Settings, Payload> {
|
|
@@ -36,9 +28,6 @@ export declare class Validate<Settings, Payload> extends Step<Settings, Payload>
|
|
|
36
28
|
interface ExecuteDynamicFieldInput<Settings, Payload> {
|
|
37
29
|
settings: Settings;
|
|
38
30
|
payload: Payload;
|
|
39
|
-
cachedFields: {
|
|
40
|
-
[key: string]: string;
|
|
41
|
-
};
|
|
42
31
|
page?: string;
|
|
43
32
|
}
|
|
44
33
|
declare type ExecuteInputField = 'payload' | 'settings';
|
|
@@ -53,6 +42,5 @@ export declare class Action<Settings, Payload extends JSONLikeObject> extends Ev
|
|
|
53
42
|
private validatePayload;
|
|
54
43
|
private dynamicField;
|
|
55
44
|
private request;
|
|
56
|
-
private cachedRequest;
|
|
57
45
|
}
|
|
58
46
|
export {};
|
|
@@ -8,9 +8,7 @@ const ajv_human_errors_1 = require("@segment/ajv-human-errors");
|
|
|
8
8
|
const ajv_1 = __importDefault(require("ajv"));
|
|
9
9
|
const dayjs_1 = __importDefault(require("dayjs"));
|
|
10
10
|
const events_1 = require("events");
|
|
11
|
-
const node_cache_1 = __importDefault(require("node-cache"));
|
|
12
11
|
const create_request_client_1 = __importDefault(require("../create-request-client"));
|
|
13
|
-
const get_1 = require("../get");
|
|
14
12
|
const mapping_kit_1 = require("../mapping-kit");
|
|
15
13
|
const fields_to_jsonschema_1 = require("./fields-to-jsonschema");
|
|
16
14
|
const fetch_1 = require("../fetch");
|
|
@@ -89,43 +87,6 @@ class Request extends step_1.Step {
|
|
|
89
87
|
return client;
|
|
90
88
|
}
|
|
91
89
|
}
|
|
92
|
-
class CachedRequest extends Request {
|
|
93
|
-
constructor(extension, config) {
|
|
94
|
-
super(extension);
|
|
95
|
-
this.keyFn = config.key;
|
|
96
|
-
this.valueFn = config.value;
|
|
97
|
-
this.as = config.as;
|
|
98
|
-
this.negative = config.negative || false;
|
|
99
|
-
this.cache = new node_cache_1.default({
|
|
100
|
-
stdTTL: config.ttl,
|
|
101
|
-
maxKeys: 1000
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
async executeStep(data) {
|
|
105
|
-
const k = this.keyFn(data);
|
|
106
|
-
let v = this.cache.get(k);
|
|
107
|
-
if (v !== undefined) {
|
|
108
|
-
data.cachedFields[this.as] = v;
|
|
109
|
-
return 'cache hit';
|
|
110
|
-
}
|
|
111
|
-
const request = this.createRequestClient(data);
|
|
112
|
-
try {
|
|
113
|
-
v = await this.valueFn(request, data);
|
|
114
|
-
}
|
|
115
|
-
catch (e) {
|
|
116
|
-
if (get_1.get(e, 'response.status') === 404) {
|
|
117
|
-
v = undefined;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
throw e;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if ((v !== null && v !== undefined) || this.negative) {
|
|
124
|
-
this.cache.set(k, v);
|
|
125
|
-
}
|
|
126
|
-
return 'cache miss';
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
90
|
class Action extends events_1.EventEmitter {
|
|
130
91
|
constructor(definition, extendRequest) {
|
|
131
92
|
super();
|
|
@@ -163,12 +124,6 @@ class Action extends events_1.EventEmitter {
|
|
|
163
124
|
Object.entries(definition.dynamicFields ?? {}).forEach(([field, callback]) => {
|
|
164
125
|
this.dynamicField(field, callback);
|
|
165
126
|
});
|
|
166
|
-
Object.entries(definition.cachedFields ?? {}).forEach(([field, cacheConfig]) => {
|
|
167
|
-
this.cachedRequest({
|
|
168
|
-
...cacheConfig,
|
|
169
|
-
as: field
|
|
170
|
-
});
|
|
171
|
-
});
|
|
172
127
|
if (definition.perform) {
|
|
173
128
|
this.request(definition.perform);
|
|
174
129
|
}
|
|
@@ -185,10 +140,6 @@ class Action extends events_1.EventEmitter {
|
|
|
185
140
|
step.on('response', (response) => this.emit('response', response));
|
|
186
141
|
this.steps.push(step);
|
|
187
142
|
}
|
|
188
|
-
cachedRequest(config) {
|
|
189
|
-
const step = new CachedRequest(this.extendRequest, config);
|
|
190
|
-
this.steps.push(step);
|
|
191
|
-
}
|
|
192
143
|
}
|
|
193
144
|
exports.Action = Action;
|
|
194
145
|
//# sourceMappingURL=action.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/destination-kit/action.ts"],"names":[],"mappings":";;;;;;AACA,gEAA6D;AAC7D,8CAAqB;AACrB,kDAAyB;AACzB,mCAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/destination-kit/action.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { RequestClient } from '../create-request-client';
|
|
|
8
8
|
import type { ModifiedResponse } from '../types';
|
|
9
9
|
import type { InputField, RequestExtension } from './types';
|
|
10
10
|
import type { AllRequestOptions } from '../request-client';
|
|
11
|
+
import { AuthTokens } from './parse-settings';
|
|
11
12
|
export type { ActionDefinition, ExecuteInput, RequestFn };
|
|
12
13
|
export { fieldsToJsonSchema };
|
|
13
14
|
export interface SubscriptionStats {
|
|
@@ -39,7 +40,7 @@ export interface Subscription {
|
|
|
39
40
|
subscribe: string;
|
|
40
41
|
mapping?: JSONObject;
|
|
41
42
|
}
|
|
42
|
-
export interface OAuth2ClientCredentials {
|
|
43
|
+
export interface OAuth2ClientCredentials extends AuthTokens {
|
|
43
44
|
clientId: string;
|
|
44
45
|
clientSecret: string;
|
|
45
46
|
}
|
|
@@ -49,6 +50,11 @@ export interface RefreshAccessTokenResult {
|
|
|
49
50
|
}
|
|
50
51
|
interface AuthSettings<Settings> {
|
|
51
52
|
settings: Settings;
|
|
53
|
+
auth: AuthTokens;
|
|
54
|
+
}
|
|
55
|
+
interface RefreshAuthSettings<Settings> {
|
|
56
|
+
settings: Settings;
|
|
57
|
+
auth: OAuth2ClientCredentials;
|
|
52
58
|
}
|
|
53
59
|
interface Authentication<Settings> {
|
|
54
60
|
scheme: 'basic' | 'custom' | 'oauth2';
|
|
@@ -63,13 +69,14 @@ export interface BasicAuthentication<Settings> extends Authentication<Settings>
|
|
|
63
69
|
}
|
|
64
70
|
export interface OAuth2Authentication<Settings> extends Authentication<Settings> {
|
|
65
71
|
scheme: 'oauth2';
|
|
66
|
-
refreshAccessToken?: (request: RequestClient, input:
|
|
72
|
+
refreshAccessToken?: (request: RequestClient, input: RefreshAuthSettings<Settings>) => Promise<RefreshAccessTokenResult>;
|
|
67
73
|
}
|
|
68
74
|
export declare type AuthenticationScheme<Settings = any> = BasicAuthentication<Settings> | CustomAuthentication<Settings> | OAuth2Authentication<Settings>;
|
|
69
75
|
interface EventInput<Settings> {
|
|
70
76
|
readonly event: SegmentEvent;
|
|
71
77
|
readonly mapping: JSONObject;
|
|
72
78
|
readonly settings: Settings;
|
|
79
|
+
readonly auth?: AuthTokens;
|
|
73
80
|
}
|
|
74
81
|
export interface DecoratedResponse extends ModifiedResponse {
|
|
75
82
|
request: Request;
|
|
@@ -85,11 +92,15 @@ export declare class Destination<Settings = JSONObject> {
|
|
|
85
92
|
readonly settingsSchema?: JSONSchema4;
|
|
86
93
|
constructor(destination: DestinationDefinition<Settings>);
|
|
87
94
|
testAuthentication(settings: Settings): Promise<void>;
|
|
88
|
-
refreshAccessToken(settings: Settings,
|
|
95
|
+
refreshAccessToken(settings: Settings, oauthData: OAuth2ClientCredentials): Promise<RefreshAccessTokenResult> | undefined;
|
|
89
96
|
private partnerAction;
|
|
90
|
-
protected executeAction(actionSlug: string, { event, mapping, settings }: EventInput<Settings>): Promise<StepResult[]>;
|
|
97
|
+
protected executeAction(actionSlug: string, { event, mapping, settings, auth }: EventInput<Settings>): Promise<StepResult[]>;
|
|
91
98
|
private onSubscription;
|
|
92
|
-
onEvent(event: SegmentEvent, settings: JSONObject,
|
|
99
|
+
onEvent(event: SegmentEvent, settings: JSONObject, options?: {
|
|
100
|
+
onTokenRefresh?: (tokens: RefreshAccessTokenResult) => void;
|
|
101
|
+
onComplete?: (stats: SubscriptionStats) => void;
|
|
102
|
+
}): Promise<StepResult[]>;
|
|
103
|
+
private onEventInternal;
|
|
93
104
|
private getSubscriptions;
|
|
94
105
|
private getDestinationSettings;
|
|
95
106
|
}
|
|
@@ -11,6 +11,9 @@ const fields_to_jsonschema_1 = require("./fields-to-jsonschema");
|
|
|
11
11
|
Object.defineProperty(exports, "fieldsToJsonSchema", { enumerable: true, get: function () { return fields_to_jsonschema_1.fieldsToJsonSchema; } });
|
|
12
12
|
const create_request_client_1 = __importDefault(require("../create-request-client"));
|
|
13
13
|
const errors_1 = require("../errors");
|
|
14
|
+
const parse_settings_1 = require("./parse-settings");
|
|
15
|
+
const RETRY_ATTEMPTS = 2;
|
|
16
|
+
const OAUTH2_SCHEME = 'oauth2';
|
|
14
17
|
class Destination {
|
|
15
18
|
constructor(destination) {
|
|
16
19
|
this.definition = destination;
|
|
@@ -27,7 +30,10 @@ class Destination {
|
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
async testAuthentication(settings) {
|
|
30
|
-
const
|
|
33
|
+
const destinationSettings = this.getDestinationSettings(settings);
|
|
34
|
+
const auth = parse_settings_1.getAuthData(settings);
|
|
35
|
+
const data = { settings: destinationSettings, auth };
|
|
36
|
+
const context = { settings: destinationSettings, payload: {}, auth };
|
|
31
37
|
if (this.settingsSchema) {
|
|
32
38
|
const step = new action_1.Validate('settings', this.settingsSchema);
|
|
33
39
|
await step.executeStep(context);
|
|
@@ -38,23 +44,27 @@ class Destination {
|
|
|
38
44
|
const options = this.extendRequest?.(context) ?? {};
|
|
39
45
|
const requestClient = create_request_client_1.default(options);
|
|
40
46
|
try {
|
|
41
|
-
await this.authentication.testAuthentication(requestClient,
|
|
47
|
+
await this.authentication.testAuthentication(requestClient, data);
|
|
42
48
|
}
|
|
43
49
|
catch (error) {
|
|
44
50
|
throw new Error('Credentials are invalid');
|
|
45
51
|
}
|
|
46
52
|
}
|
|
47
|
-
refreshAccessToken(settings,
|
|
48
|
-
if (this.authentication?.scheme !==
|
|
53
|
+
refreshAccessToken(settings, oauthData) {
|
|
54
|
+
if (this.authentication?.scheme !== OAUTH2_SCHEME) {
|
|
49
55
|
throw new errors_1.IntegrationError('refreshAccessToken is only valid with oauth2 authentication scheme', 'NotImplemented', 501);
|
|
50
56
|
}
|
|
51
|
-
const context = {
|
|
57
|
+
const context = {
|
|
58
|
+
settings,
|
|
59
|
+
payload: {},
|
|
60
|
+
auth: parse_settings_1.getAuthData(settings)
|
|
61
|
+
};
|
|
52
62
|
const options = this.extendRequest?.(context) ?? {};
|
|
53
63
|
const requestClient = create_request_client_1.default(options);
|
|
54
64
|
if (!this.authentication?.refreshAccessToken) {
|
|
55
65
|
return undefined;
|
|
56
66
|
}
|
|
57
|
-
return this.authentication.refreshAccessToken(requestClient, { settings }
|
|
67
|
+
return this.authentication.refreshAccessToken(requestClient, { settings, auth: oauthData });
|
|
58
68
|
}
|
|
59
69
|
partnerAction(slug, definition) {
|
|
60
70
|
const action = new action_1.Action(definition, this.extendRequest);
|
|
@@ -66,25 +76,26 @@ class Destination {
|
|
|
66
76
|
this.actions[slug] = action;
|
|
67
77
|
return this;
|
|
68
78
|
}
|
|
69
|
-
executeAction(actionSlug, { event, mapping, settings }) {
|
|
79
|
+
executeAction(actionSlug, { event, mapping, settings, auth }) {
|
|
70
80
|
const action = this.actions[actionSlug];
|
|
71
81
|
if (!action) {
|
|
72
82
|
return Promise.resolve([]);
|
|
73
83
|
}
|
|
74
84
|
return action.execute({
|
|
75
|
-
cachedFields: {},
|
|
76
85
|
mapping,
|
|
77
86
|
payload: event,
|
|
78
|
-
settings
|
|
87
|
+
settings,
|
|
88
|
+
auth
|
|
79
89
|
});
|
|
80
90
|
}
|
|
81
|
-
async onSubscription(subscription, event, settings, onComplete) {
|
|
91
|
+
async onSubscription(subscription, event, settings, auth, onComplete) {
|
|
82
92
|
const subscriptionStartedAt = time_1.time();
|
|
83
93
|
const actionSlug = subscription.partnerAction;
|
|
84
94
|
const input = {
|
|
85
95
|
event,
|
|
86
96
|
mapping: subscription.mapping || {},
|
|
87
|
-
settings
|
|
97
|
+
settings,
|
|
98
|
+
auth
|
|
88
99
|
};
|
|
89
100
|
let state = 'pending';
|
|
90
101
|
let results = null;
|
|
@@ -136,10 +147,33 @@ class Destination {
|
|
|
136
147
|
});
|
|
137
148
|
}
|
|
138
149
|
}
|
|
139
|
-
async onEvent(event, settings,
|
|
150
|
+
async onEvent(event, settings, options) {
|
|
151
|
+
for (let i = 0; i < RETRY_ATTEMPTS; i++) {
|
|
152
|
+
try {
|
|
153
|
+
return await this.onEventInternal(event, settings, options?.onComplete);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
const statusCode = error?.status ?? error?.response?.status ?? 500;
|
|
157
|
+
if (!(statusCode === 401 && this.authentication?.scheme === OAUTH2_SCHEME)) {
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
const destinationSettings = this.getDestinationSettings(settings);
|
|
161
|
+
const oauthSettings = parse_settings_1.getOAuth2Data(settings);
|
|
162
|
+
const newTokens = await this.refreshAccessToken(destinationSettings, oauthSettings);
|
|
163
|
+
if (!newTokens) {
|
|
164
|
+
throw new errors_1.InvalidAuthenticationError('Failed to refresh access token');
|
|
165
|
+
}
|
|
166
|
+
settings = parse_settings_1.updateOAuthSettings(settings, newTokens);
|
|
167
|
+
options?.onTokenRefresh?.(newTokens);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
throw new errors_1.InvalidAuthenticationError();
|
|
171
|
+
}
|
|
172
|
+
async onEventInternal(event, settings, onComplete) {
|
|
140
173
|
const subscriptions = this.getSubscriptions(settings);
|
|
141
174
|
const destinationSettings = this.getDestinationSettings(settings);
|
|
142
|
-
const
|
|
175
|
+
const authData = parse_settings_1.getAuthData(settings);
|
|
176
|
+
const promises = subscriptions.map((subscription) => this.onSubscription(subscription, event, destinationSettings, authData, onComplete));
|
|
143
177
|
const results = await Promise.all(promises);
|
|
144
178
|
return [].concat(...results);
|
|
145
179
|
}
|
|
@@ -161,7 +195,7 @@ class Destination {
|
|
|
161
195
|
return parsedSubscriptions;
|
|
162
196
|
}
|
|
163
197
|
getDestinationSettings(settings) {
|
|
164
|
-
const { subcription, subscriptions, ...otherSettings } = settings;
|
|
198
|
+
const { subcription, subscriptions, oauth, ...otherSettings } = settings;
|
|
165
199
|
return otherSettings;
|
|
166
200
|
}
|
|
167
201
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destination-kit/index.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAgF;AAEhF,qCAAwE;AAExE,kCAAwC;AAGxC,iEAA2D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destination-kit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OAuth2ClientCredentials, RefreshAccessTokenResult } from '.';
|
|
2
|
+
import { JSONObject } from '../json-object';
|
|
3
|
+
export interface AuthTokens {
|
|
4
|
+
accessToken: string;
|
|
5
|
+
refreshToken: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function getAuthData(settings: JSONObject): AuthTokens;
|
|
8
|
+
export declare function getOAuth2Data(settings: JSONObject): OAuth2ClientCredentials;
|
|
9
|
+
export declare function updateOAuthSettings(settings: JSONObject, oauthData: RefreshAccessTokenResult): JSONObject;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateOAuthSettings = exports.getOAuth2Data = exports.getAuthData = void 0;
|
|
4
|
+
function getAuthData(settings) {
|
|
5
|
+
const oauthData = getOAuth2Data(settings);
|
|
6
|
+
return { accessToken: oauthData.accessToken, refreshToken: oauthData.refreshToken };
|
|
7
|
+
}
|
|
8
|
+
exports.getAuthData = getAuthData;
|
|
9
|
+
function getOAuth2Data(settings) {
|
|
10
|
+
const { oauth } = settings;
|
|
11
|
+
return {
|
|
12
|
+
accessToken: oauth?.access_token,
|
|
13
|
+
refreshToken: oauth?.refresh_token,
|
|
14
|
+
clientId: oauth?.clientId,
|
|
15
|
+
clientSecret: oauth?.clientSecret
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
exports.getOAuth2Data = getOAuth2Data;
|
|
19
|
+
function updateOAuthSettings(settings, oauthData) {
|
|
20
|
+
const { oauth, ...otherSettings } = settings;
|
|
21
|
+
if (oauth) {
|
|
22
|
+
const newOauth = oauth;
|
|
23
|
+
newOauth.access_token = oauthData.accessToken;
|
|
24
|
+
if (oauthData.refreshToken) {
|
|
25
|
+
newOauth.refresh_token = oauthData.refreshToken;
|
|
26
|
+
}
|
|
27
|
+
otherSettings['oauth'] = newOauth;
|
|
28
|
+
}
|
|
29
|
+
return otherSettings;
|
|
30
|
+
}
|
|
31
|
+
exports.updateOAuthSettings = updateOAuthSettings;
|
|
32
|
+
//# sourceMappingURL=parse-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-settings.js","sourceRoot":"","sources":["../../../src/destination-kit/parse-settings.ts"],"names":[],"mappings":";;;AAuBA,SAAgB,WAAW,CAAC,QAAoB;IAC9C,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACzC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;AACrF,CAAC;AAHD,kCAGC;AAOD,SAAgB,aAAa,CAAC,QAAoB;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;IAC1B,OAAO;QACL,WAAW,EAAG,KAAkC,EAAE,YAAY;QAC9D,YAAY,EAAG,KAAkC,EAAE,aAAa;QAChE,QAAQ,EAAG,KAAkC,EAAE,QAAQ;QACvD,YAAY,EAAG,KAAkC,EAAE,YAAY;KACrC,CAAA;AAC9B,CAAC;AARD,sCAQC;AAQD,SAAgB,mBAAmB,CAAC,QAAoB,EAAE,SAAmC;IAC3F,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,GAAG,QAAQ,CAAA;IAC5C,IAAI,KAAK,EAAE;QACT,MAAM,QAAQ,GAAG,KAAiC,CAAA;QAClD,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,WAAW,CAAA;QAC7C,IAAI,SAAS,CAAC,YAAY,EAAE;YAC1B,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAA;SAChD;QACD,aAAa,CAAC,OAAO,CAAC,GAAG,QAAgC,CAAA;KAC1D;IACD,OAAO,aAAa,CAAA;AACtB,CAAC;AAXD,kDAWC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import { JSONObject } from '../json-object';
|
|
4
|
+
import { AuthTokens } from './parse-settings';
|
|
4
5
|
export interface StepResult {
|
|
5
6
|
output?: JSONObject | string | null | undefined;
|
|
6
7
|
error?: JSONObject | null;
|
|
@@ -9,10 +10,8 @@ export interface ExecuteInput<Settings, Payload> {
|
|
|
9
10
|
readonly mapping?: JSONObject;
|
|
10
11
|
readonly settings: Settings;
|
|
11
12
|
payload: Payload;
|
|
12
|
-
cachedFields: {
|
|
13
|
-
[key: string]: string | null | undefined;
|
|
14
|
-
};
|
|
15
13
|
page?: string;
|
|
14
|
+
readonly auth?: AuthTokens;
|
|
16
15
|
}
|
|
17
16
|
export declare class Step<Settings, Payload> extends EventEmitter {
|
|
18
17
|
executeStep?(data: ExecuteInput<Settings, Payload>): Promise<JSONObject | string | null | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.js","sourceRoot":"","sources":["../../../src/destination-kit/step.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;
|
|
1
|
+
{"version":3,"file":"step.js","sourceRoot":"","sources":["../../../src/destination-kit/step.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AA0BrC,MAAa,IAAwB,SAAQ,qBAAY;IAGvD,KAAK,CAAC,OAAO,CAAC,IAAqC;QACjD,MAAM,MAAM,GAAe;YACzB,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;SACZ,CAAA;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO,MAAM,CAAA;SACd;QAED,IAAI;YACF,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;SAC7C;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;SACjB;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AArBD,oBAqBC;AAKD,MAAa,KAAK;IAGhB;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,IAA6B;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqC;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;SACpC;QAED,MAAM,OAAO,GAAiB,EAAE,CAAA;QAEhC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAEvC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAEpB,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,MAAK;aACN;SACF;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AA9BD,sBA8BC"}
|
|
@@ -17,14 +17,6 @@ export interface ActionDefinition<Settings, Payload = any> {
|
|
|
17
17
|
dynamicFields?: {
|
|
18
18
|
[K in keyof Payload]?: RequestFn<Settings, Payload, DynamicFieldResponse>;
|
|
19
19
|
};
|
|
20
|
-
cachedFields?: {
|
|
21
|
-
[field: string]: {
|
|
22
|
-
key: (data: ExecuteInput<Settings, Payload>) => string;
|
|
23
|
-
ttl: number;
|
|
24
|
-
value: RequestFn<Settings, Payload>;
|
|
25
|
-
negative?: boolean;
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
20
|
perform: RequestFn<Settings, Payload>;
|
|
29
21
|
}
|
|
30
22
|
export declare class Validate<Settings, Payload> extends Step<Settings, Payload> {
|
|
@@ -36,9 +28,6 @@ export declare class Validate<Settings, Payload> extends Step<Settings, Payload>
|
|
|
36
28
|
interface ExecuteDynamicFieldInput<Settings, Payload> {
|
|
37
29
|
settings: Settings;
|
|
38
30
|
payload: Payload;
|
|
39
|
-
cachedFields: {
|
|
40
|
-
[key: string]: string;
|
|
41
|
-
};
|
|
42
31
|
page?: string;
|
|
43
32
|
}
|
|
44
33
|
declare type ExecuteInputField = 'payload' | 'settings';
|
|
@@ -53,6 +42,5 @@ export declare class Action<Settings, Payload extends JSONLikeObject> extends Ev
|
|
|
53
42
|
private validatePayload;
|
|
54
43
|
private dynamicField;
|
|
55
44
|
private request;
|
|
56
|
-
private cachedRequest;
|
|
57
45
|
}
|
|
58
46
|
export {};
|
|
@@ -2,9 +2,7 @@ import { AggregateAjvError } from '@segment/ajv-human-errors';
|
|
|
2
2
|
import Ajv from 'ajv';
|
|
3
3
|
import dayjs from 'dayjs';
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
|
-
import NodeCache from 'node-cache';
|
|
6
5
|
import createRequestClient from '../create-request-client';
|
|
7
|
-
import { get } from '../get';
|
|
8
6
|
import { transform } from '../mapping-kit';
|
|
9
7
|
import { fieldsToJsonSchema } from './fields-to-jsonschema';
|
|
10
8
|
import { Response } from '../fetch';
|
|
@@ -82,43 +80,6 @@ class Request extends Step {
|
|
|
82
80
|
return client;
|
|
83
81
|
}
|
|
84
82
|
}
|
|
85
|
-
class CachedRequest extends Request {
|
|
86
|
-
constructor(extension, config) {
|
|
87
|
-
super(extension);
|
|
88
|
-
this.keyFn = config.key;
|
|
89
|
-
this.valueFn = config.value;
|
|
90
|
-
this.as = config.as;
|
|
91
|
-
this.negative = config.negative || false;
|
|
92
|
-
this.cache = new NodeCache({
|
|
93
|
-
stdTTL: config.ttl,
|
|
94
|
-
maxKeys: 1000
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
async executeStep(data) {
|
|
98
|
-
const k = this.keyFn(data);
|
|
99
|
-
let v = this.cache.get(k);
|
|
100
|
-
if (v !== undefined) {
|
|
101
|
-
data.cachedFields[this.as] = v;
|
|
102
|
-
return 'cache hit';
|
|
103
|
-
}
|
|
104
|
-
const request = this.createRequestClient(data);
|
|
105
|
-
try {
|
|
106
|
-
v = await this.valueFn(request, data);
|
|
107
|
-
}
|
|
108
|
-
catch (e) {
|
|
109
|
-
if (get(e, 'response.status') === 404) {
|
|
110
|
-
v = undefined;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
throw e;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if ((v !== null && v !== undefined) || this.negative) {
|
|
117
|
-
this.cache.set(k, v);
|
|
118
|
-
}
|
|
119
|
-
return 'cache miss';
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
83
|
export class Action extends EventEmitter {
|
|
123
84
|
constructor(definition, extendRequest) {
|
|
124
85
|
super();
|
|
@@ -156,12 +117,6 @@ export class Action extends EventEmitter {
|
|
|
156
117
|
Object.entries(definition.dynamicFields ?? {}).forEach(([field, callback]) => {
|
|
157
118
|
this.dynamicField(field, callback);
|
|
158
119
|
});
|
|
159
|
-
Object.entries(definition.cachedFields ?? {}).forEach(([field, cacheConfig]) => {
|
|
160
|
-
this.cachedRequest({
|
|
161
|
-
...cacheConfig,
|
|
162
|
-
as: field
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
120
|
if (definition.perform) {
|
|
166
121
|
this.request(definition.perform);
|
|
167
122
|
}
|
|
@@ -178,9 +133,5 @@ export class Action extends EventEmitter {
|
|
|
178
133
|
step.on('response', (response) => this.emit('response', response));
|
|
179
134
|
this.steps.push(step);
|
|
180
135
|
}
|
|
181
|
-
cachedRequest(config) {
|
|
182
|
-
const step = new CachedRequest(this.extendRequest, config);
|
|
183
|
-
this.steps.push(step);
|
|
184
|
-
}
|
|
185
136
|
}
|
|
186
137
|
//# sourceMappingURL=action.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/destination-kit/action.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/destination-kit/action.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { RequestClient } from '../create-request-client';
|
|
|
8
8
|
import type { ModifiedResponse } from '../types';
|
|
9
9
|
import type { InputField, RequestExtension } from './types';
|
|
10
10
|
import type { AllRequestOptions } from '../request-client';
|
|
11
|
+
import { AuthTokens } from './parse-settings';
|
|
11
12
|
export type { ActionDefinition, ExecuteInput, RequestFn };
|
|
12
13
|
export { fieldsToJsonSchema };
|
|
13
14
|
export interface SubscriptionStats {
|
|
@@ -39,7 +40,7 @@ export interface Subscription {
|
|
|
39
40
|
subscribe: string;
|
|
40
41
|
mapping?: JSONObject;
|
|
41
42
|
}
|
|
42
|
-
export interface OAuth2ClientCredentials {
|
|
43
|
+
export interface OAuth2ClientCredentials extends AuthTokens {
|
|
43
44
|
clientId: string;
|
|
44
45
|
clientSecret: string;
|
|
45
46
|
}
|
|
@@ -49,6 +50,11 @@ export interface RefreshAccessTokenResult {
|
|
|
49
50
|
}
|
|
50
51
|
interface AuthSettings<Settings> {
|
|
51
52
|
settings: Settings;
|
|
53
|
+
auth: AuthTokens;
|
|
54
|
+
}
|
|
55
|
+
interface RefreshAuthSettings<Settings> {
|
|
56
|
+
settings: Settings;
|
|
57
|
+
auth: OAuth2ClientCredentials;
|
|
52
58
|
}
|
|
53
59
|
interface Authentication<Settings> {
|
|
54
60
|
scheme: 'basic' | 'custom' | 'oauth2';
|
|
@@ -63,13 +69,14 @@ export interface BasicAuthentication<Settings> extends Authentication<Settings>
|
|
|
63
69
|
}
|
|
64
70
|
export interface OAuth2Authentication<Settings> extends Authentication<Settings> {
|
|
65
71
|
scheme: 'oauth2';
|
|
66
|
-
refreshAccessToken?: (request: RequestClient, input:
|
|
72
|
+
refreshAccessToken?: (request: RequestClient, input: RefreshAuthSettings<Settings>) => Promise<RefreshAccessTokenResult>;
|
|
67
73
|
}
|
|
68
74
|
export declare type AuthenticationScheme<Settings = any> = BasicAuthentication<Settings> | CustomAuthentication<Settings> | OAuth2Authentication<Settings>;
|
|
69
75
|
interface EventInput<Settings> {
|
|
70
76
|
readonly event: SegmentEvent;
|
|
71
77
|
readonly mapping: JSONObject;
|
|
72
78
|
readonly settings: Settings;
|
|
79
|
+
readonly auth?: AuthTokens;
|
|
73
80
|
}
|
|
74
81
|
export interface DecoratedResponse extends ModifiedResponse {
|
|
75
82
|
request: Request;
|
|
@@ -85,11 +92,15 @@ export declare class Destination<Settings = JSONObject> {
|
|
|
85
92
|
readonly settingsSchema?: JSONSchema4;
|
|
86
93
|
constructor(destination: DestinationDefinition<Settings>);
|
|
87
94
|
testAuthentication(settings: Settings): Promise<void>;
|
|
88
|
-
refreshAccessToken(settings: Settings,
|
|
95
|
+
refreshAccessToken(settings: Settings, oauthData: OAuth2ClientCredentials): Promise<RefreshAccessTokenResult> | undefined;
|
|
89
96
|
private partnerAction;
|
|
90
|
-
protected executeAction(actionSlug: string, { event, mapping, settings }: EventInput<Settings>): Promise<StepResult[]>;
|
|
97
|
+
protected executeAction(actionSlug: string, { event, mapping, settings, auth }: EventInput<Settings>): Promise<StepResult[]>;
|
|
91
98
|
private onSubscription;
|
|
92
|
-
onEvent(event: SegmentEvent, settings: JSONObject,
|
|
99
|
+
onEvent(event: SegmentEvent, settings: JSONObject, options?: {
|
|
100
|
+
onTokenRefresh?: (tokens: RefreshAccessTokenResult) => void;
|
|
101
|
+
onComplete?: (stats: SubscriptionStats) => void;
|
|
102
|
+
}): Promise<StepResult[]>;
|
|
103
|
+
private onEventInternal;
|
|
93
104
|
private getSubscriptions;
|
|
94
105
|
private getDestinationSettings;
|
|
95
106
|
}
|
|
@@ -3,8 +3,11 @@ import { Action, Validate } from './action';
|
|
|
3
3
|
import { time, duration } from '../time';
|
|
4
4
|
import { fieldsToJsonSchema } from './fields-to-jsonschema';
|
|
5
5
|
import createRequestClient from '../create-request-client';
|
|
6
|
-
import { IntegrationError } from '../errors';
|
|
6
|
+
import { IntegrationError, InvalidAuthenticationError } from '../errors';
|
|
7
|
+
import { getAuthData, getOAuth2Data, updateOAuthSettings } from './parse-settings';
|
|
7
8
|
export { fieldsToJsonSchema };
|
|
9
|
+
const RETRY_ATTEMPTS = 2;
|
|
10
|
+
const OAUTH2_SCHEME = 'oauth2';
|
|
8
11
|
export class Destination {
|
|
9
12
|
constructor(destination) {
|
|
10
13
|
this.definition = destination;
|
|
@@ -21,7 +24,10 @@ export class Destination {
|
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
async testAuthentication(settings) {
|
|
24
|
-
const
|
|
27
|
+
const destinationSettings = this.getDestinationSettings(settings);
|
|
28
|
+
const auth = getAuthData(settings);
|
|
29
|
+
const data = { settings: destinationSettings, auth };
|
|
30
|
+
const context = { settings: destinationSettings, payload: {}, auth };
|
|
25
31
|
if (this.settingsSchema) {
|
|
26
32
|
const step = new Validate('settings', this.settingsSchema);
|
|
27
33
|
await step.executeStep(context);
|
|
@@ -32,23 +38,27 @@ export class Destination {
|
|
|
32
38
|
const options = this.extendRequest?.(context) ?? {};
|
|
33
39
|
const requestClient = createRequestClient(options);
|
|
34
40
|
try {
|
|
35
|
-
await this.authentication.testAuthentication(requestClient,
|
|
41
|
+
await this.authentication.testAuthentication(requestClient, data);
|
|
36
42
|
}
|
|
37
43
|
catch (error) {
|
|
38
44
|
throw new Error('Credentials are invalid');
|
|
39
45
|
}
|
|
40
46
|
}
|
|
41
|
-
refreshAccessToken(settings,
|
|
42
|
-
if (this.authentication?.scheme !==
|
|
47
|
+
refreshAccessToken(settings, oauthData) {
|
|
48
|
+
if (this.authentication?.scheme !== OAUTH2_SCHEME) {
|
|
43
49
|
throw new IntegrationError('refreshAccessToken is only valid with oauth2 authentication scheme', 'NotImplemented', 501);
|
|
44
50
|
}
|
|
45
|
-
const context = {
|
|
51
|
+
const context = {
|
|
52
|
+
settings,
|
|
53
|
+
payload: {},
|
|
54
|
+
auth: getAuthData(settings)
|
|
55
|
+
};
|
|
46
56
|
const options = this.extendRequest?.(context) ?? {};
|
|
47
57
|
const requestClient = createRequestClient(options);
|
|
48
58
|
if (!this.authentication?.refreshAccessToken) {
|
|
49
59
|
return undefined;
|
|
50
60
|
}
|
|
51
|
-
return this.authentication.refreshAccessToken(requestClient, { settings }
|
|
61
|
+
return this.authentication.refreshAccessToken(requestClient, { settings, auth: oauthData });
|
|
52
62
|
}
|
|
53
63
|
partnerAction(slug, definition) {
|
|
54
64
|
const action = new Action(definition, this.extendRequest);
|
|
@@ -60,25 +70,26 @@ export class Destination {
|
|
|
60
70
|
this.actions[slug] = action;
|
|
61
71
|
return this;
|
|
62
72
|
}
|
|
63
|
-
executeAction(actionSlug, { event, mapping, settings }) {
|
|
73
|
+
executeAction(actionSlug, { event, mapping, settings, auth }) {
|
|
64
74
|
const action = this.actions[actionSlug];
|
|
65
75
|
if (!action) {
|
|
66
76
|
return Promise.resolve([]);
|
|
67
77
|
}
|
|
68
78
|
return action.execute({
|
|
69
|
-
cachedFields: {},
|
|
70
79
|
mapping,
|
|
71
80
|
payload: event,
|
|
72
|
-
settings
|
|
81
|
+
settings,
|
|
82
|
+
auth
|
|
73
83
|
});
|
|
74
84
|
}
|
|
75
|
-
async onSubscription(subscription, event, settings, onComplete) {
|
|
85
|
+
async onSubscription(subscription, event, settings, auth, onComplete) {
|
|
76
86
|
const subscriptionStartedAt = time();
|
|
77
87
|
const actionSlug = subscription.partnerAction;
|
|
78
88
|
const input = {
|
|
79
89
|
event,
|
|
80
90
|
mapping: subscription.mapping || {},
|
|
81
|
-
settings
|
|
91
|
+
settings,
|
|
92
|
+
auth
|
|
82
93
|
};
|
|
83
94
|
let state = 'pending';
|
|
84
95
|
let results = null;
|
|
@@ -130,10 +141,33 @@ export class Destination {
|
|
|
130
141
|
});
|
|
131
142
|
}
|
|
132
143
|
}
|
|
133
|
-
async onEvent(event, settings,
|
|
144
|
+
async onEvent(event, settings, options) {
|
|
145
|
+
for (let i = 0; i < RETRY_ATTEMPTS; i++) {
|
|
146
|
+
try {
|
|
147
|
+
return await this.onEventInternal(event, settings, options?.onComplete);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
const statusCode = error?.status ?? error?.response?.status ?? 500;
|
|
151
|
+
if (!(statusCode === 401 && this.authentication?.scheme === OAUTH2_SCHEME)) {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
const destinationSettings = this.getDestinationSettings(settings);
|
|
155
|
+
const oauthSettings = getOAuth2Data(settings);
|
|
156
|
+
const newTokens = await this.refreshAccessToken(destinationSettings, oauthSettings);
|
|
157
|
+
if (!newTokens) {
|
|
158
|
+
throw new InvalidAuthenticationError('Failed to refresh access token');
|
|
159
|
+
}
|
|
160
|
+
settings = updateOAuthSettings(settings, newTokens);
|
|
161
|
+
options?.onTokenRefresh?.(newTokens);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
throw new InvalidAuthenticationError();
|
|
165
|
+
}
|
|
166
|
+
async onEventInternal(event, settings, onComplete) {
|
|
134
167
|
const subscriptions = this.getSubscriptions(settings);
|
|
135
168
|
const destinationSettings = this.getDestinationSettings(settings);
|
|
136
|
-
const
|
|
169
|
+
const authData = getAuthData(settings);
|
|
170
|
+
const promises = subscriptions.map((subscription) => this.onSubscription(subscription, event, destinationSettings, authData, onComplete));
|
|
137
171
|
const results = await Promise.all(promises);
|
|
138
172
|
return [].concat(...results);
|
|
139
173
|
}
|
|
@@ -155,7 +189,7 @@ export class Destination {
|
|
|
155
189
|
return parsedSubscriptions;
|
|
156
190
|
}
|
|
157
191
|
getDestinationSettings(settings) {
|
|
158
|
-
const { subcription, subscriptions, ...otherSettings } = settings;
|
|
192
|
+
const { subcription, subscriptions, oauth, ...otherSettings } = settings;
|
|
159
193
|
return otherSettings;
|
|
160
194
|
}
|
|
161
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destination-kit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAkB,MAAM,6BAA6B,CAAA;AAEhF,OAAO,EAAE,MAAM,EAAoB,QAAQ,EAAa,MAAM,UAAU,CAAA;AAExE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,mBAAsC,MAAM,0BAA0B,CAAA;AAI7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/destination-kit/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OAuth2ClientCredentials, RefreshAccessTokenResult } from '.';
|
|
2
|
+
import { JSONObject } from '../json-object';
|
|
3
|
+
export interface AuthTokens {
|
|
4
|
+
accessToken: string;
|
|
5
|
+
refreshToken: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function getAuthData(settings: JSONObject): AuthTokens;
|
|
8
|
+
export declare function getOAuth2Data(settings: JSONObject): OAuth2ClientCredentials;
|
|
9
|
+
export declare function updateOAuthSettings(settings: JSONObject, oauthData: RefreshAccessTokenResult): JSONObject;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function getAuthData(settings) {
|
|
2
|
+
const oauthData = getOAuth2Data(settings);
|
|
3
|
+
return { accessToken: oauthData.accessToken, refreshToken: oauthData.refreshToken };
|
|
4
|
+
}
|
|
5
|
+
export function getOAuth2Data(settings) {
|
|
6
|
+
const { oauth } = settings;
|
|
7
|
+
return {
|
|
8
|
+
accessToken: oauth?.access_token,
|
|
9
|
+
refreshToken: oauth?.refresh_token,
|
|
10
|
+
clientId: oauth?.clientId,
|
|
11
|
+
clientSecret: oauth?.clientSecret
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function updateOAuthSettings(settings, oauthData) {
|
|
15
|
+
const { oauth, ...otherSettings } = settings;
|
|
16
|
+
if (oauth) {
|
|
17
|
+
const newOauth = oauth;
|
|
18
|
+
newOauth.access_token = oauthData.accessToken;
|
|
19
|
+
if (oauthData.refreshToken) {
|
|
20
|
+
newOauth.refresh_token = oauthData.refreshToken;
|
|
21
|
+
}
|
|
22
|
+
otherSettings['oauth'] = newOauth;
|
|
23
|
+
}
|
|
24
|
+
return otherSettings;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=parse-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-settings.js","sourceRoot":"","sources":["../../../src/destination-kit/parse-settings.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,WAAW,CAAC,QAAoB;IAC9C,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IACzC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;AACrF,CAAC;AAOD,MAAM,UAAU,aAAa,CAAC,QAAoB;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAA;IAC1B,OAAO;QACL,WAAW,EAAG,KAAkC,EAAE,YAAY;QAC9D,YAAY,EAAG,KAAkC,EAAE,aAAa;QAChE,QAAQ,EAAG,KAAkC,EAAE,QAAQ;QACvD,YAAY,EAAG,KAAkC,EAAE,YAAY;KACrC,CAAA;AAC9B,CAAC;AAQD,MAAM,UAAU,mBAAmB,CAAC,QAAoB,EAAE,SAAmC;IAC3F,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,GAAG,QAAQ,CAAA;IAC5C,IAAI,KAAK,EAAE;QACT,MAAM,QAAQ,GAAG,KAAiC,CAAA;QAClD,QAAQ,CAAC,YAAY,GAAG,SAAS,CAAC,WAAW,CAAA;QAC7C,IAAI,SAAS,CAAC,YAAY,EAAE;YAC1B,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC,YAAY,CAAA;SAChD;QACD,aAAa,CAAC,OAAO,CAAC,GAAG,QAAgC,CAAA;KAC1D;IACD,OAAO,aAAa,CAAA;AACtB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import { JSONObject } from '../json-object';
|
|
4
|
+
import { AuthTokens } from './parse-settings';
|
|
4
5
|
export interface StepResult {
|
|
5
6
|
output?: JSONObject | string | null | undefined;
|
|
6
7
|
error?: JSONObject | null;
|
|
@@ -9,10 +10,8 @@ export interface ExecuteInput<Settings, Payload> {
|
|
|
9
10
|
readonly mapping?: JSONObject;
|
|
10
11
|
readonly settings: Settings;
|
|
11
12
|
payload: Payload;
|
|
12
|
-
cachedFields: {
|
|
13
|
-
[key: string]: string | null | undefined;
|
|
14
|
-
};
|
|
15
13
|
page?: string;
|
|
14
|
+
readonly auth?: AuthTokens;
|
|
16
15
|
}
|
|
17
16
|
export declare class Step<Settings, Payload> extends EventEmitter {
|
|
18
17
|
executeStep?(data: ExecuteInput<Settings, Payload>): Promise<JSONObject | string | null | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step.js","sourceRoot":"","sources":["../../../src/destination-kit/step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"step.js","sourceRoot":"","sources":["../../../src/destination-kit/step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AA0BrC,MAAM,OAAO,IAAwB,SAAQ,YAAY;IAGvD,KAAK,CAAC,OAAO,CAAC,IAAqC;QACjD,MAAM,MAAM,GAAe;YACzB,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;SACZ,CAAA;QAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO,MAAM,CAAA;SACd;QAED,IAAI;YACF,MAAM,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;SAC7C;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;SACjB;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAKD,MAAM,OAAO,KAAK;IAGhB;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,IAA6B;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAqC;QACjD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;SACpC;QAED,MAAM,OAAO,GAAiB,EAAE,CAAA;QAEhC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAEvC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAEpB,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,MAAK;aACN;SACF;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@segment/actions-core",
|
|
3
3
|
"description": "Core runtime for Destinations Actions.",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.2-alpha.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/segmentio/fab-5-engine",
|
|
@@ -62,7 +62,6 @@
|
|
|
62
62
|
"btoa-lite": "^1.0.0",
|
|
63
63
|
"cross-fetch": "^3.1.4",
|
|
64
64
|
"dayjs": "^1.10.4",
|
|
65
|
-
"node-cache": "^5.1.2",
|
|
66
65
|
"ts-custom-error": "^3.2.0"
|
|
67
66
|
},
|
|
68
67
|
"jest": {
|
|
@@ -72,5 +71,5 @@
|
|
|
72
71
|
"<rootDir>/dist/"
|
|
73
72
|
]
|
|
74
73
|
},
|
|
75
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "2a08ad049f845c76301e6906b1a40fc76e38823c"
|
|
76
75
|
}
|