@swatcha/mcp-server 0.1.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.
@@ -0,0 +1,87 @@
1
+ interface ApiResponse<T = unknown> {
2
+ data?: T;
3
+ error?: {
4
+ code: string;
5
+ message: string;
6
+ details?: unknown;
7
+ };
8
+ pagination?: {
9
+ cursor: string | null;
10
+ hasMore: boolean;
11
+ };
12
+ }
13
+ export declare class SwatchaClient {
14
+ private baseUrl;
15
+ private apiKey;
16
+ constructor(baseUrl: string, apiKey: string);
17
+ private request;
18
+ listSelections(): Promise<ApiResponse<unknown>>;
19
+ getSelection(id: string): Promise<ApiResponse<unknown>>;
20
+ createSelection(data: {
21
+ name: string;
22
+ clientId: string;
23
+ status?: string;
24
+ notes?: string;
25
+ siteAddress?: string;
26
+ }): Promise<ApiResponse<unknown>>;
27
+ updateSelection(id: string, data: {
28
+ name?: string;
29
+ status?: string;
30
+ notes?: string;
31
+ siteAddress?: string;
32
+ }): Promise<ApiResponse<unknown>>;
33
+ deleteSelection(id: string): Promise<ApiResponse<unknown>>;
34
+ listSelectionProducts(selectionId: string): Promise<ApiResponse<unknown>>;
35
+ addProductToSelection(selectionId: string, data: {
36
+ productId: string;
37
+ quantity?: string;
38
+ location?: string;
39
+ locationId?: string;
40
+ notes?: string;
41
+ }): Promise<ApiResponse<unknown>>;
42
+ updateSelectionProduct(selectionId: string, productId: string, data: {
43
+ quantity?: string;
44
+ location?: string;
45
+ locationId?: string;
46
+ notes?: string;
47
+ }): Promise<ApiResponse<unknown>>;
48
+ removeProductFromSelection(selectionId: string, productId: string): Promise<ApiResponse<unknown>>;
49
+ listProducts(query?: string): Promise<ApiResponse<unknown>>;
50
+ getProduct(id: string): Promise<ApiResponse<unknown>>;
51
+ createProduct(data: {
52
+ name: string;
53
+ sku?: string;
54
+ price?: number;
55
+ supplierId?: string;
56
+ imageUrl?: string;
57
+ description?: string;
58
+ }): Promise<ApiResponse<unknown>>;
59
+ updateProduct(id: string, data: {
60
+ name?: string;
61
+ sku?: string;
62
+ price?: number;
63
+ supplierId?: string;
64
+ imageUrl?: string;
65
+ }): Promise<ApiResponse<unknown>>;
66
+ listClients(): Promise<ApiResponse<unknown>>;
67
+ createClient(data: {
68
+ name: string;
69
+ }): Promise<ApiResponse<unknown>>;
70
+ listSuppliers(): Promise<ApiResponse<unknown>>;
71
+ createSupplier(data: {
72
+ name: string;
73
+ websiteUrl?: string;
74
+ }): Promise<ApiResponse<unknown>>;
75
+ listLocations(): Promise<ApiResponse<unknown>>;
76
+ createLocation(data: {
77
+ name: string;
78
+ }): Promise<ApiResponse<unknown>>;
79
+ getQuota(): Promise<ApiResponse<unknown>>;
80
+ searchProductImages(productName: string, options?: {
81
+ supplier?: string;
82
+ supplierUrl?: string;
83
+ limit?: number;
84
+ }): Promise<ApiResponse<unknown>>;
85
+ }
86
+ export {};
87
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,105 @@
1
+ export class SwatchaClient {
2
+ baseUrl;
3
+ apiKey;
4
+ constructor(baseUrl, apiKey) {
5
+ this.baseUrl = baseUrl.replace(/\/$/, '');
6
+ this.apiKey = apiKey;
7
+ }
8
+ async request(method, path, body) {
9
+ const url = `${this.baseUrl}/api/v1${path}`;
10
+ const headers = {
11
+ Authorization: `Bearer ${this.apiKey}`,
12
+ 'Content-Type': 'application/json',
13
+ };
14
+ const response = await fetch(url, {
15
+ method,
16
+ headers,
17
+ body: body ? JSON.stringify(body) : undefined,
18
+ });
19
+ const json = (await response.json());
20
+ if (!response.ok) {
21
+ throw new Error(json.error?.message || `API error: ${response.status}`);
22
+ }
23
+ return json;
24
+ }
25
+ // Selections
26
+ async listSelections() {
27
+ return this.request('GET', '/selections');
28
+ }
29
+ async getSelection(id) {
30
+ return this.request('GET', `/selections/${id}`);
31
+ }
32
+ async createSelection(data) {
33
+ return this.request('POST', '/selections', data);
34
+ }
35
+ async updateSelection(id, data) {
36
+ return this.request('PATCH', `/selections/${id}`, data);
37
+ }
38
+ async deleteSelection(id) {
39
+ return this.request('DELETE', `/selections/${id}`);
40
+ }
41
+ // Selection Products
42
+ async listSelectionProducts(selectionId) {
43
+ return this.request('GET', `/selections/${selectionId}/products`);
44
+ }
45
+ async addProductToSelection(selectionId, data) {
46
+ return this.request('POST', `/selections/${selectionId}/products`, data);
47
+ }
48
+ async updateSelectionProduct(selectionId, productId, data) {
49
+ return this.request('PATCH', `/selections/${selectionId}/products/${productId}`, data);
50
+ }
51
+ async removeProductFromSelection(selectionId, productId) {
52
+ return this.request('DELETE', `/selections/${selectionId}/products/${productId}`);
53
+ }
54
+ // Products (Catalog)
55
+ async listProducts(query) {
56
+ const qs = query ? `?q=${encodeURIComponent(query)}` : '';
57
+ return this.request('GET', `/products${qs}`);
58
+ }
59
+ async getProduct(id) {
60
+ return this.request('GET', `/products/${id}`);
61
+ }
62
+ async createProduct(data) {
63
+ return this.request('POST', '/products', data);
64
+ }
65
+ async updateProduct(id, data) {
66
+ return this.request('PATCH', `/products/${id}`, data);
67
+ }
68
+ // Clients
69
+ async listClients() {
70
+ return this.request('GET', '/clients');
71
+ }
72
+ async createClient(data) {
73
+ return this.request('POST', '/clients', data);
74
+ }
75
+ // Suppliers
76
+ async listSuppliers() {
77
+ return this.request('GET', '/suppliers');
78
+ }
79
+ async createSupplier(data) {
80
+ return this.request('POST', '/suppliers', data);
81
+ }
82
+ // Locations
83
+ async listLocations() {
84
+ return this.request('GET', '/locations');
85
+ }
86
+ async createLocation(data) {
87
+ return this.request('POST', '/locations', data);
88
+ }
89
+ // Quota
90
+ async getQuota() {
91
+ return this.request('GET', '/quota');
92
+ }
93
+ // Image Search
94
+ async searchProductImages(productName, options) {
95
+ const params = new URLSearchParams({ product: productName });
96
+ if (options?.supplier)
97
+ params.append('supplier', options.supplier);
98
+ if (options?.supplierUrl)
99
+ params.append('supplierUrl', options.supplierUrl);
100
+ if (options?.limit)
101
+ params.append('limit', String(options.limit));
102
+ return this.request('GET', `/images/search?${params}`);
103
+ }
104
+ }
105
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}