payment-kit 1.18.13 → 1.18.15
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 +2 -0
- package/api/src/integrations/stripe/resource.ts +53 -11
- package/api/src/libs/auth.ts +14 -0
- package/api/src/libs/payment.ts +77 -2
- package/api/src/libs/util.ts +8 -0
- package/api/src/queues/payment.ts +50 -1
- package/api/src/queues/payout.ts +297 -0
- package/api/src/routes/checkout-sessions.ts +2 -7
- package/api/src/routes/payment-currencies.ts +120 -1
- package/api/src/routes/payment-methods.ts +19 -9
- package/api/src/routes/subscriptions.ts +2 -8
- package/api/src/store/migrations/20250305-vault-config.ts +21 -0
- package/api/src/store/models/payment-currency.ts +14 -0
- package/api/src/store/models/payout.ts +21 -0
- package/api/src/store/models/types.ts +6 -0
- package/blocklet.yml +1 -1
- package/package.json +18 -18
- package/src/app.tsx +116 -120
- package/src/components/customer/overdraft-protection.tsx +1 -0
- package/src/components/layout/admin.tsx +6 -0
- package/src/components/layout/user.tsx +1 -0
- package/src/components/metadata/editor.tsx +7 -1
- package/src/components/metadata/list.tsx +3 -0
- package/src/components/passport/assign.tsx +3 -0
- package/src/components/payment-link/rename.tsx +1 -0
- package/src/components/pricing-table/rename.tsx +1 -0
- package/src/components/product/add-price.tsx +1 -0
- package/src/components/product/edit-price.tsx +1 -0
- package/src/components/product/edit.tsx +1 -0
- package/src/components/subscription/actions/index.tsx +1 -0
- package/src/components/subscription/portal/actions.tsx +1 -0
- package/src/locales/en.tsx +42 -0
- package/src/locales/zh.tsx +37 -0
- package/src/pages/admin/payments/payouts/detail.tsx +47 -43
- package/src/pages/admin/settings/index.tsx +3 -3
- package/src/pages/admin/settings/payment-methods/index.tsx +33 -1
- package/src/pages/admin/settings/vault-config/edit-form.tsx +253 -0
- package/src/pages/admin/settings/vault-config/index.tsx +367 -0
- package/src/pages/integrations/donations/edit-form.tsx +0 -1
|
@@ -9,11 +9,16 @@ import { authenticate } from '../libs/security';
|
|
|
9
9
|
import { PaymentCurrency, TPaymentCurrency } from '../store/models/payment-currency';
|
|
10
10
|
import { PaymentMethod } from '../store/models/payment-method';
|
|
11
11
|
import { EVM_CHAIN_TYPES } from '../libs/constants';
|
|
12
|
+
import { ethWallet, getVaultAddress, wallet } from '../libs/auth';
|
|
13
|
+
import { resolveAddressChainTypes } from '../libs/util';
|
|
14
|
+
import { depositVaultQueue } from '../queues/payment';
|
|
15
|
+
import { checkDepositVaultAmount } from '../libs/payment';
|
|
16
|
+
import { getTokenSummaryByDid } from '../integrations/arcblock/stake';
|
|
12
17
|
|
|
13
18
|
const router = Router();
|
|
14
19
|
|
|
15
20
|
const auth = authenticate<PaymentCurrency>({ component: true, roles: ['owner', 'admin'] });
|
|
16
|
-
|
|
21
|
+
const authOwner = authenticate<PaymentCurrency>({ component: true, roles: ['owner'] });
|
|
17
22
|
router.post('/', auth, async (req, res) => {
|
|
18
23
|
const raw: Partial<TPaymentCurrency> = req.body;
|
|
19
24
|
|
|
@@ -140,6 +145,84 @@ router.get('/', auth, async (req, res) => {
|
|
|
140
145
|
res.json(list);
|
|
141
146
|
});
|
|
142
147
|
|
|
148
|
+
router.get('/vault-config', auth, async (req, res) => {
|
|
149
|
+
const vaultAddress = await getVaultAddress();
|
|
150
|
+
if (!vaultAddress) {
|
|
151
|
+
return res.json({
|
|
152
|
+
list: [],
|
|
153
|
+
balances: {},
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
const chainTypes = resolveAddressChainTypes(vaultAddress);
|
|
157
|
+
try {
|
|
158
|
+
const paymentMethods = await PaymentMethod.findAll({
|
|
159
|
+
where: {
|
|
160
|
+
type: {
|
|
161
|
+
[Op.in]: chainTypes,
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
attributes: ['id'],
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
const paymentMethodIds = paymentMethods.map((method) => method.id);
|
|
168
|
+
const list = await PaymentCurrency.scope('withVaultConfig').findAll({
|
|
169
|
+
where: {
|
|
170
|
+
payment_method_id: {
|
|
171
|
+
[Op.in]: paymentMethodIds,
|
|
172
|
+
},
|
|
173
|
+
livemode: !!req.livemode,
|
|
174
|
+
},
|
|
175
|
+
include: [{ model: PaymentMethod, as: 'payment_method' }],
|
|
176
|
+
});
|
|
177
|
+
try {
|
|
178
|
+
const [arcblock, ethereum] = await Promise.all([
|
|
179
|
+
getTokenSummaryByDid(wallet.address, !!req.livemode, 'arcblock'),
|
|
180
|
+
getTokenSummaryByDid(ethWallet.address, !!req.livemode, EVM_CHAIN_TYPES),
|
|
181
|
+
]);
|
|
182
|
+
return res.json({
|
|
183
|
+
list,
|
|
184
|
+
balances: {
|
|
185
|
+
...arcblock,
|
|
186
|
+
...ethereum,
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
} catch (err) {
|
|
190
|
+
logger.error('get token summary failed', err);
|
|
191
|
+
return res.status(400).json({ error: err.message, list, balances: {} });
|
|
192
|
+
}
|
|
193
|
+
} catch (err) {
|
|
194
|
+
logger.error('get payment currency vault config failed', err);
|
|
195
|
+
return res.status(400).json({ error: err.message, list: [], balances: {} });
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
router.get('/:id/deposit-vault', auth, async (req, res) => {
|
|
200
|
+
const { id } = req.params;
|
|
201
|
+
if (!id) {
|
|
202
|
+
return res.status(400).json({ error: 'Missing payment currency id' });
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const result = await checkDepositVaultAmount(id);
|
|
206
|
+
return res.json(result);
|
|
207
|
+
} catch (error) {
|
|
208
|
+
logger.error('Error checking deposit vault amount', { error, id });
|
|
209
|
+
return res.status(400).json({ error: 'Failed to check deposit vault amount', message: error.message });
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
router.put('/:id/deposit-vault', auth, async (req, res) => {
|
|
214
|
+
const paymentCurrency = await PaymentCurrency.findByPk(req.params.id);
|
|
215
|
+
if (!paymentCurrency) {
|
|
216
|
+
return res.status(404).json({ error: 'Payment currency not found' });
|
|
217
|
+
}
|
|
218
|
+
depositVaultQueue.push({
|
|
219
|
+
id: `deposit-vault-${paymentCurrency.id}`,
|
|
220
|
+
job: { currencyId: paymentCurrency.id },
|
|
221
|
+
});
|
|
222
|
+
logger.info('Deposit vault job pushed', { currencyId: paymentCurrency.id });
|
|
223
|
+
return res.json({ message: 'Deposit vault job pushed' });
|
|
224
|
+
});
|
|
225
|
+
|
|
143
226
|
router.get('/:id', auth, async (req, res) => {
|
|
144
227
|
const doc = await PaymentCurrency.findOne({
|
|
145
228
|
where: { [Op.or]: [{ id: req.params.id }, { symbol: req.params.id }] },
|
|
@@ -152,6 +235,42 @@ router.get('/:id', auth, async (req, res) => {
|
|
|
152
235
|
}
|
|
153
236
|
});
|
|
154
237
|
|
|
238
|
+
const UpdateVaultConfigSchema = Joi.object({
|
|
239
|
+
enabled: Joi.boolean().required(),
|
|
240
|
+
deposit_threshold: Joi.number().greater(0).required(),
|
|
241
|
+
withdraw_threshold: Joi.number().min(0).required(),
|
|
242
|
+
});
|
|
243
|
+
router.put('/:id/vault-config', authOwner, async (req, res) => {
|
|
244
|
+
try {
|
|
245
|
+
const { id } = req.params;
|
|
246
|
+
|
|
247
|
+
const { error, value: vaultConfig } = UpdateVaultConfigSchema.validate(req.body);
|
|
248
|
+
if (error) {
|
|
249
|
+
return res.status(400).json({ error: error.message });
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const paymentCurrency = await PaymentCurrency.findByPk(id);
|
|
253
|
+
if (!paymentCurrency) {
|
|
254
|
+
return res.status(404).json({ error: 'payment currency not found' });
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const updateData: Partial<TPaymentCurrency> = {
|
|
258
|
+
vault_config: {
|
|
259
|
+
enabled: vaultConfig.enabled,
|
|
260
|
+
deposit_threshold: fromTokenToUnit(vaultConfig.deposit_threshold, paymentCurrency.decimal).toString(),
|
|
261
|
+
withdraw_threshold: fromTokenToUnit(vaultConfig.withdraw_threshold, paymentCurrency.decimal).toString(),
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
await paymentCurrency.update(updateData);
|
|
266
|
+
|
|
267
|
+
return res.json(paymentCurrency.toJSON());
|
|
268
|
+
} catch (err) {
|
|
269
|
+
logger.error('update payment currency vault config failed', err);
|
|
270
|
+
return res.status(400).json({ error: err.message });
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
|
|
155
274
|
const updateCurrencySchema = Joi.object({
|
|
156
275
|
name: Joi.string().empty('').optional(),
|
|
157
276
|
description: Joi.string().empty('').optional(),
|
|
@@ -192,15 +192,25 @@ router.get('/', auth, async (req, res) => {
|
|
|
192
192
|
include: [{ model: PaymentCurrency, as: 'payment_currencies', order: [['created_at', 'ASC']] }],
|
|
193
193
|
});
|
|
194
194
|
if (query.addresses === 'true') {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
195
|
+
try {
|
|
196
|
+
const [arcblock, ethereum] = await Promise.all([
|
|
197
|
+
getTokenSummaryByDid(wallet.address, !!req.livemode, 'arcblock'),
|
|
198
|
+
getTokenSummaryByDid(ethWallet.address, !!req.livemode, EVM_CHAIN_TYPES),
|
|
199
|
+
]);
|
|
200
|
+
res.json({
|
|
201
|
+
list,
|
|
202
|
+
addresses: { arcblock: wallet.address, ethereum: ethWallet.address },
|
|
203
|
+
balances: { ...arcblock, ...ethereum },
|
|
204
|
+
});
|
|
205
|
+
} catch (err) {
|
|
206
|
+
logger.error('get token summary failed', err.message);
|
|
207
|
+
res.json({
|
|
208
|
+
list,
|
|
209
|
+
addresses: { arcblock: wallet.address, ethereum: ethWallet.address },
|
|
210
|
+
balances: {},
|
|
211
|
+
error: `get token summary failed: ${err.message}`,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
204
214
|
} else {
|
|
205
215
|
res.json(list);
|
|
206
216
|
}
|
|
@@ -9,12 +9,7 @@ import uniq from 'lodash/uniq';
|
|
|
9
9
|
import { literal, Op, OrderItem } from 'sequelize';
|
|
10
10
|
import { BN } from '@ocap/util';
|
|
11
11
|
import { createEvent } from '../libs/audit';
|
|
12
|
-
import {
|
|
13
|
-
ensureStripeCustomer,
|
|
14
|
-
ensureStripePaymentCustomer,
|
|
15
|
-
ensureStripePrice,
|
|
16
|
-
ensureStripeSubscription,
|
|
17
|
-
} from '../integrations/stripe/resource';
|
|
12
|
+
import { ensureStripeCustomer, ensureStripePrice, ensureStripeSubscription } from '../integrations/stripe/resource';
|
|
18
13
|
import { createListParamSchema, getWhereFromKvQuery, getWhereFromQuery, MetadataSchema } from '../libs/api';
|
|
19
14
|
import dayjs from '../libs/dayjs';
|
|
20
15
|
import logger from '../libs/logger';
|
|
@@ -1540,7 +1535,6 @@ router.post('/:id/change-payment', authPortal, async (req, res) => {
|
|
|
1540
1535
|
const settings = PaymentMethod.decryptSettings(paymentMethod.settings);
|
|
1541
1536
|
|
|
1542
1537
|
// changing from crypto to stripe: create/resume stripe subscription, pause crypto subscription
|
|
1543
|
-
const stripeCustomer = await ensureStripePaymentCustomer(subscription, paymentMethod);
|
|
1544
1538
|
const stripeSubscription = await ensureStripeSubscription(
|
|
1545
1539
|
subscription,
|
|
1546
1540
|
paymentMethod,
|
|
@@ -1554,7 +1548,7 @@ router.post('/:id/change-payment', authPortal, async (req, res) => {
|
|
|
1554
1548
|
payment_details: {
|
|
1555
1549
|
...subscription.payment_details,
|
|
1556
1550
|
stripe: {
|
|
1557
|
-
customer_id:
|
|
1551
|
+
customer_id: stripeSubscription.customer,
|
|
1558
1552
|
subscription_id: stripeSubscription.id,
|
|
1559
1553
|
setup_intent_id: stripeSubscription.pending_setup_intent?.id,
|
|
1560
1554
|
},
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DataTypes } from 'sequelize';
|
|
2
|
+
|
|
3
|
+
import { Migration, safeApplyColumnChanges } from '../migrate';
|
|
4
|
+
|
|
5
|
+
export const up: Migration = async ({ context }) => {
|
|
6
|
+
await safeApplyColumnChanges(context, {
|
|
7
|
+
payment_currencies: [
|
|
8
|
+
{
|
|
9
|
+
name: 'vault_config',
|
|
10
|
+
field: {
|
|
11
|
+
type: DataTypes.JSON,
|
|
12
|
+
allowNull: true,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const down: Migration = async ({ context }) => {
|
|
20
|
+
await context.removeColumn('payment_currencies', 'vault_config');
|
|
21
|
+
};
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from 'sequelize';
|
|
12
12
|
|
|
13
13
|
import { createIdGenerator } from '../../libs/util';
|
|
14
|
+
import { VaultConfig } from './types';
|
|
14
15
|
|
|
15
16
|
const nextId = createIdGenerator('pc', 12);
|
|
16
17
|
|
|
@@ -41,6 +42,7 @@ export class PaymentCurrency extends Model<InferAttributes<PaymentCurrency>, Inf
|
|
|
41
42
|
|
|
42
43
|
declare created_at: CreationOptional<Date>;
|
|
43
44
|
declare updated_at: CreationOptional<Date>;
|
|
45
|
+
declare vault_config?: VaultConfig;
|
|
44
46
|
|
|
45
47
|
public static readonly GENESIS_ATTRIBUTES = {
|
|
46
48
|
id: {
|
|
@@ -120,6 +122,10 @@ export class PaymentCurrency extends Model<InferAttributes<PaymentCurrency>, Inf
|
|
|
120
122
|
defaultValue: DataTypes.NOW,
|
|
121
123
|
allowNull: false,
|
|
122
124
|
},
|
|
125
|
+
vault_config: {
|
|
126
|
+
type: DataTypes.JSON,
|
|
127
|
+
allowNull: true,
|
|
128
|
+
},
|
|
123
129
|
};
|
|
124
130
|
|
|
125
131
|
public static initialize(sequelize: any) {
|
|
@@ -129,6 +135,14 @@ export class PaymentCurrency extends Model<InferAttributes<PaymentCurrency>, Inf
|
|
|
129
135
|
tableName: 'payment_currencies',
|
|
130
136
|
createdAt: 'created_at',
|
|
131
137
|
updatedAt: 'updated_at',
|
|
138
|
+
defaultScope: {
|
|
139
|
+
attributes: { exclude: ['vault_config'] },
|
|
140
|
+
},
|
|
141
|
+
scopes: {
|
|
142
|
+
withVaultConfig: {
|
|
143
|
+
attributes: { include: ['vault_config'] },
|
|
144
|
+
},
|
|
145
|
+
},
|
|
132
146
|
});
|
|
133
147
|
}
|
|
134
148
|
|
|
@@ -251,6 +251,27 @@ export class Payout extends Model<InferAttributes<Payout>, InferCreationAttribut
|
|
|
251
251
|
raw: true,
|
|
252
252
|
}).then((res) => res.rows);
|
|
253
253
|
}
|
|
254
|
+
|
|
255
|
+
public static async getPayoutLockedAmount(where?: any) {
|
|
256
|
+
const payouts = await Payout.findAll({
|
|
257
|
+
where: {
|
|
258
|
+
status: {
|
|
259
|
+
[Op.in]: ['pending', 'in_transit'],
|
|
260
|
+
},
|
|
261
|
+
...(where || {}),
|
|
262
|
+
},
|
|
263
|
+
attributes: ['amount'],
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
return payouts.reduce((acc: GroupedBN, payout) => {
|
|
267
|
+
const key = payout.currency_id;
|
|
268
|
+
if (!acc[key]) {
|
|
269
|
+
acc[key] = '0';
|
|
270
|
+
}
|
|
271
|
+
acc[key] = new BN(acc[key]).add(new BN(payout.amount)).toString();
|
|
272
|
+
return acc;
|
|
273
|
+
}, {});
|
|
274
|
+
}
|
|
254
275
|
}
|
|
255
276
|
|
|
256
277
|
export type TPayout = InferAttributes<Payout>;
|
|
@@ -290,6 +290,12 @@ export type PaymentMethodSettings = {
|
|
|
290
290
|
};
|
|
291
291
|
};
|
|
292
292
|
|
|
293
|
+
export type VaultConfig = {
|
|
294
|
+
enabled: boolean;
|
|
295
|
+
deposit_threshold: string; // 存入阈值
|
|
296
|
+
withdraw_threshold: string; // 提取阈值
|
|
297
|
+
};
|
|
298
|
+
|
|
293
299
|
export type PaymentSettings = {
|
|
294
300
|
payment_method_options: PaymentMethodOptions;
|
|
295
301
|
payment_method_types: string[];
|
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.15",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"dev": "blocklet dev --open",
|
|
6
6
|
"eject": "vite eject",
|
|
@@ -44,29 +44,29 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@abtnode/cron": "^1.16.39",
|
|
47
|
-
"@arcblock/did": "^1.19.
|
|
47
|
+
"@arcblock/did": "^1.19.15",
|
|
48
48
|
"@arcblock/did-auth-storage-nedb": "^1.7.1",
|
|
49
|
-
"@arcblock/did-connect": "^2.
|
|
50
|
-
"@arcblock/did-util": "^1.19.
|
|
51
|
-
"@arcblock/jwt": "^1.19.
|
|
52
|
-
"@arcblock/ux": "^2.
|
|
53
|
-
"@arcblock/validator": "^1.19.
|
|
49
|
+
"@arcblock/did-connect": "^2.12.12",
|
|
50
|
+
"@arcblock/did-util": "^1.19.15",
|
|
51
|
+
"@arcblock/jwt": "^1.19.15",
|
|
52
|
+
"@arcblock/ux": "^2.12.12",
|
|
53
|
+
"@arcblock/validator": "^1.19.15",
|
|
54
54
|
"@blocklet/js-sdk": "^1.16.39",
|
|
55
55
|
"@blocklet/logger": "^1.16.39",
|
|
56
|
-
"@blocklet/payment-react": "1.18.
|
|
56
|
+
"@blocklet/payment-react": "1.18.15",
|
|
57
57
|
"@blocklet/sdk": "^1.16.39",
|
|
58
|
-
"@blocklet/ui-react": "^2.
|
|
58
|
+
"@blocklet/ui-react": "^2.12.12",
|
|
59
59
|
"@blocklet/uploader": "^0.1.71",
|
|
60
60
|
"@blocklet/xss": "^0.1.27",
|
|
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.15",
|
|
66
|
+
"@ocap/client": "^1.19.15",
|
|
67
|
+
"@ocap/mcrypto": "^1.19.15",
|
|
68
|
+
"@ocap/util": "^1.19.15",
|
|
69
|
+
"@ocap/wallet": "^1.19.15",
|
|
70
70
|
"@stripe/react-stripe-js": "^2.7.3",
|
|
71
71
|
"@stripe/stripe-js": "^2.4.0",
|
|
72
72
|
"ahooks": "^3.8.0",
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"dayjs": "^1.11.12",
|
|
81
81
|
"debug": "^4.3.6",
|
|
82
82
|
"dotenv-flow": "^3.3.0",
|
|
83
|
-
"ethers": "^6.13.
|
|
83
|
+
"ethers": "^6.13.5",
|
|
84
84
|
"express": "^4.19.2",
|
|
85
85
|
"express-async-errors": "^3.1.1",
|
|
86
86
|
"express-history-api-fallback": "^2.2.1",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"devDependencies": {
|
|
122
122
|
"@abtnode/types": "^1.16.39",
|
|
123
123
|
"@arcblock/eslint-config-ts": "^0.3.3",
|
|
124
|
-
"@blocklet/payment-types": "1.18.
|
|
124
|
+
"@blocklet/payment-types": "1.18.15",
|
|
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.23",
|
|
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": "fd58f00bb5d9c625439c03577d9b5f33676823e2"
|
|
171
171
|
}
|