Edits history of script submission #16185 for ' Track site events (gitbook)'

  • bun
    One script reply has been approved by the moderators
    Ap­pro­ved
    //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