@astrasyncai/verification-gateway 1.0.0 → 2.0.0

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.
Files changed (101) hide show
  1. package/dist/adapter-interface/interface.d.mts +71 -0
  2. package/dist/adapter-interface/interface.d.ts +71 -0
  3. package/dist/adapter-interface/interface.js +36 -0
  4. package/dist/adapter-interface/interface.js.map +1 -0
  5. package/dist/adapter-interface/interface.mjs +10 -0
  6. package/dist/adapter-interface/interface.mjs.map +1 -0
  7. package/dist/adapter-interface/purpose-mapping.d.mts +28 -0
  8. package/dist/adapter-interface/purpose-mapping.d.ts +28 -0
  9. package/dist/adapter-interface/purpose-mapping.js +117 -0
  10. package/dist/adapter-interface/purpose-mapping.js.map +1 -0
  11. package/dist/adapter-interface/purpose-mapping.mjs +89 -0
  12. package/dist/adapter-interface/purpose-mapping.mjs.map +1 -0
  13. package/dist/adapters/express.d.mts +2 -2
  14. package/dist/adapters/express.d.ts +2 -2
  15. package/dist/adapters/express.js +46 -9
  16. package/dist/adapters/express.js.map +1 -1
  17. package/dist/adapters/express.mjs +46 -9
  18. package/dist/adapters/express.mjs.map +1 -1
  19. package/dist/adapters/nextjs.d.mts +2 -2
  20. package/dist/adapters/nextjs.d.ts +2 -2
  21. package/dist/adapters/nextjs.js +19 -9
  22. package/dist/adapters/nextjs.js.map +1 -1
  23. package/dist/adapters/nextjs.mjs +19 -9
  24. package/dist/adapters/nextjs.mjs.map +1 -1
  25. package/dist/adapters/sdk.d.mts +2 -2
  26. package/dist/adapters/sdk.d.ts +2 -2
  27. package/dist/adapters/sdk.js +20 -4
  28. package/dist/adapters/sdk.js.map +1 -1
  29. package/dist/adapters/sdk.mjs +20 -4
  30. package/dist/adapters/sdk.mjs.map +1 -1
  31. package/dist/agent/index.d.mts +2 -0
  32. package/dist/agent/index.d.ts +2 -0
  33. package/dist/agent/index.js +354 -0
  34. package/dist/agent/index.js.map +1 -0
  35. package/dist/agent/index.mjs +323 -0
  36. package/dist/agent/index.mjs.map +1 -0
  37. package/dist/browser/browser-adapter.d.mts +106 -0
  38. package/dist/browser/browser-adapter.d.ts +106 -0
  39. package/dist/browser/browser-adapter.js +286 -0
  40. package/dist/browser/browser-adapter.js.map +1 -0
  41. package/dist/browser/browser-adapter.mjs +259 -0
  42. package/dist/browser/browser-adapter.mjs.map +1 -0
  43. package/dist/cli/index.d.mts +241 -0
  44. package/dist/cli/index.d.ts +241 -0
  45. package/dist/cli/index.js +3734 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/cli/index.mjs +3688 -0
  48. package/dist/cli/index.mjs.map +1 -0
  49. package/dist/cursor/cursor-adapter.d.mts +92 -0
  50. package/dist/cursor/cursor-adapter.d.ts +92 -0
  51. package/dist/cursor/cursor-adapter.js +273 -0
  52. package/dist/cursor/cursor-adapter.js.map +1 -0
  53. package/dist/cursor/cursor-adapter.mjs +246 -0
  54. package/dist/cursor/cursor-adapter.mjs.map +1 -0
  55. package/dist/{express-DUDYpvNZ.d.mts → express-Cp4eg77F.d.mts} +1 -1
  56. package/dist/{express-BhD3mWsL.d.ts → express-DIEyq1Tz.d.ts} +1 -1
  57. package/dist/gateway/gateway.d.mts +70 -0
  58. package/dist/gateway/gateway.d.ts +70 -0
  59. package/dist/gateway/gateway.js +3726 -0
  60. package/dist/gateway/gateway.js.map +1 -0
  61. package/dist/gateway/gateway.mjs +3706 -0
  62. package/dist/gateway/gateway.mjs.map +1 -0
  63. package/dist/git-trigger/git-hooks.d.mts +69 -0
  64. package/dist/git-trigger/git-hooks.d.ts +69 -0
  65. package/dist/git-trigger/git-hooks.js +244 -0
  66. package/dist/git-trigger/git-hooks.js.map +1 -0
  67. package/dist/git-trigger/git-hooks.mjs +221 -0
  68. package/dist/git-trigger/git-hooks.mjs.map +1 -0
  69. package/dist/index-BhTbGU-o.d.mts +206 -0
  70. package/dist/index-Bhfxq9xI.d.ts +206 -0
  71. package/dist/index-CNkmHmpi.d.ts +89 -0
  72. package/dist/index-CoLebmwv.d.mts +89 -0
  73. package/dist/index.d.mts +8 -295
  74. package/dist/index.d.ts +8 -295
  75. package/dist/index.js +60 -21
  76. package/dist/index.js.map +1 -1
  77. package/dist/index.mjs +60 -21
  78. package/dist/index.mjs.map +1 -1
  79. package/dist/local-evaluator/evaluator.d.mts +55 -0
  80. package/dist/local-evaluator/evaluator.d.ts +55 -0
  81. package/dist/local-evaluator/evaluator.js +272 -0
  82. package/dist/local-evaluator/evaluator.js.map +1 -0
  83. package/dist/local-evaluator/evaluator.mjs +244 -0
  84. package/dist/local-evaluator/evaluator.mjs.map +1 -0
  85. package/dist/{nextjs-C9FPOjSh.d.ts → nextjs-Cag7libc.d.ts} +1 -1
  86. package/dist/{nextjs-BtqyLSVQ.d.mts → nextjs-_C_FcJY5.d.mts} +1 -1
  87. package/dist/{sdk-BkVigGjF.d.ts → sdk-CMPDFUjo.d.ts} +3 -1
  88. package/dist/{sdk-xCbZgeZx.d.mts → sdk-DAJahT3p.d.mts} +3 -1
  89. package/dist/transport/index.d.mts +2 -0
  90. package/dist/transport/index.d.ts +2 -0
  91. package/dist/transport/index.js +211 -0
  92. package/dist/transport/index.js.map +1 -0
  93. package/dist/transport/index.mjs +176 -0
  94. package/dist/transport/index.mjs.map +1 -0
  95. package/dist/{types-CS6v75-d.d.mts → types-Bf8pML07.d.mts} +9 -1
  96. package/dist/{types-CS6v75-d.d.ts → types-Bf8pML07.d.ts} +9 -1
  97. package/dist/types-BvpGdsv1.d.mts +153 -0
  98. package/dist/types-Ce2mFJkO.d.ts +153 -0
  99. package/dist/ui/index.d.mts +1 -1
  100. package/dist/ui/index.d.ts +1 -1
  101. package/package.json +46 -1
package/dist/index.js CHANGED
@@ -49,7 +49,7 @@ __export(src_exports, {
49
49
  hasMinimumAccess: () => hasMinimumAccess,
50
50
  nextjs: () => nextjs_exports,
51
51
  quickVerify: () => quickVerify,
52
- recordDecision: () => recordDecision,
52
+ recordDecision: () => recordDecision2,
53
53
  sdk: () => sdk_exports,
54
54
  transport: () => transport_exports,
55
55
  verify: () => verify
@@ -281,6 +281,7 @@ async function callVerifyAccessAPI(config, request) {
281
281
  if (requestData.enableRuntimeChallenge) body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
282
282
  if (requestData.createSession) body.createSession = requestData.createSession;
283
283
  if (requestData.counterpartyType) body.counterpartyType = requestData.counterpartyType;
284
+ if (requestData.counterpartyUrl) body.counterpartyUrl = requestData.counterpartyUrl;
284
285
  if (requestData.runtimeChallengeOptions) body.runtimeChallengeOptions = requestData.runtimeChallengeOptions;
285
286
  const headers = {
286
287
  "Content-Type": "application/json",
@@ -328,10 +329,17 @@ async function verify(config, request) {
328
329
  return cached;
329
330
  }
330
331
  }
332
+ const enrichedRequest = { ...request };
333
+ if (!enrichedRequest.counterpartyUrl && mergedConfig.counterpartyUrl) {
334
+ enrichedRequest.counterpartyUrl = mergedConfig.counterpartyUrl;
335
+ }
336
+ if (!enrichedRequest.counterpartyType && mergedConfig.counterpartyType) {
337
+ enrichedRequest.counterpartyType = mergedConfig.counterpartyType;
338
+ }
331
339
  if (mergedConfig.debug) {
332
340
  console.log("[VerificationGateway] Calling verify-access API");
333
341
  }
334
- const apiResponse = await callVerifyAccessAPI(mergedConfig, request);
342
+ const apiResponse = await callVerifyAccessAPI(mergedConfig, enrichedRequest);
335
343
  if (!apiResponse.success) {
336
344
  return createGuidanceResponse(mergedConfig, apiResponse.error);
337
345
  }
@@ -347,7 +355,11 @@ async function verify(config, request) {
347
355
  registrationUrl: `${mergedConfig.apiBaseUrl?.replace("/api", "")}/register`,
348
356
  documentationUrl: `${mergedConfig.apiBaseUrl?.replace("/api", "")}/docs/pdlss`
349
357
  },
350
- verifiedAt: /* @__PURE__ */ new Date()
358
+ verifiedAt: /* @__PURE__ */ new Date(),
359
+ // Extract sessionId so decisions can be recorded for denials too
360
+ sessionId: apiResponse.sessionId,
361
+ recommendation: apiResponse.recommendation,
362
+ recommendationReasons: apiResponse.recommendationReasons
351
363
  };
352
364
  return result2;
353
365
  }
@@ -431,6 +443,16 @@ async function verify(config, request) {
431
443
  }
432
444
  return result;
433
445
  }
446
+ async function recordDecision(config, sessionId, decision, reason) {
447
+ const headers = { "Content-Type": "application/json" };
448
+ if (config.apiKey) headers["X-API-Key"] = config.apiKey;
449
+ await fetch(`${config.apiBaseUrl}/agents/verify-access/${sessionId}/decision`, {
450
+ method: "POST",
451
+ headers,
452
+ body: JSON.stringify({ decision, reason })
453
+ }).catch(() => {
454
+ });
455
+ }
434
456
  async function quickVerify(config, credentials) {
435
457
  const result = await verify(config, {
436
458
  credentials,
@@ -575,6 +597,7 @@ function createMiddleware(options) {
575
597
  extractPurpose: customExtractPurpose,
576
598
  skipPaths = [],
577
599
  onDenied = defaultOnDenied,
600
+ recordDecisions,
578
601
  ...config
579
602
  } = options;
580
603
  return async (req, res, next) => {
@@ -608,16 +631,26 @@ function createMiddleware(options) {
608
631
  return;
609
632
  }
610
633
  const purpose = customExtractPurpose ? customExtractPurpose(req) : defaultExtractPurpose(req);
634
+ const counterpartyUrl = config.counterpartyUrl || `${req.protocol}://${req.get("host")}`;
635
+ const shouldRecordDecisions = recordDecisions !== false;
611
636
  const result = await verify(config, {
612
637
  credentials,
613
638
  purpose,
614
639
  action: req.method.toLowerCase(),
615
640
  resource: req.path,
616
641
  clientIp: req.ip,
617
- userAgent: req.headers["user-agent"]
642
+ userAgent: req.headers["user-agent"],
643
+ createSession: shouldRecordDecisions,
644
+ counterpartyUrl,
645
+ counterpartyType: config.counterpartyType || "api"
618
646
  });
619
647
  req.agentVerification = result;
648
+ const sessionId = result.sessionId;
620
649
  if (!hasMinimumAccess(result.accessLevel, routeConfig.minAccessLevel)) {
650
+ if (shouldRecordDecisions && sessionId) {
651
+ recordDecision(config, sessionId, "denied", result.denialReasons?.[0]).catch(() => {
652
+ });
653
+ }
621
654
  onDenied(result, req, res);
622
655
  return;
623
656
  }
@@ -626,10 +659,18 @@ function createMiddleware(options) {
626
659
  result.denialReasons = [
627
660
  `Trust score ${result.agent.trustScore} is below required ${routeConfig.minTrustScore}`
628
661
  ];
662
+ if (shouldRecordDecisions && sessionId) {
663
+ recordDecision(config, sessionId, "denied", result.denialReasons[0]).catch(() => {
664
+ });
665
+ }
629
666
  onDenied(result, req, res);
630
667
  return;
631
668
  }
632
669
  }
670
+ if (shouldRecordDecisions && sessionId) {
671
+ recordDecision(config, sessionId, "granted").catch(() => {
672
+ });
673
+ }
633
674
  next();
634
675
  } catch (error) {
635
676
  console.error("[VerificationGateway] Middleware error:", error);
@@ -640,17 +681,13 @@ function createMiddleware(options) {
640
681
  function requireAccess(minAccessLevel, options) {
641
682
  return createMiddleware({
642
683
  ...options,
643
- routes: [
644
- { pattern: "*", method: "*", minAccessLevel }
645
- ]
684
+ routes: [{ pattern: "*", method: "*", minAccessLevel }]
646
685
  });
647
686
  }
648
687
  function verifyOnly(options) {
649
688
  return createMiddleware({
650
689
  ...options,
651
- routes: [
652
- { pattern: "*", method: "*", minAccessLevel: "none" }
653
- ]
690
+ routes: [{ pattern: "*", method: "*", minAccessLevel: "none" }]
654
691
  });
655
692
  }
656
693
 
@@ -862,12 +899,7 @@ function generateCommerceShieldHtml(result, options) {
862
899
  `.trim();
863
900
  }
864
901
  function createMiddleware2(options) {
865
- const {
866
- routes = [],
867
- skipPaths = [],
868
- showCommerceShield = true,
869
- ...config
870
- } = options;
902
+ const { routes = [], skipPaths = [], showCommerceShield = true, ...config } = options;
871
903
  return async function middleware(request) {
872
904
  const { NextResponse } = await import("next/server");
873
905
  const pathname = request.nextUrl.pathname;
@@ -920,6 +952,7 @@ function createMiddleware2(options) {
920
952
  const registerUrl = result2.guidance?.registrationUrl || "/register";
921
953
  return NextResponse.redirect(new URL(registerUrl, request.url));
922
954
  }
955
+ const counterpartyUrl = config.counterpartyUrl || request.nextUrl.origin;
923
956
  const purpose = request.headers.get("x-purpose") || inferPurpose(request.method);
924
957
  const result = await verify(config, {
925
958
  credentials,
@@ -927,7 +960,9 @@ function createMiddleware2(options) {
927
960
  action: request.method.toLowerCase(),
928
961
  resource: pathname,
929
962
  clientIp: request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || void 0,
930
- userAgent: request.headers.get("user-agent") || void 0
963
+ userAgent: request.headers.get("user-agent") || void 0,
964
+ counterpartyUrl,
965
+ counterpartyType: config.counterpartyType || "website"
931
966
  });
932
967
  if (!hasMinimumAccess(result.accessLevel, routeConfig.minAccessLevel)) {
933
968
  if (pathname.startsWith("/api/")) {
@@ -990,7 +1025,9 @@ var VerificationGatewayClient = class {
990
1025
  minTrustScoreForFull: options.minTrustScoreForFull,
991
1026
  cacheTtl: options.cacheTtl,
992
1027
  debug: options.debug,
993
- customHeaders: options.customHeaders
1028
+ customHeaders: options.customHeaders,
1029
+ counterpartyUrl: options.counterpartyUrl,
1030
+ counterpartyType: options.counterpartyType
994
1031
  };
995
1032
  this.timeout = options.timeout || 1e4;
996
1033
  this.retryConfig = options.retry || { maxRetries: 3, backoffMs: 1e3 };
@@ -1016,7 +1053,9 @@ var VerificationGatewayClient = class {
1016
1053
  currency: options.currency,
1017
1054
  isSubAgentRequest: options.isSubAgentRequest,
1018
1055
  parentAgentId: options.parentAgentId,
1019
- subAgentDepth: options.subAgentDepth
1056
+ subAgentDepth: options.subAgentDepth,
1057
+ counterpartyUrl: options.counterpartyUrl,
1058
+ counterpartyType: options.counterpartyType
1020
1059
  })
1021
1060
  );
1022
1061
  }
@@ -1225,7 +1264,7 @@ __export(agent_exports, {
1225
1264
  ChallengeHandler: () => ChallengeHandler,
1226
1265
  formatPDLSSForTransport: () => formatPDLSSForTransport,
1227
1266
  parsePDLSSFromTransport: () => parsePDLSSFromTransport,
1228
- recordDecision: () => recordDecision
1267
+ recordDecision: () => recordDecision2
1229
1268
  });
1230
1269
 
1231
1270
  // src/agent/client.ts
@@ -1437,7 +1476,7 @@ function parsePDLSSFromTransport(transport) {
1437
1476
  }
1438
1477
 
1439
1478
  // src/agent/decision-client.ts
1440
- async function recordDecision(config, params) {
1479
+ async function recordDecision2(config, params) {
1441
1480
  const { sessionId, ...body } = params;
1442
1481
  const baseUrl = config.apiBaseUrl.replace(/\/$/, "");
1443
1482
  const url = `${baseUrl}/agents/verify-access/${encodeURIComponent(sessionId)}/decision`;