@nexo-labs/payload-stripe-inventory 1.6.11 → 1.6.13
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/index-DYkUVDtk.d.mts +103 -0
- package/dist/index-DYkUVDtk.d.mts.map +1 -0
- package/dist/index.d.mts +2 -15
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/server/index.d.mts +225 -41
- package/dist/server/index.d.mts.map +1 -1
- package/dist/server/index.mjs +423 -253
- package/dist/server/index.mjs.map +1 -1
- package/dist/{src-BmlQoR4x.mjs → src-I_DPhIL5.mjs} +15 -28
- package/dist/src-I_DPhIL5.mjs.map +1 -0
- package/package.json +2 -3
- package/dist/index-D-NQPUJO.d.mts +0 -892
- package/dist/index-D-NQPUJO.d.mts.map +0 -1
- package/dist/src-BmlQoR4x.mjs.map +0 -1
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
|
|
3
|
+
//#region src/types/customer.types.d.ts
|
|
4
|
+
interface Customer {
|
|
5
|
+
stripeId: string;
|
|
6
|
+
email: string;
|
|
7
|
+
inventory: CustomerInventory;
|
|
8
|
+
}
|
|
9
|
+
interface CustomerInventory {
|
|
10
|
+
subscriptions: {
|
|
11
|
+
[key: string]: Stripe.Subscription & {
|
|
12
|
+
permissions: string[];
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
products: {
|
|
16
|
+
[key: string]: Stripe.Product & {
|
|
17
|
+
permissions: string[];
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
payments: {
|
|
21
|
+
[key: string]: Stripe.PaymentIntent;
|
|
22
|
+
};
|
|
23
|
+
invoices: {
|
|
24
|
+
[key: string]: Stripe.Invoice;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
//#region src/types/permission.types.d.ts
|
|
29
|
+
interface Subscription {
|
|
30
|
+
status?: string;
|
|
31
|
+
}
|
|
32
|
+
interface BaseUser<T = any> {
|
|
33
|
+
id: string | number;
|
|
34
|
+
name?: string;
|
|
35
|
+
email?: string;
|
|
36
|
+
customer?: Customer | null;
|
|
37
|
+
roles?: string[];
|
|
38
|
+
inventory?: T;
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
}
|
|
41
|
+
interface User extends BaseUser {}
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/types/user-inventory.types.d.ts
|
|
44
|
+
interface UnlockItem {
|
|
45
|
+
collection: string;
|
|
46
|
+
id: number;
|
|
47
|
+
dateUnlocked: Date;
|
|
48
|
+
payload?: any;
|
|
49
|
+
}
|
|
50
|
+
interface FavoriteItem {
|
|
51
|
+
collection: string;
|
|
52
|
+
id: number;
|
|
53
|
+
dateUnlocked: Date;
|
|
54
|
+
payload?: any;
|
|
55
|
+
}
|
|
56
|
+
interface UserInventory {
|
|
57
|
+
unlocks: UnlockItem[];
|
|
58
|
+
favorites: FavoriteItem[];
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/types/result.types.d.ts
|
|
62
|
+
/**
|
|
63
|
+
* A discriminated union type for representing operation results.
|
|
64
|
+
* Inspired by Rust's Result type.
|
|
65
|
+
*
|
|
66
|
+
* @template T - The type of the success data
|
|
67
|
+
* @template E - The type of the error (defaults to string)
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* function divide(a: number, b: number): Result<number> {
|
|
72
|
+
* if (b === 0) {
|
|
73
|
+
* return { error: "Cannot divide by zero" };
|
|
74
|
+
* }
|
|
75
|
+
* return { data: a / b };
|
|
76
|
+
* }
|
|
77
|
+
*
|
|
78
|
+
* const result = divide(10, 2);
|
|
79
|
+
* if (result.error) {
|
|
80
|
+
* console.error(result.error);
|
|
81
|
+
* } else {
|
|
82
|
+
* console.log(result.data); // 5
|
|
83
|
+
* }
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
type Result<T, E = string> = {
|
|
87
|
+
data: T;
|
|
88
|
+
error?: never;
|
|
89
|
+
} | {
|
|
90
|
+
data?: never;
|
|
91
|
+
error: E;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Helper to create a success result
|
|
95
|
+
*/
|
|
96
|
+
declare const ok: <T>(data: T) => Result<T, never>;
|
|
97
|
+
/**
|
|
98
|
+
* Helper to create an error result
|
|
99
|
+
*/
|
|
100
|
+
declare const err: <E = string>(error: E) => Result<never, E>;
|
|
101
|
+
//#endregion
|
|
102
|
+
export { UnlockItem as a, Subscription as c, CustomerInventory as d, FavoriteItem as i, User as l, err as n, UserInventory as o, ok as r, BaseUser as s, Result as t, Customer as u };
|
|
103
|
+
//# sourceMappingURL=index-DYkUVDtk.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DYkUVDtk.d.mts","names":[],"sources":["../src/types/customer.types.ts","../src/types/permission.types.ts","../src/types/user-inventory.types.ts","../src/types/result.types.ts"],"sourcesContent":[],"mappings":";;;UAEiB,QAAA;;EAAA,KAAA,EAAA,MAAQ;EAMR,SAAA,EAHJ,iBAGqB;;AAEL,UAFZ,iBAAA,CAEmB;EACP,aAAO,EAAA;IACA,CAAA,GAAA,EAAA,MAAA,CAAA,EAHF,MAAA,CAAO,YAGL,GAAA;MAAO,WAAA,EAAA,MAAA,EAAA;;;;ICV1B,CAAA,GAAA,EAAA,MAAY,CAAA,EDQA,MAAA,CAAO,OCRP,GAAA;MAIZ,WAAQ,EAAA,MAIZ,EAAA;IAMI,CAAA;;;mBDLY,MAAA,CAAO;EEXnB,CAAA;EAOE,QAAA,EAAA;IAOA,CAAA,GAAA,EAAA,MAAa,CAAA,EFFH,MAAA,CAAO,OEGvB;;;;;UDbI,YAAA;;ADAjB;AAMiB,UCFA,QDEiB,CAAA,IAAA,GAAA,CAAA,CAAA;EACA,EAAA,EAAO,MAAA,GAAA,MAAA;EACZ,IAAO,CAAA,EAAA,MAAA;EACP,KAAO,CAAA,EAAA,MAAA;EACP,QAAO,CAAA,ECFvB,QDEuB,GAAA,IAAA;EAAO,KAAA,CAAA,EAAA,MAAA,EAAA;cCA7B;;;AAVG,UAcA,IAAA,SAAa,QAdD,CAAA,CAI7B;;;UCNiB,UAAA;;;EFEA,YAAQ,EECP,IFDO;EAMR,OAAA,CAAA,EAAA,GAAA;;AAEY,UEHV,YAAA,CFGiB;EACP,UAAO,EAAA,MAAA;EACP,EAAA,EAAO,MAAA;EAAO,YAAA,EEFzB,IFEyB;;;UEExB,aAAA;EDZF,OAAA,ECaJ,UDbgB,EAAA;EAIZ,SAAA,ECUF,YDVU,EAIZ;AAMb;;;;;;ADdA;AAMA;;;;;;;;;ACNA;AAIA;AAUA;;;;AChBA;AAOE;AAOA;;;KCUU;EAAA,IAAA,EACA,CADA;EAOC,KAAiD,CAAA,EAAA,KAAA;CAAlC,GAAA;EAAW,IAAA,CAAA,EAAA,KAAA;EAAP,KAAA,EALL,CAKK;CAAM;AAKtC;;;AAA2C,cAL9B,EAK8B,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EALf,CAKe,EAAA,GALX,MAKW,CALJ,CAKI,EAAA,KAAA,CAAA;;;;cAA9B,yBAA0B,MAAI,cAAc"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as UnlockItem, c as Subscription, d as CustomerInventory, i as FavoriteItem, l as User, n as err, o as UserInventory, r as ok, s as BaseUser, t as Result, u as Customer } from "./index-DYkUVDtk.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/model/builders.d.ts
|
|
4
4
|
declare const generateUserInventory: () => UserInventory;
|
|
@@ -77,25 +77,12 @@ declare const evalPermissionByRoleQuery: <T extends BaseUser>({
|
|
|
77
77
|
content
|
|
78
78
|
}: Props<T>) => boolean;
|
|
79
79
|
//#endregion
|
|
80
|
-
//#region src/model/fetch-permitted-content-query.d.ts
|
|
81
|
-
/**
|
|
82
|
-
* Filtra contenido basado en los permisos del usuario
|
|
83
|
-
*/
|
|
84
|
-
declare const fetchPermittedContentQuery: <T extends BaseUser, C>(user: T | null | undefined, permissions: (Permission | number)[] | null | undefined, content: C, freeContent?: C | null) => C | null;
|
|
85
|
-
//#endregion
|
|
86
80
|
//#region src/model/get-user-permissions.d.ts
|
|
87
81
|
/**
|
|
88
82
|
* Obtiene los permisos de un usuario basados en su inventario y suscripciones activas
|
|
89
83
|
*/
|
|
90
84
|
declare const getUserPermissions: (user?: BaseUser | null) => string[];
|
|
91
85
|
//#endregion
|
|
92
|
-
//#region src/model/permissions.d.ts
|
|
93
|
-
declare const getPermissionsSlugs: ({
|
|
94
|
-
permissions
|
|
95
|
-
}: {
|
|
96
|
-
permissions?: (number | Permission)[] | null | undefined;
|
|
97
|
-
}) => any;
|
|
98
|
-
//#endregion
|
|
99
86
|
//#region src/model/check-if-user-can-unlock-query.d.ts
|
|
100
87
|
/**
|
|
101
88
|
* Verifica si un usuario puede desbloquear un elemento basado en sus permisos y límites semanales
|
|
@@ -119,5 +106,5 @@ declare const getNextUnlockDateQuery: (user: BaseUser<UserInventory>) => Date;
|
|
|
119
106
|
//#region src/model/is-content-unlocked.d.ts
|
|
120
107
|
declare const isContentUnlocked: (user: BaseUser<UserInventory>, contentId: number, collection: string) => boolean;
|
|
121
108
|
//#endregion
|
|
122
|
-
export { BaseUser, COLLECTION_SLUG_CUSTOMERS, COLLECTION_SLUG_PRICES, COLLECTION_SLUG_PRODUCTS, COLLECTION_SLUG_USER, Customer, CustomerInventory, FavoriteItem, MAX_UNLOCKS_PER_WEEK, PERMISSIONS,
|
|
109
|
+
export { BaseUser, COLLECTION_SLUG_CUSTOMERS, COLLECTION_SLUG_PRICES, COLLECTION_SLUG_PRODUCTS, COLLECTION_SLUG_USER, Customer, CustomerInventory, FavoriteItem, MAX_UNLOCKS_PER_WEEK, PERMISSIONS, PricingPlanInterval, PricingType, QUERY_PERMISSION_TYPES, Result, Subscription, UnlockItem, User, UserInventory, checkIfUserCanUnlockQuery, countWeeklyUnlocksQuery, err, evalAdvancePermissionQuery, evalPermissionByRoleQuery, formatOptions, generateCustomerInventory, generateUserInventory, getNextUnlockDateQuery, getUserPermissions, isContentUnlocked, ok, permissionSlugs };
|
|
123
110
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/model/builders.ts","../src/model/constants.ts","../src/model/eval-advance-permissionQuery.ts","../src/model/eval-permission-by-role-query.ts","../src/model/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/model/builders.ts","../src/model/constants.ts","../src/model/eval-advance-permissionQuery.ts","../src/model/eval-permission-by-role-query.ts","../src/model/get-user-permissions.ts","../src/model/check-if-user-can-unlock-query.ts","../src/model/get-count-weekly-unlocks-query.ts","../src/model/get-next-unlock-date-query.ts","../src/model/is-content-unlocked.ts"],"sourcesContent":[],"mappings":";;;cAEa,6BAA4B;cAK5B,iCAAgC;;;cCPhC;cACA;cACA;ADAA,cCCA,yBDD4B,EAAA,WAGvC;AAEW,cCFA,sBDOX,EAL2C;;;;ECPhC,SAAA,UAAA,EAAA,YAA8C;AAC3D,CAAA;AACa,cAiBA,eAjBuC,EAAA;EACvC,QAAA,EAAA,MAAA;EAEA,GAAA,EAAA,MAAA;EAcA,MAAA,EAAA,MAAA;EASA,IAAA,EAAA,MAAA;EAQA,QAAA,EAAA,MAAA;EAEA,KAAA,EAAA,MAAA;AAKb,CAAA;AAOa,cAtBA,WAsBsB,EAAA;;;;ACjDqB,CAAA,EAAA;AAO9B,cD4Bb,oBC5Ba,EAAA,CAAA;AAClB,cD6BK,WC7BL,EAAA;EACyB,SAAA,QAAA,EAAA,UAAA;EAAsB,SAAA,SAAA,EAAA,WAAA;AAIvD,CAAA;AAAqD,cD6BxC,mBC7BwC,EAAA;EAAQ,SAAA,GAAA,EAAA,KAAA;EAAA,SAAA,IAAA,EAAA,MAAA;EAAA,SAAA,KAAA,EAAA,OAAA;EAIpD,SAAA,IAAA,EAAA,MAAA;CAAN;AAAK,cDgCK,aChCL,EAAA,CAAA,GAAA,EDgC2B,MChC3B,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,GAAA;;;;;;;AFhBR;AAKA;UECU,kBAAgB;QAClB;iCACyB;EDVpB,WAAA,CAAA,EAAA,MAAA,EAAA,GAAA,SAA8C;AAC3D;AACa,cCYA,0BDZuC,EAAA,CAAA,UCYC,QDZD,CAAA,CAAA;EAAA,IAAA;EAAA,gBAAA;EAAA;AAAA,CAAA,ECgBjD,ODhBiD,CCgB3C,CDhB2C,CAAA,EAAA,GAAA,OAAA;;;;;ADApD;AAKA,UGAU,KHAG,CAAA,UGAa,QHKxB,CAAA,CAAA;QGJM;;;IFRK,UAAA,EAAA,MAAA;IACA,EAAA,EAAA,MAAA;EACA,CAAA;AACb;AAEa,cEWA,yBFNH,EAAA,CAAA,UEM0C,QFN1C,CAAA,CAAA;EAAA,IAAA;EAAA,WAAA;EAAA;AAAA,CAAA,EEUP,KFVO,CEUD,CFVC,CAAA,EAAA,GAAA,OAAA;;;;;ADRV;AAKa,cIFA,kBJOX,EAAA,CAAA,IAAA,CAL2C,EIFH,QJEG,GAAA,IAK3C,EAAA,GAAA,MAAA,EAAA;;;;;AAVF;AAKA;;;cKEa,kCACL;;;;;ALRR;AAKA;;cMAa,gCACL,SAAS;;;cCNJ,+BAAgC,SAAS,mBAAiB;;;cCA1D,0BACL,SAAS"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { S as generateUserInventory, _ as PricingType, a as
|
|
1
|
+
import { S as generateUserInventory, _ as PricingType, a as checkIfUserCanUnlockQuery, b as permissionSlugs, c as isContentUnlocked, d as COLLECTION_SLUG_PRICES, f as COLLECTION_SLUG_PRODUCTS, g as PricingPlanInterval, h as PERMISSIONS, i as countWeeklyUnlocksQuery, l as getUserPermissions, m as MAX_UNLOCKS_PER_WEEK, n as ok, o as evalAdvancePermissionQuery, p as COLLECTION_SLUG_USER, r as getNextUnlockDateQuery, s as evalPermissionByRoleQuery, t as err, u as COLLECTION_SLUG_CUSTOMERS, v as QUERY_PERMISSION_TYPES, x as generateCustomerInventory, y as formatOptions } from "./src-I_DPhIL5.mjs";
|
|
2
2
|
|
|
3
|
-
export { COLLECTION_SLUG_CUSTOMERS, COLLECTION_SLUG_PRICES, COLLECTION_SLUG_PRODUCTS, COLLECTION_SLUG_USER, MAX_UNLOCKS_PER_WEEK, PERMISSIONS, PricingPlanInterval, PricingType, QUERY_PERMISSION_TYPES, checkIfUserCanUnlockQuery, countWeeklyUnlocksQuery, evalAdvancePermissionQuery, evalPermissionByRoleQuery,
|
|
3
|
+
export { COLLECTION_SLUG_CUSTOMERS, COLLECTION_SLUG_PRICES, COLLECTION_SLUG_PRODUCTS, COLLECTION_SLUG_USER, MAX_UNLOCKS_PER_WEEK, PERMISSIONS, PricingPlanInterval, PricingType, QUERY_PERMISSION_TYPES, checkIfUserCanUnlockQuery, countWeeklyUnlocksQuery, err, evalAdvancePermissionQuery, evalPermissionByRoleQuery, formatOptions, generateCustomerInventory, generateUserInventory, getNextUnlockDateQuery, getUserPermissions, isContentUnlocked, ok, permissionSlugs };
|
package/dist/server/index.d.mts
CHANGED
|
@@ -1,7 +1,201 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as CustomerInventory, s as BaseUser, t as Result } from "../index-DYkUVDtk.mjs";
|
|
2
2
|
import Stripe from "stripe";
|
|
3
|
-
import { Access, CollectionConfig,
|
|
3
|
+
import { Access, CollectionConfig, Endpoint, Payload, PayloadHandler, PayloadRequest, Plugin } from "payload";
|
|
4
4
|
|
|
5
|
+
//#region src/server/plugin/stripe-inventory-types.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* URL routes configuration for Stripe redirects
|
|
9
|
+
*/
|
|
10
|
+
interface StripeInventoryRoutes {
|
|
11
|
+
/** URL to redirect after subscription-related actions */
|
|
12
|
+
subscriptionPageHref: string;
|
|
13
|
+
/** URL to redirect after donation-related actions (optional, defaults to subscriptionPageHref) */
|
|
14
|
+
donationPageHref?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for the Stripe Inventory plugin
|
|
18
|
+
* @template TProduct - The product type used by the consumer (defaults to unknown)
|
|
19
|
+
* @template TContent - The content type used by the consumer (defaults to unknown)
|
|
20
|
+
*/
|
|
21
|
+
interface StripeInventoryPluginConfig<TProduct = unknown, TContent = unknown> {
|
|
22
|
+
/**
|
|
23
|
+
* URL routes for redirects after Stripe operations
|
|
24
|
+
*/
|
|
25
|
+
routes: StripeInventoryRoutes;
|
|
26
|
+
/**
|
|
27
|
+
* Base path for all Stripe endpoints (default: '/stripe')
|
|
28
|
+
* Endpoints will be available at /api{basePath}/checkout, /api{basePath}/portal, etc.
|
|
29
|
+
*/
|
|
30
|
+
basePath?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Callback invoked when a subscription is created or deleted
|
|
33
|
+
* @param type - The type of subscription event ('create' or 'delete')
|
|
34
|
+
* @param userId - The ID of the user associated with the subscription
|
|
35
|
+
*/
|
|
36
|
+
onSubscriptionUpdate?: (type: "create" | "delete", userId: string) => Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Optional permission check for all Stripe endpoints.
|
|
39
|
+
* If not provided, only checks for authenticated user.
|
|
40
|
+
* @param request - The Payload request object
|
|
41
|
+
* @returns true if the user has permission, false otherwise
|
|
42
|
+
*/
|
|
43
|
+
checkPermissions?: (request: PayloadRequest) => Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Optional custom user resolver.
|
|
46
|
+
* Use this if you need custom logic to resolve the user from the request.
|
|
47
|
+
* If not provided, uses request.user.
|
|
48
|
+
* @param request - The Payload request object
|
|
49
|
+
* @returns The user object or null if not authenticated
|
|
50
|
+
*/
|
|
51
|
+
resolveUser?: (request: PayloadRequest) => Promise<BaseUser | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Resolves the permissions granted by a subscription.
|
|
54
|
+
* This callback allows you to define how permissions are extracted from a product.
|
|
55
|
+
* @param subscription - The Stripe subscription object
|
|
56
|
+
* @param product - The product associated with the subscription
|
|
57
|
+
* @param payload - The Payload instance
|
|
58
|
+
* @returns An array of permission slugs
|
|
59
|
+
*/
|
|
60
|
+
resolveSubscriptionPermissions: ResolveSubscriptionPermissions<TProduct>;
|
|
61
|
+
/**
|
|
62
|
+
* Resolves the permissions required by content.
|
|
63
|
+
* This callback allows you to define how permissions are extracted from content items.
|
|
64
|
+
* @param content - The content item to check permissions for
|
|
65
|
+
* @param payload - The Payload instance
|
|
66
|
+
* @returns An array of permission slugs required by the content
|
|
67
|
+
*/
|
|
68
|
+
resolveContentPermissions: ResolveContentPermissions<TContent>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Type alias for subscription permissions resolver callback
|
|
72
|
+
* @template TProduct - The product type used by the consumer (defaults to unknown for flexibility)
|
|
73
|
+
*/
|
|
74
|
+
type ResolveSubscriptionPermissions<TProduct = unknown> = (subscription: Stripe.Subscription, product: TProduct, payload: Payload) => Promise<string[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Type alias for content permissions resolver callback
|
|
77
|
+
* @template TContent - The content type used by the consumer (defaults to unknown for flexibility)
|
|
78
|
+
*/
|
|
79
|
+
type ResolveContentPermissions<TContent = unknown> = (content: TContent, payload: Payload) => Promise<string[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Internal configuration passed to endpoint handlers
|
|
82
|
+
*/
|
|
83
|
+
interface StripeEndpointConfig {
|
|
84
|
+
routes: StripeInventoryRoutes;
|
|
85
|
+
checkPermissions?: (request: PayloadRequest) => Promise<boolean>;
|
|
86
|
+
resolveUser?: (request: PayloadRequest) => Promise<BaseUser | null>;
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
//#region src/server/endpoints/handlers/checkout-handler.d.ts
|
|
90
|
+
/**
|
|
91
|
+
* Creates a handler for Stripe checkout sessions (subscriptions)
|
|
92
|
+
*
|
|
93
|
+
* @param config - Endpoint configuration
|
|
94
|
+
* @returns PayloadHandler for checkout endpoint
|
|
95
|
+
*/
|
|
96
|
+
declare function createCheckoutHandler(config: StripeEndpointConfig): PayloadHandler;
|
|
97
|
+
//#endregion
|
|
98
|
+
//#region src/server/endpoints/handlers/donation-handler.d.ts
|
|
99
|
+
/**
|
|
100
|
+
* Creates a handler for one-time donation payments
|
|
101
|
+
*
|
|
102
|
+
* @param config - Endpoint configuration
|
|
103
|
+
* @returns PayloadHandler for donation endpoint
|
|
104
|
+
*/
|
|
105
|
+
declare function createDonationHandler(config: StripeEndpointConfig): PayloadHandler;
|
|
106
|
+
//#endregion
|
|
107
|
+
//#region src/server/endpoints/handlers/portal-handler.d.ts
|
|
108
|
+
/**
|
|
109
|
+
* Creates a handler for Stripe Billing Portal access
|
|
110
|
+
*
|
|
111
|
+
* @param config - Endpoint configuration
|
|
112
|
+
* @returns PayloadHandler for portal endpoint
|
|
113
|
+
*/
|
|
114
|
+
declare function createPortalHandler(config: StripeEndpointConfig): PayloadHandler;
|
|
115
|
+
//#endregion
|
|
116
|
+
//#region src/server/endpoints/handlers/update-handler.d.ts
|
|
117
|
+
/**
|
|
118
|
+
* Creates a handler for updating Stripe subscriptions (cancel at period end)
|
|
119
|
+
*
|
|
120
|
+
* @param config - Endpoint configuration
|
|
121
|
+
* @returns PayloadHandler for update endpoint
|
|
122
|
+
*/
|
|
123
|
+
declare function createUpdateHandler(config: StripeEndpointConfig): PayloadHandler;
|
|
124
|
+
//#endregion
|
|
125
|
+
//#region src/server/endpoints/validators/request-validator.d.ts
|
|
126
|
+
/**
|
|
127
|
+
* Creates a JSON response using Web API Response
|
|
128
|
+
*/
|
|
129
|
+
declare function jsonResponse(data: unknown, options?: ResponseInit): Response;
|
|
130
|
+
/**
|
|
131
|
+
* Creates a redirect response using Web API Response
|
|
132
|
+
* @param url - The URL to redirect to
|
|
133
|
+
* @param status - HTTP status code (default: 303 See Other)
|
|
134
|
+
*/
|
|
135
|
+
declare function redirectResponse(url: string, status?: number): Response;
|
|
136
|
+
/**
|
|
137
|
+
* Creates an error response
|
|
138
|
+
*/
|
|
139
|
+
declare function errorResponse(message: string, status?: number): Response;
|
|
140
|
+
/**
|
|
141
|
+
* Result type for validateAuthenticatedRequest
|
|
142
|
+
*/
|
|
143
|
+
type AuthenticatedRequestResult = {
|
|
144
|
+
success: false;
|
|
145
|
+
error: Response;
|
|
146
|
+
} | {
|
|
147
|
+
success: true;
|
|
148
|
+
user: BaseUser;
|
|
149
|
+
payload: Payload;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Validates that the request has an authenticated user
|
|
153
|
+
* Uses the config's resolveUser if provided, otherwise uses request.user
|
|
154
|
+
*/
|
|
155
|
+
declare function validateAuthenticatedRequest(request: PayloadRequest, config: StripeEndpointConfig): Promise<AuthenticatedRequestResult>;
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region src/server/endpoints/index.d.ts
|
|
158
|
+
/**
|
|
159
|
+
* Creates all Stripe inventory endpoints
|
|
160
|
+
*
|
|
161
|
+
* @param config - Endpoint configuration
|
|
162
|
+
* @param basePath - Base path for endpoints (default: '/stripe')
|
|
163
|
+
* @returns Array of Payload endpoints
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* const endpoints = createStripeEndpoints({
|
|
168
|
+
* routes: { subscriptionPageHref: '/account/subscription' },
|
|
169
|
+
* });
|
|
170
|
+
* // Endpoints:
|
|
171
|
+
* // GET /api/stripe/checkout?priceId={id}
|
|
172
|
+
* // GET /api/stripe/portal
|
|
173
|
+
* // GET /api/stripe/update?subscriptionId={id}&cancelAtPeriodEnd={bool}
|
|
174
|
+
* // GET /api/stripe/donation?amount={cents}
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
declare function createStripeEndpoints(config: StripeEndpointConfig, basePath?: string): Endpoint[];
|
|
178
|
+
//#endregion
|
|
179
|
+
//#region src/server/plugin/create-stripe-inventory-plugin.d.ts
|
|
180
|
+
/**
|
|
181
|
+
* Creates the Stripe Inventory plugin for Payload CMS
|
|
182
|
+
*
|
|
183
|
+
* This plugin:
|
|
184
|
+
* - Registers REST endpoints for checkout, portal, update, and donation
|
|
185
|
+
* - Sets up Stripe webhook handlers for subscription and payment events
|
|
186
|
+
* - Syncs customer data between Stripe and Payload
|
|
187
|
+
*
|
|
188
|
+
* @param config - Plugin configuration
|
|
189
|
+
* @returns A Payload plugin function
|
|
190
|
+
*
|
|
191
|
+
* Endpoints registered:
|
|
192
|
+
* - GET /api{basePath}/checkout?priceId={id} - Redirect to Stripe Checkout
|
|
193
|
+
* - GET /api{basePath}/portal - Redirect to Stripe Billing Portal
|
|
194
|
+
* - GET /api{basePath}/update?subscriptionId={id}&cancelAtPeriodEnd={bool} - Update subscription
|
|
195
|
+
* - GET /api{basePath}/donation?amount={cents} - Returns JSON with checkout URL
|
|
196
|
+
*/
|
|
197
|
+
declare function createStripeInventoryPlugin<TProduct = unknown, TContent = unknown>(config: StripeInventoryPluginConfig<TProduct, TContent>): Plugin;
|
|
198
|
+
//#endregion
|
|
5
199
|
//#region src/server/actions/price.d.ts
|
|
6
200
|
declare const updatePrices: (payload: Payload) => Promise<void>;
|
|
7
201
|
interface PriceUpserted {
|
|
@@ -17,7 +211,7 @@ declare const productSync: (object: Stripe.Product, payload: Payload) => Promise
|
|
|
17
211
|
declare const productDeleted: (object: Stripe.Product, payload: Payload) => Promise<void>;
|
|
18
212
|
//#endregion
|
|
19
213
|
//#region src/server/actions/subscription.d.ts
|
|
20
|
-
declare const subscriptionUpsert: (subscription: Stripe.Subscription, payload: Payload, onSubscriptionUpdate: (type: "create" | "delete", userId: string) => Promise<void>) => Promise<void>;
|
|
214
|
+
declare const subscriptionUpsert: <TProduct = unknown>(subscription: Stripe.Subscription, payload: Payload, onSubscriptionUpdate: (type: "create" | "delete", userId: string) => Promise<void>, resolveSubscriptionPermissions: ResolveSubscriptionPermissions<TProduct>) => Promise<void>;
|
|
21
215
|
declare const subscriptionDeleted: (subscription: Stripe.Subscription, payload: Payload, onSubscriptionUpdate: (type: "create" | "delete", userId: string) => Promise<void>) => Promise<void>;
|
|
22
216
|
//#endregion
|
|
23
217
|
//#region src/server/actions/donation.d.ts
|
|
@@ -30,56 +224,36 @@ declare const invoiceSucceeded: (invoiceIntent: Stripe.Invoice, payload: Payload
|
|
|
30
224
|
declare const customerDeleted: (customer: Stripe.Customer, payload: Payload) => Promise<void>;
|
|
31
225
|
//#endregion
|
|
32
226
|
//#region src/server/actions/unlock-item-for-user-action.d.ts
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
227
|
+
/**
|
|
228
|
+
* Creates an unlock action with the specified content permissions resolver.
|
|
229
|
+
*
|
|
230
|
+
* @param resolveContentPermissions - Callback to resolve permissions required by content
|
|
231
|
+
* @returns A function that unlocks items for users
|
|
232
|
+
*
|
|
233
|
+
* @example
|
|
234
|
+
* ```typescript
|
|
235
|
+
* const unlockItem = createUnlockAction(async (content, payload) => {
|
|
236
|
+
* return content.requiredPermissions || [];
|
|
237
|
+
* });
|
|
238
|
+
*
|
|
239
|
+
* // Use in server actions
|
|
240
|
+
* await unlockItem(payload, user, 'posts', 123);
|
|
241
|
+
* ```
|
|
242
|
+
*/
|
|
243
|
+
declare const createUnlockAction: <TContent = unknown>(resolveContentPermissions: ResolveContentPermissions<TContent>) => (payload: Payload, user: BaseUser, collection: string, contentId: number) => Promise<Result<boolean>>;
|
|
41
244
|
//#endregion
|
|
42
245
|
//#region src/server/actions/update-products-and-prices-action.d.ts
|
|
43
246
|
declare function updateProductsAndPrices(payload: Payload): Promise<void>;
|
|
44
247
|
//#endregion
|
|
45
|
-
//#region src/server/utils/stripe/get-customer-from-stripe-or-create.d.ts
|
|
46
|
-
declare function getCustomerFromStripeOrCreate(email: string, name?: string): Promise<string>;
|
|
47
|
-
//#endregion
|
|
48
|
-
//#region src/server/api/index.d.ts
|
|
49
|
-
declare function createStripeInventoryHandlers(getPayload: () => Promise<Payload>, getRoutes: () => {
|
|
50
|
-
nextJS: {
|
|
51
|
-
subscriptionPageHref: string;
|
|
52
|
-
};
|
|
53
|
-
}): StripeHandlers;
|
|
54
|
-
declare function createRouteHandlers(getPayload: () => Promise<Payload>, getRoutes: () => {
|
|
55
|
-
nextJS: {
|
|
56
|
-
subscriptionPageHref: string;
|
|
57
|
-
};
|
|
58
|
-
}): {
|
|
59
|
-
GET: (request: Request, {
|
|
60
|
-
params
|
|
61
|
-
}: {
|
|
62
|
-
params: Promise<{
|
|
63
|
-
stripe: string[];
|
|
64
|
-
}>;
|
|
65
|
-
}) => Promise<NextResponse<unknown>>;
|
|
66
|
-
};
|
|
67
|
-
//#endregion
|
|
68
248
|
//#region src/server/collections/customers.d.ts
|
|
69
249
|
declare const customers: CollectionConfig;
|
|
70
250
|
//#endregion
|
|
71
|
-
//#region src/server/collections/fields/permission-evaluation-field.d.ts
|
|
72
|
-
declare const permissionEvaluationField: Field;
|
|
73
|
-
//#endregion
|
|
74
251
|
//#region src/server/collections/prices.d.ts
|
|
75
252
|
declare const prices: CollectionConfig;
|
|
76
253
|
//#endregion
|
|
77
254
|
//#region src/server/collections/products.d.ts
|
|
78
255
|
declare const products: CollectionConfig;
|
|
79
256
|
//#endregion
|
|
80
|
-
//#region src/server/plugin.d.ts
|
|
81
|
-
declare const plugin: (onSubscriptionUpdate: (type: "create" | "delete", userId: string) => Promise<void>) => Plugin;
|
|
82
|
-
//#endregion
|
|
83
257
|
//#region src/server/utils/payload/sync-customer-by-email.d.ts
|
|
84
258
|
declare function syncCustomerByEmail({
|
|
85
259
|
email,
|
|
@@ -148,5 +322,15 @@ declare const isAdminOrStripeActive: Access;
|
|
|
148
322
|
declare const isAdminOrUserFieldMatchingCurrentUser: Access;
|
|
149
323
|
declare const loggedInOrPublished: Access;
|
|
150
324
|
//#endregion
|
|
151
|
-
|
|
325
|
+
//#region src/server/access/get-user-from-request.d.ts
|
|
326
|
+
/**
|
|
327
|
+
* Gets the current user from a PayloadRequest without depending on next/headers.
|
|
328
|
+
* This is the recommended way to get the user in Payload endpoint handlers.
|
|
329
|
+
*
|
|
330
|
+
* @param request - The PayloadRequest object
|
|
331
|
+
* @returns The user object or null if not authenticated
|
|
332
|
+
*/
|
|
333
|
+
declare function getUserFromRequest(request: PayloadRequest): BaseUser | null;
|
|
334
|
+
//#endregion
|
|
335
|
+
export { AuthenticatedRequestResult, type ResolveContentPermissions, type ResolveSubscriptionPermissions, type StripeEndpointConfig, type StripeInventoryPluginConfig, StripeInventoryRoutes, createCheckoutHandler, createCustomerAtStripe, createDonationHandler, createPortalHandler, createStripeEndpoints, createStripeInventoryPlugin, createUnlockAction, createUpdateHandler, customerDeleted, customers, errorResponse, getCustomer, getUserFromRequest, invoiceSucceeded, isAdmin, isAdminOrCurrentUser, isAdminOrPublished, isAdminOrStripeActive, isAdminOrUserFieldMatchingCurrentUser, isAnyone, jsonResponse, loggedInOrPublished, payloadUpsert, paymentSucceeded, priceDeleted, priceUpsert, prices, productDeleted, productSync, products, redirectResponse, resolveStripeCustomer, stripeBuilder, subscriptionDeleted, subscriptionUpsert, syncCustomerByEmail, updatePrices, updateProducts, updateProductsAndPrices, upsertCustomerInventoryAndSyncWithUser, validateAuthenticatedRequest };
|
|
152
336
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/server/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/server/plugin/stripe-inventory-types.ts","../../src/server/endpoints/handlers/checkout-handler.ts","../../src/server/endpoints/handlers/donation-handler.ts","../../src/server/endpoints/handlers/portal-handler.ts","../../src/server/endpoints/handlers/update-handler.ts","../../src/server/endpoints/validators/request-validator.ts","../../src/server/endpoints/index.ts","../../src/server/plugin/create-stripe-inventory-plugin.ts","../../src/server/actions/price.ts","../../src/server/actions/product.ts","../../src/server/actions/subscription.ts","../../src/server/actions/donation.ts","../../src/server/actions/invoice.ts","../../src/server/actions/customer.ts","../../src/server/actions/unlock-item-for-user-action.ts","../../src/server/actions/update-products-and-prices-action.ts","../../src/server/collections/customers.ts","../../src/server/collections/prices.ts","../../src/server/collections/products.ts","../../src/server/utils/payload/sync-customer-by-email.ts","../../src/server/utils/payload/upsert.ts","../../src/server/utils/payload/upsert-customer-inventory-and-sync-with-user.ts","../../src/server/utils/stripe/create-customer-at-stripe.ts","../../src/server/utils/stripe/get-customer.ts","../../src/server/utils/stripe/stripe-builder.ts","../../src/server/access/access-queries.ts","../../src/server/access/get-user-from-request.ts"],"sourcesContent":[],"mappings":"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"}
|