@porulle/core 0.19.0 → 0.20.1
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/hooks/checkout.d.ts +3 -0
- package/dist/hooks/checkout.d.ts.map +1 -1
- package/dist/hooks/checkout.js +3 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/interfaces/rest/router.d.ts.map +1 -1
- package/dist/interfaces/rest/router.js +2 -2
- package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/checkout.js +5 -0
- package/dist/interfaces/rest/schemas/checkout.d.ts +8 -0
- package/dist/interfaces/rest/schemas/checkout.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/checkout.js +10 -0
- package/dist/interfaces/rest/utils.d.ts +1 -0
- package/dist/interfaces/rest/utils.d.ts.map +1 -1
- package/dist/interfaces/rest/utils.js +3 -0
- package/dist/kernel/database/scoped-db.d.ts +1 -0
- package/dist/kernel/database/scoped-db.d.ts.map +1 -1
- package/dist/kernel/database/scoped-db.js +12 -1
- package/dist/modules/payments/adapter.d.ts +3 -0
- package/dist/modules/payments/adapter.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hooks/checkout.ts +9 -1
- package/src/index.ts +1 -1
- package/src/interfaces/rest/router.ts +3 -2
- package/src/interfaces/rest/routes/checkout.ts +5 -0
- package/src/interfaces/rest/schemas/checkout.ts +10 -0
- package/src/interfaces/rest/utils.ts +4 -0
- package/src/kernel/database/scoped-db.ts +11 -1
- package/src/modules/payments/adapter.ts +3 -0
package/dist/hooks/checkout.d.ts
CHANGED
|
@@ -54,6 +54,8 @@ export interface CheckoutData {
|
|
|
54
54
|
paymentMethodToken?: string;
|
|
55
55
|
/** Stable retry key shared by order creation and payment authorization. */
|
|
56
56
|
idempotencyKey?: string;
|
|
57
|
+
returnUrl?: string;
|
|
58
|
+
cancelUrl?: string;
|
|
57
59
|
lineItems: CheckoutLineItem[];
|
|
58
60
|
subtotal: number;
|
|
59
61
|
discountTotal: number;
|
|
@@ -63,6 +65,7 @@ export interface CheckoutData {
|
|
|
63
65
|
promotionCodes?: string[];
|
|
64
66
|
paymentIntentId?: string;
|
|
65
67
|
paymentClientSecret?: string | undefined;
|
|
68
|
+
paymentRedirectUrl?: string | undefined;
|
|
66
69
|
shippingAddress?: ShippingAddress;
|
|
67
70
|
appliedPromotions?: AppliedPromotion[];
|
|
68
71
|
freeShipping?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/hooks/checkout.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/hooks/checkout.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/checkout.js
CHANGED
|
@@ -219,6 +219,8 @@ export const authorizePayment = async ({ data, context, }) => {
|
|
|
219
219
|
...(data.idempotencyKey !== undefined
|
|
220
220
|
? { idempotencyKey: data.idempotencyKey }
|
|
221
221
|
: {}),
|
|
222
|
+
...(data.returnUrl !== undefined ? { returnUrl: data.returnUrl } : {}),
|
|
223
|
+
...(data.cancelUrl !== undefined ? { cancelUrl: data.cancelUrl } : {}),
|
|
222
224
|
metadata: {
|
|
223
225
|
...(data.orderId !== undefined ? { orderId: data.orderId } : {}),
|
|
224
226
|
organizationId: resolveOrgIdForCommerce(context.actor, context.commerceConfig),
|
|
@@ -232,6 +234,7 @@ export const authorizePayment = async ({ data, context, }) => {
|
|
|
232
234
|
}
|
|
233
235
|
data.paymentIntentId = authorized.value.id;
|
|
234
236
|
data.paymentClientSecret = authorized.value.clientSecret ?? undefined;
|
|
237
|
+
data.paymentRedirectUrl = authorized.value.redirectUrl ?? undefined;
|
|
235
238
|
context.context.paymentIntentId = authorized.value.id;
|
|
236
239
|
return data;
|
|
237
240
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export type { CommerceConfig, CommercePlugin, ApiKeyScopeDefinition, GuestOrderA
|
|
|
3
3
|
export { defineCommercePlugin } from "./kernel/plugin/manifest.js";
|
|
4
4
|
export type { CommercePluginManifest, PluginContext, PluginHookRegistration, PluginLogger, PluginPermission, PluginRouteRegistration, } from "./kernel/plugin/manifest.js";
|
|
5
5
|
export { router } from "./interfaces/rest/router.js";
|
|
6
|
-
export { requirePerm } from "./interfaces/rest/utils.js";
|
|
6
|
+
export { markPublicRoute, markRoutePermissionGuard, requirePerm } from "./interfaces/rest/utils.js";
|
|
7
7
|
export { webhookRouter, type WebhookRouterResult } from "./interfaces/rest/webhook-router.js";
|
|
8
8
|
export { isPrivateUrl, isPrivateIp } from "./modules/webhooks/ssrf-guard.js";
|
|
9
9
|
export { createServer } from "./runtime/server.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { defineConfig } from "./config/define-config.js";
|
|
2
2
|
export { defineCommercePlugin } from "./kernel/plugin/manifest.js";
|
|
3
3
|
export { router } from "./interfaces/rest/router.js";
|
|
4
|
-
export { requirePerm } from "./interfaces/rest/utils.js";
|
|
4
|
+
export { markPublicRoute, markRoutePermissionGuard, requirePerm } from "./interfaces/rest/utils.js";
|
|
5
5
|
export { webhookRouter } from "./interfaces/rest/webhook-router.js";
|
|
6
6
|
export { isPrivateUrl, isPrivateIp } from "./modules/webhooks/ssrf-guard.js";
|
|
7
7
|
export { createServer } from "./runtime/server.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/interfaces/rest/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAe,CAAC,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/interfaces/rest/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ import { ErrorSchema } from "./schemas/shared.js";
|
|
|
30
30
|
import { mapErrorToResponse, mapErrorToStatus, markRoutePermissionGuard } from "./utils.js";
|
|
31
31
|
import { createScopedDb } from "../../kernel/database/scoped-db.js";
|
|
32
32
|
import { resolveOrgIdForCommerce } from "../../auth/org.js";
|
|
33
|
+
import { hasPermission } from "../../auth/permissions.js";
|
|
33
34
|
// ─── Shared OpenAPI Error Responses ──────────────────────────────────────────
|
|
34
35
|
const errorResponses = {
|
|
35
36
|
400: { content: { "application/json": { schema: ErrorSchema } }, description: "Bad request." },
|
|
@@ -169,8 +170,7 @@ class RouteChain {
|
|
|
169
170
|
return ctx.json({ error: { code: "UNAUTHORIZED", message: "Authentication required." } }, 401);
|
|
170
171
|
}
|
|
171
172
|
if (requiredPermission) {
|
|
172
|
-
|
|
173
|
-
if (!perms.includes(requiredPermission) && !perms.includes("*:*")) {
|
|
173
|
+
if (!hasPermission(actor, requiredPermission)) {
|
|
174
174
|
return ctx.json({
|
|
175
175
|
error: { code: "FORBIDDEN", message: `Permission '${requiredPermission}' is required.` },
|
|
176
176
|
}, 403);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/rest/routes/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAoBzD,OAAO,EAAE,KAAK,MAAM,EAAwC,MAAM,aAAa,CAAC;AAMhF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EAC1C,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/rest/routes/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAoBzD,OAAO,EAAE,KAAK,MAAM,EAAwC,MAAM,aAAa,CAAC;AAMhF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,EAC1C,KAAK,EAAE,KAAK,GAAG,IAAI,EACnB,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmC7B;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,gCAwV5C"}
|
|
@@ -99,6 +99,8 @@ export function checkoutRoutes(kernel) {
|
|
|
99
99
|
...(body.idempotencyKey !== undefined
|
|
100
100
|
? { idempotencyKey: body.idempotencyKey }
|
|
101
101
|
: {}),
|
|
102
|
+
...(body.returnUrl !== undefined ? { returnUrl: body.returnUrl } : {}),
|
|
103
|
+
...(body.cancelUrl !== undefined ? { cancelUrl: body.cancelUrl } : {}),
|
|
102
104
|
lineItems: [],
|
|
103
105
|
subtotal: 0,
|
|
104
106
|
discountTotal: 0,
|
|
@@ -286,6 +288,9 @@ export function checkoutRoutes(kernel) {
|
|
|
286
288
|
...(processed.paymentClientSecret
|
|
287
289
|
? { paymentClientSecret: processed.paymentClientSecret }
|
|
288
290
|
: {}),
|
|
291
|
+
...(processed.paymentRedirectUrl
|
|
292
|
+
? { paymentRedirectUrl: processed.paymentRedirectUrl }
|
|
293
|
+
: {}),
|
|
289
294
|
},
|
|
290
295
|
meta: afterReport.hasErrors
|
|
291
296
|
? { hookErrors: afterReport.errors }
|
|
@@ -4,6 +4,8 @@ export declare const CheckoutBodySchema: z.ZodObject<{
|
|
|
4
4
|
paymentMethodId: z.ZodString;
|
|
5
5
|
paymentMethodToken: z.ZodOptional<z.ZodString>;
|
|
6
6
|
idempotencyKey: z.ZodOptional<z.ZodString>;
|
|
7
|
+
returnUrl: z.ZodOptional<z.ZodString>;
|
|
8
|
+
cancelUrl: z.ZodOptional<z.ZodString>;
|
|
7
9
|
customerId: z.ZodOptional<z.ZodString>;
|
|
8
10
|
customerGroupIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
11
|
currency: z.ZodOptional<z.ZodString>;
|
|
@@ -29,6 +31,8 @@ export declare const OrderResponseSchema: z.ZodObject<{
|
|
|
29
31
|
discountTotal: z.ZodNumber;
|
|
30
32
|
grandTotal: z.ZodNumber;
|
|
31
33
|
placedAt: z.ZodString;
|
|
34
|
+
paymentClientSecret: z.ZodOptional<z.ZodString>;
|
|
35
|
+
paymentRedirectUrl: z.ZodOptional<z.ZodString>;
|
|
32
36
|
}, z.core.$strip>;
|
|
33
37
|
meta: z.ZodOptional<z.ZodObject<{
|
|
34
38
|
hookErrors: z.ZodArray<z.ZodString>;
|
|
@@ -49,6 +53,8 @@ export declare const checkoutRoute: {
|
|
|
49
53
|
paymentMethodId: z.ZodString;
|
|
50
54
|
paymentMethodToken: z.ZodOptional<z.ZodString>;
|
|
51
55
|
idempotencyKey: z.ZodOptional<z.ZodString>;
|
|
56
|
+
returnUrl: z.ZodOptional<z.ZodString>;
|
|
57
|
+
cancelUrl: z.ZodOptional<z.ZodString>;
|
|
52
58
|
customerId: z.ZodOptional<z.ZodString>;
|
|
53
59
|
customerGroupIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
54
60
|
currency: z.ZodOptional<z.ZodString>;
|
|
@@ -183,6 +189,8 @@ export declare const checkoutRoute: {
|
|
|
183
189
|
discountTotal: z.ZodNumber;
|
|
184
190
|
grandTotal: z.ZodNumber;
|
|
185
191
|
placedAt: z.ZodString;
|
|
192
|
+
paymentClientSecret: z.ZodOptional<z.ZodString>;
|
|
193
|
+
paymentRedirectUrl: z.ZodOptional<z.ZodString>;
|
|
186
194
|
}, z.core.$strip>;
|
|
187
195
|
meta: z.ZodOptional<z.ZodObject<{
|
|
188
196
|
hookErrors: z.ZodArray<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/rest/schemas/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AAKnD,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/rest/schemas/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AAKnD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;iBAkCF,CAAC;AAI9B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iBAkBF,CAAC;AAI/B,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqBxB,CAAC"}
|
|
@@ -15,6 +15,14 @@ export const CheckoutBodySchema = z.object({
|
|
|
15
15
|
example: "checkout-8f14e45f-1738312200",
|
|
16
16
|
description: "Client-supplied retry key. A re-submitted checkout with the same key returns the already-created order without re-authorizing payment (safe offline-queue replay).",
|
|
17
17
|
}),
|
|
18
|
+
returnUrl: z.string().url().optional().openapi({
|
|
19
|
+
example: "https://example.com/checkout/return",
|
|
20
|
+
description: "URL where the payment provider returns the shopper after payment.",
|
|
21
|
+
}),
|
|
22
|
+
cancelUrl: z.string().url().optional().openapi({
|
|
23
|
+
example: "https://example.com/checkout/cancel",
|
|
24
|
+
description: "URL where the payment provider returns the shopper after cancellation.",
|
|
25
|
+
}),
|
|
18
26
|
customerId: z.string().optional().openapi({ example: "customer-uuid-or-user-id" }),
|
|
19
27
|
customerGroupIds: z.array(z.string()).optional(),
|
|
20
28
|
currency: z.string().length(3).optional().openapi({ example: "USD" }),
|
|
@@ -41,6 +49,8 @@ export const OrderResponseSchema = z.object({
|
|
|
41
49
|
discountTotal: z.number(),
|
|
42
50
|
grandTotal: z.number(),
|
|
43
51
|
placedAt: z.string(),
|
|
52
|
+
paymentClientSecret: z.string().optional(),
|
|
53
|
+
paymentRedirectUrl: z.string().optional(),
|
|
44
54
|
}),
|
|
45
55
|
meta: z.object({
|
|
46
56
|
hookErrors: z.array(z.string()),
|
|
@@ -2,6 +2,7 @@ import { mapErrorToStatus } from "../../kernel/error-mapper.js";
|
|
|
2
2
|
import type { Actor } from "../../auth/types.js";
|
|
3
3
|
export declare const ROUTE_PERMISSION_GUARD: unique symbol;
|
|
4
4
|
export declare function markRoutePermissionGuard<T>(handler: T, methods?: readonly string[]): T;
|
|
5
|
+
export declare function markPublicRoute<T>(handler: T, methods?: readonly string[]): T;
|
|
5
6
|
type PermissionContext = {
|
|
6
7
|
get(key: string): unknown;
|
|
7
8
|
json(data: unknown, status: number): unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/interfaces/rest/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,eAAO,MAAM,sBAAsB,eAAyC,CAAC;AAM7E,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAKtF;AAED,KAAK,iBAAiB,GAAG;IACvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7C,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,SAAS,EAAE;QACT,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH,CAAC;AAIF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAOA;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQxD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAO/F;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,OACf;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,sBAmBpI;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,OAC9B;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,sBAkBpI;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,OAEjD,iBAAiB,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,sBAQ1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAIjF;AAED,wBAAgB,SAAS,CACvB,KAAK,CAAC,EAAE,MAAM,GAEZ;IACF,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;IAC1C,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B,GACG,SAAS,CASZ;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/interfaces/rest/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAEjD,eAAO,MAAM,sBAAsB,eAAyC,CAAC;AAM7E,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAKtF;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAE7E;AAED,KAAK,iBAAiB,GAAG;IACvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7C,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,SAAS,EAAE;QACT,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH,CAAC;AAIF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAOA;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQxD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAO/F;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,OACf;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,sBAmBpI;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,OAC9B;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,sBAkBpI;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,OAEjD,iBAAiB,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,sBAQ1E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAIjF;AAED,wBAAgB,SAAS,CACvB,KAAK,CAAC,EAAE,MAAM,GAEZ;IACF,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;IAC1C,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B,GACG,SAAS,CASZ;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C"}
|
|
@@ -7,6 +7,9 @@ export function markRoutePermissionGuard(handler, methods) {
|
|
|
7
7
|
}
|
|
8
8
|
return handler;
|
|
9
9
|
}
|
|
10
|
+
export function markPublicRoute(handler, methods) {
|
|
11
|
+
return markRoutePermissionGuard(handler, methods);
|
|
12
|
+
}
|
|
10
13
|
const MAX_PAGE_LIMIT = 100;
|
|
11
14
|
export function parsePagination(query) {
|
|
12
15
|
const page = Number.parseInt(query.page ?? "1", 10);
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* org-scoped tables automatically include the actor's organizationId,
|
|
6
6
|
* and SELECT / UPDATE / DELETE against org-scoped tables constrain rows to
|
|
7
7
|
* that organization — including when the caller supplies no WHERE clause.
|
|
8
|
+
* Joins and ordering stay within the organization scope across the fluent chain.
|
|
8
9
|
*
|
|
9
10
|
* Plugin route handlers receive this scoped db via PluginContext.database.db
|
|
10
11
|
* (organization resolved per operation from AsyncLocalStorage when used from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../../src/kernel/database/scoped-db.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../../src/kernel/database/scoped-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAMH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;AAgE3D,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,oBAAoB,GAAG,GAAG,CA2GpF"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* org-scoped tables automatically include the actor's organizationId,
|
|
6
6
|
* and SELECT / UPDATE / DELETE against org-scoped tables constrain rows to
|
|
7
7
|
* that organization — including when the caller supplies no WHERE clause.
|
|
8
|
+
* Joins and ordering stay within the organization scope across the fluent chain.
|
|
8
9
|
*
|
|
9
10
|
* Plugin route handlers receive this scoped db via PluginContext.database.db
|
|
10
11
|
* (organization resolved per operation from AsyncLocalStorage when used from
|
|
@@ -57,7 +58,17 @@ function wrapWhereable(builder, orgEq) {
|
|
|
57
58
|
return wrapWhereable(next, orgEq);
|
|
58
59
|
};
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
+
if (typeof sv !== "function")
|
|
62
|
+
return sv;
|
|
63
|
+
return (...args) => {
|
|
64
|
+
const next = sv.call(st, ...args);
|
|
65
|
+
if (next !== null && (typeof next === "object" || typeof next === "function")) {
|
|
66
|
+
const where = Reflect.get(next, "where");
|
|
67
|
+
if (typeof where === "function")
|
|
68
|
+
return wrapWhereable(next, orgEq);
|
|
69
|
+
}
|
|
70
|
+
return next;
|
|
71
|
+
};
|
|
61
72
|
},
|
|
62
73
|
});
|
|
63
74
|
}
|
|
@@ -5,6 +5,7 @@ export interface PaymentIntent {
|
|
|
5
5
|
amount: number;
|
|
6
6
|
currency: string;
|
|
7
7
|
clientSecret?: string | null;
|
|
8
|
+
redirectUrl?: string | null;
|
|
8
9
|
}
|
|
9
10
|
export interface PaymentCapture {
|
|
10
11
|
id: string;
|
|
@@ -31,6 +32,8 @@ export interface CreatePaymentIntentParams {
|
|
|
31
32
|
paymentMethodToken?: string;
|
|
32
33
|
/** Stable key forwarded to the provider so retries cannot create a second intent. */
|
|
33
34
|
idempotencyKey?: string;
|
|
35
|
+
returnUrl?: string;
|
|
36
|
+
cancelUrl?: string;
|
|
34
37
|
terminalId?: string;
|
|
35
38
|
}
|
|
36
39
|
export interface PaymentAdapter {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/modules/payments/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/modules/payments/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qFAAqF;IACrF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IACvF,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1F,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAClG,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;CACvE"}
|
package/package.json
CHANGED
package/src/hooks/checkout.ts
CHANGED
|
@@ -69,6 +69,8 @@ export interface CheckoutData {
|
|
|
69
69
|
paymentMethodToken?: string;
|
|
70
70
|
/** Stable retry key shared by order creation and payment authorization. */
|
|
71
71
|
idempotencyKey?: string;
|
|
72
|
+
returnUrl?: string;
|
|
73
|
+
cancelUrl?: string;
|
|
72
74
|
lineItems: CheckoutLineItem[];
|
|
73
75
|
subtotal: number;
|
|
74
76
|
discountTotal: number;
|
|
@@ -78,6 +80,7 @@ export interface CheckoutData {
|
|
|
78
80
|
promotionCodes?: string[];
|
|
79
81
|
paymentIntentId?: string;
|
|
80
82
|
paymentClientSecret?: string | undefined;
|
|
83
|
+
paymentRedirectUrl?: string | undefined;
|
|
81
84
|
shippingAddress?: ShippingAddress;
|
|
82
85
|
appliedPromotions?: AppliedPromotion[];
|
|
83
86
|
freeShipping?: boolean;
|
|
@@ -533,11 +536,13 @@ export const authorizePayment: BeforeHook<CheckoutData> = async ({
|
|
|
533
536
|
paymentMethodId: string;
|
|
534
537
|
paymentMethodToken?: string;
|
|
535
538
|
idempotencyKey?: string;
|
|
539
|
+
returnUrl?: string;
|
|
540
|
+
cancelUrl?: string;
|
|
536
541
|
customerId?: string;
|
|
537
542
|
metadata: Record<string, unknown>;
|
|
538
543
|
}): Promise<{
|
|
539
544
|
ok: boolean;
|
|
540
|
-
value?: { id: string; clientSecret?: string | null };
|
|
545
|
+
value?: { id: string; clientSecret?: string | null; redirectUrl?: string | null };
|
|
541
546
|
error?: { message: string };
|
|
542
547
|
}>;
|
|
543
548
|
};
|
|
@@ -551,6 +556,8 @@ export const authorizePayment: BeforeHook<CheckoutData> = async ({
|
|
|
551
556
|
...(data.idempotencyKey !== undefined
|
|
552
557
|
? { idempotencyKey: data.idempotencyKey }
|
|
553
558
|
: {}),
|
|
559
|
+
...(data.returnUrl !== undefined ? { returnUrl: data.returnUrl } : {}),
|
|
560
|
+
...(data.cancelUrl !== undefined ? { cancelUrl: data.cancelUrl } : {}),
|
|
554
561
|
metadata: {
|
|
555
562
|
...(data.orderId !== undefined ? { orderId: data.orderId } : {}),
|
|
556
563
|
organizationId: resolveOrgIdForCommerce(context.actor, context.commerceConfig),
|
|
@@ -568,6 +575,7 @@ export const authorizePayment: BeforeHook<CheckoutData> = async ({
|
|
|
568
575
|
|
|
569
576
|
data.paymentIntentId = authorized.value.id;
|
|
570
577
|
data.paymentClientSecret = authorized.value.clientSecret ?? undefined;
|
|
578
|
+
data.paymentRedirectUrl = authorized.value.redirectUrl ?? undefined;
|
|
571
579
|
context.context.paymentIntentId = authorized.value.id;
|
|
572
580
|
return data;
|
|
573
581
|
};
|
package/src/index.ts
CHANGED
|
@@ -16,7 +16,7 @@ export type {
|
|
|
16
16
|
} from "./kernel/plugin/manifest.js";
|
|
17
17
|
|
|
18
18
|
export { router } from "./interfaces/rest/router.js";
|
|
19
|
-
export { requirePerm } from "./interfaces/rest/utils.js";
|
|
19
|
+
export { markPublicRoute, markRoutePermissionGuard, requirePerm } from "./interfaces/rest/utils.js";
|
|
20
20
|
export { webhookRouter, type WebhookRouterResult } from "./interfaces/rest/webhook-router.js";
|
|
21
21
|
export { isPrivateUrl, isPrivateIp } from "./modules/webhooks/ssrf-guard.js";
|
|
22
22
|
export { createServer } from "./runtime/server.js";
|
|
@@ -33,6 +33,8 @@ import type { CommerceConfig } from "../../config/types.js";
|
|
|
33
33
|
import type { PluginRouteRegistration } from "../../kernel/plugin/manifest.js";
|
|
34
34
|
import { createScopedDb } from "../../kernel/database/scoped-db.js";
|
|
35
35
|
import { resolveOrgIdForCommerce } from "../../auth/org.js";
|
|
36
|
+
import { hasPermission } from "../../auth/permissions.js";
|
|
37
|
+
import type { Actor } from "../../auth/types.js";
|
|
36
38
|
|
|
37
39
|
// ─── Shared OpenAPI Error Responses ──────────────────────────────────────────
|
|
38
40
|
|
|
@@ -221,8 +223,7 @@ class RouteChain {
|
|
|
221
223
|
}
|
|
222
224
|
|
|
223
225
|
if (requiredPermission) {
|
|
224
|
-
|
|
225
|
-
if (!perms.includes(requiredPermission) && !perms.includes("*:*")) {
|
|
226
|
+
if (!hasPermission(actor as Actor | null, requiredPermission)) {
|
|
226
227
|
return ctx.json({
|
|
227
228
|
error: { code: "FORBIDDEN", message: `Permission '${requiredPermission}' is required.` },
|
|
228
229
|
}, 403);
|
|
@@ -140,6 +140,8 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
140
140
|
...(body.idempotencyKey !== undefined
|
|
141
141
|
? { idempotencyKey: body.idempotencyKey }
|
|
142
142
|
: {}),
|
|
143
|
+
...(body.returnUrl !== undefined ? { returnUrl: body.returnUrl } : {}),
|
|
144
|
+
...(body.cancelUrl !== undefined ? { cancelUrl: body.cancelUrl } : {}),
|
|
143
145
|
lineItems: [],
|
|
144
146
|
subtotal: 0,
|
|
145
147
|
discountTotal: 0,
|
|
@@ -368,6 +370,9 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
368
370
|
...(processed.paymentClientSecret
|
|
369
371
|
? { paymentClientSecret: processed.paymentClientSecret }
|
|
370
372
|
: {}),
|
|
373
|
+
...(processed.paymentRedirectUrl
|
|
374
|
+
? { paymentRedirectUrl: processed.paymentRedirectUrl }
|
|
375
|
+
: {}),
|
|
371
376
|
},
|
|
372
377
|
meta: afterReport.hasErrors
|
|
373
378
|
? { hookErrors: afterReport.errors }
|
|
@@ -17,6 +17,14 @@ export const CheckoutBodySchema = z.object({
|
|
|
17
17
|
example: "checkout-8f14e45f-1738312200",
|
|
18
18
|
description: "Client-supplied retry key. A re-submitted checkout with the same key returns the already-created order without re-authorizing payment (safe offline-queue replay).",
|
|
19
19
|
}),
|
|
20
|
+
returnUrl: z.string().url().optional().openapi({
|
|
21
|
+
example: "https://example.com/checkout/return",
|
|
22
|
+
description: "URL where the payment provider returns the shopper after payment.",
|
|
23
|
+
}),
|
|
24
|
+
cancelUrl: z.string().url().optional().openapi({
|
|
25
|
+
example: "https://example.com/checkout/cancel",
|
|
26
|
+
description: "URL where the payment provider returns the shopper after cancellation.",
|
|
27
|
+
}),
|
|
20
28
|
customerId: z.string().optional().openapi({ example: "customer-uuid-or-user-id" }),
|
|
21
29
|
customerGroupIds: z.array(z.string()).optional(),
|
|
22
30
|
currency: z.string().length(3).optional().openapi({ example: "USD" }),
|
|
@@ -45,6 +53,8 @@ export const OrderResponseSchema = z.object({
|
|
|
45
53
|
discountTotal: z.number(),
|
|
46
54
|
grandTotal: z.number(),
|
|
47
55
|
placedAt: z.string(),
|
|
56
|
+
paymentClientSecret: z.string().optional(),
|
|
57
|
+
paymentRedirectUrl: z.string().optional(),
|
|
48
58
|
}),
|
|
49
59
|
meta: z.object({
|
|
50
60
|
hookErrors: z.array(z.string()),
|
|
@@ -16,6 +16,10 @@ export function markRoutePermissionGuard<T>(handler: T, methods?: readonly strin
|
|
|
16
16
|
return handler;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
export function markPublicRoute<T>(handler: T, methods?: readonly string[]): T {
|
|
20
|
+
return markRoutePermissionGuard(handler, methods);
|
|
21
|
+
}
|
|
22
|
+
|
|
19
23
|
type PermissionContext = {
|
|
20
24
|
get(key: string): unknown;
|
|
21
25
|
json(data: unknown, status: number): unknown;
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* org-scoped tables automatically include the actor's organizationId,
|
|
6
6
|
* and SELECT / UPDATE / DELETE against org-scoped tables constrain rows to
|
|
7
7
|
* that organization — including when the caller supplies no WHERE clause.
|
|
8
|
+
* Joins and ordering stay within the organization scope across the fluent chain.
|
|
8
9
|
*
|
|
9
10
|
* Plugin route handlers receive this scoped db via PluginContext.database.db
|
|
10
11
|
* (organization resolved per operation from AsyncLocalStorage when used from
|
|
@@ -63,7 +64,16 @@ function wrapWhereable(builder: unknown, orgEq: SQL): unknown {
|
|
|
63
64
|
return wrapWhereable(next, orgEq);
|
|
64
65
|
};
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
+
if (typeof sv !== "function") return sv;
|
|
68
|
+
|
|
69
|
+
return (...args: unknown[]) => {
|
|
70
|
+
const next = (sv as (...a: unknown[]) => unknown).call(st, ...args);
|
|
71
|
+
if (next !== null && (typeof next === "object" || typeof next === "function")) {
|
|
72
|
+
const where = Reflect.get(next, "where");
|
|
73
|
+
if (typeof where === "function") return wrapWhereable(next, orgEq);
|
|
74
|
+
}
|
|
75
|
+
return next;
|
|
76
|
+
};
|
|
67
77
|
},
|
|
68
78
|
});
|
|
69
79
|
}
|
|
@@ -6,6 +6,7 @@ export interface PaymentIntent {
|
|
|
6
6
|
amount: number;
|
|
7
7
|
currency: string;
|
|
8
8
|
clientSecret?: string | null;
|
|
9
|
+
redirectUrl?: string | null;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
export interface PaymentCapture {
|
|
@@ -36,6 +37,8 @@ export interface CreatePaymentIntentParams {
|
|
|
36
37
|
paymentMethodToken?: string;
|
|
37
38
|
/** Stable key forwarded to the provider so retries cannot create a second intent. */
|
|
38
39
|
idempotencyKey?: string;
|
|
40
|
+
returnUrl?: string;
|
|
41
|
+
cancelUrl?: string;
|
|
39
42
|
terminalId?: string;
|
|
40
43
|
}
|
|
41
44
|
|