@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.js
CHANGED
|
@@ -280,6 +280,7 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
280
280
|
if (requestData.subAgentDepth !== void 0) body.subAgentDepth = requestData.subAgentDepth;
|
|
281
281
|
if (requestData.enableRuntimeChallenge) body.enableRuntimeChallenge = requestData.enableRuntimeChallenge;
|
|
282
282
|
if (requestData.createSession) body.createSession = requestData.createSession;
|
|
283
|
+
if (requestData.durationRequired) body.durationRequired = requestData.durationRequired;
|
|
283
284
|
if (requestData.counterpartyType) body.counterpartyType = requestData.counterpartyType;
|
|
284
285
|
if (requestData.counterpartyUrl) body.counterpartyUrl = requestData.counterpartyUrl;
|
|
285
286
|
if (requestData.runtimeChallengeOptions) body.runtimeChallengeOptions = requestData.runtimeChallengeOptions;
|
|
@@ -453,6 +454,24 @@ async function recordDecision(config, sessionId, decision, reason) {
|
|
|
453
454
|
}).catch(() => {
|
|
454
455
|
});
|
|
455
456
|
}
|
|
457
|
+
async function reportUnregisteredAttempt(config, data) {
|
|
458
|
+
const apiBaseUrl = config.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl;
|
|
459
|
+
await fetch(`${apiBaseUrl}/verification-activity/unregistered-attempt`, {
|
|
460
|
+
method: "POST",
|
|
461
|
+
headers: { "Content-Type": "application/json" },
|
|
462
|
+
body: JSON.stringify(data)
|
|
463
|
+
}).catch(() => {
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
async function reportCounterpartyPreCheckFailure(config, data) {
|
|
467
|
+
const apiBaseUrl = config.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl;
|
|
468
|
+
await fetch(`${apiBaseUrl}/verification-activity/counterparty-pre-check-failure`, {
|
|
469
|
+
method: "POST",
|
|
470
|
+
headers: { "Content-Type": "application/json" },
|
|
471
|
+
body: JSON.stringify(data)
|
|
472
|
+
}).catch(() => {
|
|
473
|
+
});
|
|
474
|
+
}
|
|
456
475
|
async function quickVerify(config, credentials) {
|
|
457
476
|
const result = await verify(config, {
|
|
458
477
|
credentials,
|
|
@@ -534,6 +553,54 @@ function extractHttpCredentials(headers) {
|
|
|
534
553
|
return credentials;
|
|
535
554
|
}
|
|
536
555
|
|
|
556
|
+
// src/pdlss-pre-check.ts
|
|
557
|
+
function performCounterpartyPreCheck(routeConfig, astraCreds, purpose) {
|
|
558
|
+
const failures = [];
|
|
559
|
+
if (routeConfig.allowedPurposes && routeConfig.allowedPurposes.length > 0 && purpose) {
|
|
560
|
+
if (!routeConfig.allowedPurposes.includes(purpose)) {
|
|
561
|
+
failures.push({
|
|
562
|
+
field: "purpose",
|
|
563
|
+
requested: purpose,
|
|
564
|
+
limit: routeConfig.allowedPurposes,
|
|
565
|
+
message: `Purpose "${purpose}" is not in the allowed list: [${routeConfig.allowedPurposes.join(", ")}]`
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
if (routeConfig.requiredPurposes && routeConfig.requiredPurposes.length > 0 && purpose) {
|
|
570
|
+
if (!routeConfig.requiredPurposes.includes(purpose)) {
|
|
571
|
+
failures.push({
|
|
572
|
+
field: "purpose",
|
|
573
|
+
requested: purpose,
|
|
574
|
+
limit: routeConfig.requiredPurposes,
|
|
575
|
+
message: `Purpose "${purpose}" is not in the required list: [${routeConfig.requiredPurposes.join(", ")}]`
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
if (routeConfig.maxDuration && astraCreds?.pdlss?.duration?.maxSessionDuration) {
|
|
580
|
+
const requested = astraCreds.pdlss.duration.maxSessionDuration;
|
|
581
|
+
if (requested > routeConfig.maxDuration) {
|
|
582
|
+
failures.push({
|
|
583
|
+
field: "duration",
|
|
584
|
+
requested,
|
|
585
|
+
limit: routeConfig.maxDuration,
|
|
586
|
+
message: `Requested duration ${requested}s exceeds maximum ${routeConfig.maxDuration}s`
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
if (routeConfig.allowedJurisdictions && routeConfig.allowedJurisdictions.length > 0 && astraCreds?.pdlss?.scope?.jurisdiction) {
|
|
591
|
+
const requested = astraCreds.pdlss.scope.jurisdiction;
|
|
592
|
+
if (!routeConfig.allowedJurisdictions.includes(requested)) {
|
|
593
|
+
failures.push({
|
|
594
|
+
field: "jurisdiction",
|
|
595
|
+
requested,
|
|
596
|
+
limit: routeConfig.allowedJurisdictions,
|
|
597
|
+
message: `Jurisdiction "${requested}" is not in the allowed list: [${routeConfig.allowedJurisdictions.join(", ")}]`
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
return failures;
|
|
602
|
+
}
|
|
603
|
+
|
|
537
604
|
// src/adapters/express.ts
|
|
538
605
|
function defaultExtractCredentials(req) {
|
|
539
606
|
return extractCredentials(
|
|
@@ -545,6 +612,12 @@ function extractAstraSyncCredentials(req) {
|
|
|
545
612
|
return extractHttpCredentials(req.headers);
|
|
546
613
|
}
|
|
547
614
|
function defaultExtractPurpose(req) {
|
|
615
|
+
const astraPurpose = req.headers["x-astra-purpose"];
|
|
616
|
+
if (astraPurpose) {
|
|
617
|
+
const value = Array.isArray(astraPurpose) ? astraPurpose[0] : astraPurpose;
|
|
618
|
+
const category = value.split(":")[0];
|
|
619
|
+
return category;
|
|
620
|
+
}
|
|
548
621
|
const purposeHeader = req.headers["x-purpose"] || req.headers["X-Purpose"];
|
|
549
622
|
if (purposeHeader) {
|
|
550
623
|
return Array.isArray(purposeHeader) ? purposeHeader[0] : purposeHeader;
|
|
@@ -554,14 +627,14 @@ function defaultExtractPurpose(req) {
|
|
|
554
627
|
}
|
|
555
628
|
switch (req.method) {
|
|
556
629
|
case "GET":
|
|
557
|
-
return "
|
|
630
|
+
return "read_data";
|
|
558
631
|
case "POST":
|
|
559
|
-
return "
|
|
632
|
+
return "write_data";
|
|
560
633
|
case "PUT":
|
|
561
634
|
case "PATCH":
|
|
562
|
-
return "
|
|
635
|
+
return "write_data";
|
|
563
636
|
case "DELETE":
|
|
564
|
-
return "
|
|
637
|
+
return "delete_data";
|
|
565
638
|
default:
|
|
566
639
|
return "general";
|
|
567
640
|
}
|
|
@@ -598,6 +671,7 @@ function createMiddleware(options) {
|
|
|
598
671
|
skipPaths = [],
|
|
599
672
|
onDenied = defaultOnDenied,
|
|
600
673
|
recordDecisions,
|
|
674
|
+
enableRuntimeChallenge = true,
|
|
601
675
|
...config
|
|
602
676
|
} = options;
|
|
603
677
|
return async (req, res, next) => {
|
|
@@ -615,6 +689,16 @@ function createMiddleware(options) {
|
|
|
615
689
|
}
|
|
616
690
|
const credentials = customExtractCredentials ? customExtractCredentials(req) : defaultExtractCredentials(req);
|
|
617
691
|
if (!hasCredentials(credentials) && routeConfig.minAccessLevel !== "guidance") {
|
|
692
|
+
const counterpartyUrl2 = config.counterpartyUrl || `${req.protocol}://${req.get("host")}`;
|
|
693
|
+
reportUnregisteredAttempt(config, {
|
|
694
|
+
counterpartyUrl: counterpartyUrl2,
|
|
695
|
+
counterpartyType: config.counterpartyType || "api",
|
|
696
|
+
sourceIp: req.ip,
|
|
697
|
+
userAgent: req.headers["user-agent"],
|
|
698
|
+
requestPath: req.path,
|
|
699
|
+
requestMethod: req.method
|
|
700
|
+
}).catch(() => {
|
|
701
|
+
});
|
|
618
702
|
const result2 = {
|
|
619
703
|
verified: false,
|
|
620
704
|
accessLevel: "none",
|
|
@@ -631,6 +715,34 @@ function createMiddleware(options) {
|
|
|
631
715
|
return;
|
|
632
716
|
}
|
|
633
717
|
const purpose = customExtractPurpose ? customExtractPurpose(req) : defaultExtractPurpose(req);
|
|
718
|
+
const astraCreds = extractAstraSyncCredentials(req);
|
|
719
|
+
const counterpartyUrl = config.counterpartyUrl || `${req.protocol}://${req.get("host")}`;
|
|
720
|
+
const preCheckFailures = performCounterpartyPreCheck(routeConfig, astraCreds, purpose);
|
|
721
|
+
if (preCheckFailures.length > 0) {
|
|
722
|
+
const result2 = {
|
|
723
|
+
verified: false,
|
|
724
|
+
accessLevel: "none",
|
|
725
|
+
denialReasons: preCheckFailures.map((f) => f.message),
|
|
726
|
+
guidance: {
|
|
727
|
+
message: "Request exceeds counterparty-defined PDLSS limits.",
|
|
728
|
+
registrationUrl: `${config.apiBaseUrl?.replace("/api", "")}/register`,
|
|
729
|
+
documentationUrl: `${config.apiBaseUrl?.replace("/api", "")}/docs/pdlss`
|
|
730
|
+
},
|
|
731
|
+
verifiedAt: /* @__PURE__ */ new Date()
|
|
732
|
+
};
|
|
733
|
+
req.agentVerification = result2;
|
|
734
|
+
reportCounterpartyPreCheckFailure(config, {
|
|
735
|
+
agentId: astraCreds?.agentId || credentials.astraId || "unknown",
|
|
736
|
+
counterpartyUrl,
|
|
737
|
+
counterpartyType: config.counterpartyType || "api",
|
|
738
|
+
failures: preCheckFailures,
|
|
739
|
+
requestPath: req.path,
|
|
740
|
+
requestMethod: req.method
|
|
741
|
+
}).catch(() => {
|
|
742
|
+
});
|
|
743
|
+
onDenied(result2, req, res);
|
|
744
|
+
return;
|
|
745
|
+
}
|
|
634
746
|
const shouldRecordDecisions = recordDecisions !== false;
|
|
635
747
|
const result = await verify(config, {
|
|
636
748
|
credentials,
|
|
@@ -639,7 +751,11 @@ function createMiddleware(options) {
|
|
|
639
751
|
resource: req.path,
|
|
640
752
|
clientIp: req.ip,
|
|
641
753
|
userAgent: req.headers["user-agent"],
|
|
642
|
-
createSession: shouldRecordDecisions
|
|
754
|
+
createSession: shouldRecordDecisions,
|
|
755
|
+
counterpartyUrl,
|
|
756
|
+
counterpartyType: config.counterpartyType || "api",
|
|
757
|
+
enableRuntimeChallenge,
|
|
758
|
+
durationRequired: astraCreds?.pdlss?.duration?.maxSessionDuration
|
|
643
759
|
});
|
|
644
760
|
req.agentVerification = result;
|
|
645
761
|
const sessionId = result.sessionId;
|
|
@@ -678,17 +794,13 @@ function createMiddleware(options) {
|
|
|
678
794
|
function requireAccess(minAccessLevel, options) {
|
|
679
795
|
return createMiddleware({
|
|
680
796
|
...options,
|
|
681
|
-
routes: [
|
|
682
|
-
{ pattern: "*", method: "*", minAccessLevel }
|
|
683
|
-
]
|
|
797
|
+
routes: [{ pattern: "*", method: "*", minAccessLevel }]
|
|
684
798
|
});
|
|
685
799
|
}
|
|
686
800
|
function verifyOnly(options) {
|
|
687
801
|
return createMiddleware({
|
|
688
802
|
...options,
|
|
689
|
-
routes: [
|
|
690
|
-
{ pattern: "*", method: "*", minAccessLevel: "none" }
|
|
691
|
-
]
|
|
803
|
+
routes: [{ pattern: "*", method: "*", minAccessLevel: "none" }]
|
|
692
804
|
});
|
|
693
805
|
}
|
|
694
806
|
|
|
@@ -738,17 +850,32 @@ function findRouteConfig2(routes, path, method) {
|
|
|
738
850
|
return methodMatches && pathMatches;
|
|
739
851
|
});
|
|
740
852
|
}
|
|
741
|
-
function
|
|
742
|
-
|
|
853
|
+
function extractAstraSyncCredentialsFromNextRequest(request) {
|
|
854
|
+
const headers = {};
|
|
855
|
+
request.headers.forEach((value, key) => {
|
|
856
|
+
headers[key] = value;
|
|
857
|
+
});
|
|
858
|
+
return extractHttpCredentials(headers);
|
|
859
|
+
}
|
|
860
|
+
function extractPurpose(request) {
|
|
861
|
+
const astraPurpose = request.headers.get("x-astra-purpose");
|
|
862
|
+
if (astraPurpose) {
|
|
863
|
+
return astraPurpose.split(":")[0];
|
|
864
|
+
}
|
|
865
|
+
const purposeHeader = request.headers.get("x-purpose");
|
|
866
|
+
if (purposeHeader) {
|
|
867
|
+
return purposeHeader;
|
|
868
|
+
}
|
|
869
|
+
switch (request.method.toUpperCase()) {
|
|
743
870
|
case "GET":
|
|
744
|
-
return "
|
|
871
|
+
return "read_data";
|
|
745
872
|
case "POST":
|
|
746
|
-
return "
|
|
873
|
+
return "write_data";
|
|
747
874
|
case "PUT":
|
|
748
875
|
case "PATCH":
|
|
749
|
-
return "
|
|
876
|
+
return "write_data";
|
|
750
877
|
case "DELETE":
|
|
751
|
-
return "
|
|
878
|
+
return "delete_data";
|
|
752
879
|
default:
|
|
753
880
|
return "general";
|
|
754
881
|
}
|
|
@@ -900,12 +1027,7 @@ function generateCommerceShieldHtml(result, options) {
|
|
|
900
1027
|
`.trim();
|
|
901
1028
|
}
|
|
902
1029
|
function createMiddleware2(options) {
|
|
903
|
-
const {
|
|
904
|
-
routes = [],
|
|
905
|
-
skipPaths = [],
|
|
906
|
-
showCommerceShield = true,
|
|
907
|
-
...config
|
|
908
|
-
} = options;
|
|
1030
|
+
const { routes = [], skipPaths = [], showCommerceShield = true, enableRuntimeChallenge = true, ...config } = options;
|
|
909
1031
|
return async function middleware(request) {
|
|
910
1032
|
const { NextResponse } = await import("next/server");
|
|
911
1033
|
const pathname = request.nextUrl.pathname;
|
|
@@ -922,6 +1044,16 @@ function createMiddleware2(options) {
|
|
|
922
1044
|
}
|
|
923
1045
|
const credentials = extractCredentialsFromNextRequest(request);
|
|
924
1046
|
if (!hasCredentials(credentials) && routeConfig.minAccessLevel !== "guidance") {
|
|
1047
|
+
const counterpartyUrl2 = config.counterpartyUrl || request.nextUrl.origin;
|
|
1048
|
+
reportUnregisteredAttempt(config, {
|
|
1049
|
+
counterpartyUrl: counterpartyUrl2,
|
|
1050
|
+
counterpartyType: config.counterpartyType || "website",
|
|
1051
|
+
sourceIp: request.headers.get("x-forwarded-for") || request.headers.get("x-real-ip") || void 0,
|
|
1052
|
+
userAgent: request.headers.get("user-agent") || void 0,
|
|
1053
|
+
requestPath: pathname,
|
|
1054
|
+
requestMethod: request.method
|
|
1055
|
+
}).catch(() => {
|
|
1056
|
+
});
|
|
925
1057
|
const result2 = {
|
|
926
1058
|
verified: false,
|
|
927
1059
|
accessLevel: "none",
|
|
@@ -958,14 +1090,66 @@ function createMiddleware2(options) {
|
|
|
958
1090
|
const registerUrl = result2.guidance?.registrationUrl || "/register";
|
|
959
1091
|
return NextResponse.redirect(new URL(registerUrl, request.url));
|
|
960
1092
|
}
|
|
961
|
-
const
|
|
1093
|
+
const counterpartyUrl = config.counterpartyUrl || request.nextUrl.origin;
|
|
1094
|
+
const purpose = extractPurpose(request);
|
|
1095
|
+
const astraCreds = extractAstraSyncCredentialsFromNextRequest(request);
|
|
1096
|
+
const preCheckFailures = performCounterpartyPreCheck(routeConfig, astraCreds, purpose);
|
|
1097
|
+
if (preCheckFailures.length > 0) {
|
|
1098
|
+
const preCheckResult = {
|
|
1099
|
+
verified: false,
|
|
1100
|
+
accessLevel: "none",
|
|
1101
|
+
denialReasons: preCheckFailures.map((f) => f.message),
|
|
1102
|
+
guidance: {
|
|
1103
|
+
message: "Request exceeds counterparty-defined PDLSS limits.",
|
|
1104
|
+
registrationUrl: `${config.apiBaseUrl?.replace("/api", "")}/register`,
|
|
1105
|
+
documentationUrl: `${config.apiBaseUrl?.replace("/api", "")}/docs/pdlss`
|
|
1106
|
+
},
|
|
1107
|
+
verifiedAt: /* @__PURE__ */ new Date()
|
|
1108
|
+
};
|
|
1109
|
+
reportCounterpartyPreCheckFailure(config, {
|
|
1110
|
+
agentId: astraCreds?.agentId || credentials.astraId || "unknown",
|
|
1111
|
+
counterpartyUrl,
|
|
1112
|
+
counterpartyType: config.counterpartyType || "website",
|
|
1113
|
+
failures: preCheckFailures,
|
|
1114
|
+
requestPath: pathname,
|
|
1115
|
+
requestMethod: request.method
|
|
1116
|
+
}).catch(() => {
|
|
1117
|
+
});
|
|
1118
|
+
if (pathname.startsWith("/api/")) {
|
|
1119
|
+
return NextResponse.json(
|
|
1120
|
+
{
|
|
1121
|
+
success: false,
|
|
1122
|
+
error: {
|
|
1123
|
+
code: "PDLSS_PRE_CHECK_FAILED",
|
|
1124
|
+
message: preCheckResult.denialReasons?.[0] || "PDLSS pre-check failed",
|
|
1125
|
+
guidance: preCheckResult.guidance
|
|
1126
|
+
}
|
|
1127
|
+
},
|
|
1128
|
+
{ status: 403 }
|
|
1129
|
+
);
|
|
1130
|
+
}
|
|
1131
|
+
if (showCommerceShield) {
|
|
1132
|
+
return new NextResponse(generateCommerceShieldHtml(preCheckResult, options), {
|
|
1133
|
+
status: 200,
|
|
1134
|
+
headers: {
|
|
1135
|
+
"Content-Type": "text/html",
|
|
1136
|
+
"X-AstraSync-Verification": "commerce-shield"
|
|
1137
|
+
}
|
|
1138
|
+
});
|
|
1139
|
+
}
|
|
1140
|
+
return NextResponse.redirect(new URL("/unauthorized", request.url));
|
|
1141
|
+
}
|
|
962
1142
|
const result = await verify(config, {
|
|
963
1143
|
credentials,
|
|
964
1144
|
purpose,
|
|
965
1145
|
action: request.method.toLowerCase(),
|
|
966
1146
|
resource: pathname,
|
|
967
1147
|
clientIp: request.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || void 0,
|
|
968
|
-
userAgent: request.headers.get("user-agent") || void 0
|
|
1148
|
+
userAgent: request.headers.get("user-agent") || void 0,
|
|
1149
|
+
counterpartyUrl,
|
|
1150
|
+
counterpartyType: config.counterpartyType || "website",
|
|
1151
|
+
enableRuntimeChallenge,
|
|
1152
|
+
durationRequired: astraCreds?.pdlss?.duration?.maxSessionDuration
|
|
969
1153
|
});
|
|
970
1154
|
if (!hasMinimumAccess(result.accessLevel, routeConfig.minAccessLevel)) {
|
|
971
1155
|
if (pathname.startsWith("/api/")) {
|
|
@@ -1028,7 +1212,9 @@ var VerificationGatewayClient = class {
|
|
|
1028
1212
|
minTrustScoreForFull: options.minTrustScoreForFull,
|
|
1029
1213
|
cacheTtl: options.cacheTtl,
|
|
1030
1214
|
debug: options.debug,
|
|
1031
|
-
customHeaders: options.customHeaders
|
|
1215
|
+
customHeaders: options.customHeaders,
|
|
1216
|
+
counterpartyUrl: options.counterpartyUrl,
|
|
1217
|
+
counterpartyType: options.counterpartyType
|
|
1032
1218
|
};
|
|
1033
1219
|
this.timeout = options.timeout || 1e4;
|
|
1034
1220
|
this.retryConfig = options.retry || { maxRetries: 3, backoffMs: 1e3 };
|
|
@@ -1054,7 +1240,9 @@ var VerificationGatewayClient = class {
|
|
|
1054
1240
|
currency: options.currency,
|
|
1055
1241
|
isSubAgentRequest: options.isSubAgentRequest,
|
|
1056
1242
|
parentAgentId: options.parentAgentId,
|
|
1057
|
-
subAgentDepth: options.subAgentDepth
|
|
1243
|
+
subAgentDepth: options.subAgentDepth,
|
|
1244
|
+
counterpartyUrl: options.counterpartyUrl,
|
|
1245
|
+
counterpartyType: options.counterpartyType
|
|
1058
1246
|
})
|
|
1059
1247
|
);
|
|
1060
1248
|
}
|