@astrasyncai/verification-gateway 5.14.0 → 5.16.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.
Files changed (100) hide show
  1. package/README.md +36 -18
  2. package/dist/adapters/express.d.mts +1 -1
  3. package/dist/adapters/express.d.ts +1 -1
  4. package/dist/adapters/express.js +492 -240
  5. package/dist/adapters/express.js.map +1 -1
  6. package/dist/adapters/express.mjs +492 -240
  7. package/dist/adapters/express.mjs.map +1 -1
  8. package/dist/adapters/mcp.d.mts +1 -1
  9. package/dist/adapters/mcp.d.ts +1 -1
  10. package/dist/adapters/mcp.js +23 -6
  11. package/dist/adapters/mcp.js.map +1 -1
  12. package/dist/adapters/mcp.mjs +23 -6
  13. package/dist/adapters/mcp.mjs.map +1 -1
  14. package/dist/adapters/nextjs.d.mts +1 -1
  15. package/dist/adapters/nextjs.d.ts +1 -1
  16. package/dist/adapters/nextjs.js +475 -239
  17. package/dist/adapters/nextjs.js.map +1 -1
  18. package/dist/adapters/nextjs.mjs +475 -239
  19. package/dist/adapters/nextjs.mjs.map +1 -1
  20. package/dist/adapters/sdk.d.mts +18 -10
  21. package/dist/adapters/sdk.d.ts +18 -10
  22. package/dist/adapters/sdk.js +83 -23
  23. package/dist/adapters/sdk.js.map +1 -1
  24. package/dist/adapters/sdk.mjs +83 -23
  25. package/dist/adapters/sdk.mjs.map +1 -1
  26. package/dist/agent/index.d.mts +69 -54
  27. package/dist/agent/index.d.ts +69 -54
  28. package/dist/agent/index.js +24 -14
  29. package/dist/agent/index.js.map +1 -1
  30. package/dist/agent/index.mjs +24 -14
  31. package/dist/agent/index.mjs.map +1 -1
  32. package/dist/bin/astrasync-claude-hook.js +58 -11
  33. package/dist/bin/astrasync-codex-hook.js +58 -11
  34. package/dist/bin/astrasync-guard.js +177 -11
  35. package/dist/bin/astrasync.js +433 -38
  36. package/dist/browser/background.js +53 -6
  37. package/dist/browser/background.js.map +1 -1
  38. package/dist/browser/background.mjs +63 -6
  39. package/dist/browser/background.mjs.map +1 -1
  40. package/dist/cli/index.js +1 -1
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/cli/index.mjs +1 -1
  43. package/dist/cli/index.mjs.map +1 -1
  44. package/dist/codex/index.js +58 -11
  45. package/dist/codex/index.js.map +1 -1
  46. package/dist/codex/index.mjs +68 -11
  47. package/dist/codex/index.mjs.map +1 -1
  48. package/dist/cursor/extension.js +58 -11
  49. package/dist/cursor/extension.js.map +1 -1
  50. package/dist/cursor/extension.mjs +68 -11
  51. package/dist/cursor/extension.mjs.map +1 -1
  52. package/dist/edge-config.d.mts +31 -2
  53. package/dist/edge-config.d.ts +31 -2
  54. package/dist/edge-config.js +35 -5
  55. package/dist/edge-config.js.map +1 -1
  56. package/dist/edge-config.mjs +32 -4
  57. package/dist/edge-config.mjs.map +1 -1
  58. package/dist/edge-core/index.d.mts +11 -2
  59. package/dist/edge-core/index.d.ts +11 -2
  60. package/dist/edge-core/index.js +97 -11
  61. package/dist/edge-core/index.js.map +1 -1
  62. package/dist/edge-core/index.mjs +95 -11
  63. package/dist/edge-core/index.mjs.map +1 -1
  64. package/dist/gateway/gateway.js +53 -6
  65. package/dist/gateway/gateway.js.map +1 -1
  66. package/dist/gateway/gateway.mjs +63 -6
  67. package/dist/gateway/gateway.mjs.map +1 -1
  68. package/dist/git-trigger/git-hooks.d.mts +1 -1
  69. package/dist/git-trigger/git-hooks.d.ts +1 -1
  70. package/dist/index.d.mts +1407 -88
  71. package/dist/index.d.ts +1407 -88
  72. package/dist/index.js +5148 -2616
  73. package/dist/index.js.map +1 -1
  74. package/dist/index.mjs +5094 -2618
  75. package/dist/index.mjs.map +1 -1
  76. package/dist/registration/index.d.mts +28 -2
  77. package/dist/registration/index.d.ts +28 -2
  78. package/dist/registration/index.js +18 -3
  79. package/dist/registration/index.js.map +1 -1
  80. package/dist/registration/index.mjs +15 -2
  81. package/dist/registration/index.mjs.map +1 -1
  82. package/dist/transport/index.d.mts +7 -5
  83. package/dist/transport/index.d.ts +7 -5
  84. package/dist/transport/index.js +61 -5
  85. package/dist/transport/index.js.map +1 -1
  86. package/dist/transport/index.mjs +67 -11
  87. package/dist/transport/index.mjs.map +1 -1
  88. package/dist/{types-BCkwBA84.d.mts → types-Blz520bR.d.mts} +116 -12
  89. package/dist/{types-BCkwBA84.d.ts → types-Blz520bR.d.ts} +116 -12
  90. package/dist/{types-C_b4QTyO.d.ts → types-Bm1QvGqI.d.ts} +114 -10
  91. package/dist/{types-DlshIIR-.d.mts → types-DBe4hgfT.d.mts} +114 -10
  92. package/dist/ui/index.d.mts +1 -1
  93. package/dist/ui/index.d.ts +1 -1
  94. package/dist/verify.d.mts +1 -1
  95. package/dist/verify.d.ts +1 -1
  96. package/dist/verify.js +23 -6
  97. package/dist/verify.js.map +1 -1
  98. package/dist/verify.mjs +23 -6
  99. package/dist/verify.mjs.map +1 -1
  100. package/package.json +1 -1
@@ -1,5 +1,60 @@
1
1
  import { A as AstraSyncCredentials, P as ProtocolTransport, G as GatewayConfig } from '../types-BfILnheI.mjs';
2
2
 
3
+ /**
4
+ * ChallengeHandler — Agent-Side Runtime Challenge Responder
5
+ *
6
+ * Handles incoming runtime challenges from AstraSync's verification service.
7
+ * Agents register pending counterparties before initiating contact,
8
+ * then this handler validates and responds to challenges.
9
+ */
10
+ interface ChallengeResponse {
11
+ status: number;
12
+ body: {
13
+ challengeId: string;
14
+ acknowledged: boolean;
15
+ pendingCounterparties: string[];
16
+ respondedAt: string;
17
+ error?: string;
18
+ };
19
+ }
20
+ interface ChallengeHandlerConfig {
21
+ agentId: string;
22
+ }
23
+ declare class ChallengeHandler {
24
+ private agentId;
25
+ /** Counterparty → in-flight interactions (two concurrent calls to one counterparty both count). */
26
+ private pendingCounterparties;
27
+ constructor(config: ChallengeHandlerConfig);
28
+ /**
29
+ * Register a counterparty as pending (before initiating contact).
30
+ */
31
+ registerPending(counterpartyId: string): void;
32
+ /**
33
+ * Remove a counterparty from pending list (after interaction complete).
34
+ */
35
+ removePending(counterpartyId: string): void;
36
+ /**
37
+ * Get current pending counterparties list.
38
+ */
39
+ getPendingList(): string[];
40
+ /**
41
+ * Express middleware for the challenge endpoint.
42
+ * Mount at: app.post('/astrasync/challenge', handler.expressMiddleware())
43
+ */
44
+ expressMiddleware(): (req: {
45
+ body: unknown;
46
+ }, res: {
47
+ status: (code: number) => {
48
+ json: (body: unknown) => void;
49
+ };
50
+ }) => void;
51
+ /**
52
+ * Generic handler (framework-agnostic).
53
+ * Returns { status, body } for the caller to send.
54
+ */
55
+ handleChallenge(body: unknown): ChallengeResponse;
56
+ }
57
+
3
58
  /**
4
59
  * AgentClient — Credential Presentation
5
60
  *
@@ -16,15 +71,29 @@ interface AgentClientConfig {
16
71
  apiBaseUrl?: string;
17
72
  /** API key used to authenticate ownership check + other authenticated calls. */
18
73
  apiKey?: string;
74
+ /**
75
+ * 5.16.0: the agent's runtime-challenge responder. When set, fetch()
76
+ * registers each call's counterparty as pending while the call is in
77
+ * flight, so the destination's runtime challenge passes for calls this
78
+ * agent is really making — and only those.
79
+ */
80
+ challengeHandler?: ChallengeHandler;
19
81
  }
20
82
  interface FetchOptions extends RequestInit {
21
83
  purpose?: string;
22
84
  action?: string;
85
+ /**
86
+ * 5.16.0: the destination's ASTRAE-id, when known. Its runtime challenge
87
+ * names the endpoint by ASTRAE-id (else by URL), so pass it for endpoints
88
+ * that require the challenge.
89
+ */
90
+ counterpartyId?: string;
23
91
  }
24
92
  declare class AgentClient {
25
93
  private credentials;
26
94
  private apiBaseUrl;
27
95
  private apiKey;
96
+ private challengeHandler;
28
97
  constructor(config: AgentClientConfig);
29
98
  /**
30
99
  * Async factory that validates the API key's account owns the configured
@@ -70,60 +139,6 @@ declare class AgentClient {
70
139
  private buildCredentials;
71
140
  }
72
141
 
73
- /**
74
- * ChallengeHandler — Agent-Side Runtime Challenge Responder
75
- *
76
- * Handles incoming runtime challenges from AstraSync's verification service.
77
- * Agents register pending counterparties before initiating contact,
78
- * then this handler validates and responds to challenges.
79
- */
80
- interface ChallengeResponse {
81
- status: number;
82
- body: {
83
- challengeId: string;
84
- acknowledged: boolean;
85
- pendingCounterparties: string[];
86
- respondedAt: string;
87
- error?: string;
88
- };
89
- }
90
- interface ChallengeHandlerConfig {
91
- agentId: string;
92
- }
93
- declare class ChallengeHandler {
94
- private agentId;
95
- private pendingCounterparties;
96
- constructor(config: ChallengeHandlerConfig);
97
- /**
98
- * Register a counterparty as pending (before initiating contact).
99
- */
100
- registerPending(counterpartyId: string): void;
101
- /**
102
- * Remove a counterparty from pending list (after interaction complete).
103
- */
104
- removePending(counterpartyId: string): void;
105
- /**
106
- * Get current pending counterparties list.
107
- */
108
- getPendingList(): string[];
109
- /**
110
- * Express middleware for the challenge endpoint.
111
- * Mount at: app.post('/astrasync/challenge', handler.expressMiddleware())
112
- */
113
- expressMiddleware(): (req: {
114
- body: unknown;
115
- }, res: {
116
- status: (code: number) => {
117
- json: (body: unknown) => void;
118
- };
119
- }) => void;
120
- /**
121
- * Generic handler (framework-agnostic).
122
- * Returns { status, body } for the caller to send.
123
- */
124
- handleChallenge(body: unknown): ChallengeResponse;
125
- }
126
-
127
142
  /**
128
143
  * PDLSS Formatter — Transport Format Conversion
129
144
  *
@@ -1,5 +1,60 @@
1
1
  import { A as AstraSyncCredentials, P as ProtocolTransport, G as GatewayConfig } from '../types-BfILnheI.js';
2
2
 
3
+ /**
4
+ * ChallengeHandler — Agent-Side Runtime Challenge Responder
5
+ *
6
+ * Handles incoming runtime challenges from AstraSync's verification service.
7
+ * Agents register pending counterparties before initiating contact,
8
+ * then this handler validates and responds to challenges.
9
+ */
10
+ interface ChallengeResponse {
11
+ status: number;
12
+ body: {
13
+ challengeId: string;
14
+ acknowledged: boolean;
15
+ pendingCounterparties: string[];
16
+ respondedAt: string;
17
+ error?: string;
18
+ };
19
+ }
20
+ interface ChallengeHandlerConfig {
21
+ agentId: string;
22
+ }
23
+ declare class ChallengeHandler {
24
+ private agentId;
25
+ /** Counterparty → in-flight interactions (two concurrent calls to one counterparty both count). */
26
+ private pendingCounterparties;
27
+ constructor(config: ChallengeHandlerConfig);
28
+ /**
29
+ * Register a counterparty as pending (before initiating contact).
30
+ */
31
+ registerPending(counterpartyId: string): void;
32
+ /**
33
+ * Remove a counterparty from pending list (after interaction complete).
34
+ */
35
+ removePending(counterpartyId: string): void;
36
+ /**
37
+ * Get current pending counterparties list.
38
+ */
39
+ getPendingList(): string[];
40
+ /**
41
+ * Express middleware for the challenge endpoint.
42
+ * Mount at: app.post('/astrasync/challenge', handler.expressMiddleware())
43
+ */
44
+ expressMiddleware(): (req: {
45
+ body: unknown;
46
+ }, res: {
47
+ status: (code: number) => {
48
+ json: (body: unknown) => void;
49
+ };
50
+ }) => void;
51
+ /**
52
+ * Generic handler (framework-agnostic).
53
+ * Returns { status, body } for the caller to send.
54
+ */
55
+ handleChallenge(body: unknown): ChallengeResponse;
56
+ }
57
+
3
58
  /**
4
59
  * AgentClient — Credential Presentation
5
60
  *
@@ -16,15 +71,29 @@ interface AgentClientConfig {
16
71
  apiBaseUrl?: string;
17
72
  /** API key used to authenticate ownership check + other authenticated calls. */
18
73
  apiKey?: string;
74
+ /**
75
+ * 5.16.0: the agent's runtime-challenge responder. When set, fetch()
76
+ * registers each call's counterparty as pending while the call is in
77
+ * flight, so the destination's runtime challenge passes for calls this
78
+ * agent is really making — and only those.
79
+ */
80
+ challengeHandler?: ChallengeHandler;
19
81
  }
20
82
  interface FetchOptions extends RequestInit {
21
83
  purpose?: string;
22
84
  action?: string;
85
+ /**
86
+ * 5.16.0: the destination's ASTRAE-id, when known. Its runtime challenge
87
+ * names the endpoint by ASTRAE-id (else by URL), so pass it for endpoints
88
+ * that require the challenge.
89
+ */
90
+ counterpartyId?: string;
23
91
  }
24
92
  declare class AgentClient {
25
93
  private credentials;
26
94
  private apiBaseUrl;
27
95
  private apiKey;
96
+ private challengeHandler;
28
97
  constructor(config: AgentClientConfig);
29
98
  /**
30
99
  * Async factory that validates the API key's account owns the configured
@@ -70,60 +139,6 @@ declare class AgentClient {
70
139
  private buildCredentials;
71
140
  }
72
141
 
73
- /**
74
- * ChallengeHandler — Agent-Side Runtime Challenge Responder
75
- *
76
- * Handles incoming runtime challenges from AstraSync's verification service.
77
- * Agents register pending counterparties before initiating contact,
78
- * then this handler validates and responds to challenges.
79
- */
80
- interface ChallengeResponse {
81
- status: number;
82
- body: {
83
- challengeId: string;
84
- acknowledged: boolean;
85
- pendingCounterparties: string[];
86
- respondedAt: string;
87
- error?: string;
88
- };
89
- }
90
- interface ChallengeHandlerConfig {
91
- agentId: string;
92
- }
93
- declare class ChallengeHandler {
94
- private agentId;
95
- private pendingCounterparties;
96
- constructor(config: ChallengeHandlerConfig);
97
- /**
98
- * Register a counterparty as pending (before initiating contact).
99
- */
100
- registerPending(counterpartyId: string): void;
101
- /**
102
- * Remove a counterparty from pending list (after interaction complete).
103
- */
104
- removePending(counterpartyId: string): void;
105
- /**
106
- * Get current pending counterparties list.
107
- */
108
- getPendingList(): string[];
109
- /**
110
- * Express middleware for the challenge endpoint.
111
- * Mount at: app.post('/astrasync/challenge', handler.expressMiddleware())
112
- */
113
- expressMiddleware(): (req: {
114
- body: unknown;
115
- }, res: {
116
- status: (code: number) => {
117
- json: (body: unknown) => void;
118
- };
119
- }) => void;
120
- /**
121
- * Generic handler (framework-agnostic).
122
- * Returns { status, body } for the caller to send.
123
- */
124
- handleChallenge(body: unknown): ChallengeResponse;
125
- }
126
-
127
142
  /**
128
143
  * PDLSS Formatter — Transport Format Conversion
129
144
  *
@@ -31,7 +31,7 @@ __export(agent_exports, {
31
31
  module.exports = __toCommonJS(agent_exports);
32
32
 
33
33
  // src/version.ts
34
- var SDK_VERSION = "5.14.0";
34
+ var SDK_VERSION = "5.16.0";
35
35
 
36
36
  // src/http.ts
37
37
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -214,6 +214,7 @@ var OwnershipMismatchError = class extends AstraSyncSdkError {
214
214
  // src/agent/client.ts
215
215
  var AgentClient = class _AgentClient {
216
216
  constructor(config) {
217
+ this.challengeHandler = config.challengeHandler;
217
218
  this.credentials = {
218
219
  agentId: config.agentId,
219
220
  verifyUrl: config.verifyUrl ?? "https://astrasync.ai/api/agents/verify-access",
@@ -268,7 +269,7 @@ var AgentClient = class _AgentClient {
268
269
  * Make an HTTP request with AstraSync headers automatically injected.
269
270
  */
270
271
  async fetch(url, options) {
271
- const { purpose, action, ...fetchOptions } = options ?? {};
272
+ const { purpose, action, counterpartyId, ...fetchOptions } = options ?? {};
272
273
  const creds = { ...this.credentials };
273
274
  if (purpose) {
274
275
  creds.pdlss = {
@@ -291,10 +292,16 @@ var AgentClient = class _AgentClient {
291
292
  }
292
293
  }
293
294
  const enrichedHeaders = setHttpHeaders(existingHeaders, creds);
294
- return sdkFetch(url, {
295
- ...fetchOptions,
296
- headers: enrichedHeaders
297
- });
295
+ const pending = this.challengeHandler ? [counterpartyId, new URL(url).origin].filter((v) => Boolean(v)) : [];
296
+ pending.forEach((p) => this.challengeHandler.registerPending(p));
297
+ try {
298
+ return await sdkFetch(url, {
299
+ ...fetchOptions,
300
+ headers: enrichedHeaders
301
+ });
302
+ } finally {
303
+ pending.forEach((p) => this.challengeHandler.removePending(p));
304
+ }
298
305
  }
299
306
  /**
300
307
  * Prepare A2A task metadata with AstraSync credentials.
@@ -332,26 +339,32 @@ var AgentClient = class _AgentClient {
332
339
  // src/agent/challenge-handler.ts
333
340
  var ChallengeHandler = class {
334
341
  constructor(config) {
335
- this.pendingCounterparties = /* @__PURE__ */ new Set();
342
+ /** Counterparty → in-flight interactions (two concurrent calls to one counterparty both count). */
343
+ this.pendingCounterparties = /* @__PURE__ */ new Map();
336
344
  this.agentId = config.agentId;
337
345
  }
338
346
  /**
339
347
  * Register a counterparty as pending (before initiating contact).
340
348
  */
341
349
  registerPending(counterpartyId) {
342
- this.pendingCounterparties.add(counterpartyId);
350
+ this.pendingCounterparties.set(
351
+ counterpartyId,
352
+ (this.pendingCounterparties.get(counterpartyId) ?? 0) + 1
353
+ );
343
354
  }
344
355
  /**
345
356
  * Remove a counterparty from pending list (after interaction complete).
346
357
  */
347
358
  removePending(counterpartyId) {
348
- this.pendingCounterparties.delete(counterpartyId);
359
+ const n = (this.pendingCounterparties.get(counterpartyId) ?? 0) - 1;
360
+ if (n > 0) this.pendingCounterparties.set(counterpartyId, n);
361
+ else this.pendingCounterparties.delete(counterpartyId);
349
362
  }
350
363
  /**
351
364
  * Get current pending counterparties list.
352
365
  */
353
366
  getPendingList() {
354
- return [...this.pendingCounterparties];
367
+ return [...this.pendingCounterparties.keys()];
355
368
  }
356
369
  /**
357
370
  * Express middleware for the challenge endpoint.
@@ -407,10 +420,7 @@ var ChallengeHandler = class {
407
420
  }
408
421
  };
409
422
  }
410
- const explicitList = this.getPendingList();
411
- const pendingCounterparties = explicitList.length > 0 ? explicitList : [payload.counterpartyId, payload.counterpartyUrl].filter(
412
- (v) => typeof v === "string" && v.length > 0
413
- );
423
+ const pendingCounterparties = this.getPendingList();
414
424
  return {
415
425
  status: 200,
416
426
  body: {