From 58e9e45623ff0ecaa14983497396c742aa296461 Mon Sep 17 00:00:00 2001 From: barbmarcio Date: Fri, 5 Jul 2024 19:27:47 +0100 Subject: [PATCH] feat: adding skeleton and report event as example --- .gitignore | 172 +++++++++++++++++++++++++++++ README.md | 19 +++- bun.lockb | Bin 0 -> 224458 bytes package.json | 26 +++++ src/functions/report-event.ts | 40 +++++++ src/index.ts | 2 + src/interfaces/events.interface.ts | 52 +++++++++ src/lib/extract-comments.ts | 13 +++ src/lib/generate-test-cases.ts | 33 ++++++ src/lib/mock-fetch.ts | 29 +++++ src/tests/report-event.test.ts | 86 +++++++++++++++ tsconfig.json | 22 ++++ 12 files changed, 491 insertions(+), 3 deletions(-) create mode 100644 .gitignore create mode 100755 bun.lockb create mode 100644 package.json create mode 100644 src/functions/report-event.ts create mode 100644 src/index.ts create mode 100644 src/interfaces/events.interface.ts create mode 100644 src/lib/extract-comments.ts create mode 100644 src/lib/generate-test-cases.ts create mode 100644 src/lib/mock-fetch.ts create mode 100644 src/tests/report-event.test.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3d75225 --- /dev/null +++ b/.gitignore @@ -0,0 +1,172 @@ +# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore + +# Logs + +logs +_.log +npm-debug.log_ +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) + +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# Runtime data + +pids +_.pid +_.seed +\*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover + +lib-cov + +# Coverage directory used by tools like istanbul + +coverage +\*.lcov + +# nyc test coverage + +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) + +.grunt + +# Bower dependency directory (https://bower.io/) + +bower_components + +# node-waf configuration + +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) + +build/Release + +# Dependency directories + +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) + +web_modules/ + +# TypeScript cache + +\*.tsbuildinfo + +# Optional npm cache directory + +.npm + +# Optional eslint cache + +.eslintcache + +# Optional stylelint cache + +.stylelintcache + +# Microbundle cache + +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history + +.node_repl_history + +# Output of 'npm pack' + +\*.tgz + +# Yarn Integrity file + +.yarn-integrity + +# dotenv environment variable files + +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) + +.cache +.parcel-cache + +# Next.js build output + +.next +out + +# Nuxt.js build / generate output + +.nuxt +dist + +# Gatsby files + +.cache/ + +# Comment in the public line in if your project uses Gatsby and not Next.js + +# https://nextjs.org/blog/next-9-1#public-directory-support + +# public + +# vuepress build output + +.vuepress/dist + +# vuepress v2.x temp and cache directory + +.temp +.cache + +# Docusaurus cache and generated files + +.docusaurus + +# Serverless directories + +.serverless/ + +# FuseBox cache + +.fusebox/ + +# DynamoDB Local files + +.dynamodb/ + +# TernJS port file + +.tern-port + +# Stores VSCode versions used for testing VSCode extensions + +.vscode-test + +# yarn v2 + +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.\* + +# IntelliJ based IDEs +.idea diff --git a/README.md b/README.md index bfb53e6..8388643 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,18 @@ -# Topsort.js +# topsort.js + +This repository holds the official Topsort.js client library. It is built using TypeScript. + +To install dependencies: + +```bash +bun install +``` + +To run: + +```bash +bun run src/index.ts +``` + -This repository holds the official Topsort.js client library. It is built using [TypeScript][typescript]. -[typescript]: https://www.typescriptlang.org diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..db7923908126e80db354d29f69d830026f4964c5 GIT binary patch literal 224458 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 z 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%0D*CRb`Mv;QqmZ83Q1VW*OwUYtTCJ;CcPc~+%V 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", + "license": "UNLICENSED", + "scripts": { + "build": "bun build", + "test": "bun test", + "lint": "bun lint", + "format": "bun format", + "prepublish": "bun prepublish", + "doctest": "bun run src/lib/doctest.test.ts" + }, + "devDependencies": { + "@supabase/doctest-js": "^0.1.0", + "bun-types": "latest" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "dependencies": {} +} diff --git a/src/functions/report-event.ts b/src/functions/report-event.ts new file mode 100644 index 0000000..d1791e6 --- /dev/null +++ b/src/functions/report-event.ts @@ -0,0 +1,40 @@ +import { version } from "../../package.json"; +import { Config, TopsortEvent } from "../interfaces/events.interface"; + +/** + * Reports an event to the Topsort API. + * + * @example + * ```js + * const event = { eventType: "test", eventData: {} }; + * const config = { token: "my-token" }; + * const result = await reportEvent(event, config); + * console.log(result); // { ok: true, retry: false } + * ``` + * + * @param {TopsortEvent} e - The event to report. + * @param {Config} config - The configuration object containing URL and token. + * @returns {Promise<{ok: boolean, retry: boolean}>} The result of the report, indicating success and if a retry is needed. + */ +export async function reportEvent(e: TopsortEvent, config: Config): Promise<{ ok: boolean, retry: boolean }> { + try { + const url = (config.url || "https://api.topsort.com") + "/v2/events"; + const r = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + // Can't use User-Agent header because of + // https://bugs.chromium.org/p/chromium/issues/detail?id=571722 + "X-UA": `ts.js/${version}`, + Authorization: "Bearer " + config.token, + }, + body: JSON.stringify(e), + // This parameter ensures in most browsers that the request is performed even in case the browser navigates to another page. + keepalive: true, + }); + return { ok: r.ok, retry: r.status === 429 || r.status >= 500 }; + } catch (error) { + console.error("Error reporting event:", error); + return { ok: false, retry: true }; + } +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..12bc3db --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export * from './functions/report-event'; +export * from './interfaces/events.interface'; \ No newline at end of file diff --git a/src/interfaces/events.interface.ts b/src/interfaces/events.interface.ts new file mode 100644 index 0000000..8becc7b --- /dev/null +++ b/src/interfaces/events.interface.ts @@ -0,0 +1,52 @@ +interface Placement { + path: string; +} + +export interface Entity { + type: "product"; + id: string; +} + +interface Impression { + resolvedBidId?: string; + entity?: Entity; + additionalAttribution?: Entity; + placement: Placement; + occurredAt: string; + opaqueUserId: string; + id: string; +} + +interface Click { + resolvedBidId?: string; + entity?: Entity; + additionalAttribution?: Entity; + placement: Placement; + occurredAt: string; + opaqueUserId: string; + id: string; +} + +interface Item { + productId: string; + quantity: number; + unitPrice: number; +} + +interface Purchase { + occurredAt: string; + opaqueUserId: string; + id: string; + items: Item[]; +} + +export interface TopsortEvent { + impressions?: Impression[]; + clicks?: Click[]; + purchases?: Purchase[]; +} + +export interface Config { + token: string; + url?: string; +} diff --git a/src/lib/extract-comments.ts b/src/lib/extract-comments.ts new file mode 100644 index 0000000..a02d7a5 --- /dev/null +++ b/src/lib/extract-comments.ts @@ -0,0 +1,13 @@ +import * as fs from "fs"; + +export function extractJSDocComments(filePath: string): string[] { + const content = fs.readFileSync(filePath, "utf-8"); + const comments = []; + const regex = /\/\*\*([\s\S]*?)\*\//g; + let match; + while ((match = regex.exec(content)) !== null) { + console.log("JSDoc Comment:", match[1]); // Log each extracted JSDoc comment + comments.push(match[1].trim()); + } + return comments; +} \ No newline at end of file diff --git a/src/lib/generate-test-cases.ts b/src/lib/generate-test-cases.ts new file mode 100644 index 0000000..5622bc6 --- /dev/null +++ b/src/lib/generate-test-cases.ts @@ -0,0 +1,33 @@ +import { extractJSDocComments } from "./extract-comments"; + +interface TestCase { + code: string; + expected: any; +} + +export function generateTestCases(filePath: string): TestCase[] { + const comments = extractJSDocComments(filePath); + const testCases: TestCase[] = []; + + comments.forEach((comment) => { + console.log(comment) + const exampleMatch = comment.match(/@example\s+\*?\s*```js([\s\S]*?)\s*\*?\s*```/); + if (exampleMatch) { + const exampleCode = exampleMatch[1].trim(); + const expectedMatch = exampleCode.match(/console\.log\((.*)\);?\s*\/\/\s*(.*)/); + if (expectedMatch) { + try { + const expectedOutput = JSON.parse(expectedMatch[2].trim()); + testCases.push({ + code: exampleCode.replace(/console\.log\(.*\);/, ""), + expected: expectedOutput, + }); + } catch (error) { + console.error("Failed to parse expected output:", expectedMatch[2].trim(), error); + } + } + } + }); + + return testCases; +} \ No newline at end of file diff --git a/src/lib/mock-fetch.ts b/src/lib/mock-fetch.ts new file mode 100644 index 0000000..6066358 --- /dev/null +++ b/src/lib/mock-fetch.ts @@ -0,0 +1,29 @@ +type RequestInfo = string | URL | Request; +export function mockFetch(responseData: any, status: number, urlPattern: string) { + globalThis.fetch = async (input: RequestInfo) => { + let url: string; + + if (typeof input === "string") { + url = input; + } else if (input instanceof URL) { + url = input.href; + } else { + url = input.url; + } + + if (url.includes(urlPattern)) { + return new Response(JSON.stringify(responseData), { + status: status, + headers: { "Content-Type": "application/json" }, + }); + } + + return new Response(null, { status: 404 }); + }; +} + +export function resetFetch() { + globalThis.fetch = async () => { + return new Response(null, { status: 404 }); + }; +} \ No newline at end of file diff --git a/src/tests/report-event.test.ts b/src/tests/report-event.test.ts new file mode 100644 index 0000000..ae53fbc --- /dev/null +++ b/src/tests/report-event.test.ts @@ -0,0 +1,86 @@ +import { describe, it, expect, afterEach } from "bun:test"; +import { reportEvent } from "../functions/report-event"; +import { TopsortEvent } from "../interfaces/events.interface"; +import { mockFetch, resetFetch } from "../lib/mock-fetch"; + +describe("reportEvent", () => { + afterEach(() => { + resetFetch(); + }); + + it("should report event successfully", async () => { + mockFetch({}, 200, "https://api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { token: "token" }); + expect(result).toEqual({ + ok: true, + retry: false, + }); + }); + + + it("should report event successfully", async () => { + mockFetch({}, 200, "https://api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { token: "token" }); + expect(result).toEqual({ + ok: true, + retry: false, + }); + }); + + it("should handle network error and retry", async () => { + mockFetch({ error: "Server Error" }, 500, "https://error.api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { + token: "token", + url: "https://error.api.topsort.com", + }); + expect(result).toEqual({ + ok: false, + retry: true, + }); + }); + + it("should handle permanent error", async () => { + mockFetch({ error: "Client Error" }, 400, "https://api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { token: "token" }); + expect(result).toEqual({ + ok: false, + retry: false, + }); + }); + + it("should handle authentication error", async () => { + mockFetch({ error: "Unauthorized" }, 401, "https://api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { token: "token" }); + expect(result).toEqual({ + ok: false, + retry: false, + }); + }); + + it("should handle retryable error", async () => { + mockFetch({ error: "Too Many Requests" }, 429, "https://api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { token: "token" }); + expect(result).toEqual({ + ok: false, + retry: true, + }); + }); + + it("should handle server error", async () => { + mockFetch({ error: "Internal Server Error" }, 500, "https://api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { token: "token" }); + expect(result).toEqual({ + ok: false, + retry: true, + }); + }); + + it("should handle custom url", async () => { + mockFetch({}, 200, "https://demo.api.topsort.com/v2/events"); + const result = await reportEvent({} as TopsortEvent, { + token: "token", + url: "https://demo.api.topsort.com", + }); + expect(result).toEqual({ ok: true, retry: false }); + }); +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7556e1d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "module": "esnext", + "target": "esnext", + "moduleResolution": "bundler", + "moduleDetection": "force", + "allowImportingTsExtensions": true, + "noEmit": true, + "composite": true, + "strict": true, + "downlevelIteration": true, + "skipLibCheck": true, + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true, + "types": [ + "bun-types" // add Bun global + ] + } +}