waitkit 0.3.2 → 0.3.3

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/README.md CHANGED
@@ -55,12 +55,12 @@ function WaitlistForm() {
55
55
 
56
56
  ### `WaitKitConfig`
57
57
 
58
- | Param | Type | Default | Description |
59
- | ------------- | -------- | ------------------------- | ------------------------------ |
60
- | `apiKey` | `string` | — | API key |
61
- | `projectSlug` | `string` | — | Project slug |
62
- | `baseUrl` | `string` | `https://api.waitkit.dev` | API base URL |
63
- | `source` | `string` | `landing-page` | Default source for all signups |
58
+ | Param | Type | Default | Description |
59
+ | ------------- | -------- | --------------------- | ------------------------------ |
60
+ | `apiKey` | `string` | — | API key |
61
+ | `projectSlug` | `string` | — | Project slug |
62
+ | `baseUrl` | `string` | `https://waitkit.dev` | API base URL |
63
+ | `source` | `string` | `landing-page` | Default source for all signups |
64
64
 
65
65
  ### `wk.subscribers.create(options)`
66
66
 
@@ -36,7 +36,7 @@ declare class SubscribersResource {
36
36
  count(projectSlug?: string): Promise<number>;
37
37
  }
38
38
 
39
- declare const DEFAULT_BASE_URL = "https://api.waitkit.dev";
39
+ declare const DEFAULT_BASE_URL = "https://waitkit.dev";
40
40
  declare class WaitKit {
41
41
  subscribers: SubscribersResource;
42
42
  private client;
@@ -36,7 +36,7 @@ declare class SubscribersResource {
36
36
  count(projectSlug?: string): Promise<number>;
37
37
  }
38
38
 
39
- declare const DEFAULT_BASE_URL = "https://api.waitkit.dev";
39
+ declare const DEFAULT_BASE_URL = "https://waitkit.dev";
40
40
  declare class WaitKit {
41
41
  subscribers: SubscribersResource;
42
42
  private client;
package/dist/index.cjs CHANGED
@@ -114,7 +114,7 @@ var SubscribersResource = class {
114
114
  };
115
115
 
116
116
  // src/index.ts
117
- var DEFAULT_BASE_URL = "https://api.waitkit.dev";
117
+ var DEFAULT_BASE_URL = "https://waitkit.dev";
118
118
  var WaitKit = class {
119
119
  subscribers;
120
120
  client;
@@ -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://api.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: { ...options, source: options.source ?? this.defaultSource },\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":[]}
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: { ...options, source: options.source ?? this.defaultSource },\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.d.cts CHANGED
@@ -1 +1 @@
1
- export { D as DEFAULT_BASE_URL, W as WaitKit } from './index-3alZWsam.cjs';
1
+ export { D as DEFAULT_BASE_URL, W as WaitKit } from './index-BinqFLs8.cjs';
package/dist/index.d.ts CHANGED
@@ -1 +1 @@
1
- export { D as DEFAULT_BASE_URL, W as WaitKit } from './index-3alZWsam.js';
1
+ export { D as DEFAULT_BASE_URL, W as WaitKit } from './index-BinqFLs8.js';
package/dist/index.js CHANGED
@@ -87,7 +87,7 @@ var SubscribersResource = class {
87
87
  };
88
88
 
89
89
  // src/index.ts
90
- var DEFAULT_BASE_URL = "https://api.waitkit.dev";
90
+ var DEFAULT_BASE_URL = "https://waitkit.dev";
91
91
  var WaitKit = class {
92
92
  subscribers;
93
93
  client;
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: { ...options, source: options.source ?? this.defaultSource },\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://api.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":";AAEO,IAAM,eAAN,MAAM,sBAAqB,MAAM;AAAA,EACtC,YACE,SACO,YACA,QACP;AACA,UAAM,OAAO;AAHN;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AAAA,EALS;AAAA,EACA;AAAA,EAMT,OAAO,aAAa,KAAkC;AACpD,WAAO,IAAI,cAAa,IAAI,SAAS,IAAI,YAAY,IAAI,MAAM;AAAA,EACjE;AACF;;;ACZO,IAAM,aAAN,MAAiB;AAAA,EACd;AAAA,EAER,YAAY,SAAiB;AAC3B,SAAK,UAAU,QAAQ,QAAQ,QAAQ,EAAE;AAAA,EAC3C;AAAA,EAEA,MAAM,QACJ,QACA,MACA,UAII,CAAC,GACO;AACZ,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAAI,EAAE;AAE5C,QAAI,QAAQ,OAAO;AACjB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxD,YAAI,UAAU,QAAW;AACvB,cAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,MACtC;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAG,QAAQ;AAAA,MACb;AAAA,MACA,MAAM,QAAQ,OAAO,KAAK,UAAU,QAAQ,IAAI,IAAI;AAAA,IACtD,CAAC;AAED,UAAM,OAAuB,MAAM,IAAI,KAAK;AAE5C,QAAI,CAAC,IAAI,MAAM,KAAK,WAAW,SAAS;AACtC,YAAM,MAAM;AACZ,YAAM,aAAa,aAAa,GAAG;AAAA,IACrC;AAEA,WAAQ,KAA4B;AAAA,EACtC;AACF;;;AC5CA,IAAM,iBAAiB;AAEhB,IAAM,sBAAN,MAA0B;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,QACA,QACA,aACA,eACA;AACA,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,SAAK,gBAAgB,iBAAiB;AAAA,EACxC;AAAA,EAEA,IAAY,UAAU;AACpB,WAAO,EAAE,eAAe,UAAU,KAAK,MAAM,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,OAAO,SAA2C;AACtD,UAAM,OAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,iBAAiB,KAAK,WAAW;AAAA,MACjC;AAAA,QACE,SAAS,KAAK;AAAA,QACd,MAAM,EAAE,GAAG,SAAS,QAAQ,QAAQ,UAAU,KAAK,cAAc;AAAA,MACnE;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,aAAuC;AACjD,UAAM,OAAO,eAAe,KAAK;AACjC,UAAM,OAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,iBAAiB,IAAI;AAAA,MACrB,EAAE,SAAS,KAAK,QAAQ;AAAA,IAC1B;AAEA,WAAO,KAAK;AAAA,EACd;AACF;;;ACjDO,IAAM,mBAAmB;AAEzB,IAAM,UAAN,MAAc;AAAA,EACnB;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAAuB;AACjC,SAAK,SAAS,OAAO;AACrB,SAAK,cAAc,OAAO;AAC1B,SAAK,SAAS,IAAI,WAAW,OAAO,WAAW,gBAAgB;AAC/D,SAAK,cAAc,IAAI;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
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: { ...options, source: options.source ?? this.defaultSource },\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":";AAEO,IAAM,eAAN,MAAM,sBAAqB,MAAM;AAAA,EACtC,YACE,SACO,YACA,QACP;AACA,UAAM,OAAO;AAHN;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AAAA,EALS;AAAA,EACA;AAAA,EAMT,OAAO,aAAa,KAAkC;AACpD,WAAO,IAAI,cAAa,IAAI,SAAS,IAAI,YAAY,IAAI,MAAM;AAAA,EACjE;AACF;;;ACZO,IAAM,aAAN,MAAiB;AAAA,EACd;AAAA,EAER,YAAY,SAAiB;AAC3B,SAAK,UAAU,QAAQ,QAAQ,QAAQ,EAAE;AAAA,EAC3C;AAAA,EAEA,MAAM,QACJ,QACA,MACA,UAII,CAAC,GACO;AACZ,UAAM,MAAM,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAAI,EAAE;AAE5C,QAAI,QAAQ,OAAO;AACjB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AACxD,YAAI,UAAU,QAAW;AACvB,cAAI,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG;AAAA,MACtC;AAAA,MACA,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,GAAG,QAAQ;AAAA,MACb;AAAA,MACA,MAAM,QAAQ,OAAO,KAAK,UAAU,QAAQ,IAAI,IAAI;AAAA,IACtD,CAAC;AAED,UAAM,OAAuB,MAAM,IAAI,KAAK;AAE5C,QAAI,CAAC,IAAI,MAAM,KAAK,WAAW,SAAS;AACtC,YAAM,MAAM;AACZ,YAAM,aAAa,aAAa,GAAG;AAAA,IACrC;AAEA,WAAQ,KAA4B;AAAA,EACtC;AACF;;;AC5CA,IAAM,iBAAiB;AAEhB,IAAM,sBAAN,MAA0B;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YACE,QACA,QACA,aACA,eACA;AACA,SAAK,SAAS;AACd,SAAK,SAAS;AACd,SAAK,cAAc;AACnB,SAAK,gBAAgB,iBAAiB;AAAA,EACxC;AAAA,EAEA,IAAY,UAAU;AACpB,WAAO,EAAE,eAAe,UAAU,KAAK,MAAM,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,OAAO,SAA2C;AACtD,UAAM,OAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,iBAAiB,KAAK,WAAW;AAAA,MACjC;AAAA,QACE,SAAS,KAAK;AAAA,QACd,MAAM,EAAE,GAAG,SAAS,QAAQ,QAAQ,UAAU,KAAK,cAAc;AAAA,MACnE;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,KAAK;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,aAAuC;AACjD,UAAM,OAAO,eAAe,KAAK;AACjC,UAAM,OAAO,MAAM,KAAK,OAAO;AAAA,MAC7B;AAAA,MACA,iBAAiB,IAAI;AAAA,MACrB,EAAE,SAAS,KAAK,QAAQ;AAAA,IAC1B;AAEA,WAAO,KAAK;AAAA,EACd;AACF;;;ACjDO,IAAM,mBAAmB;AAEzB,IAAM,UAAN,MAAc;AAAA,EACnB;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAAuB;AACjC,SAAK,SAAS,OAAO;AACrB,SAAK,cAAc,OAAO;AAC1B,SAAK,SAAS,IAAI,WAAW,OAAO,WAAW,gBAAgB;AAC/D,SAAK,cAAc,IAAI;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
package/dist/react.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { J as JoinOptions, a as JoinResult, W as WaitKit } from './index-3alZWsam.cjs';
1
+ import { J as JoinOptions, a as JoinResult, W as WaitKit } from './index-BinqFLs8.cjs';
2
2
 
3
3
  interface UseWaitlistReturn {
4
4
  join: (data: JoinOptions) => Promise<JoinResult>;
package/dist/react.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { J as JoinOptions, a as JoinResult, W as WaitKit } from './index-3alZWsam.js';
1
+ import { J as JoinOptions, a as JoinResult, W as WaitKit } from './index-BinqFLs8.js';
2
2
 
3
3
  interface UseWaitlistReturn {
4
4
  join: (data: JoinOptions) => Promise<JoinResult>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "waitkit",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "WaitKit SDK — waitlist infrastructure for your app",
5
5
  "keywords": [
6
6
  "waitkit",