@agentcash/router 1.2.1 → 1.2.2
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.cjs +39 -16
- package/dist/index.js +39 -16
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -741,30 +741,53 @@ async function buildChallengeRequirements(server, request, price, accepts, resou
|
|
|
741
741
|
function needsFacilitatorEnrichment(accepts) {
|
|
742
742
|
return accepts.some((accept) => accept.scheme !== "exact") || hasSolanaAccepts(accepts);
|
|
743
743
|
}
|
|
744
|
+
async function enrichGroup(group, resource) {
|
|
745
|
+
const accepted = await enrichRequirementsWithFacilitatorAccepts(
|
|
746
|
+
group.facilitator,
|
|
747
|
+
resource,
|
|
748
|
+
group.items.map(({ requirement }) => requirement)
|
|
749
|
+
);
|
|
750
|
+
if (accepted.length !== group.items.length) {
|
|
751
|
+
throw new Error(
|
|
752
|
+
`Facilitator /accepts returned ${accepted.length} requirements for ${group.items.length} inputs on ${group.facilitator.url ?? group.facilitator.network}`
|
|
753
|
+
);
|
|
754
|
+
}
|
|
755
|
+
return accepted;
|
|
756
|
+
}
|
|
744
757
|
async function enrichChallengeRequirements(requirements, resource, facilitatorsByNetwork) {
|
|
745
758
|
const groups = collectEnrichmentGroups(requirements, facilitatorsByNetwork);
|
|
746
759
|
if (groups.length === 0) return requirements;
|
|
747
|
-
const
|
|
748
|
-
await Promise.all(
|
|
760
|
+
const results = await Promise.all(
|
|
749
761
|
groups.map(async (group) => {
|
|
750
|
-
|
|
751
|
-
group
|
|
752
|
-
|
|
753
|
-
group.
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
`Facilitator /accepts returned ${enriched.length} requirements for ${group.items.length} inputs on ${group.facilitator.url ?? group.facilitator.network}`
|
|
762
|
+
try {
|
|
763
|
+
return { success: true, group, accepted: await enrichGroup(group, resource) };
|
|
764
|
+
} catch (err) {
|
|
765
|
+
const label = group.facilitator.url ?? group.facilitator.network;
|
|
766
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
767
|
+
console.warn(
|
|
768
|
+
`[router] ${label} /accepts failed, dropping ${group.items.length} requirement(s): ${reason}`
|
|
758
769
|
);
|
|
770
|
+
return { success: false, group };
|
|
759
771
|
}
|
|
760
|
-
enriched.forEach((requirement, offset) => {
|
|
761
|
-
const index = group.items[offset]?.index;
|
|
762
|
-
if (index === void 0) return;
|
|
763
|
-
enrichedRequirements[index] = requirement;
|
|
764
|
-
});
|
|
765
772
|
})
|
|
766
773
|
);
|
|
767
|
-
|
|
774
|
+
const enriched = [...requirements];
|
|
775
|
+
results.filter((r) => r.success).forEach(({ group, accepted }) => {
|
|
776
|
+
accepted.forEach((req, offset) => {
|
|
777
|
+
const index = group.items[offset]?.index;
|
|
778
|
+
if (index !== void 0) enriched[index] = req;
|
|
779
|
+
});
|
|
780
|
+
});
|
|
781
|
+
const failedIndices = new Set(
|
|
782
|
+
results.filter((r) => !r.success).flatMap(({ group }) => group.items.map(({ index }) => index))
|
|
783
|
+
);
|
|
784
|
+
const remaining = enriched.filter((_, i) => !failedIndices.has(i));
|
|
785
|
+
if (remaining.length === 0) {
|
|
786
|
+
throw new Error(
|
|
787
|
+
"All facilitator enrichments failed; no payment requirements remain for challenge"
|
|
788
|
+
);
|
|
789
|
+
}
|
|
790
|
+
return remaining;
|
|
768
791
|
}
|
|
769
792
|
function collectEnrichmentGroups(requirements, facilitatorsByNetwork) {
|
|
770
793
|
const groups = [];
|
package/dist/index.js
CHANGED
|
@@ -702,30 +702,53 @@ async function buildChallengeRequirements(server, request, price, accepts, resou
|
|
|
702
702
|
function needsFacilitatorEnrichment(accepts) {
|
|
703
703
|
return accepts.some((accept) => accept.scheme !== "exact") || hasSolanaAccepts(accepts);
|
|
704
704
|
}
|
|
705
|
+
async function enrichGroup(group, resource) {
|
|
706
|
+
const accepted = await enrichRequirementsWithFacilitatorAccepts(
|
|
707
|
+
group.facilitator,
|
|
708
|
+
resource,
|
|
709
|
+
group.items.map(({ requirement }) => requirement)
|
|
710
|
+
);
|
|
711
|
+
if (accepted.length !== group.items.length) {
|
|
712
|
+
throw new Error(
|
|
713
|
+
`Facilitator /accepts returned ${accepted.length} requirements for ${group.items.length} inputs on ${group.facilitator.url ?? group.facilitator.network}`
|
|
714
|
+
);
|
|
715
|
+
}
|
|
716
|
+
return accepted;
|
|
717
|
+
}
|
|
705
718
|
async function enrichChallengeRequirements(requirements, resource, facilitatorsByNetwork) {
|
|
706
719
|
const groups = collectEnrichmentGroups(requirements, facilitatorsByNetwork);
|
|
707
720
|
if (groups.length === 0) return requirements;
|
|
708
|
-
const
|
|
709
|
-
await Promise.all(
|
|
721
|
+
const results = await Promise.all(
|
|
710
722
|
groups.map(async (group) => {
|
|
711
|
-
|
|
712
|
-
group
|
|
713
|
-
|
|
714
|
-
group.
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
`Facilitator /accepts returned ${enriched.length} requirements for ${group.items.length} inputs on ${group.facilitator.url ?? group.facilitator.network}`
|
|
723
|
+
try {
|
|
724
|
+
return { success: true, group, accepted: await enrichGroup(group, resource) };
|
|
725
|
+
} catch (err) {
|
|
726
|
+
const label = group.facilitator.url ?? group.facilitator.network;
|
|
727
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
728
|
+
console.warn(
|
|
729
|
+
`[router] ${label} /accepts failed, dropping ${group.items.length} requirement(s): ${reason}`
|
|
719
730
|
);
|
|
731
|
+
return { success: false, group };
|
|
720
732
|
}
|
|
721
|
-
enriched.forEach((requirement, offset) => {
|
|
722
|
-
const index = group.items[offset]?.index;
|
|
723
|
-
if (index === void 0) return;
|
|
724
|
-
enrichedRequirements[index] = requirement;
|
|
725
|
-
});
|
|
726
733
|
})
|
|
727
734
|
);
|
|
728
|
-
|
|
735
|
+
const enriched = [...requirements];
|
|
736
|
+
results.filter((r) => r.success).forEach(({ group, accepted }) => {
|
|
737
|
+
accepted.forEach((req, offset) => {
|
|
738
|
+
const index = group.items[offset]?.index;
|
|
739
|
+
if (index !== void 0) enriched[index] = req;
|
|
740
|
+
});
|
|
741
|
+
});
|
|
742
|
+
const failedIndices = new Set(
|
|
743
|
+
results.filter((r) => !r.success).flatMap(({ group }) => group.items.map(({ index }) => index))
|
|
744
|
+
);
|
|
745
|
+
const remaining = enriched.filter((_, i) => !failedIndices.has(i));
|
|
746
|
+
if (remaining.length === 0) {
|
|
747
|
+
throw new Error(
|
|
748
|
+
"All facilitator enrichments failed; no payment requirements remain for challenge"
|
|
749
|
+
);
|
|
750
|
+
}
|
|
751
|
+
return remaining;
|
|
729
752
|
}
|
|
730
753
|
function collectEnrichmentGroups(requirements, facilitatorsByNetwork) {
|
|
731
754
|
const groups = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentcash/router",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "Unified route builder for Next.js App Router APIs with x402, MPP, SIWX, and API key auth",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
"@x402/extensions": "^2.3.0",
|
|
62
62
|
"@x402/svm": "2.3.0",
|
|
63
63
|
"eslint": "^10.0.0",
|
|
64
|
-
"mppx": "^0.4.
|
|
64
|
+
"mppx": "^0.4.8",
|
|
65
65
|
"next": "^15.0.0",
|
|
66
66
|
"prettier": "^3.8.1",
|
|
67
67
|
"react": "^19.0.0",
|