@astrasyncai/verification-gateway 5.13.0 → 5.15.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.
- package/README.md +27 -17
- package/dist/adapters/express.d.mts +1 -1
- package/dist/adapters/express.d.ts +1 -1
- package/dist/adapters/express.js +504 -249
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +504 -249
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.d.mts +1 -1
- package/dist/adapters/mcp.d.ts +1 -1
- package/dist/adapters/mcp.js +20 -6
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +20 -6
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.d.mts +1 -1
- package/dist/adapters/nextjs.d.ts +1 -1
- package/dist/adapters/nextjs.js +487 -248
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +487 -248
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.d.mts +18 -10
- package/dist/adapters/sdk.d.ts +18 -10
- package/dist/adapters/sdk.js +80 -23
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +80 -23
- package/dist/adapters/sdk.mjs.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +1 -1
- package/dist/agent/index.mjs.map +1 -1
- package/dist/bin/astrasync-claude-hook.js +82 -20
- package/dist/bin/astrasync-codex-hook.js +82 -20
- package/dist/bin/astrasync-guard.js +82 -20
- package/dist/bin/astrasync.js +316 -43
- package/dist/browser/background.js +77 -15
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +87 -15
- package/dist/browser/background.mjs.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +1 -1
- package/dist/cli/index.mjs.map +1 -1
- package/dist/codex/index.js +82 -20
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +92 -20
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/extension.js +82 -20
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +92 -20
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.d.mts +31 -2
- package/dist/edge-config.d.ts +31 -2
- package/dist/edge-config.js +35 -5
- package/dist/edge-config.js.map +1 -1
- package/dist/edge-config.mjs +32 -4
- package/dist/edge-config.mjs.map +1 -1
- package/dist/edge-core/index.d.mts +43 -6
- package/dist/edge-core/index.d.ts +43 -6
- package/dist/edge-core/index.js +120 -19
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +118 -19
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/gateway/gateway.js +77 -15
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +87 -15
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/git-trigger/git-hooks.d.mts +1 -1
- package/dist/git-trigger/git-hooks.d.ts +1 -1
- package/dist/index.d.mts +1314 -34
- package/dist/index.d.ts +1314 -34
- package/dist/index.js +5143 -2621
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5090 -2623
- package/dist/index.mjs.map +1 -1
- package/dist/registration/index.d.mts +28 -2
- package/dist/registration/index.d.ts +28 -2
- package/dist/registration/index.js +18 -3
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +15 -2
- package/dist/registration/index.mjs.map +1 -1
- package/dist/transport/index.d.mts +7 -5
- package/dist/transport/index.d.ts +7 -5
- package/dist/transport/index.js +61 -5
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +67 -11
- package/dist/transport/index.mjs.map +1 -1
- package/dist/{types-C_b4QTyO.d.ts → types-DtJjlW4O.d.ts} +104 -10
- package/dist/{types-BCkwBA84.d.mts → types-Dxf9DBpr.d.mts} +106 -12
- package/dist/{types-BCkwBA84.d.ts → types-Dxf9DBpr.d.ts} +106 -12
- package/dist/{types-DlshIIR-.d.mts → types-Eg6VoBNH.d.mts} +104 -10
- package/dist/ui/index.d.mts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/verify.d.mts +1 -1
- package/dist/verify.d.ts +1 -1
- package/dist/verify.js +20 -6
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +20 -6
- package/dist/verify.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cursor/extension.js
CHANGED
|
@@ -3994,7 +3994,7 @@ function getTrustLevel(score) {
|
|
|
3994
3994
|
}
|
|
3995
3995
|
|
|
3996
3996
|
// src/version.ts
|
|
3997
|
-
var SDK_VERSION = "5.
|
|
3997
|
+
var SDK_VERSION = "5.15.0";
|
|
3998
3998
|
|
|
3999
3999
|
// src/http.ts
|
|
4000
4000
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4313,6 +4313,7 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4313
4313
|
if (requestData.invocationProtocol) body.invocationProtocol = requestData.invocationProtocol;
|
|
4314
4314
|
if (requestData.commercePhase) body.commercePhase = requestData.commercePhase;
|
|
4315
4315
|
if (requestData.checkoutSessionId) body.checkoutSessionId = requestData.checkoutSessionId;
|
|
4316
|
+
if (requestData.checkoutJwt) body.checkoutJwt = requestData.checkoutJwt;
|
|
4316
4317
|
if (requestData.checkoutItems) body.checkoutItems = requestData.checkoutItems;
|
|
4317
4318
|
if (requestData.buyerEmail) body.buyerEmail = requestData.buyerEmail;
|
|
4318
4319
|
if (requestData.commerceArtifacts) body.commerceArtifacts = requestData.commerceArtifacts;
|
|
@@ -4463,7 +4464,8 @@ async function verify(config, request, options) {
|
|
|
4463
4464
|
"[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
|
|
4464
4465
|
);
|
|
4465
4466
|
}
|
|
4466
|
-
|
|
4467
|
+
const uncacheable = Boolean(request.commerceArtifacts);
|
|
4468
|
+
if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache && !uncacheable) {
|
|
4467
4469
|
const cached = getCachedResult(request, mergedConfig.counterpartyId);
|
|
4468
4470
|
if (cached) {
|
|
4469
4471
|
if (mergedConfig.debug) {
|
|
@@ -4544,7 +4546,10 @@ async function verify(config, request, options) {
|
|
|
4544
4546
|
// MERCHANT caller only (bridge callers strip it before the agent plane).
|
|
4545
4547
|
settlementToken: apiResponse.settlementToken,
|
|
4546
4548
|
// 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
|
|
4547
|
-
fulfilment: apiResponse.fulfilment
|
|
4549
|
+
fulfilment: apiResponse.fulfilment,
|
|
4550
|
+
mandates: apiResponse.mandates,
|
|
4551
|
+
kyaToken: apiResponse.kyaToken,
|
|
4552
|
+
aep: apiResponse.aep
|
|
4548
4553
|
};
|
|
4549
4554
|
return result2;
|
|
4550
4555
|
}
|
|
@@ -4554,7 +4559,10 @@ async function verify(config, request, options) {
|
|
|
4554
4559
|
trustScore: apiResponse.agent.trustScore,
|
|
4555
4560
|
trustLevel: getTrustLevel(apiResponse.agent.trustScore),
|
|
4556
4561
|
blockchainAnchored: apiResponse.agent.blockchainStatus === "anchored",
|
|
4557
|
-
status: apiResponse.agent.agentStatus
|
|
4562
|
+
status: apiResponse.agent.agentStatus,
|
|
4563
|
+
...apiResponse.agent.protocolIdentities && {
|
|
4564
|
+
protocolIdentities: apiResponse.agent.protocolIdentities
|
|
4565
|
+
}
|
|
4558
4566
|
} : void 0;
|
|
4559
4567
|
const developer = apiResponse.developer ? {
|
|
4560
4568
|
astradId: apiResponse.developer.kyaOwnerId,
|
|
@@ -4605,7 +4613,11 @@ async function verify(config, request, options) {
|
|
|
4605
4613
|
settlementOutcome: apiResponse.settlementOutcome,
|
|
4606
4614
|
settlementToken: apiResponse.settlementToken,
|
|
4607
4615
|
// 5.6.0: fulfilment contact — merchant-only lane, same strip rule.
|
|
4608
|
-
fulfilment: apiResponse.fulfilment
|
|
4616
|
+
fulfilment: apiResponse.fulfilment,
|
|
4617
|
+
// 5.15.0: merchant-lane AP2 mandates + KYAPay identity token.
|
|
4618
|
+
mandates: apiResponse.mandates,
|
|
4619
|
+
kyaToken: apiResponse.kyaToken,
|
|
4620
|
+
aep: apiResponse.aep
|
|
4609
4621
|
};
|
|
4610
4622
|
if (result.recommendation === "deny") {
|
|
4611
4623
|
result.policyAllowed = false;
|
|
@@ -4625,7 +4637,9 @@ async function verify(config, request, options) {
|
|
|
4625
4637
|
}
|
|
4626
4638
|
const escalates = result.requiresStepUp === true || result.requiresApproval === true || result.recommendation === "step_up_required";
|
|
4627
4639
|
if (mergedConfig.cacheTtl !== 0 && result.recommendation !== "deny" && !escalates) {
|
|
4628
|
-
|
|
4640
|
+
if (!uncacheable) {
|
|
4641
|
+
cacheResult(request, result, mergedConfig.cacheTtl, mergedConfig.counterpartyId);
|
|
4642
|
+
}
|
|
4629
4643
|
}
|
|
4630
4644
|
return result;
|
|
4631
4645
|
}
|
|
@@ -4636,6 +4650,9 @@ var FALLBACK_MAX_WAIT_MS = 5 * 60 * 1e3;
|
|
|
4636
4650
|
// src/metadata-capture.ts
|
|
4637
4651
|
var MAX_TOTAL_BYTES = 16 * 1024;
|
|
4638
4652
|
|
|
4653
|
+
// src/adapters/commerce-detect.ts
|
|
4654
|
+
var MAX_BODY_BYTES = 64 * 1024;
|
|
4655
|
+
|
|
4639
4656
|
// src/edge-config.ts
|
|
4640
4657
|
var DEFAULT_EDGE_CONFIG = Object.freeze({
|
|
4641
4658
|
version: 1,
|
|
@@ -4664,6 +4681,11 @@ async function withBudget(promise, ms) {
|
|
|
4664
4681
|
if (timer) clearTimeout(timer);
|
|
4665
4682
|
}
|
|
4666
4683
|
}
|
|
4684
|
+
var CONTAINER_ID = (() => {
|
|
4685
|
+
const c = globalThis.crypto;
|
|
4686
|
+
if (c?.randomUUID) return c.randomUUID();
|
|
4687
|
+
return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
|
|
4688
|
+
})();
|
|
4667
4689
|
var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
|
|
4668
4690
|
var BeaconBuffer = class {
|
|
4669
4691
|
constructor(options = {}) {
|
|
@@ -4671,6 +4693,7 @@ var BeaconBuffer = class {
|
|
|
4671
4693
|
this.droppedSinceLast = 0;
|
|
4672
4694
|
this.droppedTotal = 0;
|
|
4673
4695
|
this.deliveredTotal = 0;
|
|
4696
|
+
this.enqueuedTotal = 0;
|
|
4674
4697
|
this.backoffUntil = 0;
|
|
4675
4698
|
this.collapse = /* @__PURE__ */ new Map();
|
|
4676
4699
|
/** Keys the backend answered 401 for — later batches go unauthenticated. */
|
|
@@ -4683,13 +4706,16 @@ var BeaconBuffer = class {
|
|
|
4683
4706
|
collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
|
|
4684
4707
|
requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
|
|
4685
4708
|
retryBackoffMs: options.retryBackoffMs ?? 1e3,
|
|
4709
|
+
holdRepeats: options.holdRepeats ?? false,
|
|
4710
|
+
containerId: options.containerId ?? CONTAINER_ID,
|
|
4686
4711
|
now: options.now ?? Date.now
|
|
4687
4712
|
};
|
|
4688
4713
|
}
|
|
4689
4714
|
/**
|
|
4690
4715
|
* Queue one beacon. With a `collapseKey`, a repeat inside the window is
|
|
4691
|
-
* merged into
|
|
4692
|
-
*
|
|
4716
|
+
* merged into this key's item while that item is still queued (not yet in
|
|
4717
|
+
* flight). Once it has left, the repeat becomes a new item, sendable on
|
|
4718
|
+
* this flush — nothing waits for a later invocation (round 27.6).
|
|
4693
4719
|
*/
|
|
4694
4720
|
enqueue(dest, item, collapseKey) {
|
|
4695
4721
|
const now = this.opts.now();
|
|
@@ -4702,12 +4728,15 @@ var BeaconBuffer = class {
|
|
|
4702
4728
|
return;
|
|
4703
4729
|
}
|
|
4704
4730
|
}
|
|
4705
|
-
|
|
4706
|
-
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
|
|
4731
|
+
if (this.opts.holdRepeats) {
|
|
4732
|
+
entry.held = this.push(
|
|
4733
|
+
dest,
|
|
4734
|
+
{ ...item, repeatCount: 1 },
|
|
4735
|
+
entry.firstSeenAt + this.opts.collapseWindowMs
|
|
4736
|
+
);
|
|
4737
|
+
return;
|
|
4738
|
+
}
|
|
4739
|
+
entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
|
|
4711
4740
|
return;
|
|
4712
4741
|
}
|
|
4713
4742
|
this.collapse.delete(collapseKey);
|
|
@@ -4743,6 +4772,7 @@ var BeaconBuffer = class {
|
|
|
4743
4772
|
droppedSinceLast: this.droppedSinceLast,
|
|
4744
4773
|
droppedTotal: this.droppedTotal,
|
|
4745
4774
|
deliveredTotal: this.deliveredTotal,
|
|
4775
|
+
enqueuedTotal: this.enqueuedTotal,
|
|
4746
4776
|
flushing: this.inFlight !== void 0
|
|
4747
4777
|
};
|
|
4748
4778
|
}
|
|
@@ -4757,6 +4787,7 @@ var BeaconBuffer = class {
|
|
|
4757
4787
|
inFlight: false
|
|
4758
4788
|
};
|
|
4759
4789
|
this.queue.push(entry);
|
|
4790
|
+
this.enqueuedTotal += 1;
|
|
4760
4791
|
return entry;
|
|
4761
4792
|
}
|
|
4762
4793
|
dropOldest() {
|
|
@@ -4802,7 +4833,11 @@ var BeaconBuffer = class {
|
|
|
4802
4833
|
droppedSinceLast: reportedDropped,
|
|
4803
4834
|
queueDepth: this.queue.length,
|
|
4804
4835
|
adapter: dest.adapter ?? "edge-core",
|
|
4805
|
-
version: SDK_VERSION
|
|
4836
|
+
version: SDK_VERSION,
|
|
4837
|
+
containerId: this.opts.containerId,
|
|
4838
|
+
enqueuedTotal: this.enqueuedTotal,
|
|
4839
|
+
deliveredTotal: this.deliveredTotal,
|
|
4840
|
+
droppedTotal: this.droppedTotal
|
|
4806
4841
|
};
|
|
4807
4842
|
const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
|
|
4808
4843
|
const response = await withBudget(
|
|
@@ -4927,6 +4962,33 @@ var import_node_crypto4 = require("crypto");
|
|
|
4927
4962
|
// src/transport/registry/visa.ts
|
|
4928
4963
|
var import_jose = require("jose");
|
|
4929
4964
|
|
|
4965
|
+
// src/ucp/profile.ts
|
|
4966
|
+
var UCP_VERSION = "2026-08-25";
|
|
4967
|
+
var SPEC = `https://ucp.dev/${UCP_VERSION}/specification`;
|
|
4968
|
+
var SCHEMAS = `https://ucp.dev/${UCP_VERSION}/schemas`;
|
|
4969
|
+
|
|
4970
|
+
// src/ucp/signatures.ts
|
|
4971
|
+
var import_http_message_signatures3 = require("http-message-signatures");
|
|
4972
|
+
|
|
4973
|
+
// src/http-signatures/sign.ts
|
|
4974
|
+
var import_http_message_signatures2 = require("http-message-signatures");
|
|
4975
|
+
|
|
4976
|
+
// src/ucp/checkout-kit.ts
|
|
4977
|
+
var import_jose3 = require("jose");
|
|
4978
|
+
|
|
4979
|
+
// src/mandates/sd-jwt.ts
|
|
4980
|
+
var import_jose2 = require("jose");
|
|
4981
|
+
|
|
4982
|
+
// src/idempotency/index.ts
|
|
4983
|
+
var DEFAULT_IDEMPOTENCY_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
4984
|
+
|
|
4985
|
+
// src/payments/kyapay.ts
|
|
4986
|
+
var import_jose4 = require("jose");
|
|
4987
|
+
|
|
4988
|
+
// src/aep/core.ts
|
|
4989
|
+
var ED25519_PKCS8_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
|
|
4990
|
+
var ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
|
|
4991
|
+
|
|
4930
4992
|
// src/gateway/modes/online.ts
|
|
4931
4993
|
function toGatewayConfig(config) {
|
|
4932
4994
|
return {
|
|
@@ -5638,7 +5700,7 @@ async function sendHeartbeat(enrolment, request, timeoutMs = 1500) {
|
|
|
5638
5700
|
|
|
5639
5701
|
// src/fleet/policy-verify.ts
|
|
5640
5702
|
var import_crypto = require("crypto");
|
|
5641
|
-
var
|
|
5703
|
+
var import_jose5 = require("jose");
|
|
5642
5704
|
|
|
5643
5705
|
// src/fleet/types.ts
|
|
5644
5706
|
var FLEET_POLICY_TYP = "fleet-policy+jwt";
|
|
@@ -5687,8 +5749,8 @@ async function verifyFleetPolicy(jws, jwks, options) {
|
|
|
5687
5749
|
let payloadBytes;
|
|
5688
5750
|
let header;
|
|
5689
5751
|
try {
|
|
5690
|
-
const keySet = (0,
|
|
5691
|
-
const result = await (0,
|
|
5752
|
+
const keySet = (0, import_jose5.createLocalJWKSet)(jwks);
|
|
5753
|
+
const result = await (0, import_jose5.compactVerify)(jws, keySet, { algorithms: ["ES256"] });
|
|
5692
5754
|
payloadBytes = result.payload;
|
|
5693
5755
|
header = result.protectedHeader;
|
|
5694
5756
|
} catch (err) {
|
|
@@ -5734,9 +5796,9 @@ async function resolveFleetJwks(pinned, chain, ownerId) {
|
|
|
5734
5796
|
let lastSeq = 0;
|
|
5735
5797
|
for (const link of chain) {
|
|
5736
5798
|
try {
|
|
5737
|
-
const { payload, protectedHeader } = await (0,
|
|
5799
|
+
const { payload, protectedHeader } = await (0, import_jose5.compactVerify)(
|
|
5738
5800
|
link,
|
|
5739
|
-
(0,
|
|
5801
|
+
(0, import_jose5.createLocalJWKSet)(trusted),
|
|
5740
5802
|
{ algorithms: ["ES256"] }
|
|
5741
5803
|
);
|
|
5742
5804
|
if (protectedHeader.typ !== FLEET_KEYS_TYP) continue;
|