@astrasyncai/verification-gateway 1.1.0 → 2.0.1
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/adapter-interface/interface.d.mts +71 -0
- package/dist/adapter-interface/interface.d.ts +71 -0
- package/dist/adapter-interface/interface.js +36 -0
- package/dist/adapter-interface/interface.js.map +1 -0
- package/dist/adapter-interface/interface.mjs +10 -0
- package/dist/adapter-interface/interface.mjs.map +1 -0
- package/dist/adapter-interface/purpose-mapping.d.mts +28 -0
- package/dist/adapter-interface/purpose-mapping.d.ts +28 -0
- package/dist/adapter-interface/purpose-mapping.js +117 -0
- package/dist/adapter-interface/purpose-mapping.js.map +1 -0
- package/dist/adapter-interface/purpose-mapping.mjs +89 -0
- package/dist/adapter-interface/purpose-mapping.mjs.map +1 -0
- package/dist/adapters/express.d.mts +2 -2
- package/dist/adapters/express.d.ts +2 -2
- package/dist/adapters/express.js +123 -11
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +123 -11
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +2 -2
- package/dist/adapters/nextjs.d.ts +2 -2
- package/dist/adapters/nextjs.js +192 -14
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +192 -14
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +2 -2
- package/dist/adapters/sdk.d.ts +2 -2
- package/dist/adapters/sdk.js +7 -2
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +7 -2
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.d.mts +2 -0
- package/dist/agent/index.d.ts +2 -0
- package/dist/agent/index.js +354 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/index.mjs +323 -0
- package/dist/agent/index.mjs.map +1 -0
- package/dist/browser/background.d.mts +2 -0
- package/dist/browser/background.d.ts +2 -0
- package/dist/browser/background.js +4090 -0
- package/dist/browser/background.js.map +1 -0
- package/dist/browser/background.mjs +4088 -0
- package/dist/browser/background.mjs.map +1 -0
- package/dist/browser/browser-adapter.d.mts +110 -0
- package/dist/browser/browser-adapter.d.ts +110 -0
- package/dist/browser/browser-adapter.js +297 -0
- package/dist/browser/browser-adapter.js.map +1 -0
- package/dist/browser/browser-adapter.mjs +269 -0
- package/dist/browser/browser-adapter.mjs.map +1 -0
- package/dist/cli/index.d.mts +241 -0
- package/dist/cli/index.d.ts +241 -0
- package/dist/cli/index.js +3734 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +3688 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/cursor/cursor-adapter.d.mts +91 -0
- package/dist/cursor/cursor-adapter.d.ts +91 -0
- package/dist/cursor/cursor-adapter.js +273 -0
- package/dist/cursor/cursor-adapter.js.map +1 -0
- package/dist/cursor/cursor-adapter.mjs +246 -0
- package/dist/cursor/cursor-adapter.mjs.map +1 -0
- package/dist/cursor/extension.d.mts +27 -0
- package/dist/cursor/extension.d.ts +27 -0
- package/dist/cursor/extension.js +4057 -0
- package/dist/cursor/extension.js.map +1 -0
- package/dist/cursor/extension.mjs +4029 -0
- package/dist/cursor/extension.mjs.map +1 -0
- package/dist/{express-BGZiLINd.d.ts → express-Bcl-uBUE.d.ts} +1 -1
- package/dist/{express-BoayLpqq.d.mts → express-CtwDIZyF.d.mts} +1 -1
- package/dist/gateway/gateway.d.mts +70 -0
- package/dist/gateway/gateway.d.ts +70 -0
- package/dist/gateway/gateway.js +3726 -0
- package/dist/gateway/gateway.js.map +1 -0
- package/dist/gateway/gateway.mjs +3699 -0
- package/dist/gateway/gateway.mjs.map +1 -0
- package/dist/git-trigger/git-hooks.d.mts +69 -0
- package/dist/git-trigger/git-hooks.d.ts +69 -0
- package/dist/git-trigger/git-hooks.js +243 -0
- package/dist/git-trigger/git-hooks.js.map +1 -0
- package/dist/git-trigger/git-hooks.mjs +213 -0
- package/dist/git-trigger/git-hooks.mjs.map +1 -0
- package/dist/index-B1ThcGZl.d.mts +89 -0
- package/dist/index-BY8yQ8N8.d.mts +206 -0
- package/dist/index-CtYSYwn3.d.ts +206 -0
- package/dist/index-DnoXfdFd.d.ts +89 -0
- package/dist/index.d.mts +8 -295
- package/dist/index.d.ts +8 -295
- package/dist/index.js +215 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +215 -27
- package/dist/index.mjs.map +1 -1
- package/dist/local-evaluator/evaluator.d.mts +55 -0
- package/dist/local-evaluator/evaluator.d.ts +55 -0
- package/dist/local-evaluator/evaluator.js +272 -0
- package/dist/local-evaluator/evaluator.js.map +1 -0
- package/dist/local-evaluator/evaluator.mjs +244 -0
- package/dist/local-evaluator/evaluator.mjs.map +1 -0
- package/dist/{nextjs-BNbHm5Ui.d.mts → nextjs-BQyMCSx_.d.mts} +1 -1
- package/dist/{nextjs-DTCS5Sw8.d.ts → nextjs-CEldnIJ9.d.ts} +1 -1
- package/dist/{sdk-VAFRmdt7.d.mts → sdk-BhvuJSrH.d.mts} +3 -1
- package/dist/{sdk-9TKZzhxE.d.ts → sdk-BlyVSC_S.d.ts} +3 -1
- package/dist/transport/index.d.mts +2 -0
- package/dist/transport/index.d.ts +2 -0
- package/dist/transport/index.js +211 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/index.mjs +176 -0
- package/dist/transport/index.mjs.map +1 -0
- package/dist/types-79qS7aON.d.ts +153 -0
- package/dist/{types-cA_xfFU7.d.mts → types-CxQwJKbd.d.mts} +17 -2
- package/dist/{types-cA_xfFU7.d.ts → types-CxQwJKbd.d.ts} +17 -2
- package/dist/types-jJnPXStc.d.mts +153 -0
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/package.json +48 -2
package/dist/index.mjs
CHANGED
|
@@ -228,6 +228,7 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
228
228
|
if (requestData.subAgentDepth !== void 0) body.subAgentDepth = requestData.subAgentDepth;
|
|
229
229
|
if (requestData.enableRuntimeChallenge) body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
230
230
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
231
|
+
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
231
232
|
if (requestData.counterpartyType) body.counterpartyType = requestData.counterpartyType;
|
|
232
233
|
if (requestData.counterpartyUrl) body.counterpartyUrl = requestData.counterpartyUrl;
|
|
233
234
|
if (requestData.runtimeChallengeOptions) body.runtimeChallengeOptions = requestData.runtimeChallengeOptions;
|
|
@@ -401,6 +402,24 @@ async function recordDecision(config, sessionId, decision, reason) {
|
|
|
401
402
|
}).catch(() => {
|
|
402
403
|
});
|
|
403
404
|
}
|
|
405
|
+
async function reportUnregisteredAttempt(config, data) {
|
|
406
|
+
const apiBaseUrl = config.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl;
|
|
407
|
+
await fetch(`${apiBaseUrl}/verification-activity/unregistered-attempt`, {
|
|
408
|
+
method: "POST",
|
|
409
|
+
headers: { "Content-Type": "application/json" },
|
|
410
|
+
body: JSON.stringify(data)
|
|
411
|
+
}).catch(() => {
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
async function reportCounterpartyPreCheckFailure(config, data) {
|
|
415
|
+
const apiBaseUrl = config.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl;
|
|
416
|
+
await fetch(`${apiBaseUrl}/verification-activity/counterparty-pre-check-failure`, {
|
|
417
|
+
method: "POST",
|
|
418
|
+
headers: { "Content-Type": "application/json" },
|
|
419
|
+
body: JSON.stringify(data)
|
|
420
|
+
}).catch(() => {
|
|
421
|
+
});
|
|
422
|
+
}
|
|
404
423
|
async function quickVerify(config, credentials) {
|
|
405
424
|
const result = await verify(config, {
|
|
406
425
|
credentials,
|
|
@@ -482,6 +501,54 @@ function extractHttpCredentials(headers) {
|
|
|
482
501
|
return credentials;
|
|
483
502
|
}
|
|
484
503
|
|
|
504
|
+
// src/pdlss-pre-check.ts
|
|
505
|
+
function performCounterpartyPreCheck(routeConfig, astraCreds, purpose) {
|
|
506
|
+
const failures = [];
|
|
507
|
+
if (routeConfig.allowedPurposes && routeConfig.allowedPurposes.length > 0 && purpose) {
|
|
508
|
+
if (!routeConfig.allowedPurposes.includes(purpose)) {
|
|
509
|
+
failures.push({
|
|
510
|
+
field: "purpose",
|
|
511
|
+
requested: purpose,
|
|
512
|
+
limit: routeConfig.allowedPurposes,
|
|
513
|
+
message: `Purpose "${purpose}" is not in the allowed list: [${routeConfig.allowedPurposes.join(", ")}]`
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
if (routeConfig.requiredPurposes && routeConfig.requiredPurposes.length > 0 && purpose) {
|
|
518
|
+
if (!routeConfig.requiredPurposes.includes(purpose)) {
|
|
519
|
+
failures.push({
|
|
520
|
+
field: "purpose",
|
|
521
|
+
requested: purpose,
|
|
522
|
+
limit: routeConfig.requiredPurposes,
|
|
523
|
+
message: `Purpose "${purpose}" is not in the required list: [${routeConfig.requiredPurposes.join(", ")}]`
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
if (routeConfig.maxDuration && astraCreds?.pdlss?.duration?.maxSessionDuration) {
|
|
528
|
+
const requested = astraCreds.pdlss.duration.maxSessionDuration;
|
|
529
|
+
if (requested > routeConfig.maxDuration) {
|
|
530
|
+
failures.push({
|
|
531
|
+
field: "duration",
|
|
532
|
+
requested,
|
|
533
|
+
limit: routeConfig.maxDuration,
|
|
534
|
+
message: `Requested duration ${requested}s exceeds maximum ${routeConfig.maxDuration}s`
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
if (routeConfig.allowedJurisdictions && routeConfig.allowedJurisdictions.length > 0 && astraCreds?.pdlss?.scope?.jurisdiction) {
|
|
539
|
+
const requested = astraCreds.pdlss.scope.jurisdiction;
|
|
540
|
+
if (!routeConfig.allowedJurisdictions.includes(requested)) {
|
|
541
|
+
failures.push({
|
|
542
|
+
field: "jurisdiction",
|
|
543
|
+
requested,
|
|
544
|
+
limit: routeConfig.allowedJurisdictions,
|
|
545
|
+
message: `Jurisdiction "${requested}" is not in the allowed list: [${routeConfig.allowedJurisdictions.join(", ")}]`
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
return failures;
|
|
550
|
+
}
|
|
551
|
+
|
|
485
552
|
// src/adapters/express.ts
|
|
486
553
|
function defaultExtractCredentials(req) {
|
|
487
554
|
return extractCredentials(
|
|
@@ -493,6 +560,12 @@ function extractAstraSyncCredentials(req) {
|
|
|
493
560
|
return extractHttpCredentials(req.headers);
|
|
494
561
|
}
|
|
495
562
|
function defaultExtractPurpose(req) {
|
|
563
|
+
const astraPurpose = req.headers["x-astra-purpose"];
|
|
564
|
+
if (astraPurpose) {
|
|
565
|
+
const value = Array.isArray(astraPurpose) ? astraPurpose[0] : astraPurpose;
|
|
566
|
+
const category = value.split(":")[0];
|
|
567
|
+
return category;
|
|
568
|
+
}
|
|
496
569
|
const purposeHeader = req.headers["x-purpose"] || req.headers["X-Purpose"];
|
|
497
570
|
if (purposeHeader) {
|
|
498
571
|
return Array.isArray(purposeHeader) ? purposeHeader[0] : purposeHeader;
|
|
@@ -502,14 +575,14 @@ function defaultExtractPurpose(req) {
|
|
|
502
575
|
}
|
|
503
576
|
switch (req.method) {
|
|
504
577
|
case "GET":
|
|
505
|
-
return "
|
|
578
|
+
return "read_data";
|
|
506
579
|
case "POST":
|
|
507
|
-
return "
|
|
580
|
+
return "write_data";
|
|
508
581
|
case "PUT":
|
|
509
582
|
case "PATCH":
|
|
510
|
-
return "
|
|
583
|
+
return "write_data";
|
|
511
584
|
case "DELETE":
|
|
512
|
-
return "
|
|
585
|
+
return "delete_data";
|
|
513
586
|
default:
|
|
514
587
|
return "general";
|
|
515
588
|
}
|
|
@@ -546,6 +619,7 @@ function createMiddleware(options) {
|
|
|
546
619
|
skipPaths = [],
|
|
547
620
|
onDenied = defaultOnDenied,
|
|
548
621
|
recordDecisions,
|
|
622
|
+
enableRuntimeChallenge = true,
|
|
549
623
|
...config
|
|
550
624
|
} = options;
|
|
551
625
|
return async (req, res, next) => {
|
|
@@ -563,6 +637,16 @@ function createMiddleware(options) {
|
|
|
563
637
|
}
|
|
564
638
|
const credentials = customExtractCredentials ? customExtractCredentials(req) : defaultExtractCredentials(req);
|
|
565
639
|
if (!hasCredentials(credentials) && routeConfig.minAccessLevel !== "guidance") {
|
|
640
|
+
const counterpartyUrl2 = config.counterpartyUrl || `${req.protocol}://${req.get("host")}`;
|
|
641
|
+
reportUnregisteredAttempt(config, {
|
|
642
|
+
counterpartyUrl: counterpartyUrl2,
|
|
643
|
+
counterpartyType: config.counterpartyType || "api",
|
|
644
|
+
sourceIp: req.ip,
|
|
645
|
+
userAgent: req.headers["user-agent"],
|
|
646
|
+
requestPath: req.path,
|
|
647
|
+
requestMethod: req.method
|
|
648
|
+
}).catch(() => {
|
|
649
|
+
});
|
|
566
650
|
const result2 = {
|
|
567
651
|
verified: false,
|
|
568
652
|
accessLevel: "none",
|
|
@@ -579,6 +663,34 @@ function createMiddleware(options) {
|
|
|
579
663
|
return;
|
|
580
664
|
}
|
|
581
665
|
const purpose = customExtractPurpose ? customExtractPurpose(req) : defaultExtractPurpose(req);
|
|
666
|
+
const astraCreds = extractAstraSyncCredentials(req);
|
|
667
|
+
const counterpartyUrl = config.counterpartyUrl || `${req.protocol}://${req.get("host")}`;
|
|
668
|
+
const preCheckFailures = performCounterpartyPreCheck(routeConfig, astraCreds, purpose);
|
|
669
|
+
if (preCheckFailures.length > 0) {
|
|
670
|
+
const result2 = {
|
|
671
|
+
verified: false,
|
|
672
|
+
accessLevel: "none",
|
|
673
|
+
denialReasons: preCheckFailures.map((f) => f.message),
|
|
674
|
+
guidance: {
|
|
675
|
+
message: "Request exceeds counterparty-defined PDLSS limits.",
|
|
676
|
+
registrationUrl: `${config.apiBaseUrl?.replace("/api", "")}/register`,
|
|
677
|
+
documentationUrl: `${config.apiBaseUrl?.replace("/api", "")}/docs/pdlss`
|
|
678
|
+
},
|
|
679
|
+
verifiedAt: /* @__PURE__ */ new Date()
|
|
680
|
+
};
|
|
681
|
+
req.agentVerification = result2;
|
|
682
|
+
reportCounterpartyPreCheckFailure(config, {
|
|
683
|
+
agentId: astraCreds?.agentId || credentials.astraId || "unknown",
|
|
684
|
+
counterpartyUrl,
|
|
685
|
+
counterpartyType: config.counterpartyType || "api",
|
|
686
|
+
failures: preCheckFailures,
|
|
687
|
+
requestPath: req.path,
|
|
688
|
+
requestMethod: req.method
|
|
689
|
+
}).catch(() => {
|
|
690
|
+
});
|
|
691
|
+
onDenied(result2, req, res);
|
|
692
|
+
return;
|
|
693
|
+
}
|
|
582
694
|
const shouldRecordDecisions = recordDecisions !== false;
|
|
583
695
|
const result = await verify(config, {
|
|
584
696
|
credentials,
|
|
@@ -587,7 +699,11 @@ function createMiddleware(options) {
|
|
|
587
699
|
resource: req.path,
|
|
588
700
|
clientIp: req.ip,
|
|
589
701
|
userAgent: req.headers["user-agent"],
|
|
590
|
-
createSession: shouldRecordDecisions
|
|
702
|
+
createSession: shouldRecordDecisions,
|
|
703
|
+
counterpartyUrl,
|
|
704
|
+
counterpartyType: config.counterpartyType || "api",
|
|
705
|
+
enableRuntimeChallenge,
|
|
706
|
+
durationRequired: astraCreds?.pdlss?.duration?.maxSessionDuration
|
|
591
707
|
});
|
|
592
708
|
req.agentVerification = result;
|
|
593
709
|
const sessionId = result.sessionId;
|
|
@@ -626,17 +742,13 @@ function createMiddleware(options) {
|
|
|
626
742
|
function requireAccess(minAccessLevel, options) {
|
|
627
743
|
return createMiddleware({
|
|
628
744
|
...options,
|
|
629
|
-
routes: [
|
|
630
|
-
{ pattern: "*", method: "*", minAccessLevel }
|
|
631
|
-
]
|
|
745
|
+
routes: [{ pattern: "*", method: "*", minAccessLevel }]
|
|
632
746
|
});
|
|
633
747
|
}
|
|
634
748
|
function verifyOnly(options) {
|
|
635
749
|
return createMiddleware({
|
|
636
750
|
...options,
|
|
637
|
-
routes: [
|
|
638
|
-
{ pattern: "*", method: "*", minAccessLevel: "none" }
|
|
639
|
-
]
|
|
751
|
+
routes: [{ pattern: "*", method: "*", minAccessLevel: "none" }]
|
|
640
752
|
});
|
|
641
753
|
}
|
|
642
754
|
|
|
@@ -686,17 +798,32 @@ function findRouteConfig2(routes, path, method) {
|
|
|
686
798
|
return methodMatches && pathMatches;
|
|
687
799
|
});
|
|
688
800
|
}
|
|
689
|
-
function
|
|
690
|
-
|
|
801
|
+
function extractAstraSyncCredentialsFromNextRequest(request) {
|
|
802
|
+
const headers = {};
|
|
803
|
+
request.headers.forEach((value, key) => {
|
|
804
|
+
headers[key] = value;
|
|
805
|
+
});
|
|
806
|
+
return extractHttpCredentials(headers);
|
|
807
|
+
}
|
|
808
|
+
function extractPurpose(request) {
|
|
809
|
+
const astraPurpose = request.headers.get("x-astra-purpose");
|
|
810
|
+
if (astraPurpose) {
|
|
811
|
+
return astraPurpose.split(":")[0];
|
|
812
|
+
}
|
|
813
|
+
const purposeHeader = request.headers.get("x-purpose");
|
|
814
|
+
if (purposeHeader) {
|
|
815
|
+
return purposeHeader;
|
|
816
|
+
}
|
|
817
|
+
switch (request.method.toUpperCase()) {
|
|
691
818
|
case "GET":
|
|
692
|
-
return "
|
|
819
|
+
return "read_data";
|
|
693
820
|
case "POST":
|
|
694
|
-
return "
|
|
821
|
+
return "write_data";
|
|
695
822
|
case "PUT":
|
|
696
823
|
case "PATCH":
|
|
697
|
-
return "
|
|
824
|
+
return "write_data";
|
|
698
825
|
case "DELETE":
|
|
699
|
-
return "
|
|
826
|
+
return "delete_data";
|
|
700
827
|
default:
|
|
701
828
|
return "general";
|
|
702
829
|
}
|
|
@@ -848,12 +975,7 @@ function generateCommerceShieldHtml(result, options) {
|
|
|
848
975
|
`.trim();
|
|
849
976
|
}
|
|
850
977
|
function createMiddleware2(options) {
|
|
851
|
-
const {
|
|
852
|
-
routes = [],
|
|
853
|
-
skipPaths = [],
|
|
854
|
-
showCommerceShield = true,
|
|
855
|
-
...config
|
|
856
|
-
} = options;
|
|
978
|
+
const { routes = [], skipPaths = [], showCommerceShield = true, enableRuntimeChallenge = true, ...config } = options;
|
|
857
979
|
return async function middleware(request) {
|
|
858
980
|
const { NextResponse } = await import("next/server");
|
|
859
981
|
const pathname = request.nextUrl.pathname;
|
|
@@ -870,6 +992,16 @@ function createMiddleware2(options) {
|
|
|
870
992
|
}
|
|
871
993
|
const credentials = extractCredentialsFromNextRequest(request);
|
|
872
994
|
if (!hasCredentials(credentials) && routeConfig.minAccessLevel !== "guidance") {
|
|
995
|
+
const counterpartyUrl2 = config.counterpartyUrl || request.nextUrl.origin;
|
|
996
|
+
reportUnregisteredAttempt(config, {
|
|
997
|
+
counterpartyUrl: counterpartyUrl2,
|
|
998
|
+
counterpartyType: config.counterpartyType || "website",
|
|
999
|
+
sourceIp: request.headers.get("x-forwarded-for") || request.headers.get("x-real-ip") || void 0,
|
|
1000
|
+
userAgent: request.headers.get("user-agent") || void 0,
|
|
1001
|
+
requestPath: pathname,
|
|
1002
|
+
requestMethod: request.method
|
|
1003
|
+
}).catch(() => {
|
|
1004
|
+
});
|
|
873
1005
|
const result2 = {
|
|
874
1006
|
verified: false,
|
|
875
1007
|
accessLevel: "none",
|
|
@@ -906,14 +1038,66 @@ function createMiddleware2(options) {
|
|
|
906
1038
|
const registerUrl = result2.guidance?.registrationUrl || "/register";
|
|
907
1039
|
return NextResponse.redirect(new URL(registerUrl, request.url));
|
|
908
1040
|
}
|
|
909
|
-
const
|
|
1041
|
+
const counterpartyUrl = config.counterpartyUrl || request.nextUrl.origin;
|
|
1042
|
+
const purpose = extractPurpose(request);
|
|
1043
|
+
const astraCreds = extractAstraSyncCredentialsFromNextRequest(request);
|
|
1044
|
+
const preCheckFailures = performCounterpartyPreCheck(routeConfig, astraCreds, purpose);
|
|
1045
|
+
if (preCheckFailures.length > 0) {
|
|
1046
|
+
const preCheckResult = {
|
|
1047
|
+
verified: false,
|
|
1048
|
+
accessLevel: "none",
|
|
1049
|
+
denialReasons: preCheckFailures.map((f) => f.message),
|
|
1050
|
+
guidance: {
|
|
1051
|
+
message: "Request exceeds counterparty-defined PDLSS limits.",
|
|
1052
|
+
registrationUrl: `${config.apiBaseUrl?.replace("/api", "")}/register`,
|
|
1053
|
+
documentationUrl: `${config.apiBaseUrl?.replace("/api", "")}/docs/pdlss`
|
|
1054
|
+
},
|
|
1055
|
+
verifiedAt: /* @__PURE__ */ new Date()
|
|
1056
|
+
};
|
|
1057
|
+
reportCounterpartyPreCheckFailure(config, {
|
|
1058
|
+
agentId: astraCreds?.agentId || credentials.astraId || "unknown",
|
|
1059
|
+
counterpartyUrl,
|
|
1060
|
+
counterpartyType: config.counterpartyType || "website",
|
|
1061
|
+
failures: preCheckFailures,
|
|
1062
|
+
requestPath: pathname,
|
|
1063
|
+
requestMethod: request.method
|
|
1064
|
+
}).catch(() => {
|
|
1065
|
+
});
|
|
1066
|
+
if (pathname.startsWith("/api/")) {
|
|
1067
|
+
return NextResponse.json(
|
|
1068
|
+
{
|
|
1069
|
+
success: false,
|
|
1070
|
+
error: {
|
|
1071
|
+
code: "PDLSS_PRE_CHECK_FAILED",
|
|
1072
|
+
message: preCheckResult.denialReasons?.[0] || "PDLSS pre-check failed",
|
|
1073
|
+
guidance: preCheckResult.guidance
|
|
1074
|
+
}
|
|
1075
|
+
},
|
|
1076
|
+
{ status: 403 }
|
|
1077
|
+
);
|
|
1078
|
+
}
|
|
1079
|
+
if (showCommerceShield) {
|
|
1080
|
+
return new NextResponse(generateCommerceShieldHtml(preCheckResult, options), {
|
|
1081
|
+
status: 200,
|
|
1082
|
+
headers: {
|
|
1083
|
+
"Content-Type": "text/html",
|
|
1084
|
+
"X-AstraSync-Verification": "commerce-shield"
|
|
1085
|
+
}
|
|
1086
|
+
});
|
|
1087
|
+
}
|
|
1088
|
+
return NextResponse.redirect(new URL("/unauthorized", request.url));
|
|
1089
|
+
}
|
|
910
1090
|
const result = await verify(config, {
|
|
911
1091
|
credentials,
|
|
912
1092
|
purpose,
|
|
913
1093
|
action: request.method.toLowerCase(),
|
|
914
1094
|
resource: pathname,
|
|
915
1095
|
clientIp: request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || void 0,
|
|
916
|
-
userAgent: request.headers.get("user-agent") || void 0
|
|
1096
|
+
userAgent: request.headers.get("user-agent") || void 0,
|
|
1097
|
+
counterpartyUrl,
|
|
1098
|
+
counterpartyType: config.counterpartyType || "website",
|
|
1099
|
+
enableRuntimeChallenge,
|
|
1100
|
+
durationRequired: astraCreds?.pdlss?.duration?.maxSessionDuration
|
|
917
1101
|
});
|
|
918
1102
|
if (!hasMinimumAccess(result.accessLevel, routeConfig.minAccessLevel)) {
|
|
919
1103
|
if (pathname.startsWith("/api/")) {
|
|
@@ -976,7 +1160,9 @@ var VerificationGatewayClient = class {
|
|
|
976
1160
|
minTrustScoreForFull: options.minTrustScoreForFull,
|
|
977
1161
|
cacheTtl: options.cacheTtl,
|
|
978
1162
|
debug: options.debug,
|
|
979
|
-
customHeaders: options.customHeaders
|
|
1163
|
+
customHeaders: options.customHeaders,
|
|
1164
|
+
counterpartyUrl: options.counterpartyUrl,
|
|
1165
|
+
counterpartyType: options.counterpartyType
|
|
980
1166
|
};
|
|
981
1167
|
this.timeout = options.timeout || 1e4;
|
|
982
1168
|
this.retryConfig = options.retry || { maxRetries: 3, backoffMs: 1e3 };
|
|
@@ -1002,7 +1188,9 @@ var VerificationGatewayClient = class {
|
|
|
1002
1188
|
currency: options.currency,
|
|
1003
1189
|
isSubAgentRequest: options.isSubAgentRequest,
|
|
1004
1190
|
parentAgentId: options.parentAgentId,
|
|
1005
|
-
subAgentDepth: options.subAgentDepth
|
|
1191
|
+
subAgentDepth: options.subAgentDepth,
|
|
1192
|
+
counterpartyUrl: options.counterpartyUrl,
|
|
1193
|
+
counterpartyType: options.counterpartyType
|
|
1006
1194
|
})
|
|
1007
1195
|
);
|
|
1008
1196
|
}
|