@jaicome/contracts 0.0.73
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 +15 -0
- package/dist/fulfillment-states.d.mts +129 -0
- package/dist/fulfillment-states.mjs +225 -0
- package/dist/index.d.mts +4911 -0
- package/dist/index.mjs +1198 -0
- package/dist/orders-yFOPRYZw.d.mts +1260 -0
- package/dist/schema/index.d.mts +5947 -0
- package/dist/schema/index.mjs +3 -0
- package/dist/schema-0qCwa7QX.mjs +2804 -0
- package/package.json +42 -0
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,1198 @@
|
|
|
1
|
+
import { $a as getCategoryInputSchema, $o as bannerListOutputSchema, $r as createSocialInputSchema, $t as listLocationsInputSchema, Aa as createImageOutputSchema, Ai as createCustomerManualInputSchema, An as upsertLocationBusinessHoursInputSchema, Ao as updateModifierInputSchema, At as createAddressInputSchema, Ba as deleteCategoryOutputSchema, Bn as listOrdersOutputSchema, Bo as upsertModifierDefaultLocationOverrideInputSchema, Br as listMerchantsOutputSchema, Bt as deleteFulfillmentBusinessHoursInputSchema, C as listPayoutsInputSchema, Cn as uploadLocationBannerOutputSchema, Co as unlinkItemWithCategoryInputSchema, Cr as promoCodeOutputSchema, Ct as sendMerchantInvoiceInputSchema, D as payoutSchema, Da as createCategoryInputSchema, Dn as upsertDeliveryInputSchema, Do as updateCategoryOutputSchema, Dr as updatePromoCodeInputSchema, Dt as addProviderInputSchema, Ei as bulkCustomerImportResultSchema, En as upsertCurbsideInputSchema, Eo as updateCategoryInputSchema, Er as promoCodeValidationResultSchema, Et as addCurbsideSpotInputSchema, Fa as createModifierListOutputSchema, Fi as customerAddressByIdInputSchema, Fo as updateVariationOutputSchema, Fr as createMerchantLegalDetailsInputSchema, Ft as createWhatsAppGroupInputSchema, G as refundOrderInputSchema, Ga as deleteModifierListOutputSchema, Gi as deleteCustomerInputSchema, Go as upsertVariationLocationOverrideInputSchema, Gt as fulfillmentBusinessHoursOutputSchema, Ha as deleteItemOutputSchema, Ho as upsertModifierLocationOverrideInputSchema, Ht as deleteWhatsAppGroupInputSchema, Ia as createModifierOutputSchema, Io as uploadCatalogItemPhotoInputSchema, Ir as createMerchantOutputSchema, It as createWhatsAppGroupOutputSchema, J as calculateSmsCostInputSchema, Ja as deleteModifierOverrideOutputSchema, Ji as listCustomerAddressesOutputSchema, Jt as linkWhatsAppGroupOutputSchema, K as refundOrderOutputSchema, Ka as deleteModifierOutputSchema, Ki as deleteMerchantCustomerInputSchema, Kr as merchantLegalDetailsSchema, L as listPaymentsInputSchema, La as createVariationInputSchema, Li as customerAddressOutputSchema, Ln as getOrderByIdInputSchema, Lo as uploadCatalogItemPhotoOutputSchema, Lr as linkSquareIntegrationInputSchema, M as upsertBankAccountInputSchema, Ma as createItemOutputSchema, Mi as createMerchantCustomerManualInputSchema, Mn as upsertPickupInputSchema, Mo as updateModifierListOutputSchema, Mr as createLeadForAdminOutputSchema, Na as createModifierInputSchema, Ni as createMerchantCustomerManualOutputSchema, Nn as checkoutResultSchema, No as updateModifierOutputSchema, Oa as createCategoryOutputSchema, On as upsertDineInInputSchema, Oo as updateItemInputSchema, P as getPaymentInputSchema, Pa as createModifierListInputSchema, Pi as customerAddressBaseSchema, Pn as createOrderInputSchema, Po as updateVariationInputSchema, Pr as createMerchantInputSchema, Pt as createLocationInputSchema, Qa as getCatalogItemOutputSchema, Qi as listMerchantCustomersOutputSchema, Qo as bannerIdInputSchema, Qr as uploadVatDocumentInputSchema, Qt as listLocationWhatsAppGroupsOutputSchema, R as listPaymentsOutputSchema, Ra as createVariationOutputSchema, Ri as customerBaseSchema, Rn as getOrderConfigInputSchema, Ro as upsertItemLocationOverrideInputSchema, Rr as linkSquareIntegrationOutputSchema, S as listCompanyPayoutAccountsInputSchema, Si as bulkCustomerExportResultSchema, Sn as uploadLocationBannerInputSchema, So as mutationIdOutputSchema, Sr as promoCodeListOutputSchema, Ti as bulkCustomerImportInputSchema, Tn as uploadLocationPhotoOutputSchema, To as unlinkItemWithModifierListInputSchema, Tr as promoCodeValidationInputSchema, Tt as updateSubscriptionPlanInputSchema, Ua as deleteModifierInputSchema, Un as orderConfigSchema, Uo as upsertModifierOverrideInputSchema, Ur as merchantFullDetailsSchema, V as paymentOutputSchema, Va as deleteItemInputSchema, Vo as upsertModifierInputSchema, Vt as deleteLocationBusinessHoursInputSchema, Wa as deleteModifierListInputSchema, Wo as upsertModifierOverrideOutputSchema, Wr as merchantIdInputSchema, X as getSmsBalanceInputSchema, Xa as deleteVariationOutputSchema, Xi as listCustomersOutputSchema, Xr as updateMerchantLegalDetailsInputSchema, Xt as listAvailableWhatsAppGroupsOutputSchema, Y as calculateSmsCostOutputSchema, Ya as deleteVariationInputSchema, Yi as listCustomersInputSchema, Yo as activeBannerListOutputSchema, Yr as merchantSyncEventSchema, Yt as listAvailableWhatsAppGroupsInputSchema, Z as getSmsBalanceOutputSchema, Za as getCatalogItemInputSchema, Zi as listMerchantCustomersInputSchema, Zo as approveBannerInputSchema, Zr as uploadCrnDocumentInputSchema, Zt as listLocationWhatsAppGroupsInputSchema, _ as getEffectiveBankAccountInputSchema, _o as listCatalogModifiersInputSchema, _r as promoCodeBaseSchema, ao as linkItemWithCategoryInputSchema, at as availableTemplateResourcesSchema, b as getLocationBalanceOutputSchema, bi as updateDiscountInputSchema, bn as updateProviderInputSchema, bo as listCatalogVariationsOutputSchema, bt as createSubscriptionPlanInputSchema, c as bankAccountSchema, co as linkOperationOutputSchema, ct as listMessageTemplatesInputSchema, d as createCompanyPayoutAccountInputSchema, di as createDiscountInputSchema, do as listCatalogCategoriesWithItemsInputSchema, dt as messageTemplateByIdInputSchema, ea as merchantCustomerByIdInputSchema, ei as socialBaseSchema, en as listLocationsOutputSchema, eo as getCategoryOutputSchema, es as bannerOutputSchema, et as sendDirectMessageInputSchema, f as createPayoutInputSchema, fo as listCatalogCategoriesWithItemsOutputSchema, fr as createPromoCodeInputSchema, g as getCompanyPayoutAccountInputSchema, gi as discountOutputSchema, gn as removeProviderInputSchema, go as listCatalogModifierListsOutputSchema, h as getBankAccountOutputSchema, hi as discountListOutputSchema, hn as removeLocationThemeInputSchema, ho as listCatalogModifierListsInputSchema, i as payoutReportOutputSchema, io as getModifierOutputSchema, is as listBannersInputSchema, j as updateCompanyPayoutAccountInputSchema, ja as createItemInputSchema, ji as createCustomerManualOutputSchema, jn as upsertLocationThemeInputSchema, jo as updateModifierListInputSchema, jr as createLeadForAdminInputSchema, ka as createImageInputSchema, ki as createCustomerAddressInputSchema, kn as upsertFulfillmentBusinessHoursInputSchema, ko as updateItemOutputSchema, kt as createAddressForLocationInputSchema, lo as listCatalogCategoriesInputSchema, lr as updateFulfillmentInputSchema, lt as listMessageTemplatesOutputSchema, m as getBankAccountInputSchema, mi as discountIdInputSchema, mn as removeDeliveryInputSchema, mo as listCatalogItemsOutputSchema, mr as listPromoCodesInputSchema, n as payoutReportInputSchema, na as merchantCustomerOutputSchema, no as getModifierListInputSchema, nr as orderOutputSchema, ns as createBannerInputSchema, nt as sendMessageInputSchema, on as locationMutationOutputSchema, oo as linkItemWithImageInputSchema, os as updateBannerInputSchema, ot as createMessageTemplateInputSchema, p as deleteCompanyPayoutAccountInputSchema, pn as removeCurbsideSpotInputSchema, po as listCatalogItemsInputSchema, pt as messageTemplateOutputSchema, qa as deleteModifierOverrideInputSchema, qi as listCustomerAddressesInputSchema, qt as linkWhatsAppGroupInputSchema, ra as upsertCustomerInputSchema, ri as updateSocialInputSchema, rn as locationIdInputSchema, ro as getModifierListOutputSchema, rs as listActiveBannersInputSchema, rt as sendMessageOutputSchema, sn as locationSchema, so as linkItemWithModifierListInputSchema, to as getModifierInputSchema, tt as sendDirectMessageOutputSchema, u as companyPayoutAccountSchema, uo as listCatalogCategoriesOutputSchema, ur as upsertOrderConfigInputSchema, v as getEffectiveBankAccountOutputSchema, vo as listCatalogModifiersOutputSchema, vt as updateMessageTemplateInputSchema, w as listPayoutsOutputSchema, wn as uploadLocationPhotoInputSchema, wo as unlinkItemWithImageInputSchema, wt as subscriptionPlanSchema, x as getPayoutInputSchema, xi as bulkCustomerExportInputSchema, xn as updateWhatsAppGroupInputSchema, xr as promoCodeIdInputSchema, xt as merchantInvoiceSchema, y as getLocationBalanceInputSchema, yi as listDiscountsInputSchema, yn as updateLocationInputSchema, yo as listCatalogVariationsInputSchema, yt as createMerchantInvoiceInputSchema, za as deleteCategoryInputSchema, zi as customerByIdInputSchema, zn as listOrdersInputSchema, zo as upsertItemModifierOverrideInputSchema, zr as listMerchantsInputSchema } from "./schema-0qCwa7QX.mjs";
|
|
2
|
+
import { FulfillmentStateMachine, FulfillmentStateValues, TerminalStates, assertCanTransition, canTransition, getAllowedTransitions, getAllowedUserTransitions, isTerminalState } from "./fulfillment-states.mjs";
|
|
3
|
+
import { createORPCClient } from "@orpc/client";
|
|
4
|
+
import { RPCLink } from "@orpc/client/fetch";
|
|
5
|
+
import { eventIterator, oc } from "@orpc/contract";
|
|
6
|
+
import z$1, { z } from "zod";
|
|
7
|
+
|
|
8
|
+
//#region src/contract/routes/banners.ts
|
|
9
|
+
const listBannersRoute = oc.route({
|
|
10
|
+
method: "GET",
|
|
11
|
+
path: "/"
|
|
12
|
+
}).input(listBannersInputSchema).output(bannerListOutputSchema);
|
|
13
|
+
const createBannerRoute = oc.route({
|
|
14
|
+
method: "POST",
|
|
15
|
+
path: "/"
|
|
16
|
+
}).input(createBannerInputSchema).output(bannerOutputSchema);
|
|
17
|
+
const updateBannerRoute = oc.route({
|
|
18
|
+
method: "PUT",
|
|
19
|
+
path: "/:bannerId"
|
|
20
|
+
}).input(bannerIdInputSchema.extend({ update: updateBannerInputSchema })).output(bannerOutputSchema);
|
|
21
|
+
const deleteBannerRoute = oc.route({
|
|
22
|
+
method: "DELETE",
|
|
23
|
+
path: "/:bannerId"
|
|
24
|
+
}).input(bannerIdInputSchema).output(z.void());
|
|
25
|
+
const getBannerRoute = oc.route({
|
|
26
|
+
method: "GET",
|
|
27
|
+
path: "/:bannerId"
|
|
28
|
+
}).input(bannerIdInputSchema).output(bannerOutputSchema);
|
|
29
|
+
const approveBannerRoute = oc.route({
|
|
30
|
+
method: "POST",
|
|
31
|
+
path: "/:bannerId/approve"
|
|
32
|
+
}).input(bannerIdInputSchema.extend(approveBannerInputSchema.shape)).output(bannerOutputSchema);
|
|
33
|
+
const rejectBannerRoute = oc.route({
|
|
34
|
+
method: "POST",
|
|
35
|
+
path: "/:bannerId/reject"
|
|
36
|
+
}).input(bannerIdInputSchema).output(bannerOutputSchema);
|
|
37
|
+
const listActiveBannersRoute = oc.route({
|
|
38
|
+
method: "GET",
|
|
39
|
+
path: "/active"
|
|
40
|
+
}).input(listActiveBannersInputSchema).output(activeBannerListOutputSchema);
|
|
41
|
+
const bannersRouter = oc.router({
|
|
42
|
+
list: listBannersRoute,
|
|
43
|
+
listActive: listActiveBannersRoute,
|
|
44
|
+
create: createBannerRoute,
|
|
45
|
+
update: updateBannerRoute,
|
|
46
|
+
delete: deleteBannerRoute,
|
|
47
|
+
get: getBannerRoute,
|
|
48
|
+
approve: approveBannerRoute,
|
|
49
|
+
reject: rejectBannerRoute
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
//#region src/contract/routes/merchant-invoices.ts
|
|
54
|
+
const createMerchantInvoiceRoute = oc.route({
|
|
55
|
+
method: "POST",
|
|
56
|
+
path: "/merchants/:merchantId/invoices"
|
|
57
|
+
}).input(createMerchantInvoiceInputSchema).output(merchantInvoiceSchema);
|
|
58
|
+
const sendMerchantInvoiceRoute = oc.route({
|
|
59
|
+
method: "POST",
|
|
60
|
+
path: "/merchants/:merchantId/invoices/:invoiceId/send"
|
|
61
|
+
}).input(sendMerchantInvoiceInputSchema).output(merchantInvoiceSchema);
|
|
62
|
+
const listMerchantInvoicesRoute = oc.route({
|
|
63
|
+
method: "GET",
|
|
64
|
+
path: "/merchants/:merchantId/invoices"
|
|
65
|
+
}).input(z.object({ merchantId: z.uuid() })).output(z.array(merchantInvoiceSchema));
|
|
66
|
+
const merchantInvoicesRoutes = {
|
|
67
|
+
create: createMerchantInvoiceRoute,
|
|
68
|
+
send: sendMerchantInvoiceRoute,
|
|
69
|
+
list: listMerchantInvoicesRoute
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
//#region src/contract/routes/payouts.ts
|
|
74
|
+
const createPayoutRoute = oc.route({
|
|
75
|
+
method: "POST",
|
|
76
|
+
path: "/"
|
|
77
|
+
}).input(createPayoutInputSchema).output(payoutSchema);
|
|
78
|
+
const listPayoutsRoute = oc.route({
|
|
79
|
+
method: "GET",
|
|
80
|
+
path: "/"
|
|
81
|
+
}).input(listPayoutsInputSchema).output(listPayoutsOutputSchema);
|
|
82
|
+
const getPayoutRoute = oc.route({
|
|
83
|
+
method: "GET",
|
|
84
|
+
path: "/:payoutId"
|
|
85
|
+
}).input(getPayoutInputSchema).output(payoutSchema);
|
|
86
|
+
const queuePayoutRoute = oc.route({
|
|
87
|
+
method: "POST",
|
|
88
|
+
path: "/:payoutId/queue"
|
|
89
|
+
}).input(getPayoutInputSchema).output(z.object({ success: z.boolean() }));
|
|
90
|
+
const upsertBankAccountRoute = oc.route({
|
|
91
|
+
method: "POST",
|
|
92
|
+
path: "/bank-accounts"
|
|
93
|
+
}).input(upsertBankAccountInputSchema).output(bankAccountSchema);
|
|
94
|
+
const getBankAccountRoute = oc.route({
|
|
95
|
+
method: "GET",
|
|
96
|
+
path: "/bank-accounts"
|
|
97
|
+
}).input(getBankAccountInputSchema).output(getBankAccountOutputSchema);
|
|
98
|
+
const getEffectiveBankAccountRoute = oc.route({
|
|
99
|
+
method: "GET",
|
|
100
|
+
path: "/bank-accounts/effective"
|
|
101
|
+
}).input(getEffectiveBankAccountInputSchema).output(getEffectiveBankAccountOutputSchema);
|
|
102
|
+
const getLocationBalanceRoute = oc.route({
|
|
103
|
+
method: "GET",
|
|
104
|
+
path: "/locations/:locationId/balance"
|
|
105
|
+
}).input(getLocationBalanceInputSchema).output(getLocationBalanceOutputSchema);
|
|
106
|
+
const listCompanyPayoutAccountsRoute = oc.route({
|
|
107
|
+
method: "GET",
|
|
108
|
+
path: "/company-accounts"
|
|
109
|
+
}).input(listCompanyPayoutAccountsInputSchema).output(z.array(companyPayoutAccountSchema));
|
|
110
|
+
const getCompanyPayoutAccountRoute = oc.route({
|
|
111
|
+
method: "GET",
|
|
112
|
+
path: "/company-accounts/:id"
|
|
113
|
+
}).input(getCompanyPayoutAccountInputSchema).output(companyPayoutAccountSchema);
|
|
114
|
+
const createCompanyPayoutAccountRoute = oc.route({
|
|
115
|
+
method: "POST",
|
|
116
|
+
path: "/company-accounts"
|
|
117
|
+
}).input(createCompanyPayoutAccountInputSchema).output(companyPayoutAccountSchema);
|
|
118
|
+
const updateCompanyPayoutAccountRoute = oc.route({
|
|
119
|
+
method: "PUT",
|
|
120
|
+
path: "/company-accounts/:id"
|
|
121
|
+
}).input(updateCompanyPayoutAccountInputSchema).output(companyPayoutAccountSchema);
|
|
122
|
+
const deleteCompanyPayoutAccountRoute = oc.route({
|
|
123
|
+
method: "DELETE",
|
|
124
|
+
path: "/company-accounts/:id"
|
|
125
|
+
}).input(deleteCompanyPayoutAccountInputSchema).output(z.object({ success: z.boolean() }));
|
|
126
|
+
const payoutReportRoute = oc.route({
|
|
127
|
+
method: "POST",
|
|
128
|
+
path: "/report"
|
|
129
|
+
}).input(payoutReportInputSchema).output(payoutReportOutputSchema);
|
|
130
|
+
const payoutsRouter = oc.router({
|
|
131
|
+
create: createPayoutRoute,
|
|
132
|
+
report: payoutReportRoute,
|
|
133
|
+
list: listPayoutsRoute,
|
|
134
|
+
get: getPayoutRoute,
|
|
135
|
+
queue: queuePayoutRoute,
|
|
136
|
+
getLocationBalance: getLocationBalanceRoute
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
//#endregion
|
|
140
|
+
//#region src/contract/routes/subscription-plans.ts
|
|
141
|
+
const createPlanRoute = oc.route({
|
|
142
|
+
method: "POST",
|
|
143
|
+
path: "/"
|
|
144
|
+
}).input(createSubscriptionPlanInputSchema).output(subscriptionPlanSchema);
|
|
145
|
+
const updatePlanRoute = oc.route({
|
|
146
|
+
method: "PUT",
|
|
147
|
+
path: "/:planId"
|
|
148
|
+
}).input(updateSubscriptionPlanInputSchema.extend({ planId: z.uuid() })).output(subscriptionPlanSchema);
|
|
149
|
+
const listPlansRoute = oc.route({
|
|
150
|
+
method: "GET",
|
|
151
|
+
path: "/"
|
|
152
|
+
}).input(z.void()).output(z.array(subscriptionPlanSchema));
|
|
153
|
+
const getPlanRoute = oc.route({
|
|
154
|
+
method: "GET",
|
|
155
|
+
path: "/:planId"
|
|
156
|
+
}).input(z.object({ planId: z.uuid() })).output(subscriptionPlanSchema);
|
|
157
|
+
const subscriptionPlansRoutes = {
|
|
158
|
+
create: createPlanRoute,
|
|
159
|
+
update: updatePlanRoute,
|
|
160
|
+
list: listPlansRoute,
|
|
161
|
+
get: getPlanRoute
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
//#endregion
|
|
165
|
+
//#region src/contract/routes/billing.ts
|
|
166
|
+
const merchantPlansRouter = oc.prefix("/plans").router({
|
|
167
|
+
create: subscriptionPlansRoutes.create,
|
|
168
|
+
update: subscriptionPlansRoutes.update,
|
|
169
|
+
list: subscriptionPlansRoutes.list,
|
|
170
|
+
get: subscriptionPlansRoutes.get
|
|
171
|
+
});
|
|
172
|
+
const invoicesRouter = oc.prefix("/invoices").router({
|
|
173
|
+
create: merchantInvoicesRoutes.create,
|
|
174
|
+
send: merchantInvoicesRoutes.send,
|
|
175
|
+
list: merchantInvoicesRoutes.list
|
|
176
|
+
});
|
|
177
|
+
const bankAccountsRouter = oc.prefix("/bank-accounts").router({
|
|
178
|
+
upsert: upsertBankAccountRoute,
|
|
179
|
+
get: getBankAccountRoute,
|
|
180
|
+
getEffective: getEffectiveBankAccountRoute
|
|
181
|
+
});
|
|
182
|
+
const companyPayoutAccountsRouter = oc.prefix("/company-accounts").router({
|
|
183
|
+
list: listCompanyPayoutAccountsRoute,
|
|
184
|
+
get: getCompanyPayoutAccountRoute,
|
|
185
|
+
create: createCompanyPayoutAccountRoute,
|
|
186
|
+
update: updateCompanyPayoutAccountRoute,
|
|
187
|
+
delete: deleteCompanyPayoutAccountRoute
|
|
188
|
+
});
|
|
189
|
+
const billingRouter = oc.router({
|
|
190
|
+
merchantPlans: merchantPlansRouter,
|
|
191
|
+
invoices: invoicesRouter,
|
|
192
|
+
bankAccounts: bankAccountsRouter,
|
|
193
|
+
companyPayoutAccounts: companyPayoutAccountsRouter
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
//#endregion
|
|
197
|
+
//#region src/contract/routes/catalog.ts
|
|
198
|
+
const listCatalogItemsRoute = oc.route({
|
|
199
|
+
method: "GET",
|
|
200
|
+
path: "/items"
|
|
201
|
+
}).input(listCatalogItemsInputSchema).output(listCatalogItemsOutputSchema);
|
|
202
|
+
const getCatalogItemRoute = oc.route({
|
|
203
|
+
method: "GET",
|
|
204
|
+
path: "/items/:itemId"
|
|
205
|
+
}).input(getCatalogItemInputSchema).output(getCatalogItemOutputSchema);
|
|
206
|
+
const listCatalogVariationsRoute = oc.route({
|
|
207
|
+
method: "GET",
|
|
208
|
+
path: "/items/:itemId/variations"
|
|
209
|
+
}).input(listCatalogVariationsInputSchema).output(listCatalogVariationsOutputSchema);
|
|
210
|
+
const listCatalogModifiersRoute = oc.route({
|
|
211
|
+
method: "GET",
|
|
212
|
+
path: "/items/:itemId/modifiers"
|
|
213
|
+
}).input(listCatalogModifiersInputSchema).output(listCatalogModifiersOutputSchema);
|
|
214
|
+
const listCatalogModifierListsRoute = oc.route({
|
|
215
|
+
method: "GET",
|
|
216
|
+
path: "/items/:itemId/modifier-lists"
|
|
217
|
+
}).input(listCatalogModifierListsInputSchema).output(listCatalogModifierListsOutputSchema);
|
|
218
|
+
const listCatalogCategoriesRoute = oc.route({
|
|
219
|
+
method: "GET",
|
|
220
|
+
path: "/categories"
|
|
221
|
+
}).input(listCatalogCategoriesInputSchema).output(listCatalogCategoriesOutputSchema);
|
|
222
|
+
const listCatalogCategoriesWithItemsRoute = oc.route({
|
|
223
|
+
method: "GET",
|
|
224
|
+
path: "/categories-with-items"
|
|
225
|
+
}).input(listCatalogCategoriesWithItemsInputSchema).output(listCatalogCategoriesWithItemsOutputSchema);
|
|
226
|
+
const linkItemWithCategoryRoute = oc.route({
|
|
227
|
+
method: "POST",
|
|
228
|
+
path: "/link-item-with-category"
|
|
229
|
+
}).input(linkItemWithCategoryInputSchema).output(linkOperationOutputSchema);
|
|
230
|
+
const linkItemWithModifierListRoute = oc.route({
|
|
231
|
+
method: "POST",
|
|
232
|
+
path: "/link-item-with-modifier-list"
|
|
233
|
+
}).input(linkItemWithModifierListInputSchema).output(linkOperationOutputSchema);
|
|
234
|
+
const linkItemWithImageRoute = oc.route({
|
|
235
|
+
method: "POST",
|
|
236
|
+
path: "/link-item-with-image"
|
|
237
|
+
}).input(linkItemWithImageInputSchema).output(linkOperationOutputSchema);
|
|
238
|
+
const unlinkItemWithCategoryRoute = oc.route({
|
|
239
|
+
method: "POST",
|
|
240
|
+
path: "/unlink-item-with-category"
|
|
241
|
+
}).input(unlinkItemWithCategoryInputSchema).output(linkOperationOutputSchema);
|
|
242
|
+
const unlinkItemWithModifierListRoute = oc.route({
|
|
243
|
+
method: "POST",
|
|
244
|
+
path: "/unlink-item-with-modifier-list"
|
|
245
|
+
}).input(unlinkItemWithModifierListInputSchema).output(linkOperationOutputSchema);
|
|
246
|
+
const unlinkItemWithImageRoute = oc.route({
|
|
247
|
+
method: "POST",
|
|
248
|
+
path: "/unlink-item-with-image"
|
|
249
|
+
}).input(unlinkItemWithImageInputSchema).output(linkOperationOutputSchema);
|
|
250
|
+
const upsertItemLocationOverrideRoute = oc.route({
|
|
251
|
+
method: "POST",
|
|
252
|
+
path: "/item-location-override"
|
|
253
|
+
}).input(upsertItemLocationOverrideInputSchema).output(linkOperationOutputSchema);
|
|
254
|
+
const upsertVariationLocationOverrideRoute = oc.route({
|
|
255
|
+
method: "POST",
|
|
256
|
+
path: "/variation-location-override"
|
|
257
|
+
}).input(upsertVariationLocationOverrideInputSchema).output(linkOperationOutputSchema);
|
|
258
|
+
const upsertModifierLocationOverrideRoute = oc.route({
|
|
259
|
+
method: "POST",
|
|
260
|
+
path: "/modifier-location-override"
|
|
261
|
+
}).input(upsertModifierLocationOverrideInputSchema).output(linkOperationOutputSchema);
|
|
262
|
+
const upsertModifierRoute = oc.route({
|
|
263
|
+
method: "POST",
|
|
264
|
+
path: "/modifiers/upsert"
|
|
265
|
+
}).input(upsertModifierInputSchema).output(mutationIdOutputSchema);
|
|
266
|
+
const upsertItemModifierOverrideRoute = oc.route({
|
|
267
|
+
method: "POST",
|
|
268
|
+
path: "/item-modifier-override"
|
|
269
|
+
}).input(upsertItemModifierOverrideInputSchema).output(linkOperationOutputSchema);
|
|
270
|
+
const upsertModifierDefaultLocationOverrideRoute = oc.route({
|
|
271
|
+
method: "POST",
|
|
272
|
+
path: "/modifier-default-location-override"
|
|
273
|
+
}).input(upsertModifierDefaultLocationOverrideInputSchema).output(linkOperationOutputSchema);
|
|
274
|
+
const getModifierRoute = oc.route({
|
|
275
|
+
method: "GET",
|
|
276
|
+
path: "/modifiers/:modifierId"
|
|
277
|
+
}).input(getModifierInputSchema).output(getModifierOutputSchema);
|
|
278
|
+
const getModifierListRoute = oc.route({
|
|
279
|
+
method: "GET",
|
|
280
|
+
path: "/modifier-lists/:modifierListId"
|
|
281
|
+
}).input(getModifierListInputSchema).output(getModifierListOutputSchema);
|
|
282
|
+
const updateModifierRoute = oc.route({
|
|
283
|
+
method: "PATCH",
|
|
284
|
+
path: "/modifiers/:modifierId"
|
|
285
|
+
}).input(updateModifierInputSchema).output(updateModifierOutputSchema);
|
|
286
|
+
const updateModifierListRoute = oc.route({
|
|
287
|
+
method: "PATCH",
|
|
288
|
+
path: "/modifier-lists/:modifierListId"
|
|
289
|
+
}).input(updateModifierListInputSchema).output(updateModifierListOutputSchema);
|
|
290
|
+
const deleteModifierRoute = oc.route({
|
|
291
|
+
method: "DELETE",
|
|
292
|
+
path: "/modifiers/:modifierId"
|
|
293
|
+
}).input(deleteModifierInputSchema).output(deleteModifierOutputSchema);
|
|
294
|
+
const deleteModifierListRoute = oc.route({
|
|
295
|
+
method: "DELETE",
|
|
296
|
+
path: "/modifier-lists/:modifierListId"
|
|
297
|
+
}).input(deleteModifierListInputSchema).output(deleteModifierListOutputSchema);
|
|
298
|
+
const upsertModifierOverrideRoute = oc.route({
|
|
299
|
+
method: "POST",
|
|
300
|
+
path: "/modifiers/overrides"
|
|
301
|
+
}).input(upsertModifierOverrideInputSchema).output(upsertModifierOverrideOutputSchema);
|
|
302
|
+
const deleteModifierOverrideRoute = oc.route({
|
|
303
|
+
method: "DELETE",
|
|
304
|
+
path: "/modifiers/overrides"
|
|
305
|
+
}).input(deleteModifierOverrideInputSchema).output(deleteModifierOverrideOutputSchema);
|
|
306
|
+
const createItemRoute = oc.route({
|
|
307
|
+
method: "POST",
|
|
308
|
+
path: "/items"
|
|
309
|
+
}).input(createItemInputSchema).output(createItemOutputSchema);
|
|
310
|
+
const updateItemRoute = oc.route({
|
|
311
|
+
method: "PATCH",
|
|
312
|
+
path: "/items/:itemId"
|
|
313
|
+
}).input(updateItemInputSchema).output(updateItemOutputSchema);
|
|
314
|
+
const deleteItemRoute = oc.route({
|
|
315
|
+
method: "DELETE",
|
|
316
|
+
path: "/items/:itemId"
|
|
317
|
+
}).input(deleteItemInputSchema).output(deleteItemOutputSchema);
|
|
318
|
+
const createVariationRoute = oc.route({
|
|
319
|
+
method: "POST",
|
|
320
|
+
path: "/variations"
|
|
321
|
+
}).input(createVariationInputSchema).output(createVariationOutputSchema);
|
|
322
|
+
const updateVariationRoute = oc.route({
|
|
323
|
+
method: "PATCH",
|
|
324
|
+
path: "/variations/:variationId"
|
|
325
|
+
}).input(updateVariationInputSchema).output(updateVariationOutputSchema);
|
|
326
|
+
const deleteVariationRoute = oc.route({
|
|
327
|
+
method: "DELETE",
|
|
328
|
+
path: "/variations/:variationId"
|
|
329
|
+
}).input(deleteVariationInputSchema).output(deleteVariationOutputSchema);
|
|
330
|
+
const createModifierListRoute = oc.route({
|
|
331
|
+
method: "POST",
|
|
332
|
+
path: "/modifier-lists"
|
|
333
|
+
}).input(createModifierListInputSchema).output(createModifierListOutputSchema);
|
|
334
|
+
const createModifierRoute = oc.route({
|
|
335
|
+
method: "POST",
|
|
336
|
+
path: "/modifiers"
|
|
337
|
+
}).input(createModifierInputSchema).output(createModifierOutputSchema);
|
|
338
|
+
const createCategoryRoute = oc.route({
|
|
339
|
+
method: "POST",
|
|
340
|
+
path: "/categories"
|
|
341
|
+
}).input(createCategoryInputSchema).output(createCategoryOutputSchema);
|
|
342
|
+
const getCategoryRoute = oc.route({
|
|
343
|
+
method: "GET",
|
|
344
|
+
path: "/categories/:categoryId"
|
|
345
|
+
}).input(getCategoryInputSchema).output(getCategoryOutputSchema);
|
|
346
|
+
const updateCategoryRoute = oc.route({
|
|
347
|
+
method: "PATCH",
|
|
348
|
+
path: "/categories/:categoryId"
|
|
349
|
+
}).input(updateCategoryInputSchema).output(updateCategoryOutputSchema);
|
|
350
|
+
const deleteCategoryRoute = oc.route({
|
|
351
|
+
method: "DELETE",
|
|
352
|
+
path: "/categories/:categoryId"
|
|
353
|
+
}).input(deleteCategoryInputSchema).output(deleteCategoryOutputSchema);
|
|
354
|
+
const createImageRoute = oc.route({
|
|
355
|
+
method: "POST",
|
|
356
|
+
path: "/images"
|
|
357
|
+
}).input(createImageInputSchema).output(createImageOutputSchema);
|
|
358
|
+
const uploadCatalogItemPhotoRoute = oc.route({
|
|
359
|
+
method: "POST",
|
|
360
|
+
path: "/items/:itemId/photo"
|
|
361
|
+
}).input(uploadCatalogItemPhotoInputSchema).output(uploadCatalogItemPhotoOutputSchema);
|
|
362
|
+
const catalogVariationsRouter = oc.router({
|
|
363
|
+
list: listCatalogVariationsRoute,
|
|
364
|
+
create: createVariationRoute,
|
|
365
|
+
update: updateVariationRoute,
|
|
366
|
+
delete: deleteVariationRoute
|
|
367
|
+
});
|
|
368
|
+
const catalogItemsRouter = oc.router({
|
|
369
|
+
list: listCatalogItemsRoute,
|
|
370
|
+
get: getCatalogItemRoute,
|
|
371
|
+
create: createItemRoute,
|
|
372
|
+
update: updateItemRoute,
|
|
373
|
+
delete: deleteItemRoute,
|
|
374
|
+
variations: catalogVariationsRouter
|
|
375
|
+
});
|
|
376
|
+
const catalogModifierListsRouter = oc.router({
|
|
377
|
+
list: listCatalogModifierListsRoute,
|
|
378
|
+
get: getModifierListRoute,
|
|
379
|
+
create: createModifierListRoute,
|
|
380
|
+
update: updateModifierListRoute,
|
|
381
|
+
delete: deleteModifierListRoute
|
|
382
|
+
});
|
|
383
|
+
const catalogModifierOverridesRouter = oc.router({
|
|
384
|
+
upsert: upsertModifierOverrideRoute,
|
|
385
|
+
delete: deleteModifierOverrideRoute
|
|
386
|
+
});
|
|
387
|
+
const catalogModifiersRouter = oc.router({
|
|
388
|
+
list: listCatalogModifiersRoute,
|
|
389
|
+
get: getModifierRoute,
|
|
390
|
+
create: createModifierRoute,
|
|
391
|
+
update: updateModifierRoute,
|
|
392
|
+
delete: deleteModifierRoute,
|
|
393
|
+
lists: catalogModifierListsRouter,
|
|
394
|
+
overrides: catalogModifierOverridesRouter
|
|
395
|
+
});
|
|
396
|
+
const catalogCategoriesRouter = oc.router({
|
|
397
|
+
list: listCatalogCategoriesRoute,
|
|
398
|
+
listWithItems: listCatalogCategoriesWithItemsRoute,
|
|
399
|
+
get: getCategoryRoute,
|
|
400
|
+
create: createCategoryRoute,
|
|
401
|
+
update: updateCategoryRoute,
|
|
402
|
+
delete: deleteCategoryRoute
|
|
403
|
+
});
|
|
404
|
+
const catalogLinksRouter = oc.router({
|
|
405
|
+
linkItemWithCategory: linkItemWithCategoryRoute,
|
|
406
|
+
linkItemWithModifierList: linkItemWithModifierListRoute,
|
|
407
|
+
linkItemWithImage: linkItemWithImageRoute,
|
|
408
|
+
unlinkItemWithCategory: unlinkItemWithCategoryRoute,
|
|
409
|
+
unlinkItemWithModifierList: unlinkItemWithModifierListRoute,
|
|
410
|
+
unlinkItemWithImage: unlinkItemWithImageRoute
|
|
411
|
+
});
|
|
412
|
+
const catalogOverridesRouter = oc.router({
|
|
413
|
+
upsertItemLocationOverride: upsertItemLocationOverrideRoute,
|
|
414
|
+
upsertVariationLocationOverride: upsertVariationLocationOverrideRoute,
|
|
415
|
+
upsertModifierLocationOverride: upsertModifierLocationOverrideRoute,
|
|
416
|
+
upsertModifier: upsertModifierRoute,
|
|
417
|
+
upsertItemModifierOverride: upsertItemModifierOverrideRoute,
|
|
418
|
+
upsertModifierDefaultLocationOverride: upsertModifierDefaultLocationOverrideRoute
|
|
419
|
+
});
|
|
420
|
+
const catalogMediaRouter = oc.router({
|
|
421
|
+
createImage: createImageRoute,
|
|
422
|
+
uploadItemPhoto: uploadCatalogItemPhotoRoute
|
|
423
|
+
});
|
|
424
|
+
const catalogRouter = oc.router({
|
|
425
|
+
items: catalogItemsRouter,
|
|
426
|
+
modifiers: catalogModifiersRouter,
|
|
427
|
+
categories: catalogCategoriesRouter,
|
|
428
|
+
links: catalogLinksRouter,
|
|
429
|
+
overrides: catalogOverridesRouter,
|
|
430
|
+
media: catalogMediaRouter
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
//#endregion
|
|
434
|
+
//#region src/contract/routes/customers.ts
|
|
435
|
+
const upsertCustomerRoute = oc.route({
|
|
436
|
+
method: "POST",
|
|
437
|
+
path: "/"
|
|
438
|
+
}).input(upsertCustomerInputSchema).output(customerBaseSchema);
|
|
439
|
+
const meCustomerRoute = oc.route({
|
|
440
|
+
method: "GET",
|
|
441
|
+
path: "/me"
|
|
442
|
+
}).input(z.void()).output(customerBaseSchema);
|
|
443
|
+
const getCustomerRoute = oc.route({
|
|
444
|
+
method: "GET",
|
|
445
|
+
path: "/:customerId"
|
|
446
|
+
}).input(customerByIdInputSchema).output(customerBaseSchema);
|
|
447
|
+
const listCustomersRoute = oc.route({
|
|
448
|
+
method: "GET",
|
|
449
|
+
path: "/"
|
|
450
|
+
}).input(listCustomersInputSchema).output(listCustomersOutputSchema);
|
|
451
|
+
const createCustomerAddressRoute = oc.route({
|
|
452
|
+
method: "POST",
|
|
453
|
+
path: "/"
|
|
454
|
+
}).input(createCustomerAddressInputSchema).output(customerAddressOutputSchema);
|
|
455
|
+
const getCustomerAddressRoute = oc.route({
|
|
456
|
+
method: "GET",
|
|
457
|
+
path: "/:addressId"
|
|
458
|
+
}).input(customerAddressByIdInputSchema).output(customerAddressOutputSchema);
|
|
459
|
+
const listCustomerAddressesRoute = oc.route({
|
|
460
|
+
method: "GET",
|
|
461
|
+
path: "/"
|
|
462
|
+
}).input(listCustomerAddressesInputSchema).output(listCustomerAddressesOutputSchema);
|
|
463
|
+
const updateCustomerAddressRoute = oc.route({
|
|
464
|
+
method: "PUT",
|
|
465
|
+
path: "/:addressId"
|
|
466
|
+
}).input(customerAddressBaseSchema).output(customerAddressOutputSchema);
|
|
467
|
+
const deleteCustomerAddressRoute = oc.route({
|
|
468
|
+
method: "DELETE",
|
|
469
|
+
path: "/:addressId"
|
|
470
|
+
}).input(customerAddressByIdInputSchema).output(z.void());
|
|
471
|
+
const deleteMerchantCustomerRoute = oc.route({
|
|
472
|
+
method: "DELETE",
|
|
473
|
+
path: "/:customerId"
|
|
474
|
+
}).input(deleteMerchantCustomerInputSchema).output(z.void());
|
|
475
|
+
const deleteCustomerRoute = oc.route({
|
|
476
|
+
method: "DELETE",
|
|
477
|
+
path: "/:customerId"
|
|
478
|
+
}).input(deleteCustomerInputSchema).output(z.void());
|
|
479
|
+
const getMerchantCustomerRoute = oc.route({
|
|
480
|
+
method: "GET",
|
|
481
|
+
path: "/:customerId"
|
|
482
|
+
}).input(merchantCustomerByIdInputSchema).output(merchantCustomerOutputSchema);
|
|
483
|
+
const listMerchantCustomersRoute = oc.route({
|
|
484
|
+
method: "GET",
|
|
485
|
+
path: "/"
|
|
486
|
+
}).input(listMerchantCustomersInputSchema).output(listMerchantCustomersOutputSchema);
|
|
487
|
+
const createMerchantCustomerRoute = oc.route({
|
|
488
|
+
method: "POST",
|
|
489
|
+
path: "/"
|
|
490
|
+
}).input(createMerchantCustomerManualInputSchema).output(createMerchantCustomerManualOutputSchema);
|
|
491
|
+
const createCustomerRoute = oc.route({
|
|
492
|
+
method: "POST",
|
|
493
|
+
path: "/"
|
|
494
|
+
}).input(createCustomerManualInputSchema).output(createCustomerManualOutputSchema);
|
|
495
|
+
const customerAddressesRouter = oc.router({
|
|
496
|
+
create: createCustomerAddressRoute,
|
|
497
|
+
get: getCustomerAddressRoute,
|
|
498
|
+
list: listCustomerAddressesRoute,
|
|
499
|
+
update: updateCustomerAddressRoute,
|
|
500
|
+
delete: deleteCustomerAddressRoute
|
|
501
|
+
});
|
|
502
|
+
const bulkImportCustomersRoute = oc.route({
|
|
503
|
+
method: "POST",
|
|
504
|
+
path: "/bulk/import"
|
|
505
|
+
}).input(bulkCustomerImportInputSchema).output(bulkCustomerImportResultSchema);
|
|
506
|
+
const bulkExportCustomersRoute = oc.route({
|
|
507
|
+
method: "POST",
|
|
508
|
+
path: "/bulk/export"
|
|
509
|
+
}).input(bulkCustomerExportInputSchema).output(bulkCustomerExportResultSchema);
|
|
510
|
+
const customersRouter = oc.router({
|
|
511
|
+
create: createCustomerRoute,
|
|
512
|
+
get: getCustomerRoute,
|
|
513
|
+
list: listCustomersRoute,
|
|
514
|
+
update: upsertCustomerRoute,
|
|
515
|
+
delete: deleteCustomerRoute,
|
|
516
|
+
me: meCustomerRoute,
|
|
517
|
+
bulkImport: bulkImportCustomersRoute,
|
|
518
|
+
bulkExport: bulkExportCustomersRoute,
|
|
519
|
+
addresses: customerAddressesRouter
|
|
520
|
+
});
|
|
521
|
+
|
|
522
|
+
//#endregion
|
|
523
|
+
//#region src/contract/routes/discounts.ts
|
|
524
|
+
const listDiscountsRoute = oc.route({
|
|
525
|
+
method: "GET",
|
|
526
|
+
path: "/"
|
|
527
|
+
}).input(listDiscountsInputSchema).output(discountListOutputSchema);
|
|
528
|
+
const createDiscountRoute = oc.route({
|
|
529
|
+
method: "POST",
|
|
530
|
+
path: "/"
|
|
531
|
+
}).input(createDiscountInputSchema).output(discountOutputSchema);
|
|
532
|
+
const updateDiscountRoute = oc.route({
|
|
533
|
+
method: "PUT",
|
|
534
|
+
path: "/:discountId"
|
|
535
|
+
}).input(updateDiscountInputSchema).output(discountOutputSchema);
|
|
536
|
+
const deleteDiscountRoute = oc.route({
|
|
537
|
+
method: "DELETE",
|
|
538
|
+
path: "/:discountId"
|
|
539
|
+
}).input(discountIdInputSchema).output(z.void());
|
|
540
|
+
const getDiscountRoute = oc.route({
|
|
541
|
+
method: "GET",
|
|
542
|
+
path: "/:discountId"
|
|
543
|
+
}).input(discountIdInputSchema).output(discountOutputSchema);
|
|
544
|
+
const discountsRouter = oc.router({
|
|
545
|
+
list: listDiscountsRoute,
|
|
546
|
+
create: createDiscountRoute,
|
|
547
|
+
update: updateDiscountRoute,
|
|
548
|
+
delete: deleteDiscountRoute,
|
|
549
|
+
get: getDiscountRoute
|
|
550
|
+
});
|
|
551
|
+
|
|
552
|
+
//#endregion
|
|
553
|
+
//#region src/contract/routes/leads.ts
|
|
554
|
+
/**
|
|
555
|
+
* Route contract for creating a lead as admin
|
|
556
|
+
* Creates a merchant and adds lead to CRM
|
|
557
|
+
*/
|
|
558
|
+
const createLeadRoute = oc.route({
|
|
559
|
+
method: "POST",
|
|
560
|
+
path: "/"
|
|
561
|
+
}).input(createLeadForAdminInputSchema).output(createLeadForAdminOutputSchema);
|
|
562
|
+
const leadsRouter = oc.router({ create: createLeadRoute });
|
|
563
|
+
|
|
564
|
+
//#endregion
|
|
565
|
+
//#region src/contract/routes/fulfillments.ts
|
|
566
|
+
const upsertDeliveryFulfillmentRoute = oc.route({
|
|
567
|
+
method: "PUT",
|
|
568
|
+
path: "/locations/:locationId/fulfillments/delivery",
|
|
569
|
+
summary: "Upsert delivery fulfillment settings",
|
|
570
|
+
description: "Create or update delivery fulfillment configuration for a location",
|
|
571
|
+
tags: ["locations", "fulfillments"],
|
|
572
|
+
successDescription: "Delivery fulfillment settings updated successfully"
|
|
573
|
+
}).input(upsertDeliveryInputSchema).output(locationMutationOutputSchema);
|
|
574
|
+
const removeDeliveryFulfillmentRoute = oc.route({
|
|
575
|
+
method: "DELETE",
|
|
576
|
+
path: "/locations/:locationId/fulfillments/delivery",
|
|
577
|
+
summary: "Remove delivery fulfillment settings",
|
|
578
|
+
description: "Remove delivery fulfillment configuration from a location",
|
|
579
|
+
tags: ["locations", "fulfillments"],
|
|
580
|
+
successDescription: "Delivery fulfillment settings removed successfully"
|
|
581
|
+
}).input(removeDeliveryInputSchema).output(locationMutationOutputSchema);
|
|
582
|
+
const upsertPickupFulfillmentRoute = oc.route({
|
|
583
|
+
method: "PUT",
|
|
584
|
+
path: "/locations/:locationId/fulfillments/pickup",
|
|
585
|
+
summary: "Upsert pickup fulfillment settings",
|
|
586
|
+
description: "Create or update pickup fulfillment configuration for a location",
|
|
587
|
+
tags: ["locations", "fulfillments"],
|
|
588
|
+
successDescription: "Pickup fulfillment settings updated successfully"
|
|
589
|
+
}).input(upsertPickupInputSchema).output(locationMutationOutputSchema);
|
|
590
|
+
const upsertDineInFulfillmentRoute = oc.route({
|
|
591
|
+
method: "PUT",
|
|
592
|
+
path: "/locations/:locationId/fulfillments/dinein",
|
|
593
|
+
summary: "Upsert dinein fulfillment settings",
|
|
594
|
+
description: "Create or update dinein fulfillment configuration for a location",
|
|
595
|
+
tags: ["locations", "fulfillments"],
|
|
596
|
+
successDescription: "Dinein fulfillment settings updated successfully"
|
|
597
|
+
}).input(upsertDineInInputSchema).output(locationMutationOutputSchema);
|
|
598
|
+
const upsertCurbsideFulfillmentRoute = oc.route({
|
|
599
|
+
method: "PUT",
|
|
600
|
+
path: "/locations/:locationId/fulfillments/curbside",
|
|
601
|
+
summary: "Upsert curbside fulfillment settings",
|
|
602
|
+
description: "Create or update curbside fulfillment configuration for a location",
|
|
603
|
+
tags: ["locations", "fulfillments"],
|
|
604
|
+
successDescription: "Curbside fulfillment settings updated successfully"
|
|
605
|
+
}).input(upsertCurbsideInputSchema).output(locationMutationOutputSchema);
|
|
606
|
+
const addCurbsideSpotFulfillmentRoute = oc.route({
|
|
607
|
+
method: "POST",
|
|
608
|
+
path: "/locations/:locationId/fulfillments/curbside/spots",
|
|
609
|
+
summary: "Add curbside spot",
|
|
610
|
+
description: "Add a new curbside parking spot to a location",
|
|
611
|
+
tags: ["locations", "fulfillments"],
|
|
612
|
+
successDescription: "Curbside spot added successfully"
|
|
613
|
+
}).input(addCurbsideSpotInputSchema).output(locationMutationOutputSchema);
|
|
614
|
+
const removeCurbsideSpotFulfillmentRoute = oc.route({
|
|
615
|
+
method: "DELETE",
|
|
616
|
+
path: "/locations/:locationId/fulfillments/curbside/spots/:spotId",
|
|
617
|
+
summary: "Remove curbside spot",
|
|
618
|
+
description: "Remove a curbside parking spot from a location",
|
|
619
|
+
tags: ["locations", "fulfillments"],
|
|
620
|
+
successDescription: "Curbside spot removed successfully"
|
|
621
|
+
}).input(removeCurbsideSpotInputSchema).output(locationMutationOutputSchema);
|
|
622
|
+
const addDeliveryProviderRoute = oc.route({
|
|
623
|
+
method: "POST",
|
|
624
|
+
path: "/locations/:locationId/fulfillments/delivery/providers",
|
|
625
|
+
summary: "Add delivery provider",
|
|
626
|
+
description: "Add a new delivery provider to location configuration",
|
|
627
|
+
tags: ["locations", "fulfillments"],
|
|
628
|
+
successDescription: "Delivery provider added successfully"
|
|
629
|
+
}).input(addProviderInputSchema).output(locationMutationOutputSchema);
|
|
630
|
+
const updateDeliveryProviderRoute = oc.route({
|
|
631
|
+
method: "PATCH",
|
|
632
|
+
path: "/locations/:locationId/fulfillments/delivery/providers/:provider",
|
|
633
|
+
summary: "Update delivery provider",
|
|
634
|
+
description: "Update delivery provider configuration",
|
|
635
|
+
tags: ["locations", "fulfillments"],
|
|
636
|
+
successDescription: "Delivery provider updated successfully"
|
|
637
|
+
}).input(updateProviderInputSchema).output(locationMutationOutputSchema);
|
|
638
|
+
const removeDeliveryProviderRoute = oc.route({
|
|
639
|
+
method: "DELETE",
|
|
640
|
+
path: "/locations/:locationId/fulfillments/delivery/providers/:provider",
|
|
641
|
+
summary: "Remove delivery provider",
|
|
642
|
+
description: "Remove a delivery provider from location configuration",
|
|
643
|
+
tags: ["locations", "fulfillments"],
|
|
644
|
+
successDescription: "Delivery provider removed successfully"
|
|
645
|
+
}).input(removeProviderInputSchema).output(locationMutationOutputSchema);
|
|
646
|
+
const listLocationWhatsAppGroupsRoute = oc.route({
|
|
647
|
+
method: "GET",
|
|
648
|
+
path: "/locations/:locationId/chats/groups",
|
|
649
|
+
summary: "List location WhatsApp groups",
|
|
650
|
+
description: "Get all WhatsApp groups linked to this location",
|
|
651
|
+
tags: ["locations", "chats"],
|
|
652
|
+
successDescription: "Location WhatsApp groups retrieved successfully"
|
|
653
|
+
}).input(listLocationWhatsAppGroupsInputSchema).output(listLocationWhatsAppGroupsOutputSchema);
|
|
654
|
+
const createLocationWhatsAppGroupRoute = oc.route({
|
|
655
|
+
method: "POST",
|
|
656
|
+
path: "/locations/:locationId/chats/groups/create",
|
|
657
|
+
summary: "Create new WhatsApp group",
|
|
658
|
+
description: "Create a new WhatsApp group and link it to this location",
|
|
659
|
+
tags: ["locations", "chats"],
|
|
660
|
+
successDescription: "WhatsApp group created successfully"
|
|
661
|
+
}).input(createWhatsAppGroupInputSchema).output(createWhatsAppGroupOutputSchema);
|
|
662
|
+
const linkLocationWhatsAppGroupRoute = oc.route({
|
|
663
|
+
method: "POST",
|
|
664
|
+
path: "/locations/:locationId/chats/groups/link",
|
|
665
|
+
summary: "Link WhatsApp group to location",
|
|
666
|
+
description: "Connect an existing WhatsApp group to this location",
|
|
667
|
+
tags: ["locations", "chats"],
|
|
668
|
+
successDescription: "WhatsApp group linked successfully"
|
|
669
|
+
}).input(linkWhatsAppGroupInputSchema).output(linkWhatsAppGroupOutputSchema);
|
|
670
|
+
const updateLocationWhatsAppGroupRoute = oc.route({
|
|
671
|
+
method: "PATCH",
|
|
672
|
+
path: "/locations/:locationId/chats/groups/:groupId",
|
|
673
|
+
summary: "Update WhatsApp group",
|
|
674
|
+
description: "Update group name or active status",
|
|
675
|
+
tags: ["locations", "chats"],
|
|
676
|
+
successDescription: "WhatsApp group updated successfully"
|
|
677
|
+
}).input(updateWhatsAppGroupInputSchema).output(locationMutationOutputSchema);
|
|
678
|
+
const deleteLocationWhatsAppGroupRoute = oc.route({
|
|
679
|
+
method: "DELETE",
|
|
680
|
+
path: "/locations/:locationId/chats/groups/:groupId",
|
|
681
|
+
summary: "Delete WhatsApp group",
|
|
682
|
+
description: "Remove WhatsApp group from location",
|
|
683
|
+
tags: ["locations", "chats"],
|
|
684
|
+
successDescription: "WhatsApp group deleted successfully"
|
|
685
|
+
}).input(deleteWhatsAppGroupInputSchema).output(locationMutationOutputSchema);
|
|
686
|
+
const listAvailableWhatsAppGroupsRoute = oc.route({
|
|
687
|
+
method: "GET",
|
|
688
|
+
path: "/merchants/:merchantId/chats/groups/available",
|
|
689
|
+
summary: "List available WhatsApp groups",
|
|
690
|
+
description: "Fetch all WhatsApp groups from the connected account",
|
|
691
|
+
tags: ["merchants", "chats"],
|
|
692
|
+
successDescription: "Available groups retrieved successfully"
|
|
693
|
+
}).input(listAvailableWhatsAppGroupsInputSchema).output(listAvailableWhatsAppGroupsOutputSchema);
|
|
694
|
+
const upsertFulfillmentBusinessHoursRoute = oc.route({
|
|
695
|
+
method: "PUT",
|
|
696
|
+
path: "/locations/:locationId/fulfillments/:fulfillmentType/business-hours",
|
|
697
|
+
summary: "Upsert business hours for a fulfillment type",
|
|
698
|
+
description: "Create or update operating hours for a specific fulfillment type (PICKUP, DELIVERY, DINEIN, CURBSIDE)",
|
|
699
|
+
tags: [
|
|
700
|
+
"locations",
|
|
701
|
+
"fulfillments",
|
|
702
|
+
"business-hours"
|
|
703
|
+
],
|
|
704
|
+
successDescription: "Business hours updated successfully"
|
|
705
|
+
}).input(upsertFulfillmentBusinessHoursInputSchema).output(fulfillmentBusinessHoursOutputSchema);
|
|
706
|
+
const deleteFulfillmentBusinessHoursRoute = oc.route({
|
|
707
|
+
method: "DELETE",
|
|
708
|
+
path: "/locations/:locationId/fulfillments/:fulfillmentType/business-hours",
|
|
709
|
+
summary: "Delete business hours for a fulfillment type",
|
|
710
|
+
description: "Remove operating hours for a specific fulfillment type without affecting fulfillment configuration",
|
|
711
|
+
tags: [
|
|
712
|
+
"locations",
|
|
713
|
+
"fulfillments",
|
|
714
|
+
"business-hours"
|
|
715
|
+
],
|
|
716
|
+
successDescription: "Business hours deleted successfully"
|
|
717
|
+
}).input(deleteFulfillmentBusinessHoursInputSchema).output(z$1.object({ success: z$1.boolean() }));
|
|
718
|
+
const fulfillmentRoutes = {
|
|
719
|
+
delivery: {
|
|
720
|
+
upsert: upsertDeliveryFulfillmentRoute,
|
|
721
|
+
remove: removeDeliveryFulfillmentRoute,
|
|
722
|
+
providers: {
|
|
723
|
+
add: addDeliveryProviderRoute,
|
|
724
|
+
update: updateDeliveryProviderRoute,
|
|
725
|
+
remove: removeDeliveryProviderRoute
|
|
726
|
+
}
|
|
727
|
+
},
|
|
728
|
+
pickup: { upsert: upsertPickupFulfillmentRoute },
|
|
729
|
+
dinein: { upsert: upsertDineInFulfillmentRoute },
|
|
730
|
+
curbside: {
|
|
731
|
+
upsert: upsertCurbsideFulfillmentRoute,
|
|
732
|
+
spots: {
|
|
733
|
+
add: addCurbsideSpotFulfillmentRoute,
|
|
734
|
+
remove: removeCurbsideSpotFulfillmentRoute
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
businessHours: {
|
|
738
|
+
upsert: upsertFulfillmentBusinessHoursRoute,
|
|
739
|
+
delete: deleteFulfillmentBusinessHoursRoute
|
|
740
|
+
}
|
|
741
|
+
};
|
|
742
|
+
|
|
743
|
+
//#endregion
|
|
744
|
+
//#region src/contract/routes/locations.ts
|
|
745
|
+
const listLocationsRoute = oc.route({
|
|
746
|
+
method: "GET",
|
|
747
|
+
path: "/"
|
|
748
|
+
}).input(listLocationsInputSchema).output(listLocationsOutputSchema);
|
|
749
|
+
const createAddressRoute = oc.route({
|
|
750
|
+
method: "POST",
|
|
751
|
+
path: "/:locationId/address"
|
|
752
|
+
}).input(createAddressForLocationInputSchema).output(z.object({ address: createAddressInputSchema }));
|
|
753
|
+
const getLocationByIdRoute = oc.route({
|
|
754
|
+
method: "GET",
|
|
755
|
+
path: "/:locationId"
|
|
756
|
+
}).input(locationIdInputSchema).output(locationSchema);
|
|
757
|
+
const createLocationRoute = oc.route({
|
|
758
|
+
method: "POST",
|
|
759
|
+
path: "/"
|
|
760
|
+
}).input(createLocationInputSchema).output(locationMutationOutputSchema);
|
|
761
|
+
const updateLocationRoute = oc.route({
|
|
762
|
+
method: "PUT",
|
|
763
|
+
path: "/:locationId"
|
|
764
|
+
}).input(locationIdInputSchema.merge(updateLocationInputSchema)).output(locationMutationOutputSchema);
|
|
765
|
+
const upsertThemeRoute = oc.route({
|
|
766
|
+
method: "PUT",
|
|
767
|
+
path: "/:locationId/theme"
|
|
768
|
+
}).input(upsertLocationThemeInputSchema).output(locationMutationOutputSchema);
|
|
769
|
+
const removeThemeRoute = oc.route({
|
|
770
|
+
method: "DELETE",
|
|
771
|
+
path: "/:locationId/theme"
|
|
772
|
+
}).input(removeLocationThemeInputSchema).output(locationMutationOutputSchema);
|
|
773
|
+
const uploadLocationPhotoRoute = oc.route({
|
|
774
|
+
method: "POST",
|
|
775
|
+
path: "/:locationId/photo"
|
|
776
|
+
}).input(uploadLocationPhotoInputSchema).output(uploadLocationPhotoOutputSchema);
|
|
777
|
+
const uploadLocationBannerRoute = oc.route({
|
|
778
|
+
method: "POST",
|
|
779
|
+
path: "/:locationId/banner"
|
|
780
|
+
}).input(uploadLocationBannerInputSchema).output(uploadLocationBannerOutputSchema);
|
|
781
|
+
const createLocationSocialOverrideRoute = oc.route({
|
|
782
|
+
method: "POST",
|
|
783
|
+
path: "/:locationId/socials-override",
|
|
784
|
+
summary: "Create location social override",
|
|
785
|
+
description: "Create or update a social override for a location. If an override already exists for the platform, it will be replaced.",
|
|
786
|
+
tags: ["locations", "socials"]
|
|
787
|
+
}).input(locationIdInputSchema.merge(z.object({ body: createSocialInputSchema }))).output(socialBaseSchema);
|
|
788
|
+
const getLocationSocialOverridesRoute = oc.route({
|
|
789
|
+
method: "GET",
|
|
790
|
+
path: "/:locationId/socials-override",
|
|
791
|
+
summary: "Get location social overrides",
|
|
792
|
+
description: "Get all social overrides for a location (raw overrides, not merged with merchant socials)",
|
|
793
|
+
tags: ["locations", "socials"]
|
|
794
|
+
}).input(locationIdInputSchema).output(z.array(socialBaseSchema));
|
|
795
|
+
const deleteLocationSocialOverrideRoute = oc.route({
|
|
796
|
+
method: "DELETE",
|
|
797
|
+
path: "/:locationId/socials-override/:overrideId",
|
|
798
|
+
summary: "Delete location social override",
|
|
799
|
+
description: "Delete a social override for a location. After deletion, the location will fall back to the merchant social for that platform.",
|
|
800
|
+
tags: ["locations", "socials"]
|
|
801
|
+
}).input(locationIdInputSchema.merge(z.object({ overrideId: z.uuid() }))).output(z.void());
|
|
802
|
+
const upsertLocationBusinessHoursRoute = oc.route({
|
|
803
|
+
method: "PUT",
|
|
804
|
+
path: "/:locationId/business-hours",
|
|
805
|
+
summary: "Upsert general business hours for location",
|
|
806
|
+
description: "Create or update general operating hours for a location (fulfillmentType = GENERAL).",
|
|
807
|
+
tags: ["locations", "business-hours"],
|
|
808
|
+
successDescription: "Location business hours updated successfully"
|
|
809
|
+
}).input(upsertLocationBusinessHoursInputSchema).output(fulfillmentBusinessHoursOutputSchema);
|
|
810
|
+
const deleteLocationBusinessHoursRoute = oc.route({
|
|
811
|
+
method: "DELETE",
|
|
812
|
+
path: "/:locationId/business-hours",
|
|
813
|
+
summary: "Delete general business hours for location",
|
|
814
|
+
description: "Remove general operating hours for a location (fulfillmentType = GENERAL).",
|
|
815
|
+
tags: ["locations", "business-hours"],
|
|
816
|
+
successDescription: "Location business hours deleted successfully"
|
|
817
|
+
}).input(deleteLocationBusinessHoursInputSchema).output(z.object({ success: z.boolean() }));
|
|
818
|
+
const locationsRouter = oc.router({
|
|
819
|
+
list: listLocationsRoute,
|
|
820
|
+
get: getLocationByIdRoute,
|
|
821
|
+
create: createLocationRoute,
|
|
822
|
+
update: updateLocationRoute,
|
|
823
|
+
createAddress: createAddressRoute,
|
|
824
|
+
upsertTheme: upsertThemeRoute,
|
|
825
|
+
removeTheme: removeThemeRoute,
|
|
826
|
+
businessHours: oc.router({
|
|
827
|
+
upsert: upsertLocationBusinessHoursRoute,
|
|
828
|
+
delete: deleteLocationBusinessHoursRoute
|
|
829
|
+
}),
|
|
830
|
+
fulfillments: oc.router({
|
|
831
|
+
delivery: oc.router({
|
|
832
|
+
upsert: fulfillmentRoutes.delivery.upsert,
|
|
833
|
+
remove: fulfillmentRoutes.delivery.remove
|
|
834
|
+
}),
|
|
835
|
+
pickup: oc.router({ upsert: fulfillmentRoutes.pickup.upsert }),
|
|
836
|
+
dinein: oc.router({ upsert: fulfillmentRoutes.dinein.upsert }),
|
|
837
|
+
curbside: oc.router({
|
|
838
|
+
upsert: fulfillmentRoutes.curbside.upsert,
|
|
839
|
+
spots: oc.router({
|
|
840
|
+
add: fulfillmentRoutes.curbside.spots.add,
|
|
841
|
+
remove: fulfillmentRoutes.curbside.spots.remove
|
|
842
|
+
})
|
|
843
|
+
}),
|
|
844
|
+
businessHours: oc.router({
|
|
845
|
+
upsert: fulfillmentRoutes.businessHours.upsert,
|
|
846
|
+
delete: fulfillmentRoutes.businessHours.delete
|
|
847
|
+
})
|
|
848
|
+
}),
|
|
849
|
+
chats: oc.router({ groups: oc.router({
|
|
850
|
+
list: listLocationWhatsAppGroupsRoute,
|
|
851
|
+
create: createLocationWhatsAppGroupRoute,
|
|
852
|
+
link: linkLocationWhatsAppGroupRoute,
|
|
853
|
+
update: updateLocationWhatsAppGroupRoute,
|
|
854
|
+
delete: deleteLocationWhatsAppGroupRoute
|
|
855
|
+
}) }),
|
|
856
|
+
socials: oc.router({ override: oc.router({
|
|
857
|
+
create: createLocationSocialOverrideRoute,
|
|
858
|
+
list: getLocationSocialOverridesRoute,
|
|
859
|
+
delete: deleteLocationSocialOverrideRoute
|
|
860
|
+
}) }),
|
|
861
|
+
uploadPhoto: uploadLocationPhotoRoute,
|
|
862
|
+
uploadBanner: uploadLocationBannerRoute
|
|
863
|
+
});
|
|
864
|
+
|
|
865
|
+
//#endregion
|
|
866
|
+
//#region src/contract/routes/merchants.ts
|
|
867
|
+
const merchantSyncRoute = oc.route({
|
|
868
|
+
method: "POST",
|
|
869
|
+
path: "/sync"
|
|
870
|
+
}).input(z.void()).output(merchantSyncEventSchema);
|
|
871
|
+
const getMerchantRoute = oc.route({
|
|
872
|
+
method: "GET",
|
|
873
|
+
path: "/:merchantId",
|
|
874
|
+
summary: "Get merchant",
|
|
875
|
+
description: "Get merchant details with legal details",
|
|
876
|
+
tags: ["merchants"]
|
|
877
|
+
}).input(merchantIdInputSchema).output(merchantFullDetailsSchema);
|
|
878
|
+
const createMerchantRoute = oc.route({
|
|
879
|
+
method: "POST",
|
|
880
|
+
path: "/"
|
|
881
|
+
}).input(createMerchantInputSchema).output(createMerchantOutputSchema);
|
|
882
|
+
const linkSquareIntegrationRouteForMerchantRoute = oc.route({
|
|
883
|
+
method: "POST",
|
|
884
|
+
path: "/square/link",
|
|
885
|
+
summary: "Link Square integration",
|
|
886
|
+
description: "Link a Square integration to a merchant",
|
|
887
|
+
tags: ["merchants", "square"]
|
|
888
|
+
}).input(linkSquareIntegrationInputSchema).output(linkSquareIntegrationOutputSchema);
|
|
889
|
+
const listMerchantsRoute = oc.route({
|
|
890
|
+
method: "GET",
|
|
891
|
+
path: "/",
|
|
892
|
+
summary: "List merchants",
|
|
893
|
+
description: "Get all merchants with pagination",
|
|
894
|
+
tags: ["merchants"]
|
|
895
|
+
}).input(listMerchantsInputSchema).output(listMerchantsOutputSchema);
|
|
896
|
+
const createMerchantSocialRoute = oc.route({
|
|
897
|
+
method: "POST",
|
|
898
|
+
path: "/:merchantId/socials",
|
|
899
|
+
summary: "Create merchant social",
|
|
900
|
+
description: "Create a new social account for a merchant",
|
|
901
|
+
tags: ["merchants", "socials"]
|
|
902
|
+
}).input(merchantIdInputSchema.merge(z.object({ body: createSocialInputSchema }))).output(socialBaseSchema);
|
|
903
|
+
const getMerchantSocialsRoute = oc.route({
|
|
904
|
+
method: "GET",
|
|
905
|
+
path: "/:merchantId/socials",
|
|
906
|
+
summary: "Get merchant socials",
|
|
907
|
+
description: "Get all socials for a merchant",
|
|
908
|
+
tags: ["merchants", "socials"]
|
|
909
|
+
}).input(merchantIdInputSchema).output(z.array(socialBaseSchema));
|
|
910
|
+
const updateMerchantSocialRoute = oc.route({
|
|
911
|
+
method: "PUT",
|
|
912
|
+
path: "/:merchantId/socials/:socialId",
|
|
913
|
+
summary: "Update merchant social",
|
|
914
|
+
description: "Update a social account for a merchant",
|
|
915
|
+
tags: ["merchants", "socials"]
|
|
916
|
+
}).input(merchantIdInputSchema.merge(z.object({
|
|
917
|
+
socialId: z.uuid(),
|
|
918
|
+
body: updateSocialInputSchema
|
|
919
|
+
}))).output(socialBaseSchema);
|
|
920
|
+
const deleteMerchantSocialRoute = oc.route({
|
|
921
|
+
method: "DELETE",
|
|
922
|
+
path: "/:merchantId/socials/:socialId",
|
|
923
|
+
summary: "Delete merchant social",
|
|
924
|
+
description: "Delete a social account for a merchant",
|
|
925
|
+
tags: ["merchants", "socials"]
|
|
926
|
+
}).input(merchantIdInputSchema.merge(z.object({ socialId: z.uuid() }))).output(z.void());
|
|
927
|
+
const createMerchantLegalDetailsRoute = oc.route({
|
|
928
|
+
method: "POST",
|
|
929
|
+
path: "/:merchantId/legal",
|
|
930
|
+
summary: "Create merchant legal details",
|
|
931
|
+
description: "Create legal details for a merchant (one-to-one relationship)",
|
|
932
|
+
tags: ["merchants", "legal"]
|
|
933
|
+
}).input(createMerchantLegalDetailsInputSchema).output(merchantLegalDetailsSchema);
|
|
934
|
+
const getMerchantLegalDetailsRoute = oc.route({
|
|
935
|
+
method: "GET",
|
|
936
|
+
path: "/:merchantId/legal",
|
|
937
|
+
summary: "Get merchant legal details",
|
|
938
|
+
description: "Get legal details for a merchant",
|
|
939
|
+
tags: ["merchants", "legal"]
|
|
940
|
+
}).input(merchantIdInputSchema).output(merchantLegalDetailsSchema.nullable());
|
|
941
|
+
const updateMerchantLegalDetailsRoute = oc.route({
|
|
942
|
+
method: "PUT",
|
|
943
|
+
path: "/:merchantId/legal",
|
|
944
|
+
summary: "Update merchant legal details",
|
|
945
|
+
description: "Update legal details for a merchant",
|
|
946
|
+
tags: ["merchants", "legal"]
|
|
947
|
+
}).input(updateMerchantLegalDetailsInputSchema).output(merchantLegalDetailsSchema);
|
|
948
|
+
const deleteMerchantLegalDetailsRoute = oc.route({
|
|
949
|
+
method: "DELETE",
|
|
950
|
+
path: "/:merchantId/legal",
|
|
951
|
+
summary: "Delete merchant legal details",
|
|
952
|
+
description: "Delete legal details for a merchant",
|
|
953
|
+
tags: ["merchants", "legal"]
|
|
954
|
+
}).input(merchantIdInputSchema).output(z.void());
|
|
955
|
+
const uploadCrnDocumentRoute = oc.route({
|
|
956
|
+
method: "POST",
|
|
957
|
+
path: "/:merchantId/legal/upload-crn",
|
|
958
|
+
summary: "Upload CRN document",
|
|
959
|
+
description: "Upload or replace CRN document (PDF or image) for merchant legal details",
|
|
960
|
+
tags: ["merchants", "legal"]
|
|
961
|
+
}).input(uploadCrnDocumentInputSchema).output(z.string());
|
|
962
|
+
const uploadVatDocumentRoute = oc.route({
|
|
963
|
+
method: "POST",
|
|
964
|
+
path: "/:merchantId/legal/upload-vat",
|
|
965
|
+
summary: "Upload VAT document",
|
|
966
|
+
description: "Upload or replace VAT document (PDF or image) for merchant legal details",
|
|
967
|
+
tags: ["merchants", "legal"]
|
|
968
|
+
}).input(uploadVatDocumentInputSchema).output(z.string());
|
|
969
|
+
const merchantLegalDetailsRouter = oc.prefix("/:merchantId/legal").router({
|
|
970
|
+
create: createMerchantLegalDetailsRoute,
|
|
971
|
+
get: getMerchantLegalDetailsRoute,
|
|
972
|
+
update: updateMerchantLegalDetailsRoute,
|
|
973
|
+
delete: deleteMerchantLegalDetailsRoute,
|
|
974
|
+
uploadCrn: uploadCrnDocumentRoute,
|
|
975
|
+
uploadVat: uploadVatDocumentRoute
|
|
976
|
+
});
|
|
977
|
+
const merchantInvoicesRouter = oc.prefix("/invoices").router({
|
|
978
|
+
create: merchantInvoicesRoutes.create,
|
|
979
|
+
send: merchantInvoicesRoutes.send,
|
|
980
|
+
list: merchantInvoicesRoutes.list
|
|
981
|
+
});
|
|
982
|
+
const merchantChatsRouter = oc.prefix("/chats").router({ availableGroups: listAvailableWhatsAppGroupsRoute });
|
|
983
|
+
const merchantSocialsRouter = oc.prefix("/:merchantId/socials").router({
|
|
984
|
+
create: createMerchantSocialRoute,
|
|
985
|
+
list: getMerchantSocialsRoute,
|
|
986
|
+
update: updateMerchantSocialRoute,
|
|
987
|
+
delete: deleteMerchantSocialRoute
|
|
988
|
+
});
|
|
989
|
+
const merchantsRouter = oc.router({
|
|
990
|
+
create: createMerchantRoute,
|
|
991
|
+
get: getMerchantRoute,
|
|
992
|
+
list: listMerchantsRoute,
|
|
993
|
+
syncSquare: merchantSyncRoute,
|
|
994
|
+
linkSquareIntegration: linkSquareIntegrationRouteForMerchantRoute,
|
|
995
|
+
invoices: merchantInvoicesRouter,
|
|
996
|
+
chats: merchantChatsRouter,
|
|
997
|
+
socials: merchantSocialsRouter,
|
|
998
|
+
legal: merchantLegalDetailsRouter
|
|
999
|
+
});
|
|
1000
|
+
|
|
1001
|
+
//#endregion
|
|
1002
|
+
//#region src/contract/routes/messages.ts
|
|
1003
|
+
const messagesContract = {
|
|
1004
|
+
send: oc.input(sendMessageInputSchema).output(sendMessageOutputSchema),
|
|
1005
|
+
sendMessage: oc.input(sendDirectMessageInputSchema).output(sendDirectMessageOutputSchema),
|
|
1006
|
+
templates: {
|
|
1007
|
+
create: oc.input(createMessageTemplateInputSchema).output(messageTemplateOutputSchema),
|
|
1008
|
+
list: oc.input(listMessageTemplatesInputSchema).output(listMessageTemplatesOutputSchema),
|
|
1009
|
+
get: oc.input(messageTemplateByIdInputSchema).output(messageTemplateOutputSchema),
|
|
1010
|
+
update: oc.input(messageTemplateByIdInputSchema.extend({ data: updateMessageTemplateInputSchema })).output(messageTemplateOutputSchema),
|
|
1011
|
+
delete: oc.input(messageTemplateByIdInputSchema).output(z.void()),
|
|
1012
|
+
getAvailableResources: oc.input(z.void()).output(availableTemplateResourcesSchema)
|
|
1013
|
+
},
|
|
1014
|
+
getSmsBalance: oc.input(getSmsBalanceInputSchema).output(getSmsBalanceOutputSchema),
|
|
1015
|
+
calculateSmsCost: oc.input(calculateSmsCostInputSchema).output(calculateSmsCostOutputSchema)
|
|
1016
|
+
};
|
|
1017
|
+
const messageTemplatesRouter = oc.prefix("/templates").router({
|
|
1018
|
+
create: messagesContract.templates.create,
|
|
1019
|
+
list: messagesContract.templates.list,
|
|
1020
|
+
get: messagesContract.templates.get,
|
|
1021
|
+
update: messagesContract.templates.update,
|
|
1022
|
+
delete: messagesContract.templates.delete,
|
|
1023
|
+
getAvailableResources: messagesContract.templates.getAvailableResources
|
|
1024
|
+
});
|
|
1025
|
+
const messagesRouterContract = oc.prefix("/messages").router({
|
|
1026
|
+
send: messagesContract.send,
|
|
1027
|
+
sendMessage: messagesContract.sendMessage,
|
|
1028
|
+
templates: messageTemplatesRouter,
|
|
1029
|
+
getSmsBalance: messagesContract.getSmsBalance,
|
|
1030
|
+
calculateSmsCost: messagesContract.calculateSmsCost
|
|
1031
|
+
});
|
|
1032
|
+
|
|
1033
|
+
//#endregion
|
|
1034
|
+
//#region src/contract/routes/notifications.ts
|
|
1035
|
+
const registerNotificationRoute = oc.route({
|
|
1036
|
+
method: "POST",
|
|
1037
|
+
path: "/register"
|
|
1038
|
+
}).input(z.object({ pushToken: z.string() })).output(z.object({ success: z.boolean() }));
|
|
1039
|
+
const notificationsRouter = oc.router({ register: registerNotificationRoute });
|
|
1040
|
+
|
|
1041
|
+
//#endregion
|
|
1042
|
+
//#region src/contract/routes/configs.ts
|
|
1043
|
+
const upsertOrderConfigRoute = oc.route({
|
|
1044
|
+
method: "POST",
|
|
1045
|
+
path: "/"
|
|
1046
|
+
}).input(upsertOrderConfigInputSchema).output(orderConfigSchema);
|
|
1047
|
+
const getOrderConfigRoute = oc.route({
|
|
1048
|
+
method: "GET",
|
|
1049
|
+
path: "/"
|
|
1050
|
+
}).input(getOrderConfigInputSchema).output(orderConfigSchema);
|
|
1051
|
+
const orderConfigRoutes = {
|
|
1052
|
+
upsert: upsertOrderConfigRoute,
|
|
1053
|
+
get: getOrderConfigRoute
|
|
1054
|
+
};
|
|
1055
|
+
const orderConfigRouter = oc.router({
|
|
1056
|
+
upsert: upsertOrderConfigRoute,
|
|
1057
|
+
get: getOrderConfigRoute
|
|
1058
|
+
});
|
|
1059
|
+
|
|
1060
|
+
//#endregion
|
|
1061
|
+
//#region src/contract/routes/orders.ts
|
|
1062
|
+
const calculateOrderRoute = oc.route({
|
|
1063
|
+
method: "POST",
|
|
1064
|
+
path: "/calculate"
|
|
1065
|
+
}).input(createOrderInputSchema).output(orderOutputSchema);
|
|
1066
|
+
const checkoutRoute = oc.route({
|
|
1067
|
+
method: "POST",
|
|
1068
|
+
path: "/checkout"
|
|
1069
|
+
}).input(createOrderInputSchema).output(checkoutResultSchema);
|
|
1070
|
+
const listOrdersRoute = oc.route({
|
|
1071
|
+
method: "GET",
|
|
1072
|
+
path: "/"
|
|
1073
|
+
}).input(listOrdersInputSchema).output(listOrdersOutputSchema);
|
|
1074
|
+
const updateFulfillmentRoute = oc.route({
|
|
1075
|
+
method: "POST",
|
|
1076
|
+
path: "/fulfillments"
|
|
1077
|
+
}).input(updateFulfillmentInputSchema).output(z.void());
|
|
1078
|
+
const getOrderByIdRoute = oc.route({
|
|
1079
|
+
method: "GET",
|
|
1080
|
+
path: "/:orderId"
|
|
1081
|
+
}).input(getOrderByIdInputSchema).output(eventIterator(orderOutputSchema));
|
|
1082
|
+
const refundOrderRoute = oc.route({
|
|
1083
|
+
method: "POST",
|
|
1084
|
+
path: "/:orderId/refund"
|
|
1085
|
+
}).input(refundOrderInputSchema).output(refundOrderOutputSchema);
|
|
1086
|
+
const ordersRouter = oc.router({
|
|
1087
|
+
calculate: calculateOrderRoute,
|
|
1088
|
+
checkout: checkoutRoute,
|
|
1089
|
+
list: listOrdersRoute,
|
|
1090
|
+
get: getOrderByIdRoute,
|
|
1091
|
+
updateFulfillment: updateFulfillmentRoute,
|
|
1092
|
+
refund: refundOrderRoute,
|
|
1093
|
+
config: oc.router({
|
|
1094
|
+
get: orderConfigRoutes.get,
|
|
1095
|
+
upsert: orderConfigRoutes.upsert
|
|
1096
|
+
})
|
|
1097
|
+
});
|
|
1098
|
+
|
|
1099
|
+
//#endregion
|
|
1100
|
+
//#region src/contract/routes/payments.ts
|
|
1101
|
+
const listPaymentsRoute = oc.route({
|
|
1102
|
+
method: "GET",
|
|
1103
|
+
path: "/"
|
|
1104
|
+
}).input(listPaymentsInputSchema).output(listPaymentsOutputSchema);
|
|
1105
|
+
const getPaymentRoute = oc.route({
|
|
1106
|
+
method: "GET",
|
|
1107
|
+
path: "/:paymentId"
|
|
1108
|
+
}).input(getPaymentInputSchema).output(paymentOutputSchema);
|
|
1109
|
+
const paymentsRouter = oc.router({
|
|
1110
|
+
list: listPaymentsRoute,
|
|
1111
|
+
get: getPaymentRoute
|
|
1112
|
+
});
|
|
1113
|
+
|
|
1114
|
+
//#endregion
|
|
1115
|
+
//#region src/contract/routes/promocodes.ts
|
|
1116
|
+
const listPromoCodesRoute = oc.route({
|
|
1117
|
+
method: "GET",
|
|
1118
|
+
path: "/"
|
|
1119
|
+
}).input(listPromoCodesInputSchema).output(promoCodeListOutputSchema);
|
|
1120
|
+
const createPromoCodeRoute = oc.route({
|
|
1121
|
+
method: "POST",
|
|
1122
|
+
path: "/"
|
|
1123
|
+
}).input(createPromoCodeInputSchema).output(promoCodeOutputSchema);
|
|
1124
|
+
const updatePromoCodeRoute = oc.route({
|
|
1125
|
+
method: "PUT",
|
|
1126
|
+
path: "/:promoCodeId"
|
|
1127
|
+
}).input(promoCodeIdInputSchema.merge(z.object({ update: updatePromoCodeInputSchema }))).output(promoCodeOutputSchema);
|
|
1128
|
+
const deletePromoCodeRoute = oc.route({
|
|
1129
|
+
method: "DELETE",
|
|
1130
|
+
path: "/:promoCodeId"
|
|
1131
|
+
}).input(promoCodeIdInputSchema).output(z.void());
|
|
1132
|
+
const getPromoCodeRoute = oc.route({
|
|
1133
|
+
method: "GET",
|
|
1134
|
+
path: "/:promoCodeId"
|
|
1135
|
+
}).input(promoCodeIdInputSchema).output(promoCodeBaseSchema);
|
|
1136
|
+
const validatePromoCodeRoute = oc.route({
|
|
1137
|
+
method: "POST",
|
|
1138
|
+
path: "/validate"
|
|
1139
|
+
}).input(promoCodeValidationInputSchema).output(promoCodeValidationResultSchema);
|
|
1140
|
+
const promocodesRouter = oc.router({
|
|
1141
|
+
list: listPromoCodesRoute,
|
|
1142
|
+
create: createPromoCodeRoute,
|
|
1143
|
+
update: updatePromoCodeRoute,
|
|
1144
|
+
delete: deletePromoCodeRoute,
|
|
1145
|
+
get: getPromoCodeRoute,
|
|
1146
|
+
validate: validatePromoCodeRoute
|
|
1147
|
+
});
|
|
1148
|
+
|
|
1149
|
+
//#endregion
|
|
1150
|
+
//#region src/contract/index.ts
|
|
1151
|
+
const healthCheckContract = oc.route({
|
|
1152
|
+
method: "GET",
|
|
1153
|
+
path: "/health-check"
|
|
1154
|
+
}).input(z.void()).output(z.string());
|
|
1155
|
+
const appContract = {
|
|
1156
|
+
healthCheck: healthCheckContract,
|
|
1157
|
+
customers: customersRouter,
|
|
1158
|
+
merchants: merchantsRouter,
|
|
1159
|
+
locations: locationsRouter,
|
|
1160
|
+
catalog: catalogRouter,
|
|
1161
|
+
orders: ordersRouter,
|
|
1162
|
+
promocodes: promocodesRouter,
|
|
1163
|
+
discounts: discountsRouter,
|
|
1164
|
+
banners: bannersRouter,
|
|
1165
|
+
messages: messagesRouterContract,
|
|
1166
|
+
notifications: notificationsRouter,
|
|
1167
|
+
billing: billingRouter,
|
|
1168
|
+
payments: paymentsRouter,
|
|
1169
|
+
payouts: payoutsRouter,
|
|
1170
|
+
leads: leadsRouter
|
|
1171
|
+
};
|
|
1172
|
+
|
|
1173
|
+
//#endregion
|
|
1174
|
+
//#region src/index.ts
|
|
1175
|
+
function createMyApi(props) {
|
|
1176
|
+
return createORPCClient(new RPCLink({
|
|
1177
|
+
url: `${props?.baseUrl ?? getBaseUrl()}/rpc`,
|
|
1178
|
+
headers: () => ({
|
|
1179
|
+
"x-platform": props?.platform,
|
|
1180
|
+
"x-language": props?.language,
|
|
1181
|
+
"x-version": props?.version,
|
|
1182
|
+
...props?.appId && { "x-app-id": props.appId }
|
|
1183
|
+
}),
|
|
1184
|
+
fetch(url, options) {
|
|
1185
|
+
return fetch(url, {
|
|
1186
|
+
...options,
|
|
1187
|
+
credentials: "include"
|
|
1188
|
+
});
|
|
1189
|
+
}
|
|
1190
|
+
}));
|
|
1191
|
+
}
|
|
1192
|
+
function getBaseUrl() {
|
|
1193
|
+
if (typeof process.env.JAICOME_BASE_URL === "undefined") throw new Error("JAICOME_BASE_URL is not defined");
|
|
1194
|
+
return process.env.JAICOME_BASE_URL;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
//#endregion
|
|
1198
|
+
export { FulfillmentStateMachine, FulfillmentStateValues, TerminalStates, appContract, assertCanTransition, canTransition, createMyApi, getAllowedTransitions, getAllowedUserTransitions, isTerminalState };
|