payment-kit 1.18.1 → 1.18.3
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/api/src/index.ts +4 -21
- package/api/src/libs/logger.ts +2 -1
- package/api/src/routes/checkout-sessions.ts +7 -7
- package/api/src/routes/customers.ts +6 -5
- package/api/src/routes/events.ts +3 -2
- package/api/src/routes/invoices.ts +4 -3
- package/api/src/routes/payment-currencies.ts +2 -2
- package/api/src/routes/payment-intents.ts +6 -6
- package/api/src/routes/payment-links.ts +1 -1
- package/api/src/routes/payment-stats.ts +3 -2
- package/api/src/routes/payouts.ts +6 -5
- package/api/src/routes/pricing-table.ts +2 -2
- package/api/src/routes/subscription-items.ts +3 -3
- package/api/src/routes/subscriptions.ts +15 -15
- package/api/src/routes/usage-records.ts +2 -2
- package/api/src/routes/webhook-attempts.ts +2 -1
- package/api/src/routes/webhook-endpoints.ts +3 -2
- package/blocklet.yml +1 -1
- package/package.json +24 -24
package/api/src/index.ts
CHANGED
|
@@ -6,8 +6,7 @@ import fallback from '@blocklet/sdk/lib/middlewares/fallback';
|
|
|
6
6
|
import cookieParser from 'cookie-parser';
|
|
7
7
|
import cors from 'cors';
|
|
8
8
|
import dotenv from 'dotenv-flow';
|
|
9
|
-
import express, { ErrorRequestHandler
|
|
10
|
-
import morgan from 'morgan';
|
|
9
|
+
import express, { ErrorRequestHandler } from 'express';
|
|
11
10
|
|
|
12
11
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
13
12
|
import { xss } from '@blocklet/xss';
|
|
@@ -18,7 +17,7 @@ import { ensureStakedForGas } from './integrations/arcblock/stake';
|
|
|
18
17
|
import { initResourceHandler } from './integrations/blocklet/resource';
|
|
19
18
|
import { ensureWebhookRegistered } from './integrations/stripe/setup';
|
|
20
19
|
import { handlers } from './libs/auth';
|
|
21
|
-
import logger, {
|
|
20
|
+
import logger, { setupAccessLogger } from './libs/logger';
|
|
22
21
|
import { contextMiddleware, ensureI18n } from './libs/middleware';
|
|
23
22
|
import { initEventBroadcast } from './libs/ws';
|
|
24
23
|
import { startCheckoutSessionQueue } from './queues/checkout-session';
|
|
@@ -49,6 +48,7 @@ initialize(sequelize);
|
|
|
49
48
|
|
|
50
49
|
export const app = express();
|
|
51
50
|
|
|
51
|
+
setupAccessLogger(app);
|
|
52
52
|
app.set('trust proxy', true);
|
|
53
53
|
app.use(cookieParser());
|
|
54
54
|
app.use((req, res, next) => {
|
|
@@ -79,23 +79,6 @@ router.use('/api', routes);
|
|
|
79
79
|
|
|
80
80
|
const isProduction = process.env.BLOCKLET_MODE === 'production';
|
|
81
81
|
|
|
82
|
-
const accessFormat =
|
|
83
|
-
isProduction
|
|
84
|
-
? 'combined'
|
|
85
|
-
: (tokens: any, req: Request, res: Response) => [tokens.method(req, res), tokens.url(req, res), tokens.status(req, res), tokens.res(req, res, 'content-length'), '-', tokens['response-time'](req, res), 'ms'].join(' '); // prettier-ignore
|
|
86
|
-
|
|
87
|
-
if (isProduction) {
|
|
88
|
-
app.use(morgan(accessFormat, { stream: accessLogStream }));
|
|
89
|
-
} else {
|
|
90
|
-
app.use((req, res, next) => {
|
|
91
|
-
if (['/node_modules/.vite', '/src', '/@'].some((p) => req.originalUrl.startsWith(p))) {
|
|
92
|
-
return next();
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return morgan(accessFormat, { stream: accessLogStream })(req, res, next);
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
|
|
99
82
|
app.use(contextMiddleware);
|
|
100
83
|
app.use(router);
|
|
101
84
|
|
|
@@ -106,7 +89,7 @@ if (isProduction) {
|
|
|
106
89
|
|
|
107
90
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
108
91
|
app.use(<ErrorRequestHandler>((err, req, res, _next) => {
|
|
109
|
-
|
|
92
|
+
logger.error(err);
|
|
110
93
|
if (req.accepts('json')) {
|
|
111
94
|
res.status(500).send({ error: err.message });
|
|
112
95
|
} else {
|
package/api/src/libs/logger.ts
CHANGED
|
@@ -522,7 +522,7 @@ export async function startCheckoutSessionFromPaymentLink(id: string, req: Reque
|
|
|
522
522
|
customer: req.user ? await Customer.findOne({ where: { did: req.user.did } }) : null,
|
|
523
523
|
});
|
|
524
524
|
} catch (err) {
|
|
525
|
-
|
|
525
|
+
logger.error(err);
|
|
526
526
|
res.status(500).json({ error: err.message });
|
|
527
527
|
}
|
|
528
528
|
}
|
|
@@ -1135,7 +1135,7 @@ router.put('/:id/upsell', user, ensureCheckoutSessionOpen, async (req, res) => {
|
|
|
1135
1135
|
const items = await Price.expand(checkoutSession.line_items, { upsell: true });
|
|
1136
1136
|
res.json({ ...checkoutSession.toJSON(), line_items: items });
|
|
1137
1137
|
} catch (err) {
|
|
1138
|
-
|
|
1138
|
+
logger.error(err);
|
|
1139
1139
|
res.status(500).json({ error: err.message });
|
|
1140
1140
|
}
|
|
1141
1141
|
});
|
|
@@ -1215,7 +1215,7 @@ router.get('/:id/cross-sell', user, ensureCheckoutSessionOpen, async (req, res)
|
|
|
1215
1215
|
// @ts-ignore
|
|
1216
1216
|
return res.status(result.error ? 400 : 200).json(result);
|
|
1217
1217
|
} catch (err) {
|
|
1218
|
-
|
|
1218
|
+
logger.error(err);
|
|
1219
1219
|
res.status(500).json({ error: err.message });
|
|
1220
1220
|
}
|
|
1221
1221
|
});
|
|
@@ -1261,7 +1261,7 @@ router.put('/:id/cross-sell', user, ensureCheckoutSessionOpen, async (req, res)
|
|
|
1261
1261
|
const items = await Price.expand(checkoutSession.line_items, { upsell: true });
|
|
1262
1262
|
res.json({ ...checkoutSession.toJSON(), line_items: items });
|
|
1263
1263
|
} catch (err) {
|
|
1264
|
-
|
|
1264
|
+
logger.error(err);
|
|
1265
1265
|
res.status(500).json({ error: err.message });
|
|
1266
1266
|
}
|
|
1267
1267
|
});
|
|
@@ -1287,7 +1287,7 @@ router.delete('/:id/cross-sell', user, ensureCheckoutSessionOpen, async (req, re
|
|
|
1287
1287
|
const items = await Price.expand(checkoutSession.line_items, { upsell: true });
|
|
1288
1288
|
res.json({ ...checkoutSession.toJSON(), line_items: items });
|
|
1289
1289
|
} catch (err) {
|
|
1290
|
-
|
|
1290
|
+
logger.error(err);
|
|
1291
1291
|
res.status(500).json({ error: err.message });
|
|
1292
1292
|
}
|
|
1293
1293
|
});
|
|
@@ -1356,7 +1356,7 @@ router.put('/:id/amount', ensureCheckoutSessionOpen, async (req, res) => {
|
|
|
1356
1356
|
|
|
1357
1357
|
res.json({ ...checkoutSession.toJSON(), line_items: await Price.expand(newItems) });
|
|
1358
1358
|
} catch (err) {
|
|
1359
|
-
|
|
1359
|
+
logger.error(err);
|
|
1360
1360
|
res.status(500).json({ error: err.message });
|
|
1361
1361
|
}
|
|
1362
1362
|
});
|
|
@@ -1454,7 +1454,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
1454
1454
|
|
|
1455
1455
|
res.json({ count, list: docs });
|
|
1456
1456
|
} catch (err) {
|
|
1457
|
-
|
|
1457
|
+
logger.error(err);
|
|
1458
1458
|
res.json({ count: 0, list: [] });
|
|
1459
1459
|
}
|
|
1460
1460
|
});
|
|
@@ -10,6 +10,7 @@ import { authenticate } from '../libs/security';
|
|
|
10
10
|
import { formatMetadata } from '../libs/util';
|
|
11
11
|
import { Customer } from '../store/models/customer';
|
|
12
12
|
import { blocklet } from '../libs/auth';
|
|
13
|
+
import logger from '../libs/logger';
|
|
13
14
|
|
|
14
15
|
const router = Router();
|
|
15
16
|
const auth = authenticate<Customer>({ component: true, roles: ['owner', 'admin'] });
|
|
@@ -46,7 +47,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
46
47
|
|
|
47
48
|
res.json({ count, list, paging: { page, pageSize } });
|
|
48
49
|
} catch (err) {
|
|
49
|
-
|
|
50
|
+
logger.error(err);
|
|
50
51
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
51
52
|
}
|
|
52
53
|
});
|
|
@@ -103,7 +104,7 @@ router.get('/me', sessionMiddleware(), async (req, res) => {
|
|
|
103
104
|
res.json({ ...doc.toJSON(), summary: { ...summary, stake, token }, livemode });
|
|
104
105
|
}
|
|
105
106
|
} catch (err) {
|
|
106
|
-
|
|
107
|
+
logger.error('get customer failed', err);
|
|
107
108
|
res.status(500).json({ error: `Failed to get customer: ${err.message}` });
|
|
108
109
|
}
|
|
109
110
|
});
|
|
@@ -117,7 +118,7 @@ router.get('/:id', auth, async (req, res) => {
|
|
|
117
118
|
res.status(404).json(null);
|
|
118
119
|
}
|
|
119
120
|
} catch (err) {
|
|
120
|
-
|
|
121
|
+
logger.error(err);
|
|
121
122
|
res.status(500).json({ error: `Failed to get customer: ${err.message}` });
|
|
122
123
|
}
|
|
123
124
|
});
|
|
@@ -137,7 +138,7 @@ router.get('/:id/summary', auth, async (req, res) => {
|
|
|
137
138
|
]);
|
|
138
139
|
res.json({ ...summary, stake, token });
|
|
139
140
|
} catch (err) {
|
|
140
|
-
|
|
141
|
+
logger.error(err);
|
|
141
142
|
res.json(null);
|
|
142
143
|
}
|
|
143
144
|
});
|
|
@@ -183,7 +184,7 @@ router.put('/:id', authPortal, async (req, res) => {
|
|
|
183
184
|
await doc.update(raw);
|
|
184
185
|
res.json(doc);
|
|
185
186
|
} catch (err) {
|
|
186
|
-
|
|
187
|
+
logger.error(err);
|
|
187
188
|
res.json(null);
|
|
188
189
|
}
|
|
189
190
|
});
|
package/api/src/routes/events.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { createListParamSchema } from '../libs/api';
|
|
|
6
6
|
import { authenticate } from '../libs/security';
|
|
7
7
|
import { Event } from '../store/models/event';
|
|
8
8
|
import { blocklet } from '../libs/auth';
|
|
9
|
+
import logger from '../libs/logger';
|
|
9
10
|
|
|
10
11
|
const router = Router();
|
|
11
12
|
const auth = authenticate<Event>({ component: true, roles: ['owner', 'admin'] });
|
|
@@ -49,7 +50,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
49
50
|
|
|
50
51
|
res.json({ count, list, paging: { page, pageSize } });
|
|
51
52
|
} catch (err) {
|
|
52
|
-
|
|
53
|
+
logger.error(err);
|
|
53
54
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
54
55
|
}
|
|
55
56
|
});
|
|
@@ -71,7 +72,7 @@ router.get('/:id', auth, async (req, res) => {
|
|
|
71
72
|
}
|
|
72
73
|
return res.status(404).json(null);
|
|
73
74
|
} catch (err) {
|
|
74
|
-
|
|
75
|
+
logger.error(err);
|
|
75
76
|
return res.status(400).json({ error: `Failed to get event: ${err.message}` });
|
|
76
77
|
}
|
|
77
78
|
});
|
|
@@ -23,6 +23,7 @@ import { Product } from '../store/models/product';
|
|
|
23
23
|
import { Subscription } from '../store/models/subscription';
|
|
24
24
|
import { getReturnStakeInvoices, getStakingInvoices } from '../libs/invoice';
|
|
25
25
|
import { CheckoutSession, PaymentLink, TInvoiceExpanded } from '../store/models';
|
|
26
|
+
import logger from '../libs/logger';
|
|
26
27
|
|
|
27
28
|
const router = Router();
|
|
28
29
|
const authAdmin = authenticate<Subscription>({ component: true, roles: ['owner', 'admin'] });
|
|
@@ -174,7 +175,7 @@ router.get('/', authMine, async (req, res) => {
|
|
|
174
175
|
|
|
175
176
|
res.json({ count, list: invoices, subscription, paging: { page, pageSize } });
|
|
176
177
|
} catch (err) {
|
|
177
|
-
|
|
178
|
+
logger.error(err);
|
|
178
179
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
179
180
|
}
|
|
180
181
|
});
|
|
@@ -279,7 +280,7 @@ router.get('/:id', authPortal, async (req, res) => {
|
|
|
279
280
|
}
|
|
280
281
|
return res.status(404).json(null);
|
|
281
282
|
} catch (err) {
|
|
282
|
-
|
|
283
|
+
logger.error(err);
|
|
283
284
|
return res.status(500).json({ error: `Failed to get invoice: ${err.message}` });
|
|
284
285
|
}
|
|
285
286
|
});
|
|
@@ -304,7 +305,7 @@ router.put('/:id', authAdmin, async (req, res) => {
|
|
|
304
305
|
await doc.update(raw);
|
|
305
306
|
res.json(doc);
|
|
306
307
|
} catch (err) {
|
|
307
|
-
|
|
308
|
+
logger.error(err);
|
|
308
309
|
res.json(null);
|
|
309
310
|
}
|
|
310
311
|
});
|
|
@@ -77,7 +77,7 @@ router.post('/', auth, async (req, res) => {
|
|
|
77
77
|
});
|
|
78
78
|
return res.json(currency);
|
|
79
79
|
} catch (err) {
|
|
80
|
-
|
|
80
|
+
logger.error(err);
|
|
81
81
|
return res.status(400).json({ error: `${method.type} currency contract verify failed` });
|
|
82
82
|
}
|
|
83
83
|
}
|
|
@@ -113,7 +113,7 @@ router.post('/', auth, async (req, res) => {
|
|
|
113
113
|
});
|
|
114
114
|
return res.json(currency);
|
|
115
115
|
} catch (err) {
|
|
116
|
-
|
|
116
|
+
logger.error(err);
|
|
117
117
|
return res.status(400).json({ error: `${method.type} currency contract verify failed` });
|
|
118
118
|
}
|
|
119
119
|
}
|
|
@@ -123,7 +123,7 @@ router.get('/', authMine, async (req, res) => {
|
|
|
123
123
|
|
|
124
124
|
res.json({ count, list, paging: { page, pageSize } });
|
|
125
125
|
} catch (err) {
|
|
126
|
-
|
|
126
|
+
logger.error(err);
|
|
127
127
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
128
128
|
}
|
|
129
129
|
});
|
|
@@ -191,7 +191,7 @@ router.get('/:id', authPortal, async (req, res) => {
|
|
|
191
191
|
res.status(404).json(null);
|
|
192
192
|
}
|
|
193
193
|
} catch (err) {
|
|
194
|
-
|
|
194
|
+
logger.error(err);
|
|
195
195
|
res.status(500).json({ error: `Failed to get payment intent: ${err.message}` });
|
|
196
196
|
}
|
|
197
197
|
});
|
|
@@ -216,7 +216,7 @@ router.put('/:id', authAdmin, async (req, res) => {
|
|
|
216
216
|
await doc.update(raw);
|
|
217
217
|
res.json(doc);
|
|
218
218
|
} catch (err) {
|
|
219
|
-
|
|
219
|
+
logger.error(err);
|
|
220
220
|
res.json(null);
|
|
221
221
|
}
|
|
222
222
|
});
|
|
@@ -242,7 +242,7 @@ router.get('/:id/retry', authAdmin, async (req, res) => {
|
|
|
242
242
|
});
|
|
243
243
|
res.json(doc);
|
|
244
244
|
} catch (err) {
|
|
245
|
-
|
|
245
|
+
logger.error(err);
|
|
246
246
|
res.json(null);
|
|
247
247
|
}
|
|
248
248
|
});
|
|
@@ -332,7 +332,7 @@ router.put('/:id/refund', authAdmin, async (req, res) => {
|
|
|
332
332
|
});
|
|
333
333
|
res.json(item.toJSON());
|
|
334
334
|
} catch (err) {
|
|
335
|
-
|
|
335
|
+
logger.error(err);
|
|
336
336
|
res.status(500).json({ error: `Failed to payment intent refund: ${err.message}` });
|
|
337
337
|
}
|
|
338
338
|
});
|
|
@@ -370,7 +370,7 @@ router.get('/:id/refundable-amount', authPortal, async (req, res) => {
|
|
|
370
370
|
res.status(404).json(null);
|
|
371
371
|
}
|
|
372
372
|
} catch (err) {
|
|
373
|
-
|
|
373
|
+
logger.error(err);
|
|
374
374
|
res.status(500).json({ error: `Failed to get payment intent refundable amount: ${err.message}` });
|
|
375
375
|
}
|
|
376
376
|
});
|
|
@@ -257,7 +257,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
257
257
|
|
|
258
258
|
res.json({ count, list, paging: { page, pageSize } });
|
|
259
259
|
} catch (err) {
|
|
260
|
-
|
|
260
|
+
logger.error(err);
|
|
261
261
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
262
262
|
}
|
|
263
263
|
});
|
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
Subscription,
|
|
22
22
|
} from '../store/models';
|
|
23
23
|
import { EVM_CHAIN_TYPES } from '../libs/constants';
|
|
24
|
+
import logger from '../libs/logger';
|
|
24
25
|
|
|
25
26
|
const router = Router();
|
|
26
27
|
const auth = authenticate<PaymentStat>({ component: true, roles: ['owner', 'admin'] });
|
|
@@ -80,7 +81,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
80
81
|
|
|
81
82
|
res.json({ count, list });
|
|
82
83
|
} catch (err) {
|
|
83
|
-
|
|
84
|
+
logger.error(err);
|
|
84
85
|
res.json({ count: 0, list: [] });
|
|
85
86
|
}
|
|
86
87
|
});
|
|
@@ -132,7 +133,7 @@ router.get('/summary', auth, async (req, res) => {
|
|
|
132
133
|
},
|
|
133
134
|
});
|
|
134
135
|
} catch (err) {
|
|
135
|
-
|
|
136
|
+
logger.error(err);
|
|
136
137
|
res.json(null);
|
|
137
138
|
}
|
|
138
139
|
});
|
|
@@ -14,6 +14,7 @@ import { PaymentMethod } from '../store/models/payment-method';
|
|
|
14
14
|
import { Payout } from '../store/models/payout';
|
|
15
15
|
import { PaymentLink, TPaymentIntentExpanded } from '../store/models';
|
|
16
16
|
import { CheckoutSession } from '../store/models/checkout-session';
|
|
17
|
+
import logger from '../libs/logger';
|
|
17
18
|
|
|
18
19
|
const router = Router();
|
|
19
20
|
const authAdmin = authenticate<Payout>({ component: true, roles: ['owner', 'admin'] });
|
|
@@ -102,7 +103,7 @@ router.get('/', authMine, async (req, res) => {
|
|
|
102
103
|
|
|
103
104
|
res.json({ count, list, paging: { page, pageSize } });
|
|
104
105
|
} catch (err) {
|
|
105
|
-
|
|
106
|
+
logger.error(err);
|
|
106
107
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
107
108
|
}
|
|
108
109
|
});
|
|
@@ -169,7 +170,7 @@ router.get('/mine', sessionMiddleware(), async (req, res) => {
|
|
|
169
170
|
);
|
|
170
171
|
return res.json({ count, list: result, paging: { page, pageSize } });
|
|
171
172
|
} catch (err) {
|
|
172
|
-
|
|
173
|
+
logger.error(err);
|
|
173
174
|
return res.status(400).json({ error: err.message });
|
|
174
175
|
}
|
|
175
176
|
});
|
|
@@ -199,7 +200,7 @@ router.get('/:id', authPortal, async (req, res) => {
|
|
|
199
200
|
paymentLink = await PaymentLink.findByPk(checkoutSession.payment_link_id);
|
|
200
201
|
}
|
|
201
202
|
} catch (err) {
|
|
202
|
-
|
|
203
|
+
logger.error(err);
|
|
203
204
|
}
|
|
204
205
|
}
|
|
205
206
|
const payout = doc.toJSON();
|
|
@@ -217,7 +218,7 @@ router.get('/:id', authPortal, async (req, res) => {
|
|
|
217
218
|
}
|
|
218
219
|
return res.json(payout);
|
|
219
220
|
} catch (err) {
|
|
220
|
-
|
|
221
|
+
logger.error(err);
|
|
221
222
|
return res.status(500).json({ error: `Failed to get payout: ${err.message}` });
|
|
222
223
|
}
|
|
223
224
|
});
|
|
@@ -242,7 +243,7 @@ router.put('/:id', authAdmin, async (req, res) => {
|
|
|
242
243
|
await doc.update(raw);
|
|
243
244
|
res.json(doc);
|
|
244
245
|
} catch (err) {
|
|
245
|
-
|
|
246
|
+
logger.error(err);
|
|
246
247
|
res.json(null);
|
|
247
248
|
}
|
|
248
249
|
});
|
|
@@ -128,7 +128,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
128
128
|
|
|
129
129
|
res.json({ count, list, paging: { page, pageSize } });
|
|
130
130
|
} catch (err) {
|
|
131
|
-
|
|
131
|
+
logger.error(err);
|
|
132
132
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
133
133
|
}
|
|
134
134
|
});
|
|
@@ -272,7 +272,7 @@ router.post('/stash', auth, async (req, res) => {
|
|
|
272
272
|
}
|
|
273
273
|
res.json(doc);
|
|
274
274
|
} catch (err) {
|
|
275
|
-
|
|
275
|
+
logger.error(err);
|
|
276
276
|
res.status(500).json({ error: err.message });
|
|
277
277
|
}
|
|
278
278
|
});
|
|
@@ -94,7 +94,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
94
94
|
}
|
|
95
95
|
res.json({ count, list, paging: { page, pageSize } });
|
|
96
96
|
} catch (err) {
|
|
97
|
-
|
|
97
|
+
logger.error(err);
|
|
98
98
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
99
99
|
}
|
|
100
100
|
});
|
|
@@ -112,7 +112,7 @@ router.get('/:id', auth, async (req, res) => {
|
|
|
112
112
|
res.status(404).json(null);
|
|
113
113
|
}
|
|
114
114
|
} catch (err) {
|
|
115
|
-
|
|
115
|
+
logger.error(err);
|
|
116
116
|
res.status(500).json({ error: `Failed to get subscription item: ${err.message}` });
|
|
117
117
|
}
|
|
118
118
|
});
|
|
@@ -249,7 +249,7 @@ router.post('/:id/add-usage-quantity', auth, async (req, res) => {
|
|
|
249
249
|
|
|
250
250
|
return res.json(usageRecord);
|
|
251
251
|
} catch (err) {
|
|
252
|
-
|
|
252
|
+
logger.error(err);
|
|
253
253
|
return res.status(400).json({ error: `Failed to add usage quantity: ${err.message}` });
|
|
254
254
|
}
|
|
255
255
|
});
|
|
@@ -197,7 +197,7 @@ router.get('/', authMine, async (req, res) => {
|
|
|
197
197
|
|
|
198
198
|
res.json({ count, list: docs, paging: { page, pageSize } });
|
|
199
199
|
} catch (err) {
|
|
200
|
-
|
|
200
|
+
logger.error(err);
|
|
201
201
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
202
202
|
}
|
|
203
203
|
});
|
|
@@ -264,7 +264,7 @@ router.get('/:id', authPortal, async (req, res) => {
|
|
|
264
264
|
res.status(404).json(null);
|
|
265
265
|
}
|
|
266
266
|
} catch (err) {
|
|
267
|
-
|
|
267
|
+
logger.error(err);
|
|
268
268
|
res.status(500).json({ error: `Failed to get subscription: ${err.message}` });
|
|
269
269
|
}
|
|
270
270
|
});
|
|
@@ -1139,7 +1139,7 @@ router.put('/:id', authPortal, async (req, res) => {
|
|
|
1139
1139
|
});
|
|
1140
1140
|
return res.json({ ...subscription.toJSON(), connectAction });
|
|
1141
1141
|
} catch (err) {
|
|
1142
|
-
|
|
1142
|
+
logger.error(err);
|
|
1143
1143
|
return res.status(500).json({ code: err.code, error: err.message });
|
|
1144
1144
|
}
|
|
1145
1145
|
});
|
|
@@ -1216,7 +1216,7 @@ router.get('/:id/change-plan', authPortal, async (req, res) => {
|
|
|
1216
1216
|
const table = await getUpdateTable(subscription);
|
|
1217
1217
|
return res.json(table);
|
|
1218
1218
|
} catch (err) {
|
|
1219
|
-
|
|
1219
|
+
logger.error(err);
|
|
1220
1220
|
return res.json(null);
|
|
1221
1221
|
}
|
|
1222
1222
|
});
|
|
@@ -1267,7 +1267,7 @@ router.post('/:id/change-plan', authPortal, async (req, res) => {
|
|
|
1267
1267
|
items: newItems,
|
|
1268
1268
|
});
|
|
1269
1269
|
} catch (err) {
|
|
1270
|
-
|
|
1270
|
+
logger.error(err);
|
|
1271
1271
|
return res.status(400).json({ error: err.message });
|
|
1272
1272
|
}
|
|
1273
1273
|
});
|
|
@@ -1312,7 +1312,7 @@ router.get('/:id/proration', authPortal, async (req, res) => {
|
|
|
1312
1312
|
paymentCurrency,
|
|
1313
1313
|
});
|
|
1314
1314
|
} catch (err) {
|
|
1315
|
-
|
|
1315
|
+
logger.error(err);
|
|
1316
1316
|
return res.status(400).json({ error: err.message });
|
|
1317
1317
|
}
|
|
1318
1318
|
});
|
|
@@ -1344,7 +1344,7 @@ router.get('/:id/staking', authPortal, async (req, res) => {
|
|
|
1344
1344
|
});
|
|
1345
1345
|
} catch (err) {
|
|
1346
1346
|
logger.error('subscription staking simulation failed', { error: err });
|
|
1347
|
-
|
|
1347
|
+
logger.error(err);
|
|
1348
1348
|
return res.status(400).json({ error: err.message });
|
|
1349
1349
|
}
|
|
1350
1350
|
});
|
|
@@ -1628,7 +1628,7 @@ router.post('/:id/change-payment', authPortal, async (req, res) => {
|
|
|
1628
1628
|
delegation,
|
|
1629
1629
|
});
|
|
1630
1630
|
} catch (err) {
|
|
1631
|
-
|
|
1631
|
+
logger.error(err);
|
|
1632
1632
|
return res.status(500).json({ code: err.code, error: err.message });
|
|
1633
1633
|
}
|
|
1634
1634
|
});
|
|
@@ -1730,7 +1730,7 @@ router.get('/:id/summary', authPortal, async (req, res) => {
|
|
|
1730
1730
|
});
|
|
1731
1731
|
return res.json(summary);
|
|
1732
1732
|
} catch (err) {
|
|
1733
|
-
|
|
1733
|
+
logger.error(err);
|
|
1734
1734
|
return res.status(400).json({ error: err.message });
|
|
1735
1735
|
}
|
|
1736
1736
|
});
|
|
@@ -1741,7 +1741,7 @@ router.get('/:id/upcoming', authPortal, async (req, res) => {
|
|
|
1741
1741
|
const result = await getUpcomingInvoiceAmount(req.params.id as string);
|
|
1742
1742
|
return res.json(result);
|
|
1743
1743
|
} catch (err) {
|
|
1744
|
-
|
|
1744
|
+
logger.error(err);
|
|
1745
1745
|
return res.json({ error: err.message });
|
|
1746
1746
|
}
|
|
1747
1747
|
});
|
|
@@ -1904,7 +1904,7 @@ router.get('/:id/recharge', authMine, async (req, res) => {
|
|
|
1904
1904
|
|
|
1905
1905
|
return res.json({ count, list: invoices, subscription, paging: { page, pageSize } });
|
|
1906
1906
|
} catch (err) {
|
|
1907
|
-
|
|
1907
|
+
logger.error(err);
|
|
1908
1908
|
return res.status(400).json({ error: err.message });
|
|
1909
1909
|
}
|
|
1910
1910
|
});
|
|
@@ -1960,7 +1960,7 @@ router.get('/:id/overdue/invoices', authPortal, async (req, res) => {
|
|
|
1960
1960
|
invoices,
|
|
1961
1961
|
});
|
|
1962
1962
|
} catch (err) {
|
|
1963
|
-
|
|
1963
|
+
logger.error(err);
|
|
1964
1964
|
return res.status(400).json({ error: err.message });
|
|
1965
1965
|
}
|
|
1966
1966
|
});
|
|
@@ -2001,7 +2001,7 @@ router.get('/:id/delegation', authPortal, async (req, res) => {
|
|
|
2001
2001
|
}
|
|
2002
2002
|
return res.json(null);
|
|
2003
2003
|
} catch (err) {
|
|
2004
|
-
|
|
2004
|
+
logger.error(err);
|
|
2005
2005
|
return res.json(null);
|
|
2006
2006
|
}
|
|
2007
2007
|
});
|
|
@@ -2028,7 +2028,7 @@ router.get('/:id/overdraft-protection', authPortal, async (req, res) => {
|
|
|
2028
2028
|
shouldPay,
|
|
2029
2029
|
});
|
|
2030
2030
|
} catch (err) {
|
|
2031
|
-
|
|
2031
|
+
logger.error(err);
|
|
2032
2032
|
return res.status(400).json({ error: err.message });
|
|
2033
2033
|
}
|
|
2034
2034
|
});
|
|
@@ -2117,7 +2117,7 @@ router.post('/:id/overdraft-protection', authPortal, async (req, res) => {
|
|
|
2117
2117
|
overdraft_protection: subscription.overdraft_protection,
|
|
2118
2118
|
});
|
|
2119
2119
|
} catch (err) {
|
|
2120
|
-
|
|
2120
|
+
logger.error(err);
|
|
2121
2121
|
return res.status(400).json({ error: err.message });
|
|
2122
2122
|
}
|
|
2123
2123
|
});
|
|
@@ -192,7 +192,7 @@ router.get('/summary', auth, async (req, res) => {
|
|
|
192
192
|
|
|
193
193
|
res.json({ count, list, paging: { page, pageSize } });
|
|
194
194
|
} catch (err) {
|
|
195
|
-
|
|
195
|
+
logger.error(err);
|
|
196
196
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
197
197
|
}
|
|
198
198
|
});
|
|
@@ -235,7 +235,7 @@ export function createUsageRecordQueryFn(doc?: Subscription) {
|
|
|
235
235
|
|
|
236
236
|
res.json({ count, list });
|
|
237
237
|
} catch (err) {
|
|
238
|
-
|
|
238
|
+
logger.error(err);
|
|
239
239
|
res.json({ count: 0, list: [] });
|
|
240
240
|
}
|
|
241
241
|
};
|
|
@@ -6,6 +6,7 @@ import { createListParamSchema } from '../libs/api';
|
|
|
6
6
|
import { authenticate } from '../libs/security';
|
|
7
7
|
import { Event, WebhookAttempt, WebhookEndpoint } from '../store/models';
|
|
8
8
|
import { blocklet } from '../libs/auth';
|
|
9
|
+
import logger from '../libs/logger';
|
|
9
10
|
|
|
10
11
|
const router = Router();
|
|
11
12
|
const auth = authenticate<WebhookAttempt>({ component: true, roles: ['owner', 'admin'] });
|
|
@@ -57,7 +58,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
57
58
|
);
|
|
58
59
|
res.json({ count, list: updatedList, paging: { page, pageSize } });
|
|
59
60
|
} catch (err) {
|
|
60
|
-
|
|
61
|
+
logger.error(err);
|
|
61
62
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
62
63
|
}
|
|
63
64
|
});
|
|
@@ -7,6 +7,7 @@ import { createListParamSchema, MetadataSchema } from '../libs/api';
|
|
|
7
7
|
import { authenticate } from '../libs/security';
|
|
8
8
|
import { formatMetadata } from '../libs/util';
|
|
9
9
|
import { WebhookEndpoint } from '../store/models';
|
|
10
|
+
import logger from '../libs/logger';
|
|
10
11
|
|
|
11
12
|
const router = Router();
|
|
12
13
|
const auth = authenticate<WebhookEndpoint>({ component: true, roles: ['owner', 'admin'] });
|
|
@@ -69,7 +70,7 @@ router.get('/', auth, async (req, res) => {
|
|
|
69
70
|
|
|
70
71
|
res.json({ count, list, paging: { page, pageSize } });
|
|
71
72
|
} catch (err) {
|
|
72
|
-
|
|
73
|
+
logger.error(err);
|
|
73
74
|
res.json({ count: 0, list: [], paging: { page, pageSize } });
|
|
74
75
|
}
|
|
75
76
|
});
|
|
@@ -82,7 +83,7 @@ router.get('/:id', auth, async (req, res) => {
|
|
|
82
83
|
});
|
|
83
84
|
res.json(doc);
|
|
84
85
|
} catch (err) {
|
|
85
|
-
|
|
86
|
+
logger.error(err);
|
|
86
87
|
res.json(null);
|
|
87
88
|
}
|
|
88
89
|
});
|
package/blocklet.yml
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "payment-kit",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.3",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"dev": "blocklet dev --open",
|
|
6
6
|
"eject": "vite eject",
|
|
@@ -43,30 +43,30 @@
|
|
|
43
43
|
]
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@abtnode/cron": "^1.16.
|
|
47
|
-
"@arcblock/did": "^1.19.
|
|
46
|
+
"@abtnode/cron": "^1.16.38",
|
|
47
|
+
"@arcblock/did": "^1.19.9",
|
|
48
48
|
"@arcblock/did-auth-storage-nedb": "^1.7.1",
|
|
49
|
-
"@arcblock/did-connect": "^2.11.
|
|
50
|
-
"@arcblock/did-util": "^1.19.
|
|
51
|
-
"@arcblock/jwt": "^1.19.
|
|
52
|
-
"@arcblock/ux": "^2.11.
|
|
53
|
-
"@arcblock/validator": "^1.19.
|
|
54
|
-
"@blocklet/js-sdk": "^1.16.
|
|
55
|
-
"@blocklet/logger": "^1.16.
|
|
56
|
-
"@blocklet/payment-react": "1.18.
|
|
57
|
-
"@blocklet/sdk": "^1.16.
|
|
58
|
-
"@blocklet/ui-react": "^2.11.
|
|
59
|
-
"@blocklet/uploader": "^0.1.
|
|
60
|
-
"@blocklet/xss": "^0.1.
|
|
49
|
+
"@arcblock/did-connect": "^2.11.30",
|
|
50
|
+
"@arcblock/did-util": "^1.19.9",
|
|
51
|
+
"@arcblock/jwt": "^1.19.9",
|
|
52
|
+
"@arcblock/ux": "^2.11.30",
|
|
53
|
+
"@arcblock/validator": "^1.19.9",
|
|
54
|
+
"@blocklet/js-sdk": "^1.16.38",
|
|
55
|
+
"@blocklet/logger": "^1.16.38",
|
|
56
|
+
"@blocklet/payment-react": "1.18.3",
|
|
57
|
+
"@blocklet/sdk": "^1.16.38",
|
|
58
|
+
"@blocklet/ui-react": "^2.11.30",
|
|
59
|
+
"@blocklet/uploader": "^0.1.66",
|
|
60
|
+
"@blocklet/xss": "^0.1.22",
|
|
61
61
|
"@mui/icons-material": "^5.16.6",
|
|
62
62
|
"@mui/lab": "^5.0.0-alpha.173",
|
|
63
63
|
"@mui/material": "^5.16.6",
|
|
64
64
|
"@mui/system": "^5.16.6",
|
|
65
|
-
"@ocap/asset": "^1.19.
|
|
66
|
-
"@ocap/client": "^1.19.
|
|
67
|
-
"@ocap/mcrypto": "^1.19.
|
|
68
|
-
"@ocap/util": "^1.19.
|
|
69
|
-
"@ocap/wallet": "^1.19.
|
|
65
|
+
"@ocap/asset": "^1.19.9",
|
|
66
|
+
"@ocap/client": "^1.19.9",
|
|
67
|
+
"@ocap/mcrypto": "^1.19.9",
|
|
68
|
+
"@ocap/util": "^1.19.9",
|
|
69
|
+
"@ocap/wallet": "^1.19.9",
|
|
70
70
|
"@stripe/react-stripe-js": "^2.7.3",
|
|
71
71
|
"@stripe/stripe-js": "^2.4.0",
|
|
72
72
|
"ahooks": "^3.8.0",
|
|
@@ -119,9 +119,9 @@
|
|
|
119
119
|
"web3": "^4.16.0"
|
|
120
120
|
},
|
|
121
121
|
"devDependencies": {
|
|
122
|
-
"@abtnode/types": "^1.16.
|
|
122
|
+
"@abtnode/types": "^1.16.38",
|
|
123
123
|
"@arcblock/eslint-config-ts": "^0.3.3",
|
|
124
|
-
"@blocklet/payment-types": "1.18.
|
|
124
|
+
"@blocklet/payment-types": "1.18.3",
|
|
125
125
|
"@types/cookie-parser": "^1.4.7",
|
|
126
126
|
"@types/cors": "^2.8.17",
|
|
127
127
|
"@types/debug": "^4.1.12",
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
"vite": "^5.3.5",
|
|
152
152
|
"vite-node": "^2.0.4",
|
|
153
153
|
"vite-plugin-babel-import": "^2.0.5",
|
|
154
|
-
"vite-plugin-blocklet": "^0.9.
|
|
154
|
+
"vite-plugin-blocklet": "^0.9.18",
|
|
155
155
|
"vite-plugin-node-polyfills": "^0.21.0",
|
|
156
156
|
"vite-plugin-svgr": "^4.2.0",
|
|
157
157
|
"vite-tsconfig-paths": "^4.3.2",
|
|
@@ -167,5 +167,5 @@
|
|
|
167
167
|
"parser": "typescript"
|
|
168
168
|
}
|
|
169
169
|
},
|
|
170
|
-
"gitHead": "
|
|
170
|
+
"gitHead": "a2708c80deb174f7fd9d170ffc90566b68bf844b"
|
|
171
171
|
}
|