waitkit 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +9 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -74,6 +74,11 @@ var HttpClient = class {
|
|
|
74
74
|
|
|
75
75
|
// src/resources/subscribers.ts
|
|
76
76
|
var DEFAULT_SOURCE = "landing-page";
|
|
77
|
+
function getSourceFromUrl() {
|
|
78
|
+
if (typeof window === "undefined") return null;
|
|
79
|
+
const params = new URLSearchParams(window.location.search);
|
|
80
|
+
return params.get("source") || params.get("s") || null;
|
|
81
|
+
}
|
|
77
82
|
var SubscribersResource = class {
|
|
78
83
|
client;
|
|
79
84
|
apiKey;
|
|
@@ -94,7 +99,10 @@ var SubscribersResource = class {
|
|
|
94
99
|
`/api/waitlist/${this.projectSlug}/join`,
|
|
95
100
|
{
|
|
96
101
|
headers: this.headers,
|
|
97
|
-
body: {
|
|
102
|
+
body: {
|
|
103
|
+
...options,
|
|
104
|
+
source: options.source ?? getSourceFromUrl() ?? this.defaultSource
|
|
105
|
+
}
|
|
98
106
|
}
|
|
99
107
|
);
|
|
100
108
|
return {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/client.ts","../src/resources/subscribers.ts"],"sourcesContent":["import { HttpClient } from \"./client\";\nimport { SubscribersResource } from \"./resources/subscribers\";\nimport type { WaitKitConfig } from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://waitkit.dev\";\n\nexport class WaitKit {\n subscribers: SubscribersResource;\n private client: HttpClient;\n private apiKey: string;\n private projectSlug: string;\n\n constructor(config: WaitKitConfig) {\n this.apiKey = config.apiKey;\n this.projectSlug = config.projectSlug;\n this.client = new HttpClient(config.baseUrl ?? DEFAULT_BASE_URL);\n this.subscribers = new SubscribersResource(\n this.client,\n this.apiKey,\n this.projectSlug,\n config.source,\n );\n }\n}\n","import type { ErrorResponse } from \"./types\";\n\nexport class WaitKitError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public issues?: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = \"WaitKitError\";\n }\n\n static fromResponse(res: ErrorResponse): WaitKitError {\n return new WaitKitError(res.message, res.statusCode, res.issues);\n }\n}\n","import type { ApiResponse, ErrorResponse, SuccessResponse } from \"./types\";\nimport { WaitKitError } from \"./errors\";\n\nexport class HttpClient {\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n headers?: Record<string, string>;\n body?: unknown;\n query?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json: ApiResponse<T> = await res.json();\n\n if (!res.ok || json.status === \"error\") {\n const err = json as ErrorResponse;\n throw WaitKitError.fromResponse(err);\n }\n\n return (json as SuccessResponse<T>).data;\n }\n}\n","import { HttpClient } from \"../client\";\nimport type { JoinOptions, JoinResult } from \"../types\";\n\nconst DEFAULT_SOURCE = \"landing-page\";\n\nexport class SubscribersResource {\n private client: HttpClient;\n private apiKey: string;\n private projectSlug: string;\n private defaultSource: string;\n\n constructor(\n client: HttpClient,\n apiKey: string,\n projectSlug: string,\n defaultSource?: string,\n ) {\n this.client = client;\n this.apiKey = apiKey;\n this.projectSlug = projectSlug;\n this.defaultSource = defaultSource ?? DEFAULT_SOURCE;\n }\n\n private get headers() {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n\n async create(options: JoinOptions): Promise<JoinResult> {\n const data = await this.client.request<{ email: string }>(\n \"POST\",\n `/api/waitlist/${this.projectSlug}/join`,\n {\n headers: this.headers,\n body: {
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/client.ts","../src/resources/subscribers.ts"],"sourcesContent":["import { HttpClient } from \"./client\";\nimport { SubscribersResource } from \"./resources/subscribers\";\nimport type { WaitKitConfig } from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://waitkit.dev\";\n\nexport class WaitKit {\n subscribers: SubscribersResource;\n private client: HttpClient;\n private apiKey: string;\n private projectSlug: string;\n\n constructor(config: WaitKitConfig) {\n this.apiKey = config.apiKey;\n this.projectSlug = config.projectSlug;\n this.client = new HttpClient(config.baseUrl ?? DEFAULT_BASE_URL);\n this.subscribers = new SubscribersResource(\n this.client,\n this.apiKey,\n this.projectSlug,\n config.source,\n );\n }\n}\n","import type { ErrorResponse } from \"./types\";\n\nexport class WaitKitError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public issues?: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = \"WaitKitError\";\n }\n\n static fromResponse(res: ErrorResponse): WaitKitError {\n return new WaitKitError(res.message, res.statusCode, res.issues);\n }\n}\n","import type { ApiResponse, ErrorResponse, SuccessResponse } from \"./types\";\nimport { WaitKitError } from \"./errors\";\n\nexport class HttpClient {\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n headers?: Record<string, string>;\n body?: unknown;\n query?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json: ApiResponse<T> = await res.json();\n\n if (!res.ok || json.status === \"error\") {\n const err = json as ErrorResponse;\n throw WaitKitError.fromResponse(err);\n }\n\n return (json as SuccessResponse<T>).data;\n }\n}\n","import { HttpClient } from \"../client\";\nimport type { JoinOptions, JoinResult } from \"../types\";\n\nconst DEFAULT_SOURCE = \"landing-page\";\n\nfunction getSourceFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n const params = new URLSearchParams(window.location.search);\n return params.get(\"source\") || params.get(\"s\") || null;\n}\n\nexport class SubscribersResource {\n private client: HttpClient;\n private apiKey: string;\n private projectSlug: string;\n private defaultSource: string;\n\n constructor(\n client: HttpClient,\n apiKey: string,\n projectSlug: string,\n defaultSource?: string,\n ) {\n this.client = client;\n this.apiKey = apiKey;\n this.projectSlug = projectSlug;\n this.defaultSource = defaultSource ?? DEFAULT_SOURCE;\n }\n\n private get headers() {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n\n async create(options: JoinOptions): Promise<JoinResult> {\n const data = await this.client.request<{ email: string }>(\n \"POST\",\n `/api/waitlist/${this.projectSlug}/join`,\n {\n headers: this.headers,\n body: {\n ...options,\n source: options.source ?? getSourceFromUrl() ?? this.defaultSource,\n },\n },\n );\n\n return {\n message: \"Thank you for joining the waitlist!\",\n email: data.email,\n };\n }\n\n async count(projectSlug?: string): Promise<number> {\n const slug = projectSlug ?? this.projectSlug;\n const data = await this.client.request<{ count: number }>(\n \"GET\",\n `/api/waitlist/${slug}/count`,\n { headers: this.headers },\n );\n\n return data.count;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -47,6 +47,11 @@ var HttpClient = class {
|
|
|
47
47
|
|
|
48
48
|
// src/resources/subscribers.ts
|
|
49
49
|
var DEFAULT_SOURCE = "landing-page";
|
|
50
|
+
function getSourceFromUrl() {
|
|
51
|
+
if (typeof window === "undefined") return null;
|
|
52
|
+
const params = new URLSearchParams(window.location.search);
|
|
53
|
+
return params.get("source") || params.get("s") || null;
|
|
54
|
+
}
|
|
50
55
|
var SubscribersResource = class {
|
|
51
56
|
client;
|
|
52
57
|
apiKey;
|
|
@@ -67,7 +72,10 @@ var SubscribersResource = class {
|
|
|
67
72
|
`/api/waitlist/${this.projectSlug}/join`,
|
|
68
73
|
{
|
|
69
74
|
headers: this.headers,
|
|
70
|
-
body: {
|
|
75
|
+
body: {
|
|
76
|
+
...options,
|
|
77
|
+
source: options.source ?? getSourceFromUrl() ?? this.defaultSource
|
|
78
|
+
}
|
|
71
79
|
}
|
|
72
80
|
);
|
|
73
81
|
return {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/resources/subscribers.ts","../src/index.ts"],"sourcesContent":["import type { ErrorResponse } from \"./types\";\n\nexport class WaitKitError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public issues?: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = \"WaitKitError\";\n }\n\n static fromResponse(res: ErrorResponse): WaitKitError {\n return new WaitKitError(res.message, res.statusCode, res.issues);\n }\n}\n","import type { ApiResponse, ErrorResponse, SuccessResponse } from \"./types\";\nimport { WaitKitError } from \"./errors\";\n\nexport class HttpClient {\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n headers?: Record<string, string>;\n body?: unknown;\n query?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json: ApiResponse<T> = await res.json();\n\n if (!res.ok || json.status === \"error\") {\n const err = json as ErrorResponse;\n throw WaitKitError.fromResponse(err);\n }\n\n return (json as SuccessResponse<T>).data;\n }\n}\n","import { HttpClient } from \"../client\";\nimport type { JoinOptions, JoinResult } from \"../types\";\n\nconst DEFAULT_SOURCE = \"landing-page\";\n\nexport class SubscribersResource {\n private client: HttpClient;\n private apiKey: string;\n private projectSlug: string;\n private defaultSource: string;\n\n constructor(\n client: HttpClient,\n apiKey: string,\n projectSlug: string,\n defaultSource?: string,\n ) {\n this.client = client;\n this.apiKey = apiKey;\n this.projectSlug = projectSlug;\n this.defaultSource = defaultSource ?? DEFAULT_SOURCE;\n }\n\n private get headers() {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n\n async create(options: JoinOptions): Promise<JoinResult> {\n const data = await this.client.request<{ email: string }>(\n \"POST\",\n `/api/waitlist/${this.projectSlug}/join`,\n {\n headers: this.headers,\n body: {
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/client.ts","../src/resources/subscribers.ts","../src/index.ts"],"sourcesContent":["import type { ErrorResponse } from \"./types\";\n\nexport class WaitKitError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public issues?: Array<{ path: string; message: string }>,\n ) {\n super(message);\n this.name = \"WaitKitError\";\n }\n\n static fromResponse(res: ErrorResponse): WaitKitError {\n return new WaitKitError(res.message, res.statusCode, res.issues);\n }\n}\n","import type { ApiResponse, ErrorResponse, SuccessResponse } from \"./types\";\nimport { WaitKitError } from \"./errors\";\n\nexport class HttpClient {\n private baseUrl: string;\n\n constructor(baseUrl: string) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n }\n\n async request<T>(\n method: string,\n path: string,\n options: {\n headers?: Record<string, string>;\n body?: unknown;\n query?: Record<string, string | number | undefined>;\n } = {},\n ): Promise<T> {\n const url = new URL(`${this.baseUrl}${path}`);\n\n if (options.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value !== undefined) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const res = await fetch(url.toString(), {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n body: options.body ? JSON.stringify(options.body) : undefined,\n });\n\n const json: ApiResponse<T> = await res.json();\n\n if (!res.ok || json.status === \"error\") {\n const err = json as ErrorResponse;\n throw WaitKitError.fromResponse(err);\n }\n\n return (json as SuccessResponse<T>).data;\n }\n}\n","import { HttpClient } from \"../client\";\nimport type { JoinOptions, JoinResult } from \"../types\";\n\nconst DEFAULT_SOURCE = \"landing-page\";\n\nfunction getSourceFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n const params = new URLSearchParams(window.location.search);\n return params.get(\"source\") || params.get(\"s\") || null;\n}\n\nexport class SubscribersResource {\n private client: HttpClient;\n private apiKey: string;\n private projectSlug: string;\n private defaultSource: string;\n\n constructor(\n client: HttpClient,\n apiKey: string,\n projectSlug: string,\n defaultSource?: string,\n ) {\n this.client = client;\n this.apiKey = apiKey;\n this.projectSlug = projectSlug;\n this.defaultSource = defaultSource ?? DEFAULT_SOURCE;\n }\n\n private get headers() {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n\n async create(options: JoinOptions): Promise<JoinResult> {\n const data = await this.client.request<{ email: string }>(\n \"POST\",\n `/api/waitlist/${this.projectSlug}/join`,\n {\n headers: this.headers,\n body: {\n ...options,\n source: options.source ?? getSourceFromUrl() ?? this.defaultSource,\n },\n },\n );\n\n return {\n message: \"Thank you for joining the waitlist!\",\n email: data.email,\n };\n }\n\n async count(projectSlug?: string): Promise<number> {\n const slug = projectSlug ?? this.projectSlug;\n const data = await this.client.request<{ count: number }>(\n \"GET\",\n `/api/waitlist/${slug}/count`,\n { headers: this.headers },\n );\n\n return data.count;\n }\n}\n","import { HttpClient } from \"./client\";\nimport { SubscribersResource } from \"./resources/subscribers\";\nimport type { WaitKitConfig } from \"./types\";\n\nexport const DEFAULT_BASE_URL = \"https://waitkit.dev\";\n\nexport class WaitKit {\n subscribers: SubscribersResource;\n private client: HttpClient;\n private apiKey: string;\n private projectSlug: string;\n\n constructor(config: WaitKitConfig) {\n this.apiKey = config.apiKey;\n this.projectSlug = config.projectSlug;\n this.client = new HttpClient(config.baseUrl ?? DEFAULT_BASE_URL);\n this.subscribers = new SubscribersResource(\n this.client,\n this.apiKey,\n this.projectSlug,\n config.source,\n );\n }\n}\n"],"mappings":"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","names":[]}
|