-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.d.ts
281 lines (279 loc) · 7.34 KB
/
index.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
/**
* stream a SQL query from your data warehouse into mixpanel!
* @example
* const results = await dwhMixpanel(params)
* console.log(results.mixpanel) // { duration: 3461, success: 420, responses: [], errors: [] }
* @param {Params} params your streaming configuration
* @returns {Promise<Summary>} summary of the job containing metadata about time/throughput/responses
*/
export default function main(params: Params): Promise<Summary>;
type ImportOptions = any;
/**
* the data warehouses supported by this module
*/
type SupportedWarehouses = 'biquery' | 'athena' | 'snowflake' | 'azure' | 'salesforce';
/**
* types of records that can be ingested by mixpanel
*/
type SupportedRecords = 'event' | 'user' | 'group' | 'table';
/**
* a job configuration
*/
export type Params = {
/**
* type of warehouse
*/
dwh: SupportedWarehouses;
/**
* auth details for warehouse
*/
auth: any;
/**
* SQL query to run in warehouse
*/
sql: string;
mappings: Mappings;
/**
* Aliases property key names after mappings are applied `{sourceKey: targetKey}`
*/
aliases: {
[x: string]: string;
};
options: Options;
mixpanel: Mixpanel;
tags: Tags;
};
/**
* mappings of dwh columns to mixpanel fields
*/
type Mappings = {
/**
* column for event name
*/
event_name_col?: string;
/**
* column for distinct_id (original id merge)
*/
distinct_id_col?: string;
/**
* column for user id (simplified id merge)
*/
user_id_col?: string;
/**
* column for device_id / anon_id (simplified id merge)
*/
device_id_col?: string;
/**
* column for event time
*/
time_col?: string;
/**
* column for row id (deduplication)
*/
insert_id_col?: string;
/**
* the $name to use for the user/group profile
*/
name_col?: string;
/**
* the $email to use for the user/group profile
*/
email_col?: string;
/**
* a public link to an image to be used as an $avatar for the user/group profile
*/
avatar_col?: string;
/**
* the $created (timestamp) to use for the user/group profile
*/
created_col?: string;
/**
* the $phone to use for the user/group profile
*/
phone_col?: string;
/**
* the $latitude to use for the user/group profile; mixpanel will geo-resolve the profile when this value is supplied
*/
latitude_col?: string;
/**
* the $longitude to use for the user/group profile; mixpanel will geo-resolve the profile when this value is supplied
*/
longitude_col?: string;
/**
* the $ip to use for the user/group profile; mixpanel will geo-resolve the profile when this value is supplied
*/
ip_co?: string;
/**
* the $set style operation to use for creating/updating the profile
*/
profileOperation?: string;
/**
* the "join" column for the lookup table; usually the first column in the table
*/
lookup_col?: string;
};
/**
* options to use for the job
*/
type LocalOptions = {
/**
* a local path to write log files to
*/
logFile: string;
/**
* display verbose console output
*/
verbose: boolean;
/**
* use strict mode when sending data to mixpanel
*/
strict: boolean;
/**
* compress data in transit
*/
compress: boolean;
/**
* number of concurrent workers to make requests to mixpanel
*/
workers: number;
};
type Options = LocalOptions & ImportOptions;
/**
* mixpanel auth details + configuration
*/
type Mixpanel = {
/**
* mixpanel project id {@link https://help.mixpanel.com/hc/en-us/articles/115004490503-Project-Settings#project-id more info}
*/
project_id: string;
/**
* mixpanel service account user name {@link https://developer.mixpanel.com/reference/service-accounts#managing-service-accounts more info}
*/
service_account?: string;
/**
* mixpanel service account secret {@link https://developer.mixpanel.com/reference/service-accounts#managing-service-accounts more info}
*/
service_secret?: string;
/**
* mixpanel project api secret {@link https://help.mixpanel.com/hc/en-us/articles/115004490503-Project-Settings#api-secret more info}
*/
api_secret?: string;
/**
* mixpanel project token {@link https://help.mixpanel.com/hc/en-us/articles/115004490503-Project-Settings#project-token more info}
*/
token?: string;
/**
* mixpanel project region {@link https://help.mixpanel.com/hc/en-us/articles/115004490503-Project-Settings#data-residency more info}
*/
region: 'US' | 'EU';
/**
* kind of data to import {@link https://developer.mixpanel.com/docs/data-structure-deep-dive more info}
*/
type: SupportedRecords;
/**
* a group analytics key to use for profiles {@link https://help.mixpanel.com/hc/en-us/articles/360025333632-Group-Analytics#implementation more info}
*/
groupKey?: string;
/**
* the lookup table to replace {@link https://developer.mixpanel.com/reference/replace-lookup-table more info}
*/
lookupTableId?: string;
};
/**
* arbitrary tags (k:v) to put on the data
*/
type Tags = {
[x: string]: string;
};
/**
* summary of stream job
*/
export type Summary = {
mixpanel: MixpanelSummary;
"": any;
};
type MixpanelSummary = {
/**
* the full duration of the job in ms
*/
duration: number;
/**
* a human readable string of the full duration
*/
human: string;
/**
* the "events per second" when sending to mixpanel
*/
eps: number;
/**
* the "requests per second" when sending to mixpanel
*/
rps: number;
/**
* the number of records processed from the warehouse
*/
total: number;
/**
* the number of records that were successfully ingested
*/
success: number;
/**
* the number of records that failed to be ingested
*/
failed: number;
/**
* the number of times a request was retried
*/
retries: number;
/**
* the number of concurrent workers sending requests to mixpanel
*/
workers: number;
/**
* the version of this module
*/
version: string;
/**
* the type of record that was sent to mixpanel
*/
recordType: SupportedRecords;
/**
* the error payloads from mixpanel
*/
errors: any[];
/**
* the response payloads from mixpanel
*/
responses: any[];
};
type WarehouseSummary = {
/**
* job metadata from the warehouse
*/
job: any;
/**
* schema for the (usually temporary) table created as a result of the query
*/
schema: any;
/**
* an AST of the user-entered SQL Query
*/
sqlAnalysis: any;
/**
* the number of rows in the table
*/
rows: number;
/**
* additional metadata on the temporary table
*/
table?: any;
};
/**
* stream a SQL query from your data warehouse into mixpanel!
* @example
* const results = await dwhMixpanel(params)
* console.log(results.mixpanel) // { duration: 3461, success: 420, responses: [], errors: [] }
* @param {Params} params your streaming configuration
* @returns {Promise<Summary>} summary of the job containing metadata about time/throughput/responses
*/
declare function main(params: Params): Promise<Summary>;