@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.mjs CHANGED
@@ -229,6 +229,7 @@ async function callVerifyAccessAPI(config, request) {
229
229
  if (requestData.enableRuntimeChallenge) body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
230
230
  if (requestData.createSession) body.createSession = requestData.createSession;
231
231
  if (requestData.counterpartyType) body.counterpartyType = requestData.counterpartyType;
232
+ if (requestData.counterpartyUrl) body.counterpartyUrl = requestData.counterpartyUrl;
232
233
  if (requestData.runtimeChallengeOptions) body.runtimeChallengeOptions = requestData.runtimeChallengeOptions;
233
234
  const headers = {
234
235
  "Content-Type": "application/json",
@@ -276,10 +277,17 @@ async function verify(config, request) {
276
277
  return cached;
277
278
  }
278
279
  }
280
+ const enrichedRequest = { ...request };
281
+ if (!enrichedRequest.counterpartyUrl && mergedConfig.counterpartyUrl) {
282
+ enrichedRequest.counterpartyUrl = mergedConfig.counterpartyUrl;
283
+ }
284
+ if (!enrichedRequest.counterpartyType && mergedConfig.counterpartyType) {
285
+ enrichedRequest.counterpartyType = mergedConfig.counterpartyType;
286
+ }
279
287
  if (mergedConfig.debug) {
280
288
  console.log("[VerificationGateway] Calling verify-access API");
281
289
  }
282
- const apiResponse = await callVerifyAccessAPI(mergedConfig, request);
290
+ const apiResponse = await callVerifyAccessAPI(mergedConfig, enrichedRequest);
283
291
  if (!apiResponse.success) {
284
292
  return createGuidanceResponse(mergedConfig, apiResponse.error);
285
293
  }
@@ -295,7 +303,11 @@ async function verify(config, request) {
295
303
  registrationUrl: `${mergedConfig.apiBaseUrl?.replace("/api", "")}/register`,
296
304
  documentationUrl: `${mergedConfig.apiBaseUrl?.replace("/api", "")}/docs/pdlss`
297
305
  },
298
- verifiedAt: /* @__PURE__ */ new Date()
306
+ verifiedAt: /* @__PURE__ */ new Date(),
307
+ // Extract sessionId so decisions can be recorded for denials too
308
+ sessionId: apiResponse.sessionId,
309
+ recommendation: apiResponse.recommendation,
310
+ recommendationReasons: apiResponse.recommendationReasons
299
311
  };
300
312
  return result2;
301
313
  }
@@ -379,6 +391,16 @@ async function verify(config, request) {
379
391
  }
380
392
  return result;
381
393
  }
394
+ async function recordDecision(config, sessionId, decision, reason) {
395
+ const headers = { "Content-Type": "application/json" };
396
+ if (config.apiKey) headers["X-API-Key"] = config.apiKey;
397
+ await fetch(`${config.apiBaseUrl}/agents/verify-access/${sessionId}/decision`, {
398
+ method: "POST",
399
+ headers,
400
+ body: JSON.stringify({ decision, reason })
401
+ }).catch(() => {
402
+ });
403
+ }
382
404
  async function quickVerify(config, credentials) {
383
405
  const result = await verify(config, {
384
406
  credentials,
@@ -523,6 +545,7 @@ function createMiddleware(options) {
523
545
  extractPurpose: customExtractPurpose,
524
546
  skipPaths = [],
525
547
  onDenied = defaultOnDenied,
548
+ recordDecisions,
526
549
  ...config
527
550
  } = options;
528
551
  return async (req, res, next) => {
@@ -556,16 +579,26 @@ function createMiddleware(options) {
556
579
  return;
557
580
  }
558
581
  const purpose = customExtractPurpose ? customExtractPurpose(req) : defaultExtractPurpose(req);
582
+ const counterpartyUrl = config.counterpartyUrl || `${req.protocol}://${req.get("host")}`;
583
+ const shouldRecordDecisions = recordDecisions !== false;
559
584
  const result = await verify(config, {
560
585
  credentials,
561
586
  purpose,
562
587
  action: req.method.toLowerCase(),
563
588
  resource: req.path,
564
589
  clientIp: req.ip,
565
- userAgent: req.headers["user-agent"]
590
+ userAgent: req.headers["user-agent"],
591
+ createSession: shouldRecordDecisions,
592
+ counterpartyUrl,
593
+ counterpartyType: config.counterpartyType || "api"
566
594
  });
567
595
  req.agentVerification = result;
596
+ const sessionId = result.sessionId;
568
597
  if (!hasMinimumAccess(result.accessLevel, routeConfig.minAccessLevel)) {
598
+ if (shouldRecordDecisions && sessionId) {
599
+ recordDecision(config, sessionId, "denied", result.denialReasons?.[0]).catch(() => {
600
+ });
601
+ }
569
602
  onDenied(result, req, res);
570
603
  return;
571
604
  }
@@ -574,10 +607,18 @@ function createMiddleware(options) {
574
607
  result.denialReasons = [
575
608
  `Trust score ${result.agent.trustScore} is below required ${routeConfig.minTrustScore}`
576
609
  ];
610
+ if (shouldRecordDecisions && sessionId) {
611
+ recordDecision(config, sessionId, "denied", result.denialReasons[0]).catch(() => {
612
+ });
613
+ }
577
614
  onDenied(result, req, res);
578
615
  return;
579
616
  }
580
617
  }
618
+ if (shouldRecordDecisions && sessionId) {
619
+ recordDecision(config, sessionId, "granted").catch(() => {
620
+ });
621
+ }
581
622
  next();
582
623
  } catch (error) {
583
624
  console.error("[VerificationGateway] Middleware error:", error);
@@ -588,17 +629,13 @@ function createMiddleware(options) {
588
629
  function requireAccess(minAccessLevel, options) {
589
630
  return createMiddleware({
590
631
  ...options,
591
- routes: [
592
- { pattern: "*", method: "*", minAccessLevel }
593
- ]
632
+ routes: [{ pattern: "*", method: "*", minAccessLevel }]
594
633
  });
595
634
  }
596
635
  function verifyOnly(options) {
597
636
  return createMiddleware({
598
637
  ...options,
599
- routes: [
600
- { pattern: "*", method: "*", minAccessLevel: "none" }
601
- ]
638
+ routes: [{ pattern: "*", method: "*", minAccessLevel: "none" }]
602
639
  });
603
640
  }
604
641
 
@@ -810,12 +847,7 @@ function generateCommerceShieldHtml(result, options) {
810
847
  `.trim();
811
848
  }
812
849
  function createMiddleware2(options) {
813
- const {
814
- routes = [],
815
- skipPaths = [],
816
- showCommerceShield = true,
817
- ...config
818
- } = options;
850
+ const { routes = [], skipPaths = [], showCommerceShield = true, ...config } = options;
819
851
  return async function middleware(request) {
820
852
  const { NextResponse } = await import("next/server");
821
853
  const pathname = request.nextUrl.pathname;
@@ -868,6 +900,7 @@ function createMiddleware2(options) {
868
900
  const registerUrl = result2.guidance?.registrationUrl || "/register";
869
901
  return NextResponse.redirect(new URL(registerUrl, request.url));
870
902
  }
903
+ const counterpartyUrl = config.counterpartyUrl || request.nextUrl.origin;
871
904
  const purpose = request.headers.get("x-purpose") || inferPurpose(request.method);
872
905
  const result = await verify(config, {
873
906
  credentials,
@@ -875,7 +908,9 @@ function createMiddleware2(options) {
875
908
  action: request.method.toLowerCase(),
876
909
  resource: pathname,
877
910
  clientIp: request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || void 0,
878
- userAgent: request.headers.get("user-agent") || void 0
911
+ userAgent: request.headers.get("user-agent") || void 0,
912
+ counterpartyUrl,
913
+ counterpartyType: config.counterpartyType || "website"
879
914
  });
880
915
  if (!hasMinimumAccess(result.accessLevel, routeConfig.minAccessLevel)) {
881
916
  if (pathname.startsWith("/api/")) {
@@ -938,7 +973,9 @@ var VerificationGatewayClient = class {
938
973
  minTrustScoreForFull: options.minTrustScoreForFull,
939
974
  cacheTtl: options.cacheTtl,
940
975
  debug: options.debug,
941
- customHeaders: options.customHeaders
976
+ customHeaders: options.customHeaders,
977
+ counterpartyUrl: options.counterpartyUrl,
978
+ counterpartyType: options.counterpartyType
942
979
  };
943
980
  this.timeout = options.timeout || 1e4;
944
981
  this.retryConfig = options.retry || { maxRetries: 3, backoffMs: 1e3 };
@@ -964,7 +1001,9 @@ var VerificationGatewayClient = class {
964
1001
  currency: options.currency,
965
1002
  isSubAgentRequest: options.isSubAgentRequest,
966
1003
  parentAgentId: options.parentAgentId,
967
- subAgentDepth: options.subAgentDepth
1004
+ subAgentDepth: options.subAgentDepth,
1005
+ counterpartyUrl: options.counterpartyUrl,
1006
+ counterpartyType: options.counterpartyType
968
1007
  })
969
1008
  );
970
1009
  }
@@ -1173,7 +1212,7 @@ __export(agent_exports, {
1173
1212
  ChallengeHandler: () => ChallengeHandler,
1174
1213
  formatPDLSSForTransport: () => formatPDLSSForTransport,
1175
1214
  parsePDLSSFromTransport: () => parsePDLSSFromTransport,
1176
- recordDecision: () => recordDecision
1215
+ recordDecision: () => recordDecision2
1177
1216
  });
1178
1217
 
1179
1218
  // src/agent/client.ts
@@ -1385,7 +1424,7 @@ function parsePDLSSFromTransport(transport) {
1385
1424
  }
1386
1425
 
1387
1426
  // src/agent/decision-client.ts
1388
- async function recordDecision(config, params) {
1427
+ async function recordDecision2(config, params) {
1389
1428
  const { sessionId, ...body } = params;
1390
1429
  const baseUrl = config.apiBaseUrl.replace(/\/$/, "");
1391
1430
  const url = `${baseUrl}/agents/verify-access/${encodeURIComponent(sessionId)}/decision`;
@@ -1438,7 +1477,7 @@ export {
1438
1477
  hasMinimumAccess,
1439
1478
  nextjs_exports as nextjs,
1440
1479
  quickVerify,
1441
- recordDecision,
1480
+ recordDecision2 as recordDecision,
1442
1481
  sdk_exports as sdk,
1443
1482
  transport_exports as transport,
1444
1483
  verify