@nevermined-io/payments 1.12.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +33 -0
  2. package/dist/a2a/clientRegistry.d.ts +10 -1
  3. package/dist/a2a/clientRegistry.d.ts.map +1 -1
  4. package/dist/a2a/clientRegistry.js +13 -4
  5. package/dist/a2a/clientRegistry.js.map +1 -1
  6. package/dist/a2a/paymentsClient.d.ts +60 -3
  7. package/dist/a2a/paymentsClient.d.ts.map +1 -1
  8. package/dist/a2a/paymentsClient.js +129 -8
  9. package/dist/a2a/paymentsClient.js.map +1 -1
  10. package/dist/a2a/paymentsRequestHandler.d.ts +5 -1
  11. package/dist/a2a/paymentsRequestHandler.d.ts.map +1 -1
  12. package/dist/a2a/paymentsRequestHandler.js +156 -13
  13. package/dist/a2a/paymentsRequestHandler.js.map +1 -1
  14. package/dist/a2a/types.d.ts +30 -0
  15. package/dist/a2a/types.d.ts.map +1 -1
  16. package/dist/a2a/types.js.map +1 -1
  17. package/dist/api/agents-api.d.ts +4 -3
  18. package/dist/api/agents-api.d.ts.map +1 -1
  19. package/dist/api/agents-api.js +7 -4
  20. package/dist/api/agents-api.js.map +1 -1
  21. package/dist/api/base-payments.d.ts +7 -2
  22. package/dist/api/base-payments.d.ts.map +1 -1
  23. package/dist/api/base-payments.js +15 -8
  24. package/dist/api/base-payments.js.map +1 -1
  25. package/dist/api/nvm-api.d.ts +5 -5
  26. package/dist/api/observability-api/types.d.ts +34 -6
  27. package/dist/api/observability-api/types.d.ts.map +1 -1
  28. package/dist/api/observability-api/types.js.map +1 -1
  29. package/dist/api/plans-api.d.ts +15 -12
  30. package/dist/api/plans-api.d.ts.map +1 -1
  31. package/dist/api/plans-api.js +17 -14
  32. package/dist/api/plans-api.js.map +1 -1
  33. package/dist/api/query-api.d.ts +1 -1
  34. package/dist/common/types.d.ts +175 -18
  35. package/dist/common/types.d.ts.map +1 -1
  36. package/dist/common/types.js.map +1 -1
  37. package/dist/index.d.ts +2 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/mcp/core/paywall.d.ts.map +1 -1
  42. package/dist/mcp/core/paywall.js +69 -8
  43. package/dist/mcp/core/paywall.js.map +1 -1
  44. package/dist/mcp/http/index.d.ts +1 -1
  45. package/dist/mcp/http/index.d.ts.map +1 -1
  46. package/dist/mcp/http/index.js +1 -1
  47. package/dist/mcp/http/index.js.map +1 -1
  48. package/dist/mcp/http/oauth-metadata.d.ts +32 -0
  49. package/dist/mcp/http/oauth-metadata.d.ts.map +1 -1
  50. package/dist/mcp/http/oauth-metadata.js +329 -34
  51. package/dist/mcp/http/oauth-metadata.js.map +1 -1
  52. package/dist/mcp/index.d.ts +4 -4
  53. package/dist/mcp/index.d.ts.map +1 -1
  54. package/dist/mcp/index.js +5 -5
  55. package/dist/mcp/index.js.map +1 -1
  56. package/dist/mcp/types/http.types.d.ts +38 -3
  57. package/dist/mcp/types/http.types.d.ts.map +1 -1
  58. package/dist/mcp/types/http.types.js.map +1 -1
  59. package/dist/mcp/types/paywall.types.d.ts +19 -3
  60. package/dist/mcp/types/paywall.types.d.ts.map +1 -1
  61. package/dist/mcp/types/paywall.types.js.map +1 -1
  62. package/dist/mpp/fetch.d.ts +8 -3
  63. package/dist/mpp/fetch.d.ts.map +1 -1
  64. package/dist/mpp/fetch.js +6 -0
  65. package/dist/mpp/fetch.js.map +1 -1
  66. package/dist/mpp/mpp-api.d.ts +11 -5
  67. package/dist/mpp/mpp-api.d.ts.map +1 -1
  68. package/dist/mpp/mpp-api.js +10 -3
  69. package/dist/mpp/mpp-api.js.map +1 -1
  70. package/dist/payments.d.ts.map +1 -1
  71. package/dist/x402/delegation-api.d.ts +5 -17
  72. package/dist/x402/delegation-api.d.ts.map +1 -1
  73. package/dist/x402/delegation-api.js +2 -2
  74. package/dist/x402/delegation-api.js.map +1 -1
  75. package/dist/x402/express/middleware.d.ts.map +1 -1
  76. package/dist/x402/express/middleware.js +98 -1
  77. package/dist/x402/express/middleware.js.map +1 -1
  78. package/dist/x402/facilitator-api.d.ts +90 -7
  79. package/dist/x402/facilitator-api.d.ts.map +1 -1
  80. package/dist/x402/facilitator-api.js +64 -3
  81. package/dist/x402/facilitator-api.js.map +1 -1
  82. package/dist/x402/index.d.ts +3 -2
  83. package/dist/x402/index.d.ts.map +1 -1
  84. package/dist/x402/index.js +1 -0
  85. package/dist/x402/index.js.map +1 -1
  86. package/dist/x402/token-request.d.ts +8 -0
  87. package/dist/x402/token-request.d.ts.map +1 -1
  88. package/dist/x402/token-request.js +101 -1
  89. package/dist/x402/token-request.js.map +1 -1
  90. package/dist/x402/token-version.d.ts +97 -0
  91. package/dist/x402/token-version.d.ts.map +1 -0
  92. package/dist/x402/token-version.js +127 -0
  93. package/dist/x402/token-version.js.map +1 -0
  94. package/dist/x402/token.d.ts +33 -2
  95. package/dist/x402/token.d.ts.map +1 -1
  96. package/dist/x402/token.js +47 -2
  97. package/dist/x402/token.js.map +1 -1
  98. package/package.json +22 -13
@@ -1 +1 @@
1
- {"version":3,"file":"plans-api.js","sourceRoot":"","sources":["../../src/api/plans-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { safeParseJson } from '../common/helper.js'\nimport { PaymentsError } from '../common/payments.error.js'\nimport {\n Address,\n Currency,\n EURC_TOKEN_ADDRESS,\n NvmAPIResult,\n PaginationOptions,\n PaymentOptions,\n PlanBalance,\n PlanCreditsConfig,\n PlanRedemptionType,\n PlanMetadata,\n PlanPriceConfig,\n StripeCheckoutResult,\n} from '../common/types.js'\nimport { ZeroAddress } from '../environments.js'\nimport { getRandomBigInt, isEthereumAddress } from '../utils.js'\nimport { BasePaymentsAPI, PublicationOptions, resolvePublicationHeaders } from './base-payments.js'\nimport * as Plans from '../plans.js'\nimport { ContractsAPI } from './contracts-api.js'\nimport {\n API_URL_GET_PLAN,\n API_URL_GET_PLAN_AGENTS,\n API_URL_MINT_EXPIRABLE_PLAN,\n API_URL_MINT_PLAN,\n API_URL_ORDER_PLAN,\n API_URL_PLAN_BALANCE,\n API_URL_REGISTER_PLAN,\n API_URL_STRIPE_CHECKOUT,\n API_URL_GET_PLANS,\n} from './nvm-api.js'\n\n/**\n * The PlansAPI class provides methods to register and interact with payment plans on Nevermined.\n */\nexport class PlansAPI extends BasePaymentsAPI {\n private contractsApi: ContractsAPI\n\n constructor(options: PaymentOptions) {\n super(options)\n this.contractsApi = new ContractsAPI(options)\n }\n /** Price helpers */\n /**\n * Builds a Fiat price configuration for a plan.\n *\n * `amount` is in **6-decimal units** (USDC convention, NOT cents). To\n * charge $2.00, pass `2_000_000n`. Minimum is `1_000_000n` ($1.00) —\n * lower values are rejected server-side with `BCK.PROTOCOL.0047`.\n *\n * @param amount - Amount to charge in 6-decimal units (e.g. `2_000_000n` for $2.00) as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @param currency - Fiat currency code (default: 'USD'). Any ISO 4217 code accepted by Stripe.\n * @returns The PlanPriceConfig representing a fiat price.\n */\n public getFiatPriceConfig(\n amount: bigint,\n receiver: Address,\n currency: Currency | string = Currency.USD,\n ): PlanPriceConfig {\n return Plans.getFiatPriceConfig(amount, receiver, currency)\n }\n\n /**\n * Builds a Pay-As-You-Go price configuration using the template address from the API.\n */\n public async getPayAsYouGoPriceConfig(\n amount: bigint,\n receiver: Address,\n tokenAddress: Address = ZeroAddress,\n ): Promise<PlanPriceConfig> {\n const templateAddress = await this.contractsApi.getPayAsYouGoTemplateAddress()\n return Plans.getPayAsYouGoPriceConfig(amount, receiver, tokenAddress, templateAddress)\n }\n\n /**\n * Builds a Pay-As-You-Go credits configuration.\n */\n public getPayAsYouGoCreditsConfig(): PlanCreditsConfig {\n return Plans.getPayAsYouGoCreditsConfig()\n }\n\n /**\n * Builds a crypto price configuration for a plan.\n *\n * @param amount - Amount to charge in token minor units as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @param tokenAddress - Optional ERC20 token address. If omitted, native token is assumed.\n * @returns The PlanPriceConfig representing a crypto price.\n */\n public getCryptoPriceConfig(\n amount: bigint,\n receiver: Address,\n tokenAddress?: Address,\n ): PlanPriceConfig {\n return Plans.getCryptoPriceConfig(amount, receiver, tokenAddress)\n }\n\n /**\n * Builds an ERC20 price configuration for a plan.\n *\n * @param amount - Amount to charge in token minor units as bigint.\n * @param tokenAddress - ERC20 token contract address.\n * @param receiver - Wallet address that will receive the payment.\n * @returns The PlanPriceConfig representing an ERC20 price.\n */\n public getERC20PriceConfig(\n amount: bigint,\n tokenAddress: Address,\n receiver: Address,\n ): PlanPriceConfig {\n return Plans.getERC20PriceConfig(amount, tokenAddress, receiver)\n }\n\n /**\n * Builds an EURC (Euro stablecoin) price configuration for a plan.\n *\n * @param amount - Amount to charge in EURC minor units (6 decimals) as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @param eurcAddress - Optional EURC token address. Defaults to Base Mainnet EURC.\n * @returns The PlanPriceConfig representing an EURC price.\n */\n public getEURCPriceConfig(\n amount: bigint,\n receiver: Address,\n eurcAddress: Address = EURC_TOKEN_ADDRESS,\n ): PlanPriceConfig {\n return Plans.getEURCPriceConfig(amount, receiver, eurcAddress)\n }\n\n /**\n * Builds a FREE price configuration (no payment required).\n * @returns The PlanPriceConfig representing a free plan.\n */\n public getFreePriceConfig(): PlanPriceConfig {\n return Plans.getFreePriceConfig()\n }\n\n /**\n * Builds a native token price configuration for a plan.\n *\n * @param amount - Amount to charge in native token minor units as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @returns The PlanPriceConfig representing a native token price.\n */\n public getNativeTokenPriceConfig(amount: bigint, receiver: Address): PlanPriceConfig {\n return Plans.getNativeTokenPriceConfig(amount, receiver)\n }\n\n /** Credits helpers */\n /**\n * Builds an EXPIRABLE credits configuration (time-based access).\n *\n * @param durationOfPlan - Duration in seconds.\n * @returns The PlanCreditsConfig representing expirable credits.\n */\n public getExpirableDurationConfig(durationOfPlan: bigint): PlanCreditsConfig {\n return Plans.getExpirableDurationConfig(durationOfPlan)\n }\n\n /**\n * Builds a NON-EXPIRABLE credits configuration (no expiration).\n * @returns The PlanCreditsConfig representing non-expirable credits.\n */\n public getNonExpirableDurationConfig(): PlanCreditsConfig {\n return Plans.getNonExpirableDurationConfig()\n }\n\n /**\n * Builds a FIXED credits configuration.\n *\n * @param creditsGranted - Total credits granted by the plan.\n * @param creditsPerRequest - Credits spent per request (default 1n).\n * @returns The PlanCreditsConfig representing fixed credits.\n */\n public getFixedCreditsConfig(creditsGranted: bigint, creditsPerRequest = 1n): PlanCreditsConfig {\n return Plans.getFixedCreditsConfig(creditsGranted, creditsPerRequest)\n }\n\n /**\n * Builds a DYNAMIC credits configuration (range-limited per request).\n *\n * @param creditsGranted - Total credits granted by the plan.\n * @param minCreditsPerRequest - Minimum credits per request.\n * @param maxCreditsPerRequest - Maximum credits per request.\n * @returns The PlanCreditsConfig representing dynamic credits.\n */\n public getDynamicCreditsConfig(\n creditsGranted: bigint,\n minCreditsPerRequest = 1n,\n maxCreditsPerRequest = 1n,\n ): PlanCreditsConfig {\n return Plans.getDynamicCreditsConfig(creditsGranted, minCreditsPerRequest, maxCreditsPerRequest)\n }\n\n /**\n * Sets the redemption type in a credits configuration.\n *\n * @param creditsConfig - Credits configuration to modify.\n * @param redemptionType - Redemption type to set.\n * @returns The updated PlanCreditsConfig.\n */\n public setRedemptionType(\n creditsConfig: PlanCreditsConfig,\n redemptionType: PlanRedemptionType,\n ): PlanCreditsConfig {\n return Plans.setRedemptionType(creditsConfig, redemptionType)\n }\n\n /**\n * Marks whether burns of these credits are mirrored on-chain.\n *\n * @param creditsConfig - Credits configuration to modify.\n * @param onchainMirror - Whether on-chain mirroring is enabled. Defaults\n * to `true` so calling `setOnchainMirror(config)` enables the mirror;\n * pass `false` explicitly to disable it. The `PlanCreditsConfig`\n * field itself defaults to `false` (set by all credits-config\n * builders) — when `false` the credits ledger lives in the API's\n * Postgres and burns are recorded off-chain only; when `true`, an\n * on-chain audit mirror replays each burn to `NFT1155Credits`.\n * @returns The updated PlanCreditsConfig.\n */\n public setOnchainMirror(\n creditsConfig: PlanCreditsConfig,\n onchainMirror = true,\n ): PlanCreditsConfig {\n return Plans.setOnchainMirror(creditsConfig, onchainMirror)\n }\n /**\n * This method is used to create a singleton instance of the PlansAPI class.\n *\n * @param options - The options to initialize the payments class.\n * @returns The instance of the PlansAPI class.\n */\n static getInstance(options: PaymentOptions): PlansAPI {\n return new PlansAPI(options)\n }\n\n /**\n *\n * It allows to an AI Builder to register a Payment Plan on Nevermined in a flexible manner.\n * A Payment Plan defines 2 main aspects:\n * 1. What a subscriber needs to pay to get the plan (i.e. 100 USDC, 5 USD, etc).\n * 2. What the subscriber gets in return to access the AI agents associated to the plan (i.e. 100 credits, 1 week of usage, etc).\n *\n * With Payment Plans, AI Builders control the usage to their AI Agents.\n *\n * Every time a user accesses an AI Agent to the Payment Plan, the usage consumes from a capped amount of credits (or when the plan duration expires).\n * When the user consumes all the credits, the plan automatically expires and the user needs to top up to continue using the service.\n *\n * @remarks\n * This method is oriented to AI Builders.\n * The NVM API Key must have publication permissions.\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n * @param nonce - Optional nonce to prevent replay attacks. Default is a random BigInt.\n * @example\n * ```\n * const cryptoPriceConfig = getNativeTokenPriceConfig(100n, builderAddress)\n * const creditsConfig = getFixedCreditsConfig(100n)\n * const { planId } = await payments.plans.registerPlan({ name: 'AI Assistants Plan'}, cryptoPriceConfig, creditsConfig)\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n nonce = getRandomBigInt(),\n accessLimit?: 'credits' | 'time',\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n if (accessLimit && !['credits', 'time'].includes(accessLimit)) {\n throw new PaymentsError(\n 'Invalid access limit',\n 'accessLimit must be either \"credits\" or \"time\"',\n )\n }\n if (!accessLimit) {\n accessLimit = BigInt(creditsConfig.durationSecs) > 0n ? 'time' : 'credits'\n }\n const body = {\n metadataAttributes: planMetadata,\n priceConfig,\n creditsConfig,\n nonce,\n isTrialPlan: planMetadata.isTrialPlan || false,\n accessLimit,\n ...(priceConfig.currency && { currency: priceConfig.currency }),\n }\n const options = this.getBackendHTTPOptions(\n 'POST',\n body,\n resolvePublicationHeaders(publicationOptions),\n )\n const url = new URL(API_URL_REGISTER_PLAN, this.environment.backend)\n\n const response = await fetch(url, options)\n if (!response.ok) {\n throw Error(`${response.statusText} - ${await response.text()}`)\n }\n\n return response.json()\n }\n\n /**\n *\n * It allows to an AI Builder to create a Payment Plan on Nevermined based on Credits.\n * A Nevermined Credits Plan limits the access by the access/usage of the Plan.\n * With them, AI Builders control the number of requests that can be made to an agent or service.\n * Every time a user accesses any resouce associated to the Payment Plan, the usage consumes from a capped amount of credits.\n * When the user consumes all the credits, the plan automatically expires and the user needs to top up to continue using the service.\n *\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const cryptoPriceConfig = getNativeTokenPriceConfig(100n, builderAddress)\n * const creditsConfig = getFixedCreditsConfig(100n)\n * const { planId } = await payments.plans.registerCreditsPlan(\n * { name: 'AI Credits Plan'},\n * cryptoPriceConfig,\n * creditsConfig\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerCreditsPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n // Credits plans must have durationSecs = 0 (non-expirable) and either fixed or dynamic redemption\n if (BigInt(creditsConfig.durationSecs) !== 0n)\n throw new PaymentsError(\n 'The creditsConfig.durationSecs must be 0 for credits plans (non-expirable)',\n )\n\n if (creditsConfig.minAmount > creditsConfig.maxAmount)\n throw new PaymentsError(\n 'The creditsConfig.minAmount can not be more than creditsConfig.maxAmount',\n )\n\n return this.registerPlan(\n planMetadata,\n priceConfig,\n creditsConfig,\n undefined,\n 'credits',\n publicationOptions,\n )\n }\n\n /**\n *\n * It allows to an AI Builder to create a Payment Plan on Nevermined limited by duration.\n * A Nevermined Credits Plan limits the access by the access/usage of the Plan.\n * With them, AI Builders control the number of requests that can be made to an agent or service.\n * Every time a user accesses any resouce associated to the Payment Plan, the usage consumes from a capped amount of credits.\n * When the user consumes all the credits, the plan automatically expires and the user needs to top up to continue using the service.\n *\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const cryptoPriceConfig = getNativeTokenPriceConfig(100n, builderAddress)\n * const 1dayDurationPlan = getExpirableDurationConfig(ONE_DAY_DURATION)\n * const { planId } = await payments.plans.registerTimePlan(\n * { name: 'Just for today plan'},\n * cryptoPriceConfig,\n * 1dayDurationPlan\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerTimePlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n // Time plans must have durationSecs > 0 (expirable) and isRedemptionAmountFixed = false\n if (BigInt(creditsConfig.durationSecs) === 0n)\n throw new PaymentsError(\n 'The creditsConfig.durationSecs must be greater than 0 for time plans (expirable)',\n )\n\n if (creditsConfig.isRedemptionAmountFixed)\n throw new PaymentsError(\n 'The creditsConfig.isRedemptionAmountFixed must be false for time plans',\n )\n\n return this.registerPlan(\n planMetadata,\n priceConfig,\n creditsConfig,\n undefined,\n 'time',\n publicationOptions,\n )\n }\n\n /**\n *\n * It allows to an AI Builder to create a Trial Payment Plan on Nevermined limited by duration.\n * A Nevermined Trial Plan allow subscribers of that plan to test the Agents associated to it.\n * A Trial plan is a plan that only can be purchased once by a user.\n * Trial plans, as regular plans, can be limited by duration (i.e 1 week of usage) or by credits (i.e 100 credits to use the agent).\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const freePriceConfig = getFreePriceConfig()\n * const 1dayDurationPlan = getExpirableDurationConfig(ONE_DAY_DURATION)\n * const { planId } = await payments.plans.registerCreditsTrialPlan(\n * {name: 'Trial plan'},\n * freePriceConfig,\n * 1dayDurationPlan\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerCreditsTrialPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n planMetadata.isTrialPlan = true\n return this.registerCreditsPlan(planMetadata, priceConfig, creditsConfig, publicationOptions)\n }\n\n /**\n *\n * It allows to an AI Builder to create a Trial Payment Plan on Nevermined limited by duration.\n * A Nevermined Trial Plan allow subscribers of that plan to test the Agents associated to it.\n * A Trial plan is a plan that only can be purchased once by a user.\n * Trial plans, as regular plans, can be limited by duration (i.e 1 week of usage) or by credits (i.e 100 credits to use the agent).\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const freePriceConfig = getFreePriceConfig()\n * const 1dayDurationPlan = getExpirableDurationConfig(ONE_DAY_DURATION)\n * const { planId } = await payments.plans.registerTimeTrialPlan(\n * {name: '1 day Trial plan'},\n * freePriceConfig,\n * 1dayDurationPlan\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerTimeTrialPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n planMetadata.isTrialPlan = true\n return this.registerTimePlan(planMetadata, priceConfig, creditsConfig, publicationOptions)\n }\n\n /**\n * Gets the information about a Payment Plan by its identifier.\n *\n * @param planId - The unique identifier of the plan.\n * @returns A promise that resolves to the plan's description.\n * @throws PaymentsError if the plan is not found.\n * @example\n * ```\n * const plan = payments.plans.getPlan(planId)\n * ```\n */\n public async getPlan(planId: string) {\n const query = API_URL_GET_PLAN.replace(':planId', planId)\n const url = new URL(query, this.environment.backend)\n const response = await fetch(url, this.getPublicHTTPOptions('GET'))\n if (!response.ok) {\n throw PaymentsError.fromBackend('Plan not found', await safeParseJson(response))\n }\n return response.json()\n }\n\n /**\n * Lists the payment plans **you** published (the authenticated caller's own\n * plans). This is account management, not a marketplace search — it never\n * returns other users' plans.\n *\n * @param page - The page number to retrieve.\n * @param offset - The number of items per page.\n * @param sortBy - The field to sort the results by.\n * @param sortOrder - The order in which to sort the results.\n * @param orgId - Optional organization id. When set, returns every plan in\n * that organization (requires active membership) instead of the caller's.\n * @returns A promise that resolves to the paginated list of your plans.\n */\n public async getPlans(\n page = 1,\n offset = 100,\n sortBy = 'created',\n sortOrder: 'asc' | 'desc' = 'desc',\n orgId?: string,\n ): Promise<{ total: number; page: number; offset: number; plans: any[] }> {\n const url = new URL(API_URL_GET_PLANS, this.environment.backend)\n url.searchParams.set('page', page.toString())\n url.searchParams.set('offset', offset.toString())\n url.searchParams.set('sortBy', sortBy)\n url.searchParams.set('sortOrder', sortOrder)\n if (orgId) url.searchParams.set('orgId', orgId)\n const options = this.getBackendHTTPOptions('GET')\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to get plans', await safeParseJson(response))\n }\n\n const data = await response.json()\n return data\n }\n\n /**\n * Gets the list of Agents that have associated a specific Payment Plan.\n * All the agents returned can be accessed by the users that are subscribed to the Payment Plan.\n *\n * @param planId - The unique identifier of the plan.\n * @param pagination - Optional pagination options to control the number of results returned.\n * @returns A promise that resolves to the list of agents associated with the plan.\n * @throws PaymentsError if the plan is not found.\n *\n * @example\n * ```\n * const result = payments.plans.getAgentsAssociatedToAPlan(planId)\n * // {\n * // total: 10,\n * // page: 1,\n * // offset: 5,\n * // agents: [ ..]\n * // }\n * ```\n */\n public async getAgentsAssociatedToAPlan(planId: string, pagination = new PaginationOptions()) {\n const query =\n API_URL_GET_PLAN_AGENTS.replace(':planId', planId) + '?' + pagination.asQueryParams()\n const url = new URL(query, this.environment.backend)\n const response = await fetch(url, this.getPublicHTTPOptions('GET'))\n if (!response.ok) {\n throw PaymentsError.fromBackend('Plan not found', await safeParseJson(response))\n }\n return response.json()\n }\n\n /**\n * Gets the balance of an account for a Payment Plan.\n *\n * @param planId - The identifier of the Payment Plan.\n * @param accountAddress - The address of the account to get the balance for.\n * @returns @see {@link PlanBalance} A promise that resolves to the balance result.\n * @throws PaymentsError if unable to get the balance.\n *\n * ```\n * const balance = payments.plans.getPlanBalance(planId)\n * // {\n * // planId: '105906633592154016712415751065660953070604027297000423385655551747721326921578',\n * // planType: 'credits',\n * // holderAddress: '0x505384192Ba6a4D4b50EAB846ee67db3b9A93359',\n * // creditsContract: '0xdd0240858fE744C3BF245DD377abBC04d1FDA443',\n * // balance: '100',\n * // isSubscriber: true\n * // }\n * ```\n *\n */\n public async getPlanBalance(planId: string, accountAddress?: Address): Promise<PlanBalance> {\n const holderAddress = isEthereumAddress(accountAddress)\n ? accountAddress\n : this.getAccountAddress()\n\n if (!holderAddress) {\n throw new PaymentsError('Holder address is required')\n }\n\n const balanceUrl = API_URL_PLAN_BALANCE.replace(':planId', planId).replace(\n ':holderAddress',\n holderAddress,\n )\n\n const url = new URL(balanceUrl, this.environment.backend)\n const response = await fetch(url, this.getPublicHTTPOptions('GET'))\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to get balance', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Orders a Payment Plan requiring the payment in crypto. The user must have enough balance in the selected token.\n *\n * @remarks\n * The payment is done using crypto in the token (ERC20 or native) defined in the plan.\n *\n * @param planId - The unique identifier of the plan.\n * @returns @see {@link NvmAPIResult} A promise that resolves indicating if the operation was successful.\n * @throws PaymentsError if unable to order the plan.\n *\n * @example\n * ```\n * const result = await payments.plans.orderPlan(planId)\n * // {\n * // txHash: '0x8d29d5769e832a35e53f80cd4e8890d941c50a09c33dbd975533debc894f2535',\n * // success: true\n * // }\n * ```\n */\n public async orderPlan(planId: string): Promise<NvmAPIResult> {\n const options = this.getBackendHTTPOptions('POST')\n const url = new URL(API_URL_ORDER_PLAN.replace(':planId', planId), this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to order plan', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Initiates the purchase of a Plan requiring the payment in Fiat. This method will return a URL where the user can complete the payment.\n *\n * @remarks\n * The payment is completed using a credit card in a external website (Stripe).\n * @remarks\n * This method is only valid for plans with price in Fiat.\n *\n * @param planId - The unique identifier of the plan.\n * @returns A promise that resolves indicating the URL to complete the payment.\n * @throws PaymentsError if unable to order the plan.\n *\n * @example\n * ```\n * const result = await payments.plans.orderFiatPlan(planId)\n * ```\n */\n public async orderFiatPlan(planId: string): Promise<{ result: StripeCheckoutResult }> {\n const body = {\n sessionType: 'embedded',\n planId,\n }\n const options = this.getBackendHTTPOptions('POST', body)\n const url = new URL(API_URL_STRIPE_CHECKOUT, this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to order fiat plan', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Mints credits for a given Payment Plan and transfers them to a receiver.\n *\n * @remarks\n * Only the owner of the Payment Plan can call this method.\n *\n * @param planId - The unique identifier of the Payment Plan.\n * @param creditsAmount - The number of credits to mint.\n * @param creditsReceiver - The address of the receiver.\n * @returns @see {@link NvmAPIResult} A promise that resolves to the result of the operation.\n * @throws PaymentsError if unable to mint credits.\n *\n * @example\n * ```\n * const result = await payments.plans.mintPlanCredits(planId, 5n, '0x505384192Ba6a4D4b50EAB846ee67db3b9A93359')\n * // {\n * // txHash: '0x8d29d5769e832a35e53f80cd4e8890d941c50a09c33dbd975533debc894f2535',\n * // success: true\n * // }\n * ```\n */\n public async mintPlanCredits(\n planId: string,\n creditsAmount: bigint,\n creditsReceiver: Address,\n ): Promise<NvmAPIResult> {\n const body = { planId, amount: creditsAmount, creditsReceiver }\n const options = this.getBackendHTTPOptions('POST', body)\n const url = new URL(API_URL_MINT_PLAN, this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to mint plan credits', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Mints expirable credits for a given Payment Plan and transfers them to a receiver.\n *\n * @remarks\n * Only the owner of the Payment Plan can call this method.\n *\n * @param planId - The unique identifier of the Payment Plan.\n * @param creditsAmount - The number of credits to mint.\n * @param creditsReceiver - The address of the receiver.\n * @param creditsDuration - The duration of the credits in seconds. Default is 0 (no expiration).\n * @returns @see {@link NvmAPIResult} A promise that resolves to the result of the operation.\n * @throws PaymentsError if unable to mint expirable credits.\n *\n * @example\n * ```\n * const result = await payments.plans.mintPlanExpirable(\n * planId,\n * 1n,\n * '0x505384192Ba6a4D4b50EAB846ee67db3b9A93359',\n * 86_400n // 1 day in seconds\n * )\n * // {\n * // txHash: '0x8d29d5769e832a35e53f80cd4e8890d941c50a09c33dbd975533debc894f2535',\n * // success: true\n * // }\n * ```\n */\n public async mintPlanExpirable(\n planId: string,\n creditsAmount: bigint,\n creditsReceiver: Address,\n creditsDuration = 0n,\n ): Promise<NvmAPIResult> {\n const body = { planId, creditsAmount, creditsReceiver, creditsDuration }\n const options = this.getBackendHTTPOptions('POST', body)\n const url = new URL(API_URL_MINT_EXPIRABLE_PLAN, this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend(\n 'Unable to mint expirable credits',\n await safeParseJson(response),\n )\n }\n\n return response.json()\n }\n}\n"]}
1
+ {"version":3,"file":"plans-api.js","sourceRoot":"","sources":["../../src/api/plans-api.ts"],"names":[],"mappings":"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","sourcesContent":["import { safeParseJson } from '../common/helper.js'\nimport { PaymentsError } from '../common/payments.error.js'\nimport {\n Address,\n Currency,\n EURC_TOKEN_ADDRESS,\n NvmAPIResult,\n PaginationOptions,\n PaymentOptions,\n PlanBalance,\n PlanCreditsConfig,\n PlanRedemptionType,\n PlanMetadata,\n PlanPriceConfig,\n StripePaymentIntent,\n} from '../common/types.js'\nimport { ZeroAddress } from '../environments.js'\nimport { getRandomBigInt, isEthereumAddress } from '../utils.js'\nimport { BasePaymentsAPI, PublicationOptions, resolvePublicationHeaders } from './base-payments.js'\nimport * as Plans from '../plans.js'\nimport { ContractsAPI } from './contracts-api.js'\nimport {\n API_URL_GET_PLAN,\n API_URL_GET_PLAN_AGENTS,\n API_URL_MINT_EXPIRABLE_PLAN,\n API_URL_MINT_PLAN,\n API_URL_ORDER_PLAN,\n API_URL_PLAN_BALANCE,\n API_URL_REGISTER_PLAN,\n API_URL_STRIPE_CHECKOUT,\n API_URL_GET_PLANS,\n} from './nvm-api.js'\n\n/**\n * The PlansAPI class provides methods to register and interact with payment plans on Nevermined.\n */\nexport class PlansAPI extends BasePaymentsAPI {\n private contractsApi: ContractsAPI\n\n constructor(options: PaymentOptions) {\n super(options)\n this.contractsApi = new ContractsAPI(options)\n }\n /** Price helpers */\n /**\n * Builds a Fiat price configuration for a plan.\n *\n * `amount` is in **6-decimal units** (USDC convention, NOT cents). To\n * charge $2.00, pass `2_000_000n`. Minimum is `1_000_000n` ($1.00) —\n * lower values are rejected server-side with `BCK.PROTOCOL.0047`.\n *\n * @param amount - Amount to charge in 6-decimal units (e.g. `2_000_000n` for $2.00) as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @param currency - Fiat currency code (default: 'USD'). Any ISO 4217 code accepted by Stripe.\n * @returns The PlanPriceConfig representing a fiat price.\n */\n public getFiatPriceConfig(\n amount: bigint,\n receiver: Address,\n currency: Currency | string = Currency.USD,\n ): PlanPriceConfig {\n return Plans.getFiatPriceConfig(amount, receiver, currency)\n }\n\n /**\n * Builds a Pay-As-You-Go price configuration using the template address from the API.\n */\n public async getPayAsYouGoPriceConfig(\n amount: bigint,\n receiver: Address,\n tokenAddress: Address = ZeroAddress,\n ): Promise<PlanPriceConfig> {\n const templateAddress = await this.contractsApi.getPayAsYouGoTemplateAddress()\n return Plans.getPayAsYouGoPriceConfig(amount, receiver, tokenAddress, templateAddress)\n }\n\n /**\n * Builds a Pay-As-You-Go credits configuration.\n */\n public getPayAsYouGoCreditsConfig(): PlanCreditsConfig {\n return Plans.getPayAsYouGoCreditsConfig()\n }\n\n /**\n * Builds a crypto price configuration for a plan.\n *\n * @param amount - Amount to charge in token minor units as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @param tokenAddress - Optional ERC20 token address. If omitted, native token is assumed.\n * @returns The PlanPriceConfig representing a crypto price.\n */\n public getCryptoPriceConfig(\n amount: bigint,\n receiver: Address,\n tokenAddress?: Address,\n ): PlanPriceConfig {\n return Plans.getCryptoPriceConfig(amount, receiver, tokenAddress)\n }\n\n /**\n * Builds an ERC20 price configuration for a plan.\n *\n * @param amount - Amount to charge in token minor units as bigint.\n * @param tokenAddress - ERC20 token contract address.\n * @param receiver - Wallet address that will receive the payment.\n * @returns The PlanPriceConfig representing an ERC20 price.\n */\n public getERC20PriceConfig(\n amount: bigint,\n tokenAddress: Address,\n receiver: Address,\n ): PlanPriceConfig {\n return Plans.getERC20PriceConfig(amount, tokenAddress, receiver)\n }\n\n /**\n * Builds an EURC (Euro stablecoin) price configuration for a plan.\n *\n * @param amount - Amount to charge in EURC minor units (6 decimals) as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @param eurcAddress - Optional EURC token address. Defaults to Base Mainnet EURC.\n * @returns The PlanPriceConfig representing an EURC price.\n */\n public getEURCPriceConfig(\n amount: bigint,\n receiver: Address,\n eurcAddress: Address = EURC_TOKEN_ADDRESS,\n ): PlanPriceConfig {\n return Plans.getEURCPriceConfig(amount, receiver, eurcAddress)\n }\n\n /**\n * Builds a FREE price configuration (no payment required).\n * @returns The PlanPriceConfig representing a free plan.\n */\n public getFreePriceConfig(): PlanPriceConfig {\n return Plans.getFreePriceConfig()\n }\n\n /**\n * Builds a native token price configuration for a plan.\n *\n * @param amount - Amount to charge in native token minor units as bigint.\n * @param receiver - Wallet address that will receive the payment.\n * @returns The PlanPriceConfig representing a native token price.\n */\n public getNativeTokenPriceConfig(amount: bigint, receiver: Address): PlanPriceConfig {\n return Plans.getNativeTokenPriceConfig(amount, receiver)\n }\n\n /** Credits helpers */\n /**\n * Builds an EXPIRABLE credits configuration (time-based access).\n *\n * @param durationOfPlan - Duration in seconds.\n * @returns The PlanCreditsConfig representing expirable credits.\n */\n public getExpirableDurationConfig(durationOfPlan: bigint): PlanCreditsConfig {\n return Plans.getExpirableDurationConfig(durationOfPlan)\n }\n\n /**\n * Builds a NON-EXPIRABLE credits configuration (no expiration).\n * @returns The PlanCreditsConfig representing non-expirable credits.\n */\n public getNonExpirableDurationConfig(): PlanCreditsConfig {\n return Plans.getNonExpirableDurationConfig()\n }\n\n /**\n * Builds a FIXED credits configuration.\n *\n * @param creditsGranted - Total credits granted by the plan.\n * @param creditsPerRequest - Credits spent per request (default 1n).\n * @returns The PlanCreditsConfig representing fixed credits.\n */\n public getFixedCreditsConfig(creditsGranted: bigint, creditsPerRequest = 1n): PlanCreditsConfig {\n return Plans.getFixedCreditsConfig(creditsGranted, creditsPerRequest)\n }\n\n /**\n * Builds a DYNAMIC credits configuration (range-limited per request).\n *\n * @param creditsGranted - Total credits granted by the plan.\n * @param minCreditsPerRequest - Minimum credits per request.\n * @param maxCreditsPerRequest - Maximum credits per request.\n * @returns The PlanCreditsConfig representing dynamic credits.\n */\n public getDynamicCreditsConfig(\n creditsGranted: bigint,\n minCreditsPerRequest = 1n,\n maxCreditsPerRequest = 1n,\n ): PlanCreditsConfig {\n return Plans.getDynamicCreditsConfig(creditsGranted, minCreditsPerRequest, maxCreditsPerRequest)\n }\n\n /**\n * Sets the redemption type in a credits configuration.\n *\n * @param creditsConfig - Credits configuration to modify.\n * @param redemptionType - Redemption type to set.\n * @returns The updated PlanCreditsConfig.\n */\n public setRedemptionType(\n creditsConfig: PlanCreditsConfig,\n redemptionType: PlanRedemptionType,\n ): PlanCreditsConfig {\n return Plans.setRedemptionType(creditsConfig, redemptionType)\n }\n\n /**\n * Marks whether burns of these credits are mirrored on-chain.\n *\n * @param creditsConfig - Credits configuration to modify.\n * @param onchainMirror - Whether on-chain mirroring is enabled. Defaults\n * to `true` so calling `setOnchainMirror(config)` enables the mirror;\n * pass `false` explicitly to disable it. The `PlanCreditsConfig`\n * field itself defaults to `false` (set by all credits-config\n * builders) — when `false` the credits ledger lives in the API's\n * Postgres and burns are recorded off-chain only; when `true`, an\n * on-chain audit mirror replays each burn to `NFT1155Credits`.\n * @returns The updated PlanCreditsConfig.\n */\n public setOnchainMirror(\n creditsConfig: PlanCreditsConfig,\n onchainMirror = true,\n ): PlanCreditsConfig {\n return Plans.setOnchainMirror(creditsConfig, onchainMirror)\n }\n /**\n * This method is used to create a singleton instance of the PlansAPI class.\n *\n * @param options - The options to initialize the payments class.\n * @returns The instance of the PlansAPI class.\n */\n static getInstance(options: PaymentOptions): PlansAPI {\n return new PlansAPI(options)\n }\n\n /**\n *\n * It allows to an AI Builder to register a Payment Plan on Nevermined in a flexible manner.\n * A Payment Plan defines 2 main aspects:\n * 1. What a subscriber needs to pay to get the plan (i.e. 100 USDC, 5 USD, etc).\n * 2. What the subscriber gets in return to access the AI agents associated to the plan (i.e. 100 credits, 1 week of usage, etc).\n *\n * With Payment Plans, AI Builders control the usage to their AI Agents.\n *\n * Every time a user accesses an AI Agent to the Payment Plan, the usage consumes from a capped amount of credits (or when the plan duration expires).\n * When the user consumes all the credits, the plan automatically expires and the user needs to top up to continue using the service.\n *\n * @remarks\n * This method is oriented to AI Builders.\n * The NVM API Key must have publication permissions.\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n * @param nonce - Optional nonce to prevent replay attacks. Default is a random BigInt.\n * @example\n * ```\n * const cryptoPriceConfig = getNativeTokenPriceConfig(100n, builderAddress)\n * const creditsConfig = getFixedCreditsConfig(100n)\n * const { planId } = await payments.plans.registerPlan({ name: 'AI Assistants Plan'}, cryptoPriceConfig, creditsConfig)\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n nonce = getRandomBigInt(),\n accessLimit?: 'credits' | 'time',\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n if (accessLimit && !['credits', 'time'].includes(accessLimit)) {\n throw new PaymentsError(\n 'Invalid access limit',\n 'accessLimit must be either \"credits\" or \"time\"',\n )\n }\n if (!accessLimit) {\n accessLimit = BigInt(creditsConfig.durationSecs) > 0n ? 'time' : 'credits'\n }\n const body = {\n metadataAttributes: planMetadata,\n priceConfig,\n creditsConfig,\n nonce,\n isTrialPlan: planMetadata.isTrialPlan || false,\n accessLimit,\n ...(priceConfig.currency && { currency: priceConfig.currency }),\n }\n const options = this.getBackendHTTPOptions(\n 'POST',\n body,\n resolvePublicationHeaders(publicationOptions),\n )\n const url = new URL(API_URL_REGISTER_PLAN, this.environment.backend)\n\n const response = await fetch(url, options)\n if (!response.ok) {\n throw Error(`${response.statusText} - ${await response.text()}`)\n }\n\n return response.json()\n }\n\n /**\n *\n * It allows to an AI Builder to create a Payment Plan on Nevermined based on Credits.\n * A Nevermined Credits Plan limits the access by the access/usage of the Plan.\n * With them, AI Builders control the number of requests that can be made to an agent or service.\n * Every time a user accesses any resouce associated to the Payment Plan, the usage consumes from a capped amount of credits.\n * When the user consumes all the credits, the plan automatically expires and the user needs to top up to continue using the service.\n *\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const cryptoPriceConfig = getNativeTokenPriceConfig(100n, builderAddress)\n * const creditsConfig = getFixedCreditsConfig(100n)\n * const { planId } = await payments.plans.registerCreditsPlan(\n * { name: 'AI Credits Plan'},\n * cryptoPriceConfig,\n * creditsConfig\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerCreditsPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n // Credits plans must have durationSecs = 0 (non-expirable) and either fixed or dynamic redemption\n if (BigInt(creditsConfig.durationSecs) !== 0n)\n throw new PaymentsError(\n 'The creditsConfig.durationSecs must be 0 for credits plans (non-expirable)',\n )\n\n if (creditsConfig.minAmount > creditsConfig.maxAmount)\n throw new PaymentsError(\n 'The creditsConfig.minAmount can not be more than creditsConfig.maxAmount',\n )\n\n return this.registerPlan(\n planMetadata,\n priceConfig,\n creditsConfig,\n undefined,\n 'credits',\n publicationOptions,\n )\n }\n\n /**\n *\n * It allows to an AI Builder to create a Payment Plan on Nevermined limited by duration.\n * A Nevermined Credits Plan limits the access by the access/usage of the Plan.\n * With them, AI Builders control the number of requests that can be made to an agent or service.\n * Every time a user accesses any resouce associated to the Payment Plan, the usage consumes from a capped amount of credits.\n * When the user consumes all the credits, the plan automatically expires and the user needs to top up to continue using the service.\n *\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const cryptoPriceConfig = getNativeTokenPriceConfig(100n, builderAddress)\n * const 1dayDurationPlan = getExpirableDurationConfig(ONE_DAY_DURATION)\n * const { planId } = await payments.plans.registerTimePlan(\n * { name: 'Just for today plan'},\n * cryptoPriceConfig,\n * 1dayDurationPlan\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerTimePlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n // Time plans must have durationSecs > 0 (expirable) and isRedemptionAmountFixed = false\n if (BigInt(creditsConfig.durationSecs) === 0n)\n throw new PaymentsError(\n 'The creditsConfig.durationSecs must be greater than 0 for time plans (expirable)',\n )\n\n if (creditsConfig.isRedemptionAmountFixed)\n throw new PaymentsError(\n 'The creditsConfig.isRedemptionAmountFixed must be false for time plans',\n )\n\n return this.registerPlan(\n planMetadata,\n priceConfig,\n creditsConfig,\n undefined,\n 'time',\n publicationOptions,\n )\n }\n\n /**\n *\n * It allows to an AI Builder to create a Trial Payment Plan on Nevermined limited by duration.\n * A Nevermined Trial Plan allow subscribers of that plan to test the Agents associated to it.\n * A Trial plan is a plan that only can be purchased once by a user.\n * Trial plans, as regular plans, can be limited by duration (i.e 1 week of usage) or by credits (i.e 100 credits to use the agent).\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const freePriceConfig = getFreePriceConfig()\n * const 1dayDurationPlan = getExpirableDurationConfig(ONE_DAY_DURATION)\n * const { planId } = await payments.plans.registerCreditsTrialPlan(\n * {name: 'Trial plan'},\n * freePriceConfig,\n * 1dayDurationPlan\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerCreditsTrialPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n planMetadata.isTrialPlan = true\n return this.registerCreditsPlan(planMetadata, priceConfig, creditsConfig, publicationOptions)\n }\n\n /**\n *\n * It allows to an AI Builder to create a Trial Payment Plan on Nevermined limited by duration.\n * A Nevermined Trial Plan allow subscribers of that plan to test the Agents associated to it.\n * A Trial plan is a plan that only can be purchased once by a user.\n * Trial plans, as regular plans, can be limited by duration (i.e 1 week of usage) or by credits (i.e 100 credits to use the agent).\n * @remarks This method is oriented to AI Builders\n * @remarks To call this method, the NVM API Key must have publication permissions\n *\n * @see https://nevermined.ai/docs/tutorials/builders/create-plan\n *\n * @param planMetadata - @see {@link PlanMetadata}\n * @param priceConfig - @see {@link PlanPriceConfig}\n * @param creditsConfig - @see {@link PlanCreditsConfig}\n *\n * @example\n * ```\n * const freePriceConfig = getFreePriceConfig()\n * const 1dayDurationPlan = getExpirableDurationConfig(ONE_DAY_DURATION)\n * const { planId } = await payments.plans.registerTimeTrialPlan(\n * {name: '1 day Trial plan'},\n * freePriceConfig,\n * 1dayDurationPlan\n * )\n * ```\n *\n * @returns The unique identifier of the plan (Plan ID) of the newly created plan.\n */\n public async registerTimeTrialPlan(\n planMetadata: PlanMetadata,\n priceConfig: PlanPriceConfig,\n creditsConfig: PlanCreditsConfig,\n publicationOptions?: PublicationOptions,\n ): Promise<{ planId: string }> {\n planMetadata.isTrialPlan = true\n return this.registerTimePlan(planMetadata, priceConfig, creditsConfig, publicationOptions)\n }\n\n /**\n * Gets the information about a Payment Plan by its identifier.\n *\n * @param planId - The unique identifier of the plan.\n * @returns A promise that resolves to the plan's description.\n * @throws PaymentsError if the plan is not found.\n * @example\n * ```\n * const plan = payments.plans.getPlan(planId)\n * ```\n */\n public async getPlan(planId: string) {\n const query = API_URL_GET_PLAN.replace(':planId', planId)\n const url = new URL(query, this.environment.backend)\n const response = await fetch(url, this.getPublicHTTPOptions('GET'))\n if (!response.ok) {\n throw PaymentsError.fromBackend('Plan not found', await safeParseJson(response))\n }\n return response.json()\n }\n\n /**\n * Lists the payment plans **you** published (the authenticated caller's own\n * plans). This is account management, not a marketplace search — it never\n * returns other users' plans.\n *\n * @param page - The page number to retrieve.\n * @param offset - The number of items per page.\n * @param sortBy - The field to sort the results by.\n * @param sortOrder - The order in which to sort the results.\n * @param orgId - Optional organization id. When set, returns every plan in\n * that organization (requires active membership) instead of the caller's.\n * @returns A promise that resolves to the paginated list of your plans.\n */\n public async getPlans(\n page = 1,\n offset = 100,\n sortBy = 'created',\n sortOrder: 'asc' | 'desc' = 'desc',\n orgId?: string,\n ): Promise<{ total: number; page: number; offset: number; plans: any[] }> {\n const url = new URL(API_URL_GET_PLANS, this.environment.backend)\n url.searchParams.set('page', page.toString())\n url.searchParams.set('offset', offset.toString())\n url.searchParams.set('sortBy', sortBy)\n url.searchParams.set('sortOrder', sortOrder)\n if (orgId) url.searchParams.set('orgId', orgId)\n const options = this.getBackendHTTPOptions('GET')\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to get plans', await safeParseJson(response))\n }\n\n const data = await response.json()\n return data\n }\n\n /**\n * Gets the list of Agents that have associated a specific Payment Plan.\n * All the agents returned can be accessed by the users that are subscribed to the Payment Plan.\n *\n * @param planId - The unique identifier of the plan.\n * @param pagination - Optional pagination options. Accepts a plain object\n * (`{ page, offset, sortBy, sortOrder }`) or a `PaginationOptions` instance.\n * @returns A promise that resolves to the list of agents associated with the plan.\n * @throws PaymentsError if the plan is not found.\n *\n * @example\n * ```\n * const result = payments.plans.getAgentsAssociatedToAPlan(planId, { page: 1, offset: 10 })\n * // {\n * // total: 10,\n * // page: 1,\n * // offset: 5,\n * // agents: [ ..]\n * // }\n * ```\n */\n public async getAgentsAssociatedToAPlan(\n planId: string,\n pagination: Partial<PaginationOptions> = {},\n ) {\n const query =\n API_URL_GET_PLAN_AGENTS.replace(':planId', planId) +\n '?' +\n new PaginationOptions(pagination).asQueryParams()\n const url = new URL(query, this.environment.backend)\n const response = await fetch(url, this.getPublicHTTPOptions('GET'))\n if (!response.ok) {\n throw PaymentsError.fromBackend('Plan not found', await safeParseJson(response))\n }\n return response.json()\n }\n\n /**\n * Gets the balance of an account for a Payment Plan.\n *\n * @param planId - The identifier of the Payment Plan.\n * @param accountAddress - The address of the account to get the balance for.\n * @returns @see {@link PlanBalance} A promise that resolves to the balance result.\n * @throws PaymentsError if unable to get the balance.\n *\n * ```\n * const balance = payments.plans.getPlanBalance(planId)\n * // {\n * // planId: '105906633592154016712415751065660953070604027297000423385655551747721326921578',\n * // planType: 'credits',\n * // holderAddress: '0x505384192Ba6a4D4b50EAB846ee67db3b9A93359',\n * // creditsContract: '0xdd0240858fE744C3BF245DD377abBC04d1FDA443',\n * // balance: '100',\n * // isSubscriber: true\n * // }\n * ```\n *\n */\n public async getPlanBalance(planId: string, accountAddress?: Address): Promise<PlanBalance> {\n const holderAddress = isEthereumAddress(accountAddress)\n ? accountAddress\n : this.getAccountAddress()\n\n if (!holderAddress) {\n throw new PaymentsError('Holder address is required')\n }\n\n const balanceUrl = API_URL_PLAN_BALANCE.replace(':planId', planId).replace(\n ':holderAddress',\n holderAddress,\n )\n\n const url = new URL(balanceUrl, this.environment.backend)\n const response = await fetch(url, this.getPublicHTTPOptions('GET'))\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to get balance', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Orders a Payment Plan requiring the payment in crypto. The user must have enough balance in the selected token.\n *\n * @remarks\n * The payment is done using crypto in the token (ERC20 or native) defined in the plan.\n *\n * @param planId - The unique identifier of the plan.\n * @returns @see {@link NvmAPIResult} A promise that resolves indicating if the operation was successful.\n * @throws PaymentsError if unable to order the plan.\n *\n * @example\n * ```\n * const result = await payments.plans.orderPlan(planId)\n * // {\n * // txHash: '0x8d29d5769e832a35e53f80cd4e8890d941c50a09c33dbd975533debc894f2535',\n * // success: true\n * // }\n * ```\n */\n public async orderPlan(planId: string): Promise<NvmAPIResult> {\n const options = this.getBackendHTTPOptions('POST')\n const url = new URL(API_URL_ORDER_PLAN.replace(':planId', planId), this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to order plan', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Initiates the purchase of a Plan requiring the payment in Fiat. This method creates a\n * Stripe PaymentIntent for the plan's price and returns it.\n *\n * @remarks\n * The payment is completed by confirming the PaymentIntent client-side with Stripe.js and\n * its `client_secret`.\n * @remarks\n * This method is only valid for plans priced in Fiat through Stripe.\n *\n * @param planId - The unique identifier of the plan.\n * @returns A promise that resolves to the Stripe PaymentIntent created for the plan.\n * @throws PaymentsError if unable to order the plan.\n *\n * @example\n * ```\n * const paymentIntent = await payments.plans.orderFiatPlan(planId)\n * // paymentIntent.id -> 'pi_…'\n * // paymentIntent.client_secret -> confirm with Stripe.js\n * ```\n */\n public async orderFiatPlan(planId: string): Promise<StripePaymentIntent> {\n const options = this.getBackendHTTPOptions('POST', { planId })\n const url = new URL(API_URL_STRIPE_CHECKOUT, this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to order fiat plan', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Mints credits for a given Payment Plan and transfers them to a receiver.\n *\n * @remarks\n * Only the owner of the Payment Plan can call this method.\n *\n * @param planId - The unique identifier of the Payment Plan.\n * @param creditsAmount - The number of credits to mint.\n * @param creditsReceiver - The address of the receiver.\n * @returns @see {@link NvmAPIResult} A promise that resolves to the result of the operation.\n * @throws PaymentsError if unable to mint credits.\n *\n * @example\n * ```\n * const result = await payments.plans.mintPlanCredits(planId, 5n, '0x505384192Ba6a4D4b50EAB846ee67db3b9A93359')\n * // {\n * // txHash: '0x8d29d5769e832a35e53f80cd4e8890d941c50a09c33dbd975533debc894f2535',\n * // success: true\n * // }\n * ```\n */\n public async mintPlanCredits(\n planId: string,\n creditsAmount: bigint,\n creditsReceiver: Address,\n ): Promise<NvmAPIResult> {\n const body = { planId, amount: creditsAmount, creditsReceiver }\n const options = this.getBackendHTTPOptions('POST', body)\n const url = new URL(API_URL_MINT_PLAN, this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend('Unable to mint plan credits', await safeParseJson(response))\n }\n\n return response.json()\n }\n\n /**\n * Mints expirable credits for a given Payment Plan and transfers them to a receiver.\n *\n * @remarks\n * Only the owner of the Payment Plan can call this method.\n *\n * @param planId - The unique identifier of the Payment Plan.\n * @param creditsAmount - The number of credits to mint.\n * @param creditsReceiver - The address of the receiver.\n * @param creditsDuration - The duration of the credits in seconds. Default is 0 (no expiration).\n * @returns @see {@link NvmAPIResult} A promise that resolves to the result of the operation.\n * @throws PaymentsError if unable to mint expirable credits.\n *\n * @example\n * ```\n * const result = await payments.plans.mintPlanExpirable(\n * planId,\n * 1n,\n * '0x505384192Ba6a4D4b50EAB846ee67db3b9A93359',\n * 86_400n // 1 day in seconds\n * )\n * // {\n * // txHash: '0x8d29d5769e832a35e53f80cd4e8890d941c50a09c33dbd975533debc894f2535',\n * // success: true\n * // }\n * ```\n */\n public async mintPlanExpirable(\n planId: string,\n creditsAmount: bigint,\n creditsReceiver: Address,\n creditsDuration = 0n,\n ): Promise<NvmAPIResult> {\n const body = { planId, creditsAmount, creditsReceiver, creditsDuration }\n const options = this.getBackendHTTPOptions('POST', body)\n const url = new URL(API_URL_MINT_EXPIRABLE_PLAN, this.environment.backend)\n const response = await fetch(url, options)\n if (!response.ok) {\n throw PaymentsError.fromBackend(\n 'Unable to mint expirable credits',\n await safeParseJson(response),\n )\n }\n\n return response.json()\n }\n}\n"]}
@@ -33,6 +33,6 @@ export declare class AIQueryApi extends AbstractHTTPClient {
33
33
  * @param reqOptions - The request options to use when querying the Agent/Service.
34
34
  * @returns The result of query
35
35
  */
36
- send(accessCredentials: AgentAccessCredentials, method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH', url: string, data?: any, reqOptions?: HTTPRequestOptions): Promise<import("axios").AxiosResponse<any, any, {}>>;
36
+ send(accessCredentials: AgentAccessCredentials, method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH', url: string, data?: any, reqOptions?: HTTPRequestOptions): Promise<import("axios").AxiosResponse<any, any, {}, any>>;
37
37
  }
38
38
  //# sourceMappingURL=query-api.d.ts.map
@@ -213,7 +213,30 @@ export interface PlanBalance {
213
213
  planName: string;
214
214
  planType: string;
215
215
  holderAddress: Address;
216
- balance: bigint;
216
+ /**
217
+ * Credit balance as a DECIMAL STRING, e.g. `'950'` — not a `bigint`.
218
+ *
219
+ * ⚠️ It is a string because that is what the deserializer produces, not as a
220
+ * preference. `PlanBalance` is constructed nowhere in `src/`: it only ever
221
+ * arrives from `getPlanBalance`, which ends in a bare `return response.json()`,
222
+ * and JSON has no bigint. It had been declared `bigint` since 2025-05-26 while the API sent a
223
+ * quoted string, so `balance > 100n` threw `Cannot mix BigInt and other types`
224
+ * in code that typechecked clean, and `typeof balance === 'bigint'` silently
225
+ * took the wrong branch. This reaches sellers as public API — `PlanBalance` is
226
+ * on `req.paymentContext.agentRequest.balance`.
227
+ *
228
+ * The value can exceed `Number.MAX_SAFE_INTEGER`, so do NOT route it through
229
+ * `Number`. For arithmetic, convert explicitly:
230
+ *
231
+ * ```ts
232
+ * BigInt(ctx.agentRequest.balance.balance) > 100n
233
+ * ```
234
+ *
235
+ * The outbound direction already has its counterpart: `jsonReplacer`
236
+ * (`common/helper.ts`) narrows bigints to strings on request bodies. This is
237
+ * the inbound side of the same boundary.
238
+ */
239
+ balance: string;
217
240
  creditsContract: Address;
218
241
  isSubscriber: boolean;
219
242
  pricePerCredit: number;
@@ -254,6 +277,30 @@ export interface NvmAPIResult {
254
277
  export interface APIOutputData {
255
278
  [key: string]: any;
256
279
  }
280
+ /** Status of a Stripe PaymentIntent. */
281
+ export type StripePaymentIntentStatus = 'requires_payment_method' | 'requires_confirmation' | 'requires_action' | 'processing' | 'requires_capture' | 'canceled' | 'succeeded';
282
+ /**
283
+ * The Stripe PaymentIntent `POST /api/v1/fiat/stripe/payment` creates for a fiat plan,
284
+ * returned by `PlansAPI.orderFiatPlan`. Confirm it client-side with Stripe.js and
285
+ * its `client_secret`. These fields are what callers can rely on; do not depend on
286
+ * any other field of the response.
287
+ */
288
+ export interface StripePaymentIntent {
289
+ /** PaymentIntent id (`pi_…`) */
290
+ id: string;
291
+ /** Secret Stripe.js confirms the payment with. Pass it to Stripe.js only; never log or store it. */
292
+ client_secret: string | null;
293
+ /** PaymentIntent status */
294
+ status: StripePaymentIntentStatus;
295
+ /** Amount in the currency's smallest unit (e.g. cents) */
296
+ amount: number;
297
+ /** Three-letter ISO currency code, lowercase */
298
+ currency: string;
299
+ }
300
+ /**
301
+ * @deprecated Not returned by any SDK method: `PlansAPI.orderFiatPlan` returns a
302
+ * {@link StripePaymentIntent}.
303
+ */
257
304
  export interface StripeCheckoutResult {
258
305
  stripeCheckoutSessionId: string;
259
306
  checkoutLink: string;
@@ -477,11 +524,12 @@ export type DelegationCurrency = 'usd' | 'eur' | 'usdc' | 'eurc';
477
524
  *
478
525
  * @remarks
479
526
  * The inline create-on-the-fly fields (`providerPaymentMethodId`,
480
- * `spendingLimitCents`, `durationSecs`, `currency`, `merchantAccountId`,
481
- * `maxTransactions`, `cardId`) are individually deprecated. Calling
527
+ * `spendingLimitCents`, `durationSecs`, `currency`, `maxTransactions`,
528
+ * `cardId`) are individually deprecated. Calling
482
529
  * {@link X402TokenAPI.getX402AccessToken} with a `delegationConfig` that lacks
483
- * `delegationId` but carries one of those fields emits a runtime deprecation
484
- * warning; create the delegation first and pass only `delegationId` (optionally
530
+ * `delegationId` but carries `cardId`, `providerPaymentMethodId`,
531
+ * `spendingLimitCents` or `durationSecs` emits a runtime deprecation warning;
532
+ * create the delegation first and pass only `delegationId` (optionally
485
533
  * `apiKeyId`) here. The interface itself is NOT deprecated — the
486
534
  * `{ delegationId }` reuse path is the supported way to configure a token request.
487
535
  */
@@ -514,8 +562,9 @@ export interface DelegationConfig {
514
562
  */
515
563
  currency?: DelegationCurrency;
516
564
  /**
517
- * Merchant account ID (Stripe Connect acct_xxx or Braintree merchantId).
518
- * @deprecated Inline create-on-the-fly. Create the delegation first and pass `delegationId`.
565
+ * Merchant account ID (Stripe Connect acct_…).
566
+ * @deprecated Ignored by the backend (the seller's Connect account is
567
+ * resolved at settle time); drop it.
519
568
  */
520
569
  merchantAccountId?: string;
521
570
  /**
@@ -524,23 +573,40 @@ export interface DelegationConfig {
524
573
  */
525
574
  maxTransactions?: number;
526
575
  /**
527
- * Plan ID to scope a newly-created delegation to. Optional and additive:
528
- * delegations are plan-agnostic by default; supplying `planId` opts into a
529
- * plan-bound delegation. (Visa delegations are always plan-specific and
530
- * require it server-side.)
576
+ * Ignored by the backend: an inline-created delegation is always
577
+ * plan-agnostic. To bind a delegation to one plan, create it with
578
+ * `createDelegation({ planId })` and pass its `delegationId`.
531
579
  * @deprecated Inline create-on-the-fly. Create the delegation first and pass `delegationId`.
532
580
  */
533
581
  planId?: string;
534
582
  /** NVM API Key ID to scope the delegation to. Active (non-deprecated). */
535
583
  apiKeyId?: string;
536
584
  }
585
+ /**
586
+ * Card-delegation providers exposed by the SDK. Use this when you want to
587
+ * restrict to card-shape entries only (e.g., filtering the heterogeneous
588
+ * list returned by `DelegationAPI.listPaymentMethods`).
589
+ */
590
+ export type CardProvider = 'stripe' | 'braintree' | 'visa';
591
+ /**
592
+ * All delegation providers, including the crypto path. Matches the
593
+ * server-side union and types {@link CreateDelegationPayload.provider}.
594
+ * `vgs` = a card enrolled through the credit/debit card form: vaulted at VGS
595
+ * and charged through the PSP the paid plan selects. (Visa Agentic cards are
596
+ * `visa`.)
597
+ */
598
+ export type DelegationProvider = CardProvider | 'vgs' | 'erc4337';
537
599
  /**
538
600
  * Payload for creating a new delegation via POST /api/v1/delegation/create.
539
601
  */
540
602
  export interface CreateDelegationPayload {
541
- /** Delegation provider: 'stripe' | 'braintree' | 'visa' for card, 'erc4337' for crypto */
542
- provider: 'stripe' | 'braintree' | 'visa' | 'erc4337';
543
- /** Payment method ID from the provider (Stripe 'pm_...', Braintree vault token, or Visa Agentic token id). Required for card providers. */
603
+ /**
604
+ * Delegation provider: 'vgs' for a card enrolled through the credit/debit card form,
605
+ * 'stripe' | 'visa' for the other card rails, 'erc4337' for crypto. 'braintree' is
606
+ * refused at create.
607
+ */
608
+ provider: DelegationProvider;
609
+ /** Payment method ID from the provider (the card's 'CRD…' id for 'vgs', Stripe 'pm_...', or Visa Agentic token id). Required for card providers. */
544
610
  providerPaymentMethodId?: string;
545
611
  /** Maximum spending limit in cents */
546
612
  spendingLimitCents: number;
@@ -549,12 +615,16 @@ export interface CreateDelegationPayload {
549
615
  /** Currency code (e.g., 'usd' for card providers, 'usdc' for erc4337). Required by the backend — no silent default. */
550
616
  currency: DelegationCurrency;
551
617
  /**
552
- * Plan ID to scope the delegation to. Optional and additive: delegations are
553
- * plan-agnostic by default; supplying `planId` opts into a plan-bound
554
- * delegation. (Visa delegations are always plan-specific and require it.)
618
+ * Plan ID to scope the delegation to. Optional for every provider, and
619
+ * additive: delegations are plan-agnostic by default; supplying `planId` opts
620
+ * into a plan-bound delegation.
555
621
  */
556
622
  planId?: string;
557
- /** Merchant account ID (Stripe Connect acct_xxx or Braintree merchantId) */
623
+ /**
624
+ * Merchant account ID (Stripe Connect acct_…).
625
+ * @deprecated Ignored by the backend: the seller's Connect account is
626
+ * resolved at settle time, never taken from the caller.
627
+ */
558
628
  merchantAccountId?: string;
559
629
  /** Maximum number of transactions allowed */
560
630
  maxTransactions?: number;
@@ -570,6 +640,65 @@ export interface CreateDelegationResponse {
570
640
  /** Delegation UUID */
571
641
  delegationId: string;
572
642
  }
643
+ /**
644
+ * The protected resource a token is minted for.
645
+ *
646
+ * Load-bearing from token v3 on: `url` is inside the EIP-712 signature, so a
647
+ * v3 token only settles against the seller endpoint it names.
648
+ *
649
+ * Outside the v1/v2 signature, which covers `from` / `sessionKeysProvider` /
650
+ * `sessionKeys` / `planId` only — but **not** inert there: the backend compares
651
+ * this URL against the one the seller advertises in its `paymentRequired`
652
+ * (origin + path; an exact string comparison when either side is not a
653
+ * parseable URL) for **any** token that carries a resource. Binding a token to
654
+ * a URL the seller does not advertise verbatim therefore fails verification
655
+ * with `BCK.X402.0013`. Sellers built on this SDK's `paymentMiddleware`
656
+ * advertise `req.originalUrl` — a **relative** path — so for such a seller bind
657
+ * to that string, not to the absolute URL you fetch. See {@link
658
+ * X402TokenResource.url} for a seller that advertises the absolute form, which
659
+ * this SDK's own A2A server does.
660
+ */
661
+ export interface X402TokenResource {
662
+ /**
663
+ * The protected resource URL, **as the seller advertises it** — e.g.
664
+ * `/api/v1/tasks` from a `paymentMiddleware` seller, or the absolute
665
+ * `https://seller.example/api/v1/tasks` from one that advertises it that way
666
+ * (this SDK's A2A server does).
667
+ */
668
+ url: string;
669
+ /** Human-readable description. */
670
+ description?: string;
671
+ /** Expected response MIME type (e.g. `application/json`). */
672
+ mimeType?: string;
673
+ }
674
+ /**
675
+ * EIP-712 struct version the backend signs the access token under.
676
+ *
677
+ * - `2` — today's default: reusable bearer token, signature covers
678
+ * `[from, sessionKeysProvider, sessionKeys, planId]`.
679
+ * - `3` — appends `agentId`, `resourceUrl`, `httpVerb` and a one-time `nonce`
680
+ * to the signed struct, making the token seller/resource-bound and
681
+ * **single-use**: it is consumed on the first `POST /x402/settle`.
682
+ *
683
+ * Opt-in. Never assume the token you got back is the version you asked for —
684
+ * a backend that predates the v3 struct silently drops the field (its
685
+ * `ValidationPipe` whitelists without `forbidNonWhitelisted`) and mints v2.
686
+ * Read the version off the token with {@link detectAccessTokenVersion}.
687
+ */
688
+ export type X402TokenVersion = 2 | 3;
689
+ /**
690
+ * Options accepted by the MPP token mint: everything {@link X402TokenOptions}
691
+ * takes except `tokenVersion`.
692
+ *
693
+ * MPP and x402 stopped sharing a token version ladder (nvm-monorepo#3266). MPP
694
+ * signs one struct and names no version for it, because its single-use unit is
695
+ * the **challenge**, not the token — one MPP access token is presented across
696
+ * many challenges by design, so an x402 v3 per-token nonce would reject every
697
+ * buyer's second challenge. The backend refuses ANY `tokenVersion` on an MPP
698
+ * mint with `BCK.MPP.0007`, `2` included, so the field is omitted from the type
699
+ * rather than accepted and ignored.
700
+ */
701
+ export type MppTokenOptions = Omit<X402TokenOptions, 'tokenVersion'>;
573
702
  /**
574
703
  * Options for x402 token generation that control scheme and delegation behavior.
575
704
  */
@@ -580,5 +709,33 @@ export interface X402TokenOptions {
580
709
  network?: string;
581
710
  /** Delegation configuration for both erc4337 and card-delegation schemes */
582
711
  delegationConfig?: DelegationConfig;
712
+ /**
713
+ * The protected resource the token is minted for. Signed into a v3 token,
714
+ * which then only settles against this URL. Without it the backend has
715
+ * nothing to bind to and skips endpoint validation, so `tokenVersion: 3`
716
+ * alone yields a single-use token bound to nothing — a supported mode, but
717
+ * not the seller binding.
718
+ *
719
+ * Must be the **exact string the seller advertises**; see
720
+ * {@link X402TokenResource}. Supplying it without `tokenVersion: 3` is
721
+ * **refused**: only a v3 signature covers the binding, while the resource
722
+ * still arms the backend's endpoint allowlist and is compared against what
723
+ * the seller advertises — so it can only cost you a `BCK.PROTOCOL.0031` or a
724
+ * `BCK.X402.0013`.
725
+ */
726
+ resource?: X402TokenResource;
727
+ /**
728
+ * HTTP verb of the protected resource (e.g. `POST`). Signed into a v3 token
729
+ * alongside {@link X402TokenOptions.resource}, and compared against the verb
730
+ * the seller advertises. Upper-cased by the SDK before it is sent, so
731
+ * `'post'` and `'POST'` are equivalent.
732
+ */
733
+ httpVerb?: string;
734
+ /**
735
+ * Request a specific EIP-712 token version. Omitted means the backend
736
+ * default (currently `2`). Requesting `3` is a request, not a guarantee —
737
+ * always read the version back off the minted token.
738
+ */
739
+ tokenVersion?: X402TokenVersion;
583
740
  }
584
741
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"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"}