1 | |
2 | type Gitbook = { |
3 | token: string; |
4 | }; |
5 | |
6 | * Track site events |
7 | * |
8 | */ |
9 | export async function main( |
10 | auth: Gitbook, |
11 | organizationId: string, |
12 | siteId: string, |
13 | body: { |
14 | events: |
15 | | ({ |
16 | session: { |
17 | visitorId: string; |
18 | sessionId: string; |
19 | cookies: {}; |
20 | ip?: string; |
21 | userAgent: string; |
22 | language: string; |
23 | referrer: string; |
24 | visitorAuthToken?: string; |
25 | visitorAuthClaims?: {}; |
26 | }; |
27 | location: { |
28 | url: string; |
29 | siteSection: string; |
30 | siteSpace: string; |
31 | siteShareKey: string; |
32 | space: string; |
33 | revision: string; |
34 | page: string; |
35 | }; |
36 | timestamp?: string; |
37 | } & { type: "page_view" }) |
38 | | ({ |
39 | session: { |
40 | visitorId: string; |
41 | sessionId: string; |
42 | cookies: {}; |
43 | ip?: string; |
44 | userAgent: string; |
45 | language: string; |
46 | referrer: string; |
47 | visitorAuthToken?: string; |
48 | visitorAuthClaims?: {}; |
49 | }; |
50 | location: { |
51 | url: string; |
52 | siteSection: string; |
53 | siteSpace: string; |
54 | siteShareKey: string; |
55 | space: string; |
56 | revision: string; |
57 | page: string; |
58 | }; |
59 | timestamp?: string; |
60 | } & { type: "search_open" }) |
61 | | ({ |
62 | session: { |
63 | visitorId: string; |
64 | sessionId: string; |
65 | cookies: {}; |
66 | ip?: string; |
67 | userAgent: string; |
68 | language: string; |
69 | referrer: string; |
70 | visitorAuthToken?: string; |
71 | visitorAuthClaims?: {}; |
72 | }; |
73 | location: { |
74 | url: string; |
75 | siteSection: string; |
76 | siteSpace: string; |
77 | siteShareKey: string; |
78 | space: string; |
79 | revision: string; |
80 | page: string; |
81 | }; |
82 | timestamp?: string; |
83 | } & { type: "search_type_query"; query: string }) |
84 | | ({ |
85 | session: { |
86 | visitorId: string; |
87 | sessionId: string; |
88 | cookies: {}; |
89 | ip?: string; |
90 | userAgent: string; |
91 | language: string; |
92 | referrer: string; |
93 | visitorAuthToken?: string; |
94 | visitorAuthClaims?: {}; |
95 | }; |
96 | location: { |
97 | url: string; |
98 | siteSection: string; |
99 | siteSpace: string; |
100 | siteShareKey: string; |
101 | space: string; |
102 | revision: string; |
103 | page: string; |
104 | }; |
105 | timestamp?: string; |
106 | } & { |
107 | type: "search_open_result"; |
108 | query: string; |
109 | result: { spaceId: string; pageId: string }; |
110 | }) |
111 | | ({ |
112 | session: { |
113 | visitorId: string; |
114 | sessionId: string; |
115 | cookies: {}; |
116 | ip?: string; |
117 | userAgent: string; |
118 | language: string; |
119 | referrer: string; |
120 | visitorAuthToken?: string; |
121 | visitorAuthClaims?: {}; |
122 | }; |
123 | location: { |
124 | url: string; |
125 | siteSection: string; |
126 | siteSpace: string; |
127 | siteShareKey: string; |
128 | space: string; |
129 | revision: string; |
130 | page: string; |
131 | }; |
132 | timestamp?: string; |
133 | } & { |
134 | type: "page_post_feedback"; |
135 | feedback: { rating: "bad" | "ok" | "good" }; |
136 | }) |
137 | | ({ |
138 | session: { |
139 | visitorId: string; |
140 | sessionId: string; |
141 | cookies: {}; |
142 | ip?: string; |
143 | userAgent: string; |
144 | language: string; |
145 | referrer: string; |
146 | visitorAuthToken?: string; |
147 | visitorAuthClaims?: {}; |
148 | }; |
149 | location: { |
150 | url: string; |
151 | siteSection: string; |
152 | siteSpace: string; |
153 | siteShareKey: string; |
154 | space: string; |
155 | revision: string; |
156 | page: string; |
157 | }; |
158 | timestamp?: string; |
159 | } & { |
160 | type: "page_post_feedback_comment"; |
161 | feedback: { rating: "bad" | "ok" | "good"; comment: string }; |
162 | }) |
163 | | ({ |
164 | session: { |
165 | visitorId: string; |
166 | sessionId: string; |
167 | cookies: {}; |
168 | ip?: string; |
169 | userAgent: string; |
170 | language: string; |
171 | referrer: string; |
172 | visitorAuthToken?: string; |
173 | visitorAuthClaims?: {}; |
174 | }; |
175 | location: { |
176 | url: string; |
177 | siteSection: string; |
178 | siteSpace: string; |
179 | siteShareKey: string; |
180 | space: string; |
181 | revision: string; |
182 | page: string; |
183 | }; |
184 | timestamp?: string; |
185 | } & { type: "ask_question"; query: string }) |
186 | | ({ |
187 | session: { |
188 | visitorId: string; |
189 | sessionId: string; |
190 | cookies: {}; |
191 | ip?: string; |
192 | userAgent: string; |
193 | language: string; |
194 | referrer: string; |
195 | visitorAuthToken?: string; |
196 | visitorAuthClaims?: {}; |
197 | }; |
198 | location: { |
199 | url: string; |
200 | siteSection: string; |
201 | siteSpace: string; |
202 | siteShareKey: string; |
203 | space: string; |
204 | revision: string; |
205 | page: string; |
206 | }; |
207 | timestamp?: string; |
208 | } & { |
209 | type: "ask_rate_response"; |
210 | query: string; |
211 | rating: 1 | -1; |
212 | responseId: string; |
213 | }) |
214 | | ({ |
215 | session: { |
216 | visitorId: string; |
217 | sessionId: string; |
218 | cookies: {}; |
219 | ip?: string; |
220 | userAgent: string; |
221 | language: string; |
222 | referrer: string; |
223 | visitorAuthToken?: string; |
224 | visitorAuthClaims?: {}; |
225 | }; |
226 | location: { |
227 | url: string; |
228 | siteSection: string; |
229 | siteSpace: string; |
230 | siteShareKey: string; |
231 | space: string; |
232 | revision: string; |
233 | page: string; |
234 | }; |
235 | timestamp?: string; |
236 | } & { |
237 | type: "link_click"; |
238 | link: { |
239 | target: |
240 | | { kind: "file"; file: string } |
241 | | { kind: "url"; url: string } |
242 | | { kind: "page"; page: string; space?: string } |
243 | | { |
244 | kind: "anchor"; |
245 | anchor: string; |
246 | space?: string; |
247 | page?: string; |
248 | } |
249 | | { kind: "user"; user: string } |
250 | | { kind: "collection"; collection: string } |
251 | | { kind: "space"; space: string } |
252 | | { |
253 | kind: "reusable-content"; |
254 | reusableContent: string; |
255 | space?: string; |
256 | } |
257 | | { kind: "openapi"; spec: string }; |
258 | position: |
259 | | "announcement" |
260 | | "header" |
261 | | "footer" |
262 | | "sidebar" |
263 | | "content"; |
264 | }; |
265 | }) |
266 | | ({ |
267 | session: { |
268 | visitorId: string; |
269 | sessionId: string; |
270 | cookies: {}; |
271 | ip?: string; |
272 | userAgent: string; |
273 | language: string; |
274 | referrer: string; |
275 | visitorAuthToken?: string; |
276 | visitorAuthClaims?: {}; |
277 | }; |
278 | location: { |
279 | url: string; |
280 | siteSection: string; |
281 | siteSpace: string; |
282 | siteShareKey: string; |
283 | space: string; |
284 | revision: string; |
285 | page: string; |
286 | }; |
287 | timestamp?: string; |
288 | } & { |
289 | type: "api_client_open"; |
290 | operation: { path: string; method: string }; |
291 | }) |
292 | | ({ |
293 | session: { |
294 | visitorId: string; |
295 | sessionId: string; |
296 | cookies: {}; |
297 | ip?: string; |
298 | userAgent: string; |
299 | language: string; |
300 | referrer: string; |
301 | visitorAuthToken?: string; |
302 | visitorAuthClaims?: {}; |
303 | }; |
304 | location: { |
305 | url: string; |
306 | siteSection: string; |
307 | siteSpace: string; |
308 | siteShareKey: string; |
309 | space: string; |
310 | revision: string; |
311 | page: string; |
312 | }; |
313 | timestamp?: string; |
314 | } & { |
315 | type: "api_client_request"; |
316 | operation: { path: string; method: string }; |
317 | }) |
318 | | ({ |
319 | session: { |
320 | visitorId: string; |
321 | sessionId: string; |
322 | cookies: {}; |
323 | ip?: string; |
324 | userAgent: string; |
325 | language: string; |
326 | referrer: string; |
327 | visitorAuthToken?: string; |
328 | visitorAuthClaims?: {}; |
329 | }; |
330 | location: { |
331 | url: string; |
332 | siteSection: string; |
333 | siteSpace: string; |
334 | siteShareKey: string; |
335 | space: string; |
336 | revision: string; |
337 | page: string; |
338 | }; |
339 | timestamp?: string; |
340 | } & { |
341 | type: "trademark_click"; |
342 | placement: "footer" | "sidebar" | "ad" | "pdf"; |
343 | }) |
344 | | ({ |
345 | session: { |
346 | visitorId: string; |
347 | sessionId: string; |
348 | cookies: {}; |
349 | ip?: string; |
350 | userAgent: string; |
351 | language: string; |
352 | referrer: string; |
353 | visitorAuthToken?: string; |
354 | visitorAuthClaims?: {}; |
355 | }; |
356 | location: { |
357 | url: string; |
358 | siteSection: string; |
359 | siteSpace: string; |
360 | siteShareKey: string; |
361 | space: string; |
362 | revision: string; |
363 | page: string; |
364 | }; |
365 | timestamp?: string; |
366 | } & { |
367 | type: "ad_click"; |
368 | ad: { domain: string; zoneId: string; placement: "aside" }; |
369 | }) |
370 | | ({ |
371 | session: { |
372 | visitorId: string; |
373 | sessionId: string; |
374 | cookies: {}; |
375 | ip?: string; |
376 | userAgent: string; |
377 | language: string; |
378 | referrer: string; |
379 | visitorAuthToken?: string; |
380 | visitorAuthClaims?: {}; |
381 | }; |
382 | location: { |
383 | url: string; |
384 | siteSection: string; |
385 | siteSpace: string; |
386 | siteShareKey: string; |
387 | space: string; |
388 | revision: string; |
389 | page: string; |
390 | }; |
391 | timestamp?: string; |
392 | } & { |
393 | type: "ad_display"; |
394 | ad: { domain: string; zoneId: string; placement: "aside" }; |
395 | }[]); |
396 | }, |
397 | ) { |
398 | const url = new URL( |
399 | `https://api.gitbook.com/v1/orgs/${organizationId}/sites/${siteId}/insights/events`, |
400 | ); |
401 |
|
402 | const response = await fetch(url, { |
403 | method: "POST", |
404 | headers: { |
405 | "Content-Type": "application/json", |
406 | Authorization: "Bearer " + auth.token, |
407 | }, |
408 | body: JSON.stringify(body), |
409 | }); |
410 | if (!response.ok) { |
411 | const text = await response.text(); |
412 | throw new Error(`${response.status} ${text}`); |
413 | } |
414 | return await response.text(); |
415 | } |
416 |
|