@nevermined-io/payments 1.1.17 → 1.3.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.
Files changed (54) hide show
  1. package/dist/a2a/clientRegistry.d.ts.map +1 -1
  2. package/dist/a2a/clientRegistry.js +2 -2
  3. package/dist/a2a/clientRegistry.js.map +1 -1
  4. package/dist/a2a/paymentsClient.d.ts +2 -2
  5. package/dist/a2a/paymentsClient.d.ts.map +1 -1
  6. package/dist/a2a/paymentsClient.js +10 -6
  7. package/dist/a2a/paymentsClient.js.map +1 -1
  8. package/dist/a2a/server.d.ts.map +1 -1
  9. package/dist/a2a/server.js +3 -1
  10. package/dist/a2a/server.js.map +1 -1
  11. package/dist/a2a/types.d.ts +1 -0
  12. package/dist/a2a/types.d.ts.map +1 -1
  13. package/dist/a2a/types.js.map +1 -1
  14. package/dist/api/nvm-api.d.ts +2 -2
  15. package/dist/api/nvm-api.d.ts.map +1 -1
  16. package/dist/api/nvm-api.js +2 -2
  17. package/dist/api/nvm-api.js.map +1 -1
  18. package/dist/api/plans-api.d.ts +12 -2
  19. package/dist/api/plans-api.d.ts.map +1 -1
  20. package/dist/api/plans-api.js +16 -3
  21. package/dist/api/plans-api.js.map +1 -1
  22. package/dist/common/types.d.ts +70 -7
  23. package/dist/common/types.d.ts.map +1 -1
  24. package/dist/common/types.js +16 -0
  25. package/dist/common/types.js.map +1 -1
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/plans.d.ts +13 -2
  31. package/dist/plans.d.ts.map +1 -1
  32. package/dist/plans.js +19 -2
  33. package/dist/plans.js.map +1 -1
  34. package/dist/x402/delegation-api.d.ts +92 -19
  35. package/dist/x402/delegation-api.d.ts.map +1 -1
  36. package/dist/x402/delegation-api.js +65 -23
  37. package/dist/x402/delegation-api.js.map +1 -1
  38. package/dist/x402/express/middleware.d.ts +4 -0
  39. package/dist/x402/express/middleware.d.ts.map +1 -1
  40. package/dist/x402/express/middleware.js +7 -4
  41. package/dist/x402/express/middleware.js.map +1 -1
  42. package/dist/x402/facilitator-api.d.ts +9 -0
  43. package/dist/x402/facilitator-api.d.ts.map +1 -1
  44. package/dist/x402/facilitator-api.js +24 -10
  45. package/dist/x402/facilitator-api.js.map +1 -1
  46. package/dist/x402/index.d.ts +3 -3
  47. package/dist/x402/index.d.ts.map +1 -1
  48. package/dist/x402/index.js +2 -2
  49. package/dist/x402/index.js.map +1 -1
  50. package/dist/x402/token.d.ts +17 -17
  51. package/dist/x402/token.d.ts.map +1 -1
  52. package/dist/x402/token.js +27 -37
  53. package/dist/x402/token.js.map +1 -1
  54. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"clientRegistry.d.ts","sourceRoot":"","sources":["../../src/a2a/clientRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGvD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAAU;IAE1B;;;OAGG;gBACS,QAAQ,EAAE,QAAQ;IAI9B;;;;;;OAMG;IACU,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;CAoBhF"}
1
+ {"version":3,"file":"clientRegistry.d.ts","sourceRoot":"","sources":["../../src/a2a/clientRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAGvD;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAAU;IAE1B;;;OAGG;gBACS,QAAQ,EAAE,QAAQ;IAI9B;;;;;;OAMG;IACU,SAAS,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;CAqBhF"}
@@ -21,14 +21,14 @@ export class ClientRegistry {
21
21
  * @returns The PaymentsClient instance
22
22
  */
23
23
  async getClient(options) {
24
- const { agentBaseUrl, agentId, planId, agentCardPath } = options;
24
+ const { agentBaseUrl, agentId, planId, agentCardPath, delegationConfig } = options;
25
25
  if (!agentBaseUrl || !agentId || !planId) {
26
26
  throw PaymentsError.validation('Missing required fields');
27
27
  }
28
28
  const key = `${agentBaseUrl}::${agentId}::${planId}`;
29
29
  let client = this.clients.get(key);
30
30
  if (!client) {
31
- client = await PaymentsClient.create(agentBaseUrl, this.payments, agentId, planId, agentCardPath);
31
+ client = await PaymentsClient.create(agentBaseUrl, this.payments, agentId, planId, agentCardPath, delegationConfig);
32
32
  this.clients.set(key, client);
33
33
  }
34
34
  return client;
@@ -1 +1 @@
1
- {"version":3,"file":"clientRegistry.js","sourceRoot":"","sources":["../../src/a2a/clientRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D;;;GAGG;AACH,MAAM,OAAO,cAAc;IAIzB;;;OAGG;IACH,YAAY,QAAkB;QAPtB,YAAO,GAAgC,IAAI,GAAG,EAAE,CAAA;QAQtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,SAAS,CAAC,OAA8B;QACnD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;QAChE,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,aAAa,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,OAAO,KAAK,MAAM,EAAE,CAAA;QACpD,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAClC,YAAY,EACZ,IAAI,CAAC,QAAQ,EACb,OAAO,EACP,MAAM,EACN,aAAa,CACd,CAAA;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC/B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { Payments } from '../index.js'\nimport { PaymentsClient } from './paymentsClient.js'\nimport type { ClientRegistryOptions } from './types.js'\nimport { PaymentsError } from '../common/payments.error.js'\n\n/**\n * Registry for managing multiple PaymentsClient instances by agentId+planId+baseUrl.\n * If a client does not exist for a given combination, it is created and cached.\n */\nexport class ClientRegistry {\n private clients: Map<string, PaymentsClient> = new Map()\n private payments: Payments\n\n /**\n * Constructs a ClientRegistry.\n * @param payments - The Payments instance to use for all clients.\n */\n constructor(payments: Payments) {\n this.payments = payments\n }\n\n /**\n * Gets (or creates) a PaymentsClient for the given agentBaseUrl, agentId, and planId.\n * The combination of these three is used as a unique key.\n * It derives the Agent Card path when needed.\n * @param options - ClientRegistryOptions with agentBaseUrl, agentId, planId (all required).\n * @returns The PaymentsClient instance\n */\n public async getClient(options: ClientRegistryOptions): Promise<PaymentsClient> {\n const { agentBaseUrl, agentId, planId, agentCardPath } = options\n if (!agentBaseUrl || !agentId || !planId) {\n throw PaymentsError.validation('Missing required fields')\n }\n\n const key = `${agentBaseUrl}::${agentId}::${planId}`\n let client = this.clients.get(key)\n if (!client) {\n client = await PaymentsClient.create(\n agentBaseUrl,\n this.payments,\n agentId,\n planId,\n agentCardPath,\n )\n this.clients.set(key, client)\n }\n return client\n }\n}\n"]}
1
+ {"version":3,"file":"clientRegistry.js","sourceRoot":"","sources":["../../src/a2a/clientRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D;;;GAGG;AACH,MAAM,OAAO,cAAc;IAIzB;;;OAGG;IACH,YAAY,QAAkB;QAPtB,YAAO,GAAgC,IAAI,GAAG,EAAE,CAAA;QAQtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,SAAS,CAAC,OAA8B;QACnD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAA;QAClF,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,aAAa,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;QAC3D,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,OAAO,KAAK,MAAM,EAAE,CAAA;QACpD,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,cAAc,CAAC,MAAM,CAClC,YAAY,EACZ,IAAI,CAAC,QAAQ,EACb,OAAO,EACP,MAAM,EACN,aAAa,EACb,gBAAgB,CACjB,CAAA;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC/B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { Payments } from '../index.js'\nimport { PaymentsClient } from './paymentsClient.js'\nimport type { ClientRegistryOptions } from './types.js'\nimport { PaymentsError } from '../common/payments.error.js'\n\n/**\n * Registry for managing multiple PaymentsClient instances by agentId+planId+baseUrl.\n * If a client does not exist for a given combination, it is created and cached.\n */\nexport class ClientRegistry {\n private clients: Map<string, PaymentsClient> = new Map()\n private payments: Payments\n\n /**\n * Constructs a ClientRegistry.\n * @param payments - The Payments instance to use for all clients.\n */\n constructor(payments: Payments) {\n this.payments = payments\n }\n\n /**\n * Gets (or creates) a PaymentsClient for the given agentBaseUrl, agentId, and planId.\n * The combination of these three is used as a unique key.\n * It derives the Agent Card path when needed.\n * @param options - ClientRegistryOptions with agentBaseUrl, agentId, planId (all required).\n * @returns The PaymentsClient instance\n */\n public async getClient(options: ClientRegistryOptions): Promise<PaymentsClient> {\n const { agentBaseUrl, agentId, planId, agentCardPath, delegationConfig } = options\n if (!agentBaseUrl || !agentId || !planId) {\n throw PaymentsError.validation('Missing required fields')\n }\n\n const key = `${agentBaseUrl}::${agentId}::${planId}`\n let client = this.clients.get(key)\n if (!client) {\n client = await PaymentsClient.create(\n agentBaseUrl,\n this.payments,\n agentId,\n planId,\n agentCardPath,\n delegationConfig,\n )\n this.clients.set(key, client)\n }\n return client\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Payments } from '../index.js';
2
- import type { CardDelegationConfig } from '../common/types.js';
2
+ import type { DelegationConfig } from '../common/types.js';
3
3
  import { MessageSendParams, SendMessageResponse, TaskQueryParams, GetTaskResponse, TaskPushNotificationConfig, SetTaskPushNotificationConfigResponse, TaskIdParams, GetTaskPushNotificationConfigResponse, JSONRPCResponse, JSONRPCErrorResponse } from '@a2a-js/sdk';
4
4
  import { A2AClient } from '@a2a-js/sdk/client';
5
5
  /**
@@ -25,7 +25,7 @@ export declare class PaymentsClient extends A2AClient {
25
25
  * Creates a PaymentsClient by fetching the AgentCard first and then
26
26
  * constructing the underlying A2AClient with the AgentCard object.
27
27
  */
28
- static create(agentBaseUrl: string, payments: Payments, agentId: string, planId: string, agentCardPath?: string, delegationConfig?: CardDelegationConfig): Promise<PaymentsClient>;
28
+ static create(agentBaseUrl: string, payments: Payments, agentId: string, planId: string, agentCardPath?: string, delegationConfig?: DelegationConfig): Promise<PaymentsClient>;
29
29
  /**
30
30
  * Gets and caches the access token for this client instance.
31
31
  * @returns The access token string.
@@ -1 +1 @@
1
- {"version":3,"file":"paymentsClient.d.ts","sourceRoot":"","sources":["../../src/a2a/paymentsClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,KAAK,EAAoB,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,qCAAqC,EACrC,YAAY,EACZ,qCAAqC,EACrC,eAAe,EACf,oBAAoB,EACrB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAI9C;;;GAGG;AACH,qBAAa,cAAe,SAAQ,SAAS;IACpC,QAAQ,EAAE,QAAQ,CAAA;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAsB;IACxD,OAAO,CAAC,WAAW,CAAe;IAElC;;;;;;;OAOG;IACH,OAAO;IAeP;;;OAGG;WACiB,MAAM,CACxB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,aAAa,SAA2B,EACxC,gBAAgB,CAAC,EAAE,oBAAoB,GACtC,OAAO,CAAC,cAAc,CAAC;IAO1B;;;OAGG;YACW,mBAAmB;IA0BjC;;OAEG;IACI,UAAU;IAIjB;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,IAAI,oBAAoB;IAI5E;;;;OAIG;IACU,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAUpF;;;;;;;;OAQG;IACW,oBAAoB,CAChC,MAAM,EAAE,iBAAiB,GACxB,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IAsDvC;;;;;;;;OAQG;YACY,eAAe;IAoD9B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAuDzB;;;;;;OAMG;IACW,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IAsD5F;;;;OAIG;IACU,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAU1E;;;;OAIG;IACU,gCAAgC,CAC3C,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,qCAAqC,CAAC;IASjD;;;;OAIG;IACU,gCAAgC,CAC3C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,qCAAqC,CAAC;IAUjD;;;;;;OAMG;cACa,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAC3D,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;CA2CtB;AAED,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,qCAAqC,EACrC,YAAY,EACZ,qCAAqC,GACtC,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"paymentsClient.d.ts","sourceRoot":"","sources":["../../src/a2a/paymentsClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,KAAK,EAAoB,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,qCAAqC,EACrC,YAAY,EACZ,qCAAqC,EACrC,eAAe,EACf,oBAAoB,EACrB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAI9C;;;GAGG;AACH,qBAAa,cAAe,SAAQ,SAAS;IACpC,QAAQ,EAAE,QAAQ,CAAA;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAkB;IACpD,OAAO,CAAC,WAAW,CAAe;IAElC;;;;;;;OAOG;IACH,OAAO;IAeP;;;OAGG;WACiB,MAAM,CACxB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,aAAa,SAA2B,EACxC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,cAAc,CAAC;IAO1B;;;OAGG;YACW,mBAAmB;IAyBjC;;OAEG;IACI,UAAU;IAIjB;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,IAAI,oBAAoB;IAI5E;;;;OAIG;IACU,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAUpF;;;;;;;;OAQG;IACW,oBAAoB,CAChC,MAAM,EAAE,iBAAiB,GACxB,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IAsDvC;;;;;;;;OAQG;YACY,eAAe;IAoD9B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAuDzB;;;;;;OAMG;IACW,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IAsD5F;;;;OAIG;IACU,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAU1E;;;;OAIG;IACU,gCAAgC,CAC3C,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,qCAAqC,CAAC;IASjD;;;;OAIG;IACU,gCAAgC,CAC3C,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,qCAAqC,CAAC;IAUjD;;;;;;OAMG;cACa,0BAA0B,CAAC,OAAO,EAAE,SAAS,EAC3D,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC;CA2CtB;AAED,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,qCAAqC,EACrC,YAAY,EACZ,qCAAqC,GACtC,MAAM,aAAa,CAAA"}
@@ -42,13 +42,17 @@ export class PaymentsClient extends A2AClient {
42
42
  return this.accessToken;
43
43
  }
44
44
  const scheme = await resolveScheme(this.payments, this.planId);
45
- if (scheme === 'nvm:card-delegation' && !this.delegationConfig) {
46
- throw PaymentsError.internal('Card delegation scheme requires delegationConfig. Pass it to PaymentsClient.create().');
45
+ if (!this.delegationConfig) {
46
+ throw PaymentsError.internal(`${scheme} scheme requires delegationConfig. Pass it to PaymentsClient.create().`);
47
47
  }
48
- const tokenOptions = scheme !== 'nvm:erc4337'
49
- ? { scheme, delegationConfig: this.delegationConfig }
50
- : undefined;
51
- const accessParams = await this.payments.x402.getX402AccessToken(this.planId, this.agentId, undefined, undefined, undefined, tokenOptions);
48
+ let tokenOptions;
49
+ if (scheme !== 'nvm:erc4337') {
50
+ tokenOptions = { scheme, delegationConfig: this.delegationConfig };
51
+ }
52
+ else {
53
+ tokenOptions = { delegationConfig: this.delegationConfig };
54
+ }
55
+ const accessParams = await this.payments.x402.getX402AccessToken(this.planId, this.agentId, tokenOptions);
52
56
  this.accessToken = accessParams.accessToken;
53
57
  return this.accessToken;
54
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"paymentsClient.js","sourceRoot":"","sources":["../../src/a2a/paymentsClient.ts"],"names":[],"mappings":"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","sourcesContent":["import { Payments } from '../index.js'\nimport { PaymentsError } from '../common/payments.error.js'\nimport { resolveScheme } from '../x402/facilitator-api.js'\nimport type { X402TokenOptions, CardDelegationConfig } from '../common/types.js'\nimport {\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n JSONRPCResponse,\n JSONRPCErrorResponse,\n} from '@a2a-js/sdk'\nimport { A2AClient } from '@a2a-js/sdk/client'\nimport { v4 as uuidv4 } from 'uuid'\nimport type { AgentCard } from './types.js'\n\n/**\n * PaymentsClient is a high-level client for A2A agents with payments integration.\n * Each instance is bound to a specific agentId and planId.\n */\nexport class PaymentsClient extends A2AClient {\n public payments: Payments\n private readonly agentId: string\n private readonly planId: string\n private readonly delegationConfig?: CardDelegationConfig\n private accessToken: string | null\n\n /**\n * Creates a new PaymentsClient instance.\n * @param agentBaseUrl - The base URL of the agent (e.g. http://localhost:3005/a2a/).\n * @param payments - The Payments object.\n * @param agentId - The ID of the agent.\n * @param planId - The ID of the plan.\n * @param agentCardPath - Optional path to the agent card relative to base URL (defaults to '.well-known/agent.json').\n */\n private constructor(\n agentCard: AgentCard,\n payments: Payments,\n agentId: string,\n planId: string,\n delegationConfig?: CardDelegationConfig,\n ) {\n super(agentCard)\n this.payments = payments\n this.agentId = agentId\n this.planId = planId\n this.delegationConfig = delegationConfig\n this.accessToken = null\n }\n\n /**\n * Creates a PaymentsClient by fetching the AgentCard first and then\n * constructing the underlying A2AClient with the AgentCard object.\n */\n public static async create(\n agentBaseUrl: string,\n payments: Payments,\n agentId: string,\n planId: string,\n agentCardPath = '.well-known/agent.json',\n delegationConfig?: CardDelegationConfig,\n ): Promise<PaymentsClient> {\n const agentCardUrl = new URL(agentCardPath, agentBaseUrl).toString()\n const a2a = await A2AClient.fromCardUrl(agentCardUrl)\n const agentCard = await (a2a as any).getAgentCard()\n return new PaymentsClient(agentCard as AgentCard, payments, agentId, planId, delegationConfig)\n }\n\n /**\n * Gets and caches the access token for this client instance.\n * @returns The access token string.\n */\n private async _getX402AccessToken(): Promise<string> {\n if (this.accessToken) {\n return this.accessToken\n }\n const scheme = await resolveScheme(this.payments, this.planId)\n if (scheme === 'nvm:card-delegation' && !this.delegationConfig) {\n throw PaymentsError.internal(\n 'Card delegation scheme requires delegationConfig. Pass it to PaymentsClient.create().',\n )\n }\n const tokenOptions: X402TokenOptions | undefined =\n scheme !== 'nvm:erc4337'\n ? { scheme, delegationConfig: this.delegationConfig }\n : undefined\n const accessParams = await this.payments.x402.getX402AccessToken(\n this.planId,\n this.agentId,\n undefined,\n undefined,\n undefined,\n tokenOptions,\n )\n this.accessToken = accessParams.accessToken\n return this.accessToken\n }\n\n /**\n * Clears the cached access token for this client instance.\n */\n public clearToken() {\n this.accessToken = null\n }\n\n /**\n * Type guard to check if a JSON-RPC response is an error response.\n * @param response - The JSON-RPC response to check\n * @returns true if the response contains an error, false otherwise\n */\n isErrorResponse(response: JSONRPCResponse): response is JSONRPCErrorResponse {\n return response != null && typeof response === 'object' && 'error' in response\n }\n\n /**\n * Sends a message to the agent, managing authentication automatically.\n * @param params - The parameters for sending the message.\n * @returns The response from the agent.\n */\n public async sendA2AMessage(params: MessageSendParams): Promise<SendMessageResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<MessageSendParams, SendMessageResponse>(\n 'message/send',\n params,\n headers,\n )\n }\n\n /**\n * Sends a message to the agent and streams back responses using Server-Sent Events (SSE).\n * Push notification configuration can be specified in `params.configuration`.\n * Optionally, `params.message.contextId` or `params.message.taskId` can be provided.\n * Requires the agent to support streaming (`capabilities.streaming: true` in AgentCard).\n * @param params - The parameters for sending the message.\n * @returns An AsyncGenerator yielding A2AStreamEventData (Message, Task, TaskStatusUpdateEvent, or TaskArtifactUpdateEvent).\n * The generator throws an error if streaming is not supported or if an HTTP/SSE error occurs.\n */\n public async *sendA2AMessageStream(\n params: MessageSendParams,\n ): AsyncGenerator<any, void, undefined> {\n const agentCard = await (this as any).agentCardPromise\n if (!agentCard.capabilities?.streaming) {\n throw new Error(\n 'Agent does not support streaming (AgentCard.capabilities.streaming is not true).',\n )\n }\n const endpoint = await (this as any)._getServiceEndpoint()\n const clientRequestId = uuidv4()\n const rpcRequest = {\n jsonrpc: '2.0',\n method: 'message/stream',\n params: params as { [key: string]: any },\n id: clientRequestId,\n }\n const accessToken = await this._getX402AccessToken()\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n 'payment-signature': accessToken,\n },\n body: JSON.stringify(rpcRequest),\n })\n if (!response.ok) {\n let errorBody = ''\n try {\n errorBody = await response.text()\n const errorJson = JSON.parse(errorBody)\n if (errorJson.error) {\n throw new Error(\n `HTTP error establishing stream for message/stream: ${response.status} ${response.statusText}. RPC Error: ${errorJson.error.message} (Code: ${errorJson.error.code})`,\n )\n }\n } catch (e: any) {\n if (e.message.startsWith('HTTP error establishing stream')) throw e\n throw new Error(\n `HTTP error establishing stream for message/stream: ${response.status} ${response.statusText}. Response: ${errorBody || '(empty)'}`,\n )\n }\n throw new Error(\n `HTTP error establishing stream for message/stream: ${response.status} ${response.statusText}`,\n )\n }\n if (!response.headers.get('Content-Type')?.startsWith('text/event-stream')) {\n throw new Error(\"Invalid response Content-Type for SSE stream. Expected 'text/event-stream'.\")\n }\n // Parse and yield SSE events\n for await (const event of this._parseA2AStream(response, clientRequestId)) {\n yield event\n }\n }\n\n /**\n * Parses an HTTP response body as an A2A Server-Sent Event stream.\n * Each 'data' field of an SSE event is expected to be a JSON-RPC 2.0 Response object,\n * specifically a SendStreamingMessageResponse (or similar structure for resubscribe).\n * @param response -The HTTP Response object whose body is the SSE stream.\n * @param originalRequestId - The ID of the client's JSON-RPC request that initiated this stream.\n * Used to validate the `id` in the streamed JSON-RPC responses.\n * @returns An AsyncGenerator yielding the `result` field of each valid JSON-RPC success response from the stream.\n */\n private async *_parseA2AStream<TStreamItem>(\n response: Response,\n originalRequestId: number | string | null,\n ): AsyncGenerator<TStreamItem, void, undefined> {\n if (!response.body) {\n throw new Error('SSE response body is undefined. Cannot read stream.')\n }\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader()\n let buffer = '' // Holds incomplete lines from the stream\n let eventDataBuffer = '' // Holds accumulated 'data:' lines for the current event\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n // Process any final buffered event data if the stream ends abruptly after a 'data:' line\n if (eventDataBuffer.trim()) {\n const result = this._processEventData<TStreamItem>(eventDataBuffer, originalRequestId)\n yield result\n }\n break // Stream finished\n }\n\n buffer += value // Append new chunk to buffer\n let lineEndIndex\n // Process all complete lines in the buffer\n while ((lineEndIndex = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.substring(0, lineEndIndex).trim() // Get and trim the line\n buffer = buffer.substring(lineEndIndex + 1) // Remove processed line from buffer\n\n if (line === '') {\n // Empty line: signifies the end of an event\n if (eventDataBuffer) {\n // If we have accumulated data for an event\n const result = this._processEventData<TStreamItem>(eventDataBuffer, originalRequestId)\n yield result\n eventDataBuffer = '' // Reset buffer for the next event\n }\n } else if (line.startsWith('data:')) {\n eventDataBuffer += line.substring(5).trimStart() + '\\n' // Append data (multi-line data is possible)\n } else if (line.startsWith(':')) {\n // This is a comment line in SSE, ignore it.\n }\n }\n }\n } catch (error: any) {\n throw new PaymentsError(error.message, 'payments_error')\n } finally {\n reader.releaseLock() // Ensure the reader lock is released\n }\n }\n\n /**\n * Processes a single SSE event's data string, expecting it to be a JSON-RPC response.\n * @param jsonData - The string content from one or more 'data:' lines of an SSE event.\n * @param originalRequestId - The ID of the client's request that initiated the stream.\n * @returns The `result` field of the parsed JSON-RPC success response.\n * @throws Error if data is not valid JSON, not a valid JSON-RPC response, an error response, or ID mismatch.\n */\n private _processEventData<TStreamItem>(\n jsonData: string,\n originalRequestId: number | string | null,\n ): TStreamItem {\n if (!jsonData.trim()) {\n throw new Error('Attempted to process empty SSE event data.')\n }\n try {\n // SSE data can be multi-line, ensure it's treated as a single JSON string.\n const sseJsonRpcResponse = JSON.parse(jsonData.replace(/\\n$/, ''))\n\n // Type assertion to SendStreamingMessageResponse, as this is the expected structure for A2A streams.\n const a2aStreamResponse: any = sseJsonRpcResponse\n\n if (a2aStreamResponse.id !== originalRequestId) {\n // According to JSON-RPC spec, notifications (which SSE events can be seen as) might not have an ID,\n // or if they do, it should match. A2A spec implies streamed events are tied to the initial request.\n throw new PaymentsError(\n `SSE Event's JSON-RPC response ID mismatch. Client request ID: ${originalRequestId}, event response ID: ${a2aStreamResponse.id}.`,\n 'payments_error',\n )\n }\n\n if (this.isErrorResponse && this.isErrorResponse(a2aStreamResponse)) {\n const err = a2aStreamResponse.error\n throw new PaymentsError(\n `SSE event contained an error: ${err.message} (Code: ${err.code}) Data: ${JSON.stringify(err.data)}`,\n )\n }\n\n // Check if 'result' exists, as it's mandatory for successful JSON-RPC responses\n if (!('result' in a2aStreamResponse) || typeof a2aStreamResponse.result === 'undefined') {\n throw new PaymentsError(\n `SSE event JSON-RPC response is missing 'result' field. Data: ${jsonData}`,\n 'payments_error',\n )\n }\n\n return a2aStreamResponse as TStreamItem\n } catch (e: any) {\n // Catch errors from JSON.parse or if it's an error response that was thrown by this function\n if (\n e.message.startsWith('SSE event contained an error') ||\n e.message.startsWith(\"SSE event JSON-RPC response is missing 'result' field\")\n ) {\n throw new PaymentsError(e.message, 'payments_error')\n }\n\n throw new PaymentsError(\n `Failed to parse SSE event data: \"${jsonData.substring(0, 100)}...\". Original error: ${e.message}`,\n 'payments_error',\n )\n }\n }\n\n /**\n * Resubscribes to a task's event stream using Server-Sent Events (SSE).\n * This is used if a previous SSE connection for an active task was broken.\n * Requires the agent to support streaming (`capabilities.streaming: true` in AgentCard).\n * @param params - Parameters containing the taskId.\n * @returns An AsyncGenerator yielding A2AStreamEventData (Message, Task, TaskStatusUpdateEvent, or TaskArtifactUpdateEvent).\n */\n public async *resubscribeA2ATask(params: TaskIdParams): AsyncGenerator<any, void, undefined> {\n const agentCard = await (this as any).agentCardPromise\n if (!agentCard.capabilities?.streaming) {\n throw new Error('Agent does not support streaming (required for tasks/resubscribe).')\n }\n const endpoint = await (this as any)._getServiceEndpoint()\n const clientRequestId = uuidv4()\n const rpcRequest = {\n jsonrpc: '2.0',\n method: 'tasks/resubscribe',\n params: params as { [key: string]: any },\n id: clientRequestId,\n }\n const accessToken = await this._getX402AccessToken()\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n 'payment-signature': accessToken,\n },\n body: JSON.stringify(rpcRequest),\n })\n if (!response.ok) {\n let errorBody = ''\n try {\n errorBody = await response.text()\n const errorJson = JSON.parse(errorBody)\n if (errorJson.error) {\n throw new Error(\n `HTTP error establishing stream for tasks/resubscribe: ${response.status} ${response.statusText}. RPC Error: ${errorJson.error.message} (Code: ${errorJson.error.code})`,\n )\n }\n } catch (e: any) {\n if (e.message.startsWith('HTTP error establishing stream')) throw e\n throw new Error(\n `HTTP error establishing stream for tasks/resubscribe: ${response.status} ${response.statusText}. Response: ${errorBody || '(empty)'}`,\n )\n }\n throw new Error(\n `HTTP error establishing stream for tasks/resubscribe: ${response.status} ${response.statusText}`,\n )\n }\n if (!response.headers.get('Content-Type')?.startsWith('text/event-stream')) {\n throw new Error(\n \"Invalid response Content-Type for SSE stream on resubscribe. Expected 'text/event-stream'.\",\n )\n }\n // Parse and yield SSE events\n for await (const event of this._parseA2AStream(response, clientRequestId)) {\n yield event\n }\n }\n\n /**\n * Retrieves a task by its ID, managing authentication automatically.\n * @param params - The parameters for the task query.\n * @returns The task response.\n */\n public async getA2ATask(params: TaskQueryParams): Promise<GetTaskResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<TaskQueryParams, GetTaskResponse>(\n 'tasks/get',\n params,\n headers,\n )\n }\n\n /**\n * Sets or updates the push notification configuration for a given task, managing authentication automatically.\n * @param params - The parameters for the task push notification configuration.\n * @returns The response from the agent.\n */\n public async setA2ATaskPushNotificationConfig(\n params: TaskPushNotificationConfig,\n ): Promise<SetTaskPushNotificationConfigResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse\n >('tasks/pushNotificationConfig/set', params, headers)\n }\n\n /**\n * Gets the push notification configuration for a given task, managing authentication automatically.\n * @param params - The parameters for the task push notification configuration.\n * @returns The response from the agent.\n */\n public async getA2ATaskPushNotificationConfig(\n params: TaskIdParams,\n ): Promise<GetTaskPushNotificationConfigResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<TaskIdParams, GetTaskPushNotificationConfigResponse>(\n 'tasks/pushNotificationConfig/get',\n params,\n headers,\n )\n }\n\n /**\n * Internal helper to make a JSON-RPC POST request with custom headers.\n * @param method - The RPC method name.\n * @param params - The parameters for the RPC method.\n * @param headers - Optional custom headers.\n * @returns The response from the agent.\n */\n protected async _postRpcRequestWithHeaders<TParams, TResponse>(\n method: string,\n params: TParams,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const endpoint = await (this as any)._getServiceEndpoint()\n const requestId = uuidv4()\n const rpcRequest = { jsonrpc: '2.0', method, params, id: requestId }\n const httpResponse = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(headers || {}),\n },\n body: JSON.stringify(rpcRequest),\n })\n if (!httpResponse.ok) {\n let errorBodyText = '(empty or non-JSON response)'\n try {\n errorBodyText = await httpResponse.text()\n const errorJson = JSON.parse(errorBodyText)\n if (!errorJson.jsonrpc && errorJson.error) {\n throw new Error(\n `RPC error for ${method}: ${errorJson.error.message} (Code: ${errorJson.error.code}, HTTP Status: ${httpResponse.status}) Data: ${JSON.stringify(errorJson.error.data)}`,\n )\n } else if (!errorJson.jsonrpc) {\n throw new Error(\n `HTTP error for ${method}! Status: ${httpResponse.status} ${httpResponse.statusText}. Response: ${errorBodyText}`,\n )\n }\n } catch (e: any) {\n if (e.message.startsWith('RPC error for') || e.message.startsWith('HTTP error for')) throw e\n throw new Error(\n `HTTP error for ${method}! Status: ${httpResponse.status} ${httpResponse.statusText}. Response: ${errorBodyText}`,\n )\n }\n }\n const rpcResponse = await httpResponse.json()\n if (rpcResponse.id !== requestId) {\n throw new PaymentsError(\n `CRITICAL: RPC response ID mismatch for method ${method}. Expected ${requestId}, got ${rpcResponse.id}. This may lead to incorrect response handling.`,\n 'payments_error',\n )\n }\n return rpcResponse as TResponse\n }\n}\n\nexport type {\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n} from '@a2a-js/sdk'\n"]}
1
+ {"version":3,"file":"paymentsClient.js","sourceRoot":"","sources":["../../src/a2a/paymentsClient.ts"],"names":[],"mappings":"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","sourcesContent":["import { Payments } from '../index.js'\nimport { PaymentsError } from '../common/payments.error.js'\nimport { resolveScheme } from '../x402/facilitator-api.js'\nimport type { X402TokenOptions, DelegationConfig } from '../common/types.js'\nimport {\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n JSONRPCResponse,\n JSONRPCErrorResponse,\n} from '@a2a-js/sdk'\nimport { A2AClient } from '@a2a-js/sdk/client'\nimport { v4 as uuidv4 } from 'uuid'\nimport type { AgentCard } from './types.js'\n\n/**\n * PaymentsClient is a high-level client for A2A agents with payments integration.\n * Each instance is bound to a specific agentId and planId.\n */\nexport class PaymentsClient extends A2AClient {\n public payments: Payments\n private readonly agentId: string\n private readonly planId: string\n private readonly delegationConfig?: DelegationConfig\n private accessToken: string | null\n\n /**\n * Creates a new PaymentsClient instance.\n * @param agentBaseUrl - The base URL of the agent (e.g. http://localhost:3005/a2a/).\n * @param payments - The Payments object.\n * @param agentId - The ID of the agent.\n * @param planId - The ID of the plan.\n * @param agentCardPath - Optional path to the agent card relative to base URL (defaults to '.well-known/agent.json').\n */\n private constructor(\n agentCard: AgentCard,\n payments: Payments,\n agentId: string,\n planId: string,\n delegationConfig?: DelegationConfig,\n ) {\n super(agentCard)\n this.payments = payments\n this.agentId = agentId\n this.planId = planId\n this.delegationConfig = delegationConfig\n this.accessToken = null\n }\n\n /**\n * Creates a PaymentsClient by fetching the AgentCard first and then\n * constructing the underlying A2AClient with the AgentCard object.\n */\n public static async create(\n agentBaseUrl: string,\n payments: Payments,\n agentId: string,\n planId: string,\n agentCardPath = '.well-known/agent.json',\n delegationConfig?: DelegationConfig,\n ): Promise<PaymentsClient> {\n const agentCardUrl = new URL(agentCardPath, agentBaseUrl).toString()\n const a2a = await A2AClient.fromCardUrl(agentCardUrl)\n const agentCard = await (a2a as any).getAgentCard()\n return new PaymentsClient(agentCard as AgentCard, payments, agentId, planId, delegationConfig)\n }\n\n /**\n * Gets and caches the access token for this client instance.\n * @returns The access token string.\n */\n private async _getX402AccessToken(): Promise<string> {\n if (this.accessToken) {\n return this.accessToken\n }\n const scheme = await resolveScheme(this.payments, this.planId)\n if (!this.delegationConfig) {\n throw PaymentsError.internal(\n `${scheme} scheme requires delegationConfig. Pass it to PaymentsClient.create().`,\n )\n }\n let tokenOptions: X402TokenOptions | undefined\n if (scheme !== 'nvm:erc4337') {\n tokenOptions = { scheme, delegationConfig: this.delegationConfig }\n } else {\n tokenOptions = { delegationConfig: this.delegationConfig }\n }\n const accessParams = await this.payments.x402.getX402AccessToken(\n this.planId,\n this.agentId,\n tokenOptions,\n )\n this.accessToken = accessParams.accessToken\n return this.accessToken\n }\n\n /**\n * Clears the cached access token for this client instance.\n */\n public clearToken() {\n this.accessToken = null\n }\n\n /**\n * Type guard to check if a JSON-RPC response is an error response.\n * @param response - The JSON-RPC response to check\n * @returns true if the response contains an error, false otherwise\n */\n isErrorResponse(response: JSONRPCResponse): response is JSONRPCErrorResponse {\n return response != null && typeof response === 'object' && 'error' in response\n }\n\n /**\n * Sends a message to the agent, managing authentication automatically.\n * @param params - The parameters for sending the message.\n * @returns The response from the agent.\n */\n public async sendA2AMessage(params: MessageSendParams): Promise<SendMessageResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<MessageSendParams, SendMessageResponse>(\n 'message/send',\n params,\n headers,\n )\n }\n\n /**\n * Sends a message to the agent and streams back responses using Server-Sent Events (SSE).\n * Push notification configuration can be specified in `params.configuration`.\n * Optionally, `params.message.contextId` or `params.message.taskId` can be provided.\n * Requires the agent to support streaming (`capabilities.streaming: true` in AgentCard).\n * @param params - The parameters for sending the message.\n * @returns An AsyncGenerator yielding A2AStreamEventData (Message, Task, TaskStatusUpdateEvent, or TaskArtifactUpdateEvent).\n * The generator throws an error if streaming is not supported or if an HTTP/SSE error occurs.\n */\n public async *sendA2AMessageStream(\n params: MessageSendParams,\n ): AsyncGenerator<any, void, undefined> {\n const agentCard = await (this as any).agentCardPromise\n if (!agentCard.capabilities?.streaming) {\n throw new Error(\n 'Agent does not support streaming (AgentCard.capabilities.streaming is not true).',\n )\n }\n const endpoint = await (this as any)._getServiceEndpoint()\n const clientRequestId = uuidv4()\n const rpcRequest = {\n jsonrpc: '2.0',\n method: 'message/stream',\n params: params as { [key: string]: any },\n id: clientRequestId,\n }\n const accessToken = await this._getX402AccessToken()\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n 'payment-signature': accessToken,\n },\n body: JSON.stringify(rpcRequest),\n })\n if (!response.ok) {\n let errorBody = ''\n try {\n errorBody = await response.text()\n const errorJson = JSON.parse(errorBody)\n if (errorJson.error) {\n throw new Error(\n `HTTP error establishing stream for message/stream: ${response.status} ${response.statusText}. RPC Error: ${errorJson.error.message} (Code: ${errorJson.error.code})`,\n )\n }\n } catch (e: any) {\n if (e.message.startsWith('HTTP error establishing stream')) throw e\n throw new Error(\n `HTTP error establishing stream for message/stream: ${response.status} ${response.statusText}. Response: ${errorBody || '(empty)'}`,\n )\n }\n throw new Error(\n `HTTP error establishing stream for message/stream: ${response.status} ${response.statusText}`,\n )\n }\n if (!response.headers.get('Content-Type')?.startsWith('text/event-stream')) {\n throw new Error(\"Invalid response Content-Type for SSE stream. Expected 'text/event-stream'.\")\n }\n // Parse and yield SSE events\n for await (const event of this._parseA2AStream(response, clientRequestId)) {\n yield event\n }\n }\n\n /**\n * Parses an HTTP response body as an A2A Server-Sent Event stream.\n * Each 'data' field of an SSE event is expected to be a JSON-RPC 2.0 Response object,\n * specifically a SendStreamingMessageResponse (or similar structure for resubscribe).\n * @param response -The HTTP Response object whose body is the SSE stream.\n * @param originalRequestId - The ID of the client's JSON-RPC request that initiated this stream.\n * Used to validate the `id` in the streamed JSON-RPC responses.\n * @returns An AsyncGenerator yielding the `result` field of each valid JSON-RPC success response from the stream.\n */\n private async *_parseA2AStream<TStreamItem>(\n response: Response,\n originalRequestId: number | string | null,\n ): AsyncGenerator<TStreamItem, void, undefined> {\n if (!response.body) {\n throw new Error('SSE response body is undefined. Cannot read stream.')\n }\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader()\n let buffer = '' // Holds incomplete lines from the stream\n let eventDataBuffer = '' // Holds accumulated 'data:' lines for the current event\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n // Process any final buffered event data if the stream ends abruptly after a 'data:' line\n if (eventDataBuffer.trim()) {\n const result = this._processEventData<TStreamItem>(eventDataBuffer, originalRequestId)\n yield result\n }\n break // Stream finished\n }\n\n buffer += value // Append new chunk to buffer\n let lineEndIndex\n // Process all complete lines in the buffer\n while ((lineEndIndex = buffer.indexOf('\\n')) >= 0) {\n const line = buffer.substring(0, lineEndIndex).trim() // Get and trim the line\n buffer = buffer.substring(lineEndIndex + 1) // Remove processed line from buffer\n\n if (line === '') {\n // Empty line: signifies the end of an event\n if (eventDataBuffer) {\n // If we have accumulated data for an event\n const result = this._processEventData<TStreamItem>(eventDataBuffer, originalRequestId)\n yield result\n eventDataBuffer = '' // Reset buffer for the next event\n }\n } else if (line.startsWith('data:')) {\n eventDataBuffer += line.substring(5).trimStart() + '\\n' // Append data (multi-line data is possible)\n } else if (line.startsWith(':')) {\n // This is a comment line in SSE, ignore it.\n }\n }\n }\n } catch (error: any) {\n throw new PaymentsError(error.message, 'payments_error')\n } finally {\n reader.releaseLock() // Ensure the reader lock is released\n }\n }\n\n /**\n * Processes a single SSE event's data string, expecting it to be a JSON-RPC response.\n * @param jsonData - The string content from one or more 'data:' lines of an SSE event.\n * @param originalRequestId - The ID of the client's request that initiated the stream.\n * @returns The `result` field of the parsed JSON-RPC success response.\n * @throws Error if data is not valid JSON, not a valid JSON-RPC response, an error response, or ID mismatch.\n */\n private _processEventData<TStreamItem>(\n jsonData: string,\n originalRequestId: number | string | null,\n ): TStreamItem {\n if (!jsonData.trim()) {\n throw new Error('Attempted to process empty SSE event data.')\n }\n try {\n // SSE data can be multi-line, ensure it's treated as a single JSON string.\n const sseJsonRpcResponse = JSON.parse(jsonData.replace(/\\n$/, ''))\n\n // Type assertion to SendStreamingMessageResponse, as this is the expected structure for A2A streams.\n const a2aStreamResponse: any = sseJsonRpcResponse\n\n if (a2aStreamResponse.id !== originalRequestId) {\n // According to JSON-RPC spec, notifications (which SSE events can be seen as) might not have an ID,\n // or if they do, it should match. A2A spec implies streamed events are tied to the initial request.\n throw new PaymentsError(\n `SSE Event's JSON-RPC response ID mismatch. Client request ID: ${originalRequestId}, event response ID: ${a2aStreamResponse.id}.`,\n 'payments_error',\n )\n }\n\n if (this.isErrorResponse && this.isErrorResponse(a2aStreamResponse)) {\n const err = a2aStreamResponse.error\n throw new PaymentsError(\n `SSE event contained an error: ${err.message} (Code: ${err.code}) Data: ${JSON.stringify(err.data)}`,\n )\n }\n\n // Check if 'result' exists, as it's mandatory for successful JSON-RPC responses\n if (!('result' in a2aStreamResponse) || typeof a2aStreamResponse.result === 'undefined') {\n throw new PaymentsError(\n `SSE event JSON-RPC response is missing 'result' field. Data: ${jsonData}`,\n 'payments_error',\n )\n }\n\n return a2aStreamResponse as TStreamItem\n } catch (e: any) {\n // Catch errors from JSON.parse or if it's an error response that was thrown by this function\n if (\n e.message.startsWith('SSE event contained an error') ||\n e.message.startsWith(\"SSE event JSON-RPC response is missing 'result' field\")\n ) {\n throw new PaymentsError(e.message, 'payments_error')\n }\n\n throw new PaymentsError(\n `Failed to parse SSE event data: \"${jsonData.substring(0, 100)}...\". Original error: ${e.message}`,\n 'payments_error',\n )\n }\n }\n\n /**\n * Resubscribes to a task's event stream using Server-Sent Events (SSE).\n * This is used if a previous SSE connection for an active task was broken.\n * Requires the agent to support streaming (`capabilities.streaming: true` in AgentCard).\n * @param params - Parameters containing the taskId.\n * @returns An AsyncGenerator yielding A2AStreamEventData (Message, Task, TaskStatusUpdateEvent, or TaskArtifactUpdateEvent).\n */\n public async *resubscribeA2ATask(params: TaskIdParams): AsyncGenerator<any, void, undefined> {\n const agentCard = await (this as any).agentCardPromise\n if (!agentCard.capabilities?.streaming) {\n throw new Error('Agent does not support streaming (required for tasks/resubscribe).')\n }\n const endpoint = await (this as any)._getServiceEndpoint()\n const clientRequestId = uuidv4()\n const rpcRequest = {\n jsonrpc: '2.0',\n method: 'tasks/resubscribe',\n params: params as { [key: string]: any },\n id: clientRequestId,\n }\n const accessToken = await this._getX402AccessToken()\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'text/event-stream',\n 'payment-signature': accessToken,\n },\n body: JSON.stringify(rpcRequest),\n })\n if (!response.ok) {\n let errorBody = ''\n try {\n errorBody = await response.text()\n const errorJson = JSON.parse(errorBody)\n if (errorJson.error) {\n throw new Error(\n `HTTP error establishing stream for tasks/resubscribe: ${response.status} ${response.statusText}. RPC Error: ${errorJson.error.message} (Code: ${errorJson.error.code})`,\n )\n }\n } catch (e: any) {\n if (e.message.startsWith('HTTP error establishing stream')) throw e\n throw new Error(\n `HTTP error establishing stream for tasks/resubscribe: ${response.status} ${response.statusText}. Response: ${errorBody || '(empty)'}`,\n )\n }\n throw new Error(\n `HTTP error establishing stream for tasks/resubscribe: ${response.status} ${response.statusText}`,\n )\n }\n if (!response.headers.get('Content-Type')?.startsWith('text/event-stream')) {\n throw new Error(\n \"Invalid response Content-Type for SSE stream on resubscribe. Expected 'text/event-stream'.\",\n )\n }\n // Parse and yield SSE events\n for await (const event of this._parseA2AStream(response, clientRequestId)) {\n yield event\n }\n }\n\n /**\n * Retrieves a task by its ID, managing authentication automatically.\n * @param params - The parameters for the task query.\n * @returns The task response.\n */\n public async getA2ATask(params: TaskQueryParams): Promise<GetTaskResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<TaskQueryParams, GetTaskResponse>(\n 'tasks/get',\n params,\n headers,\n )\n }\n\n /**\n * Sets or updates the push notification configuration for a given task, managing authentication automatically.\n * @param params - The parameters for the task push notification configuration.\n * @returns The response from the agent.\n */\n public async setA2ATaskPushNotificationConfig(\n params: TaskPushNotificationConfig,\n ): Promise<SetTaskPushNotificationConfigResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse\n >('tasks/pushNotificationConfig/set', params, headers)\n }\n\n /**\n * Gets the push notification configuration for a given task, managing authentication automatically.\n * @param params - The parameters for the task push notification configuration.\n * @returns The response from the agent.\n */\n public async getA2ATaskPushNotificationConfig(\n params: TaskIdParams,\n ): Promise<GetTaskPushNotificationConfigResponse> {\n const accessToken = await this._getX402AccessToken()\n const headers = { 'payment-signature': accessToken }\n return this._postRpcRequestWithHeaders<TaskIdParams, GetTaskPushNotificationConfigResponse>(\n 'tasks/pushNotificationConfig/get',\n params,\n headers,\n )\n }\n\n /**\n * Internal helper to make a JSON-RPC POST request with custom headers.\n * @param method - The RPC method name.\n * @param params - The parameters for the RPC method.\n * @param headers - Optional custom headers.\n * @returns The response from the agent.\n */\n protected async _postRpcRequestWithHeaders<TParams, TResponse>(\n method: string,\n params: TParams,\n headers?: Record<string, string>,\n ): Promise<TResponse> {\n const endpoint = await (this as any)._getServiceEndpoint()\n const requestId = uuidv4()\n const rpcRequest = { jsonrpc: '2.0', method, params, id: requestId }\n const httpResponse = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(headers || {}),\n },\n body: JSON.stringify(rpcRequest),\n })\n if (!httpResponse.ok) {\n let errorBodyText = '(empty or non-JSON response)'\n try {\n errorBodyText = await httpResponse.text()\n const errorJson = JSON.parse(errorBodyText)\n if (!errorJson.jsonrpc && errorJson.error) {\n throw new Error(\n `RPC error for ${method}: ${errorJson.error.message} (Code: ${errorJson.error.code}, HTTP Status: ${httpResponse.status}) Data: ${JSON.stringify(errorJson.error.data)}`,\n )\n } else if (!errorJson.jsonrpc) {\n throw new Error(\n `HTTP error for ${method}! Status: ${httpResponse.status} ${httpResponse.statusText}. Response: ${errorBodyText}`,\n )\n }\n } catch (e: any) {\n if (e.message.startsWith('RPC error for') || e.message.startsWith('HTTP error for')) throw e\n throw new Error(\n `HTTP error for ${method}! Status: ${httpResponse.status} ${httpResponse.statusText}. Response: ${errorBodyText}`,\n )\n }\n }\n const rpcResponse = await httpResponse.json()\n if (rpcResponse.id !== requestId) {\n throw new PaymentsError(\n `CRITICAL: RPC response ID mismatch for method ${method}. Expected ${requestId}, got ${rpcResponse.id}. This may lead to incorrect response handling.`,\n 'payments_error',\n )\n }\n return rpcResponse as TResponse\n }\n}\n\nexport type {\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n} from '@a2a-js/sdk'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/a2a/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAA8C,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAuCpE;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,oEAAoE;IACpE,SAAS,EAAE,SAAS,CAAA;IACpB,uDAAuD;IACvD,QAAQ,EAAE,aAAa,CAAA;IACvB,kEAAkE;IAClE,eAAe,EAAE,GAAG,CAAA;IACpB,wCAAwC;IACxC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;IAC5B,kEAAkE;IAClE,oBAAoB,CAAC,EAAE,GAAG,CAAA;IAC1B,kEAAkE;IAClE,cAAc,CAAC,EAAE;QACf,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAC9B,CAAA;IACD,8DAA8D;IAC9D,KAAK,CAAC,EAAE;QACN,oDAAoD;QACpD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QACpF,mDAAmD;QACnD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QACnF,2CAA2C;QAC3C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAChF,CAAA;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAA;IACpB,+BAA+B;IAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;IACnB,+DAA+D;IAC/D,OAAO,EAAE,sBAAsB,CAAA;IAC/B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAkHD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB;CA0KzE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/a2a/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAA8C,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC9F,OAAO,KAAK,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAuCpE;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,oEAAoE;IACpE,SAAS,EAAE,SAAS,CAAA;IACpB,uDAAuD;IACvD,QAAQ,EAAE,aAAa,CAAA;IACvB,kEAAkE;IAClE,eAAe,EAAE,GAAG,CAAA;IACpB,wCAAwC;IACxC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,CAAA;IAC5B,kEAAkE;IAClE,oBAAoB,CAAC,EAAE,GAAG,CAAA;IAC1B,kEAAkE;IAClE,cAAc,CAAC,EAAE;QACf,cAAc,CAAC,EAAE,OAAO,CAAA;QACxB,YAAY,CAAC,EAAE,OAAO,CAAA;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAC9B,CAAA;IACD,8DAA8D;IAC9D,KAAK,CAAC,EAAE;QACN,oDAAoD;QACpD,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QACpF,mDAAmD;QACnD,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QACnF,2CAA2C;QAC3C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAChF,CAAA;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAA;IACpB,+BAA+B;IAC/B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;IACnB,+DAA+D;IAC/D,OAAO,EAAE,sBAAsB,CAAA;IAC/B,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAoHD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB;CA0KzE"}
@@ -14,7 +14,7 @@ import express from 'express';
14
14
  import http from 'http';
15
15
  import { InMemoryTaskStore, JsonRpcTransportHandler } from '@a2a-js/sdk/server';
16
16
  import { PaymentsRequestHandler } from './paymentsRequestHandler.js';
17
- import { buildPaymentRequired, resolveScheme } from '../x402/facilitator-api.js';
17
+ import { buildPaymentRequired, resolveNetwork, resolveScheme } from '../x402/facilitator-api.js';
18
18
  import { X402_HEADERS } from '../x402/express/middleware.js';
19
19
  /**
20
20
  * Checks if a value is an AsyncIterable (used to detect streaming responses)
@@ -84,10 +84,12 @@ async function bearerTokenMiddleware(handler, paymentsService, req, res, next) {
84
84
  const planId = paymentExtension.params?.planId || '';
85
85
  const agentId = paymentExtension.params?.agentId;
86
86
  const scheme = await resolveScheme(paymentsService, planId);
87
+ const resolvedNetwork = await resolveNetwork(paymentsService, planId);
87
88
  const paymentRequired = buildPaymentRequired(planId, {
88
89
  endpoint: absoluteUrl,
89
90
  agentId,
90
91
  httpVerb: 'POST',
92
+ network: resolvedNetwork,
91
93
  scheme,
92
94
  environment: paymentsService.getEnvironmentName(),
93
95
  });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/a2a/server.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PaymentsA2AServer sets up and starts the A2A server for payments agents.\n * Handles A2A protocol endpoints and allows optional custom endpoints.\n *\n * The server provides a complete A2A protocol implementation with:\n * - JSON-RPC endpoint for A2A messages\n * - Agent Card endpoint (.well-known/agent.json)\n * - Bearer token extraction and validation\n * - Credit validation and burning\n * - Task execution and streaming\n * - Customizable routes and handlers\n */\nimport express from 'express'\nimport http from 'http'\nimport { InMemoryTaskStore, JsonRpcTransportHandler, AgentExecutor } from '@a2a-js/sdk/server'\nimport type { AgentCard, HttpRequestContext } from './types.js'\nimport { PaymentsRequestHandler } from './paymentsRequestHandler.js'\nimport type { Payments } from '../payments.js'\nimport { buildPaymentRequired, resolveScheme } from '../x402/facilitator-api.js'\nimport { X402_HEADERS } from '../x402/express/middleware.js'\n\n/**\n * Checks if a value is an AsyncIterable (used to detect streaming responses)\n */\nfunction isAsyncIterable<T>(value: any): value is AsyncIterable<T> {\n return value && typeof value[Symbol.asyncIterator] === 'function'\n}\n\n/**\n * Sends a JSON-RPC result. If it's an async iterator, streams as SSE; otherwise returns JSON.\n */\nasync function sendRpcResult(res: express.Response, result: any): Promise<void> {\n if (isAsyncIterable(result)) {\n res.setHeader('Content-Type', 'text/event-stream')\n res.setHeader('Cache-Control', 'no-cache')\n res.setHeader('Connection', 'keep-alive')\n const anyRes = res as any\n if (typeof anyRes.flushHeaders === 'function') anyRes.flushHeaders()\n try {\n for await (const chunk of result as AsyncGenerator<any, void, undefined>) {\n res.write(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n } catch (err: any) {\n const errorEvent = {\n jsonrpc: '2.0',\n error: { code: err?.code || -32603, message: err?.message || 'Internal streaming error' },\n }\n res.write(`data: ${JSON.stringify(errorEvent)}\\n\\n`)\n }\n res.end()\n return\n }\n res.json(result)\n}\n\n/**\n * Options for starting the PaymentsA2AServer.\n * Provides comprehensive configuration for A2A server setup.\n */\nexport interface PaymentsA2AServerOptions {\n /** The agent card defining the agent's capabilities and metadata */\n agentCard: AgentCard\n /** User-implemented executor for handling A2A tasks */\n executor: AgentExecutor\n /** Payments service instance for credit validation and burning */\n paymentsService: any\n /** Port number to bind the server to */\n /** Port number to listen on. Use 0 for automatic port assignment. */\n port: number\n /** Custom task store implementation (defaults to InMemoryTaskStore) */\n taskStore?: any\n /** Base path for all A2A routes (defaults to '/') */\n basePath?: string\n /** Whether to expose the agent card at .well-known/agent.json */\n exposeAgentCard?: boolean\n /** Whether to expose default A2A JSON-RPC routes */\n exposeDefaultRoutes?: boolean\n /** Custom Express app instance (defaults to new express()) */\n expressApp?: express.Express\n /** Custom request handler to override JSON-RPC method handling */\n customRequestHandler?: any\n /** Options for configuring the PaymentsRequestHandler behavior */\n handlerOptions?: {\n asyncExecution?: boolean\n defaultBatch?: boolean\n defaultMarginPercent?: number\n }\n /** Hooks for intercepting requests before/after processing */\n hooks?: {\n /** Called before processing any JSON-RPC request */\n beforeRequest?: (method: string, params: any, req: express.Request) => Promise<void>\n /** Called after processing any JSON-RPC request */\n afterRequest?: (method: string, result: any, req: express.Request) => Promise<void>\n /** Called when a JSON-RPC request fails */\n onError?: (method: string, error: Error, req: express.Request) => Promise<void>\n }\n}\n\n/**\n * Result returned by the server start method.\n * Contains the Express app and HTTP server instances for further customization.\n */\nexport interface PaymentsA2AServerResult {\n /** The configured Express application */\n app: express.Express\n /** The HTTP server instance */\n server: http.Server\n /** The request handler instance for direct access if needed */\n handler: PaymentsRequestHandler\n /** The actual port the server is listening on */\n port: number\n /**\n * Closes the server and all active connections.\n * @returns Promise that resolves when the server is fully closed\n */\n close: () => Promise<void>\n}\n\n/**\n * Middleware to extract payment token from HTTP headers and store it in the global context.\n * This middleware is applied after A2A routes are set up and extracts authentication\n * information for credit validation.\n *\n * Accepts tokens from:\n * - payment-signature header (x402 HTTP transport spec v2)\n *\n * @param req - Express request object\n * @param res - Express response object\n * @param next - Express next function\n */\nasync function bearerTokenMiddleware(\n handler: PaymentsRequestHandler,\n paymentsService: Payments,\n req: express.Request,\n res: express.Response,\n next: express.NextFunction,\n) {\n // Only process POST requests (A2A uses POST for all operations)\n if (req.method !== 'POST') {\n return next()\n }\n\n // Transform relative URL to absolute URL\n const absoluteUrl = new URL(req.originalUrl, req.protocol + '://' + req.get('host')).toString()\n\n const agentCard = await handler.getAgentCard()\n const paymentExtension = agentCard.capabilities?.extensions?.find(\n (ext) => ext.uri === 'urn:nevermined:payment',\n )\n\n if (!paymentExtension?.params?.agentId) {\n res.status(402).json({\n error: {\n code: -32001,\n message: 'Agent ID not found in agent card payment extension.',\n },\n })\n return\n }\n\n // Build paymentRequired for 402 responses\n const planId = (paymentExtension.params?.planId as string) || ''\n const agentId = paymentExtension.params?.agentId as string\n const scheme = await resolveScheme(paymentsService, planId)\n const paymentRequired = buildPaymentRequired(planId, {\n endpoint: absoluteUrl,\n agentId,\n httpVerb: 'POST',\n scheme,\n environment: paymentsService.getEnvironmentName(),\n })\n const paymentRequiredHeader = Buffer.from(JSON.stringify(paymentRequired)).toString('base64')\n\n // x402 HTTP spec v2: payment-signature header\n const bearerToken = req.headers['payment-signature'] as string | undefined\n\n if (!bearerToken) {\n res\n .status(402)\n .set(X402_HEADERS.PAYMENT_REQUIRED, paymentRequiredHeader)\n .json({\n error: {\n code: -32001,\n message: 'Missing payment-signature header.',\n },\n })\n return\n }\n\n let validation: any\n try {\n validation = await handler.validateRequest(bearerToken, absoluteUrl, req.method)\n if (!validation?.balance?.isSubscriber) {\n res.status(402).json({\n error: {\n code: -32001,\n message: 'Insufficient credits or invalid request.',\n },\n })\n return\n }\n } catch (err) {\n res.status(402).json({\n error: {\n code: -32001,\n message: 'Payment validation failed: ' + (err instanceof Error ? err.message : String(err)),\n },\n })\n return\n }\n\n const context: HttpRequestContext = {\n bearerToken,\n urlRequested: absoluteUrl,\n httpMethodRequested: req.method,\n validation,\n }\n // Try to associate context with taskId or messageId\n const taskId = req.body?.taskId\n const messageId = req.body?.params?.message?.messageId\n\n if (taskId) {\n handler.setHttpRequestContextForTask(taskId, context)\n } else if (messageId) {\n handler.setHttpRequestContextForMessage(messageId, context)\n }\n\n next()\n}\n\n/**\n * PaymentsA2AServer sets up the A2A endpoints and starts the server.\n *\n * This class provides a complete A2A protocol implementation with payment integration.\n * It handles:\n * - JSON-RPC message routing\n * - Agent card exposure\n * - Bearer token extraction\n * - Credit validation and burning\n * - Task execution and streaming\n * - Customizable routes and handlers\n *\n * @example\n * ```typescript\n * const server = PaymentsA2AServer.start({\n * agentCard: myAgentCard,\n * executor: new MyExecutor(),\n * paymentsService: payments,\n * port: 41242,\n * basePath: '/a2a/',\n * hooks: {\n * beforeRequest: async (method, params, req) => {\n * console.log(`Processing ${method} request`)\n * }\n * }\n * })\n * ```\n */\nexport class PaymentsA2AServer {\n /**\n * Starts the A2A server with the given options.\n *\n * This method sets up the complete A2A server infrastructure including:\n * - Express app configuration\n * - A2A route setup\n * - Middleware for bearer token extraction\n * - Agent card endpoint\n * - HTTP server creation and binding\n *\n * @param options - Server configuration options\n * @returns Server result containing app, server, adapter, and handler instances\n *\n * @example\n * ```typescript\n * const result = PaymentsA2AServer.start({\n * agentCard: buildPaymentAgentCard(baseCard, paymentMetadata),\n * executor: new MyPaymentsExecutor(),\n * paymentsService: payments,\n * port: 41242,\n * basePath: '/a2a/',\n * exposeAgentCard: true,\n * exposeDefaultRoutes: true\n * })\n *\n * // Access the Express app for additional routes\n * result.app.get('/health', (req, res) => res.json({ status: 'ok' }))\n * ```\n */\n static start(options: PaymentsA2AServerOptions): PaymentsA2AServerResult {\n const {\n agentCard,\n executor,\n paymentsService,\n port,\n taskStore,\n basePath = '/',\n exposeAgentCard = true,\n exposeDefaultRoutes = true,\n expressApp,\n customRequestHandler,\n handlerOptions,\n hooks,\n } = options\n\n // Initialize components\n const store = taskStore || new InMemoryTaskStore()\n const handler =\n customRequestHandler ||\n new PaymentsRequestHandler(\n agentCard,\n store,\n executor,\n paymentsService,\n undefined,\n handlerOptions,\n )\n const transport = new JsonRpcTransportHandler(handler)\n\n const app = expressApp || express()\n\n if (exposeAgentCard) {\n const agentCardPath =\n basePath === '/'\n ? '/.well-known/agent.json'\n : `${basePath.replace(/\\/$/, '')}/.well-known/agent.json`\n app.get(agentCardPath, (req, res) => {\n res.json(agentCard)\n })\n }\n\n if (exposeDefaultRoutes) {\n // Apply bearer token middleware for all requests under basePath\n app.use(basePath, express.json(), (req, res, next) => {\n bearerTokenMiddleware(handler, paymentsService, req, res, next).catch(next)\n })\n\n // Apply hooks middleware after body parsing and validation\n if (hooks) {\n app.use(basePath, (req, res, next) => {\n if (req.method === 'POST' && req.body?.method) {\n const { method, params } = req.body\n\n // Apply beforeRequest hook\n if (hooks.beforeRequest) {\n hooks.beforeRequest(method, params, req).catch((err) => {\n console.error('[HOOKS] beforeRequest error:', err)\n })\n }\n\n // Apply afterRequest hook by intercepting res.json\n const originalJson = res.json\n res.json = function (data) {\n if (hooks.afterRequest) {\n hooks.afterRequest(method, data, req).catch((err) => {\n console.error('[HOOKS] afterRequest error:', err)\n })\n }\n return originalJson.call(this, data)\n }\n\n // Apply onError hook by catching errors\n const originalSend = res.send\n res.send = function (data) {\n if (data?.error && hooks.onError) {\n hooks\n .onError(method, new Error(data.error.message || 'Unknown error'), req)\n .catch((err) => {\n console.error('[HOOKS] onError error:', err)\n })\n }\n return originalSend.call(this, data)\n }\n }\n next()\n })\n }\n\n app.post(basePath, async (req, res) => {\n try {\n const result = await transport.handle(req.body)\n await sendRpcResult(res, result)\n } catch (err: any) {\n if (res.headersSent) {\n console.error('[PaymentsA2A] Error after headers sent:', err?.message)\n res.end()\n return\n }\n res.status(500).json({\n error: { code: -32603, message: err?.message || 'Internal server error' },\n })\n }\n })\n }\n\n const server = http.createServer(app)\n\n // Add error handling for server startup\n server.on('error', (error: any) => {\n console.error(`[PaymentsA2A] Server error:`, error)\n if (error.code === 'EADDRINUSE') {\n console.error(`[PaymentsA2A] Port ${port} is already in use`)\n }\n })\n\n // If port is 0, the OS will assign a free port automatically\n let actualPort = port\n let isListening = false\n\n // Only start listening if port is not 0 (0 is used with supertest which doesn't need listening)\n if (port !== 0) {\n server.listen(port, () => {\n const address = server.address()\n if (address && typeof address === 'object') {\n actualPort = address.port\n }\n isListening = true\n })\n }\n\n /**\n * Closes the server and all active connections.\n */\n const close = async (): Promise<void> => {\n if (!isListening && port === 0) {\n return\n }\n\n return new Promise<void>((resolve) => {\n // Close all active connections first\n if (server.listening) {\n server.closeAllConnections()\n }\n\n const timeout = setTimeout(() => {\n // Force close on timeout\n if (server.listening) {\n server.closeAllConnections()\n }\n server.close(() => {\n resolve()\n })\n }, 5000)\n\n if (server.listening) {\n server.close(() => {\n clearTimeout(timeout)\n // Give a moment for all connections to close\n setTimeout(resolve, 100)\n })\n } else {\n clearTimeout(timeout)\n resolve()\n }\n })\n }\n\n return { app, server, handler, port: actualPort, close }\n }\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/a2a/server.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PaymentsA2AServer sets up and starts the A2A server for payments agents.\n * Handles A2A protocol endpoints and allows optional custom endpoints.\n *\n * The server provides a complete A2A protocol implementation with:\n * - JSON-RPC endpoint for A2A messages\n * - Agent Card endpoint (.well-known/agent.json)\n * - Bearer token extraction and validation\n * - Credit validation and burning\n * - Task execution and streaming\n * - Customizable routes and handlers\n */\nimport express from 'express'\nimport http from 'http'\nimport { InMemoryTaskStore, JsonRpcTransportHandler, AgentExecutor } from '@a2a-js/sdk/server'\nimport type { AgentCard, HttpRequestContext } from './types.js'\nimport { PaymentsRequestHandler } from './paymentsRequestHandler.js'\nimport type { Payments } from '../payments.js'\nimport { buildPaymentRequired, resolveNetwork, resolveScheme } from '../x402/facilitator-api.js'\nimport { X402_HEADERS } from '../x402/express/middleware.js'\n\n/**\n * Checks if a value is an AsyncIterable (used to detect streaming responses)\n */\nfunction isAsyncIterable<T>(value: any): value is AsyncIterable<T> {\n return value && typeof value[Symbol.asyncIterator] === 'function'\n}\n\n/**\n * Sends a JSON-RPC result. If it's an async iterator, streams as SSE; otherwise returns JSON.\n */\nasync function sendRpcResult(res: express.Response, result: any): Promise<void> {\n if (isAsyncIterable(result)) {\n res.setHeader('Content-Type', 'text/event-stream')\n res.setHeader('Cache-Control', 'no-cache')\n res.setHeader('Connection', 'keep-alive')\n const anyRes = res as any\n if (typeof anyRes.flushHeaders === 'function') anyRes.flushHeaders()\n try {\n for await (const chunk of result as AsyncGenerator<any, void, undefined>) {\n res.write(`data: ${JSON.stringify(chunk)}\\n\\n`)\n }\n } catch (err: any) {\n const errorEvent = {\n jsonrpc: '2.0',\n error: { code: err?.code || -32603, message: err?.message || 'Internal streaming error' },\n }\n res.write(`data: ${JSON.stringify(errorEvent)}\\n\\n`)\n }\n res.end()\n return\n }\n res.json(result)\n}\n\n/**\n * Options for starting the PaymentsA2AServer.\n * Provides comprehensive configuration for A2A server setup.\n */\nexport interface PaymentsA2AServerOptions {\n /** The agent card defining the agent's capabilities and metadata */\n agentCard: AgentCard\n /** User-implemented executor for handling A2A tasks */\n executor: AgentExecutor\n /** Payments service instance for credit validation and burning */\n paymentsService: any\n /** Port number to bind the server to */\n /** Port number to listen on. Use 0 for automatic port assignment. */\n port: number\n /** Custom task store implementation (defaults to InMemoryTaskStore) */\n taskStore?: any\n /** Base path for all A2A routes (defaults to '/') */\n basePath?: string\n /** Whether to expose the agent card at .well-known/agent.json */\n exposeAgentCard?: boolean\n /** Whether to expose default A2A JSON-RPC routes */\n exposeDefaultRoutes?: boolean\n /** Custom Express app instance (defaults to new express()) */\n expressApp?: express.Express\n /** Custom request handler to override JSON-RPC method handling */\n customRequestHandler?: any\n /** Options for configuring the PaymentsRequestHandler behavior */\n handlerOptions?: {\n asyncExecution?: boolean\n defaultBatch?: boolean\n defaultMarginPercent?: number\n }\n /** Hooks for intercepting requests before/after processing */\n hooks?: {\n /** Called before processing any JSON-RPC request */\n beforeRequest?: (method: string, params: any, req: express.Request) => Promise<void>\n /** Called after processing any JSON-RPC request */\n afterRequest?: (method: string, result: any, req: express.Request) => Promise<void>\n /** Called when a JSON-RPC request fails */\n onError?: (method: string, error: Error, req: express.Request) => Promise<void>\n }\n}\n\n/**\n * Result returned by the server start method.\n * Contains the Express app and HTTP server instances for further customization.\n */\nexport interface PaymentsA2AServerResult {\n /** The configured Express application */\n app: express.Express\n /** The HTTP server instance */\n server: http.Server\n /** The request handler instance for direct access if needed */\n handler: PaymentsRequestHandler\n /** The actual port the server is listening on */\n port: number\n /**\n * Closes the server and all active connections.\n * @returns Promise that resolves when the server is fully closed\n */\n close: () => Promise<void>\n}\n\n/**\n * Middleware to extract payment token from HTTP headers and store it in the global context.\n * This middleware is applied after A2A routes are set up and extracts authentication\n * information for credit validation.\n *\n * Accepts tokens from:\n * - payment-signature header (x402 HTTP transport spec v2)\n *\n * @param req - Express request object\n * @param res - Express response object\n * @param next - Express next function\n */\nasync function bearerTokenMiddleware(\n handler: PaymentsRequestHandler,\n paymentsService: Payments,\n req: express.Request,\n res: express.Response,\n next: express.NextFunction,\n) {\n // Only process POST requests (A2A uses POST for all operations)\n if (req.method !== 'POST') {\n return next()\n }\n\n // Transform relative URL to absolute URL\n const absoluteUrl = new URL(req.originalUrl, req.protocol + '://' + req.get('host')).toString()\n\n const agentCard = await handler.getAgentCard()\n const paymentExtension = agentCard.capabilities?.extensions?.find(\n (ext) => ext.uri === 'urn:nevermined:payment',\n )\n\n if (!paymentExtension?.params?.agentId) {\n res.status(402).json({\n error: {\n code: -32001,\n message: 'Agent ID not found in agent card payment extension.',\n },\n })\n return\n }\n\n // Build paymentRequired for 402 responses\n const planId = (paymentExtension.params?.planId as string) || ''\n const agentId = paymentExtension.params?.agentId as string\n const scheme = await resolveScheme(paymentsService, planId)\n const resolvedNetwork = await resolveNetwork(paymentsService, planId)\n const paymentRequired = buildPaymentRequired(planId, {\n endpoint: absoluteUrl,\n agentId,\n httpVerb: 'POST',\n network: resolvedNetwork,\n scheme,\n environment: paymentsService.getEnvironmentName(),\n })\n const paymentRequiredHeader = Buffer.from(JSON.stringify(paymentRequired)).toString('base64')\n\n // x402 HTTP spec v2: payment-signature header\n const bearerToken = req.headers['payment-signature'] as string | undefined\n\n if (!bearerToken) {\n res\n .status(402)\n .set(X402_HEADERS.PAYMENT_REQUIRED, paymentRequiredHeader)\n .json({\n error: {\n code: -32001,\n message: 'Missing payment-signature header.',\n },\n })\n return\n }\n\n let validation: any\n try {\n validation = await handler.validateRequest(bearerToken, absoluteUrl, req.method)\n if (!validation?.balance?.isSubscriber) {\n res.status(402).json({\n error: {\n code: -32001,\n message: 'Insufficient credits or invalid request.',\n },\n })\n return\n }\n } catch (err) {\n res.status(402).json({\n error: {\n code: -32001,\n message: 'Payment validation failed: ' + (err instanceof Error ? err.message : String(err)),\n },\n })\n return\n }\n\n const context: HttpRequestContext = {\n bearerToken,\n urlRequested: absoluteUrl,\n httpMethodRequested: req.method,\n validation,\n }\n // Try to associate context with taskId or messageId\n const taskId = req.body?.taskId\n const messageId = req.body?.params?.message?.messageId\n\n if (taskId) {\n handler.setHttpRequestContextForTask(taskId, context)\n } else if (messageId) {\n handler.setHttpRequestContextForMessage(messageId, context)\n }\n\n next()\n}\n\n/**\n * PaymentsA2AServer sets up the A2A endpoints and starts the server.\n *\n * This class provides a complete A2A protocol implementation with payment integration.\n * It handles:\n * - JSON-RPC message routing\n * - Agent card exposure\n * - Bearer token extraction\n * - Credit validation and burning\n * - Task execution and streaming\n * - Customizable routes and handlers\n *\n * @example\n * ```typescript\n * const server = PaymentsA2AServer.start({\n * agentCard: myAgentCard,\n * executor: new MyExecutor(),\n * paymentsService: payments,\n * port: 41242,\n * basePath: '/a2a/',\n * hooks: {\n * beforeRequest: async (method, params, req) => {\n * console.log(`Processing ${method} request`)\n * }\n * }\n * })\n * ```\n */\nexport class PaymentsA2AServer {\n /**\n * Starts the A2A server with the given options.\n *\n * This method sets up the complete A2A server infrastructure including:\n * - Express app configuration\n * - A2A route setup\n * - Middleware for bearer token extraction\n * - Agent card endpoint\n * - HTTP server creation and binding\n *\n * @param options - Server configuration options\n * @returns Server result containing app, server, adapter, and handler instances\n *\n * @example\n * ```typescript\n * const result = PaymentsA2AServer.start({\n * agentCard: buildPaymentAgentCard(baseCard, paymentMetadata),\n * executor: new MyPaymentsExecutor(),\n * paymentsService: payments,\n * port: 41242,\n * basePath: '/a2a/',\n * exposeAgentCard: true,\n * exposeDefaultRoutes: true\n * })\n *\n * // Access the Express app for additional routes\n * result.app.get('/health', (req, res) => res.json({ status: 'ok' }))\n * ```\n */\n static start(options: PaymentsA2AServerOptions): PaymentsA2AServerResult {\n const {\n agentCard,\n executor,\n paymentsService,\n port,\n taskStore,\n basePath = '/',\n exposeAgentCard = true,\n exposeDefaultRoutes = true,\n expressApp,\n customRequestHandler,\n handlerOptions,\n hooks,\n } = options\n\n // Initialize components\n const store = taskStore || new InMemoryTaskStore()\n const handler =\n customRequestHandler ||\n new PaymentsRequestHandler(\n agentCard,\n store,\n executor,\n paymentsService,\n undefined,\n handlerOptions,\n )\n const transport = new JsonRpcTransportHandler(handler)\n\n const app = expressApp || express()\n\n if (exposeAgentCard) {\n const agentCardPath =\n basePath === '/'\n ? '/.well-known/agent.json'\n : `${basePath.replace(/\\/$/, '')}/.well-known/agent.json`\n app.get(agentCardPath, (req, res) => {\n res.json(agentCard)\n })\n }\n\n if (exposeDefaultRoutes) {\n // Apply bearer token middleware for all requests under basePath\n app.use(basePath, express.json(), (req, res, next) => {\n bearerTokenMiddleware(handler, paymentsService, req, res, next).catch(next)\n })\n\n // Apply hooks middleware after body parsing and validation\n if (hooks) {\n app.use(basePath, (req, res, next) => {\n if (req.method === 'POST' && req.body?.method) {\n const { method, params } = req.body\n\n // Apply beforeRequest hook\n if (hooks.beforeRequest) {\n hooks.beforeRequest(method, params, req).catch((err) => {\n console.error('[HOOKS] beforeRequest error:', err)\n })\n }\n\n // Apply afterRequest hook by intercepting res.json\n const originalJson = res.json\n res.json = function (data) {\n if (hooks.afterRequest) {\n hooks.afterRequest(method, data, req).catch((err) => {\n console.error('[HOOKS] afterRequest error:', err)\n })\n }\n return originalJson.call(this, data)\n }\n\n // Apply onError hook by catching errors\n const originalSend = res.send\n res.send = function (data) {\n if (data?.error && hooks.onError) {\n hooks\n .onError(method, new Error(data.error.message || 'Unknown error'), req)\n .catch((err) => {\n console.error('[HOOKS] onError error:', err)\n })\n }\n return originalSend.call(this, data)\n }\n }\n next()\n })\n }\n\n app.post(basePath, async (req, res) => {\n try {\n const result = await transport.handle(req.body)\n await sendRpcResult(res, result)\n } catch (err: any) {\n if (res.headersSent) {\n console.error('[PaymentsA2A] Error after headers sent:', err?.message)\n res.end()\n return\n }\n res.status(500).json({\n error: { code: -32603, message: err?.message || 'Internal server error' },\n })\n }\n })\n }\n\n const server = http.createServer(app)\n\n // Add error handling for server startup\n server.on('error', (error: any) => {\n console.error(`[PaymentsA2A] Server error:`, error)\n if (error.code === 'EADDRINUSE') {\n console.error(`[PaymentsA2A] Port ${port} is already in use`)\n }\n })\n\n // If port is 0, the OS will assign a free port automatically\n let actualPort = port\n let isListening = false\n\n // Only start listening if port is not 0 (0 is used with supertest which doesn't need listening)\n if (port !== 0) {\n server.listen(port, () => {\n const address = server.address()\n if (address && typeof address === 'object') {\n actualPort = address.port\n }\n isListening = true\n })\n }\n\n /**\n * Closes the server and all active connections.\n */\n const close = async (): Promise<void> => {\n if (!isListening && port === 0) {\n return\n }\n\n return new Promise<void>((resolve) => {\n // Close all active connections first\n if (server.listening) {\n server.closeAllConnections()\n }\n\n const timeout = setTimeout(() => {\n // Force close on timeout\n if (server.listening) {\n server.closeAllConnections()\n }\n server.close(() => {\n resolve()\n })\n }, 5000)\n\n if (server.listening) {\n server.close(() => {\n clearTimeout(timeout)\n // Give a moment for all connections to close\n setTimeout(resolve, 100)\n })\n } else {\n clearTimeout(timeout)\n resolve()\n }\n })\n }\n\n return { app, server, handler, port: actualPort, close }\n }\n}\n"]}
@@ -122,6 +122,7 @@ export interface ClientRegistryOptions {
122
122
  agentId: string;
123
123
  planId: string;
124
124
  agentCardPath?: string;
125
+ delegationConfig?: import('../common/types.js').DelegationConfig;
125
126
  }
126
127
  /**
127
128
  * Options for agent interaction methods (used by PaymentsClient).
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/a2a/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,qCAAqC,EACrC,YAAY,EACZ,qCAAqC,EACtC,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,IAAI,GAAG,qBAAqB,GAAG,uBAAuB,CAAA;AAE7F;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAA;IACpB,gEAAgE;IAChE,YAAY,CAAC,EAAE,IAAI,CAAA;IACnB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAA;CAC7E;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,sEAAsE;IACtE,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChD,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iCAAiC;IACjC,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACjC,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,uBAAuB,CAAA;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,UAAU,EAAE,iBAAiB,CAAA;CAC9B,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,6BAA6B;IAC7B,YAAY,EAAE,iBAAiB,CAAA;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,kDAAkD;IAClD,UAAU,EAAE,aAAa,CAAA;IACzB,4CAA4C;IAC5C,WAAW,EAAE,kBAAkB,CAAA;IAC/B,2EAA2E;IAC3E,eAAe,EAAE,QAAQ,CAAA;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,WAAW,EAAE,OAAO,CAAA;IACpB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,gEAAgE;IAChE,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,mDAAmD;IACnD,cAAc,CAAC,EAAE,IAAI,EAAE,CAAA;IACvB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,gEAAgE;IAChE,YAAY,CAAC,EAAE,IAAI,CAAA;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,mBAAmB,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,cAAc,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3F,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvE;AAGD,YAAY,EACV,SAAS,EACT,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,0BAA0B,EAC1B,qCAAqC,EACrC,YAAY,EACZ,qCAAqC,EACrC,iBAAiB,EACjB,aAAa,GACd,CAAA;AAGD,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/a2a/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/a2a/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG","sourcesContent":["/**\n * Types and interfaces for the A2A payments integration.\n *\n * This module defines the core types and interfaces used throughout the A2A\n * payments integration. It provides:\n * - Task context structures for user executors\n * - Handler result definitions\n * - Payment metadata interfaces\n * - Re-exports of A2A SDK types for convenience\n *\n * These types ensure type safety and provide clear contracts between\n * the user's executor implementation and the payments system.\n */\n\nimport type {\n AgentCard,\n Task,\n Message,\n Artifact,\n TaskState,\n Part,\n TaskStatusUpdateEvent,\n TaskArtifactUpdateEvent,\n PushNotificationConfig,\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n} from '@a2a-js/sdk'\n\nimport type { ExecutionEventBus, AgentExecutor } from '@a2a-js/sdk/server'\nimport type { StartAgentRequest } from '../common/types.ts'\nimport type { Payments } from '../payments.ts'\n\n/**\n * Union type for A2A streaming events\n *\n * This type represents all possible events that can be yielded by A2A streaming methods.\n * It includes messages, tasks, status updates, and artifact updates.\n */\nexport type A2AStreamEvent = Message | Task | TaskStatusUpdateEvent | TaskArtifactUpdateEvent\n\n/**\n * Context provided to the user's task handler.\n *\n * This interface contains all the information available to the user's\n * executor when handling an A2A task. It includes:\n * - The original user message\n * - Any existing task state (for continuation)\n * - Authentication information\n * - Request metadata\n *\n * The context is created by the PaymentsA2AAdapter and passed to the\n * user's handleTask method.\n */\nexport interface TaskContext {\n /** The original message from the user containing the request */\n userMessage: Message\n /** Any existing task state (for task continuation scenarios) */\n existingTask?: Task\n /** Bearer token for authentication and payment validation */\n bearerToken?: string\n /** Additional metadata from the original request */\n requestMetadata?: Record<string, any>\n /**\n * Emit a streaming event to the client (SSE, WebSocket, etc.) during task execution.\n * This function allows the executor to send intermediate messages or progress updates.\n *\n * @param parts - Array of message parts (text, etc.) to send as a streaming event\n * @param metadata - Optional metadata to include with the event\n */\n emitStreamingEvent?: (parts: Part[], metadata?: Record<string, any>) => void\n}\n\n/**\n * Result returned by the user's task handler.\n *\n * This interface defines the structure that user executors must return\n * from their handleTask method. The result includes:\n * - Parts that will be converted to A2A Message or Artifact objects\n * - Optional metadata for payment tracking and other purposes\n * - Task state information\n *\n * The result is processed by the PaymentsA2AAdapter to create the\n * appropriate A2A protocol objects and handle payment operations.\n */\nexport interface TaskHandlerResult {\n /** Parts that will be converted to A2A Message or Artifact objects */\n parts: Part[]\n /** Optional metadata including payment information and custom data */\n metadata?: PaymentMetadata & Record<string, any>\n /** The final state of the task */\n state?: TaskState\n}\n\n/**\n * Configuration for credit redemption behavior\n *\n * This interface defines how credits should be redeemed for a specific agent.\n * The configuration is set at the server level and cannot be manipulated by clients.\n */\nexport interface PaymentRedemptionConfig {\n /** Whether to use batch processing for redemptions */\n useBatch?: boolean\n /** Whether to use margin-based redemptions (if false, uses fixed credits) */\n useMargin?: boolean\n /** Margin percentage (0-100) when using margin-based redemptions */\n marginPercent?: number\n}\n\n/**\n * Metadata for payment/credits information to be included in A2A objects.\n *\n * This interface defines the payment-related metadata that can be included\n * in task handler results. This metadata is used for:\n * - Credit tracking and validation\n * - Payment processing\n * - Cost reporting\n * - Plan management\n *\n * The metadata is embedded in A2A Message objects and can be used by\n * clients to understand the cost of operations.\n */\nexport interface PaymentMetadata {\n /** Number of credits used for this operation */\n creditsUsed?: number\n /** ID of the payment plan associated with this operation */\n planId?: string\n /** Type of payment model used */\n paymentType?: 'fixed' | 'dynamic'\n /** Human-readable description of the cost */\n costDescription?: string\n /** Agent ID for payment tracking */\n agentId?: string\n /** Configuration for credit redemption behavior */\n redemptionConfig?: PaymentRedemptionConfig\n}\n\n/**\n * Options required to register or retrieve a client in the registry.\n */\nexport interface ClientRegistryOptions {\n agentBaseUrl: string\n agentId: string\n planId: string\n agentCardPath?: string\n}\n\n/**\n * Options for agent interaction methods (used by PaymentsClient).\n */\nexport interface AgentOptions {\n agentId: string\n planId?: string\n}\n\n/**\n * HTTP context associated with a task or message (for internal request tracking).\n */\nexport type HttpRequestContext = {\n bearerToken?: string\n urlRequested?: string\n httpMethodRequested?: string\n validation: StartAgentRequest\n}\n\n/**\n * Authentication result for A2A requests (equivalent to MCP AuthResult)\n */\nexport interface A2AAuthResult {\n /** The agent request ID for tracking */\n requestId: string\n /** The bearer token for authentication */\n token: string\n /** The agent ID */\n agentId: string\n /** The agent request data */\n agentRequest: StartAgentRequest\n}\n\n/**\n * Agent request context provided to A2A AgentExecutors\n *\n * This context contains all the payment-related data that an AgentExecutor needs\n * to process requests with payment integration. The agent is responsible for\n * calculating and specifying credits in its final response.\n */\nexport interface AgentRequestContext {\n /** Authentication result with request metadata */\n authResult: A2AAuthResult\n /** The HTTP context with request details */\n httpContext: HttpRequestContext\n /** The payments service instance for observability and other operations */\n paymentsService: Payments\n}\n\n/**\n * Base RequestContext interface (local definition based on actual usage)\n *\n * This defines the structure that the A2A SDK RequestContext actually has\n * based on how it's used in PaymentsRequestHandler.\n */\nexport interface RequestContext {\n /** The original message from the user containing the request */\n userMessage: Message\n /** Unique identifier for the task */\n taskId: string\n /** Unique identifier for the context/conversation */\n contextId: string\n /** Any existing task state (for task continuation scenarios) */\n task?: Task\n /** Reference tasks for multi-turn conversations */\n referenceTasks?: Task[]\n /** Additional metadata from the original request */\n requestMetadata?: Record<string, any>\n /** Any existing task state (for task continuation scenarios) */\n existingTask?: Task\n}\n\n/**\n * Extended RequestContext with agent request data injection\n *\n * This extends the standard A2A RequestContext to include agent request context\n * while maintaining compatibility with the A2A protocol.\n */\nexport interface PaymentsRequestContext extends RequestContext {\n /** Agent request context injection (following MCP pattern) */\n payments?: AgentRequestContext\n}\n\n/**\n * Payments-specific AgentExecutor that uses PaymentsRequestContext\n */\nexport interface PaymentsAgentExecutor {\n execute(requestContext: PaymentsRequestContext, eventBus: ExecutionEventBus): Promise<void>\n cancelTask(taskId: string, eventBus: ExecutionEventBus): Promise<void>\n}\n\n// Re-export A2A SDK types for convenience\nexport type {\n AgentCard,\n Task,\n Message,\n Artifact,\n TaskState,\n Part,\n TaskStatusUpdateEvent,\n PushNotificationConfig,\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n ExecutionEventBus,\n AgentExecutor,\n}\n\n// Re-export server options type for convenience\nexport type { PaymentsA2AServerOptions } from './server.ts'\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/a2a/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG","sourcesContent":["/**\n * Types and interfaces for the A2A payments integration.\n *\n * This module defines the core types and interfaces used throughout the A2A\n * payments integration. It provides:\n * - Task context structures for user executors\n * - Handler result definitions\n * - Payment metadata interfaces\n * - Re-exports of A2A SDK types for convenience\n *\n * These types ensure type safety and provide clear contracts between\n * the user's executor implementation and the payments system.\n */\n\nimport type {\n AgentCard,\n Task,\n Message,\n Artifact,\n TaskState,\n Part,\n TaskStatusUpdateEvent,\n TaskArtifactUpdateEvent,\n PushNotificationConfig,\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n} from '@a2a-js/sdk'\n\nimport type { ExecutionEventBus, AgentExecutor } from '@a2a-js/sdk/server'\nimport type { StartAgentRequest } from '../common/types.ts'\nimport type { Payments } from '../payments.ts'\n\n/**\n * Union type for A2A streaming events\n *\n * This type represents all possible events that can be yielded by A2A streaming methods.\n * It includes messages, tasks, status updates, and artifact updates.\n */\nexport type A2AStreamEvent = Message | Task | TaskStatusUpdateEvent | TaskArtifactUpdateEvent\n\n/**\n * Context provided to the user's task handler.\n *\n * This interface contains all the information available to the user's\n * executor when handling an A2A task. It includes:\n * - The original user message\n * - Any existing task state (for continuation)\n * - Authentication information\n * - Request metadata\n *\n * The context is created by the PaymentsA2AAdapter and passed to the\n * user's handleTask method.\n */\nexport interface TaskContext {\n /** The original message from the user containing the request */\n userMessage: Message\n /** Any existing task state (for task continuation scenarios) */\n existingTask?: Task\n /** Bearer token for authentication and payment validation */\n bearerToken?: string\n /** Additional metadata from the original request */\n requestMetadata?: Record<string, any>\n /**\n * Emit a streaming event to the client (SSE, WebSocket, etc.) during task execution.\n * This function allows the executor to send intermediate messages or progress updates.\n *\n * @param parts - Array of message parts (text, etc.) to send as a streaming event\n * @param metadata - Optional metadata to include with the event\n */\n emitStreamingEvent?: (parts: Part[], metadata?: Record<string, any>) => void\n}\n\n/**\n * Result returned by the user's task handler.\n *\n * This interface defines the structure that user executors must return\n * from their handleTask method. The result includes:\n * - Parts that will be converted to A2A Message or Artifact objects\n * - Optional metadata for payment tracking and other purposes\n * - Task state information\n *\n * The result is processed by the PaymentsA2AAdapter to create the\n * appropriate A2A protocol objects and handle payment operations.\n */\nexport interface TaskHandlerResult {\n /** Parts that will be converted to A2A Message or Artifact objects */\n parts: Part[]\n /** Optional metadata including payment information and custom data */\n metadata?: PaymentMetadata & Record<string, any>\n /** The final state of the task */\n state?: TaskState\n}\n\n/**\n * Configuration for credit redemption behavior\n *\n * This interface defines how credits should be redeemed for a specific agent.\n * The configuration is set at the server level and cannot be manipulated by clients.\n */\nexport interface PaymentRedemptionConfig {\n /** Whether to use batch processing for redemptions */\n useBatch?: boolean\n /** Whether to use margin-based redemptions (if false, uses fixed credits) */\n useMargin?: boolean\n /** Margin percentage (0-100) when using margin-based redemptions */\n marginPercent?: number\n}\n\n/**\n * Metadata for payment/credits information to be included in A2A objects.\n *\n * This interface defines the payment-related metadata that can be included\n * in task handler results. This metadata is used for:\n * - Credit tracking and validation\n * - Payment processing\n * - Cost reporting\n * - Plan management\n *\n * The metadata is embedded in A2A Message objects and can be used by\n * clients to understand the cost of operations.\n */\nexport interface PaymentMetadata {\n /** Number of credits used for this operation */\n creditsUsed?: number\n /** ID of the payment plan associated with this operation */\n planId?: string\n /** Type of payment model used */\n paymentType?: 'fixed' | 'dynamic'\n /** Human-readable description of the cost */\n costDescription?: string\n /** Agent ID for payment tracking */\n agentId?: string\n /** Configuration for credit redemption behavior */\n redemptionConfig?: PaymentRedemptionConfig\n}\n\n/**\n * Options required to register or retrieve a client in the registry.\n */\nexport interface ClientRegistryOptions {\n agentBaseUrl: string\n agentId: string\n planId: string\n agentCardPath?: string\n delegationConfig?: import('../common/types.js').DelegationConfig\n}\n\n/**\n * Options for agent interaction methods (used by PaymentsClient).\n */\nexport interface AgentOptions {\n agentId: string\n planId?: string\n}\n\n/**\n * HTTP context associated with a task or message (for internal request tracking).\n */\nexport type HttpRequestContext = {\n bearerToken?: string\n urlRequested?: string\n httpMethodRequested?: string\n validation: StartAgentRequest\n}\n\n/**\n * Authentication result for A2A requests (equivalent to MCP AuthResult)\n */\nexport interface A2AAuthResult {\n /** The agent request ID for tracking */\n requestId: string\n /** The bearer token for authentication */\n token: string\n /** The agent ID */\n agentId: string\n /** The agent request data */\n agentRequest: StartAgentRequest\n}\n\n/**\n * Agent request context provided to A2A AgentExecutors\n *\n * This context contains all the payment-related data that an AgentExecutor needs\n * to process requests with payment integration. The agent is responsible for\n * calculating and specifying credits in its final response.\n */\nexport interface AgentRequestContext {\n /** Authentication result with request metadata */\n authResult: A2AAuthResult\n /** The HTTP context with request details */\n httpContext: HttpRequestContext\n /** The payments service instance for observability and other operations */\n paymentsService: Payments\n}\n\n/**\n * Base RequestContext interface (local definition based on actual usage)\n *\n * This defines the structure that the A2A SDK RequestContext actually has\n * based on how it's used in PaymentsRequestHandler.\n */\nexport interface RequestContext {\n /** The original message from the user containing the request */\n userMessage: Message\n /** Unique identifier for the task */\n taskId: string\n /** Unique identifier for the context/conversation */\n contextId: string\n /** Any existing task state (for task continuation scenarios) */\n task?: Task\n /** Reference tasks for multi-turn conversations */\n referenceTasks?: Task[]\n /** Additional metadata from the original request */\n requestMetadata?: Record<string, any>\n /** Any existing task state (for task continuation scenarios) */\n existingTask?: Task\n}\n\n/**\n * Extended RequestContext with agent request data injection\n *\n * This extends the standard A2A RequestContext to include agent request context\n * while maintaining compatibility with the A2A protocol.\n */\nexport interface PaymentsRequestContext extends RequestContext {\n /** Agent request context injection (following MCP pattern) */\n payments?: AgentRequestContext\n}\n\n/**\n * Payments-specific AgentExecutor that uses PaymentsRequestContext\n */\nexport interface PaymentsAgentExecutor {\n execute(requestContext: PaymentsRequestContext, eventBus: ExecutionEventBus): Promise<void>\n cancelTask(taskId: string, eventBus: ExecutionEventBus): Promise<void>\n}\n\n// Re-export A2A SDK types for convenience\nexport type {\n AgentCard,\n Task,\n Message,\n Artifact,\n TaskState,\n Part,\n TaskStatusUpdateEvent,\n PushNotificationConfig,\n MessageSendParams,\n SendMessageResponse,\n TaskQueryParams,\n GetTaskResponse,\n TaskPushNotificationConfig,\n SetTaskPushNotificationConfigResponse,\n TaskIdParams,\n GetTaskPushNotificationConfigResponse,\n ExecutionEventBus,\n AgentExecutor,\n}\n\n// Re-export server options type for convenience\nexport type { PaymentsA2AServerOptions } from './server.ts'\n"]}
@@ -22,10 +22,10 @@ export declare const API_URL_VALIDATE_AGENT_ACCESS_TOKEN = "/api/v1/protocol/tok
22
22
  export declare const API_URL_CREATE_PERMISSION = "/api/v1/x402/permissions";
23
23
  export declare const API_URL_VERIFY_PERMISSIONS = "/api/v1/x402/verify";
24
24
  export declare const API_URL_SETTLE_PERMISSIONS = "/api/v1/x402/settle";
25
- export declare const API_URL_STRIPE_CHECKOUT = "/api/v1/stripe/payment";
25
+ export declare const API_URL_STRIPE_CHECKOUT = "/api/v1/fiat/stripe/payment";
26
26
  export declare const API_URL_CREATE_USER = "/api/v1/organizations/account";
27
27
  export declare const API_URL_GET_MEMBERS = "/api/v1/organizations/members";
28
- export declare const API_URL_CONNECT_STRIPE_ACCOUNT = "/api/v1/stripe/account";
28
+ export declare const API_URL_CONNECT_STRIPE_ACCOUNT = "/api/v1/fiat/stripe/account";
29
29
  export interface BackendApiOptions {
30
30
  /**
31
31
  * The host of the backend server
@@ -1 +1 @@
1
- {"version":3,"file":"nvm-api.d.ts","sourceRoot":"","sources":["../../src/api/nvm-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,2BAA2B,CAAA;AAC7D,eAAO,MAAM,sBAAsB,4BAA4B,CAAA;AAC/D,eAAO,MAAM,gCAAgC,kCAAkC,CAAA;AAC/E,eAAO,MAAM,iBAAiB,qCAAqC,CAAA;AACnE,eAAO,MAAM,oBAAoB,qCAAqC,CAAA;AACtE,eAAO,MAAM,uBAAuB,2CAA2C,CAAA;AAC/E,eAAO,MAAM,gBAAgB,mCAAmC,CAAA;AAChE,eAAO,MAAM,iBAAiB,2BAA2B,CAAA;AACzD,eAAO,MAAM,uBAAuB,0CAA0C,CAAA;AAC9E,eAAO,MAAM,kBAAkB,yCAAyC,CAAA;AACxE,eAAO,MAAM,iBAAiB,gCAAgC,CAAA;AAC9D,eAAO,MAAM,2BAA2B,yCAAyC,CAAA;AACjF,eAAO,MAAM,sBAAsB,kDAAkD,CAAA;AACrF,eAAO,MAAM,yBAAyB,kDAAkD,CAAA;AACxF,eAAO,MAAM,mBAAmB,kCAAkC,CAAA;AAClE,eAAO,MAAM,oBAAoB,0DAA0D,CAAA;AAC3F,eAAO,MAAM,wBAAwB,gDAAgD,CAAA;AACrF,eAAO,MAAM,8BAA8B,2CAA2C,CAAA;AACtF,eAAO,MAAM,qCAAqC,4CAA4C,CAAA;AAC9F,eAAO,MAAM,4BAA4B,qCAAqC,CAAA;AAC9E,eAAO,MAAM,mCAAmC,6CAA6C,CAAA;AAC7F,eAAO,MAAM,yBAAyB,6BAA6B,CAAA;AACnE,eAAO,MAAM,0BAA0B,wBAAwB,CAAA;AAC/D,eAAO,MAAM,0BAA0B,wBAAwB,CAAA;AAC/D,eAAO,MAAM,uBAAuB,2BAA2B,CAAA;AAC/D,eAAO,MAAM,mBAAmB,kCAAkC,CAAA;AAClE,eAAO,MAAM,mBAAmB,kCAAkC,CAAA;AAClE,eAAO,MAAM,8BAA8B,2BAA2B,CAAA;AAEtE,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CACpC;AAED,qBAAa,kBAAkB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,UAAO;IACvB,SAAS,CAAC,EAAE,MAAM,CAAY;IAC9B,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAK;CACzC;AAED,8BAAsB,kBAAkB;;IAyCtC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB;IAW7D,YAAY,CAAC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,WAAW,CAAC,EAAE,MAAM;;;IActE,OAAO,CACX,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,EACnD,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,UAAU,GAAE,kBAEX;IAqBG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,kBAA+C;IAI5E,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,kBAAkB;IAI3D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,kBAAkB;IAI1D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,kBAAkB;CAGpE"}
1
+ {"version":3,"file":"nvm-api.d.ts","sourceRoot":"","sources":["../../src/api/nvm-api.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB,2BAA2B,CAAA;AAC7D,eAAO,MAAM,sBAAsB,4BAA4B,CAAA;AAC/D,eAAO,MAAM,gCAAgC,kCAAkC,CAAA;AAC/E,eAAO,MAAM,iBAAiB,qCAAqC,CAAA;AACnE,eAAO,MAAM,oBAAoB,qCAAqC,CAAA;AACtE,eAAO,MAAM,uBAAuB,2CAA2C,CAAA;AAC/E,eAAO,MAAM,gBAAgB,mCAAmC,CAAA;AAChE,eAAO,MAAM,iBAAiB,2BAA2B,CAAA;AACzD,eAAO,MAAM,uBAAuB,0CAA0C,CAAA;AAC9E,eAAO,MAAM,kBAAkB,yCAAyC,CAAA;AACxE,eAAO,MAAM,iBAAiB,gCAAgC,CAAA;AAC9D,eAAO,MAAM,2BAA2B,yCAAyC,CAAA;AACjF,eAAO,MAAM,sBAAsB,kDAAkD,CAAA;AACrF,eAAO,MAAM,yBAAyB,kDAAkD,CAAA;AACxF,eAAO,MAAM,mBAAmB,kCAAkC,CAAA;AAClE,eAAO,MAAM,oBAAoB,0DAA0D,CAAA;AAC3F,eAAO,MAAM,wBAAwB,gDAAgD,CAAA;AACrF,eAAO,MAAM,8BAA8B,2CAA2C,CAAA;AACtF,eAAO,MAAM,qCAAqC,4CAA4C,CAAA;AAC9F,eAAO,MAAM,4BAA4B,qCAAqC,CAAA;AAC9E,eAAO,MAAM,mCAAmC,6CAA6C,CAAA;AAC7F,eAAO,MAAM,yBAAyB,6BAA6B,CAAA;AACnE,eAAO,MAAM,0BAA0B,wBAAwB,CAAA;AAC/D,eAAO,MAAM,0BAA0B,wBAAwB,CAAA;AAC/D,eAAO,MAAM,uBAAuB,gCAAgC,CAAA;AACpE,eAAO,MAAM,mBAAmB,kCAAkC,CAAA;AAClE,eAAO,MAAM,mBAAmB,kCAAkC,CAAA;AAClE,eAAO,MAAM,8BAA8B,gCAAgC,CAAA;AAE3E,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;CACpC;AAED,qBAAa,kBAAkB;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,UAAO;IACvB,SAAS,CAAC,EAAE,MAAM,CAAY;IAC9B,OAAO,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAK;CACzC;AAED,8BAAsB,kBAAkB;;IAyCtC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB;IAW7D,YAAY,CAAC,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAAE,WAAW,CAAC,EAAE,MAAM;;;IActE,OAAO,CACX,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,EACnD,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,UAAU,GAAE,kBAEX;IAqBG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,kBAA+C;IAI5E,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,kBAAkB;IAI3D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,kBAAkB;IAI1D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,kBAAkB;CAGpE"}
@@ -23,10 +23,10 @@ export const API_URL_VALIDATE_AGENT_ACCESS_TOKEN = '/api/v1/protocol/token/valid
23
23
  export const API_URL_CREATE_PERMISSION = '/api/v1/x402/permissions';
24
24
  export const API_URL_VERIFY_PERMISSIONS = '/api/v1/x402/verify';
25
25
  export const API_URL_SETTLE_PERMISSIONS = '/api/v1/x402/settle';
26
- export const API_URL_STRIPE_CHECKOUT = '/api/v1/stripe/payment';
26
+ export const API_URL_STRIPE_CHECKOUT = '/api/v1/fiat/stripe/payment';
27
27
  export const API_URL_CREATE_USER = '/api/v1/organizations/account';
28
28
  export const API_URL_GET_MEMBERS = '/api/v1/organizations/members';
29
- export const API_URL_CONNECT_STRIPE_ACCOUNT = '/api/v1/stripe/account';
29
+ export const API_URL_CONNECT_STRIPE_ACCOUNT = '/api/v1/fiat/stripe/account';
30
30
  export class HTTPRequestOptions {
31
31
  constructor() {
32
32
  this.sendThroughProxy = true;
@@ -1 +1 @@
1
- {"version":3,"file":"nvm-api.js","sourceRoot":"","sources":["../../src/api/nvm-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAA;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAA;AAC/D,MAAM,CAAC,MAAM,gCAAgC,GAAG,+BAA+B,CAAA;AAC/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAA;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,kCAAkC,CAAA;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,wCAAwC,CAAA;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,gCAAgC,CAAA;AAChE,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAA;AACzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,uCAAuC,CAAA;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,sCAAsC,CAAA;AACxE,MAAM,CAAC,MAAM,iBAAiB,GAAG,6BAA6B,CAAA;AAC9D,MAAM,CAAC,MAAM,2BAA2B,GAAG,sCAAsC,CAAA;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,+CAA+C,CAAA;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,+CAA+C,CAAA;AACxF,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAA;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,uDAAuD,CAAA;AAC3F,MAAM,CAAC,MAAM,wBAAwB,GAAG,6CAA6C,CAAA;AACrF,MAAM,CAAC,MAAM,8BAA8B,GAAG,wCAAwC,CAAA;AACtF,MAAM,CAAC,MAAM,qCAAqC,GAAG,yCAAyC,CAAA;AAC9F,MAAM,CAAC,MAAM,4BAA4B,GAAG,kCAAkC,CAAA;AAC9E,MAAM,CAAC,MAAM,mCAAmC,GAAG,0CAA0C,CAAA;AAC7F,MAAM,CAAC,MAAM,yBAAyB,GAAG,0BAA0B,CAAA;AACnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,qBAAqB,CAAA;AAC/D,MAAM,CAAC,MAAM,0BAA0B,GAAG,qBAAqB,CAAA;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAA;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAA;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,+BAA+B,CAAA;AAClE,MAAM,CAAC,MAAM,8BAA8B,GAAG,wBAAwB,CAAA;AA0BtE,MAAM,OAAO,kBAAkB;IAA/B;QAEE,qBAAgB,GAAG,IAAI,CAAA;QACvB,cAAS,GAAY,SAAS,CAAA;QAC9B,YAAO,GAA+B,EAAE,CAAA;IAC1C,CAAC;CAAA;AAED,MAAM,OAAgB,kBAAkB;IACtC,oCAAoC;IACpC,yBAAyB;IACzB,uBAAuB;IAEvB,yCAAyC;IACzC,6BAA6B;IAC7B,kCAAkC;IAClC,uBAAuB;IACvB,sEAAsE;IACtE,MAAM;IAEN,kBAAkB;IAClB,eAAe;IACf,+BAA+B;IAC/B,MAAM;IAEN,UAAU;IACV,6DAA6D;IAC7D,gDAAgD;IAChD,0CAA0C;IAC1C,6BAA6B;IAC7B,UAAU;IACV,QAAQ;IACR,cAAc;IACd,0BAA0B;IAC1B,MAAM;IAEN,mBAAmB;IACnB,UAAU;IACV,kDAAkD;IAClD,gDAAgD;IAChD,sBAAsB;IACtB,6FAA6F;IAC7F,MAAM;IACN,IAAI;IAEJ;QACE,iEAAiE;IACnE,CAAC;IAED,QAAQ,CAAC,YAAoB,EAAE,UAA8B;QAC3D,IAAI,KAAU,CAAA;QACd,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,SAAS;gBACvB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;YACzE,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAA;QAC/E,CAAC;aAAM,CAAC;YACN,OAAO,YAAY,CAAA;QACrB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,cAAyC,EAAE,WAAoB;QAC1E,OAAO;YACL,GAAG,CAAC,WAAW,IAAI,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE,CAAC;YAC9D,GAAG,cAAc;SAClB,CAAA;IACH,CAAC;IAED,kCAAkC;IAClC,0BAA0B;IAC1B,4BAA4B;IAC5B,wCAAwC;IACxC,MAAM;IACN,IAAI;IAEJ,KAAK,CAAC,OAAO,CACX,MAAmD,EACnD,GAAW,EACX,IAAU,EACV,aAAiC;QAC/B,gBAAgB,EAAE,KAAK;KACxB;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC;gBAC3B,MAAM;gBACN,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;gBACnC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,EAAE,UAAU,CAAC,WAAW,CAAC;gBAC5E,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,kDAAkD;aAC1E,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAA;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACb,QAAQ,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,gBAAgB,EAAE,CACjF,CAAA;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QACxE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,aAAiC,EAAE,gBAAgB,EAAE,IAAI,EAAE;QAChF,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,IAAS,EAAE,UAA8B;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,IAAS,EAAE,UAA8B;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,IAAS,EAAE,UAA8B;QACjE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAA;IACtD,CAAC;CACF","sourcesContent":["import axios from 'axios'\n\nexport const API_URL_REGISTER_PLAN = '/api/v1/protocol/plans'\nexport const API_URL_REGISTER_AGENT = '/api/v1/protocol/agents'\nexport const API_URL_REGISTER_AGENTS_AND_PLAN = '/api/v1/protocol/agents/plans'\nexport const API_URL_GET_AGENT = '/api/v1/protocol/agents/:agentId'\nexport const API_URL_UPDATE_AGENT = '/api/v1/protocol/agents/:agentId'\nexport const API_URL_GET_AGENT_PLANS = '/api/v1/protocol/agents/:agentId/plans'\nexport const API_URL_GET_PLAN = '/api/v1/protocol/plans/:planId'\nexport const API_URL_GET_PLANS = '/api/v1/protocol/plans'\nexport const API_URL_GET_PLAN_AGENTS = '/api/v1/protocol/plans/:planId/agents'\nexport const API_URL_ORDER_PLAN = '/api/v1/protocol/plans/:planId/order'\nexport const API_URL_MINT_PLAN = '/api/v1/protocol/plans/mint'\nexport const API_URL_MINT_EXPIRABLE_PLAN = '/api/v1/protocol/plans/mintExpirable'\nexport const API_URL_ADD_PLAN_AGENT = '/api/v1/protocol/agents/:agentId/plan/:planId'\nexport const API_URL_REMOVE_PLAN_AGENT = '/api/v1/protocol/agents/:agentId/plan/:planId'\nexport const API_URL_REDEEM_PLAN = '/api/v1/protocol/plans/redeem'\nexport const API_URL_PLAN_BALANCE = '/api/v1/protocol/plans/:planId/balance/:holderAddress'\nexport const API_URL_INITIALIZE_AGENT = '/api/v1/protocol/agents/initialize/:agentId'\nexport const API_URL_SIMULATE_AGENT_REQUEST = '/api/v1/protocol/agents/simulate/start'\nexport const API_URL_SIMULATE_REDEEM_AGENT_REQUEST = '/api/v1/protocol/agents/simulate/finish'\nexport const API_URL_TRACK_AGENT_SUB_TASK = '/api/v1/protocol/agent-sub-tasks'\nexport const API_URL_VALIDATE_AGENT_ACCESS_TOKEN = '/api/v1/protocol/token/validate/:agentId'\nexport const API_URL_CREATE_PERMISSION = '/api/v1/x402/permissions'\nexport const API_URL_VERIFY_PERMISSIONS = '/api/v1/x402/verify'\nexport const API_URL_SETTLE_PERMISSIONS = '/api/v1/x402/settle'\nexport const API_URL_STRIPE_CHECKOUT = '/api/v1/stripe/payment'\nexport const API_URL_CREATE_USER = '/api/v1/organizations/account'\nexport const API_URL_GET_MEMBERS = '/api/v1/organizations/members'\nexport const API_URL_CONNECT_STRIPE_ACCOUNT = '/api/v1/stripe/account'\n\nexport interface BackendApiOptions {\n /**\n * The host of the backend server\n */\n backendHost: string\n\n /**\n * The Nevermined API Key. This key identify your user and is required to interact with the Nevermined API.\n * You can get your API key by logging in to the Nevermined App.\n * @see https://nevermined.ai/docs/tutorials/integration/nvm-api-keys\n */\n apiKey?: string\n\n /**\n * The host of the Nevermined Proxy\n */\n proxyHost?: string\n\n /**\n * Additional headers to send with the requests\n */\n headers?: { [key: string]: string }\n}\n\nexport class HTTPRequestOptions {\n accessToken?: string\n sendThroughProxy = true\n proxyHost?: string = undefined\n headers?: { [key: string]: string } = {}\n}\n\nexport abstract class AbstractHTTPClient {\n // protected opts: BackendApiOptions\n // private hasKey = false\n // private agentId = ''\n\n // constructor(opts: BackendApiOptions) {\n // const defaultHeaders = {\n // Accept: 'application/json',\n // ...opts.headers,\n // ...(opts.apiKey && { Authorization: `Bearer ${opts.apiKey}` }),\n // }\n\n // this.opts = {\n // ...opts,\n // headers: defaultHeaders,\n // }\n\n // try {\n // if (this.opts.apiKey && this.opts.apiKey.length > 0) {\n // const jwt = decodeJwt(this.opts.apiKey)\n // if (isEthereumAddress(jwt.sub)) {\n // this.hasKey = true\n // }\n // }\n // } catch {\n // this.hasKey = false\n // }\n\n // let backendUrl\n // try {\n // backendUrl = new URL(this.opts.backendHost)\n // this.opts.backendHost = backendUrl.origin\n // } catch (error) {\n // throw new Error(`Invalid URL: ${this.opts.backendHost} - ${(error as Error).message}`)\n // }\n // }\n\n constructor() {\n // Empty constructor - required for abstract class implementation\n }\n\n parseUrl(urlRequested: string, reqOptions: HTTPRequestOptions) {\n let _host: URL\n if (reqOptions.sendThroughProxy) {\n if (!reqOptions.proxyHost)\n throw new Error('Proxy host is required when sendThroughProxy is true')\n return `${new URL(reqOptions.proxyHost).origin}${new URL(urlRequested).href}`\n } else {\n return urlRequested\n }\n }\n\n parseHeaders(requestHeaders: { [key: string]: string }, accessToken?: string) {\n return {\n ...(accessToken && { Authorization: `Bearer ${accessToken}` }),\n ...requestHeaders,\n }\n }\n\n // setBearerToken(token: string) {\n // this.opts.headers = {\n // ...this.opts.headers,\n // Authorization: `Bearer ${token}`,\n // }\n // }\n\n async request(\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n url: string,\n data?: any,\n reqOptions: HTTPRequestOptions = {\n sendThroughProxy: false,\n },\n ) {\n try {\n const response = await axios({\n method,\n url: this.parseUrl(url, reqOptions),\n headers: this.parseHeaders(reqOptions.headers || {}, reqOptions.accessToken),\n ...(data && { data }), // Only include `data` for methods that support it\n })\n\n return response\n } catch (err) {\n if (axios.isAxiosError(err) && err.response) {\n throw new Error(\n `HTTP ${err.response.status}: ${err.response.data?.message || 'Request failed'}`,\n )\n }\n throw new Error('Network error or request failed without a response.')\n }\n }\n\n async get(url: string, reqOptions: HTTPRequestOptions = { sendThroughProxy: true }) {\n return this.request('GET', url, undefined, reqOptions)\n }\n\n async post(url: string, data: any, reqOptions: HTTPRequestOptions) {\n return this.request('POST', url, data, reqOptions)\n }\n\n async put(url: string, data: any, reqOptions: HTTPRequestOptions) {\n return this.request('PUT', url, data, reqOptions)\n }\n\n async delete(url: string, data: any, reqOptions: HTTPRequestOptions) {\n return this.request('DELETE', url, data, reqOptions)\n }\n}\n"]}
1
+ {"version":3,"file":"nvm-api.js","sourceRoot":"","sources":["../../src/api/nvm-api.ts"],"names":[],"mappings":"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","sourcesContent":["import axios from 'axios'\n\nexport const API_URL_REGISTER_PLAN = '/api/v1/protocol/plans'\nexport const API_URL_REGISTER_AGENT = '/api/v1/protocol/agents'\nexport const API_URL_REGISTER_AGENTS_AND_PLAN = '/api/v1/protocol/agents/plans'\nexport const API_URL_GET_AGENT = '/api/v1/protocol/agents/:agentId'\nexport const API_URL_UPDATE_AGENT = '/api/v1/protocol/agents/:agentId'\nexport const API_URL_GET_AGENT_PLANS = '/api/v1/protocol/agents/:agentId/plans'\nexport const API_URL_GET_PLAN = '/api/v1/protocol/plans/:planId'\nexport const API_URL_GET_PLANS = '/api/v1/protocol/plans'\nexport const API_URL_GET_PLAN_AGENTS = '/api/v1/protocol/plans/:planId/agents'\nexport const API_URL_ORDER_PLAN = '/api/v1/protocol/plans/:planId/order'\nexport const API_URL_MINT_PLAN = '/api/v1/protocol/plans/mint'\nexport const API_URL_MINT_EXPIRABLE_PLAN = '/api/v1/protocol/plans/mintExpirable'\nexport const API_URL_ADD_PLAN_AGENT = '/api/v1/protocol/agents/:agentId/plan/:planId'\nexport const API_URL_REMOVE_PLAN_AGENT = '/api/v1/protocol/agents/:agentId/plan/:planId'\nexport const API_URL_REDEEM_PLAN = '/api/v1/protocol/plans/redeem'\nexport const API_URL_PLAN_BALANCE = '/api/v1/protocol/plans/:planId/balance/:holderAddress'\nexport const API_URL_INITIALIZE_AGENT = '/api/v1/protocol/agents/initialize/:agentId'\nexport const API_URL_SIMULATE_AGENT_REQUEST = '/api/v1/protocol/agents/simulate/start'\nexport const API_URL_SIMULATE_REDEEM_AGENT_REQUEST = '/api/v1/protocol/agents/simulate/finish'\nexport const API_URL_TRACK_AGENT_SUB_TASK = '/api/v1/protocol/agent-sub-tasks'\nexport const API_URL_VALIDATE_AGENT_ACCESS_TOKEN = '/api/v1/protocol/token/validate/:agentId'\nexport const API_URL_CREATE_PERMISSION = '/api/v1/x402/permissions'\nexport const API_URL_VERIFY_PERMISSIONS = '/api/v1/x402/verify'\nexport const API_URL_SETTLE_PERMISSIONS = '/api/v1/x402/settle'\nexport const API_URL_STRIPE_CHECKOUT = '/api/v1/fiat/stripe/payment'\nexport const API_URL_CREATE_USER = '/api/v1/organizations/account'\nexport const API_URL_GET_MEMBERS = '/api/v1/organizations/members'\nexport const API_URL_CONNECT_STRIPE_ACCOUNT = '/api/v1/fiat/stripe/account'\n\nexport interface BackendApiOptions {\n /**\n * The host of the backend server\n */\n backendHost: string\n\n /**\n * The Nevermined API Key. This key identify your user and is required to interact with the Nevermined API.\n * You can get your API key by logging in to the Nevermined App.\n * @see https://nevermined.ai/docs/tutorials/integration/nvm-api-keys\n */\n apiKey?: string\n\n /**\n * The host of the Nevermined Proxy\n */\n proxyHost?: string\n\n /**\n * Additional headers to send with the requests\n */\n headers?: { [key: string]: string }\n}\n\nexport class HTTPRequestOptions {\n accessToken?: string\n sendThroughProxy = true\n proxyHost?: string = undefined\n headers?: { [key: string]: string } = {}\n}\n\nexport abstract class AbstractHTTPClient {\n // protected opts: BackendApiOptions\n // private hasKey = false\n // private agentId = ''\n\n // constructor(opts: BackendApiOptions) {\n // const defaultHeaders = {\n // Accept: 'application/json',\n // ...opts.headers,\n // ...(opts.apiKey && { Authorization: `Bearer ${opts.apiKey}` }),\n // }\n\n // this.opts = {\n // ...opts,\n // headers: defaultHeaders,\n // }\n\n // try {\n // if (this.opts.apiKey && this.opts.apiKey.length > 0) {\n // const jwt = decodeJwt(this.opts.apiKey)\n // if (isEthereumAddress(jwt.sub)) {\n // this.hasKey = true\n // }\n // }\n // } catch {\n // this.hasKey = false\n // }\n\n // let backendUrl\n // try {\n // backendUrl = new URL(this.opts.backendHost)\n // this.opts.backendHost = backendUrl.origin\n // } catch (error) {\n // throw new Error(`Invalid URL: ${this.opts.backendHost} - ${(error as Error).message}`)\n // }\n // }\n\n constructor() {\n // Empty constructor - required for abstract class implementation\n }\n\n parseUrl(urlRequested: string, reqOptions: HTTPRequestOptions) {\n let _host: URL\n if (reqOptions.sendThroughProxy) {\n if (!reqOptions.proxyHost)\n throw new Error('Proxy host is required when sendThroughProxy is true')\n return `${new URL(reqOptions.proxyHost).origin}${new URL(urlRequested).href}`\n } else {\n return urlRequested\n }\n }\n\n parseHeaders(requestHeaders: { [key: string]: string }, accessToken?: string) {\n return {\n ...(accessToken && { Authorization: `Bearer ${accessToken}` }),\n ...requestHeaders,\n }\n }\n\n // setBearerToken(token: string) {\n // this.opts.headers = {\n // ...this.opts.headers,\n // Authorization: `Bearer ${token}`,\n // }\n // }\n\n async request(\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n url: string,\n data?: any,\n reqOptions: HTTPRequestOptions = {\n sendThroughProxy: false,\n },\n ) {\n try {\n const response = await axios({\n method,\n url: this.parseUrl(url, reqOptions),\n headers: this.parseHeaders(reqOptions.headers || {}, reqOptions.accessToken),\n ...(data && { data }), // Only include `data` for methods that support it\n })\n\n return response\n } catch (err) {\n if (axios.isAxiosError(err) && err.response) {\n throw new Error(\n `HTTP ${err.response.status}: ${err.response.data?.message || 'Request failed'}`,\n )\n }\n throw new Error('Network error or request failed without a response.')\n }\n }\n\n async get(url: string, reqOptions: HTTPRequestOptions = { sendThroughProxy: true }) {\n return this.request('GET', url, undefined, reqOptions)\n }\n\n async post(url: string, data: any, reqOptions: HTTPRequestOptions) {\n return this.request('POST', url, data, reqOptions)\n }\n\n async put(url: string, data: any, reqOptions: HTTPRequestOptions) {\n return this.request('PUT', url, data, reqOptions)\n }\n\n async delete(url: string, data: any, reqOptions: HTTPRequestOptions) {\n return this.request('DELETE', url, data, reqOptions)\n }\n}\n"]}