//native
type Gitbook = {
token: string;
};
/**
* Track site events
*
*/
export async function main(
auth: Gitbook,
organizationId: string,
siteId: string,
body: {
events:
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & { type: "page_view" })
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & { type: "search_open" })
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & { type: "search_type_query"; query: string })
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "search_open_result";
query: string;
result: { spaceId: string; pageId: string };
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "page_post_feedback";
feedback: { rating: "bad" | "ok" | "good" };
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "page_post_feedback_comment";
feedback: { rating: "bad" | "ok" | "good"; comment: string };
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & { type: "ask_question"; query: string })
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "ask_rate_response";
query: string;
rating: 1 | -1;
responseId: string;
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "link_click";
link: {
target:
| { kind: "file"; file: string }
| { kind: "url"; url: string }
| { kind: "page"; page: string; space?: string }
| {
kind: "anchor";
anchor: string;
space?: string;
page?: string;
}
| { kind: "user"; user: string }
| { kind: "collection"; collection: string }
| { kind: "space"; space: string }
| {
kind: "reusable-content";
reusableContent: string;
space?: string;
}
| { kind: "openapi"; spec: string };
position:
| "announcement"
| "header"
| "footer"
| "sidebar"
| "content";
};
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "api_client_open";
operation: { path: string; method: string };
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "api_client_request";
operation: { path: string; method: string };
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "trademark_click";
placement: "footer" | "sidebar" | "ad" | "pdf";
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "ad_click";
ad: { domain: string; zoneId: string; placement: "aside" };
})
| ({
session: {
visitorId: string;
sessionId: string;
cookies: {};
ip?: string;
userAgent: string;
language: string;
referrer: string;
visitorAuthToken?: string;
visitorAuthClaims?: {};
};
location: {
url: string;
siteSection: string;
siteSpace: string;
siteShareKey: string;
space: string;
revision: string;
page: string;
};
timestamp?: string;
} & {
type: "ad_display";
ad: { domain: string; zoneId: string; placement: "aside" };
}[]);
},
) {
const url = new URL(
`https://api.gitbook.com/v1/orgs/${organizationId}/sites/${siteId}/insights/events`,
);
const response = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + auth.token,
},
body: JSON.stringify(body),
});
if (!response.ok) {
const text = await response.text();
throw new Error(`${response.status} ${text}`);
}
return await response.text();
}
Submitted by hugo697 235 days ago