@pagesolver/sdk 1.4.0 → 2.0.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/README.md CHANGED
@@ -1,158 +1,64 @@
1
- # PageSolver SDK
1
+ # `@pagesolver/sdk`
2
2
 
3
- Official TypeScript/JavaScript SDK for the PageSolver API.
3
+ Typed TypeScript SDK for the public PageSolver `websites` API.
4
4
 
5
- ## Installation
5
+ This package is generated from:
6
+
7
+ - [infra/supabase/functions/websites/openapi.json](/Users/zekepari/Documents/GitHub/pagesolver/infra/supabase/functions/websites/openapi.json)
8
+
9
+ ## Install
6
10
 
7
11
  ```bash
8
12
  npm install @pagesolver/sdk
9
- # or
10
- bun add @pagesolver/sdk
11
- # or
12
- yarn add @pagesolver/sdk
13
13
  ```
14
14
 
15
- ## Quick Start
16
-
17
- ```typescript
18
- import { PageSolverClient } from "@pagesolver/sdk";
19
-
20
- const client = new PageSolverClient("your-business-key");
21
-
22
- // Get comparisons - returns array directly
23
- const comparisons = await client.getComparisons();
24
- console.log(comparisons); // ComparisonImage[]
15
+ ## Usage
25
16
 
26
- // Get showcases - returns array directly
27
- const showcases = await client.getShowcases();
28
- console.log(showcases); // ShowcaseImage[]
17
+ ```ts
18
+ import { createPageSolverSdk } from "@pagesolver/sdk";
29
19
 
30
- // Google Business Profile reviews
31
- const reviews = await client.getGoogleReviews();
32
-
33
- // Check which modules are enabled for this business
34
- const modules = await client.getModules();
35
- console.log(modules); // e.g. ["comparison_gallery", "google_review_display", ...]
20
+ const sdk = createPageSolverSdk({
21
+ baseUrl: "https://your-project.supabase.co/functions/v1/websites",
22
+ businessKey: process.env.PAGESOLVER_BUSINESS_KEY!,
23
+ });
36
24
 
37
- // Latest social posts
38
- const instagram = await client.getInstagramPosts();
39
- const facebook = await client.getFacebookPosts();
25
+ const modules = await sdk.getModules();
26
+ const showcases = await sdk.getShowcases({ collection: "Bathrooms" });
27
+ ```
40
28
 
41
- // Smart contact submissions (any flat JSON payload works)
42
- const contact = await client.contact({
43
- name: "John Doe",
44
- email: "john@example.com",
45
- service: "Detailing",
46
- requested_date: "2025-03-10",
47
- });
29
+ ## Regenerate
48
30
 
49
- console.log(contact.success, contact.contactId);
31
+ ```bash
32
+ bun run sdk:generate
50
33
  ```
51
34
 
52
- ## API Reference
35
+ The SDK package version is synced from:
36
+
37
+ - [infra/supabase/functions/websites/openapi.json](/Users/zekepari/Documents/GitHub/pagesolver/infra/supabase/functions/websites/openapi.json)
53
38
 
54
- ### PageSolverClient
39
+ So when the OpenAPI `info.version` changes, the package version should change with it.
55
40
 
56
- #### Constructor
41
+ ## Verify
57
42
 
58
- ```typescript
59
- new PageSolverClient(businessKey: string)
43
+ ```bash
44
+ bun run sdk:check
60
45
  ```
61
46
 
62
- - `businessKey`: Your PageSolver business API key
63
-
64
- #### Methods
65
-
66
- | Method | Description | Return Type |
67
- | --- | --- | --- |
68
- | `getComparisons()` | Fetch before/after comparison images | `ComparisonImage[]` |
69
- | `getShowcases()` | Fetch showcase gallery images | `ShowcaseImage[]` |
70
- | `getGoogleReviews()` | Fetch Google Business Profile reviews + metadata | `GoogleReviewsResponse` |
71
- | `getModules()` | Get list of activated modules for the business | `Module[]` |
72
- | `getInstagramPosts()` | Fetch recent Instagram posts (requires connected account) | `SocialMediaResponse` |
73
- | `getFacebookPosts()` | Fetch recent Facebook posts (requires connected account) | `SocialMediaResponse` |
74
- | `contact(data)` | Submit a contact form payload (flat JSON object) | `ContactResponse` |
75
-
76
- All methods throw an `Error` when the API responds with a non-2xx status, so wrap calls in `try/catch` if you want to handle failures gracefully.
77
-
78
- ```typescript
79
- try {
80
- const comparisons = await client.getComparisons();
81
- console.log(`Found ${comparisons.length} comparisons`);
82
- } catch (error) {
83
- console.error("Failed to load comparisons", error);
84
- }
85
-
86
- const contact = await client.contact({
87
- name: "Fresh & Clean",
88
- phone: "+1 555-0100",
89
- message: "Need a quote",
90
- source: "website-landing",
91
- budget: 250,
92
- });
47
+ ## Build
93
48
 
94
- console.log(contact.message); // "Contact submission received successfully"
49
+ ```bash
50
+ bun run sdk:build
95
51
  ```
96
52
 
97
- ## Types
98
-
99
- ### Notable Types
100
-
101
- ```typescript
102
- interface ComparisonImage {
103
- id: string;
104
- business_id: number;
105
- before_url: string;
106
- after_url: string;
107
- title: string;
108
- description: string | null;
109
- updated_at: string;
110
- created_at: string;
111
- }
112
-
113
- interface ShowcaseImage {
114
- id: string;
115
- business_id: number;
116
- image_url: string[];
117
- title: string;
118
- description: string | null;
119
- updated_at: string;
120
- created_at: string;
121
- }
122
-
123
- type ContactData = Record<string, unknown>; // any flat key/value payload
124
-
125
- interface ContactResponse {
126
- success: boolean;
127
- message: string;
128
- contactId: string | null;
129
- }
130
-
131
- interface GoogleReviewsResponse {
132
- business: BusinessInfo; // includes id, name, optional website/phone
133
- rating: number | null;
134
- totalReviews: number;
135
- reviews: GoogleReview[];
136
- }
137
-
138
- interface SocialMediaResponse {
139
- business: BusinessInfo;
140
- posts: FacebookPost[] | InstagramPost[];
141
- platform: "facebook" | "instagram";
142
- }
143
-
144
- // Module types - used for feature detection
145
- type Module =
146
- | "comparison_gallery"
147
- | "showcase_gallery"
148
- | "smart_contact"
149
- | "google_review_display"
150
- | "google_review_requests"
151
- | "facebook_feed_sync"
152
- | "instagram_feed_sync"
153
- | "xero_payment_notifications";
53
+ ## Publish
54
+
55
+ ```bash
56
+ bun run sdk:publish
154
57
  ```
155
58
 
156
- ## License
59
+ For prereleases or alternate npm tags:
157
60
 
158
- MIT
61
+ ```bash
62
+ cd packages/sdk
63
+ bun publish --access public --tag next
64
+ ```
@@ -0,0 +1,427 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export interface paths {
6
+ "/v2/modules": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ /** List enabled website modules */
14
+ get: {
15
+ parameters: {
16
+ query?: never;
17
+ header?: never;
18
+ path?: never;
19
+ cookie?: never;
20
+ };
21
+ requestBody?: never;
22
+ responses: {
23
+ /** @description Enabled modules */
24
+ 200: {
25
+ headers: {
26
+ [name: string]: unknown;
27
+ };
28
+ content: {
29
+ "application/json": {
30
+ modules: string[];
31
+ };
32
+ };
33
+ };
34
+ /** @description Missing business key */
35
+ 400: {
36
+ headers: {
37
+ [name: string]: unknown;
38
+ };
39
+ content: {
40
+ "application/json": components["schemas"]["ErrorResponse"];
41
+ };
42
+ };
43
+ /** @description Invalid business key */
44
+ 401: {
45
+ headers: {
46
+ [name: string]: unknown;
47
+ };
48
+ content: {
49
+ "application/json": components["schemas"]["ErrorResponse"];
50
+ };
51
+ };
52
+ };
53
+ };
54
+ put?: never;
55
+ post?: never;
56
+ delete?: never;
57
+ options?: never;
58
+ head?: never;
59
+ patch?: never;
60
+ trace?: never;
61
+ };
62
+ "/v2/showcases": {
63
+ parameters: {
64
+ query?: never;
65
+ header?: never;
66
+ path?: never;
67
+ cookie?: never;
68
+ };
69
+ /** List showcase items */
70
+ get: {
71
+ parameters: {
72
+ query?: {
73
+ /** @description Optional showcase collection name filter. */
74
+ collection?: string;
75
+ };
76
+ header?: never;
77
+ path?: never;
78
+ cookie?: never;
79
+ };
80
+ requestBody?: never;
81
+ responses: {
82
+ /** @description Showcases and available collections */
83
+ 200: {
84
+ headers: {
85
+ [name: string]: unknown;
86
+ };
87
+ content: {
88
+ "application/json": {
89
+ showcases: components["schemas"]["Showcase"][];
90
+ collections: components["schemas"]["Collection"][];
91
+ };
92
+ };
93
+ };
94
+ /** @description Showcase module is not enabled */
95
+ 403: {
96
+ headers: {
97
+ [name: string]: unknown;
98
+ };
99
+ content: {
100
+ "application/json": components["schemas"]["ErrorResponse"];
101
+ };
102
+ };
103
+ };
104
+ };
105
+ put?: never;
106
+ post?: never;
107
+ delete?: never;
108
+ options?: never;
109
+ head?: never;
110
+ patch?: never;
111
+ trace?: never;
112
+ };
113
+ "/v2/comparisons": {
114
+ parameters: {
115
+ query?: never;
116
+ header?: never;
117
+ path?: never;
118
+ cookie?: never;
119
+ };
120
+ /** List comparison items */
121
+ get: {
122
+ parameters: {
123
+ query?: {
124
+ /** @description Optional comparison collection name filter. */
125
+ collection?: string;
126
+ };
127
+ header?: never;
128
+ path?: never;
129
+ cookie?: never;
130
+ };
131
+ requestBody?: never;
132
+ responses: {
133
+ /** @description Comparisons and available collections */
134
+ 200: {
135
+ headers: {
136
+ [name: string]: unknown;
137
+ };
138
+ content: {
139
+ "application/json": {
140
+ comparisons: components["schemas"]["Comparison"][];
141
+ collections: components["schemas"]["Collection"][];
142
+ };
143
+ };
144
+ };
145
+ /** @description Comparison module is not enabled */
146
+ 403: {
147
+ headers: {
148
+ [name: string]: unknown;
149
+ };
150
+ content: {
151
+ "application/json": components["schemas"]["ErrorResponse"];
152
+ };
153
+ };
154
+ };
155
+ };
156
+ put?: never;
157
+ post?: never;
158
+ delete?: never;
159
+ options?: never;
160
+ head?: never;
161
+ patch?: never;
162
+ trace?: never;
163
+ };
164
+ "/v2/contact": {
165
+ parameters: {
166
+ query?: never;
167
+ header?: never;
168
+ path?: never;
169
+ cookie?: never;
170
+ };
171
+ get?: never;
172
+ put?: never;
173
+ /** Submit a website contact payload */
174
+ post: {
175
+ parameters: {
176
+ query?: never;
177
+ header?: never;
178
+ path?: never;
179
+ cookie?: never;
180
+ };
181
+ requestBody: {
182
+ content: {
183
+ "application/json": components["schemas"]["ContactPayload"];
184
+ };
185
+ };
186
+ responses: {
187
+ /** @description Contact submission accepted */
188
+ 200: {
189
+ headers: {
190
+ [name: string]: unknown;
191
+ };
192
+ content: {
193
+ "application/json": components["schemas"]["ContactResponse"];
194
+ };
195
+ };
196
+ /** @description Invalid form payload or missing business key */
197
+ 400: {
198
+ headers: {
199
+ [name: string]: unknown;
200
+ };
201
+ content: {
202
+ "application/json": components["schemas"]["ErrorResponse"];
203
+ };
204
+ };
205
+ /** @description Contact module is not enabled */
206
+ 403: {
207
+ headers: {
208
+ [name: string]: unknown;
209
+ };
210
+ content: {
211
+ "application/json": components["schemas"]["ErrorResponse"];
212
+ };
213
+ };
214
+ };
215
+ };
216
+ delete?: never;
217
+ options?: never;
218
+ head?: never;
219
+ patch?: never;
220
+ trace?: never;
221
+ };
222
+ "/v2/reviews": {
223
+ parameters: {
224
+ query?: never;
225
+ header?: never;
226
+ path?: never;
227
+ cookie?: never;
228
+ };
229
+ /** Fetch reviews for the website */
230
+ get: {
231
+ parameters: {
232
+ query?: never;
233
+ header?: never;
234
+ path?: never;
235
+ cookie?: never;
236
+ };
237
+ requestBody?: never;
238
+ responses: {
239
+ /** @description Google reviews for the website */
240
+ 200: {
241
+ headers: {
242
+ [name: string]: unknown;
243
+ };
244
+ content: {
245
+ "application/json": {
246
+ website: components["schemas"]["WebsiteSummary"];
247
+ rating: number | null;
248
+ userRatingCount: number;
249
+ reviews: components["schemas"]["GoogleReview"][];
250
+ };
251
+ };
252
+ };
253
+ /** @description Google review display is not enabled or OAuth is incomplete */
254
+ 403: {
255
+ headers: {
256
+ [name: string]: unknown;
257
+ };
258
+ content: {
259
+ "application/json": components["schemas"]["ErrorResponse"];
260
+ };
261
+ };
262
+ /** @description Google Business Profile is not configured */
263
+ 404: {
264
+ headers: {
265
+ [name: string]: unknown;
266
+ };
267
+ content: {
268
+ "application/json": components["schemas"]["ErrorResponse"];
269
+ };
270
+ };
271
+ };
272
+ };
273
+ put?: never;
274
+ post?: never;
275
+ delete?: never;
276
+ options?: never;
277
+ head?: never;
278
+ patch?: never;
279
+ trace?: never;
280
+ };
281
+ "/v2/facebook": {
282
+ parameters: {
283
+ query?: never;
284
+ header?: never;
285
+ path?: never;
286
+ cookie?: never;
287
+ };
288
+ /** Fetch Facebook content for the website */
289
+ get: {
290
+ parameters: {
291
+ query?: never;
292
+ header?: never;
293
+ path?: never;
294
+ cookie?: never;
295
+ };
296
+ requestBody?: never;
297
+ responses: {
298
+ /** @description Facebook posts for the website */
299
+ 200: {
300
+ headers: {
301
+ [name: string]: unknown;
302
+ };
303
+ content: {
304
+ "application/json": {
305
+ website: components["schemas"]["WebsiteSummary"];
306
+ /** @enum {string} */
307
+ platform: "facebook";
308
+ posts: components["schemas"]["FacebookPost"][];
309
+ };
310
+ };
311
+ };
312
+ /** @description Facebook feed module is not enabled */
313
+ 403: {
314
+ headers: {
315
+ [name: string]: unknown;
316
+ };
317
+ content: {
318
+ "application/json": components["schemas"]["ErrorResponse"];
319
+ };
320
+ };
321
+ /** @description Facebook is not connected */
322
+ 404: {
323
+ headers: {
324
+ [name: string]: unknown;
325
+ };
326
+ content: {
327
+ "application/json": components["schemas"]["ErrorResponse"];
328
+ };
329
+ };
330
+ };
331
+ };
332
+ put?: never;
333
+ post?: never;
334
+ delete?: never;
335
+ options?: never;
336
+ head?: never;
337
+ patch?: never;
338
+ trace?: never;
339
+ };
340
+ }
341
+ export type webhooks = Record<string, never>;
342
+ export interface components {
343
+ schemas: {
344
+ Collection: {
345
+ /** Format: uuid */
346
+ id: string;
347
+ name: string;
348
+ };
349
+ Showcase: {
350
+ /** Format: uuid */
351
+ id: string;
352
+ business_id: number;
353
+ title: string;
354
+ description?: string | null;
355
+ image_url: string[];
356
+ /** Format: uuid */
357
+ collection_id?: string | null;
358
+ /** Format: date-time */
359
+ created_at: string;
360
+ /** Format: date-time */
361
+ updated_at: string;
362
+ collection?: components["schemas"]["Collection"] | null;
363
+ };
364
+ Comparison: {
365
+ /** Format: uuid */
366
+ id: string;
367
+ business_id: number;
368
+ title: string;
369
+ description?: string | null;
370
+ before_url: string;
371
+ after_url: string;
372
+ /** Format: uuid */
373
+ collection_id?: string | null;
374
+ /** Format: date-time */
375
+ created_at: string;
376
+ /** Format: date-time */
377
+ updated_at: string;
378
+ collection?: components["schemas"]["Collection"] | null;
379
+ };
380
+ WebsiteSummary: {
381
+ id: string;
382
+ name: string;
383
+ url?: string | null;
384
+ };
385
+ GoogleReview: {
386
+ rating: number;
387
+ author: string;
388
+ authorPhoto?: string | null;
389
+ text: string;
390
+ publishTime: string;
391
+ relativePublishTime: string;
392
+ };
393
+ FacebookPost: {
394
+ id: string;
395
+ message?: string | null;
396
+ story?: string | null;
397
+ full_picture?: string | null;
398
+ permalink_url: string;
399
+ created_time: string;
400
+ type?: string | null;
401
+ status_type?: string | null;
402
+ is_published?: boolean | null;
403
+ };
404
+ /** @description Arbitrary website contact payload. Values are normalized to strings before storage. */
405
+ ContactPayload: {
406
+ [key: string]: unknown;
407
+ };
408
+ ContactResponse: {
409
+ success: boolean;
410
+ message: string;
411
+ /** Format: uuid */
412
+ contactId: string | null;
413
+ };
414
+ ErrorResponse: {
415
+ error: string;
416
+ details?: unknown;
417
+ };
418
+ };
419
+ responses: never;
420
+ parameters: never;
421
+ requestBodies: never;
422
+ headers: never;
423
+ pathItems: never;
424
+ }
425
+ export type $defs = Record<string, never>;
426
+ export type operations = Record<string, never>;
427
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/generated/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export {};
package/dist/index.d.ts CHANGED
@@ -1,16 +1,68 @@
1
- import type { ComparisonImage, ContactData, ContactResponse, GoogleReviewsResponse, Module, ShowcaseImage, SocialMediaResponse } from "./types";
2
- export declare class PageSolverClient {
3
- private baseUrl;
4
- private businessKey;
5
- constructor(businessKey: string);
1
+ import type { components, paths } from "./generated/schema.js";
2
+ type HttpMethod = "get" | "post";
3
+ type Operation<Path extends keyof paths, Method extends keyof paths[Path] & HttpMethod> = NonNullable<paths[Path][Method]>;
4
+ type JsonRequestBody<Path extends keyof paths, Method extends keyof paths[Path] & HttpMethod> = Operation<Path, Method> extends {
5
+ requestBody: {
6
+ content: {
7
+ "application/json": infer Body;
8
+ };
9
+ };
10
+ } ? Body : never;
11
+ type JsonResponse<Path extends keyof paths, Method extends keyof paths[Path] & HttpMethod, Status extends keyof Operation<Path, Method>["responses"]> = Operation<Path, Method>["responses"][Status] extends {
12
+ content: {
13
+ "application/json": infer Body;
14
+ };
15
+ } ? Body : never;
16
+ export type PageSolverApiPaths = paths;
17
+ export type PageSolverApiComponents = components;
18
+ export type PageSolverApiErrorResponse = components["schemas"]["ErrorResponse"];
19
+ export type ContactPayload = JsonRequestBody<"/v2/contact", "post">;
20
+ export type ContactResponse = JsonResponse<"/v2/contact", "post", 200>;
21
+ export type ModulesResponse = JsonResponse<"/v2/modules", "get", 200>;
22
+ export type ShowcasesResponse = JsonResponse<"/v2/showcases", "get", 200>;
23
+ export type ComparisonsResponse = JsonResponse<"/v2/comparisons", "get", 200>;
24
+ export type ReviewsResponse = JsonResponse<"/v2/reviews", "get", 200>;
25
+ export type FacebookResponse = JsonResponse<"/v2/facebook", "get", 200>;
26
+ export interface PageSolverSdkConfig {
27
+ baseUrl: string;
28
+ businessKey: string;
29
+ fetch?: typeof globalThis.fetch;
30
+ headers?: HeadersInit;
31
+ }
32
+ export interface RequestOptions {
33
+ headers?: HeadersInit;
34
+ signal?: AbortSignal;
35
+ }
36
+ export interface CollectionFilterOptions extends RequestOptions {
37
+ collection?: string;
38
+ }
39
+ export interface PageSolverApiErrorOptions<TData> {
40
+ status: number;
41
+ data: TData | null;
42
+ response: Response;
43
+ url: string;
44
+ }
45
+ export declare class PageSolverApiError<TData = PageSolverApiErrorResponse> extends Error {
46
+ readonly status: number;
47
+ readonly data: TData | null;
48
+ readonly response: Response;
49
+ readonly url: string;
50
+ constructor(message: string, options: PageSolverApiErrorOptions<TData>);
51
+ }
52
+ export declare class PageSolverSdk {
53
+ private readonly baseUrl;
54
+ private readonly businessKey;
55
+ private readonly fetchImpl;
56
+ private readonly defaultHeaders?;
57
+ constructor(config: PageSolverSdkConfig);
58
+ getModules(options?: RequestOptions): Promise<ModulesResponse>;
59
+ getShowcases(options?: CollectionFilterOptions): Promise<ShowcasesResponse>;
60
+ getComparisons(options?: CollectionFilterOptions): Promise<ComparisonsResponse>;
61
+ getReviews(options?: RequestOptions): Promise<ReviewsResponse>;
62
+ getFacebook(options?: RequestOptions): Promise<FacebookResponse>;
63
+ submitContact(payload: ContactPayload, options?: RequestOptions): Promise<ContactResponse>;
6
64
  private request;
7
- getComparisons(): Promise<ComparisonImage[]>;
8
- getShowcases(): Promise<ShowcaseImage[]>;
9
- getGoogleReviews(): Promise<GoogleReviewsResponse>;
10
- getModules(): Promise<Module[]>;
11
- getInstagramPosts(): Promise<SocialMediaResponse>;
12
- getFacebookPosts(): Promise<SocialMediaResponse>;
13
- contact(data: ContactData): Promise<ContactResponse>;
14
65
  }
15
- export type { ComparisonImage, ComparisonsResponse, ShowcaseImage, ShowcasesResponse, ContactData, ContactResponse, GoogleReview, GoogleReviewsResponse, FacebookPost, InstagramPost, SocialMediaResponse, BusinessInfo, Module, ModulesResponse, } from "./types";
66
+ export declare function createPageSolverSdk(config: PageSolverSdkConfig): PageSolverSdk;
67
+ export type { components, paths } from "./generated/schema.js";
16
68
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAEf,WAAW,EACX,eAAe,EAGf,qBAAqB,EAErB,MAAM,EAEN,aAAa,EAEb,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;YAIjB,OAAO;IA0Cf,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAQ5C,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAQxC,gBAAgB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAOlD,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAM/B,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAOjD,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAKhD,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;CAM3D;AAGD,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,MAAM,EACN,eAAe,GAChB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,3 +1,146 @@
1
- class B{baseUrl="https://pagesolver.com/api/v1";businessKey;constructor(j){this.businessKey=j}async request(j,w={}){try{let q=`${this.baseUrl}${j}`,z={"Content-Type":"application/json","x-business-key":this.businessKey,...w.headers},k=await fetch(q,{...w,headers:z}),v;if(k.headers.get("Content-Type")?.includes("application/json"))v=await k.json();else v=await k.text();if(!k.ok){let A=v?.error||"An unknown error occurred";throw Error(`API Error (${k.status}): ${A}`)}return v}catch(q){if(q instanceof Error)throw q;throw Error("Network error occurred")}}async getComparisons(){return(await this.request("/business/comparisons")).comparisons}async getShowcases(){return(await this.request("/business/showcases")).showcases}async getGoogleReviews(){return await this.request("/business/google/reviews")}async getModules(){return(await this.request("/business/modules")).modules}async getInstagramPosts(){return await this.request("/business/social/instagram")}async getFacebookPosts(){return await this.request("/business/social/facebook")}async contact(j){return await this.request("/business/contact",{method:"POST",body:JSON.stringify(j)})}}export{B as PageSolverClient};
2
-
3
- //# debugId=FD76B09BB023C76364756E2164756E21
1
+ export class PageSolverApiError extends Error {
2
+ status;
3
+ data;
4
+ response;
5
+ url;
6
+ constructor(message, options) {
7
+ super(message);
8
+ this.name = "PageSolverApiError";
9
+ this.status = options.status;
10
+ this.data = options.data;
11
+ this.response = options.response;
12
+ this.url = options.url;
13
+ }
14
+ }
15
+ export class PageSolverSdk {
16
+ baseUrl;
17
+ businessKey;
18
+ fetchImpl;
19
+ defaultHeaders;
20
+ constructor(config) {
21
+ if (!config.baseUrl) {
22
+ throw new Error("PageSolver SDK requires a baseUrl.");
23
+ }
24
+ if (!config.businessKey) {
25
+ throw new Error("PageSolver SDK requires a businessKey.");
26
+ }
27
+ if (!config.fetch && typeof globalThis.fetch !== "function") {
28
+ throw new Error("PageSolver SDK requires a fetch implementation in this runtime.");
29
+ }
30
+ this.baseUrl = normalizeBaseUrl(config.baseUrl);
31
+ this.businessKey = config.businessKey;
32
+ this.fetchImpl = config.fetch ?? globalThis.fetch;
33
+ this.defaultHeaders = config.headers;
34
+ }
35
+ getModules(options) {
36
+ return this.request("/v2/modules", {
37
+ method: "GET",
38
+ ...options,
39
+ });
40
+ }
41
+ getShowcases(options = {}) {
42
+ return this.request("/v2/showcases", {
43
+ method: "GET",
44
+ query: options.collection ? { collection: options.collection } : undefined,
45
+ headers: options.headers,
46
+ signal: options.signal,
47
+ });
48
+ }
49
+ getComparisons(options = {}) {
50
+ return this.request("/v2/comparisons", {
51
+ method: "GET",
52
+ query: options.collection ? { collection: options.collection } : undefined,
53
+ headers: options.headers,
54
+ signal: options.signal,
55
+ });
56
+ }
57
+ getReviews(options) {
58
+ return this.request("/v2/reviews", {
59
+ method: "GET",
60
+ ...options,
61
+ });
62
+ }
63
+ getFacebook(options) {
64
+ return this.request("/v2/facebook", {
65
+ method: "GET",
66
+ ...options,
67
+ });
68
+ }
69
+ submitContact(payload, options) {
70
+ return this.request("/v2/contact", {
71
+ method: "POST",
72
+ body: payload,
73
+ ...options,
74
+ });
75
+ }
76
+ async request(path, options) {
77
+ const url = buildRequestUrl(this.baseUrl, path, options.query);
78
+ const headers = new Headers(this.defaultHeaders);
79
+ headers.set("X-Business-Key", this.businessKey);
80
+ headers.set("Accept", "application/json");
81
+ if (options.headers) {
82
+ mergeHeaders(headers, options.headers);
83
+ }
84
+ let body;
85
+ if (options.body !== undefined) {
86
+ headers.set("Content-Type", "application/json");
87
+ body = JSON.stringify(options.body);
88
+ }
89
+ const response = await this.fetchImpl(url.toString(), {
90
+ method: options.method,
91
+ headers,
92
+ body,
93
+ signal: options.signal,
94
+ });
95
+ const payload = await parseJsonResponse(response);
96
+ if (!response.ok) {
97
+ throw new PageSolverApiError(getErrorMessage(payload, response.status), {
98
+ status: response.status,
99
+ data: payload,
100
+ response,
101
+ url: url.toString(),
102
+ });
103
+ }
104
+ return payload;
105
+ }
106
+ }
107
+ export function createPageSolverSdk(config) {
108
+ return new PageSolverSdk(config);
109
+ }
110
+ function normalizeBaseUrl(baseUrl) {
111
+ return baseUrl.replace(/\/+$/, "");
112
+ }
113
+ function buildRequestUrl(baseUrl, path, query) {
114
+ const url = new URL(path.replace(/^\/+/, ""), `${baseUrl}/`);
115
+ if (!query) {
116
+ return url;
117
+ }
118
+ for (const [key, value] of Object.entries(query)) {
119
+ if (value === null || value === undefined) {
120
+ continue;
121
+ }
122
+ url.searchParams.set(key, String(value));
123
+ }
124
+ return url;
125
+ }
126
+ function mergeHeaders(target, source) {
127
+ new Headers(source).forEach((value, key) => {
128
+ target.set(key, value);
129
+ });
130
+ }
131
+ async function parseJsonResponse(response) {
132
+ const contentType = response.headers.get("content-type") ?? "";
133
+ if (!contentType.includes("application/json")) {
134
+ return null;
135
+ }
136
+ return response.json();
137
+ }
138
+ function getErrorMessage(payload, status) {
139
+ if (payload &&
140
+ typeof payload === "object" &&
141
+ "error" in payload &&
142
+ typeof payload.error === "string") {
143
+ return payload.error;
144
+ }
145
+ return `PageSolver request failed with status ${status}.`;
146
+ }
package/package.json CHANGED
@@ -1,61 +1,57 @@
1
1
  {
2
2
  "name": "@pagesolver/sdk",
3
- "version": "1.4.0",
4
- "description": "Official SDK for PageSolver API",
5
- "main": "dist/index.js",
6
- "module": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "import": "./dist/index.js",
11
- "require": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
- }
3
+ "version": "2.0.0",
4
+ "description": "Typed TypeScript SDK for the public PageSolver websites API.",
5
+ "author": {
6
+ "name": "Prompt Solutions"
14
7
  },
15
- "files": [
16
- "dist"
17
- ],
18
- "scripts": {
19
- "build": "bun build src/index.ts --outdir dist --target node --minify --sourcemap=external && bun run build:types",
20
- "build:types": "bunx tsc --project tsconfig.build.json",
21
- "dev": "bun --watch src/index.ts",
22
- "test": "bun test",
23
- "lint": "bunx @biomejs/biome check src",
24
- "lint:fix": "bunx @biomejs/biome check --apply src",
25
- "type-check": "bunx tsc --noEmit",
26
- "prepare": "bun run build",
27
- "prepublishOnly": "bun run lint && bun run type-check && bun run test && bun run build",
28
- "version:patch": "npm version patch",
29
- "version:minor": "npm version minor",
30
- "version:major": "npm version major"
8
+ "license": "MIT",
9
+ "type": "module",
10
+ "sideEffects": false,
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/zekepari/pagesolver.git",
14
+ "directory": "packages/sdk"
15
+ },
16
+ "homepage": "https://pagesolver.com",
17
+ "bugs": {
18
+ "url": "https://github.com/zekepari/pagesolver/issues"
31
19
  },
32
20
  "keywords": [
33
21
  "pagesolver",
34
- "api",
35
22
  "sdk",
36
23
  "typescript",
37
- "web-development"
24
+ "openapi",
25
+ "supabase"
38
26
  ],
39
- "author": "PageSolver Team",
40
- "license": "MIT",
41
- "repository": {
42
- "type": "git",
43
- "url": "git+https://github.com/pagesolver/pagesolver-sdk.git"
44
- },
45
- "bugs": {
46
- "url": "https://github.com/pagesolver/pagesolver-sdk/issues"
27
+ "files": [
28
+ "dist",
29
+ "README.md"
30
+ ],
31
+ "main": "./dist/index.js",
32
+ "types": "./dist/index.d.ts",
33
+ "exports": {
34
+ ".": {
35
+ "types": "./dist/index.d.ts",
36
+ "import": "./dist/index.js"
37
+ },
38
+ "./generated/schema": {
39
+ "types": "./dist/generated/schema.d.ts",
40
+ "import": "./dist/generated/schema.js"
41
+ }
47
42
  },
48
- "homepage": "https://github.com/pagesolver/pagesolver-sdk#readme",
49
- "devDependencies": {
50
- "@biomejs/biome": "^1.8.3",
51
- "@types/bun": "latest",
52
- "typescript": "^5.5.2"
43
+ "publishConfig": {
44
+ "access": "public"
53
45
  },
54
- "peerDependencies": {
55
- "typescript": ">=4.0.0"
46
+ "scripts": {
47
+ "generate": "openapi-typescript ../../infra/supabase/functions/websites/openapi.json -o ./src/generated/schema.ts",
48
+ "build:dist": "tsc --project tsconfig.build.json",
49
+ "build": "bun run --cwd ../.. sdk:sync-version && bun run generate && bun run build:dist",
50
+ "typecheck": "bun run --cwd ../.. sdk:sync-version && bun run generate && tsc --project tsconfig.build.json --noEmit",
51
+ "publish:npm": "bun publish --access public",
52
+ "prepublishOnly": "bun run build"
56
53
  },
57
- "engines": {
58
- "node": ">=18.0.0",
59
- "bun": ">=1.0.0"
54
+ "devDependencies": {
55
+ "typescript": "^5"
60
56
  }
61
57
  }
package/dist/index.js.map DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/index.ts"],
4
- "sourcesContent": [
5
- "// Import all types from the types file\nimport type {\n ComparisonImage,\n ComparisonsResponse,\n ContactData,\n ContactResponse,\n FacebookPost,\n GoogleReview,\n GoogleReviewsResponse,\n InstagramPost,\n Module,\n ModulesResponse,\n ShowcaseImage,\n ShowcasesResponse,\n SocialMediaResponse,\n} from \"./types\";\n\nexport class PageSolverClient {\n private baseUrl = \"https://pagesolver.com/api/v1\";\n private businessKey: string;\n\n constructor(businessKey: string) {\n this.businessKey = businessKey;\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {}\n ): Promise<T> {\n try {\n const url = `${this.baseUrl}${endpoint}`;\n\n const headers = {\n \"Content-Type\": \"application/json\",\n \"x-business-key\": this.businessKey,\n ...options.headers,\n };\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n let data: unknown;\n const contentType = response.headers.get(\"Content-Type\");\n if (contentType?.includes(\"application/json\")) {\n data = await response.json();\n } else {\n data = await response.text();\n }\n\n if (!response.ok) {\n const errorMessage =\n (data as { error?: string })?.error || \"An unknown error occurred\";\n throw new Error(`API Error (${response.status}): ${errorMessage}`);\n }\n\n return data as T;\n } catch (error) {\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(\"Network error occurred\");\n }\n }\n\n // Comparison Images\n async getComparisons(): Promise<ComparisonImage[]> {\n const response = await this.request<ComparisonsResponse>(\n \"/business/comparisons\"\n );\n return response.comparisons;\n }\n\n // Showcase Images\n async getShowcases(): Promise<ShowcaseImage[]> {\n const response = await this.request<ShowcasesResponse>(\n \"/business/showcases\"\n );\n return response.showcases;\n }\n\n // Google Reviews\n async getGoogleReviews(): Promise<GoogleReviewsResponse> {\n return await this.request<GoogleReviewsResponse>(\n \"/business/google/reviews\"\n );\n }\n\n // Modules - Get all activated modules for the business\n async getModules(): Promise<Module[]> {\n const response = await this.request<ModulesResponse>(\"/business/modules\");\n return response.modules;\n }\n\n // Social Media - Instagram\n async getInstagramPosts(): Promise<SocialMediaResponse> {\n return await this.request<SocialMediaResponse>(\n \"/business/social/instagram\"\n );\n }\n\n // Social Media - Facebook\n async getFacebookPosts(): Promise<SocialMediaResponse> {\n return await this.request<SocialMediaResponse>(\"/business/social/facebook\");\n }\n\n // Contact\n async contact(data: ContactData): Promise<ContactResponse> {\n return await this.request<ContactResponse>(\"/business/contact\", {\n method: \"POST\",\n body: JSON.stringify(data),\n });\n }\n}\n\n// Re-export all types for consumers\nexport type {\n ComparisonImage,\n ComparisonsResponse,\n ShowcaseImage,\n ShowcasesResponse,\n ContactData,\n ContactResponse,\n GoogleReview,\n GoogleReviewsResponse,\n FacebookPost,\n InstagramPost,\n SocialMediaResponse,\n BusinessInfo,\n Module,\n ModulesResponse,\n} from \"./types\";\n"
6
- ],
7
- "mappings": "AAiBO,MAAM,CAAiB,CACpB,QAAU,gCACV,YAER,WAAW,CAAC,EAAqB,CAC/B,KAAK,YAAc,OAGP,QAAU,CACtB,EACA,EAAuB,CAAC,EACZ,CACZ,GAAI,CACF,IAAM,EAAM,GAAG,KAAK,UAAU,IAExB,EAAU,CACd,eAAgB,mBAChB,iBAAkB,KAAK,eACpB,EAAQ,OACb,EAEM,EAAW,MAAM,MAAM,EAAK,IAC7B,EACH,SACF,CAAC,EAEG,EAEJ,GADoB,EAAS,QAAQ,IAAI,cAAc,GACtC,SAAS,kBAAkB,EAC1C,EAAO,MAAM,EAAS,KAAK,EAE3B,OAAO,MAAM,EAAS,KAAK,EAG7B,GAAI,CAAC,EAAS,GAAI,CAChB,IAAM,EACH,GAA6B,OAAS,4BACzC,MAAU,MAAM,cAAc,EAAS,YAAY,GAAc,EAGnE,OAAO,EACP,MAAO,EAAO,CACd,GAAI,aAAiB,MACnB,MAAM,EAER,MAAU,MAAM,wBAAwB,QAKtC,eAAc,EAA+B,CAIjD,OAHiB,MAAM,KAAK,QAC1B,uBACF,GACgB,iBAIZ,aAAY,EAA6B,CAI7C,OAHiB,MAAM,KAAK,QAC1B,qBACF,GACgB,eAIZ,iBAAgB,EAAmC,CACvD,OAAO,MAAM,KAAK,QAChB,0BACF,OAII,WAAU,EAAsB,CAEpC,OADiB,MAAM,KAAK,QAAyB,mBAAmB,GACxD,aAIZ,kBAAiB,EAAiC,CACtD,OAAO,MAAM,KAAK,QAChB,4BACF,OAII,iBAAgB,EAAiC,CACrD,OAAO,MAAM,KAAK,QAA6B,2BAA2B,OAItE,QAAO,CAAC,EAA6C,CACzD,OAAO,MAAM,KAAK,QAAyB,oBAAqB,CAC9D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAI,CAC3B,CAAC,EAEL",
8
- "debugId": "FD76B09BB023C76364756E2164756E21",
9
- "names": []
10
- }
package/dist/types.d.ts DELETED
@@ -1,83 +0,0 @@
1
- export interface BusinessInfo {
2
- id: string;
3
- name: string;
4
- address?: string;
5
- phone?: string;
6
- website?: string;
7
- }
8
- export type Module = "comparison_gallery" | "showcase_gallery" | "smart_contact" | "google_review_display" | "google_review_requests" | "facebook_feed_sync" | "instagram_feed_sync" | "xero_payment_notifications";
9
- export interface ModulesResponse {
10
- modules: Module[];
11
- }
12
- export interface Collection {
13
- id: string;
14
- name: string;
15
- }
16
- export interface ComparisonImage {
17
- id: string;
18
- business_id: number;
19
- before_url: string;
20
- after_url: string;
21
- title: string;
22
- description: string | null;
23
- updated_at: string;
24
- created_at: string;
25
- collection: Collection | null;
26
- }
27
- export interface ComparisonsResponse {
28
- comparisons: ComparisonImage[];
29
- collections: Collection[];
30
- }
31
- export interface ShowcaseImage {
32
- id: string;
33
- business_id: number;
34
- image_url: string[];
35
- title: string;
36
- description: string | null;
37
- updated_at: string;
38
- created_at: string;
39
- collection: Collection | null;
40
- }
41
- export interface ShowcasesResponse {
42
- showcases: ShowcaseImage[];
43
- collections: Collection[];
44
- }
45
- export type ContactData = Record<string, unknown>;
46
- export interface ContactResponse {
47
- success: boolean;
48
- message: string;
49
- contactId: string | null;
50
- }
51
- export interface GoogleReview {
52
- rating: number;
53
- text: string;
54
- author: string;
55
- publishTime: string;
56
- }
57
- export interface GoogleReviewsResponse {
58
- business: BusinessInfo;
59
- rating: number | null;
60
- totalReviews: number;
61
- reviews: GoogleReview[];
62
- }
63
- export interface FacebookPost {
64
- id: string;
65
- message?: string;
66
- created_time: string;
67
- permalink_url?: string;
68
- full_picture?: string;
69
- }
70
- export interface InstagramPost {
71
- id: string;
72
- caption?: string;
73
- media_type: "IMAGE" | "VIDEO" | "CAROUSEL_ALBUM";
74
- media_url: string;
75
- permalink: string;
76
- timestamp: string;
77
- }
78
- export interface SocialMediaResponse {
79
- business: BusinessInfo;
80
- posts: FacebookPost[] | InstagramPost[];
81
- platform: "facebook" | "instagram";
82
- }
83
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}