arky-sdk 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.
- package/dist/api/cms.d.ts +19 -0
- package/dist/api/cms.d.ts.map +1 -0
- package/dist/api/cms.js +41 -0
- package/dist/api/eshop.d.ts +89 -0
- package/dist/api/eshop.d.ts.map +1 -0
- package/dist/api/eshop.js +183 -0
- package/dist/api/index.d.ts +6 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +5 -0
- package/dist/api/newsletter.d.ts +32 -0
- package/dist/api/newsletter.d.ts.map +1 -0
- package/dist/api/newsletter.js +70 -0
- package/dist/api/reservation.d.ts +84 -0
- package/dist/api/reservation.d.ts.map +1 -0
- package/dist/api/reservation.js +239 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +20 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/services/auth.d.ts +17 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +62 -0
- package/dist/services/http.d.ts +20 -0
- package/dist/services/http.d.ts.map +1 -0
- package/dist/services/http.js +73 -0
- package/dist/stores/business.d.ts +28 -0
- package/dist/stores/business.d.ts.map +1 -0
- package/dist/stores/business.js +122 -0
- package/dist/stores/cart.d.ts +8 -0
- package/dist/stores/cart.d.ts.map +1 -0
- package/dist/stores/cart.js +20 -0
- package/dist/stores/eshop.d.ts +121 -0
- package/dist/stores/eshop.d.ts.map +1 -0
- package/dist/stores/eshop.js +377 -0
- package/dist/stores/index.d.ts +7 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +19 -0
- package/dist/stores/reservation.d.ts +237 -0
- package/dist/stores/reservation.d.ts.map +1 -0
- package/dist/stores/reservation.js +853 -0
- package/dist/types/index.d.ts +244 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/utils/blocks.d.ts +30 -0
- package/dist/utils/blocks.d.ts.map +1 -0
- package/dist/utils/blocks.js +237 -0
- package/dist/utils/currency.d.ts +9 -0
- package/dist/utils/currency.d.ts.map +1 -0
- package/dist/utils/currency.js +99 -0
- package/dist/utils/errors.d.ts +121 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +114 -0
- package/dist/utils/i18n.d.ts +5 -0
- package/dist/utils/i18n.d.ts.map +1 -0
- package/dist/utils/i18n.js +37 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/price.d.ts +33 -0
- package/dist/utils/price.d.ts.map +1 -0
- package/dist/utils/price.js +141 -0
- package/dist/utils/queryParams.d.ts +21 -0
- package/dist/utils/queryParams.d.ts.map +1 -0
- package/dist/utils/queryParams.js +47 -0
- package/dist/utils/svg.d.ts +17 -0
- package/dist/utils/svg.d.ts.map +1 -0
- package/dist/utils/svg.js +62 -0
- package/dist/utils/text.d.ts +26 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +64 -0
- package/dist/utils/timezone.d.ts +9 -0
- package/dist/utils/timezone.d.ts.map +1 -0
- package/dist/utils/timezone.js +49 -0
- package/dist/utils/validation.d.ts +9 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +44 -0
- package/package.json +58 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const cmsApi: {
|
|
2
|
+
getCollection: (id: string) => Promise<any>;
|
|
3
|
+
getCollections: ({ name, ids }: {
|
|
4
|
+
name?: string | null;
|
|
5
|
+
ids?: string[] | null;
|
|
6
|
+
}) => Promise<any>;
|
|
7
|
+
getCollectionEntries: ({ collectionId, limit, cursor, ids }: {
|
|
8
|
+
collectionId: string;
|
|
9
|
+
limit?: number;
|
|
10
|
+
cursor?: string;
|
|
11
|
+
ids?: string[] | null;
|
|
12
|
+
}) => Promise<any>;
|
|
13
|
+
getCollectionEntry: ({ collectionId, id }: {
|
|
14
|
+
collectionId: string;
|
|
15
|
+
id: string;
|
|
16
|
+
}) => Promise<import("../services/http").HttpResponse<any>>;
|
|
17
|
+
createCollectionEntry: (collectionEntryData: any) => Promise<import("../services/http").HttpResponse<any>>;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=cms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cms.d.ts","sourceRoot":"","sources":["../../src/api/cms.ts"],"names":[],"mappings":"AAyDA,eAAO,MAAM,MAAM;wBArDc,MAAM;oCAMoB;QAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;KAAE;iEAcvG;QACC,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACzB;+CAoBuD;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;iDAXlC,GAAG;CAyB5D,CAAC"}
|
package/dist/api/cms.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { API_URL, BUSINESS_ID } from '../config';
|
|
2
|
+
import httpClient from '../services/http';
|
|
3
|
+
const getCollection = async (id) => {
|
|
4
|
+
const url = `${API_URL}/v1/businesses/${BUSINESS_ID}/collections/${id}`;
|
|
5
|
+
const { value } = await httpClient.get(url);
|
|
6
|
+
return value;
|
|
7
|
+
};
|
|
8
|
+
const getCollections = async ({ name = null, ids = null }) => {
|
|
9
|
+
const url = `${API_URL}/v1/businesses/${BUSINESS_ID}/collections`;
|
|
10
|
+
const response = await httpClient.get(url, {
|
|
11
|
+
params: { name, ids }
|
|
12
|
+
});
|
|
13
|
+
return response.value;
|
|
14
|
+
};
|
|
15
|
+
const getCollectionEntries = async ({ collectionId, limit, cursor, ids = null }) => {
|
|
16
|
+
const url = `${API_URL}/v1/businesses/${BUSINESS_ID}/collections/${collectionId}/entries`;
|
|
17
|
+
const response = await httpClient.get(url, {
|
|
18
|
+
params: { limit, cursor, ids }
|
|
19
|
+
});
|
|
20
|
+
return response.value;
|
|
21
|
+
};
|
|
22
|
+
const createCollectionEntry = async (collectionEntryData) => {
|
|
23
|
+
const url = `${API_URL}/v1/businesses/${BUSINESS_ID}/collections/${collectionEntryData.collectionId}/entries`;
|
|
24
|
+
const result = await httpClient.post(url, collectionEntryData, {
|
|
25
|
+
successMessage: "Created successfully",
|
|
26
|
+
errorMessage: "Failed to create collection",
|
|
27
|
+
});
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
const getCollectionEntry = async ({ collectionId, id }) => {
|
|
31
|
+
const url = `${API_URL}/v1/businesses/${BUSINESS_ID}/collections/${collectionId}/entries/${id}`;
|
|
32
|
+
const response = await httpClient.get(url);
|
|
33
|
+
return response;
|
|
34
|
+
};
|
|
35
|
+
export const cmsApi = {
|
|
36
|
+
getCollection,
|
|
37
|
+
getCollections,
|
|
38
|
+
getCollectionEntries,
|
|
39
|
+
getCollectionEntry,
|
|
40
|
+
createCollectionEntry,
|
|
41
|
+
};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { ApiResponse, Quote } from '../types';
|
|
2
|
+
export declare const eshopApi: {
|
|
3
|
+
getProducts({ businessId, categoryIds, status, limit, cursor }: {
|
|
4
|
+
businessId: string;
|
|
5
|
+
categoryIds?: string[] | null;
|
|
6
|
+
status?: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
cursor?: string | null;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
success: boolean;
|
|
11
|
+
data: any;
|
|
12
|
+
cursor: any;
|
|
13
|
+
total: any;
|
|
14
|
+
error?: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
success: boolean;
|
|
17
|
+
error: string;
|
|
18
|
+
data: any[];
|
|
19
|
+
cursor?: undefined;
|
|
20
|
+
total?: undefined;
|
|
21
|
+
}>;
|
|
22
|
+
getProductBySlug({ businessId, slug }: {
|
|
23
|
+
businessId: string;
|
|
24
|
+
slug: string;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
success: boolean;
|
|
27
|
+
data: any;
|
|
28
|
+
error?: undefined;
|
|
29
|
+
} | {
|
|
30
|
+
success: boolean;
|
|
31
|
+
error: any;
|
|
32
|
+
data: any;
|
|
33
|
+
}>;
|
|
34
|
+
getQuote({ token, businessId, items, market, currency, userId, paymentMethod, shippingMethodId, promoCode }: {
|
|
35
|
+
token: string;
|
|
36
|
+
businessId: string;
|
|
37
|
+
items: {
|
|
38
|
+
productId: string;
|
|
39
|
+
variantId: string;
|
|
40
|
+
quantity: number;
|
|
41
|
+
}[];
|
|
42
|
+
market: string;
|
|
43
|
+
currency: string;
|
|
44
|
+
userId: string;
|
|
45
|
+
paymentMethod: string;
|
|
46
|
+
shippingMethodId?: string;
|
|
47
|
+
promoCode?: string;
|
|
48
|
+
}): Promise<ApiResponse<Quote>>;
|
|
49
|
+
checkout({ token, businessId, items, paymentMethod, blocks, market, shippingMethodId, promoCode, paymentIntentId }: {
|
|
50
|
+
token: string;
|
|
51
|
+
businessId: string;
|
|
52
|
+
items: any[];
|
|
53
|
+
paymentMethod: string;
|
|
54
|
+
blocks: any[];
|
|
55
|
+
market?: string;
|
|
56
|
+
shippingMethodId?: string;
|
|
57
|
+
promoCode?: string;
|
|
58
|
+
paymentIntentId?: string | null;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
success: boolean;
|
|
61
|
+
error: any;
|
|
62
|
+
code: any;
|
|
63
|
+
data?: undefined;
|
|
64
|
+
} | {
|
|
65
|
+
success: boolean;
|
|
66
|
+
data: any;
|
|
67
|
+
error?: undefined;
|
|
68
|
+
code?: undefined;
|
|
69
|
+
} | {
|
|
70
|
+
success: boolean;
|
|
71
|
+
error: any;
|
|
72
|
+
code?: undefined;
|
|
73
|
+
data?: undefined;
|
|
74
|
+
}>;
|
|
75
|
+
createPaymentIntent({ amount, currency, businessId }: {
|
|
76
|
+
amount: number;
|
|
77
|
+
currency: string;
|
|
78
|
+
businessId: string;
|
|
79
|
+
}): Promise<{
|
|
80
|
+
success: boolean;
|
|
81
|
+
data: any;
|
|
82
|
+
error?: undefined;
|
|
83
|
+
} | {
|
|
84
|
+
success: boolean;
|
|
85
|
+
error: any;
|
|
86
|
+
data?: undefined;
|
|
87
|
+
}>;
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=eshop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eshop.d.ts","sourceRoot":"","sources":["../../src/api/eshop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAW,KAAK,EAAE,MAAM,UAAU,CAAC;AAI5D,eAAO,MAAM,QAAQ;oEAQd;QACC,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B;;;;;;;;;;;;;2CA+B4C;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;;;iHA+B9E;QACC,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACpE,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAE1B,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wHA6D5B;QACC,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,GAAG,EAAE,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC;;;;;;;;;;;;;;;;0DA2C2D;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;;;;;;;;;CAuCvH,CAAC"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { API_URL } from '../config';
|
|
2
|
+
import { reservationApi } from './reservation';
|
|
3
|
+
import httpClient from '../services/http';
|
|
4
|
+
export const eshopApi = {
|
|
5
|
+
// Get products
|
|
6
|
+
async getProducts({ businessId, categoryIds = null, status = "ACTIVE", limit = 20, cursor = null }) {
|
|
7
|
+
const url = `${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/products`;
|
|
8
|
+
const response = await httpClient.get(url, {
|
|
9
|
+
params: {
|
|
10
|
+
categoryIds: categoryIds && categoryIds.length > 0 ? categoryIds : undefined,
|
|
11
|
+
status,
|
|
12
|
+
limit,
|
|
13
|
+
cursor
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
if (response.success) {
|
|
17
|
+
const json = response.value;
|
|
18
|
+
return {
|
|
19
|
+
success: true,
|
|
20
|
+
data: json.items || [],
|
|
21
|
+
cursor: json.cursor,
|
|
22
|
+
total: json.total || 0,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
console.error("Error fetching products:", response.error);
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
error: response.error,
|
|
30
|
+
data: [],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
// Get product by slug
|
|
35
|
+
async getProductBySlug({ businessId, slug }) {
|
|
36
|
+
try {
|
|
37
|
+
const url = `${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/products/slug/${encodeURIComponent(businessId)}/${encodeURIComponent(slug)}`;
|
|
38
|
+
const res = await fetch(url);
|
|
39
|
+
if (!res.ok)
|
|
40
|
+
throw new Error("Product not found");
|
|
41
|
+
const json = await res.json();
|
|
42
|
+
return {
|
|
43
|
+
success: true,
|
|
44
|
+
data: json,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
console.error("Error fetching product:", e);
|
|
49
|
+
return {
|
|
50
|
+
success: false,
|
|
51
|
+
error: e.message,
|
|
52
|
+
data: null,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
// Get quote for cart (pricing with promo codes, shipping, taxes)
|
|
57
|
+
async getQuote({ token, businessId, items, market, currency, userId, paymentMethod, shippingMethodId, promoCode }) {
|
|
58
|
+
try {
|
|
59
|
+
const lines = items.map(item => ({
|
|
60
|
+
type: 'PRODUCT_VARIANT',
|
|
61
|
+
productId: item.productId,
|
|
62
|
+
variantId: item.variantId,
|
|
63
|
+
quantity: item.quantity
|
|
64
|
+
}));
|
|
65
|
+
const payload = {
|
|
66
|
+
businessId,
|
|
67
|
+
market,
|
|
68
|
+
currency,
|
|
69
|
+
userId,
|
|
70
|
+
paymentMethod,
|
|
71
|
+
lines,
|
|
72
|
+
...(shippingMethodId && { shippingMethodId }),
|
|
73
|
+
...(promoCode && { promoCode })
|
|
74
|
+
};
|
|
75
|
+
const res = await fetch(`${API_URL}/v1/payments/quote`, {
|
|
76
|
+
method: "POST",
|
|
77
|
+
headers: {
|
|
78
|
+
"Content-Type": "application/json",
|
|
79
|
+
Authorization: `Bearer ${token}`,
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify(payload),
|
|
82
|
+
});
|
|
83
|
+
const text = await res.text();
|
|
84
|
+
if (!res.ok) {
|
|
85
|
+
try {
|
|
86
|
+
const json = JSON.parse(text);
|
|
87
|
+
return { success: false, error: json.reason || json.error || res.statusText, code: json.code };
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return { success: false, error: text || res.statusText };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const quote = text ? JSON.parse(text) : null;
|
|
94
|
+
return { success: true, data: quote };
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
console.error('Quote fetch failed:', e);
|
|
98
|
+
return {
|
|
99
|
+
success: false,
|
|
100
|
+
error: e.message,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
// Checkout - Backend calculates currency from market
|
|
105
|
+
async checkout({ token, businessId, items, paymentMethod, blocks, market = "US", shippingMethodId, promoCode, paymentIntentId = null }) {
|
|
106
|
+
try {
|
|
107
|
+
const payload = {
|
|
108
|
+
businessId,
|
|
109
|
+
items,
|
|
110
|
+
paymentMethod,
|
|
111
|
+
blocks,
|
|
112
|
+
market,
|
|
113
|
+
...(shippingMethodId && { shippingMethodId }),
|
|
114
|
+
...(promoCode && { promoCode }),
|
|
115
|
+
...(paymentIntentId && { paymentIntentId }),
|
|
116
|
+
};
|
|
117
|
+
const res = await fetch(`${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/orders/checkout`, {
|
|
118
|
+
method: "POST",
|
|
119
|
+
headers: {
|
|
120
|
+
"Content-Type": "application/json",
|
|
121
|
+
Authorization: `Bearer ${token}`,
|
|
122
|
+
},
|
|
123
|
+
body: JSON.stringify(payload),
|
|
124
|
+
});
|
|
125
|
+
const text = await res.text();
|
|
126
|
+
if (!res.ok) {
|
|
127
|
+
try {
|
|
128
|
+
const json = JSON.parse(text);
|
|
129
|
+
return { success: false, error: json.reason || json.error || res.statusText, code: json.code };
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return { success: false, error: text || res.statusText };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const json = text ? JSON.parse(text) : null;
|
|
136
|
+
return { success: true, data: json };
|
|
137
|
+
}
|
|
138
|
+
catch (e) {
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
error: e.message,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
// Create payment intent for Stripe
|
|
146
|
+
async createPaymentIntent({ amount, currency, businessId }) {
|
|
147
|
+
try {
|
|
148
|
+
const tokenResponse = await reservationApi.getGuestToken();
|
|
149
|
+
if (!tokenResponse.success || !tokenResponse.data) {
|
|
150
|
+
throw new Error('Failed to get guest token');
|
|
151
|
+
}
|
|
152
|
+
const token = tokenResponse.data.token;
|
|
153
|
+
const res = await fetch(`${API_URL}/v1/businesses/${encodeURIComponent(businessId)}/payment/create-intent`, {
|
|
154
|
+
method: "POST",
|
|
155
|
+
headers: {
|
|
156
|
+
"Content-Type": "application/json",
|
|
157
|
+
Authorization: `Bearer ${token}`,
|
|
158
|
+
},
|
|
159
|
+
body: JSON.stringify({
|
|
160
|
+
amount,
|
|
161
|
+
currency,
|
|
162
|
+
businessId,
|
|
163
|
+
}),
|
|
164
|
+
});
|
|
165
|
+
if (!res.ok) {
|
|
166
|
+
const error = (await res.text()) || res.statusText;
|
|
167
|
+
throw new Error(error);
|
|
168
|
+
}
|
|
169
|
+
const json = await res.json();
|
|
170
|
+
return {
|
|
171
|
+
success: true,
|
|
172
|
+
data: json,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (e) {
|
|
176
|
+
console.error('Payment intent creation failed:', e);
|
|
177
|
+
return {
|
|
178
|
+
success: false,
|
|
179
|
+
error: e.message,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { cmsApi } from "./cms";
|
|
2
|
+
export { eshopApi } from "./eshop";
|
|
3
|
+
export { reservationApi } from "./reservation";
|
|
4
|
+
export { newsletterApi } from "./newsletter";
|
|
5
|
+
export type { ApiResponse, Newsletter, PaginatedResponse } from "../types/index";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Newsletter, PaginatedResponse, Payment } from '../types';
|
|
2
|
+
export interface NewsletterFindPayload {
|
|
3
|
+
business_id: string;
|
|
4
|
+
}
|
|
5
|
+
export interface NewsletterResponse {
|
|
6
|
+
data: Newsletter[];
|
|
7
|
+
meta?: {
|
|
8
|
+
total: number;
|
|
9
|
+
page: number;
|
|
10
|
+
per_page: number;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface NewsletterSubscribePayload {
|
|
14
|
+
newsletterId: string;
|
|
15
|
+
email: string;
|
|
16
|
+
customerId?: string;
|
|
17
|
+
payment?: Payment;
|
|
18
|
+
}
|
|
19
|
+
export declare const newsletterApi: {
|
|
20
|
+
find(payload: NewsletterFindPayload): Promise<PaginatedResponse<Newsletter>>;
|
|
21
|
+
get(id: string): Promise<Newsletter>;
|
|
22
|
+
subscribe(payload: NewsletterSubscribePayload): Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
data: any;
|
|
25
|
+
error?: undefined;
|
|
26
|
+
} | {
|
|
27
|
+
success: boolean;
|
|
28
|
+
error: string;
|
|
29
|
+
data?: undefined;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=newsletter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"newsletter.d.ts","sourceRoot":"","sources":["../../src/api/newsletter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEvE,MAAM,WAAW,qBAAqB;IACrC,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KACjB,CAAC;CACF;AAED,MAAM,WAAW,0BAA0B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,aAAa;kBACL,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;YA4BpE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;uBAejB,0BAA0B;;;;;;;;;CAsCnD,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export const newsletterApi = {
|
|
2
|
+
async find(payload) {
|
|
3
|
+
const params = new URLSearchParams({
|
|
4
|
+
businessId: payload.business_id,
|
|
5
|
+
});
|
|
6
|
+
// Get the backend API URL from config
|
|
7
|
+
const { API_URL } = await import('../config');
|
|
8
|
+
const url = `${API_URL}/v1/newsletters?${params.toString()}`;
|
|
9
|
+
const response = await fetch(url);
|
|
10
|
+
if (!response.ok) {
|
|
11
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
12
|
+
}
|
|
13
|
+
const backendResponse = await response.json();
|
|
14
|
+
// Backend returns {items: [], cursor: null}, we need {data: [], meta: {...}}
|
|
15
|
+
return {
|
|
16
|
+
data: backendResponse.items || [],
|
|
17
|
+
meta: {
|
|
18
|
+
total: backendResponse.items?.length || 0,
|
|
19
|
+
page: 1,
|
|
20
|
+
per_page: backendResponse.items?.length || 0,
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
},
|
|
24
|
+
async get(id) {
|
|
25
|
+
// Get the backend API URL from config
|
|
26
|
+
const { API_URL } = await import('../config');
|
|
27
|
+
const url = `${API_URL}/v1/newsletters/${id}`;
|
|
28
|
+
const response = await fetch(url);
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
31
|
+
}
|
|
32
|
+
return await response.json();
|
|
33
|
+
},
|
|
34
|
+
async subscribe(payload) {
|
|
35
|
+
try {
|
|
36
|
+
// Get the backend API URL from config
|
|
37
|
+
const { API_URL } = await import('../config');
|
|
38
|
+
const url = `${API_URL}/v1/newsletters/${payload.newsletterId}/subscribe`;
|
|
39
|
+
const response = await fetch(url, {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
headers: {
|
|
42
|
+
'Content-Type': 'application/json',
|
|
43
|
+
},
|
|
44
|
+
body: JSON.stringify({
|
|
45
|
+
newsletterId: payload.newsletterId,
|
|
46
|
+
email: payload.email,
|
|
47
|
+
market: "US", // Backend resolves currency from market
|
|
48
|
+
...(payload.customerId && { customerId: payload.customerId }),
|
|
49
|
+
...(payload.payment && { payment: payload.payment }),
|
|
50
|
+
}),
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
const errorData = await response.json().catch(() => ({}));
|
|
54
|
+
throw new Error(errorData.message || `HTTP error! status: ${response.status}`);
|
|
55
|
+
}
|
|
56
|
+
const data = await response.json();
|
|
57
|
+
return {
|
|
58
|
+
success: true,
|
|
59
|
+
data,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
console.error('Newsletter subscription error:', error);
|
|
64
|
+
return {
|
|
65
|
+
success: false,
|
|
66
|
+
error: error instanceof Error ? error.message : 'Failed to subscribe to newsletter',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { ApiResponse, Quote } from '../types';
|
|
2
|
+
export declare const reservationApi: {
|
|
3
|
+
getQuote({ token, businessId, market, currency, userId, parts, paymentMethod, promoCode, }: {
|
|
4
|
+
token: string;
|
|
5
|
+
businessId: string;
|
|
6
|
+
market: string;
|
|
7
|
+
currency: string;
|
|
8
|
+
userId: string;
|
|
9
|
+
parts: any[];
|
|
10
|
+
paymentMethod?: string;
|
|
11
|
+
promoCode?: string;
|
|
12
|
+
}): Promise<ApiResponse<Quote>>;
|
|
13
|
+
getAvailableSlots({ businessId, serviceId, from, to, limit, providerId, }: {
|
|
14
|
+
businessId: string;
|
|
15
|
+
serviceId: string;
|
|
16
|
+
from: number;
|
|
17
|
+
to: number;
|
|
18
|
+
limit?: number;
|
|
19
|
+
providerId?: string | null;
|
|
20
|
+
}): Promise<{
|
|
21
|
+
success: boolean;
|
|
22
|
+
data: any;
|
|
23
|
+
error?: undefined;
|
|
24
|
+
} | {
|
|
25
|
+
success: boolean;
|
|
26
|
+
error: string;
|
|
27
|
+
data: any[];
|
|
28
|
+
}>;
|
|
29
|
+
getProviders({ businessId, serviceId, limit }: {
|
|
30
|
+
businessId: string;
|
|
31
|
+
serviceId: string;
|
|
32
|
+
limit?: number;
|
|
33
|
+
}): Promise<{
|
|
34
|
+
success: boolean;
|
|
35
|
+
data: any;
|
|
36
|
+
error?: undefined;
|
|
37
|
+
} | {
|
|
38
|
+
success: boolean;
|
|
39
|
+
error: string;
|
|
40
|
+
data: any[];
|
|
41
|
+
}>;
|
|
42
|
+
getGuestToken(): Promise<ApiResponse<{
|
|
43
|
+
token: string;
|
|
44
|
+
}>>;
|
|
45
|
+
updateProfilePhone({ token, phoneNumber }: {
|
|
46
|
+
token: string;
|
|
47
|
+
phoneNumber: string;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
success: boolean;
|
|
50
|
+
error?: undefined;
|
|
51
|
+
} | {
|
|
52
|
+
success: boolean;
|
|
53
|
+
error: any;
|
|
54
|
+
}>;
|
|
55
|
+
verifyPhoneCode({ token, phoneNumber, code }: {
|
|
56
|
+
token: string;
|
|
57
|
+
phoneNumber: string;
|
|
58
|
+
code: string;
|
|
59
|
+
}): Promise<{
|
|
60
|
+
success: boolean;
|
|
61
|
+
error?: undefined;
|
|
62
|
+
} | {
|
|
63
|
+
success: boolean;
|
|
64
|
+
error: any;
|
|
65
|
+
}>;
|
|
66
|
+
checkout({ token, businessId, parts, paymentMethod, blocks, market, promoCode }: {
|
|
67
|
+
token: string;
|
|
68
|
+
businessId: string;
|
|
69
|
+
parts: any[];
|
|
70
|
+
paymentMethod?: string;
|
|
71
|
+
blocks?: any[];
|
|
72
|
+
market?: string;
|
|
73
|
+
promoCode?: string;
|
|
74
|
+
}): Promise<{
|
|
75
|
+
success: boolean;
|
|
76
|
+
data: any;
|
|
77
|
+
error?: undefined;
|
|
78
|
+
} | {
|
|
79
|
+
success: boolean;
|
|
80
|
+
error: any;
|
|
81
|
+
data?: undefined;
|
|
82
|
+
}>;
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=reservation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reservation.d.ts","sourceRoot":"","sources":["../../src/api/reservation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAW,KAAK,EAAE,MAAM,UAAU,CAAC;AAG5D,eAAO,MAAM,cAAc;gGAWpB;QACC,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;+EAwD5B;QACC,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B;;;;;;;;;mDA6ByD;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;qBA2B5F,OAAO,CAAC,WAAW,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;+CAyBb;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;;;;;;;kDAmCnC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;qFA0CrG;QACC,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB;;;;;;;;;CAoDJ,CAAC"}
|