From b992e50faf69e6f9e2d17385c0b05191e29bd49c Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Fri, 28 Apr 2023 00:28:05 +0800 Subject: --- .gitignore | 1 - docs/lib/ConvertKitApi.ts | 59 ++++++++++++++++++++++++++++++++++++ docs/lib/useTurborepoMinutesSaved.ts | 38 +++++++++++++++++++++++ docs/package.json | 1 + 4 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 docs/lib/ConvertKitApi.ts create mode 100644 docs/lib/useTurborepoMinutesSaved.ts diff --git a/.gitignore b/.gitignore index 93a6197..c6161f3 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,6 @@ dist/ downloads/ eggs/ .eggs/ -lib/ lib64/ parts/ sdist/ diff --git a/docs/lib/ConvertKitApi.ts b/docs/lib/ConvertKitApi.ts new file mode 100644 index 0000000..3e35ec9 --- /dev/null +++ b/docs/lib/ConvertKitApi.ts @@ -0,0 +1,59 @@ +import axios from "axios"; + +const API_KEY = process.env.CONVERTKIT_API_KEY; +const API_SECRET = process.env.CONVERTKIT_API_SECRET; + +const Http = axios.create({ + baseURL: "https://api.convertkit.com/v3", + headers: { + "Content-Type": "application/json; charset=utf-8", + }, +}); + +export function subscribeToForm({ + formId, + email, + firstName, + fields, +}: { + formId: string; + email: string; + firstName: string; + fields?: Record; +}): Promise { + return Http(`/forms/${formId}/subscribe`, { + method: "POST", + data: { api_key: API_KEY, email, first_name: firstName, fields }, + }).then((res) => res.data.subscription?.subscriber); +} + +export function updateSubscriber( + id: string, + update: Subscriber +): Promise { + return Http(`/subscribers/${id}`, { + method: "PUT", + data: { + api_secret: API_SECRET, + ...update, + }, + }).then((res) => res.data); +} + +export interface Subscriber { + id: number; + first_name: string; + email_address: string; + state: string; // maybe 'active' | 'inactive' + created_at: string; + fields: Record; +} + +export function getSubscriber(id: string): Promise { + return Http(`/subscribers/${id}`, { + method: "GET", + data: { + api_secret: API_SECRET, + }, + }).then((res) => res.data.subscriber); +} \ No newline at end of file diff --git a/docs/lib/useTurborepoMinutesSaved.ts b/docs/lib/useTurborepoMinutesSaved.ts new file mode 100644 index 0000000..5a94a91 --- /dev/null +++ b/docs/lib/useTurborepoMinutesSaved.ts @@ -0,0 +1,38 @@ +import useSWR from "swr"; +import axios from "axios"; + +const fetcher = (url) => axios.get(url).then((res) => res.data); + +const path = + "https://api.us-east.tinybird.co/v0/pipes/turborepo_time_saved_ticker.json?token=p.eyJ1IjogIjAzYzA0Y2MyLTM1YTAtNDhhNC05ZTZjLThhMWE0NGNhNjhkZiIsICJpZCI6ICJmOWIzMTU5Yi0wOTVjLTQyM2UtOWIwNS04ZDZlNzIyNjEwNzIifQ.A3TOPdm3Lhmn-1x5m6jNvulCQbbgUeQfAIO3IaaAt5k"; + +const REFRESH_INTERVAL_IN_MS = 3500; + +interface QueryResponse { + meta: { name: string; type: string }[]; + data: { + last_update_time: string; + remote_cache_minutes_saved: number; + local_cache_minutes_saved: number; + }[]; + rows: number; + statistics: { + elapsed: number; + rows_read: number; + bytes_read: number; + }; +} + +export default function useTurborepoMinutesSaved(): + | { + last_update_time: string; + remote_cache_minutes_saved: number; + local_cache_minutes_saved: number; + } + | undefined { + const swr = useSWR(path, fetcher, { + refreshInterval: REFRESH_INTERVAL_IN_MS, + }); + + return swr.data?.data[0]; +} \ No newline at end of file diff --git a/docs/package.json b/docs/package.json index 0c4758a..ea5a17c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -36,6 +36,7 @@ }, "devDependencies": { "@babel/core": "7.20.12", + "@turbo/types": "workspace:*", "@types/node": "^16.11.12", "@types/react": "18.0.21", "autoprefixer": "10.4.14", -- cgit v1.2.3-70-g09d2