@astrasyncai/verification-gateway 5.12.0 → 5.14.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/dist/adapters/express.js +63 -19
- package/dist/adapters/express.js.map +1 -1
- package/dist/adapters/express.mjs +63 -19
- package/dist/adapters/express.mjs.map +1 -1
- package/dist/adapters/mcp.js +26 -9
- package/dist/adapters/mcp.js.map +1 -1
- package/dist/adapters/mcp.mjs +26 -9
- package/dist/adapters/mcp.mjs.map +1 -1
- package/dist/adapters/nextjs.js +63 -19
- package/dist/adapters/nextjs.js.map +1 -1
- package/dist/adapters/nextjs.mjs +63 -19
- package/dist/adapters/nextjs.mjs.map +1 -1
- package/dist/adapters/sdk.js +26 -9
- package/dist/adapters/sdk.js.map +1 -1
- package/dist/adapters/sdk.mjs +26 -9
- 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 +53 -18
- package/dist/bin/astrasync-codex-hook.js +53 -18
- package/dist/bin/astrasync-guard.js +53 -18
- package/dist/bin/astrasync.js +54 -19
- package/dist/browser/background.js +53 -18
- package/dist/browser/background.js.map +1 -1
- package/dist/browser/background.mjs +53 -18
- 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 +53 -18
- package/dist/codex/index.js.map +1 -1
- package/dist/codex/index.mjs +53 -18
- package/dist/codex/index.mjs.map +1 -1
- package/dist/cursor/extension.js +53 -18
- package/dist/cursor/extension.js.map +1 -1
- package/dist/cursor/extension.mjs +53 -18
- package/dist/cursor/extension.mjs.map +1 -1
- package/dist/edge-config.js +1 -1
- package/dist/edge-config.js.map +1 -1
- package/dist/edge-config.mjs +1 -1
- package/dist/edge-config.mjs.map +1 -1
- package/dist/edge-core/index.d.mts +32 -4
- package/dist/edge-core/index.d.ts +32 -4
- package/dist/edge-core/index.js +53 -18
- package/dist/edge-core/index.js.map +1 -1
- package/dist/edge-core/index.mjs +53 -18
- package/dist/edge-core/index.mjs.map +1 -1
- package/dist/gateway/gateway.js +53 -18
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/gateway.mjs +53 -18
- package/dist/gateway/gateway.mjs.map +1 -1
- package/dist/index.d.mts +2 -12
- package/dist/index.d.ts +2 -12
- package/dist/index.js +63 -19
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +63 -19
- package/dist/index.mjs.map +1 -1
- package/dist/registration/index.js +1 -1
- package/dist/registration/index.js.map +1 -1
- package/dist/registration/index.mjs +1 -1
- package/dist/registration/index.mjs.map +1 -1
- package/dist/transport/index.js +1 -1
- package/dist/transport/index.js.map +1 -1
- package/dist/transport/index.mjs +1 -1
- package/dist/transport/index.mjs.map +1 -1
- package/dist/verify.d.mts +0 -10
- package/dist/verify.d.ts +0 -10
- package/dist/verify.js +36 -10
- package/dist/verify.js.map +1 -1
- package/dist/verify.mjs +36 -10
- package/dist/verify.mjs.map +1 -1
- package/package.json +3 -2
package/dist/codex/index.js
CHANGED
|
@@ -4036,7 +4036,7 @@ function getTrustLevel(score) {
|
|
|
4036
4036
|
}
|
|
4037
4037
|
|
|
4038
4038
|
// src/version.ts
|
|
4039
|
-
var SDK_VERSION = "5.
|
|
4039
|
+
var SDK_VERSION = "5.14.0";
|
|
4040
4040
|
|
|
4041
4041
|
// src/http.ts
|
|
4042
4042
|
var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
|
|
@@ -4083,7 +4083,7 @@ var DEFAULT_CONFIG = {
|
|
|
4083
4083
|
};
|
|
4084
4084
|
var initCheckPerformed = false;
|
|
4085
4085
|
var deprecationWarningShown = false;
|
|
4086
|
-
async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
|
|
4086
|
+
async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey, counterparty) {
|
|
4087
4087
|
initCheckPerformed = true;
|
|
4088
4088
|
try {
|
|
4089
4089
|
const probeUrl = `${apiBaseUrl}/agents/verify-access`;
|
|
@@ -4101,7 +4101,8 @@ async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
|
|
|
4101
4101
|
);
|
|
4102
4102
|
}
|
|
4103
4103
|
if (apiKey) {
|
|
4104
|
-
const
|
|
4104
|
+
const q = counterparty?.id ? `?counterpartyId=${encodeURIComponent(counterparty.id)}` : counterparty?.url ? `?counterpartyUrl=${encodeURIComponent(counterparty.url)}` : "";
|
|
4105
|
+
const selfCheck = await sdkFetch(`${apiBaseUrl}/agents/verify-access/self-check${q}`, {
|
|
4105
4106
|
headers: { Authorization: `Bearer ${apiKey}` }
|
|
4106
4107
|
});
|
|
4107
4108
|
if (selfCheck.status === 401) {
|
|
@@ -4113,6 +4114,13 @@ async function performInitCheck(apiBaseUrl, debug, strictInit, apiKey) {
|
|
|
4113
4114
|
console.error(message);
|
|
4114
4115
|
} else if (selfCheck.ok) {
|
|
4115
4116
|
const body = await selfCheck.json().catch(() => ({}));
|
|
4117
|
+
if (body.counterparty && body.counterparty.canVerify === false) {
|
|
4118
|
+
const message = `[VerificationGateway] the configured AstraSync API key cannot verify for this endpoint (${body.counterparty.message ?? "endpoint not found or owned by another account"}). Every inbound agent will be turned away until the key or counterparty is corrected.`;
|
|
4119
|
+
if (strictInit) {
|
|
4120
|
+
throw new Error(`${message} (strictInit=true)`);
|
|
4121
|
+
}
|
|
4122
|
+
console.error(message);
|
|
4123
|
+
}
|
|
4116
4124
|
if (typeof body.daysToExpiry === "number" && body.daysToExpiry <= 7) {
|
|
4117
4125
|
console.warn(
|
|
4118
4126
|
`[VerificationGateway] the configured AstraSync API key expires in ${body.daysToExpiry} day(s) \u2014 rotate it at Settings \u2192 Developer Tools before integrations start failing.`
|
|
@@ -4217,11 +4225,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
|
|
|
4217
4225
|
const isMisconfig = source === "merchant_misconfig";
|
|
4218
4226
|
const urls = options.urls;
|
|
4219
4227
|
const guidance = isMisconfig ? {
|
|
4220
|
-
message: "This site's AstraSync integration is misconfigured (its API key was revoked, expired, or
|
|
4228
|
+
message: "This site's AstraSync integration is misconfigured (its API key was revoked, expired, rotated, or belongs to another account). Your identity and the AstraSync platform are fine \u2014 contact the site operator. Retrying will not help.",
|
|
4221
4229
|
registrationUrl: urls?.registrationUrl ?? "",
|
|
4222
4230
|
documentationUrl: options.remediation?.docsUrl ?? urls?.documentationUrl ?? "",
|
|
4223
4231
|
steps: [
|
|
4224
|
-
"Report the failure to the site operator \u2014 their AstraSync API key needs
|
|
4232
|
+
"Report the failure to the site operator \u2014 their AstraSync API key needs replacing",
|
|
4225
4233
|
"Do not retry: the failure is deterministic until the operator updates their key"
|
|
4226
4234
|
]
|
|
4227
4235
|
} : isApiError ? {
|
|
@@ -4433,12 +4441,13 @@ async function callVerifyAccessAPI(config, request) {
|
|
|
4433
4441
|
};
|
|
4434
4442
|
}
|
|
4435
4443
|
if (!response.ok) {
|
|
4436
|
-
|
|
4444
|
+
const keyMismatch = response.status === 403 && data?.error === "COUNTERPARTY_KEY_MISMATCH";
|
|
4445
|
+
if (response.status === 401 || keyMismatch) {
|
|
4437
4446
|
return {
|
|
4438
4447
|
success: false,
|
|
4439
4448
|
error: data.message || data.error || "Integration API key rejected",
|
|
4440
4449
|
misconfig: true,
|
|
4441
|
-
misconfigCode: typeof data?.code === "string" ? data.code : void 0,
|
|
4450
|
+
misconfigCode: keyMismatch ? "counterparty_key_mismatch" : typeof data?.code === "string" ? data.code : void 0,
|
|
4442
4451
|
remediation: data?.remediation && typeof data.remediation === "object" ? data.remediation : void 0,
|
|
4443
4452
|
correlationId: typeof data?.correlationId === "string" ? data.correlationId : void 0,
|
|
4444
4453
|
attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0
|
|
@@ -4471,14 +4480,22 @@ async function verify(config, request, options) {
|
|
|
4471
4480
|
mergedConfig.apiBaseUrl,
|
|
4472
4481
|
mergedConfig.debug,
|
|
4473
4482
|
true,
|
|
4474
|
-
mergedConfig.apiKey
|
|
4483
|
+
mergedConfig.apiKey,
|
|
4484
|
+
{
|
|
4485
|
+
id: mergedConfig.counterpartyId,
|
|
4486
|
+
url: mergedConfig.counterpartyUrl ?? request.counterpartyUrl
|
|
4487
|
+
}
|
|
4475
4488
|
);
|
|
4476
4489
|
} else {
|
|
4477
4490
|
void performInitCheck(
|
|
4478
4491
|
mergedConfig.apiBaseUrl,
|
|
4479
4492
|
mergedConfig.debug,
|
|
4480
4493
|
false,
|
|
4481
|
-
mergedConfig.apiKey
|
|
4494
|
+
mergedConfig.apiKey,
|
|
4495
|
+
{
|
|
4496
|
+
id: mergedConfig.counterpartyId,
|
|
4497
|
+
url: mergedConfig.counterpartyUrl ?? request.counterpartyUrl
|
|
4498
|
+
}
|
|
4482
4499
|
);
|
|
4483
4500
|
}
|
|
4484
4501
|
}
|
|
@@ -4689,6 +4706,11 @@ async function withBudget(promise, ms) {
|
|
|
4689
4706
|
if (timer) clearTimeout(timer);
|
|
4690
4707
|
}
|
|
4691
4708
|
}
|
|
4709
|
+
var CONTAINER_ID = (() => {
|
|
4710
|
+
const c = globalThis.crypto;
|
|
4711
|
+
if (c?.randomUUID) return c.randomUUID();
|
|
4712
|
+
return `c-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
|
|
4713
|
+
})();
|
|
4692
4714
|
var destKeyOf = (d) => `${d.apiBaseUrl}\0${d.apiKey ?? ""}\0${d.counterparty}\0${d.adapter ?? ""}`;
|
|
4693
4715
|
var BeaconBuffer = class {
|
|
4694
4716
|
constructor(options = {}) {
|
|
@@ -4696,6 +4718,7 @@ var BeaconBuffer = class {
|
|
|
4696
4718
|
this.droppedSinceLast = 0;
|
|
4697
4719
|
this.droppedTotal = 0;
|
|
4698
4720
|
this.deliveredTotal = 0;
|
|
4721
|
+
this.enqueuedTotal = 0;
|
|
4699
4722
|
this.backoffUntil = 0;
|
|
4700
4723
|
this.collapse = /* @__PURE__ */ new Map();
|
|
4701
4724
|
/** Keys the backend answered 401 for — later batches go unauthenticated. */
|
|
@@ -4708,13 +4731,16 @@ var BeaconBuffer = class {
|
|
|
4708
4731
|
collapseMaxKeys: options.collapseMaxKeys ?? 1e3,
|
|
4709
4732
|
requestTimeoutMs: options.requestTimeoutMs ?? 1e4,
|
|
4710
4733
|
retryBackoffMs: options.retryBackoffMs ?? 1e3,
|
|
4734
|
+
holdRepeats: options.holdRepeats ?? false,
|
|
4735
|
+
containerId: options.containerId ?? CONTAINER_ID,
|
|
4711
4736
|
now: options.now ?? Date.now
|
|
4712
4737
|
};
|
|
4713
4738
|
}
|
|
4714
4739
|
/**
|
|
4715
4740
|
* Queue one beacon. With a `collapseKey`, a repeat inside the window is
|
|
4716
|
-
* merged into
|
|
4717
|
-
*
|
|
4741
|
+
* merged into this key's item while that item is still queued (not yet in
|
|
4742
|
+
* flight). Once it has left, the repeat becomes a new item, sendable on
|
|
4743
|
+
* this flush — nothing waits for a later invocation (round 27.6).
|
|
4718
4744
|
*/
|
|
4719
4745
|
enqueue(dest, item, collapseKey) {
|
|
4720
4746
|
const now = this.opts.now();
|
|
@@ -4727,12 +4753,15 @@ var BeaconBuffer = class {
|
|
|
4727
4753
|
return;
|
|
4728
4754
|
}
|
|
4729
4755
|
}
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
|
|
4756
|
+
if (this.opts.holdRepeats) {
|
|
4757
|
+
entry.held = this.push(
|
|
4758
|
+
dest,
|
|
4759
|
+
{ ...item, repeatCount: 1 },
|
|
4760
|
+
entry.firstSeenAt + this.opts.collapseWindowMs
|
|
4761
|
+
);
|
|
4762
|
+
return;
|
|
4763
|
+
}
|
|
4764
|
+
entry.first = this.push(dest, { ...item, repeatCount: 1 }, now);
|
|
4736
4765
|
return;
|
|
4737
4766
|
}
|
|
4738
4767
|
this.collapse.delete(collapseKey);
|
|
@@ -4768,6 +4797,7 @@ var BeaconBuffer = class {
|
|
|
4768
4797
|
droppedSinceLast: this.droppedSinceLast,
|
|
4769
4798
|
droppedTotal: this.droppedTotal,
|
|
4770
4799
|
deliveredTotal: this.deliveredTotal,
|
|
4800
|
+
enqueuedTotal: this.enqueuedTotal,
|
|
4771
4801
|
flushing: this.inFlight !== void 0
|
|
4772
4802
|
};
|
|
4773
4803
|
}
|
|
@@ -4782,6 +4812,7 @@ var BeaconBuffer = class {
|
|
|
4782
4812
|
inFlight: false
|
|
4783
4813
|
};
|
|
4784
4814
|
this.queue.push(entry);
|
|
4815
|
+
this.enqueuedTotal += 1;
|
|
4785
4816
|
return entry;
|
|
4786
4817
|
}
|
|
4787
4818
|
dropOldest() {
|
|
@@ -4827,7 +4858,11 @@ var BeaconBuffer = class {
|
|
|
4827
4858
|
droppedSinceLast: reportedDropped,
|
|
4828
4859
|
queueDepth: this.queue.length,
|
|
4829
4860
|
adapter: dest.adapter ?? "edge-core",
|
|
4830
|
-
version: SDK_VERSION
|
|
4861
|
+
version: SDK_VERSION,
|
|
4862
|
+
containerId: this.opts.containerId,
|
|
4863
|
+
enqueuedTotal: this.enqueuedTotal,
|
|
4864
|
+
deliveredTotal: this.deliveredTotal,
|
|
4865
|
+
droppedTotal: this.droppedTotal
|
|
4831
4866
|
};
|
|
4832
4867
|
const controller = typeof AbortController !== "undefined" ? new AbortController() : void 0;
|
|
4833
4868
|
const response = await withBudget(
|