@cimplify/sdk 0.101.1 → 0.103.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/advanced.d.mts +3 -3
- package/dist/advanced.d.ts +3 -3
- package/dist/advanced.js +23 -22
- package/dist/advanced.mjs +4 -3
- package/dist/{chunk-QPRI2NII.js → chunk-2P4KXFB6.js} +6 -0
- package/dist/{chunk-4G5UWFC3.mjs → chunk-3V4DVXV3.mjs} +6 -1
- package/dist/{chunk-YHPMFTMN.mjs → chunk-C2JSNJUC.mjs} +406 -95
- package/dist/chunk-CNN7Z2IP.js +125 -0
- package/dist/{chunk-DKLHCZ5M.mjs → chunk-GERXZQSX.mjs} +487 -11
- package/dist/chunk-GOHSXBKW.mjs +105 -0
- package/dist/{chunk-7H6IL7CX.mjs → chunk-H7ACMHM3.mjs} +40 -15
- package/dist/{chunk-Z3K2D3TE.mjs → chunk-J6PNHDHL.mjs} +453 -483
- package/dist/{chunk-NIOUSKQQ.js → chunk-JG5CQNCB.js} +5 -0
- package/dist/{chunk-YER7DIOM.js → chunk-JSWJ4XDE.js} +471 -519
- package/dist/{chunk-DLW3RWRK.mjs → chunk-M4URVKHE.mjs} +46 -12
- package/dist/{chunk-WMEC5JWN.js → chunk-NNG6IFFX.js} +50 -13
- package/dist/{chunk-ICCCSVN3.js → chunk-QOWPGS7Z.js} +42 -16
- package/dist/{chunk-YDA46OZ6.js → chunk-R6OLQ33I.js} +560 -80
- package/dist/{chunk-H5SSGN7W.js → chunk-VIL6IQCG.js} +408 -97
- package/dist/{chunk-O3YUHLZL.mjs → chunk-VNPEYLB2.mjs} +5 -0
- package/dist/{client-Db554902.d.ts → client-BfpNjJ_a.d.mts} +93 -299
- package/dist/{client-CdTx7X_X.d.mts → client-DHBwvh7U.d.ts} +93 -299
- package/dist/{client-WkUcvRvO.d.mts → client-DpqRobY9.d.mts} +2 -2
- package/dist/{client-D40kI8z2.d.ts → client-Dqg2mc-7.d.ts} +2 -2
- package/dist/{index-D3UXgAYl.d.ts → index-C8uDqLwJ.d.ts} +14 -4
- package/dist/{index-BjWUkYgY.d.mts → index-e2y6AK70.d.mts} +14 -4
- package/dist/index.d.mts +92 -8
- package/dist/index.d.ts +92 -8
- package/dist/index.js +225 -188
- package/dist/index.mjs +7 -6
- package/dist/link-cuNVYc2s.d.mts +297 -0
- package/dist/link-cuNVYc2s.d.ts +297 -0
- package/dist/mock/cli.mjs +412 -94
- package/dist/mock/library.js +412 -94
- package/dist/mock/library.mjs +412 -94
- package/dist/mock/msw.js +412 -94
- package/dist/mock/msw.mjs +412 -94
- package/dist/{product-DwKdC_to.d.mts → payment-H5LoIvXU.d.mts} +207 -7
- package/dist/{product-DwKdC_to.d.ts → payment-H5LoIvXU.d.ts} +207 -7
- package/dist/{price-CiQUd_XX.d.mts → price-BvePgDXe.d.mts} +1 -1
- package/dist/{price-D9EOj8y8.d.ts → price-C2RqscMY.d.ts} +1 -1
- package/dist/react.d.mts +6 -4
- package/dist/react.d.ts +6 -4
- package/dist/react.js +203 -198
- package/dist/react.mjs +11 -6
- package/dist/{server-CeDb93WA.d.ts → server-C7FyLdrz.d.mts} +11 -9
- package/dist/{server-D-nSkrUr.d.mts → server-DoXIpSd7.d.ts} +11 -9
- package/dist/server.d.mts +4 -4
- package/dist/server.d.ts +4 -4
- package/dist/server.js +11 -10
- package/dist/server.mjs +5 -4
- package/dist/testing/msw.d.mts +2 -2
- package/dist/testing/msw.d.ts +2 -2
- package/dist/testing/msw.js +4 -3
- package/dist/testing/msw.mjs +3 -2
- package/dist/testing/suite.d.mts +6 -6
- package/dist/testing/suite.d.ts +6 -6
- package/dist/testing/suite.js +26 -25
- package/dist/testing/suite.mjs +7 -6
- package/dist/testing.d.mts +175 -45
- package/dist/testing.d.ts +175 -45
- package/dist/testing.js +86 -81
- package/dist/testing.mjs +8 -7
- package/dist/utils.d.mts +4 -4
- package/dist/utils.d.ts +4 -4
- package/dist/utils.js +37 -29
- package/dist/utils.mjs +2 -2
- package/package.json +7 -1
- package/dist/payment-CRqjGrx6.d.mts +0 -113
- package/dist/payment-DO1Z1Ip6.d.ts +0 -113
package/dist/mock/cli.mjs
CHANGED
|
@@ -3034,6 +3034,8 @@ var ERROR_SUGGESTIONS = {
|
|
|
3034
3034
|
PRICE_CHANGED: "Prices changed since the quote was created. Refresh pricing, show the new total to the shopper, and require explicit confirmation before re-submitting.",
|
|
3035
3035
|
PAYMENT_FAILED: "Payment provider rejected or failed processing. Show retry/change-method options to the shopper.",
|
|
3036
3036
|
PAYMENT_CANCELLED: "Payment was cancelled by the shopper or provider flow. Allow a safe retry path.",
|
|
3037
|
+
PAYMENT_CAPABILITY_MISMATCH: "Refresh collection capabilities for the exact tenant and presentment currency before retrying.",
|
|
3038
|
+
UNSUPPORTED_CURRENCY: "Choose a supported presentment currency before loading payment methods or submitting checkout.",
|
|
3037
3039
|
INSUFFICIENT_FUNDS: "Payment method has insufficient funds. Prompt shopper to use another method.",
|
|
3038
3040
|
CARD_DECLINED: "Card was declined. Ask shopper to retry or switch payment method.",
|
|
3039
3041
|
INVALID_OTP: "Authorization code is invalid. Let shopper re-enter OTP/PIN and retry.",
|
|
@@ -3182,6 +3184,12 @@ function getQueryNum(c, key) {
|
|
|
3182
3184
|
return Number.isFinite(n) ? n : void 0;
|
|
3183
3185
|
}
|
|
3184
3186
|
|
|
3187
|
+
// src/constants.ts
|
|
3188
|
+
var PAYMENT_METHOD = {
|
|
3189
|
+
MOBILE_MONEY: "mobile_money",
|
|
3190
|
+
CARD: "card"
|
|
3191
|
+
};
|
|
3192
|
+
|
|
3185
3193
|
// src/mock/routes/v1.ts
|
|
3186
3194
|
function buildV1(deps) {
|
|
3187
3195
|
const app = new Hono2();
|
|
@@ -3198,10 +3206,22 @@ function buildV1(deps) {
|
|
|
3198
3206
|
}));
|
|
3199
3207
|
});
|
|
3200
3208
|
app.get("/business", (c) => tryRoute(c, () => deps.business.primary()));
|
|
3201
|
-
app.get(
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3209
|
+
app.get(
|
|
3210
|
+
"/business/by-handle/:handle",
|
|
3211
|
+
(c) => tryRoute(c, () => deps.business.byHandle(c.req.param("handle")))
|
|
3212
|
+
);
|
|
3213
|
+
app.get(
|
|
3214
|
+
"/business/by-domain",
|
|
3215
|
+
(c) => tryRoute(c, () => deps.business.byDomain(c.req.query("domain") ?? ""))
|
|
3216
|
+
);
|
|
3217
|
+
app.get(
|
|
3218
|
+
"/business/settings",
|
|
3219
|
+
(c) => tryRoute(c, () => deps.business.settings(deps.defaultBusinessId))
|
|
3220
|
+
);
|
|
3221
|
+
app.get(
|
|
3222
|
+
"/business/locations",
|
|
3223
|
+
(c) => tryRoute(c, () => deps.business.locations(deps.defaultBusinessId))
|
|
3224
|
+
);
|
|
3205
3225
|
app.get("/business/hours", (c) => tryRoute(c, () => deps.business.hours(deps.defaultBusinessId)));
|
|
3206
3226
|
app.get("/catalogue", (c) => tryRoute(c, () => deps.catalogue.snapshot(deps.defaultBusinessId)));
|
|
3207
3227
|
app.get(
|
|
@@ -3216,57 +3236,165 @@ function buildV1(deps) {
|
|
|
3216
3236
|
})
|
|
3217
3237
|
)
|
|
3218
3238
|
);
|
|
3219
|
-
app.get(
|
|
3220
|
-
|
|
3221
|
-
|
|
3239
|
+
app.get(
|
|
3240
|
+
"/catalogue/products/:product_id",
|
|
3241
|
+
(c) => tryRoute(c, () => deps.catalogue.getProduct(c.req.param("product_id")))
|
|
3242
|
+
);
|
|
3243
|
+
app.get(
|
|
3244
|
+
"/catalogue/products/:product_id/variants",
|
|
3245
|
+
(c) => tryRoute(c, () => deps.catalogue.getProductVariants(c.req.param("product_id")))
|
|
3246
|
+
);
|
|
3247
|
+
app.get(
|
|
3248
|
+
"/catalogue/products/:product_id/variant-axes",
|
|
3249
|
+
(c) => tryRoute(c, () => deps.catalogue.getProductVariantAxes(c.req.param("product_id")))
|
|
3250
|
+
);
|
|
3222
3251
|
app.get(
|
|
3223
3252
|
"/catalogue/products/:product_id/variants/:variant_id",
|
|
3224
|
-
(c) => tryRoute(
|
|
3253
|
+
(c) => tryRoute(
|
|
3254
|
+
c,
|
|
3255
|
+
() => deps.catalogue.getProductVariantById(c.req.param("product_id"), c.req.param("variant_id"))
|
|
3256
|
+
)
|
|
3225
3257
|
);
|
|
3226
3258
|
app.post("/catalogue/products/:product_id/variants/find", async (c) => {
|
|
3227
3259
|
const body = await c.req.json().catch(() => ({}));
|
|
3228
3260
|
return tryRoute(
|
|
3229
3261
|
c,
|
|
3230
|
-
() => deps.catalogue.findProductVariant(
|
|
3262
|
+
() => deps.catalogue.findProductVariant(
|
|
3263
|
+
c.req.param("product_id"),
|
|
3264
|
+
body.axis_selections ?? body.properties ?? {}
|
|
3265
|
+
)
|
|
3231
3266
|
);
|
|
3232
3267
|
});
|
|
3233
|
-
app.get(
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
app.get(
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
|
|
3241
|
-
app.get(
|
|
3242
|
-
|
|
3243
|
-
|
|
3244
|
-
|
|
3245
|
-
app.get(
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3268
|
+
app.get(
|
|
3269
|
+
"/catalogue/products/:product_id/add-ons",
|
|
3270
|
+
(c) => tryRoute(c, () => deps.catalogue.getProductAddOns(c.req.param("product_id")))
|
|
3271
|
+
);
|
|
3272
|
+
app.get(
|
|
3273
|
+
"/catalogue/categories",
|
|
3274
|
+
(c) => tryRoute(c, () => deps.catalogue.listCategories(deps.defaultBusinessId))
|
|
3275
|
+
);
|
|
3276
|
+
app.get(
|
|
3277
|
+
"/catalogue/categories/:category_id",
|
|
3278
|
+
(c) => tryRoute(c, () => deps.catalogue.getCategory(c.req.param("category_id")))
|
|
3279
|
+
);
|
|
3280
|
+
app.get(
|
|
3281
|
+
"/catalogue/categories/:category_id/products",
|
|
3282
|
+
(c) => tryRoute(c, () => deps.catalogue.getCategoryProducts(c.req.param("category_id")))
|
|
3283
|
+
);
|
|
3284
|
+
app.get(
|
|
3285
|
+
"/catalogue/categories/:category_id/attributes",
|
|
3286
|
+
(c) => tryRoute(c, () => deps.catalogue.getCategoryAttributes(c.req.param("category_id")))
|
|
3287
|
+
);
|
|
3288
|
+
app.get(
|
|
3289
|
+
"/catalogue/categories/:category_id/deals",
|
|
3290
|
+
(c) => tryRoute(c, () => deps.catalogue.getCategoryDeals(c.req.param("category_id")))
|
|
3291
|
+
);
|
|
3292
|
+
app.get(
|
|
3293
|
+
"/catalogue/collections",
|
|
3294
|
+
(c) => tryRoute(c, () => deps.catalogue.listCollections(deps.defaultBusinessId))
|
|
3295
|
+
);
|
|
3296
|
+
app.get(
|
|
3297
|
+
"/catalogue/collections/:collection_id",
|
|
3298
|
+
(c) => tryRoute(c, () => deps.catalogue.getCollection(c.req.param("collection_id")))
|
|
3299
|
+
);
|
|
3300
|
+
app.get(
|
|
3301
|
+
"/catalogue/collections/:collection_id/products",
|
|
3302
|
+
(c) => tryRoute(c, () => deps.catalogue.getCollectionProducts(c.req.param("collection_id")))
|
|
3303
|
+
);
|
|
3304
|
+
app.get(
|
|
3305
|
+
"/catalogue/collections/:collection_id/attributes",
|
|
3306
|
+
(c) => tryRoute(c, () => deps.catalogue.getCollectionAttributes(c.req.param("collection_id")))
|
|
3307
|
+
);
|
|
3308
|
+
app.get(
|
|
3309
|
+
"/catalogue/collections/:collection_id/deals",
|
|
3310
|
+
(c) => tryRoute(c, () => deps.catalogue.getCollectionDeals(c.req.param("collection_id")))
|
|
3311
|
+
);
|
|
3312
|
+
app.get(
|
|
3313
|
+
"/catalogue/bundles",
|
|
3314
|
+
(c) => tryRoute(c, () => deps.catalogue.listBundles(deps.defaultBusinessId))
|
|
3315
|
+
);
|
|
3316
|
+
app.get(
|
|
3317
|
+
"/catalogue/bundles/:bundle_id",
|
|
3318
|
+
(c) => tryRoute(c, () => deps.catalogue.getBundle(c.req.param("bundle_id")))
|
|
3319
|
+
);
|
|
3320
|
+
app.get(
|
|
3321
|
+
"/catalogue/composites",
|
|
3322
|
+
(c) => tryRoute(c, () => deps.catalogue.listComposites(deps.defaultBusinessId))
|
|
3323
|
+
);
|
|
3324
|
+
app.get(
|
|
3325
|
+
"/catalogue/composites/by-product/:product_id",
|
|
3326
|
+
(c) => tryRoute(c, () => deps.catalogue.getCompositeByProduct(c.req.param("product_id")))
|
|
3327
|
+
);
|
|
3328
|
+
app.get(
|
|
3329
|
+
"/catalogue/composites/:composite_id",
|
|
3330
|
+
(c) => tryRoute(c, () => deps.catalogue.getComposite(c.req.param("composite_id")))
|
|
3331
|
+
);
|
|
3249
3332
|
app.post("/catalogue/composites/:composite_id/calculate-price", async (c) => {
|
|
3250
3333
|
const body = await c.req.json().catch(() => ({}));
|
|
3251
|
-
return tryRoute(
|
|
3334
|
+
return tryRoute(
|
|
3335
|
+
c,
|
|
3336
|
+
() => deps.catalogue.calculateCompositePrice(c.req.param("composite_id"), body)
|
|
3337
|
+
);
|
|
3252
3338
|
});
|
|
3253
|
-
app.get(
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
app.get(
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3339
|
+
app.get(
|
|
3340
|
+
"/catalogue/taxonomies",
|
|
3341
|
+
(c) => tryRoute(c, () => deps.catalogue.listTaxonomies(deps.defaultBusinessId))
|
|
3342
|
+
);
|
|
3343
|
+
app.get(
|
|
3344
|
+
"/catalogue/taxonomies/search",
|
|
3345
|
+
(c) => tryRoute(
|
|
3346
|
+
c,
|
|
3347
|
+
() => deps.catalogue.searchTaxonomies(deps.defaultBusinessId, c.req.query("q") ?? "")
|
|
3348
|
+
)
|
|
3349
|
+
);
|
|
3350
|
+
app.get(
|
|
3351
|
+
"/catalogue/taxonomies/:taxonomy_id",
|
|
3352
|
+
(c) => tryRoute(c, () => deps.catalogue.getTaxonomy(c.req.param("taxonomy_id")))
|
|
3353
|
+
);
|
|
3354
|
+
app.get(
|
|
3355
|
+
"/catalogue/taxonomies/:taxonomy_id/attributes",
|
|
3356
|
+
(c) => tryRoute(c, () => deps.catalogue.getTaxonomyAttributes(c.req.param("taxonomy_id")))
|
|
3357
|
+
);
|
|
3358
|
+
app.get(
|
|
3359
|
+
"/catalogue/taxonomies/:taxonomy_id/path",
|
|
3360
|
+
(c) => tryRoute(c, () => deps.catalogue.getTaxonomyPath(c.req.param("taxonomy_id")))
|
|
3361
|
+
);
|
|
3362
|
+
app.get(
|
|
3363
|
+
"/catalogue/attributes",
|
|
3364
|
+
(c) => tryRoute(c, () => deps.catalogue.listAttributes(deps.defaultBusinessId))
|
|
3365
|
+
);
|
|
3366
|
+
app.get(
|
|
3367
|
+
"/catalogue/properties/facets",
|
|
3368
|
+
(c) => tryRoute(c, () => deps.catalogue.listPropertyFacets(deps.defaultBusinessId))
|
|
3369
|
+
);
|
|
3370
|
+
app.get(
|
|
3371
|
+
"/catalogue/tags",
|
|
3372
|
+
(c) => tryRoute(c, () => deps.catalogue.listTags(deps.defaultBusinessId))
|
|
3373
|
+
);
|
|
3261
3374
|
app.get("/catalogue/menu", (c) => tryRoute(c, () => deps.lite.getMenu(deps.defaultBusinessId)));
|
|
3262
|
-
app.get(
|
|
3263
|
-
|
|
3264
|
-
|
|
3375
|
+
app.get(
|
|
3376
|
+
"/catalogue/menu/categories/:category_id",
|
|
3377
|
+
(c) => tryRoute(c, () => deps.lite.getMenuCategory(c.req.param("category_id")))
|
|
3378
|
+
);
|
|
3379
|
+
app.get(
|
|
3380
|
+
"/catalogue/menu/items/:item_id",
|
|
3381
|
+
(c) => tryRoute(c, () => deps.catalogue.getProduct(c.req.param("item_id")))
|
|
3382
|
+
);
|
|
3383
|
+
app.get(
|
|
3384
|
+
"/catalogue/knowledge-base/articles",
|
|
3385
|
+
(c) => tryRoute(c, () => ({ articles: deps.catalogue.listKnowledgeArticles(deps.defaultBusinessId) }))
|
|
3386
|
+
);
|
|
3265
3387
|
app.get(
|
|
3266
3388
|
"/catalogue/knowledge-base/search",
|
|
3267
|
-
(c) => tryRoute(c, () => ({
|
|
3389
|
+
(c) => tryRoute(c, () => ({
|
|
3390
|
+
results: deps.catalogue.searchKnowledgeBase(deps.defaultBusinessId, c.req.query("q") ?? ""),
|
|
3391
|
+
query: c.req.query("q") ?? ""
|
|
3392
|
+
}))
|
|
3393
|
+
);
|
|
3394
|
+
app.get(
|
|
3395
|
+
"/catalogue/products/:product_id/attributes",
|
|
3396
|
+
(c) => tryRoute(c, () => deps.catalogue.getProductAttributes(c.req.param("product_id")))
|
|
3268
3397
|
);
|
|
3269
|
-
app.get("/catalogue/products/:product_id/attributes", (c) => tryRoute(c, () => deps.catalogue.getProductAttributes(c.req.param("product_id"))));
|
|
3270
3398
|
app.get(
|
|
3271
3399
|
"/catalogue/products/:product_id/available-now",
|
|
3272
3400
|
(c) => tryRoute(c, () => {
|
|
@@ -3285,22 +3413,45 @@ function buildV1(deps) {
|
|
|
3285
3413
|
"/catalogue/products/:product_id/schedules",
|
|
3286
3414
|
(c) => tryRoute(c, () => {
|
|
3287
3415
|
const p = deps.registry.products.get(c.req.param("product_id"));
|
|
3288
|
-
return {
|
|
3416
|
+
return {
|
|
3417
|
+
schedules: p?.metadata?.["time_profiles"] ?? []
|
|
3418
|
+
};
|
|
3289
3419
|
})
|
|
3290
3420
|
);
|
|
3291
|
-
app.get(
|
|
3292
|
-
|
|
3421
|
+
app.get(
|
|
3422
|
+
"/catalogue/deals",
|
|
3423
|
+
(c) => tryRoute(c, () => deps.catalogue.listDeals(deps.defaultBusinessId))
|
|
3424
|
+
);
|
|
3425
|
+
app.get(
|
|
3426
|
+
"/catalogue/deals/on-sale",
|
|
3427
|
+
(c) => tryRoute(c, () => deps.catalogue.listOnSale(deps.defaultBusinessId))
|
|
3428
|
+
);
|
|
3293
3429
|
app.post("/catalogue/deals/validate", async (c) => {
|
|
3294
3430
|
const body = await c.req.json().catch(() => ({}));
|
|
3295
|
-
return tryRoute(
|
|
3431
|
+
return tryRoute(
|
|
3432
|
+
c,
|
|
3433
|
+
() => deps.catalogue.validateDiscount(
|
|
3434
|
+
body.discount_code ?? body.code ?? "",
|
|
3435
|
+
deps.defaultBusinessId
|
|
3436
|
+
)
|
|
3437
|
+
);
|
|
3296
3438
|
});
|
|
3297
|
-
app.get(
|
|
3439
|
+
app.get(
|
|
3440
|
+
"/catalogue/products/:product_id/deals",
|
|
3441
|
+
(c) => tryRoute(c, () => deps.catalogue.getProductDeals(c.req.param("product_id")))
|
|
3442
|
+
);
|
|
3298
3443
|
app.post("/catalogue/quotes", async (c) => {
|
|
3299
3444
|
const body = await c.req.json().catch(() => ({}));
|
|
3300
3445
|
return tryRoute(c, () => deps.catalogue.createQuote(deps.defaultBusinessId, body));
|
|
3301
3446
|
});
|
|
3302
|
-
app.get(
|
|
3303
|
-
|
|
3447
|
+
app.get(
|
|
3448
|
+
"/catalogue/quotes/:quote_id",
|
|
3449
|
+
(c) => tryRoute(c, () => deps.catalogue.getQuote(c.req.param("quote_id")))
|
|
3450
|
+
);
|
|
3451
|
+
app.post(
|
|
3452
|
+
"/catalogue/quotes/:quote_id/refresh",
|
|
3453
|
+
(c) => tryRoute(c, () => deps.catalogue.refreshQuote(c.req.param("quote_id")))
|
|
3454
|
+
);
|
|
3304
3455
|
app.get("/cart", (c) => tryRoute(c, () => deps.cart.toUICart(deps.cart.get(c.var.session))));
|
|
3305
3456
|
app.delete("/cart", (c) => tryRoute(c, () => deps.cart.clear(c.var.session)));
|
|
3306
3457
|
app.get("/cart/items", (c) => tryRoute(c, () => deps.cart.getItems(c.var.session)));
|
|
@@ -3311,9 +3462,15 @@ function buildV1(deps) {
|
|
|
3311
3462
|
app.patch("/cart/items/:cart_item_id", async (c) => {
|
|
3312
3463
|
const body = await c.req.json().catch(() => ({}));
|
|
3313
3464
|
if (typeof body.quantity !== "number") return fail(c, validation("quantity required"));
|
|
3314
|
-
return tryRoute(
|
|
3465
|
+
return tryRoute(
|
|
3466
|
+
c,
|
|
3467
|
+
() => deps.cart.updateQuantity(c.var.session, c.req.param("cart_item_id"), body.quantity)
|
|
3468
|
+
);
|
|
3315
3469
|
});
|
|
3316
|
-
app.delete(
|
|
3470
|
+
app.delete(
|
|
3471
|
+
"/cart/items/:cart_item_id",
|
|
3472
|
+
(c) => tryRoute(c, () => deps.cart.removeItem(c.var.session, c.req.param("cart_item_id")))
|
|
3473
|
+
);
|
|
3317
3474
|
app.get("/cart/count", (c) => tryRoute(c, () => deps.cart.getCount(c.var.session)));
|
|
3318
3475
|
app.get("/cart/total", (c) => tryRoute(c, () => deps.cart.getTotal(c.var.session)));
|
|
3319
3476
|
app.post("/cart/destination-quote", async (c) => {
|
|
@@ -3324,10 +3481,25 @@ function buildV1(deps) {
|
|
|
3324
3481
|
const body = await c.req.json().catch(() => ({}));
|
|
3325
3482
|
return tryRoute(c, () => deps.cart.applyCoupon(c.var.session, body.coupon_code ?? ""));
|
|
3326
3483
|
});
|
|
3327
|
-
app.delete(
|
|
3328
|
-
|
|
3484
|
+
app.delete(
|
|
3485
|
+
"/cart/coupons/current",
|
|
3486
|
+
(c) => tryRoute(c, () => deps.cart.removeCoupon(c.var.session))
|
|
3487
|
+
);
|
|
3488
|
+
app.get(
|
|
3489
|
+
"/orders",
|
|
3490
|
+
(c) => tryRoute(
|
|
3491
|
+
c,
|
|
3492
|
+
() => deps.orders.list(c.var.session, {
|
|
3493
|
+
limit: getQueryNum(c, "limit"),
|
|
3494
|
+
status: c.req.query("status")
|
|
3495
|
+
})
|
|
3496
|
+
)
|
|
3497
|
+
);
|
|
3329
3498
|
app.get("/orders/:order_id", (c) => tryRoute(c, () => deps.orders.get(c.req.param("order_id"))));
|
|
3330
|
-
app.get(
|
|
3499
|
+
app.get(
|
|
3500
|
+
"/orders/:order_id/payment-status",
|
|
3501
|
+
(c) => tryRoute(c, () => deps.orders.getPaymentStatus(c.req.param("order_id")))
|
|
3502
|
+
);
|
|
3331
3503
|
app.post("/orders/:order_id/cancel", async (c) => {
|
|
3332
3504
|
const body = await c.req.json().catch(() => ({}));
|
|
3333
3505
|
return tryRoute(c, () => deps.orders.cancel(c.req.param("order_id"), body.reason));
|
|
@@ -3336,13 +3508,46 @@ function buildV1(deps) {
|
|
|
3336
3508
|
const body = await c.req.json().catch(() => ({}));
|
|
3337
3509
|
return tryRoute(c, () => deps.orders.updateCustomer(c.req.param("order_id"), body));
|
|
3338
3510
|
});
|
|
3339
|
-
app.post(
|
|
3511
|
+
app.post(
|
|
3512
|
+
"/orders/:order_id/verify-payment",
|
|
3513
|
+
(c) => tryRoute(c, () => deps.orders.verifyPayment(c.req.param("order_id")))
|
|
3514
|
+
);
|
|
3340
3515
|
app.get("/subscriptions", (c) => tryRoute(c, () => deps.subscriptions.list(c.var.session)));
|
|
3341
|
-
app.get(
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
app.post(
|
|
3516
|
+
app.get(
|
|
3517
|
+
"/subscriptions/:subscription_id",
|
|
3518
|
+
(c) => tryRoute(c, () => deps.subscriptions.get(c.req.param("subscription_id")))
|
|
3519
|
+
);
|
|
3520
|
+
app.post(
|
|
3521
|
+
"/subscriptions/:subscription_id/cancel",
|
|
3522
|
+
(c) => tryRoute(c, () => deps.subscriptions.cancel(c.req.param("subscription_id")))
|
|
3523
|
+
);
|
|
3524
|
+
app.post(
|
|
3525
|
+
"/subscriptions/:subscription_id/pause",
|
|
3526
|
+
(c) => tryRoute(c, () => deps.subscriptions.pause(c.req.param("subscription_id")))
|
|
3527
|
+
);
|
|
3528
|
+
app.post(
|
|
3529
|
+
"/subscriptions/:subscription_id/resume",
|
|
3530
|
+
(c) => tryRoute(c, () => deps.subscriptions.resume(c.req.param("subscription_id")))
|
|
3531
|
+
);
|
|
3532
|
+
app.post(
|
|
3533
|
+
"/subscriptions/:subscription_id/skip",
|
|
3534
|
+
(c) => tryRoute(c, () => deps.subscriptions.skipNext(c.req.param("subscription_id")))
|
|
3535
|
+
);
|
|
3536
|
+
app.get("/payments/collection-options", (c) => {
|
|
3537
|
+
const currency = c.req.query("currency")?.trim().toUpperCase();
|
|
3538
|
+
if (!currency || !/^[A-Z]{3}$/.test(currency)) {
|
|
3539
|
+
return fail(c, validation("currency must be a canonical three-letter code"));
|
|
3540
|
+
}
|
|
3541
|
+
return tryRoute(c, () => ({
|
|
3542
|
+
presentment_currency: currency,
|
|
3543
|
+
options: currency === "GHS" ? [
|
|
3544
|
+
{ method: PAYMENT_METHOD.CARD, network: null },
|
|
3545
|
+
{ method: PAYMENT_METHOD.MOBILE_MONEY, network: "mtn" },
|
|
3546
|
+
{ method: PAYMENT_METHOD.MOBILE_MONEY, network: "telecel" },
|
|
3547
|
+
{ method: PAYMENT_METHOD.MOBILE_MONEY, network: "airteltigo" }
|
|
3548
|
+
] : currency === "USD" ? [{ method: PAYMENT_METHOD.CARD, network: null }] : []
|
|
3549
|
+
}));
|
|
3550
|
+
});
|
|
3346
3551
|
app.post("/checkout", async (c) => {
|
|
3347
3552
|
const body = await c.req.json().catch(() => ({}));
|
|
3348
3553
|
return tryRoute(c, () => deps.checkout.process(c.var.session, body));
|
|
@@ -3396,15 +3601,33 @@ function buildV1(deps) {
|
|
|
3396
3601
|
return { success: true, message: "Profile updated successfully" };
|
|
3397
3602
|
});
|
|
3398
3603
|
});
|
|
3399
|
-
app.get(
|
|
3400
|
-
|
|
3604
|
+
app.get(
|
|
3605
|
+
"/inventory/products/:product_id/stock",
|
|
3606
|
+
(c) => tryRoute(c, () => deps.inventory.productStock(c.req.param("product_id")))
|
|
3607
|
+
);
|
|
3608
|
+
app.get(
|
|
3609
|
+
"/inventory/variants/:variant_id/stock",
|
|
3610
|
+
(c) => tryRoute(c, () => deps.inventory.variantStock(c.req.param("variant_id")))
|
|
3611
|
+
);
|
|
3401
3612
|
app.get(
|
|
3402
3613
|
"/inventory/products/:product_id/availability",
|
|
3403
|
-
(c) => tryRoute(
|
|
3614
|
+
(c) => tryRoute(
|
|
3615
|
+
c,
|
|
3616
|
+
() => deps.inventory.productAvailability(
|
|
3617
|
+
c.req.param("product_id"),
|
|
3618
|
+
getQueryNum(c, "quantity") ?? 1
|
|
3619
|
+
)
|
|
3620
|
+
)
|
|
3404
3621
|
);
|
|
3405
3622
|
app.get(
|
|
3406
3623
|
"/inventory/variants/:variant_id/availability",
|
|
3407
|
-
(c) => tryRoute(
|
|
3624
|
+
(c) => tryRoute(
|
|
3625
|
+
c,
|
|
3626
|
+
() => deps.inventory.variantAvailability(
|
|
3627
|
+
c.req.param("variant_id"),
|
|
3628
|
+
getQueryNum(c, "quantity") ?? 1
|
|
3629
|
+
)
|
|
3630
|
+
)
|
|
3408
3631
|
);
|
|
3409
3632
|
app.get(
|
|
3410
3633
|
"/delivery/fee",
|
|
@@ -3431,35 +3654,75 @@ function buildV1(deps) {
|
|
|
3431
3654
|
);
|
|
3432
3655
|
app.post("/places/autocomplete", async (c) => {
|
|
3433
3656
|
const body = await c.req.json().catch(() => ({}));
|
|
3434
|
-
return tryRoute(
|
|
3657
|
+
return tryRoute(
|
|
3658
|
+
c,
|
|
3659
|
+
() => deps.places.autocomplete({ query: body.input ?? body.query ?? "", country: body.country })
|
|
3660
|
+
);
|
|
3435
3661
|
});
|
|
3436
3662
|
app.post("/places/details", async (c) => {
|
|
3437
3663
|
const body = await c.req.json().catch(() => ({}));
|
|
3438
3664
|
return tryRoute(c, () => deps.places.details({ place_id: body.place_id ?? "" }));
|
|
3439
3665
|
});
|
|
3440
|
-
app.get(
|
|
3441
|
-
|
|
3442
|
-
|
|
3666
|
+
app.get(
|
|
3667
|
+
"/scheduling/services",
|
|
3668
|
+
(c) => tryRoute(c, () => deps.scheduling.listServices(deps.defaultBusinessId))
|
|
3669
|
+
);
|
|
3670
|
+
app.get(
|
|
3671
|
+
"/scheduling/services/:service_id",
|
|
3672
|
+
(c) => tryRoute(c, () => deps.scheduling.getService(c.req.param("service_id")))
|
|
3673
|
+
);
|
|
3674
|
+
app.get(
|
|
3675
|
+
"/scheduling/slots",
|
|
3676
|
+
(c) => tryRoute(
|
|
3677
|
+
c,
|
|
3678
|
+
() => deps.scheduling.getSlots(c.req.query("service_id") ?? "", { date: c.req.query("date") })
|
|
3679
|
+
)
|
|
3680
|
+
);
|
|
3443
3681
|
app.get(
|
|
3444
3682
|
"/scheduling/slots/check",
|
|
3445
|
-
(c) => tryRoute(
|
|
3683
|
+
(c) => tryRoute(
|
|
3684
|
+
c,
|
|
3685
|
+
() => deps.scheduling.checkSlot(
|
|
3686
|
+
c.req.query("service_id") ?? "",
|
|
3687
|
+
c.req.query("start") ?? "",
|
|
3688
|
+
c.req.query("end") ?? ""
|
|
3689
|
+
)
|
|
3690
|
+
)
|
|
3691
|
+
);
|
|
3692
|
+
app.get(
|
|
3693
|
+
"/scheduling/availability",
|
|
3694
|
+
(c) => tryRoute(c, () => deps.scheduling.getServiceAvailability(c.req.query("service_id") ?? ""))
|
|
3695
|
+
);
|
|
3696
|
+
app.get(
|
|
3697
|
+
"/scheduling/bookings",
|
|
3698
|
+
(c) => tryRoute(c, () => deps.scheduling.getCustomerBookings(c.var.session))
|
|
3446
3699
|
);
|
|
3447
|
-
app.get("/scheduling/availability", (c) => tryRoute(c, () => deps.scheduling.getServiceAvailability(c.req.query("service_id") ?? "")));
|
|
3448
|
-
app.get("/scheduling/bookings", (c) => tryRoute(c, () => deps.scheduling.getCustomerBookings(c.var.session)));
|
|
3449
3700
|
app.post("/scheduling/bookings/reschedule", async (c) => {
|
|
3450
3701
|
const body = await c.req.json().catch(() => ({}));
|
|
3451
3702
|
return tryRoute(c, () => deps.scheduling.rescheduleBooking(body));
|
|
3452
3703
|
});
|
|
3453
|
-
app.get(
|
|
3704
|
+
app.get(
|
|
3705
|
+
"/scheduling/bookings/:booking_id",
|
|
3706
|
+
(c) => tryRoute(c, () => deps.scheduling.getBooking(c.req.param("booking_id")))
|
|
3707
|
+
);
|
|
3454
3708
|
app.post("/scheduling/bookings/:booking_id/cancel", async (c) => {
|
|
3455
3709
|
const body = await c.req.json().catch(() => ({}));
|
|
3456
3710
|
return tryRoute(c, () => deps.scheduling.cancelBooking(c.req.param("booking_id"), body.reason));
|
|
3457
3711
|
});
|
|
3458
3712
|
app.get("/lite/bootstrap", (c) => tryRoute(c, () => deps.lite.bootstrap(deps.defaultBusinessId)));
|
|
3459
|
-
app.get(
|
|
3713
|
+
app.get(
|
|
3714
|
+
"/lite/resources/:resource_id",
|
|
3715
|
+
(c) => tryRoute(c, () => deps.lite.getResource(c.req.param("resource_id")))
|
|
3716
|
+
);
|
|
3460
3717
|
app.get("/lite/menu", (c) => tryRoute(c, () => deps.lite.getMenu(deps.defaultBusinessId)));
|
|
3461
|
-
app.get(
|
|
3462
|
-
|
|
3718
|
+
app.get(
|
|
3719
|
+
"/lite/menu/categories/:category_id",
|
|
3720
|
+
(c) => tryRoute(c, () => deps.lite.getMenuCategory(c.req.param("category_id")))
|
|
3721
|
+
);
|
|
3722
|
+
app.get(
|
|
3723
|
+
"/fx/rate",
|
|
3724
|
+
(c) => tryRoute(c, () => deps.fx.getRate(c.req.query("from") ?? "USD", c.req.query("to") ?? "GHS"))
|
|
3725
|
+
);
|
|
3463
3726
|
app.post("/fx/quotes", async (c) => {
|
|
3464
3727
|
const body = await c.req.json().catch(() => ({}));
|
|
3465
3728
|
return tryRoute(c, () => deps.fx.lockQuote(body));
|
|
@@ -3472,31 +3735,47 @@ function buildV1(deps) {
|
|
|
3472
3735
|
const body = await c.req.json().catch(() => ({}));
|
|
3473
3736
|
return tryRoute(c, () => deps.uploads.confirm(body));
|
|
3474
3737
|
});
|
|
3475
|
-
app.get(
|
|
3476
|
-
"/store-credit/balance",
|
|
3477
|
-
(c) => c.json({ data: { balance: "0.00", currency: "USD" } })
|
|
3478
|
-
);
|
|
3738
|
+
app.get("/store-credit/balance", (c) => c.json({ data: { balance: "0.00", currency: "USD" } }));
|
|
3479
3739
|
app.post("/activity/session", async (c) => {
|
|
3480
3740
|
await c.req.json().catch(() => ({}));
|
|
3481
3741
|
return c.json({ data: { recorded: true } });
|
|
3482
3742
|
});
|
|
3483
3743
|
app.post("/activity/events", async (c) => {
|
|
3484
3744
|
const body = await c.req.json().catch(() => ({}));
|
|
3485
|
-
return tryRoute(
|
|
3745
|
+
return tryRoute(
|
|
3746
|
+
c,
|
|
3747
|
+
() => deps.activity.recordEvents(
|
|
3748
|
+
deps.defaultBusinessId,
|
|
3749
|
+
body.analytics_session_id ?? c.var.session.id,
|
|
3750
|
+
body.events ?? []
|
|
3751
|
+
)
|
|
3752
|
+
);
|
|
3486
3753
|
});
|
|
3487
|
-
app.get(
|
|
3488
|
-
|
|
3754
|
+
app.get(
|
|
3755
|
+
"/activity/state",
|
|
3756
|
+
(c) => tryRoute(c, () => deps.activity.getState(deps.defaultBusinessId, c.var.session.id))
|
|
3757
|
+
);
|
|
3758
|
+
app.get(
|
|
3759
|
+
"/activity/recommendations",
|
|
3760
|
+
(c) => tryRoute(c, () => deps.activity.getRecommendations(deps.defaultBusinessId))
|
|
3761
|
+
);
|
|
3489
3762
|
app.post("/activity/messages/dismiss", async (c) => {
|
|
3490
3763
|
const body = await c.req.json().catch(() => ({}));
|
|
3491
3764
|
return tryRoute(c, () => deps.activity.dismissMessage(body.code ?? body.message_id ?? ""));
|
|
3492
3765
|
});
|
|
3493
3766
|
app.post(
|
|
3494
3767
|
"/support/conversation",
|
|
3495
|
-
(c) => tryRoute(
|
|
3768
|
+
(c) => tryRoute(
|
|
3769
|
+
c,
|
|
3770
|
+
() => deps.support.openConversation(deps.defaultBusinessId, c.var.session.customer_id)
|
|
3771
|
+
)
|
|
3496
3772
|
);
|
|
3497
3773
|
app.get(
|
|
3498
3774
|
"/support/conversation",
|
|
3499
|
-
(c) => tryRoute(
|
|
3775
|
+
(c) => tryRoute(
|
|
3776
|
+
c,
|
|
3777
|
+
() => deps.support.peekConversation(deps.defaultBusinessId, c.var.session.customer_id)
|
|
3778
|
+
)
|
|
3500
3779
|
);
|
|
3501
3780
|
app.post("/support/conversation/messages", async (c) => {
|
|
3502
3781
|
const body = await c.req.json().catch(() => ({}));
|
|
@@ -3512,7 +3791,12 @@ function buildV1(deps) {
|
|
|
3512
3791
|
});
|
|
3513
3792
|
app.get(
|
|
3514
3793
|
"/support/conversation/messages",
|
|
3515
|
-
(c) => tryRoute(
|
|
3794
|
+
(c) => tryRoute(
|
|
3795
|
+
c,
|
|
3796
|
+
() => deps.support.listMessages(c.req.query("conversation_id") ?? "", {
|
|
3797
|
+
limit: getQueryNum(c, "limit")
|
|
3798
|
+
})
|
|
3799
|
+
)
|
|
3516
3800
|
);
|
|
3517
3801
|
app.post("/support/conversation/messages/:messageId/reactions", async (c) => {
|
|
3518
3802
|
const body = await c.req.json().catch(() => ({}));
|
|
@@ -3533,7 +3817,10 @@ function buildV1(deps) {
|
|
|
3533
3817
|
});
|
|
3534
3818
|
app.get(
|
|
3535
3819
|
"/support/conversation/ws",
|
|
3536
|
-
(c) => c.json(
|
|
3820
|
+
(c) => c.json(
|
|
3821
|
+
{ note: "WebSocket connection \u2014 connect via ws:// at the same path", supported: false },
|
|
3822
|
+
426
|
|
3823
|
+
)
|
|
3537
3824
|
);
|
|
3538
3825
|
return app;
|
|
3539
3826
|
}
|
|
@@ -5669,6 +5956,7 @@ function toUICart(registry, cart) {
|
|
|
5669
5956
|
tax_rate: cart.tax_rate,
|
|
5670
5957
|
service_charge_rate: cart.service_charge_rate,
|
|
5671
5958
|
tax_inclusive: false,
|
|
5959
|
+
price_display_mode: "unspecified",
|
|
5672
5960
|
deposit_required: false,
|
|
5673
5961
|
deposit_amount: "0.00"
|
|
5674
5962
|
},
|
|
@@ -5828,6 +6116,7 @@ function createCartService(opts) {
|
|
|
5828
6116
|
tax_jurisdiction_label: label,
|
|
5829
6117
|
tax_inclusive: false,
|
|
5830
6118
|
tax_rate: cart.tax_rate,
|
|
6119
|
+
price_display_mode: "unspecified",
|
|
5831
6120
|
delivery_fee_details: null,
|
|
5832
6121
|
address_info: body.address_info
|
|
5833
6122
|
};
|
|
@@ -5983,9 +6272,11 @@ function createCheckoutService(opts) {
|
|
|
5983
6272
|
if (c.items.length === 0) throw validation("Cart is empty", { code: "CART_EMPTY" });
|
|
5984
6273
|
const orderId = ids.order();
|
|
5985
6274
|
const orderNumber = ids.orderNumber();
|
|
6275
|
+
const paymentId = ids.payment();
|
|
5986
6276
|
const reference = ids.payment();
|
|
5987
6277
|
const requiresAuth = body.payment_method === "mobile_money";
|
|
5988
6278
|
const isCard = body.payment_method === "card" || body.payment_method === "stripe";
|
|
6279
|
+
const cardProvider = body.payment_method === "stripe" || body.pay_currency?.toUpperCase() === "USD" ? "stripe" : "paystack";
|
|
5989
6280
|
const order = {
|
|
5990
6281
|
id: orderId,
|
|
5991
6282
|
business_id: c.business_id,
|
|
@@ -6009,6 +6300,7 @@ function createCheckoutService(opts) {
|
|
|
6009
6300
|
items: c.items,
|
|
6010
6301
|
applied_discount_ids: c.applied_discount_ids,
|
|
6011
6302
|
applied_discount_codes: c.applied_discount_codes,
|
|
6303
|
+
payment_id: paymentId,
|
|
6012
6304
|
payment_reference: reference,
|
|
6013
6305
|
metadata: body.metadata,
|
|
6014
6306
|
created_at: clock.iso(),
|
|
@@ -6025,31 +6317,57 @@ function createCheckoutService(opts) {
|
|
|
6025
6317
|
const result = {
|
|
6026
6318
|
order_id: orderId,
|
|
6027
6319
|
order_number: orderNumber,
|
|
6028
|
-
|
|
6320
|
+
payment_id: paymentId,
|
|
6321
|
+
payment_status: requiresAuth || isCard ? "pending" : "succeeded",
|
|
6029
6322
|
payment_reference: reference,
|
|
6030
6323
|
requires_authorization: requiresAuth,
|
|
6031
6324
|
authorization_type: requiresAuth ? "otp" : void 0,
|
|
6032
|
-
next_action: requiresAuth ? {
|
|
6033
|
-
|
|
6325
|
+
next_action: requiresAuth ? {
|
|
6326
|
+
type: "authorization",
|
|
6327
|
+
authorization_type: "otp",
|
|
6328
|
+
display_text: "Approve on your mobile money app"
|
|
6329
|
+
} : { type: "none" },
|
|
6330
|
+
provider: isCard ? cardProvider : body.payment_method,
|
|
6034
6331
|
bill_token: billToken
|
|
6035
6332
|
};
|
|
6036
6333
|
if (isCard) {
|
|
6037
|
-
result.next_action = { type: "redirect", authorization_url: `https://mock.cimplify.io/pay/${reference}` };
|
|
6038
|
-
result.authorization_url = `https://mock.cimplify.io/pay/${reference}`;
|
|
6039
|
-
result.client_secret = `pi_${orderId.slice(-12)}_secret_${Math.random().toString(36).slice(2, 18)}`;
|
|
6040
6334
|
const proc = globalThis.process;
|
|
6041
|
-
result.
|
|
6335
|
+
result.client_secret = cardProvider === "stripe" ? `pi_${orderId.slice(-12)}_secret_${Math.random().toString(36).slice(2, 18)}` : `access_${reference}`;
|
|
6336
|
+
result.public_key = cardProvider === "stripe" ? proc?.env?.NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY ?? "pk_test_mock_stripe" : proc?.env?.NEXT_PUBLIC_PAYSTACK_PUBLIC_KEY ?? "pk_test_mock_paystack";
|
|
6337
|
+
result.next_action = {
|
|
6338
|
+
type: "card_popup",
|
|
6339
|
+
provider: cardProvider,
|
|
6340
|
+
client_secret: result.client_secret,
|
|
6341
|
+
public_key: result.public_key
|
|
6342
|
+
};
|
|
6042
6343
|
}
|
|
6043
6344
|
return result;
|
|
6044
6345
|
},
|
|
6045
6346
|
authorize(body) {
|
|
6046
|
-
|
|
6047
|
-
if (!
|
|
6048
|
-
const
|
|
6347
|
+
if (!body.payment_id?.trim()) throw validation("payment_id required");
|
|
6348
|
+
if (!body.authorization) throw validation("authorization required");
|
|
6349
|
+
const order = registry.orders.list(
|
|
6350
|
+
(candidate) => candidate.payment_id === body.payment_id
|
|
6351
|
+
)[0];
|
|
6352
|
+
if (!order) throw notFound(`Payment ${body.payment_id} not found`);
|
|
6353
|
+
const updated = {
|
|
6354
|
+
...order,
|
|
6355
|
+
payment_state: "paid",
|
|
6356
|
+
status: "confirmed",
|
|
6357
|
+
updated_at: clock.iso()
|
|
6358
|
+
};
|
|
6049
6359
|
registry.orders.put(order.id, updated);
|
|
6050
6360
|
bus.emit("order.payment.captured", { order_id: order.id }, order.business_id);
|
|
6051
6361
|
bus.emit("order.confirmed", { order_id: order.id }, order.business_id);
|
|
6052
|
-
return {
|
|
6362
|
+
return {
|
|
6363
|
+
order_id: order.id,
|
|
6364
|
+
order_number: order.user_friendly_id,
|
|
6365
|
+
payment_id: body.payment_id,
|
|
6366
|
+
payment_reference: order.payment_reference,
|
|
6367
|
+
payment_status: "succeeded",
|
|
6368
|
+
requires_authorization: false,
|
|
6369
|
+
next_action: { type: "none" }
|
|
6370
|
+
};
|
|
6053
6371
|
}
|
|
6054
6372
|
};
|
|
6055
6373
|
}
|