@nevermined-io/core-kit 0.4.6 → 0.5.1

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 (105) hide show
  1. package/dist/Instantiable.abstract.js +15 -13
  2. package/dist/Instantiable.abstract.js.map +1 -0
  3. package/dist/artifacts/generated.d.ts +174 -40
  4. package/dist/artifacts/generated.d.ts.map +1 -1
  5. package/dist/artifacts/generated.js +22805 -7111
  6. package/dist/artifacts/generated.js.map +1 -0
  7. package/dist/contracts/AccessManager.js +12 -3
  8. package/dist/contracts/AccessManager.js.map +1 -0
  9. package/dist/contracts/AssetRegistry.d.ts +1 -0
  10. package/dist/contracts/AssetRegistry.d.ts.map +1 -1
  11. package/dist/contracts/AssetRegistry.js +134 -69
  12. package/dist/contracts/AssetRegistry.js.map +1 -0
  13. package/dist/contracts/ContractBase.d.ts.map +1 -1
  14. package/dist/contracts/ContractBase.js +173 -140
  15. package/dist/contracts/ContractBase.js.map +1 -0
  16. package/dist/contracts/ContractsApi.js +6 -54
  17. package/dist/contracts/ContractsApi.js.map +1 -0
  18. package/dist/contracts/CryptoTemplateBase.js +23 -11
  19. package/dist/contracts/CryptoTemplateBase.js.map +1 -0
  20. package/dist/contracts/FiatPaymentTemplate.js +9 -1
  21. package/dist/contracts/FiatPaymentTemplate.js.map +1 -0
  22. package/dist/contracts/FiatSettlementCondition.js +8 -1
  23. package/dist/contracts/FiatSettlementCondition.js.map +1 -0
  24. package/dist/contracts/FixedPaymentTemplate.js +42 -10
  25. package/dist/contracts/FixedPaymentTemplate.js.map +1 -0
  26. package/dist/contracts/NFT1155Base.js +48 -12
  27. package/dist/contracts/NFT1155Base.js.map +1 -0
  28. package/dist/contracts/NFT1155Credits.js +2 -0
  29. package/dist/contracts/NFT1155Credits.js.map +1 -0
  30. package/dist/contracts/NFT1155ExpirableCredits.js +26 -6
  31. package/dist/contracts/NFT1155ExpirableCredits.js.map +1 -0
  32. package/dist/contracts/NVMConfig.js +2 -0
  33. package/dist/contracts/NVMConfig.js.map +1 -0
  34. package/dist/contracts/PayAsYouGoTemplate.js +36 -10
  35. package/dist/contracts/PayAsYouGoTemplate.js.map +1 -0
  36. package/dist/contracts/ProtocolStandardFees.js +7 -1
  37. package/dist/contracts/ProtocolStandardFees.js.map +1 -0
  38. package/dist/contracts/Roles.js +2 -0
  39. package/dist/contracts/Roles.js.map +1 -0
  40. package/dist/contracts/index.js +2 -0
  41. package/dist/contracts/index.js.map +1 -0
  42. package/dist/errors/NeverminedErrors.js +27 -26
  43. package/dist/errors/NeverminedErrors.js.map +1 -0
  44. package/dist/errors/index.js +2 -0
  45. package/dist/errors/index.js.map +1 -0
  46. package/dist/index.js +2 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/models/AgentX402AccessToken.js +78 -46
  49. package/dist/models/AgentX402AccessToken.js.map +1 -0
  50. package/dist/models/Logger.js +12 -12
  51. package/dist/models/Logger.js.map +1 -0
  52. package/dist/models/NeverminedOptions.d.ts +3 -3
  53. package/dist/models/NeverminedOptions.d.ts.map +1 -1
  54. package/dist/models/NeverminedOptions.js +3 -28
  55. package/dist/models/NeverminedOptions.js.map +1 -0
  56. package/dist/models/NvmApiKey.js +96 -147
  57. package/dist/models/NvmApiKey.js.map +1 -0
  58. package/dist/models/Transactions.js +3 -1
  59. package/dist/models/Transactions.js.map +1 -0
  60. package/dist/models/index.js +2 -0
  61. package/dist/models/index.js.map +1 -0
  62. package/dist/nevermined/Nevermined.js +20 -42
  63. package/dist/nevermined/Nevermined.js.map +1 -0
  64. package/dist/nevermined/api/PaymentsApi.js +38 -43
  65. package/dist/nevermined/api/PaymentsApi.js.map +1 -0
  66. package/dist/nevermined/api/ServicesApi.js +7 -15
  67. package/dist/nevermined/api/ServicesApi.js.map +1 -0
  68. package/dist/nevermined/api/UtilsApi.js +7 -19
  69. package/dist/nevermined/api/UtilsApi.js.map +1 -0
  70. package/dist/nevermined/index.js +2 -0
  71. package/dist/nevermined/index.js.map +1 -0
  72. package/dist/nevermined/utils/AgentUtils.js +25 -23
  73. package/dist/nevermined/utils/AgentUtils.js.map +1 -0
  74. package/dist/nevermined/utils/AnvilHelpers.js +34 -19
  75. package/dist/nevermined/utils/AnvilHelpers.js.map +1 -0
  76. package/dist/nevermined/utils/BlockchainViemUtils.d.ts +4 -4
  77. package/dist/nevermined/utils/BlockchainViemUtils.js +102 -108
  78. package/dist/nevermined/utils/BlockchainViemUtils.js.map +1 -0
  79. package/dist/nevermined/utils/JwtUtils.js +33 -28
  80. package/dist/nevermined/utils/JwtUtils.js.map +1 -0
  81. package/dist/nevermined/utils/SignatureUtils.js +23 -27
  82. package/dist/nevermined/utils/SignatureUtils.js.map +1 -0
  83. package/dist/nevermined/utils/WebServiceConnector.js +18 -20
  84. package/dist/nevermined/utils/WebServiceConnector.js.map +1 -0
  85. package/dist/nevermined/utils/ZeroDevPolicies.js +115 -75
  86. package/dist/nevermined/utils/ZeroDevPolicies.js.map +1 -0
  87. package/dist/nevermined/utils/index.js +2 -0
  88. package/dist/nevermined/utils/index.js.map +1 -0
  89. package/dist/services/Api.js +11 -5
  90. package/dist/services/Api.js.map +1 -0
  91. package/dist/services/Profiles.js +15 -20
  92. package/dist/services/Profiles.js.map +1 -0
  93. package/dist/services/index.js +2 -0
  94. package/dist/services/index.js.map +1 -0
  95. package/dist/utils/ConversionTypeHelpers.js +13 -6
  96. package/dist/utils/ConversionTypeHelpers.js.map +1 -0
  97. package/dist/utils/DeploymentInfo.js +12 -7
  98. package/dist/utils/DeploymentInfo.js.map +1 -0
  99. package/dist/utils/Network.js +27 -19
  100. package/dist/utils/Network.js.map +1 -0
  101. package/dist/utils/helpers.js +42 -31
  102. package/dist/utils/helpers.js.map +1 -0
  103. package/dist/utils/index.js +2 -0
  104. package/dist/utils/index.js.map +1 -0
  105. package/package.json +17 -1
@@ -1,4 +1,4 @@
1
- import { lockPaymentConditionAddress, payAsYouGoTemplateConfig, paymentsVaultAddress, } from '../artifacts/generated.js';
1
+ import { lockPaymentConditionAddress, payAsYouGoTemplateConfig, paymentsVaultAddress } from '../artifacts/generated.js';
2
2
  import { generateZeroXId } from '../utils/helpers.js';
3
3
  import { CryptoTemplateBase } from './CryptoTemplateBase.js';
4
4
  export class PayAsYouGoTemplate extends CryptoTemplateBase {
@@ -9,7 +9,11 @@ export class PayAsYouGoTemplate extends CryptoTemplateBase {
9
9
  }
10
10
  async order(planId, owner, txParams) {
11
11
  const agreementIdSeed = generateZeroXId();
12
- return this.send('order', owner, [agreementIdSeed, planId, []], txParams);
12
+ return this.send('order', owner, [
13
+ agreementIdSeed,
14
+ planId,
15
+ []
16
+ ], txParams);
13
17
  }
14
18
  async simulateOrder(planId, owner, tokenAddress, totalAmount, txParams) {
15
19
  const agreementIdSeed = generateZeroXId();
@@ -18,20 +22,30 @@ export class PayAsYouGoTemplate extends CryptoTemplateBase {
18
22
  to: tokenAddress,
19
23
  abi: this.TOKEN_APPROVE_ABI,
20
24
  functionName: 'approve',
21
- args: [lockPaymentConditionAddress, totalAmount],
25
+ args: [
26
+ lockPaymentConditionAddress,
27
+ totalAmount
28
+ ]
22
29
  },
23
30
  {
24
31
  to: tokenAddress,
25
32
  abi: this.TOKEN_APPROVE_ABI,
26
33
  functionName: 'approve',
27
- args: [paymentsVaultAddress, totalAmount],
34
+ args: [
35
+ paymentsVaultAddress,
36
+ totalAmount
37
+ ]
28
38
  },
29
39
  {
30
40
  to: this.address,
31
41
  abi: this.contract.abi,
32
42
  functionName: 'order',
33
- args: [agreementIdSeed, planId, []],
34
- },
43
+ args: [
44
+ agreementIdSeed,
45
+ planId,
46
+ []
47
+ ]
48
+ }
35
49
  ];
36
50
  return this.simulateMulticall(calls, owner, txParams);
37
51
  }
@@ -42,21 +56,33 @@ export class PayAsYouGoTemplate extends CryptoTemplateBase {
42
56
  contractAddress: tokenAddress,
43
57
  abi: this.TOKEN_APPROVE_ABI,
44
58
  functionName: 'approve',
45
- args: [lockPaymentConditionAddress, totalAmount],
59
+ args: [
60
+ lockPaymentConditionAddress,
61
+ totalAmount
62
+ ]
46
63
  },
47
64
  {
48
65
  contractAddress: tokenAddress,
49
66
  abi: this.TOKEN_APPROVE_ABI,
50
67
  functionName: 'approve',
51
- args: [paymentsVaultAddress, totalAmount],
68
+ args: [
69
+ paymentsVaultAddress,
70
+ totalAmount
71
+ ]
52
72
  },
53
73
  {
54
74
  contractAddress: this.address,
55
75
  abi: this.contract.abi,
56
76
  functionName: 'order',
57
- args: [agreementIdSeed, planId, []],
58
- },
77
+ args: [
78
+ agreementIdSeed,
79
+ planId,
80
+ []
81
+ ]
82
+ }
59
83
  ];
60
84
  return await this.multicall(calls, owner, txParams);
61
85
  }
62
86
  }
87
+
88
+ //# sourceMappingURL=PayAsYouGoTemplate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/contracts/PayAsYouGoTemplate.ts"],"sourcesContent":["import { Account, Address } from 'viem'\nimport { SmartAccount } from 'viem/account-abstraction'\nimport {\n lockPaymentConditionAddress,\n payAsYouGoTemplateConfig,\n paymentsVaultAddress,\n} from '../artifacts/generated.js'\nimport { InstantiableConfig } from '../Instantiable.abstract.js'\nimport { TxParameters } from '../models/Transactions.js'\nimport { generateZeroXId } from '../utils/helpers.js'\nimport { CryptoTemplateBase } from './CryptoTemplateBase.js'\nimport { MulticallEntry, SimulateMulticallEntry } from './ContractBase.js'\n\nexport class PayAsYouGoTemplate extends CryptoTemplateBase {\n public static override async getInstance(\n config: InstantiableConfig,\n ): Promise<PayAsYouGoTemplate> {\n const payAsYouGoTemplate = new PayAsYouGoTemplate(\n 'PayAsYouGoTemplate',\n payAsYouGoTemplateConfig.address,\n )\n await payAsYouGoTemplate.init(config, payAsYouGoTemplateConfig)\n return payAsYouGoTemplate\n }\n\n public async order(planId: bigint, owner: Account | SmartAccount, txParams?: TxParameters) {\n const agreementIdSeed = generateZeroXId()\n return this.send('order', owner, [agreementIdSeed, planId, []], txParams)\n }\n\n public async simulateOrder(\n planId: bigint,\n owner: Account | SmartAccount,\n tokenAddress: Address,\n totalAmount: bigint,\n txParams?: TxParameters,\n ) {\n const agreementIdSeed = generateZeroXId()\n const calls: SimulateMulticallEntry[] = [\n {\n to: tokenAddress,\n abi: this.TOKEN_APPROVE_ABI,\n functionName: 'approve',\n args: [lockPaymentConditionAddress, totalAmount],\n },\n {\n to: tokenAddress,\n abi: this.TOKEN_APPROVE_ABI,\n functionName: 'approve',\n args: [paymentsVaultAddress, totalAmount],\n },\n {\n to: this.address,\n abi: this.contract.abi,\n functionName: 'order',\n args: [agreementIdSeed, planId, []],\n },\n ]\n return this.simulateMulticall(calls, owner, txParams)\n }\n\n public async orderWithApprovals(\n planId: bigint,\n totalAmount: bigint,\n tokenAddress: Address,\n owner: Account | SmartAccount,\n txParams?: TxParameters,\n ) {\n const agreementIdSeed = generateZeroXId()\n\n const calls: MulticallEntry[] = [\n {\n contractAddress: tokenAddress,\n abi: this.TOKEN_APPROVE_ABI,\n functionName: 'approve',\n args: [lockPaymentConditionAddress, totalAmount],\n },\n {\n contractAddress: tokenAddress,\n abi: this.TOKEN_APPROVE_ABI,\n functionName: 'approve',\n args: [paymentsVaultAddress, totalAmount],\n },\n {\n contractAddress: this.address,\n abi: this.contract.abi,\n functionName: 'order',\n args: [agreementIdSeed, planId, []],\n },\n ]\n return await this.multicall(calls, owner, txParams)\n }\n}\n"],"names":["lockPaymentConditionAddress","payAsYouGoTemplateConfig","paymentsVaultAddress","generateZeroXId","CryptoTemplateBase","PayAsYouGoTemplate","getInstance","config","payAsYouGoTemplate","address","init","order","planId","owner","txParams","agreementIdSeed","send","simulateOrder","tokenAddress","totalAmount","calls","to","abi","TOKEN_APPROVE_ABI","functionName","args","contract","simulateMulticall","orderWithApprovals","contractAddress","multicall"],"mappings":"AAEA,SACEA,2BAA2B,EAC3BC,wBAAwB,EACxBC,oBAAoB,QACf,4BAA2B;AAGlC,SAASC,eAAe,QAAQ,sBAAqB;AACrD,SAASC,kBAAkB,QAAQ,0BAAyB;AAG5D,OAAO,MAAMC,2BAA2BD;IACtC,aAA6BE,YAC3BC,MAA0B,EACG;QAC7B,MAAMC,qBAAqB,IAAIH,mBAC7B,sBACAJ,yBAAyBQ,OAAO;QAElC,MAAMD,mBAAmBE,IAAI,CAACH,QAAQN;QACtC,OAAOO;IACT;IAEA,MAAaG,MAAMC,MAAc,EAAEC,KAA6B,EAAEC,QAAuB,EAAE;QACzF,MAAMC,kBAAkBZ;QACxB,OAAO,IAAI,CAACa,IAAI,CAAC,SAASH,OAAO;YAACE;YAAiBH;YAAQ,EAAE;SAAC,EAAEE;IAClE;IAEA,MAAaG,cACXL,MAAc,EACdC,KAA6B,EAC7BK,YAAqB,EACrBC,WAAmB,EACnBL,QAAuB,EACvB;QACA,MAAMC,kBAAkBZ;QACxB,MAAMiB,QAAkC;YACtC;gBACEC,IAAIH;gBACJI,KAAK,IAAI,CAACC,iBAAiB;gBAC3BC,cAAc;gBACdC,MAAM;oBAACzB;oBAA6BmB;iBAAY;YAClD;YACA;gBACEE,IAAIH;gBACJI,KAAK,IAAI,CAACC,iBAAiB;gBAC3BC,cAAc;gBACdC,MAAM;oBAACvB;oBAAsBiB;iBAAY;YAC3C;YACA;gBACEE,IAAI,IAAI,CAACZ,OAAO;gBAChBa,KAAK,IAAI,CAACI,QAAQ,CAACJ,GAAG;gBACtBE,cAAc;gBACdC,MAAM;oBAACV;oBAAiBH;oBAAQ,EAAE;iBAAC;YACrC;SACD;QACD,OAAO,IAAI,CAACe,iBAAiB,CAACP,OAAOP,OAAOC;IAC9C;IAEA,MAAac,mBACXhB,MAAc,EACdO,WAAmB,EACnBD,YAAqB,EACrBL,KAA6B,EAC7BC,QAAuB,EACvB;QACA,MAAMC,kBAAkBZ;QAExB,MAAMiB,QAA0B;YAC9B;gBACES,iBAAiBX;gBACjBI,KAAK,IAAI,CAACC,iBAAiB;gBAC3BC,cAAc;gBACdC,MAAM;oBAACzB;oBAA6BmB;iBAAY;YAClD;YACA;gBACEU,iBAAiBX;gBACjBI,KAAK,IAAI,CAACC,iBAAiB;gBAC3BC,cAAc;gBACdC,MAAM;oBAACvB;oBAAsBiB;iBAAY;YAC3C;YACA;gBACEU,iBAAiB,IAAI,CAACpB,OAAO;gBAC7Ba,KAAK,IAAI,CAACI,QAAQ,CAACJ,GAAG;gBACtBE,cAAc;gBACdC,MAAM;oBAACV;oBAAiBH;oBAAQ,EAAE;iBAAC;YACrC;SACD;QACD,OAAO,MAAM,IAAI,CAACkB,SAAS,CAACV,OAAOP,OAAOC;IAC5C;AACF"}
@@ -7,9 +7,15 @@ export class ProtocolStandardFees extends ContractBase {
7
7
  return protocolStandardFees;
8
8
  }
9
9
  async calculateFee(totalAmount, priceConfig, creditsConfig) {
10
- return this.contract.read.calculateFee([totalAmount, priceConfig, creditsConfig]);
10
+ return this.contract.read.calculateFee([
11
+ totalAmount,
12
+ priceConfig,
13
+ creditsConfig
14
+ ]);
11
15
  }
12
16
  async getFeeRates() {
13
17
  return this.contract.read.getFeeRates();
14
18
  }
15
19
  }
20
+
21
+ //# sourceMappingURL=ProtocolStandardFees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/contracts/ProtocolStandardFees.ts"],"sourcesContent":["import { CreditsConfig, PriceConfig } from '@nevermined-io/commons'\nimport { protocolStandardFeesConfig } from '../artifacts/generated.js'\nimport { InstantiableConfig } from '../Instantiable.abstract.js'\nimport { ContractBase } from './ContractBase.js'\n\nexport class ProtocolStandardFees extends ContractBase {\n public static override async getInstance(\n config: InstantiableConfig,\n ): Promise<ProtocolStandardFees> {\n const protocolStandardFees = new ProtocolStandardFees(\n 'ProtocolStandardFees',\n protocolStandardFeesConfig.address,\n )\n await protocolStandardFees.init(config, protocolStandardFeesConfig)\n return protocolStandardFees\n }\n\n public async calculateFee(\n totalAmount: bigint,\n priceConfig: PriceConfig,\n creditsConfig: CreditsConfig,\n ) {\n return this.contract.read.calculateFee([totalAmount, priceConfig, creditsConfig])\n }\n\n public async getFeeRates() {\n return this.contract.read.getFeeRates()\n }\n}\n"],"names":["protocolStandardFeesConfig","ContractBase","ProtocolStandardFees","getInstance","config","protocolStandardFees","address","init","calculateFee","totalAmount","priceConfig","creditsConfig","contract","read","getFeeRates"],"mappings":"AACA,SAASA,0BAA0B,QAAQ,4BAA2B;AAEtE,SAASC,YAAY,QAAQ,oBAAmB;AAEhD,OAAO,MAAMC,6BAA6BD;IACxC,aAA6BE,YAC3BC,MAA0B,EACK;QAC/B,MAAMC,uBAAuB,IAAIH,qBAC/B,wBACAF,2BAA2BM,OAAO;QAEpC,MAAMD,qBAAqBE,IAAI,CAACH,QAAQJ;QACxC,OAAOK;IACT;IAEA,MAAaG,aACXC,WAAmB,EACnBC,WAAwB,EACxBC,aAA4B,EAC5B;QACA,OAAO,IAAI,CAACC,QAAQ,CAACC,IAAI,CAACL,YAAY,CAAC;YAACC;YAAaC;YAAaC;SAAc;IAClF;IAEA,MAAaG,cAAc;QACzB,OAAO,IAAI,CAACF,QAAQ,CAACC,IAAI,CAACC,WAAW;IACvC;AACF"}
@@ -10,3 +10,5 @@ export const FIAT_SETTLEMENT_ROLE = 3860893312041324254n;
10
10
  export const CREDITS_BURNER_ROLE = 16934877136143260882n;
11
11
  export const CREDITS_TRANSFER_ROLE = 11914029060103770296n;
12
12
  export const NVM_INFRA_ADMIN_ROLE = 7924818820658164977n;
13
+
14
+ //# sourceMappingURL=Roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/contracts/Roles.ts"],"sourcesContent":["export const UPGRADE_ROLE = 16061234310146353691n\nexport const DEPOSITOR_ROLE = 14314970521567793544n\nexport const WITHDRAW_ROLE = 8393396895733992431n\nexport const CREDITS_MINTER_ROLE = 331619801143826648n\nexport const GOVERNOR_ROLE = 13709648602636273795n\nexport const CONTRACT_TEMPLATE_ROLE = 10197209388572726906n\nexport const CONTRACT_CONDITION_ROLE = 16570836817734027638n\nexport const UPDATE_CONDITION_STATUS_ROLE = 14777935691551675925n\nexport const FIAT_SETTLEMENT_ROLE = 3860893312041324254n\nexport const CREDITS_BURNER_ROLE = 16934877136143260882n\nexport const CREDITS_TRANSFER_ROLE = 11914029060103770296n\nexport const NVM_INFRA_ADMIN_ROLE = 7924818820658164977n\n"],"names":["UPGRADE_ROLE","DEPOSITOR_ROLE","WITHDRAW_ROLE","CREDITS_MINTER_ROLE","GOVERNOR_ROLE","CONTRACT_TEMPLATE_ROLE","CONTRACT_CONDITION_ROLE","UPDATE_CONDITION_STATUS_ROLE","FIAT_SETTLEMENT_ROLE","CREDITS_BURNER_ROLE","CREDITS_TRANSFER_ROLE","NVM_INFRA_ADMIN_ROLE"],"mappings":"AAAA,OAAO,MAAMA,eAAe,qBAAqB,CAAA;AACjD,OAAO,MAAMC,iBAAiB,qBAAqB,CAAA;AACnD,OAAO,MAAMC,gBAAgB,oBAAoB,CAAA;AACjD,OAAO,MAAMC,sBAAsB,mBAAmB,CAAA;AACtD,OAAO,MAAMC,gBAAgB,qBAAqB,CAAA;AAClD,OAAO,MAAMC,yBAAyB,qBAAqB,CAAA;AAC3D,OAAO,MAAMC,0BAA0B,qBAAqB,CAAA;AAC5D,OAAO,MAAMC,+BAA+B,qBAAqB,CAAA;AACjE,OAAO,MAAMC,uBAAuB,oBAAoB,CAAA;AACxD,OAAO,MAAMC,sBAAsB,qBAAqB,CAAA;AACxD,OAAO,MAAMC,wBAAwB,qBAAqB,CAAA;AAC1D,OAAO,MAAMC,uBAAuB,oBAAoB,CAAA"}
@@ -1,2 +1,4 @@
1
1
  export * from './ContractsApi.js';
2
2
  export * from './Roles.js';
3
+
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/contracts/index.ts"],"sourcesContent":["export * from './ContractsApi.js'\nexport * from './Roles.js'\n"],"names":[],"mappings":"AAAA,cAAc,oBAAmB;AACjC,cAAc,aAAY"}
@@ -1,94 +1,93 @@
1
1
  export class NeverminedNodeError extends Error {
2
- constructor(message) {
2
+ constructor(message){
3
3
  super(`Nevermined Node error: ${message}`);
4
4
  }
5
5
  }
6
6
  export class GraphError extends Error {
7
- constructor(message) {
7
+ constructor(message){
8
8
  super(`Graph error: ${message}`);
9
9
  }
10
10
  }
11
11
  export class HttpError extends Error {
12
- constructor(message, code) {
12
+ constructor(message, code){
13
13
  super(`Http error with code ${code}: ${message}`);
14
14
  }
15
15
  }
16
16
  export class ContractsError extends Error {
17
- constructor(message) {
17
+ constructor(message){
18
18
  super(`Contracts error: ${message}`);
19
19
  }
20
20
  }
21
21
  export class ContractSimulationError extends Error {
22
- constructor(message) {
22
+ constructor(message){
23
23
  super(`Contract simulation error: ${message}`);
24
24
  }
25
25
  }
26
26
  export class Web3Error extends Error {
27
- constructor(message) {
27
+ constructor(message){
28
28
  super(`Web3 error: ${message}`);
29
29
  }
30
30
  }
31
31
  export class ApiError extends Error {
32
- constructor(message) {
32
+ constructor(message){
33
33
  super(`Api error: ${message}`);
34
34
  }
35
35
  }
36
36
  export class NFTError extends Error {
37
- constructor(message) {
37
+ constructor(message){
38
38
  super(`NFT error: ${message}`);
39
39
  }
40
40
  }
41
41
  export class DynamicCreditsOverLimit extends NFTError {
42
- constructor(message) {
42
+ constructor(message){
43
43
  super(`DynamicCreditsOverLimit error: ${message}`);
44
44
  }
45
45
  }
46
46
  export class DynamicCreditsUnderLimit extends NFTError {
47
- constructor(message) {
47
+ constructor(message){
48
48
  super(`DynamicCreditsUnderLimit error: ${message}`);
49
49
  }
50
50
  }
51
51
  export class InvalidAddress extends Error {
52
- constructor(address) {
52
+ constructor(address){
53
53
  super(`Invalid Address ${address}`);
54
54
  }
55
55
  }
56
56
  export class NotEnoughBalance extends Error {
57
- constructor(message) {
57
+ constructor(message){
58
58
  super(`NotEnoughBalance: ${message}`);
59
59
  }
60
60
  }
61
61
  export class MethodNotSupported extends Error {
62
- constructor(message) {
62
+ constructor(message){
63
63
  super(`MethodNotSupported: ${message}`);
64
64
  }
65
65
  }
66
66
  export class PlanNotFound extends Error {
67
- constructor(message) {
67
+ constructor(message){
68
68
  super(`PlanNotFound: ${message}`);
69
69
  }
70
70
  }
71
71
  export class AgentNotFound extends Error {
72
- constructor(message) {
72
+ constructor(message){
73
73
  super(`AgentNotFound: ${message}`);
74
74
  }
75
75
  }
76
76
  export class AssetError extends Error {
77
- constructor(message) {
77
+ constructor(message){
78
78
  super(`Asset error: ${message}`);
79
79
  }
80
80
  }
81
81
  export class PaymentFeesNotIncluded extends Error {
82
- constructor(message) {
82
+ constructor(message){
83
83
  super(`PaymentFeesNotIncluded: ${message}`);
84
84
  }
85
85
  }
86
86
  export class DDOError extends Error {
87
- constructor(message, did) {
87
+ constructor(message, did){
88
88
  if (did) {
89
89
  super(`DDO(${did}) error: ${message}`);
90
- }
91
- else {
90
+ } else {
92
91
  super(`DDO error: ${message}`);
93
92
  }
94
93
  // from https://bobbyhadz.com/blog/typescript-extend-error-class
@@ -97,32 +96,34 @@ export class DDOError extends Error {
97
96
  }
98
97
  }
99
98
  export class DDOServiceNotFoundError extends DDOError {
100
- constructor(serviceType, did) {
99
+ constructor(serviceType, did){
101
100
  super(`Service with type "${serviceType}" not found`, did);
102
101
  }
103
102
  }
104
103
  export class DDOServiceAlreadyExists extends DDOError {
105
- constructor(serviceType, index) {
104
+ constructor(serviceType, index){
106
105
  super(`Service with type "${serviceType}" and index ${index} already exists`);
107
106
  }
108
107
  }
109
108
  export class DDOConditionNotFoundError extends DDOError {
110
- constructor(conditionName) {
109
+ constructor(conditionName){
111
110
  super(`Condition with name "${conditionName}" not found`);
112
111
  }
113
112
  }
114
113
  export class DDOParamNotFoundError extends DDOError {
115
- constructor(conditionName, paramName) {
114
+ constructor(conditionName, paramName){
116
115
  super(`Parameter "${paramName}" not found on Condition with type "${conditionName}"`);
117
116
  }
118
117
  }
119
118
  export class DDOPriceNotFoundError extends DDOError {
120
- constructor(serviceType, did) {
119
+ constructor(serviceType, did){
121
120
  super(`Service with type "${serviceType}" is not priced.`, did);
122
121
  }
123
122
  }
124
123
  export class NvmAccountError extends Error {
125
- constructor(message) {
124
+ constructor(message){
126
125
  super(`NVM Account error: ${message}`);
127
126
  }
128
127
  }
128
+
129
+ //# sourceMappingURL=NeverminedErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors/NeverminedErrors.ts"],"sourcesContent":["import { Address } from 'viem'\n\nexport class NeverminedNodeError extends Error {\n constructor(message: string) {\n super(`Nevermined Node error: ${message}`)\n }\n}\n\nexport class GraphError extends Error {\n constructor(message: string) {\n super(`Graph error: ${message}`)\n }\n}\n\nexport class HttpError extends Error {\n constructor(message: string, code: number) {\n super(`Http error with code ${code}: ${message}`)\n }\n}\n\nexport class ContractsError extends Error {\n constructor(message: string) {\n super(`Contracts error: ${message}`)\n }\n}\n\nexport class ContractSimulationError extends Error {\n constructor(message: string) {\n super(`Contract simulation error: ${message}`)\n }\n}\n\nexport class Web3Error extends Error {\n constructor(message: string) {\n super(`Web3 error: ${message}`)\n }\n}\n\nexport class ApiError extends Error {\n constructor(message: string) {\n super(`Api error: ${message}`)\n }\n}\n\nexport class NFTError extends Error {\n constructor(message: string) {\n super(`NFT error: ${message}`)\n }\n}\n\nexport class DynamicCreditsOverLimit extends NFTError {\n constructor(message: string) {\n super(`DynamicCreditsOverLimit error: ${message}`)\n }\n}\n\nexport class DynamicCreditsUnderLimit extends NFTError {\n constructor(message: string) {\n super(`DynamicCreditsUnderLimit error: ${message}`)\n }\n}\n\nexport class InvalidAddress extends Error {\n constructor(address?: Address) {\n super(`Invalid Address ${address}`)\n }\n}\n\nexport class NotEnoughBalance extends Error {\n constructor(message: string) {\n super(`NotEnoughBalance: ${message}`)\n }\n}\n\nexport class MethodNotSupported extends Error {\n constructor(message: string) {\n super(`MethodNotSupported: ${message}`)\n }\n}\n\nexport class PlanNotFound extends Error {\n constructor(message: string) {\n super(`PlanNotFound: ${message}`)\n }\n}\n\nexport class AgentNotFound extends Error {\n constructor(message: string) {\n super(`AgentNotFound: ${message}`)\n }\n}\n\nexport class AssetError extends Error {\n constructor(message: string) {\n super(`Asset error: ${message}`)\n }\n}\n\nexport class PaymentFeesNotIncluded extends Error {\n constructor(message: string) {\n super(`PaymentFeesNotIncluded: ${message}`)\n }\n}\n\nexport class DDOError extends Error {\n constructor(message: string, did?: string) {\n if (did) {\n super(`DDO(${did}) error: ${message}`)\n } else {\n super(`DDO error: ${message}`)\n }\n\n // from https://bobbyhadz.com/blog/typescript-extend-error-class\n // 👇️ because we are extending a built-in class\n Object.setPrototypeOf(this, DDOError.prototype)\n }\n}\n\nexport class DDOServiceNotFoundError extends DDOError {\n constructor(serviceType: string, did?: string) {\n super(`Service with type \"${serviceType}\" not found`, did)\n }\n}\n\nexport class DDOServiceAlreadyExists extends DDOError {\n constructor(serviceType: string, index: number) {\n super(`Service with type \"${serviceType}\" and index ${index} already exists`)\n }\n}\n\nexport class DDOConditionNotFoundError extends DDOError {\n constructor(conditionName: string) {\n super(`Condition with name \"${conditionName}\" not found`)\n }\n}\n\nexport class DDOParamNotFoundError extends DDOError {\n constructor(conditionName: string, paramName?: string) {\n super(`Parameter \"${paramName}\" not found on Condition with type \"${conditionName}\"`)\n }\n}\n\nexport class DDOPriceNotFoundError extends DDOError {\n constructor(serviceType: string, did?: string) {\n super(`Service with type \"${serviceType}\" is not priced.`, did)\n }\n}\n\nexport class NvmAccountError extends Error {\n constructor(message: string) {\n super(`NVM Account error: ${message}`)\n }\n}\n"],"names":["NeverminedNodeError","Error","message","GraphError","HttpError","code","ContractsError","ContractSimulationError","Web3Error","ApiError","NFTError","DynamicCreditsOverLimit","DynamicCreditsUnderLimit","InvalidAddress","address","NotEnoughBalance","MethodNotSupported","PlanNotFound","AgentNotFound","AssetError","PaymentFeesNotIncluded","DDOError","did","Object","setPrototypeOf","prototype","DDOServiceNotFoundError","serviceType","DDOServiceAlreadyExists","index","DDOConditionNotFoundError","conditionName","DDOParamNotFoundError","paramName","DDOPriceNotFoundError","NvmAccountError"],"mappings":"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"}
@@ -1 +1,3 @@
1
1
  export * from './NeverminedErrors.js';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors/index.ts"],"sourcesContent":["export * from './NeverminedErrors.js'\n"],"names":[],"mappings":"AAAA,cAAc,wBAAuB"}
package/dist/index.js CHANGED
@@ -6,3 +6,5 @@ export * from './errors/index.js';
6
6
  export * from './Instantiable.abstract.js';
7
7
  // Utils
8
8
  export * from './utils/index.js';
9
+
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export * from './contracts/index.js'\nexport * from './models/index.js'\nexport * from './nevermined/index.js'\nexport * from './nevermined/Nevermined.js'\nexport * from './errors/index.js'\nexport * from './Instantiable.abstract.js'\n\n// Utils\nexport * from './utils/index.js'\n"],"names":[],"mappings":"AAAA,cAAc,uBAAsB;AACpC,cAAc,oBAAmB;AACjC,cAAc,wBAAuB;AACrC,cAAc,6BAA4B;AAC1C,cAAc,oBAAmB;AACjC,cAAc,6BAA4B;AAE1C,QAAQ;AACR,cAAc,mBAAkB"}
@@ -1,24 +1,43 @@
1
1
  import { keccak256, toBytes } from 'viem';
2
2
  export const NeverminedTypedDataTypes = {
3
3
  SessionKey: [
4
- { name: 'id', type: 'string' },
5
- { name: 'data', type: 'string' },
4
+ {
5
+ name: 'id',
6
+ type: 'string'
7
+ },
8
+ {
9
+ name: 'data',
10
+ type: 'string'
11
+ }
6
12
  ],
7
- SessionKeys: [{ name: 'sessionKeys', type: 'SessionKey[]' }],
8
- Authorization: [
9
- { name: 'from', type: 'address' },
10
- { name: 'sessionKeysProvider', type: 'string' },
11
- { name: 'sessionKeys', type: 'SessionKey[]' },
13
+ SessionKeys: [
14
+ {
15
+ name: 'sessionKeys',
16
+ type: 'SessionKey[]'
17
+ }
12
18
  ],
19
+ Authorization: [
20
+ {
21
+ name: 'from',
22
+ type: 'address'
23
+ },
24
+ {
25
+ name: 'sessionKeysProvider',
26
+ type: 'string'
27
+ },
28
+ {
29
+ name: 'sessionKeys',
30
+ type: 'SessionKey[]'
31
+ }
32
+ ]
13
33
  };
14
34
  /**
15
35
  * Generate an x402 access token aligned with x402 v2 spec
16
36
  *
17
37
  * @param options - Token generation options
18
38
  * @returns x402 access token with EIP-712 signature
19
- */
20
- export const generateAgentX402AccessToken = async (options) => {
21
- const { subscriber, orderSessionKey, redeemSessionKey, publicClient, planId, schemeVersion = '1', agentId, resource, httpVerb, validUntil, } = options;
39
+ */ export const generateAgentX402AccessToken = async (options)=>{
40
+ const { subscriber, orderSessionKey, redeemSessionKey, publicClient, planId, schemeVersion = '1', agentId, resource, httpVerb, validUntil } = options;
22
41
  // hash the session keys
23
42
  const redeemSessionKeyHash = keccak256(toBytes(redeemSessionKey));
24
43
  const orderSessionKeyHash = keccak256(toBytes(orderSessionKey));
@@ -29,26 +48,26 @@ export const generateAgentX402AccessToken = async (options) => {
29
48
  sessionKeys: [
30
49
  {
31
50
  id: 'order',
32
- data: orderSessionKeyHash,
51
+ data: orderSessionKeyHash
33
52
  },
34
53
  {
35
54
  id: 'redeem',
36
- data: redeemSessionKeyHash,
37
- },
38
- ],
55
+ data: redeemSessionKeyHash
56
+ }
57
+ ]
39
58
  };
40
59
  const domain = {
41
60
  name: 'Nevermined',
42
61
  version: '1',
43
62
  chainId: publicClient.chain?.id,
44
- verifyingContract: subscriber.address,
63
+ verifyingContract: subscriber.address
45
64
  };
46
65
  // generate the eip712 data
47
66
  const eip712Data = {
48
67
  domain,
49
68
  types: NeverminedTypedDataTypes,
50
69
  primaryType: 'Authorization',
51
- message,
70
+ message
52
71
  };
53
72
  const signature = await subscriber.signTypedData(eip712Data);
54
73
  // Get network in CAIP-2 format (eip155:chainId)
@@ -56,23 +75,31 @@ export const generateAgentX402AccessToken = async (options) => {
56
75
  const network = chainId ? `eip155:${chainId}` : publicClient.chain?.name;
57
76
  return {
58
77
  x402Version: 2,
59
- ...(resource && { resource }),
78
+ ...resource && {
79
+ resource
80
+ },
60
81
  accepted: {
61
82
  scheme: 'nvm:erc4337',
62
83
  network,
63
84
  planId,
64
85
  extra: {
65
86
  version: schemeVersion,
66
- ...(agentId && { agentId }),
67
- ...(httpVerb && { httpVerb }),
68
- },
87
+ ...agentId && {
88
+ agentId
89
+ },
90
+ ...httpVerb && {
91
+ httpVerb
92
+ }
93
+ }
69
94
  },
70
95
  payload: {
71
96
  signature,
72
- authorization: message,
97
+ authorization: message
98
+ },
99
+ ...validUntil !== undefined && {
100
+ validUntil
73
101
  },
74
- ...(validUntil !== undefined && { validUntil }),
75
- extensions: {},
102
+ extensions: {}
76
103
  };
77
104
  };
78
105
  /**
@@ -81,8 +108,7 @@ export const generateAgentX402AccessToken = async (options) => {
81
108
  * @param accessToken - The x402 access token to verify
82
109
  * @param publicClient - Viem public client
83
110
  * @returns true if signature is valid
84
- */
85
- export const verifyAgentX402AccessToken = async (accessToken, publicClient) => {
111
+ */ export const verifyAgentX402AccessToken = async (accessToken, publicClient)=>{
86
112
  const erc4337Payload = accessToken.payload;
87
113
  // Extract subscriber address from payload.authorization.from
88
114
  const subscriberAddress = erc4337Payload.authorization.from;
@@ -90,7 +116,7 @@ export const verifyAgentX402AccessToken = async (accessToken, publicClient) => {
90
116
  name: 'Nevermined',
91
117
  version: '1',
92
118
  chainId: publicClient.chain?.id,
93
- verifyingContract: subscriberAddress,
119
+ verifyingContract: subscriberAddress
94
120
  };
95
121
  const { signature, authorization } = erc4337Payload;
96
122
  const isValid = await publicClient.verifyTypedData({
@@ -99,7 +125,7 @@ export const verifyAgentX402AccessToken = async (accessToken, publicClient) => {
99
125
  types: NeverminedTypedDataTypes,
100
126
  domain,
101
127
  message: authorization,
102
- primaryType: 'Authorization',
128
+ primaryType: 'Authorization'
103
129
  });
104
130
  return isValid;
105
131
  };
@@ -108,12 +134,19 @@ export const verifyAgentX402AccessToken = async (accessToken, publicClient) => {
108
134
  *
109
135
  * @param token - The token to validate (unknown type for safety)
110
136
  * @returns Validation result with errors if any
111
- */
112
- const SUPPORTED_SCHEMES = ['nvm:erc4337', 'nvm:card-delegation'];
113
- export const validateX402TokenStructure = (token) => {
137
+ */ const SUPPORTED_SCHEMES = [
138
+ 'nvm:erc4337',
139
+ 'nvm:card-delegation'
140
+ ];
141
+ export const validateX402TokenStructure = (token)=>{
114
142
  const errors = [];
115
143
  if (!token || typeof token !== 'object') {
116
- return { valid: false, errors: ['Token must be an object'] };
144
+ return {
145
+ valid: false,
146
+ errors: [
147
+ 'Token must be an object'
148
+ ]
149
+ };
117
150
  }
118
151
  const t = token;
119
152
  // Validate x402Version
@@ -123,8 +156,7 @@ export const validateX402TokenStructure = (token) => {
123
156
  // Validate accepted object
124
157
  if (!t.accepted || typeof t.accepted !== 'object') {
125
158
  errors.push('accepted is required');
126
- }
127
- else {
159
+ } else {
128
160
  const accepted = t.accepted;
129
161
  const scheme = accepted.scheme;
130
162
  if (!SUPPORTED_SCHEMES.includes(scheme)) {
@@ -136,8 +168,7 @@ export const validateX402TokenStructure = (token) => {
136
168
  // Validate extra
137
169
  if (!accepted.extra || typeof accepted.extra !== 'object') {
138
170
  errors.push('extra is required in accepted');
139
- }
140
- else {
171
+ } else {
141
172
  const extra = accepted.extra;
142
173
  if (!extra.version || typeof extra.version !== 'string') {
143
174
  errors.push('version is required in accepted.extra');
@@ -153,8 +184,7 @@ export const validateX402TokenStructure = (token) => {
153
184
  // Validate payload
154
185
  if (!t.payload || typeof t.payload !== 'object') {
155
186
  errors.push('payload is required');
156
- }
157
- else {
187
+ } else {
158
188
  const accepted = t.accepted;
159
189
  const scheme = accepted?.scheme;
160
190
  const payload = t.payload;
@@ -164,13 +194,11 @@ export const validateX402TokenStructure = (token) => {
164
194
  }
165
195
  if (!payload.authorization || typeof payload.authorization !== 'object') {
166
196
  errors.push('authorization is required in payload');
167
- }
168
- else {
197
+ } else {
169
198
  const auth = payload.authorization;
170
199
  if (!auth.from || typeof auth.from !== 'string') {
171
200
  errors.push('from address is required in payload.authorization');
172
- }
173
- else if (!auth.from.startsWith('0x')) {
201
+ } else if (!auth.from.startsWith('0x')) {
174
202
  errors.push('from must be a valid hex address');
175
203
  }
176
204
  if (!auth.sessionKeysProvider || typeof auth.sessionKeysProvider !== 'string') {
@@ -180,8 +208,7 @@ export const validateX402TokenStructure = (token) => {
180
208
  errors.push('sessionKeys array is required in payload.authorization');
181
209
  }
182
210
  }
183
- }
184
- else if (scheme === 'nvm:card-delegation') {
211
+ } else if (scheme === 'nvm:card-delegation') {
185
212
  if (!payload.token || typeof payload.token !== 'string') {
186
213
  errors.push('token is required in payload for nvm:card-delegation');
187
214
  }
@@ -191,11 +218,16 @@ export const validateX402TokenStructure = (token) => {
191
218
  if (t.extensions === undefined) {
192
219
  errors.push('extensions is required (can be empty object)');
193
220
  }
194
- return { valid: errors.length === 0, errors };
221
+ return {
222
+ valid: errors.length === 0,
223
+ errors
224
+ };
195
225
  };
196
- export const b64EncodeX402AccessToken = (accessToken) => {
226
+ export const b64EncodeX402AccessToken = (accessToken)=>{
197
227
  return Buffer.from(JSON.stringify(accessToken)).toString('base64');
198
228
  };
199
- export const b64DecodeX402AccessToken = (encoded) => {
229
+ export const b64DecodeX402AccessToken = (encoded)=>{
200
230
  return JSON.parse(Buffer.from(encoded, 'base64').toString('utf-8'));
201
231
  };
232
+
233
+ //# sourceMappingURL=AgentX402AccessToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/models/AgentX402AccessToken.ts"],"sourcesContent":["import { keccak256, PublicClient, toBytes, TypedDataDefinition } from 'viem'\nimport { SmartAccount } from 'viem/account-abstraction'\n\n/**\n * x402 Resource information\n */\nexport type X402Resource = {\n url: string\n description?: string\n mimeType?: string\n}\n\n/**\n * Supported x402 payment schemes\n */\nexport type X402Scheme = 'nvm:erc4337' | 'nvm:card-delegation'\n\n/**\n * x402 Accepted scheme fields (common to all schemes)\n */\nexport type X402Accepted = {\n scheme: X402Scheme\n network: string\n planId?: string\n extra: {\n version: string\n agentId?: string\n httpVerb?: string\n }\n}\n\n/**\n * Payload specific to the nvm:erc4337 scheme\n */\nexport type X402Erc4337Payload = {\n signature: `0x${string}`\n authorization: {\n from: `0x${string}`\n sessionKeysProvider: string\n sessionKeys: { id: string; data: string }[]\n }\n}\n\n/**\n * Payload specific to the nvm:card-delegation scheme\n */\nexport type X402CardDelegationPayload = {\n token: string\n}\n\n/**\n * x402 Access Token aligned with x402 v2 spec\n *\n * Key changes from previous version:\n * - `subscriberAddress` moved to `payload.authorization.from`\n * - `planId` is now in `accepted` (optional — required for erc4337, optional for card-delegation)\n * - `agentId` moved to `accepted.extra.agentId` (optional)\n * - `scheme` and `network` moved to `accepted`\n * - Added `resource` and `extensions` for x402 v2 alignment\n */\nexport type AgentX402AccessToken = {\n x402Version: 2\n resource?: X402Resource\n accepted: X402Accepted\n payload: X402Erc4337Payload | X402CardDelegationPayload\n validUntil?: number\n extensions: Record<string, unknown>\n}\n\nexport type NeverminedTypedDataDomain = {\n name: 'Nevermined'\n version: '1'\n chainId: number\n verifyingContract: `0x${string}`\n}\n\nexport type NeverminedTypedData = {\n SessionKey: [{ name: 'id'; type: 'string' }, { name: 'data'; type: 'string' }]\n SessionKeys: [{ name: 'sessionKeys'; type: 'SessionKey[]' }]\n Authorization: [\n { name: 'from'; type: 'address' },\n { name: 'sessionKeysProvider'; type: 'string' },\n { name: 'sessionKeys'; type: 'SessionKey[]' },\n ]\n}\n\nexport const NeverminedTypedDataTypes: NeverminedTypedData = {\n SessionKey: [\n { name: 'id', type: 'string' },\n { name: 'data', type: 'string' },\n ],\n SessionKeys: [{ name: 'sessionKeys', type: 'SessionKey[]' }],\n Authorization: [\n { name: 'from', type: 'address' },\n { name: 'sessionKeysProvider', type: 'string' },\n { name: 'sessionKeys', type: 'SessionKey[]' },\n ],\n}\n\nexport type NeverminedTypedDataMessage = {\n from: `0x${string}`\n sessionKeysProvider: string\n sessionKeys: { id: string; data: string }[]\n}\n\n/**\n * Options for generating an x402 access token\n */\nexport type GenerateX402TokenOptions = {\n subscriber: SmartAccount\n orderSessionKey: string\n redeemSessionKey: string\n publicClient: PublicClient\n planId: string\n /** Scheme version (e.g., '1') - stored in accepted.extra.version */\n schemeVersion?: string\n agentId?: string\n resource?: X402Resource\n httpVerb?: string\n /** Token expiration timestamp in seconds (Unix epoch) */\n validUntil?: number\n}\n\n/**\n * Generate an x402 access token aligned with x402 v2 spec\n *\n * @param options - Token generation options\n * @returns x402 access token with EIP-712 signature\n */\nexport const generateAgentX402AccessToken = async (\n options: GenerateX402TokenOptions,\n): Promise<AgentX402AccessToken> => {\n const {\n subscriber,\n orderSessionKey,\n redeemSessionKey,\n publicClient,\n planId,\n schemeVersion = '1',\n agentId,\n resource,\n httpVerb,\n validUntil,\n } = options\n\n // hash the session keys\n const redeemSessionKeyHash = keccak256(toBytes(redeemSessionKey))\n const orderSessionKeyHash = keccak256(toBytes(orderSessionKey))\n\n // generate the message with `from` address\n const message: NeverminedTypedDataMessage = {\n from: subscriber.address,\n sessionKeysProvider: 'zerodev',\n sessionKeys: [\n {\n id: 'order',\n data: orderSessionKeyHash,\n },\n {\n id: 'redeem',\n data: redeemSessionKeyHash,\n },\n ],\n }\n\n const domain: NeverminedTypedDataDomain = {\n name: 'Nevermined',\n version: '1',\n chainId: publicClient.chain?.id as number,\n verifyingContract: subscriber.address,\n }\n\n // generate the eip712 data\n const eip712Data = {\n domain,\n\n types: NeverminedTypedDataTypes,\n primaryType: 'Authorization',\n message,\n } satisfies TypedDataDefinition<NeverminedTypedData, 'Authorization'>\n\n const signature = await subscriber.signTypedData(eip712Data)\n\n // Get network in CAIP-2 format (eip155:chainId)\n const chainId = publicClient.chain?.id\n const network = chainId ? `eip155:${chainId}` : (publicClient.chain?.name as string)\n\n return {\n x402Version: 2,\n ...(resource && { resource }),\n accepted: {\n scheme: 'nvm:erc4337',\n network,\n planId,\n extra: {\n version: schemeVersion,\n ...(agentId && { agentId }),\n ...(httpVerb && { httpVerb }),\n },\n },\n payload: {\n signature,\n authorization: message,\n },\n ...(validUntil !== undefined && { validUntil }),\n extensions: {},\n }\n}\n\n/**\n * Verify an x402 access token signature\n *\n * @param accessToken - The x402 access token to verify\n * @param publicClient - Viem public client\n * @returns true if signature is valid\n */\nexport const verifyAgentX402AccessToken = async (\n accessToken: AgentX402AccessToken,\n publicClient: PublicClient,\n): Promise<boolean> => {\n const erc4337Payload = accessToken.payload as X402Erc4337Payload\n // Extract subscriber address from payload.authorization.from\n const subscriberAddress = erc4337Payload.authorization.from\n\n const domain: NeverminedTypedDataDomain = {\n name: 'Nevermined',\n version: '1',\n chainId: publicClient.chain?.id as number,\n verifyingContract: subscriberAddress,\n }\n const { signature, authorization } = erc4337Payload\n const isValid = await publicClient.verifyTypedData({\n address: subscriberAddress,\n signature,\n types: NeverminedTypedDataTypes,\n domain,\n message: authorization,\n primaryType: 'Authorization',\n })\n return isValid\n}\n\n/**\n * Validation result for x402 token structure\n */\nexport type X402TokenValidationResult = {\n valid: boolean\n errors: string[]\n}\n\n/**\n * Validate the structure of an x402 access token\n *\n * @param token - The token to validate (unknown type for safety)\n * @returns Validation result with errors if any\n */\nconst SUPPORTED_SCHEMES: X402Scheme[] = ['nvm:erc4337', 'nvm:card-delegation']\n\nexport const validateX402TokenStructure = (token: unknown): X402TokenValidationResult => {\n const errors: string[] = []\n\n if (!token || typeof token !== 'object') {\n return { valid: false, errors: ['Token must be an object'] }\n }\n\n const t = token as Record<string, unknown>\n\n // Validate x402Version\n if (t.x402Version !== 2) {\n errors.push('x402Version must be 2')\n }\n\n // Validate accepted object\n if (!t.accepted || typeof t.accepted !== 'object') {\n errors.push('accepted is required')\n } else {\n const accepted = t.accepted as Record<string, unknown>\n const scheme = accepted.scheme as string\n\n if (!SUPPORTED_SCHEMES.includes(scheme as X402Scheme)) {\n errors.push(`scheme must be one of: ${SUPPORTED_SCHEMES.join(', ')}`)\n }\n\n if (!accepted.network || typeof accepted.network !== 'string') {\n errors.push('network is required in accepted')\n }\n\n // Validate extra\n if (!accepted.extra || typeof accepted.extra !== 'object') {\n errors.push('extra is required in accepted')\n } else {\n const extra = accepted.extra as Record<string, unknown>\n if (!extra.version || typeof extra.version !== 'string') {\n errors.push('version is required in accepted.extra')\n }\n }\n\n // Scheme-specific accepted validation\n if (scheme === 'nvm:erc4337') {\n if (!accepted.planId || typeof accepted.planId !== 'string') {\n errors.push('planId is required in accepted for nvm:erc4337')\n }\n }\n }\n\n // Validate payload\n if (!t.payload || typeof t.payload !== 'object') {\n errors.push('payload is required')\n } else {\n const accepted = t.accepted as Record<string, unknown> | undefined\n const scheme = accepted?.scheme as string | undefined\n const payload = t.payload as Record<string, unknown>\n\n if (scheme === 'nvm:erc4337') {\n if (!payload.signature || typeof payload.signature !== 'string') {\n errors.push('signature is required in payload')\n }\n\n if (!payload.authorization || typeof payload.authorization !== 'object') {\n errors.push('authorization is required in payload')\n } else {\n const auth = payload.authorization as Record<string, unknown>\n\n if (!auth.from || typeof auth.from !== 'string') {\n errors.push('from address is required in payload.authorization')\n } else if (!auth.from.startsWith('0x')) {\n errors.push('from must be a valid hex address')\n }\n\n if (!auth.sessionKeysProvider || typeof auth.sessionKeysProvider !== 'string') {\n errors.push('sessionKeysProvider is required in payload.authorization')\n }\n\n if (!Array.isArray(auth.sessionKeys)) {\n errors.push('sessionKeys array is required in payload.authorization')\n }\n }\n } else if (scheme === 'nvm:card-delegation') {\n if (!payload.token || typeof payload.token !== 'string') {\n errors.push('token is required in payload for nvm:card-delegation')\n }\n }\n }\n\n // Validate extensions (must be present, even if empty)\n if (t.extensions === undefined) {\n errors.push('extensions is required (can be empty object)')\n }\n\n return { valid: errors.length === 0, errors }\n}\n\nexport const b64EncodeX402AccessToken = (accessToken: AgentX402AccessToken): string => {\n return Buffer.from(JSON.stringify(accessToken)).toString('base64')\n}\n\nexport const b64DecodeX402AccessToken = (encoded: string): AgentX402AccessToken => {\n return JSON.parse(Buffer.from(encoded, 'base64').toString('utf-8'))\n}\n"],"names":["keccak256","toBytes","NeverminedTypedDataTypes","SessionKey","name","type","SessionKeys","Authorization","generateAgentX402AccessToken","options","subscriber","orderSessionKey","redeemSessionKey","publicClient","planId","schemeVersion","agentId","resource","httpVerb","validUntil","redeemSessionKeyHash","orderSessionKeyHash","message","from","address","sessionKeysProvider","sessionKeys","id","data","domain","version","chainId","chain","verifyingContract","eip712Data","types","primaryType","signature","signTypedData","network","x402Version","accepted","scheme","extra","payload","authorization","undefined","extensions","verifyAgentX402AccessToken","accessToken","erc4337Payload","subscriberAddress","isValid","verifyTypedData","SUPPORTED_SCHEMES","validateX402TokenStructure","token","errors","valid","t","push","includes","join","auth","startsWith","Array","isArray","length","b64EncodeX402AccessToken","Buffer","JSON","stringify","toString","b64DecodeX402AccessToken","encoded","parse"],"mappings":"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"}