@paid-ai/paid-node 0.5.0-alpha1 → 0.5.0-alpha3
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/cjs/Client.js +2 -2
- package/dist/cjs/integrations/adapters/expressjs/base-adapter.d.ts +17 -0
- package/dist/cjs/integrations/adapters/expressjs/base-adapter.js +71 -0
- package/dist/cjs/integrations/adapters/expressjs/index.d.ts +6 -0
- package/dist/cjs/integrations/adapters/expressjs/index.js +20 -0
- package/dist/cjs/integrations/adapters/expressjs/routes.d.ts +162 -0
- package/dist/cjs/integrations/adapters/expressjs/routes.js +269 -0
- package/dist/cjs/integrations/adapters/nestjs/index.d.ts +7 -0
- package/dist/cjs/integrations/adapters/nestjs/index.js +23 -0
- package/dist/cjs/integrations/adapters/nextjs/index.d.ts +1 -1
- package/dist/cjs/integrations/adapters/nextjs/index.js +3 -1
- package/dist/cjs/integrations/adapters/nextjs/routes.d.ts +51 -0
- package/dist/cjs/integrations/adapters/nextjs/routes.js +54 -0
- package/dist/cjs/integrations/controllers/billing.d.ts +83 -0
- package/dist/cjs/integrations/controllers/billing.js +104 -1
- package/dist/cjs/integrations/controllers/customers.d.ts +33 -0
- package/dist/cjs/integrations/controllers/customers.js +56 -0
- package/dist/cjs/integrations/controllers/index.d.ts +2 -2
- package/dist/cjs/integrations/controllers/index.js +5 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Client.mjs +2 -2
- package/dist/esm/integrations/adapters/expressjs/base-adapter.d.mts +17 -0
- package/dist/esm/integrations/adapters/expressjs/base-adapter.mjs +67 -0
- package/dist/esm/integrations/adapters/expressjs/index.d.mts +6 -0
- package/dist/esm/integrations/adapters/expressjs/index.mjs +6 -0
- package/dist/esm/integrations/adapters/expressjs/routes.d.mts +162 -0
- package/dist/esm/integrations/adapters/expressjs/routes.mjs +258 -0
- package/dist/esm/integrations/adapters/nestjs/index.d.mts +7 -0
- package/dist/esm/integrations/adapters/nestjs/index.mjs +7 -0
- package/dist/esm/integrations/adapters/nextjs/index.d.mts +1 -1
- package/dist/esm/integrations/adapters/nextjs/index.mjs +1 -1
- package/dist/esm/integrations/adapters/nextjs/routes.d.mts +51 -0
- package/dist/esm/integrations/adapters/nextjs/routes.mjs +54 -2
- package/dist/esm/integrations/controllers/billing.d.mts +83 -0
- package/dist/esm/integrations/controllers/billing.mjs +102 -1
- package/dist/esm/integrations/controllers/customers.d.mts +33 -0
- package/dist/esm/integrations/controllers/customers.mjs +54 -0
- package/dist/esm/integrations/controllers/index.d.mts +2 -2
- package/dist/esm/integrations/controllers/index.mjs +2 -2
- package/dist/esm/version.d.mts +1 -1
- package/dist/esm/version.mjs +1 -1
- package/package.json +30 -1
|
@@ -74,6 +74,18 @@ export declare function createContactsRoute(config?: BaseHandlerConfig): (reques
|
|
|
74
74
|
* ```
|
|
75
75
|
*/
|
|
76
76
|
export declare function createCustomerInvoicesRoute(config?: BaseHandlerConfig): (request: any, context?: any) => Promise<any>;
|
|
77
|
+
/**
|
|
78
|
+
* Create a Next.js API route handler for fetching a customer by external ID
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* // src/app/api/customers/[customerExternalId]/route.ts
|
|
83
|
+
* import { createGetCustomerRoute } from '@paid-ai/paid-node/integrations/nextjs';
|
|
84
|
+
*
|
|
85
|
+
* export const GET = createGetCustomerRoute();
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare function createGetCustomerRoute(config?: BaseHandlerConfig): (request: any, context?: any) => Promise<any>;
|
|
77
89
|
/**
|
|
78
90
|
* Create a Next.js API route handler for customer creation
|
|
79
91
|
*
|
|
@@ -172,3 +184,42 @@ export interface ProvisioningRouteConfig extends BaseHandlerConfig {
|
|
|
172
184
|
* ```
|
|
173
185
|
*/
|
|
174
186
|
export declare function createProvisioningRoute(config?: ProvisioningRouteConfig): (request: any, context?: any) => Promise<any>;
|
|
187
|
+
export interface SetupIntentRouteConfig extends BaseHandlerConfig {
|
|
188
|
+
/**
|
|
189
|
+
* Default return URL for setup flow
|
|
190
|
+
* Can be overridden by request body
|
|
191
|
+
*/
|
|
192
|
+
defaultReturnUrl?: string;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create a Next.js API route handler for setup intent creation
|
|
196
|
+
*
|
|
197
|
+
* Setup intents are used to add payment methods without immediate charge.
|
|
198
|
+
* This is useful for saving payment methods for future billing.
|
|
199
|
+
*
|
|
200
|
+
* Organization ID is automatically fetched from the API key.
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* // src/app/api/payment-methods/setup/route.ts
|
|
205
|
+
* import { createSetupIntentRoute } from '@paid-ai/paid-node/integrations/nextjs';
|
|
206
|
+
*
|
|
207
|
+
* export const POST = createSetupIntentRoute({
|
|
208
|
+
* defaultReturnUrl: process.env.NEXT_PUBLIC_BASE_URL + '/billing'
|
|
209
|
+
* });
|
|
210
|
+
* ```
|
|
211
|
+
*
|
|
212
|
+
* @example Client-side usage
|
|
213
|
+
* ```typescript
|
|
214
|
+
* await fetch('/api/payment-methods/setup', {
|
|
215
|
+
* method: 'POST',
|
|
216
|
+
* body: JSON.stringify({
|
|
217
|
+
* customerId: 'cus_123',
|
|
218
|
+
* confirmationToken: 'seti_123_secret_456',
|
|
219
|
+
* returnUrl: 'https://example.com/billing',
|
|
220
|
+
* metadata: { source: 'settings_page' }
|
|
221
|
+
* })
|
|
222
|
+
* });
|
|
223
|
+
* ```
|
|
224
|
+
*/
|
|
225
|
+
export declare function createSetupIntentRoute(config?: SetupIntentRouteConfig): (request: any, context?: any) => Promise<any>;
|
|
@@ -3,10 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createActivateOrderSyncRoute = createActivateOrderSyncRoute;
|
|
4
4
|
exports.createContactsRoute = createContactsRoute;
|
|
5
5
|
exports.createCustomerInvoicesRoute = createCustomerInvoicesRoute;
|
|
6
|
+
exports.createGetCustomerRoute = createGetCustomerRoute;
|
|
6
7
|
exports.createCustomersRoute = createCustomersRoute;
|
|
7
8
|
exports.createOrdersRoute = createOrdersRoute;
|
|
8
9
|
exports.createPayInvoiceRoute = createPayInvoiceRoute;
|
|
9
10
|
exports.createProvisioningRoute = createProvisioningRoute;
|
|
11
|
+
exports.createSetupIntentRoute = createSetupIntentRoute;
|
|
10
12
|
const base_adapter_js_1 = require("./base-adapter.js");
|
|
11
13
|
const contacts_js_1 = require("../../controllers/contacts.js");
|
|
12
14
|
const invoices_js_1 = require("../../controllers/invoices.js");
|
|
@@ -93,6 +95,22 @@ function createCustomerInvoicesRoute(config = {}) {
|
|
|
93
95
|
const adaptedHandler = (0, base_adapter_js_1.nextjsAdapter)(handler);
|
|
94
96
|
return (request, context) => adaptedHandler(request, context, config);
|
|
95
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a Next.js API route handler for fetching a customer by external ID
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* // src/app/api/customers/[customerExternalId]/route.ts
|
|
104
|
+
* import { createGetCustomerRoute } from '@paid-ai/paid-node/integrations/nextjs';
|
|
105
|
+
*
|
|
106
|
+
* export const GET = createGetCustomerRoute();
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
function createGetCustomerRoute(config = {}) {
|
|
110
|
+
const handler = (0, customers_js_1.createGetCustomerHandler)();
|
|
111
|
+
const adaptedHandler = (0, base_adapter_js_1.nextjsAdapter)(handler);
|
|
112
|
+
return (request, context) => adaptedHandler(request, context, config);
|
|
113
|
+
}
|
|
96
114
|
/**
|
|
97
115
|
* Create a Next.js API route handler for customer creation
|
|
98
116
|
*
|
|
@@ -190,3 +208,39 @@ function createProvisioningRoute(config = {}) {
|
|
|
190
208
|
const adaptedHandler = (0, base_adapter_js_1.nextjsAdapter)(handler);
|
|
191
209
|
return (request, context) => adaptedHandler(request, context, config);
|
|
192
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Create a Next.js API route handler for setup intent creation
|
|
213
|
+
*
|
|
214
|
+
* Setup intents are used to add payment methods without immediate charge.
|
|
215
|
+
* This is useful for saving payment methods for future billing.
|
|
216
|
+
*
|
|
217
|
+
* Organization ID is automatically fetched from the API key.
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* // src/app/api/payment-methods/setup/route.ts
|
|
222
|
+
* import { createSetupIntentRoute } from '@paid-ai/paid-node/integrations/nextjs';
|
|
223
|
+
*
|
|
224
|
+
* export const POST = createSetupIntentRoute({
|
|
225
|
+
* defaultReturnUrl: process.env.NEXT_PUBLIC_BASE_URL + '/billing'
|
|
226
|
+
* });
|
|
227
|
+
* ```
|
|
228
|
+
*
|
|
229
|
+
* @example Client-side usage
|
|
230
|
+
* ```typescript
|
|
231
|
+
* await fetch('/api/payment-methods/setup', {
|
|
232
|
+
* method: 'POST',
|
|
233
|
+
* body: JSON.stringify({
|
|
234
|
+
* customerId: 'cus_123',
|
|
235
|
+
* confirmationToken: 'seti_123_secret_456',
|
|
236
|
+
* returnUrl: 'https://example.com/billing',
|
|
237
|
+
* metadata: { source: 'settings_page' }
|
|
238
|
+
* })
|
|
239
|
+
* });
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
function createSetupIntentRoute(config = {}) {
|
|
243
|
+
const handler = (0, billing_js_1.createSetupIntentHandler)(config.defaultReturnUrl);
|
|
244
|
+
const adaptedHandler = (0, base_adapter_js_1.nextjsAdapter)(handler);
|
|
245
|
+
return (request, context) => adaptedHandler(request, context, config);
|
|
246
|
+
}
|
|
@@ -110,4 +110,87 @@ interface ActivateOrderSyncRequestBody {
|
|
|
110
110
|
* @returns Handler function
|
|
111
111
|
*/
|
|
112
112
|
export declare function createActivateOrderSyncHandler(defaultReturnUrl?: string): (request: import("../utils/base-handler.js").BaseRequestContext<ActivateOrderSyncRequestBody, Record<string, string>>, response: import("../utils/base-handler.js").BaseResponseContext, config?: import("../utils/base-handler.js").BaseHandlerConfig) => Promise<any>;
|
|
113
|
+
export interface SetupIntentRequest {
|
|
114
|
+
customerId: string;
|
|
115
|
+
confirmationToken: string;
|
|
116
|
+
returnUrl?: string;
|
|
117
|
+
metadata?: Record<string, any>;
|
|
118
|
+
}
|
|
119
|
+
export interface SetupIntentResponse {
|
|
120
|
+
setupIntent: {
|
|
121
|
+
id: string;
|
|
122
|
+
client_secret: string;
|
|
123
|
+
status: string;
|
|
124
|
+
usage: string;
|
|
125
|
+
customer: string;
|
|
126
|
+
};
|
|
127
|
+
message: string;
|
|
128
|
+
}
|
|
129
|
+
export interface SetupIntentConfig {
|
|
130
|
+
apiUrl: string;
|
|
131
|
+
apiKey: string;
|
|
132
|
+
organizationId: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Create a setup intent for adding payment methods without immediate charge
|
|
136
|
+
*
|
|
137
|
+
* Setup intents are used to save payment methods for future use without
|
|
138
|
+
* charging the customer immediately. This is useful for:
|
|
139
|
+
* - Adding payment methods for subscription billing
|
|
140
|
+
* - Updating payment methods
|
|
141
|
+
* - Pre-authorizing payment methods
|
|
142
|
+
*
|
|
143
|
+
* @param config - API configuration with organization context
|
|
144
|
+
* @param request - Setup intent request with customer ID and confirmation token
|
|
145
|
+
* @returns Setup intent result with payment method details
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* const result = await createSetupIntent(
|
|
150
|
+
* {
|
|
151
|
+
* apiUrl: 'https://api.agentpaid.io',
|
|
152
|
+
* apiKey: process.env.PAID_API_KEY,
|
|
153
|
+
* organizationId: 'org_123'
|
|
154
|
+
* },
|
|
155
|
+
* {
|
|
156
|
+
* customerId: 'cus_123',
|
|
157
|
+
* confirmationToken: 'seti_123_secret_456',
|
|
158
|
+
* returnUrl: 'https://example.com/return',
|
|
159
|
+
* metadata: { source: 'web' }
|
|
160
|
+
* }
|
|
161
|
+
* );
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
export declare function createSetupIntent(config: SetupIntentConfig, request: SetupIntentRequest): Promise<SetupIntentResponse>;
|
|
165
|
+
/**
|
|
166
|
+
* Create a framework-agnostic handler for setup intent creation
|
|
167
|
+
*
|
|
168
|
+
* This handler can be used with any framework adapter.
|
|
169
|
+
*
|
|
170
|
+
* @param defaultReturnUrl - Optional default return URL
|
|
171
|
+
* @returns Handler function
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* // Next.js API route
|
|
176
|
+
* import { createSetupIntentHandler } from '@paid-ai/paid-node/integrations';
|
|
177
|
+
*
|
|
178
|
+
* const handler = createSetupIntentHandler('https://myapp.com/billing');
|
|
179
|
+
*
|
|
180
|
+
* export async function POST(req: Request) {
|
|
181
|
+
* return handler(
|
|
182
|
+
* {
|
|
183
|
+
* body: await req.json(),
|
|
184
|
+
* headers: Object.fromEntries(req.headers),
|
|
185
|
+
* method: 'POST'
|
|
186
|
+
* },
|
|
187
|
+
* {
|
|
188
|
+
* json: (data, status = 200) => Response.json(data, { status }),
|
|
189
|
+
* error: (message, status) => Response.json({ error: message }, { status })
|
|
190
|
+
* }
|
|
191
|
+
* );
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
export declare function createSetupIntentHandler(defaultReturnUrl?: string): (request: import("../utils/base-handler.js").BaseRequestContext<SetupIntentRequest, Record<string, string>>, response: import("../utils/base-handler.js").BaseResponseContext, config?: import("../utils/base-handler.js").BaseHandlerConfig) => Promise<any>;
|
|
113
196
|
export {};
|
|
@@ -13,6 +13,8 @@ exports.payInvoice = payInvoice;
|
|
|
13
13
|
exports.createPayInvoiceHandler = createPayInvoiceHandler;
|
|
14
14
|
exports.activateOrderSync = activateOrderSync;
|
|
15
15
|
exports.createActivateOrderSyncHandler = createActivateOrderSyncHandler;
|
|
16
|
+
exports.createSetupIntent = createSetupIntent;
|
|
17
|
+
exports.createSetupIntentHandler = createSetupIntentHandler;
|
|
16
18
|
const api_fetch_js_1 = require("../utils/api-fetch.js");
|
|
17
19
|
const base_handler_js_1 = require("../utils/base-handler.js");
|
|
18
20
|
/**
|
|
@@ -117,7 +119,7 @@ function activateOrderSync(config, request) {
|
|
|
117
119
|
if (!confirmationToken) {
|
|
118
120
|
throw new Error("confirmationToken is required");
|
|
119
121
|
}
|
|
120
|
-
const data = yield (0, api_fetch_js_1.paidApiFetch)(config, `/api/organizations/${config.organizationId}/orders/${orderId}/activate-
|
|
122
|
+
const data = yield (0, api_fetch_js_1.paidApiFetch)(config, `/api/organizations/${config.organizationId}/orders/${orderId}/activate-and-pay`, {
|
|
121
123
|
method: "POST",
|
|
122
124
|
body: Object.assign({ confirmationToken }, (returnUrl && { returnUrl })),
|
|
123
125
|
});
|
|
@@ -162,3 +164,104 @@ function createActivateOrderSyncHandler(defaultReturnUrl) {
|
|
|
162
164
|
requireOrganizationId: true,
|
|
163
165
|
});
|
|
164
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Create a setup intent for adding payment methods without immediate charge
|
|
169
|
+
*
|
|
170
|
+
* Setup intents are used to save payment methods for future use without
|
|
171
|
+
* charging the customer immediately. This is useful for:
|
|
172
|
+
* - Adding payment methods for subscription billing
|
|
173
|
+
* - Updating payment methods
|
|
174
|
+
* - Pre-authorizing payment methods
|
|
175
|
+
*
|
|
176
|
+
* @param config - API configuration with organization context
|
|
177
|
+
* @param request - Setup intent request with customer ID and confirmation token
|
|
178
|
+
* @returns Setup intent result with payment method details
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* const result = await createSetupIntent(
|
|
183
|
+
* {
|
|
184
|
+
* apiUrl: 'https://api.agentpaid.io',
|
|
185
|
+
* apiKey: process.env.PAID_API_KEY,
|
|
186
|
+
* organizationId: 'org_123'
|
|
187
|
+
* },
|
|
188
|
+
* {
|
|
189
|
+
* customerId: 'cus_123',
|
|
190
|
+
* confirmationToken: 'seti_123_secret_456',
|
|
191
|
+
* returnUrl: 'https://example.com/return',
|
|
192
|
+
* metadata: { source: 'web' }
|
|
193
|
+
* }
|
|
194
|
+
* );
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
function createSetupIntent(config, request) {
|
|
198
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
199
|
+
const { customerId, confirmationToken, returnUrl, metadata } = request;
|
|
200
|
+
if (!customerId) {
|
|
201
|
+
throw new Error("customerId is required");
|
|
202
|
+
}
|
|
203
|
+
if (!confirmationToken) {
|
|
204
|
+
throw new Error("confirmationToken is required");
|
|
205
|
+
}
|
|
206
|
+
const data = yield (0, api_fetch_js_1.paidApiFetch)(config, `/api/organizations/${config.organizationId}/payments/setup-intents-external`, {
|
|
207
|
+
method: "POST",
|
|
208
|
+
body: Object.assign(Object.assign({ customerId,
|
|
209
|
+
confirmationToken }, (returnUrl && { returnUrl })), (metadata && { metadata })),
|
|
210
|
+
});
|
|
211
|
+
return {
|
|
212
|
+
setupIntent: data.setupIntent || data,
|
|
213
|
+
message: "Setup intent created successfully",
|
|
214
|
+
};
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Create a framework-agnostic handler for setup intent creation
|
|
219
|
+
*
|
|
220
|
+
* This handler can be used with any framework adapter.
|
|
221
|
+
*
|
|
222
|
+
* @param defaultReturnUrl - Optional default return URL
|
|
223
|
+
* @returns Handler function
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```typescript
|
|
227
|
+
* // Next.js API route
|
|
228
|
+
* import { createSetupIntentHandler } from '@paid-ai/paid-node/integrations';
|
|
229
|
+
*
|
|
230
|
+
* const handler = createSetupIntentHandler('https://myapp.com/billing');
|
|
231
|
+
*
|
|
232
|
+
* export async function POST(req: Request) {
|
|
233
|
+
* return handler(
|
|
234
|
+
* {
|
|
235
|
+
* body: await req.json(),
|
|
236
|
+
* headers: Object.fromEntries(req.headers),
|
|
237
|
+
* method: 'POST'
|
|
238
|
+
* },
|
|
239
|
+
* {
|
|
240
|
+
* json: (data, status = 200) => Response.json(data, { status }),
|
|
241
|
+
* error: (message, status) => Response.json({ error: message }, { status })
|
|
242
|
+
* }
|
|
243
|
+
* );
|
|
244
|
+
* }
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
function createSetupIntentHandler(defaultReturnUrl) {
|
|
248
|
+
return (0, base_handler_js_1.createHandler)((client, body, _params, organizationId) => __awaiter(this, void 0, void 0, function* () {
|
|
249
|
+
var _a, _b;
|
|
250
|
+
const apiKey = (_a = client._options) === null || _a === void 0 ? void 0 : _a.token;
|
|
251
|
+
const baseUrl = ((_b = client._options) === null || _b === void 0 ? void 0 : _b.baseUrl) || 'https://api.agentpaid.io/api/v1';
|
|
252
|
+
const apiUrl = baseUrl.replace('/api/v1', '');
|
|
253
|
+
const result = yield createSetupIntent({ apiUrl, apiKey, organizationId: organizationId }, {
|
|
254
|
+
customerId: body.customerId,
|
|
255
|
+
confirmationToken: body.confirmationToken,
|
|
256
|
+
returnUrl: body.returnUrl || defaultReturnUrl,
|
|
257
|
+
metadata: body.metadata,
|
|
258
|
+
});
|
|
259
|
+
return {
|
|
260
|
+
success: true,
|
|
261
|
+
data: result,
|
|
262
|
+
};
|
|
263
|
+
}), {
|
|
264
|
+
requiredFields: ['customerId', 'confirmationToken'],
|
|
265
|
+
requireOrganizationId: true,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
@@ -61,3 +61,36 @@ export declare function createCustomer(client: PaidClient, data: Required<Omit<C
|
|
|
61
61
|
* @returns Handler function
|
|
62
62
|
*/
|
|
63
63
|
export declare function createCustomersHandler(): (request: import("../utils/base-handler.js").BaseRequestContext<CustomerData, Record<string, string>>, response: import("../utils/base-handler.js").BaseResponseContext, config?: import("../utils/base-handler.js").BaseHandlerConfig) => Promise<any>;
|
|
64
|
+
/**
|
|
65
|
+
* Get a customer by external ID
|
|
66
|
+
*
|
|
67
|
+
* @param client - PaidClient instance
|
|
68
|
+
* @param customerExternalId - Customer's external ID
|
|
69
|
+
* @returns Customer data
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const customer = await getCustomer(client, 'user-123');
|
|
74
|
+
* console.log(customer.name, customer.email);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function getCustomer(client: PaidClient, customerExternalId: string): Promise<any>;
|
|
78
|
+
/**
|
|
79
|
+
* Create a framework-agnostic handler for fetching a customer by external ID
|
|
80
|
+
*
|
|
81
|
+
* This handler can be used with any framework adapter.
|
|
82
|
+
* The customer external ID should be provided either in params or query string.
|
|
83
|
+
*
|
|
84
|
+
* @returns Handler function
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* // In Next.js route: /api/customers/[customerExternalId]/route.ts
|
|
89
|
+
* import { createGetCustomerHandler } from '@paid-ai/paid-node/integrations';
|
|
90
|
+
* import { nextjsAdapter } from '@paid-ai/paid-node/integrations/nextjs';
|
|
91
|
+
*
|
|
92
|
+
* const handler = createGetCustomerHandler();
|
|
93
|
+
* export const GET = nextjsAdapter(handler);
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare function createGetCustomerHandler(): (request: import("../utils/base-handler.js").BaseRequestContext<any, Record<string, string>>, response: import("../utils/base-handler.js").BaseResponseContext, config?: import("../utils/base-handler.js").BaseHandlerConfig) => Promise<any>;
|
|
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.createCustomerWithDefaults = createCustomerWithDefaults;
|
|
13
13
|
exports.createCustomer = createCustomer;
|
|
14
14
|
exports.createCustomersHandler = createCustomersHandler;
|
|
15
|
+
exports.getCustomer = getCustomer;
|
|
16
|
+
exports.createGetCustomerHandler = createGetCustomerHandler;
|
|
15
17
|
const base_handler_js_1 = require("../utils/base-handler.js");
|
|
16
18
|
/**
|
|
17
19
|
* Generate placeholder values for missing customer fields
|
|
@@ -148,3 +150,57 @@ function createCustomersHandler() {
|
|
|
148
150
|
return { success: true, data: customer };
|
|
149
151
|
}), { requiredFields: ['externalId'] });
|
|
150
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Get a customer by external ID
|
|
155
|
+
*
|
|
156
|
+
* @param client - PaidClient instance
|
|
157
|
+
* @param customerExternalId - Customer's external ID
|
|
158
|
+
* @returns Customer data
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* ```typescript
|
|
162
|
+
* const customer = await getCustomer(client, 'user-123');
|
|
163
|
+
* console.log(customer.name, customer.email);
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
function getCustomer(client, customerExternalId) {
|
|
167
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
168
|
+
const customer = yield client.customers.getByExternalId(customerExternalId);
|
|
169
|
+
return customer;
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Create a framework-agnostic handler for fetching a customer by external ID
|
|
174
|
+
*
|
|
175
|
+
* This handler can be used with any framework adapter.
|
|
176
|
+
* The customer external ID should be provided either in params or query string.
|
|
177
|
+
*
|
|
178
|
+
* @returns Handler function
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* // In Next.js route: /api/customers/[customerExternalId]/route.ts
|
|
183
|
+
* import { createGetCustomerHandler } from '@paid-ai/paid-node/integrations';
|
|
184
|
+
* import { nextjsAdapter } from '@paid-ai/paid-node/integrations/nextjs';
|
|
185
|
+
*
|
|
186
|
+
* const handler = createGetCustomerHandler();
|
|
187
|
+
* export const GET = nextjsAdapter(handler);
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
function createGetCustomerHandler() {
|
|
191
|
+
return (0, base_handler_js_1.createHandler)((client, _body, params) => __awaiter(this, void 0, void 0, function* () {
|
|
192
|
+
const customerExternalId = params === null || params === void 0 ? void 0 : params.customerExternalId;
|
|
193
|
+
if (!customerExternalId) {
|
|
194
|
+
return {
|
|
195
|
+
success: false,
|
|
196
|
+
error: "customerExternalId is required",
|
|
197
|
+
status: 400,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const customer = yield getCustomer(client, customerExternalId);
|
|
201
|
+
return { success: true, data: customer };
|
|
202
|
+
}), {
|
|
203
|
+
allowedMethods: ['GET'],
|
|
204
|
+
requireOrganizationId: false,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { createCustomer, createCustomerWithDefaults, createCustomersHandler, } from "./customers.js";
|
|
1
|
+
export { createCustomer, createCustomerWithDefaults, getCustomer, createGetCustomerHandler, createCustomersHandler, } from "./customers.js";
|
|
2
2
|
export { createContact, createContactWithDefaults, createContactsHandler, } from "./contacts.js";
|
|
3
3
|
export { createOrder, createOrderWithDefaults, createOrdersHandler, } from "./orders.js";
|
|
4
|
-
export { payInvoice, createPayInvoiceHandler, type PayInvoiceConfig, type PayInvoiceRequest, type PayInvoiceResult, activateOrderSync, createActivateOrderSyncHandler, type ActivateOrderSyncConfig, type ActivateOrderSyncRequest, type ActivateOrderSyncResult, } from "./billing.js";
|
|
4
|
+
export { payInvoice, createPayInvoiceHandler, type PayInvoiceConfig, type PayInvoiceRequest, type PayInvoiceResult, activateOrderSync, createActivateOrderSyncHandler, type ActivateOrderSyncConfig, type ActivateOrderSyncRequest, type ActivateOrderSyncResult, createSetupIntent, createSetupIntentHandler, type SetupIntentConfig, type SetupIntentRequest, type SetupIntentResponse, } from "./billing.js";
|
|
5
5
|
export { getCustomerInvoices, createCustomerInvoicesHandler, type CustomerInvoicesResult, } from "./invoices.js";
|
|
6
6
|
export { provisionNewUser, createProvisioningHandler, } from "./provision-users.js";
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createProvisioningHandler = exports.provisionNewUser = exports.createCustomerInvoicesHandler = exports.getCustomerInvoices = exports.createActivateOrderSyncHandler = exports.activateOrderSync = exports.createPayInvoiceHandler = exports.payInvoice = exports.createOrdersHandler = exports.createOrderWithDefaults = exports.createOrder = exports.createContactsHandler = exports.createContactWithDefaults = exports.createContact = exports.createCustomersHandler = exports.createCustomerWithDefaults = exports.createCustomer = void 0;
|
|
3
|
+
exports.createProvisioningHandler = exports.provisionNewUser = exports.createCustomerInvoicesHandler = exports.getCustomerInvoices = exports.createSetupIntentHandler = exports.createSetupIntent = exports.createActivateOrderSyncHandler = exports.activateOrderSync = exports.createPayInvoiceHandler = exports.payInvoice = exports.createOrdersHandler = exports.createOrderWithDefaults = exports.createOrder = exports.createContactsHandler = exports.createContactWithDefaults = exports.createContact = exports.createCustomersHandler = exports.createGetCustomerHandler = exports.getCustomer = exports.createCustomerWithDefaults = exports.createCustomer = void 0;
|
|
4
4
|
var customers_js_1 = require("./customers.js");
|
|
5
5
|
Object.defineProperty(exports, "createCustomer", { enumerable: true, get: function () { return customers_js_1.createCustomer; } });
|
|
6
6
|
Object.defineProperty(exports, "createCustomerWithDefaults", { enumerable: true, get: function () { return customers_js_1.createCustomerWithDefaults; } });
|
|
7
|
+
Object.defineProperty(exports, "getCustomer", { enumerable: true, get: function () { return customers_js_1.getCustomer; } });
|
|
8
|
+
Object.defineProperty(exports, "createGetCustomerHandler", { enumerable: true, get: function () { return customers_js_1.createGetCustomerHandler; } });
|
|
7
9
|
Object.defineProperty(exports, "createCustomersHandler", { enumerable: true, get: function () { return customers_js_1.createCustomersHandler; } });
|
|
8
10
|
var contacts_js_1 = require("./contacts.js");
|
|
9
11
|
Object.defineProperty(exports, "createContact", { enumerable: true, get: function () { return contacts_js_1.createContact; } });
|
|
@@ -18,6 +20,8 @@ Object.defineProperty(exports, "payInvoice", { enumerable: true, get: function (
|
|
|
18
20
|
Object.defineProperty(exports, "createPayInvoiceHandler", { enumerable: true, get: function () { return billing_js_1.createPayInvoiceHandler; } });
|
|
19
21
|
Object.defineProperty(exports, "activateOrderSync", { enumerable: true, get: function () { return billing_js_1.activateOrderSync; } });
|
|
20
22
|
Object.defineProperty(exports, "createActivateOrderSyncHandler", { enumerable: true, get: function () { return billing_js_1.createActivateOrderSyncHandler; } });
|
|
23
|
+
Object.defineProperty(exports, "createSetupIntent", { enumerable: true, get: function () { return billing_js_1.createSetupIntent; } });
|
|
24
|
+
Object.defineProperty(exports, "createSetupIntentHandler", { enumerable: true, get: function () { return billing_js_1.createSetupIntentHandler; } });
|
|
21
25
|
var invoices_js_1 = require("./invoices.js");
|
|
22
26
|
Object.defineProperty(exports, "getCustomerInvoices", { enumerable: true, get: function () { return invoices_js_1.getCustomerInvoices; } });
|
|
23
27
|
Object.defineProperty(exports, "createCustomerInvoicesHandler", { enumerable: true, get: function () { return invoices_js_1.createCustomerInvoicesHandler; } });
|
package/dist/cjs/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "0.5.0-
|
|
1
|
+
export declare const SDK_VERSION = "0.5.0-alpha3";
|
package/dist/cjs/version.js
CHANGED
package/dist/esm/Client.mjs
CHANGED
|
@@ -24,8 +24,8 @@ export class PaidClient {
|
|
|
24
24
|
this._options = Object.assign(Object.assign({}, _options), { headers: mergeHeaders({
|
|
25
25
|
"X-Fern-Language": "JavaScript",
|
|
26
26
|
"X-Fern-SDK-Name": "@paid-ai/paid-node",
|
|
27
|
-
"X-Fern-SDK-Version": "0.5.0-
|
|
28
|
-
"User-Agent": "@paid-ai/paid-node/0.5.0-
|
|
27
|
+
"X-Fern-SDK-Version": "0.5.0-alpha3",
|
|
28
|
+
"User-Agent": "@paid-ai/paid-node/0.5.0-alpha3",
|
|
29
29
|
"X-Fern-Runtime": core.RUNTIME.type,
|
|
30
30
|
"X-Fern-Runtime-Version": core.RUNTIME.version,
|
|
31
31
|
}, _options === null || _options === void 0 ? void 0 : _options.headers) });
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExpressJS adapter for Paid SDK
|
|
3
|
+
* Converts Express Request/Response to framework-agnostic format
|
|
4
|
+
*/
|
|
5
|
+
import { Request, Response } from "express";
|
|
6
|
+
/**
|
|
7
|
+
* Handles Express Request/Response conversion to base handler format
|
|
8
|
+
*/
|
|
9
|
+
export declare const expressjsAdapter: (innerHandler: Function) => (req: Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, context?: any, config?: any) => Promise<any>;
|
|
10
|
+
/**
|
|
11
|
+
* Create response context for ExpressJS
|
|
12
|
+
* This converts the base handler response methods to ExpressJS/Express format
|
|
13
|
+
*/
|
|
14
|
+
export declare function createExpressJSResponseContext(res: Response): {
|
|
15
|
+
json: (data: any, status?: number) => Response<any, Record<string, any>>;
|
|
16
|
+
error: (message: string, status: number) => Response<any, Record<string, any>>;
|
|
17
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExpressJS adapter for Paid SDK
|
|
3
|
+
* Converts Express Request/Response to framework-agnostic format
|
|
4
|
+
*/
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
import { createFrameworkAdapter } from "../../utils/create-adapter.mjs";
|
|
15
|
+
/**
|
|
16
|
+
* Handles Express Request/Response conversion to base handler format
|
|
17
|
+
*/
|
|
18
|
+
export const expressjsAdapter = createFrameworkAdapter({
|
|
19
|
+
getBody: (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
+
return req.body || {};
|
|
21
|
+
}),
|
|
22
|
+
getHeaders: (req) => {
|
|
23
|
+
const headers = {};
|
|
24
|
+
Object.entries(req.headers).forEach(([key, value]) => {
|
|
25
|
+
if (typeof value === "string") {
|
|
26
|
+
headers[key] = value;
|
|
27
|
+
}
|
|
28
|
+
else if (Array.isArray(value)) {
|
|
29
|
+
headers[key] = value.join(", ");
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return headers;
|
|
33
|
+
},
|
|
34
|
+
getMethod: (req) => req.method || "GET",
|
|
35
|
+
getParams: (req) => __awaiter(void 0, void 0, void 0, function* () {
|
|
36
|
+
return req.params || {};
|
|
37
|
+
}),
|
|
38
|
+
getQuery: (req) => {
|
|
39
|
+
const query = {};
|
|
40
|
+
Object.entries(req.query).forEach(([key, value]) => {
|
|
41
|
+
if (typeof value === "string") {
|
|
42
|
+
query[key] = value;
|
|
43
|
+
}
|
|
44
|
+
else if (Array.isArray(value)) {
|
|
45
|
+
query[key] = value.join(", ");
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return query;
|
|
49
|
+
},
|
|
50
|
+
sendJson: (data, status) => {
|
|
51
|
+
throw new Error("ExpressJS adapter requires using response context from handler");
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Create response context for ExpressJS
|
|
56
|
+
* This converts the base handler response methods to ExpressJS/Express format
|
|
57
|
+
*/
|
|
58
|
+
export function createExpressJSResponseContext(res) {
|
|
59
|
+
return {
|
|
60
|
+
json: (data, status = 200) => {
|
|
61
|
+
return res.status(status).json(data);
|
|
62
|
+
},
|
|
63
|
+
error: (message, status) => {
|
|
64
|
+
return res.status(status).json({ error: message });
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExpressJS integration for Paid SDK
|
|
3
|
+
* Drop-in handlers for ExpressJS controllers using Express Request/Response
|
|
4
|
+
*/
|
|
5
|
+
export { expressjsAdapter, createExpressJSResponseContext } from "./base-adapter.mjs";
|
|
6
|
+
export { createActivateOrderSyncRoute, createContactsRoute, createCustomerInvoicesRoute, createCustomersRoute, createGetCustomerRoute, createOrdersRoute, createPayInvoiceRoute, createProvisioningRoute, createSetupIntentRoute, type ActivateOrderSyncRouteConfig, type OrdersRouteConfig, type ProvisioningRouteConfig, type SetupIntentRouteConfig, } from "./routes.mjs";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ExpressJS integration for Paid SDK
|
|
3
|
+
* Drop-in handlers for ExpressJS controllers using Express Request/Response
|
|
4
|
+
*/
|
|
5
|
+
export { expressjsAdapter, createExpressJSResponseContext } from "./base-adapter.mjs";
|
|
6
|
+
export { createActivateOrderSyncRoute, createContactsRoute, createCustomerInvoicesRoute, createCustomersRoute, createGetCustomerRoute, createOrdersRoute, createPayInvoiceRoute, createProvisioningRoute, createSetupIntentRoute, } from "./routes.mjs";
|