@arcblock/payment-service 1.29.3-beta-frontend-serve.4 → 1.29.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/dist/index.js CHANGED
@@ -1026,36 +1026,6 @@ var init_serve_static_arc = __esm({
1026
1026
  }
1027
1027
  });
1028
1028
 
1029
- // ../../blocklets/core/api/src/libs/logger.ts
1030
- function resolveLogger() {
1031
- if (resolved) return resolved;
1032
- try {
1033
- const createLogger = require("@blocklet/logger");
1034
- resolved = createLogger("app");
1035
- } catch {
1036
- resolved = {
1037
- debug: (...args) => console.debug(...args),
1038
- info: (...args) => console.info(...args),
1039
- error: (...args) => console.error(...args),
1040
- warn: (...args) => console.warn(...args)
1041
- };
1042
- }
1043
- return resolved;
1044
- }
1045
- var resolved, logger, logger_default;
1046
- var init_logger = __esm({
1047
- "../../blocklets/core/api/src/libs/logger.ts"() {
1048
- "use strict";
1049
- logger = {
1050
- debug: (...args) => resolveLogger().debug(...args),
1051
- info: (...args) => resolveLogger().info(...args),
1052
- error: (...args) => resolveLogger().error(...args),
1053
- warn: (...args) => resolveLogger().warn(...args)
1054
- };
1055
- logger_default = logger;
1056
- }
1057
- });
1058
-
1059
1029
  // ../../blocklets/core/api/src/libs/context.ts
1060
1030
  var context_exports = {};
1061
1031
  __export(context_exports, {
@@ -1184,6 +1154,231 @@ var init_context = __esm({
1184
1154
  }
1185
1155
  });
1186
1156
 
1157
+ // ../../blocklets/core/api/src/libs/logger.ts
1158
+ function resolveLogger() {
1159
+ if (resolved) return resolved;
1160
+ try {
1161
+ const createLogger = require("@blocklet/logger");
1162
+ resolved = createLogger("app");
1163
+ } catch {
1164
+ resolved = {
1165
+ debug: (...args) => console.debug(...args),
1166
+ info: (...args) => console.info(...args),
1167
+ error: (...args) => console.error(...args),
1168
+ warn: (...args) => console.warn(...args)
1169
+ };
1170
+ }
1171
+ return resolved;
1172
+ }
1173
+ var resolved, logger, logger_default;
1174
+ var init_logger = __esm({
1175
+ "../../blocklets/core/api/src/libs/logger.ts"() {
1176
+ "use strict";
1177
+ logger = {
1178
+ debug: (...args) => resolveLogger().debug(...args),
1179
+ info: (...args) => resolveLogger().info(...args),
1180
+ error: (...args) => resolveLogger().error(...args),
1181
+ warn: (...args) => resolveLogger().warn(...args)
1182
+ };
1183
+ logger_default = logger;
1184
+ }
1185
+ });
1186
+
1187
+ // ../../blocklets/core/api/src/libs/did-connect/tenant-identity.ts
1188
+ var tenant_identity_exports = {};
1189
+ __export(tenant_identity_exports, {
1190
+ clearTenantIdentityCache: () => clearTenantIdentityCache,
1191
+ createEmbeddedIdentityServices: () => createEmbeddedIdentityServices,
1192
+ getCachedTenantIdentity: () => getCachedTenantIdentity,
1193
+ hasDynamicIdentity: () => hasDynamicIdentity,
1194
+ resolveTenantIdentity: () => resolveTenantIdentity,
1195
+ warmTenantIdentity: () => warmTenantIdentity
1196
+ });
1197
+ function cacheIdentity(instanceDid, value) {
1198
+ identityCache.set(instanceDid, { value, expiry: Date.now() + IDENTITY_TTL_MS });
1199
+ if (identityCache.size > IDENTITY_CACHE_MAX) {
1200
+ const oldest = identityCache.keys().next().value;
1201
+ if (oldest !== void 0) identityCache.delete(oldest);
1202
+ }
1203
+ }
1204
+ function clearTenantIdentityCache(instanceDid) {
1205
+ if (instanceDid) identityCache.delete(instanceDid);
1206
+ else identityCache.clear();
1207
+ }
1208
+ function hasDynamicIdentity() {
1209
+ return typeof getIdentityDriver().getInstanceAppIdentity === "function";
1210
+ }
1211
+ async function resolveTenantIdentity(instanceDidArg) {
1212
+ const instanceDid = instanceDidArg ?? getInstanceDid();
1213
+ const cached = identityCache.get(instanceDid);
1214
+ if (cached && cached.expiry > Date.now()) return cached.value;
1215
+ const driver = getIdentityDriver();
1216
+ if (typeof driver.getInstanceAppIdentity !== "function") {
1217
+ throw new Error(
1218
+ "resolveTenantIdentity: the active IdentityDriver does not implement getInstanceAppIdentity \u2014 a non-blocklet-server DID-Connect runtime requires an AUTH_SERVICE-backed identity driver"
1219
+ );
1220
+ }
1221
+ const identity = await driver.getInstanceAppIdentity(instanceDid);
1222
+ if (!identity || !identity.appSk) {
1223
+ throw new Error(`resolveTenantIdentity: no app signing key for instance "${instanceDid}" (fail-closed)`);
1224
+ }
1225
+ if (identity.appSk.length < 66) {
1226
+ throw new Error(
1227
+ `resolveTenantIdentity: appSk for instance "${instanceDid}" is too short (${identity.appSk.length} chars) to derive a wallet (fail-closed)`
1228
+ );
1229
+ }
1230
+ const wallet2 = (0, import_wallet.fromSecretKey)(identity.appSk, walletType);
1231
+ const ethWallet2 = (0, import_wallet.fromSecretKey)(identity.appSk.slice(0, 66), ethWalletType);
1232
+ const permanentWallet = identity.appPsk ? (0, import_wallet.fromSecretKey)(identity.appPsk, walletType) : wallet2;
1233
+ const value = {
1234
+ instanceDid,
1235
+ wallet: wallet2,
1236
+ ethWallet: ethWallet2,
1237
+ permanentWallet,
1238
+ appInfo: identity.appInfo ?? {}
1239
+ };
1240
+ cacheIdentity(instanceDid, value);
1241
+ return value;
1242
+ }
1243
+ function getCachedTenantIdentity(instanceDidArg) {
1244
+ const instanceDid = instanceDidArg ?? getInstanceDid();
1245
+ const cached = identityCache.get(instanceDid);
1246
+ if (!cached || cached.expiry <= Date.now()) {
1247
+ throw new Error(
1248
+ `tenant identity for "${instanceDid}" is not resolved (fail-closed) \u2014 warmTenantIdentity must run in the request/job scope before any wallet access`
1249
+ );
1250
+ }
1251
+ return cached.value;
1252
+ }
1253
+ async function warmTenantIdentity(instanceDidArg) {
1254
+ if (!hasDynamicIdentity()) return;
1255
+ try {
1256
+ await resolveTenantIdentity(instanceDidArg);
1257
+ } catch (err) {
1258
+ logger_default.warn("[tenant-identity] warm failed \u2014 wallet access will fail-closed", {
1259
+ error: err instanceof Error ? err.message : String(err)
1260
+ });
1261
+ }
1262
+ }
1263
+ function createEmbeddedIdentityServices() {
1264
+ return {
1265
+ getBusinessWallet(chain) {
1266
+ const identity = getCachedTenantIdentity();
1267
+ return chain === "ethereum" ? identity.ethWallet : identity.wallet;
1268
+ },
1269
+ directory() {
1270
+ return EMBEDDED_DIRECTORY;
1271
+ }
1272
+ };
1273
+ }
1274
+ var Mcrypto, import_wallet, walletType, ethWalletType, IDENTITY_TTL_MS, IDENTITY_CACHE_MAX, identityCache, EMBEDDED_DIRECTORY;
1275
+ var init_tenant_identity = __esm({
1276
+ "../../blocklets/core/api/src/libs/did-connect/tenant-identity.ts"() {
1277
+ "use strict";
1278
+ Mcrypto = __toESM(require("@ocap/mcrypto"));
1279
+ import_wallet = require("@ocap/wallet");
1280
+ init_context();
1281
+ init_drivers();
1282
+ init_logger();
1283
+ walletType = {
1284
+ role: Mcrypto.types.RoleType.ROLE_APPLICATION,
1285
+ pk: Mcrypto.types.KeyType.ED25519,
1286
+ hash: Mcrypto.types.HashType.SHA3
1287
+ };
1288
+ ethWalletType = (0, import_wallet.WalletType)("ethereum");
1289
+ IDENTITY_TTL_MS = 5 * 60 * 1e3;
1290
+ IDENTITY_CACHE_MAX = 512;
1291
+ identityCache = /* @__PURE__ */ new Map();
1292
+ EMBEDDED_DIRECTORY = {
1293
+ getUser(did) {
1294
+ if (!did) return { user: null };
1295
+ return {
1296
+ user: { did, fullName: did, email: "", phone: "", remark: "", connectedAccounts: [{ provider: "wallet", did }] }
1297
+ };
1298
+ },
1299
+ getUsers() {
1300
+ return { users: [] };
1301
+ },
1302
+ getVault() {
1303
+ return null;
1304
+ },
1305
+ getBlocklet() {
1306
+ return { id: "", site: { id: "" } };
1307
+ }
1308
+ };
1309
+ }
1310
+ });
1311
+
1312
+ // ../../blocklets/core/api/src/libs/did-connect/runtime-did-connect-js.ts
1313
+ function createDidConnectJsRuntime(opts) {
1314
+ const fallbackAppInfo = { ...DEFAULT_APP_INFO, ...opts.defaultAppInfo ?? {} };
1315
+ return {
1316
+ tokenStorage: opts.tokenStorage,
1317
+ createAuthenticator() {
1318
+ const { WalletAuthenticator } = require("@arcblock/did-connect-js");
1319
+ const config4 = {
1320
+ // Function-valued, per-tenant: resolve the signing wallet from the host
1321
+ // IdentityDriver.getInstanceAppIdentity each time the authenticator signs.
1322
+ // `.toJSON()` matches the standalone worker (the SDK reconstructs the full
1323
+ // wallet — incl. sk — via fromJSON before signing).
1324
+ wallet: async () => {
1325
+ const { wallet: wallet2 } = await resolveTenantIdentity();
1326
+ return wallet2.toJSON();
1327
+ },
1328
+ appInfo: async ({ baseUrl } = {}) => {
1329
+ const { appInfo } = await resolveTenantIdentity();
1330
+ return {
1331
+ name: appInfo.name || fallbackAppInfo.name,
1332
+ description: appInfo.description || fallbackAppInfo.description,
1333
+ icon: appInfo.icon || fallbackAppInfo.icon,
1334
+ link: appInfo.link || baseUrl
1335
+ };
1336
+ },
1337
+ timeout: opts.timeout ?? 3e4
1338
+ };
1339
+ if (opts.chainInfo) config4.chainInfo = opts.chainInfo;
1340
+ if (opts.txEncoder) config4.txEncoder = opts.txEncoder;
1341
+ return new WalletAuthenticator(config4);
1342
+ },
1343
+ createHandlers({ authenticator: authenticator2, tokenStorage }) {
1344
+ const { WalletHandlers } = require("@arcblock/did-connect-js");
1345
+ return new WalletHandlers({ authenticator: authenticator2, tokenStorage });
1346
+ }
1347
+ };
1348
+ }
1349
+ var DEFAULT_APP_INFO;
1350
+ var init_runtime_did_connect_js = __esm({
1351
+ "../../blocklets/core/api/src/libs/did-connect/runtime-did-connect-js.ts"() {
1352
+ "use strict";
1353
+ init_tenant_identity();
1354
+ DEFAULT_APP_INFO = {
1355
+ name: "Payment Kit",
1356
+ description: "Payment Kit",
1357
+ icon: "https://www.arcblock.io/favicon.ico"
1358
+ };
1359
+ }
1360
+ });
1361
+
1362
+ // ../../blocklets/core/api/src/host-node/did-connect-runtime-node.ts
1363
+ var did_connect_runtime_node_exports = {};
1364
+ __export(did_connect_runtime_node_exports, {
1365
+ createNodeDidConnectRuntime: () => createNodeDidConnectRuntime
1366
+ });
1367
+ function createNodeDidConnectRuntime(opts) {
1368
+ const { createTxEncoder } = require("@ocap/client/encode");
1369
+ return createDidConnectJsRuntime({
1370
+ tokenStorage: opts?.tokenStorage,
1371
+ txEncoder: createTxEncoder(),
1372
+ timeout: opts?.timeout ?? 3e4
1373
+ });
1374
+ }
1375
+ var init_did_connect_runtime_node = __esm({
1376
+ "../../blocklets/core/api/src/host-node/did-connect-runtime-node.ts"() {
1377
+ "use strict";
1378
+ init_runtime_did_connect_js();
1379
+ }
1380
+ });
1381
+
1187
1382
  // ../../blocklets/core/api/src/middlewares/hono/xss.ts
1188
1383
  function xss() {
1189
1384
  return async (c, next) => {
@@ -1398,89 +1593,6 @@ var init_dayjs = __esm({
1398
1593
  }
1399
1594
  });
1400
1595
 
1401
- // ../../blocklets/core/api/src/libs/did-connect/tenant-identity.ts
1402
- var tenant_identity_exports = {};
1403
- __export(tenant_identity_exports, {
1404
- clearTenantIdentityCache: () => clearTenantIdentityCache,
1405
- getCachedTenantIdentity: () => getCachedTenantIdentity,
1406
- hasDynamicIdentity: () => hasDynamicIdentity,
1407
- resolveTenantIdentity: () => resolveTenantIdentity,
1408
- warmTenantIdentity: () => warmTenantIdentity
1409
- });
1410
- function clearTenantIdentityCache(instanceDid) {
1411
- if (instanceDid) identityCache.delete(instanceDid);
1412
- else identityCache.clear();
1413
- }
1414
- function hasDynamicIdentity() {
1415
- return typeof getIdentityDriver().getInstanceAppIdentity === "function";
1416
- }
1417
- async function resolveTenantIdentity(instanceDidArg) {
1418
- const instanceDid = instanceDidArg ?? getInstanceDid();
1419
- const cached = identityCache.get(instanceDid);
1420
- if (cached && cached.expiry > Date.now()) return cached.value;
1421
- const driver = getIdentityDriver();
1422
- if (typeof driver.getInstanceAppIdentity !== "function") {
1423
- throw new Error(
1424
- "resolveTenantIdentity: the active IdentityDriver does not implement getInstanceAppIdentity \u2014 a non-blocklet-server DID-Connect runtime requires an AUTH_SERVICE-backed identity driver"
1425
- );
1426
- }
1427
- const identity = await driver.getInstanceAppIdentity(instanceDid);
1428
- if (!identity || !identity.appSk) {
1429
- throw new Error(`resolveTenantIdentity: no app signing key for instance "${instanceDid}" (fail-closed)`);
1430
- }
1431
- const wallet3 = (0, import_wallet.fromSecretKey)(identity.appSk, walletType);
1432
- const ethWallet2 = (0, import_wallet.fromSecretKey)(identity.appSk.slice(0, 66), ethWalletType);
1433
- const permanentWallet = identity.appPsk ? (0, import_wallet.fromSecretKey)(identity.appPsk, walletType) : wallet3;
1434
- const value = {
1435
- instanceDid,
1436
- wallet: wallet3,
1437
- ethWallet: ethWallet2,
1438
- permanentWallet,
1439
- appInfo: identity.appInfo ?? {}
1440
- };
1441
- identityCache.set(instanceDid, { value, expiry: Date.now() + IDENTITY_TTL_MS });
1442
- return value;
1443
- }
1444
- function getCachedTenantIdentity(instanceDidArg) {
1445
- const instanceDid = instanceDidArg ?? getInstanceDid();
1446
- const cached = identityCache.get(instanceDid);
1447
- if (!cached || cached.expiry <= Date.now()) {
1448
- throw new Error(
1449
- `tenant identity for "${instanceDid}" is not resolved (fail-closed) \u2014 warmTenantIdentity must run in the request/job scope before any wallet access`
1450
- );
1451
- }
1452
- return cached.value;
1453
- }
1454
- async function warmTenantIdentity(instanceDidArg) {
1455
- if (!hasDynamicIdentity()) return;
1456
- try {
1457
- await resolveTenantIdentity(instanceDidArg);
1458
- } catch (err) {
1459
- logger_default.warn("[tenant-identity] warm failed \u2014 wallet access will fail-closed", {
1460
- error: err?.message || String(err)
1461
- });
1462
- }
1463
- }
1464
- var Mcrypto, import_wallet, walletType, ethWalletType, IDENTITY_TTL_MS, identityCache;
1465
- var init_tenant_identity = __esm({
1466
- "../../blocklets/core/api/src/libs/did-connect/tenant-identity.ts"() {
1467
- "use strict";
1468
- Mcrypto = __toESM(require("@ocap/mcrypto"));
1469
- import_wallet = require("@ocap/wallet");
1470
- init_context();
1471
- init_drivers();
1472
- init_logger();
1473
- walletType = {
1474
- role: Mcrypto.types.RoleType.ROLE_APPLICATION,
1475
- pk: Mcrypto.types.KeyType.ED25519,
1476
- hash: Mcrypto.types.HashType.SHA3
1477
- };
1478
- ethWalletType = (0, import_wallet.WalletType)("ethereum");
1479
- IDENTITY_TTL_MS = 5 * 60 * 1e3;
1480
- identityCache = /* @__PURE__ */ new Map();
1481
- }
1482
- });
1483
-
1484
1596
  // ../../blocklets/core/api/src/libs/auth.ts
1485
1597
  var auth_exports = {};
1486
1598
  __export(auth_exports, {
@@ -1534,10 +1646,9 @@ function makeWallet(...args) {
1534
1646
  return getWallet(...args);
1535
1647
  }
1536
1648
  function activeBusinessWallet(chain) {
1537
- const { hasDynamicIdentity: hasDynamicIdentity2, getCachedTenantIdentity: getCachedTenantIdentity2 } = (init_tenant_identity(), __toCommonJS(tenant_identity_exports));
1538
- if (hasDynamicIdentity2()) {
1539
- const identity = getCachedTenantIdentity2();
1540
- return chain === "ethereum" ? identity.ethWallet : identity.wallet;
1649
+ const driver = getIdentityDriver();
1650
+ if (typeof driver.getBusinessWallet === "function") {
1651
+ return driver.getBusinessWallet(chain);
1541
1652
  }
1542
1653
  return chain === "ethereum" ? envEthWallet : envWallet;
1543
1654
  }
@@ -1616,6 +1727,7 @@ var init_auth = __esm({
1616
1727
  import_os = __toESM(require("os"));
1617
1728
  import_path2 = __toESM(require("path"));
1618
1729
  init_env();
1730
+ init_drivers();
1619
1731
  init_logger();
1620
1732
  notificationPatched = false;
1621
1733
  envWallet = lazyProxy(() => makeWallet());
@@ -1630,6 +1742,10 @@ var init_auth = __esm({
1630
1742
  return activeRuntime().createHandlers({ authenticator, tokenStorage });
1631
1743
  });
1632
1744
  blocklet = lazyProxy(() => {
1745
+ const driver = getIdentityDriver();
1746
+ if (typeof driver.directory === "function") {
1747
+ return driver.directory();
1748
+ }
1633
1749
  ensureNotificationPatch();
1634
1750
  const { BlockletService: BlockletService2 } = require("@blocklet/sdk/service/auth");
1635
1751
  return new BlockletService2();
@@ -6528,7 +6644,7 @@ function authenticate({
6528
6644
  if (embed && embedToken && embedId) {
6529
6645
  let embedOk = false;
6530
6646
  try {
6531
- const w = wallet2();
6647
+ const w = wallet;
6532
6648
  const verified = await w.verify(embedId, embedToken);
6533
6649
  if (!verified) {
6534
6650
  return c.json({ error: `Invalid signature for embed: ${embedId}` }, 401);
@@ -6595,7 +6711,7 @@ function authenticate({
6595
6711
  return c.json({ error: "Not authorized to perform this action" }, 403);
6596
6712
  };
6597
6713
  }
6598
- var import_verify_sign, import_verify_session, wallet2;
6714
+ var import_verify_sign, import_verify_session;
6599
6715
  var init_security = __esm({
6600
6716
  "../../blocklets/core/api/src/middlewares/hono/security.ts"() {
6601
6717
  "use strict";
@@ -6604,7 +6720,6 @@ var init_security = __esm({
6604
6720
  init_env();
6605
6721
  init_auth();
6606
6722
  init_customer();
6607
- wallet2 = () => wallet;
6608
6723
  }
6609
6724
  });
6610
6725
 
@@ -15072,9 +15187,9 @@ var init_remote_signer = __esm({
15072
15187
  "use strict";
15073
15188
  import_ethers = require("ethers");
15074
15189
  RemoteSigner = class _RemoteSigner extends import_ethers.ethers.AbstractSigner {
15075
- constructor(wallet3, provider) {
15190
+ constructor(wallet2, provider) {
15076
15191
  super(provider);
15077
- this.wallet = wallet3;
15192
+ this.wallet = wallet2;
15078
15193
  }
15079
15194
  /**
15080
15195
  * Returns the address of the signer
@@ -29246,7 +29361,10 @@ function injectJobTenant(job) {
29246
29361
  return { ...job, instance_did: context.getInstanceDid() };
29247
29362
  }
29248
29363
  async function warmThenRun(onJob, job) {
29249
- const { warmTenantIdentity: warmTenantIdentity2 } = (init_tenant_identity(), __toCommonJS(tenant_identity_exports));
29364
+ const { warmTenantIdentity: warmTenantIdentity2 } = (
29365
+ // eslint-disable-next-line global-require
29366
+ (init_tenant_identity(), __toCommonJS(tenant_identity_exports))
29367
+ );
29250
29368
  await warmTenantIdentity2();
29251
29369
  return onJob(job);
29252
29370
  }
@@ -39962,6 +40080,7 @@ var init_payment2 = __esm({
39962
40080
  init_token();
39963
40081
  init_audit();
39964
40082
  init_auth();
40083
+ init_context();
39965
40084
  init_dayjs();
39966
40085
  init_error();
39967
40086
  init_event2();
@@ -40905,16 +41024,23 @@ var init_payment2 = __esm({
40905
41024
  capture_method: "automatic"
40906
41025
  }
40907
41026
  });
40908
- payments.forEach(async (x) => {
40909
- const supportAutoCharge = await PaymentMethod.supportAutoCharge(x.payment_method_id);
40910
- if (supportAutoCharge === false) {
40911
- return;
40912
- }
40913
- const exist = await paymentQueue.get(x.id);
40914
- if (!exist) {
40915
- paymentQueue.push({ id: x.id, job: { paymentIntentId: x.id } });
41027
+ for (const x of payments) {
41028
+ const dispatch = async () => {
41029
+ const supportAutoCharge = await PaymentMethod.supportAutoCharge(x.payment_method_id);
41030
+ if (supportAutoCharge === false) {
41031
+ return;
41032
+ }
41033
+ const exist = await paymentQueue.get(x.id);
41034
+ if (!exist) {
41035
+ paymentQueue.push({ id: x.id, job: { paymentIntentId: x.id } });
41036
+ }
41037
+ };
41038
+ try {
41039
+ await (x.instance_did ? withTenant(x.instance_did, dispatch) : dispatch());
41040
+ } catch (error) {
41041
+ logger_default.error("startPaymentQueue: re-queue failed", { id: x.id, error });
40916
41042
  }
40917
- });
41043
+ }
40918
41044
  };
40919
41045
  paymentQueue.on("failed", ({ id, job, error }) => {
40920
41046
  logger_default.error("Payment job failed", { id, job, error });
@@ -72444,6 +72570,7 @@ var init_refund3 = __esm({
72444
72570
  init_subscription2();
72445
72571
  init_token();
72446
72572
  init_auth();
72573
+ init_context();
72447
72574
  init_error();
72448
72575
  init_event2();
72449
72576
  init_logger();
@@ -72821,13 +72948,20 @@ var init_refund3 = __esm({
72821
72948
  });
72822
72949
  startRefundQueue = async () => {
72823
72950
  const refunds = await systemFindAll(Refund, { where: { status: ["pending"] } });
72824
- refunds.forEach(async (x) => {
72825
- const exist = await refundQueue.get(x.id);
72826
- if (!exist) {
72827
- refundQueue.push({ id: x.id, job: { refundId: x.id } });
72828
- logger_default.info("Re-queued pending refund", { id: x.id });
72951
+ for (const x of refunds) {
72952
+ const dispatch = async () => {
72953
+ const exist = await refundQueue.get(x.id);
72954
+ if (!exist) {
72955
+ refundQueue.push({ id: x.id, job: { refundId: x.id } });
72956
+ logger_default.info("Re-queued pending refund", { id: x.id });
72957
+ }
72958
+ };
72959
+ try {
72960
+ await (x.instance_did ? withTenant(x.instance_did, dispatch) : dispatch());
72961
+ } catch (error) {
72962
+ logger_default.error("startRefundQueue: re-queue failed", { id: x.id, error });
72829
72963
  }
72830
- });
72964
+ }
72831
72965
  };
72832
72966
  refundQueue.on("failed", ({ id, job, error }) => {
72833
72967
  logger_default.error("refund job failed", { id, job, error });
@@ -74779,6 +74913,7 @@ var init_payout3 = __esm({
74779
74913
  init_payment();
74780
74914
  init_queue2();
74781
74915
  init_auth();
74916
+ init_context();
74782
74917
  init_token();
74783
74918
  init_payment_method();
74784
74919
  init_payment_currency();
@@ -74825,23 +74960,30 @@ var init_payout3 = __esm({
74825
74960
  status: "pending"
74826
74961
  }
74827
74962
  });
74828
- payouts.forEach(async (payout) => {
74829
- const exist = await payoutQueue.get(payout.id);
74830
- if (!exist) {
74831
- if (payout.next_attempt && payout.next_attempt > dayjs_default().unix()) {
74832
- payoutQueue.push({
74833
- id: payout.id,
74834
- job: { payoutId: payout.id, retryOnError: true },
74835
- runAt: payout.next_attempt
74836
- });
74837
- } else {
74838
- payoutQueue.push({
74839
- id: payout.id,
74840
- job: { payoutId: payout.id, retryOnError: true }
74841
- });
74963
+ for (const payout of payouts) {
74964
+ const dispatch = async () => {
74965
+ const exist = await payoutQueue.get(payout.id);
74966
+ if (!exist) {
74967
+ if (payout.next_attempt && payout.next_attempt > dayjs_default().unix()) {
74968
+ payoutQueue.push({
74969
+ id: payout.id,
74970
+ job: { payoutId: payout.id, retryOnError: true },
74971
+ runAt: payout.next_attempt
74972
+ });
74973
+ } else {
74974
+ payoutQueue.push({
74975
+ id: payout.id,
74976
+ job: { payoutId: payout.id, retryOnError: true }
74977
+ });
74978
+ }
74842
74979
  }
74980
+ };
74981
+ try {
74982
+ await (payout.instance_did ? withTenant(payout.instance_did, dispatch) : dispatch());
74983
+ } catch (error) {
74984
+ logger_default.error("startPayoutQueue: re-queue failed", { id: payout.id, error });
74843
74985
  }
74844
- });
74986
+ }
74845
74987
  };
74846
74988
  events.on("payout.created", async (payout) => {
74847
74989
  if (payout.status === "pending") {
@@ -76183,16 +76325,23 @@ async function startCheckoutSessionQueue() {
76183
76325
  expires_at: { [import_sequelize113.Op.lte]: now }
76184
76326
  }
76185
76327
  });
76186
- checkoutSessions.forEach(async (checkoutSession) => {
76187
- const exist = await checkoutSessionQueue.get(checkoutSession.id);
76188
- if (!exist) {
76189
- checkoutSessionQueue.push({
76190
- id: checkoutSession.id,
76191
- job: { id: checkoutSession.id, action: "expire" },
76192
- runAt: checkoutSession.expires_at
76193
- });
76328
+ for (const checkoutSession of checkoutSessions) {
76329
+ const dispatch = async () => {
76330
+ const exist = await checkoutSessionQueue.get(checkoutSession.id);
76331
+ if (!exist) {
76332
+ checkoutSessionQueue.push({
76333
+ id: checkoutSession.id,
76334
+ job: { id: checkoutSession.id, action: "expire" },
76335
+ runAt: checkoutSession.expires_at
76336
+ });
76337
+ }
76338
+ };
76339
+ try {
76340
+ await (checkoutSession.instance_did ? withTenant(checkoutSession.instance_did, dispatch) : dispatch());
76341
+ } catch (error) {
76342
+ logger_default.error("startCheckoutSessionQueue: re-queue failed", { id: checkoutSession.id, error });
76194
76343
  }
76195
- });
76344
+ }
76196
76345
  }
76197
76346
  var import_sequelize113, checkoutSessionQueue;
76198
76347
  var init_checkout_session2 = __esm({
@@ -76203,6 +76352,7 @@ var init_checkout_session2 = __esm({
76203
76352
  init_nft();
76204
76353
  init_passport();
76205
76354
  init_shared();
76355
+ init_context();
76206
76356
  init_dayjs();
76207
76357
  init_event2();
76208
76358
  init_logger();
@@ -76974,7 +77124,9 @@ function createFetchHandler(app42) {
76974
77124
  const method = request.method.toUpperCase();
76975
77125
  const hasBody = method !== "GET" && method !== "HEAD";
76976
77126
  const body = hasBody ? await request.arrayBuffer() : void 0;
76977
- return app42.fetch(new Request(url.toString(), { method, headers: request.headers, body }));
77127
+ const headers = new Headers(request.headers);
77128
+ if (!headers.has("x-path-prefix")) headers.set("x-path-prefix", basePath);
77129
+ return app42.fetch(new Request(url.toString(), { method, headers, body }));
76978
77130
  }
76979
77131
  return app42.fetch(request);
76980
77132
  });
@@ -77095,7 +77247,9 @@ async function bootstrapTenant(instanceDid) {
77095
77247
  const { ensureWebhookRegistered: ensureWebhookRegistered2 } = (init_setup(), __toCommonJS(setup_exports));
77096
77248
  const { ensureCreateOverdraftProtectionPrices: ensureCreateOverdraftProtectionPrices2 } = (init_overdraft_protection(), __toCommonJS(overdraft_protection_exports));
77097
77249
  const { scheduleHealthChecks: scheduleHealthChecks2 } = (init_exchange_rate_health(), __toCommonJS(exchange_rate_health_exports));
77250
+ const { warmTenantIdentity: warmTenantIdentity2 } = (init_tenant_identity(), __toCommonJS(tenant_identity_exports));
77098
77251
  await context.withTenant(instanceDid, async () => {
77252
+ await warmTenantIdentity2(instanceDid);
77099
77253
  await Promise.resolve(syncCurrencyLogo2()).catch(
77100
77254
  (error) => logger_default.error("bootstrapTenant: syncCurrencyLogo failed", { instanceDid, error })
77101
77255
  );
@@ -77407,10 +77561,12 @@ __export(src_exports, {
77407
77561
  createD1LocksDriver: () => createD1LocksDriver2,
77408
77562
  createDefaultIdentityDriver: () => createDefaultIdentityDriver2,
77409
77563
  createDefaultSecretsDriver: () => createDefaultSecretsDriver2,
77564
+ createEmbeddedIdentityServices: () => createEmbeddedIdentityServices2,
77410
77565
  createEmbeddedPaymentService: () => createEmbeddedPaymentService2,
77411
77566
  createKeyringSecretsDriver: () => createKeyringSecretsDriver2,
77412
77567
  createMemoryLocksDriver: () => createMemoryLocksDriver2,
77413
77568
  createNodeDbDriver: () => createNodeDbDriver2,
77569
+ createNodeDidConnectRuntime: () => createNodeDidConnectRuntime2,
77414
77570
  createNodeStaticHandler: () => createNodeStaticHandler2,
77415
77571
  getCronDriver: () => getCronDriver2,
77416
77572
  getIdentityDriver: () => getIdentityDriver2,
@@ -77511,6 +77667,14 @@ function createNodeStaticHandler2(webRoot) {
77511
77667
  const mod = (init_serve_static_arc(), __toCommonJS(serve_static_arc_exports));
77512
77668
  return mod.createNodeStaticHandler(webRoot);
77513
77669
  }
77670
+ function createNodeDidConnectRuntime2(opts) {
77671
+ const mod = (init_did_connect_runtime_node(), __toCommonJS(did_connect_runtime_node_exports));
77672
+ return mod.createNodeDidConnectRuntime(opts);
77673
+ }
77674
+ function createEmbeddedIdentityServices2() {
77675
+ const mod = (init_tenant_identity(), __toCommonJS(tenant_identity_exports));
77676
+ return mod.createEmbeddedIdentityServices();
77677
+ }
77514
77678
  function createEmbeddedPaymentService2(slots) {
77515
77679
  const core = (init_service2(), __toCommonJS(service_exports));
77516
77680
  return core.createEmbeddedPaymentService(slots);
@@ -77525,10 +77689,12 @@ function createEmbeddedPaymentService2(slots) {
77525
77689
  createD1LocksDriver,
77526
77690
  createDefaultIdentityDriver,
77527
77691
  createDefaultSecretsDriver,
77692
+ createEmbeddedIdentityServices,
77528
77693
  createEmbeddedPaymentService,
77529
77694
  createKeyringSecretsDriver,
77530
77695
  createMemoryLocksDriver,
77531
77696
  createNodeDbDriver,
77697
+ createNodeDidConnectRuntime,
77532
77698
  createNodeStaticHandler,
77533
77699
  getCronDriver,
77534
77700
  getIdentityDriver,