@ledgerhq/context-module 0.0.0-multisig-20250910160951 → 0.0.0-multisig-20250918154034

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 (187) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/ContextModule.js +1 -1
  3. package/lib/cjs/src/ContextModule.js.map +1 -1
  4. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
  6. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  7. package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
  8. package/lib/cjs/src/DefaultContextModule.js +1 -1
  9. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  10. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  11. package/lib/cjs/src/DefaultContextModule.test.js.map +3 -3
  12. package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
  13. package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
  14. package/lib/cjs/src/di.js +1 -1
  15. package/lib/cjs/src/di.js.map +2 -2
  16. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  17. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  18. package/lib/cjs/src/index.js +1 -1
  19. package/lib/cjs/src/index.js.map +2 -2
  20. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js +1 -1
  21. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js.map +2 -2
  22. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js +1 -1
  23. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js.map +3 -3
  24. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +1 -1
  25. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  26. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  27. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  28. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
  29. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
  30. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
  31. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
  32. package/lib/cjs/src/proxy/data/ProxyDataSource.js +2 -0
  33. package/lib/cjs/src/proxy/data/ProxyDataSource.js.map +7 -0
  34. package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +2 -0
  35. package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js.map +7 -0
  36. package/lib/cjs/src/proxy/di/proxyModuleFactory.js +1 -1
  37. package/lib/cjs/src/proxy/di/proxyModuleFactory.js.map +3 -3
  38. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +2 -0
  39. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
  40. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js +1 -1
  41. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js.map +2 -2
  42. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js +1 -1
  43. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js.map +3 -3
  44. package/lib/cjs/src/proxy/model/ProxyDelegateCall.js +1 -1
  45. package/lib/cjs/src/proxy/model/ProxyDelegateCall.js.map +1 -1
  46. package/lib/cjs/src/shared/domain/ContextFieldLoader.js +1 -1
  47. package/lib/cjs/src/shared/domain/ContextFieldLoader.js.map +2 -2
  48. package/lib/cjs/src/shared/domain/ContextLoader.js +1 -1
  49. package/lib/cjs/src/shared/domain/ContextLoader.js.map +1 -1
  50. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js.map +1 -1
  51. package/lib/cjs/src/shared/model/TypedDataContext.js.map +1 -1
  52. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js +1 -1
  53. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js.map +3 -3
  54. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js +1 -1
  55. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js.map +3 -3
  56. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js +1 -1
  57. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js.map +2 -2
  58. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js +1 -1
  59. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js.map +3 -3
  60. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js +1 -1
  61. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js.map +3 -3
  62. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
  63. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +2 -2
  64. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +1 -1
  65. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +3 -3
  66. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  67. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +1 -1
  68. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  69. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  70. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  71. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  72. package/lib/esm/package.json +1 -1
  73. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  74. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  75. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  76. package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
  77. package/lib/esm/src/DefaultContextModule.js +1 -1
  78. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  79. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  80. package/lib/esm/src/DefaultContextModule.test.js.map +3 -3
  81. package/lib/esm/src/di.js +1 -1
  82. package/lib/esm/src/di.js.map +2 -2
  83. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  84. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  85. package/lib/esm/src/index.js +1 -1
  86. package/lib/esm/src/index.js.map +2 -2
  87. package/lib/esm/src/nft/domain/NftContextFieldLoader.js +1 -1
  88. package/lib/esm/src/nft/domain/NftContextFieldLoader.js.map +3 -3
  89. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js +1 -1
  90. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js.map +3 -3
  91. package/lib/esm/src/proxy/data/HttpProxyDataSource.js +1 -1
  92. package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  93. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  94. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  95. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
  96. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
  97. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
  98. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
  99. package/lib/esm/src/proxy/data/ProxyDataSource.js +1 -0
  100. package/lib/esm/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +1 -0
  101. package/lib/esm/src/proxy/data/dto/SafeProxyImplementationAddressDto.js.map +7 -0
  102. package/lib/esm/src/proxy/di/proxyModuleFactory.js +1 -1
  103. package/lib/esm/src/proxy/di/proxyModuleFactory.js.map +3 -3
  104. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +2 -0
  105. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
  106. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js +1 -1
  107. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js.map +3 -3
  108. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js +1 -1
  109. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js.map +3 -3
  110. package/lib/esm/src/shared/domain/ContextFieldLoader.js +1 -1
  111. package/lib/esm/src/shared/domain/ContextFieldLoader.js.map +2 -2
  112. package/lib/esm/src/shared/model/TypedDataClearSignContext.js.map +1 -1
  113. package/lib/esm/src/token/domain/TokenContextFieldLoader.js +1 -1
  114. package/lib/esm/src/token/domain/TokenContextFieldLoader.js.map +3 -3
  115. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js +1 -1
  116. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js.map +3 -3
  117. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js +1 -1
  118. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js.map +2 -2
  119. package/lib/esm/src/transaction/domain/TransactionContextLoader.js +1 -1
  120. package/lib/esm/src/transaction/domain/TransactionContextLoader.js.map +3 -3
  121. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js +1 -1
  122. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js.map +3 -3
  123. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
  124. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +3 -3
  125. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +1 -1
  126. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +3 -3
  127. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  128. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +1 -1
  129. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  130. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  131. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  132. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  133. package/lib/types/src/ContextModule.d.ts +1 -3
  134. package/lib/types/src/ContextModule.d.ts.map +1 -1
  135. package/lib/types/src/ContextModuleBuilder.d.ts +8 -1
  136. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  137. package/lib/types/src/DefaultContextModule.d.ts +2 -3
  138. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  139. package/lib/types/src/config/model/ContextModuleConfig.d.ts +7 -0
  140. package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
  141. package/lib/types/src/index.d.ts +38 -0
  142. package/lib/types/src/index.d.ts.map +1 -1
  143. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts +9 -4
  144. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts.map +1 -1
  145. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +2 -22
  146. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -1
  147. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +13 -0
  148. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -0
  149. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts +2 -0
  150. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts.map +1 -0
  151. package/lib/types/src/proxy/data/ProxyDataSource.d.ts +15 -0
  152. package/lib/types/src/proxy/data/ProxyDataSource.d.ts.map +1 -0
  153. package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts +8 -0
  154. package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts.map +1 -0
  155. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts +2 -1
  156. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts.map +1 -1
  157. package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts +2 -0
  158. package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts.map +1 -0
  159. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts +14 -5
  160. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts.map +1 -1
  161. package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts +1 -1
  162. package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts.map +1 -1
  163. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts +3 -4
  164. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts.map +1 -1
  165. package/lib/types/src/shared/domain/ContextLoader.d.ts +0 -2
  166. package/lib/types/src/shared/domain/ContextLoader.d.ts.map +1 -1
  167. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts +1 -1
  168. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts.map +1 -1
  169. package/lib/types/src/shared/model/TypedDataContext.d.ts +1 -1
  170. package/lib/types/src/shared/model/TypedDataContext.d.ts.map +1 -1
  171. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts +8 -4
  172. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts.map +1 -1
  173. package/lib/types/src/transaction/data/HttpTransactionDataSource.d.ts.map +1 -1
  174. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts +1 -1
  175. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts.map +1 -1
  176. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts +12 -4
  177. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts.map +1 -1
  178. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts +1 -1
  179. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts.map +1 -1
  180. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  181. package/package.json +5 -5
  182. package/lib/cjs/src/proxy/model/ProxyImplementationAddress.js +0 -2
  183. package/lib/cjs/src/proxy/model/ProxyImplementationAddress.js.map +0 -7
  184. package/lib/esm/src/proxy/model/ProxyImplementationAddress.js +0 -1
  185. package/lib/types/src/proxy/model/ProxyImplementationAddress.d.ts +0 -4
  186. package/lib/types/src/proxy/model/ProxyImplementationAddress.d.ts.map +0 -1
  187. /package/lib/esm/src/proxy/{model/ProxyImplementationAddress.js.map → data/ProxyDataSource.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ "use strict";var x=Object.create;var c=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var h=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var v=(o,e,s,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of m(e))!f.call(o,r)&&r!==s&&c(o,r,{get:()=>e[r],enumerable:!(t=y(e,r))||t.enumerable});return o};var l=(o,e,s)=>(s=o!=null?x(h(o)):{},v(e||!o||!o.__esModule?c(s,"default",{value:o,enumerable:!0}):s,o));var a=l(require("axios")),d=require("../../shared/constant/HttpHeaders"),p=l(require("../../../package.json")),u=require("./HttpSafeProxyDataSource");vi.mock("axios");const i={metadataServiceDomain:{url:"https://metadata.api.live.ledger.com"},originToken:"test-origin-token"};describe("HttpSafeProxyDataSource",()=>{let o;beforeAll(()=>{o=new u.HttpSafeProxyDataSource(i),vi.clearAllMocks()}),beforeEach(()=>{vi.clearAllMocks()});const e={proxyAddress:"0x1234567890123456789012345678901234567890",chainId:1,challenge:"test-challenge",calldata:"0xabcdef"},s={proxyAddress:"0x1234567890123456789012345678901234567890",implementationAddress:"0x9876543210987654321098765432109876543210",standard:"EIP-1967",signedDescriptor:"signed-descriptor-data",providedBy:"SAFE_GATEWAY"};describe("getProxyImplementationAddress",()=>{it("should call axios with correct URL, headers, and parameters",async()=>{const t=`context-module/${p.default.version}`,r=vi.fn(()=>Promise.resolve({data:s}));vi.spyOn(a.default,"request").mockImplementation(r),await o.getProxyImplementationAddress(e),expect(r).toHaveBeenCalledWith({method:"GET",url:`${i.metadataServiceDomain.url}/v3/ethereum/${e.chainId}/contract/proxy/${e.proxyAddress}`,headers:{[d.LEDGER_CLIENT_VERSION_HEADER]:t,[d.LEDGER_ORIGIN_TOKEN_HEADER]:i.originToken},params:{challenge:e.challenge,resolver:"SAFE_GATEWAY"}})}),it("should return Right with proxy implementation data when request succeeds with valid DTO",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:s});const t=await o.getProxyImplementationAddress(e);expect(t.isRight()).toBe(!0),expect(t.extract()).toEqual({implementationAddress:s.implementationAddress,signedDescriptor:s.signedDescriptor})}),it("should return Left with error when axios throws an error",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error("Network error"));const t=await o.getProxyImplementationAddress(e);expect(t.isLeft()).toBe(!0),expect(t.extract()).toEqual(new Error("[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation"))}),it("should return Left with error when response data is undefined",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:void 0});const t=await o.getProxyImplementationAddress(e);expect(t.isLeft()).toBe(!0),expect(t.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when response data is null",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:null});const t=await o.getProxyImplementationAddress(e);expect(t.isLeft()).toBe(!0),expect(t.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when proxyAddress is missing",async()=>{const{proxyAddress:t,...r}=s;vi.spyOn(a.default,"request").mockResolvedValue({data:r});const n=await o.getProxyImplementationAddress(e);expect(n.isLeft()).toBe(!0),expect(n.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when implementationAddress is missing",async()=>{const{implementationAddress:t,...r}=s;vi.spyOn(a.default,"request").mockResolvedValue({data:r});const n=await o.getProxyImplementationAddress(e);expect(n.isLeft()).toBe(!0),expect(n.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when standard is missing",async()=>{const{standard:t,...r}=s;vi.spyOn(a.default,"request").mockResolvedValue({data:r});const n=await o.getProxyImplementationAddress(e);expect(n.isLeft()).toBe(!0),expect(n.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when signedDescriptor is missing",async()=>{const{signedDescriptor:t,...r}=s;vi.spyOn(a.default,"request").mockResolvedValue({data:r});const n=await o.getProxyImplementationAddress(e);expect(n.isLeft()).toBe(!0),expect(n.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when providedBy is missing",async()=>{const{providedBy:t,...r}=s;vi.spyOn(a.default,"request").mockResolvedValue({data:r});const n=await o.getProxyImplementationAddress(e);expect(n.isLeft()).toBe(!0),expect(n.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when proxyAddress is not a string",async()=>{const t={...s,proxyAddress:123};vi.spyOn(a.default,"request").mockResolvedValue({data:t});const r=await o.getProxyImplementationAddress(e);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when implementationAddress is not a string",async()=>{const t={...s,implementationAddress:null};vi.spyOn(a.default,"request").mockResolvedValue({data:t});const r=await o.getProxyImplementationAddress(e);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when standard is not a string",async()=>{const t={...s,standard:[]};vi.spyOn(a.default,"request").mockResolvedValue({data:t});const r=await o.getProxyImplementationAddress(e);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when signedDescriptor is not a string",async()=>{const t={...s,signedDescriptor:{}};vi.spyOn(a.default,"request").mockResolvedValue({data:t});const r=await o.getProxyImplementationAddress(e);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when providedBy is not a string",async()=>{const t={...s,providedBy:!0};vi.spyOn(a.default,"request").mockResolvedValue({data:t});const r=await o.getProxyImplementationAddress(e);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when response is not an object",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:"not an object"});const t=await o.getProxyImplementationAddress(e);expect(t.isLeft()).toBe(!0),expect(t.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should return Left with error when response is null",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:null});const t=await o.getProxyImplementationAddress(e);expect(t.isLeft()).toBe(!0),expect(t.extract()).toEqual(new Error(`[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${e.proxyAddress} on chain ${e.chainId}`))}),it("should handle different chainId values correctly",async()=>{const t={...e,chainId:137};vi.spyOn(a.default,"request").mockResolvedValue({data:s});const r=await o.getProxyImplementationAddress(t);expect(r.isRight()).toBe(!0),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({url:`${i.metadataServiceDomain.url}/v3/ethereum/137/contract/proxy/${e.proxyAddress}`}))}),it("should handle different proxy addresses correctly",async()=>{const t="0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",r={...e,proxyAddress:t};vi.spyOn(a.default,"request").mockResolvedValue({data:s});const n=await o.getProxyImplementationAddress(r);expect(n.isRight()).toBe(!0),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({url:`${i.metadataServiceDomain.url}/v3/ethereum/${e.chainId}/contract/proxy/${t}`}))}),it("should pass challenge parameter correctly",async()=>{const t="custom-challenge-string",r={...e,challenge:t};vi.spyOn(a.default,"request").mockResolvedValue({data:s});const n=await o.getProxyImplementationAddress(r);expect(n.isRight()).toBe(!0),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:t,resolver:"SAFE_GATEWAY"}}))})})});
2
+ //# sourceMappingURL=HttpSafeProxyDataSource.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/proxy/data/HttpSafeProxyDataSource.test.ts"],
4
+ "sourcesContent": ["import axios from \"axios\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type SafeProxyImplementationAddressDto } from \"./dto/SafeProxyImplementationAddressDto\";\nimport { HttpSafeProxyDataSource } from \"./HttpSafeProxyDataSource\";\nimport { type ProxyDataSource } from \"./ProxyDataSource\";\n\nvi.mock(\"axios\");\n\nconst config = {\n metadataServiceDomain: {\n url: \"https://metadata.api.live.ledger.com\",\n },\n originToken: \"test-origin-token\",\n} as ContextModuleConfig;\n\ndescribe(\"HttpSafeProxyDataSource\", () => {\n let datasource: ProxyDataSource;\n\n beforeAll(() => {\n datasource = new HttpSafeProxyDataSource(config);\n vi.clearAllMocks();\n });\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n const validParams = {\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n challenge: \"test-challenge\",\n calldata: \"0xabcdef\",\n };\n\n const validDto: SafeProxyImplementationAddressDto = {\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n implementationAddress: \"0x9876543210987654321098765432109876543210\",\n standard: \"EIP-1967\",\n signedDescriptor: \"signed-descriptor-data\",\n providedBy: \"SAFE_GATEWAY\",\n };\n\n describe(\"getProxyImplementationAddress\", () => {\n it(\"should call axios with correct URL, headers, and parameters\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: validDto }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith({\n method: \"GET\",\n url: `${config.metadataServiceDomain.url}/v3/ethereum/${validParams.chainId}/contract/proxy/${validParams.proxyAddress}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: version,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n params: {\n challenge: validParams.challenge,\n resolver: \"SAFE_GATEWAY\",\n },\n });\n });\n\n it(\"should return Right with proxy implementation data when request succeeds with valid DTO\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(result.extract()).toEqual({\n implementationAddress: validDto.implementationAddress,\n signedDescriptor: validDto.signedDescriptor,\n });\n });\n\n it(\"should return Left with error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation\",\n ),\n );\n });\n\n it(\"should return Left with error when response data is undefined\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response data is null\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: null });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when proxyAddress is missing\", async () => {\n // GIVEN\n const { proxyAddress: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when implementationAddress is missing\", async () => {\n // GIVEN\n const { implementationAddress: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when standard is missing\", async () => {\n // GIVEN\n const { standard: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when signedDescriptor is missing\", async () => {\n // GIVEN\n const { signedDescriptor: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when providedBy is missing\", async () => {\n // GIVEN\n const { providedBy: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when proxyAddress is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, proxyAddress: 123 };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when implementationAddress is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, implementationAddress: null };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when standard is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, standard: [] };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when signedDescriptor is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, signedDescriptor: {} };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when providedBy is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, providedBy: true };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response is not an object\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: \"not an object\" });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response is null\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: null });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should handle different chainId values correctly\", async () => {\n // GIVEN\n const paramsWithDifferentChainId = { ...validParams, chainId: 137 };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithDifferentChainId,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: `${config.metadataServiceDomain.url}/v3/ethereum/137/contract/proxy/${validParams.proxyAddress}`,\n }),\n );\n });\n\n it(\"should handle different proxy addresses correctly\", async () => {\n // GIVEN\n const differentProxyAddress =\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n const paramsWithDifferentAddress = {\n ...validParams,\n proxyAddress: differentProxyAddress,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithDifferentAddress,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: `${config.metadataServiceDomain.url}/v3/ethereum/${validParams.chainId}/contract/proxy/${differentProxyAddress}`,\n }),\n );\n });\n\n it(\"should pass challenge parameter correctly\", async () => {\n // GIVEN\n const customChallenge = \"custom-challenge-string\";\n const paramsWithCustomChallenge = {\n ...validParams,\n challenge: customChallenge,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithCustomChallenge,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: customChallenge,\n resolver: \"SAFE_GATEWAY\",\n },\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "wdAAA,IAAAA,EAAkB,oBAGlBC,EAGO,yCACPC,EAAoB,iCAGpBC,EAAwC,qCAGxC,GAAG,KAAK,OAAO,EAEf,MAAMC,EAAS,CACb,sBAAuB,CACrB,IAAK,sCACP,EACA,YAAa,mBACf,EAEA,SAAS,0BAA2B,IAAM,CACxC,IAAIC,EAEJ,UAAU,IAAM,CACdA,EAAa,IAAI,0BAAwBD,CAAM,EAC/C,GAAG,cAAc,CACnB,CAAC,EAED,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,MAAME,EAAc,CAClB,aAAc,6CACd,QAAS,EACT,UAAW,iBACX,SAAU,UACZ,EAEMC,EAA8C,CAClD,aAAc,6CACd,sBAAuB,6CACvB,SAAU,WACV,iBAAkB,yBAClB,WAAY,cACd,EAEA,SAAS,gCAAiC,IAAM,CAC9C,GAAG,8DAA+D,SAAY,CAE5E,MAAMC,EAAU,kBAAkB,EAAAC,QAAQ,OAAO,GAC3CC,EAAa,GAAG,GAAG,IAAM,QAAQ,QAAQ,CAAE,KAAMH,CAAS,CAAC,CAAC,EAClE,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,mBAAmBD,CAAU,EAGxD,MAAML,EAAW,8BAA8BC,CAAW,EAG1D,OAAOI,CAAU,EAAE,qBAAqB,CACtC,OAAQ,MACR,IAAK,GAAGN,EAAO,sBAAsB,GAAG,gBAAgBE,EAAY,OAAO,mBAAmBA,EAAY,YAAY,GACtH,QAAS,CACP,CAAC,8BAA4B,EAAGE,EAChC,CAAC,4BAA0B,EAAGJ,EAAO,WACvC,EACA,OAAQ,CACN,UAAWE,EAAY,UACvB,SAAU,cACZ,CACF,CAAC,CACH,CAAC,EAED,GAAG,0FAA2F,SAAY,CAExG,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMJ,CAAS,CAAC,EAG/D,MAAMK,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,QAAQ,CAAC,EAAE,KAAK,EAAI,EAClC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QAAQ,CAC/B,sBAAuBL,EAAS,sBAChC,iBAAkBA,EAAS,gBAC7B,CAAC,CACH,CAAC,EAED,GAAG,2DAA4D,SAAY,CAEzE,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,IAAI,MAAM,eAAe,CAAC,EAGvE,MAAMC,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,oFACF,CACF,CACF,CAAC,EAED,GAAG,gEAAiE,SAAY,CAE9E,GAAG,MAAM,EAAAD,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAM,MAAU,CAAC,EAGhE,MAAMC,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,uEAAuEN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACjI,CACF,CACF,CAAC,EAED,GAAG,2DAA4D,SAAY,CAEzE,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAM,IAAK,CAAC,EAG3D,MAAMC,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,uEAAuEN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACjI,CACF,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAE3E,KAAM,CAAE,aAAcO,EAAG,GAAGC,CAAW,EAAIP,EAC3C,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,sEAAuE,SAAY,CAEpF,KAAM,CAAE,sBAAuBO,EAAG,GAAGC,CAAW,EAAIP,EACpD,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,yDAA0D,SAAY,CAEvE,KAAM,CAAE,SAAUO,EAAG,GAAGC,CAAW,EAAIP,EACvC,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,iEAAkE,SAAY,CAE/E,KAAM,CAAE,iBAAkBO,EAAG,GAAGC,CAAW,EAAIP,EAC/C,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,2DAA4D,SAAY,CAEzE,KAAM,CAAE,WAAYO,EAAG,GAAGC,CAAW,EAAIP,EACzC,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,kEAAmE,SAAY,CAEhF,MAAMQ,EAAa,CAAE,GAAGP,EAAU,aAAc,GAAI,EACpD,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,2EAA4E,SAAY,CAEzF,MAAMQ,EAAa,CAAE,GAAGP,EAAU,sBAAuB,IAAK,EAC9D,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,8DAA+D,SAAY,CAE5E,MAAMQ,EAAa,CAAE,GAAGP,EAAU,SAAU,CAAC,CAAE,EAC/C,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,sEAAuE,SAAY,CAEpF,MAAMQ,EAAa,CAAE,GAAGP,EAAU,iBAAkB,CAAC,CAAE,EACvD,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,gEAAiE,SAAY,CAE9E,MAAMQ,EAAa,CAAE,GAAGP,EAAU,WAAY,EAAK,EACnD,GAAG,MAAM,EAAAI,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMG,CAAW,CAAC,EAGjE,MAAMF,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,+DAAgE,SAAY,CAE7E,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAM,eAAgB,CAAC,EAGtE,MAAMC,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yFAAyFN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACnJ,CACF,CACF,CAAC,EAED,GAAG,sDAAuD,SAAY,CAEpE,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAM,IAAK,CAAC,EAG3D,MAAMC,EACJ,MAAMP,EAAW,8BAA8BC,CAAW,EAG5D,OAAOM,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,uEAAuEN,EAAY,YAAY,aAAaA,EAAY,OAAO,EACjI,CACF,CACF,CAAC,EAED,GAAG,mDAAoD,SAAY,CAEjE,MAAMS,EAA6B,CAAE,GAAGT,EAAa,QAAS,GAAI,EAClE,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMJ,CAAS,CAAC,EAG/D,MAAMK,EAAS,MAAMP,EAAW,8BAC9BU,CACF,EAGA,OAAOH,EAAO,QAAQ,CAAC,EAAE,KAAK,EAAI,EAClC,OAAO,EAAAD,QAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,IAAK,GAAGP,EAAO,sBAAsB,GAAG,mCAAmCE,EAAY,YAAY,EACrG,CAAC,CACH,CACF,CAAC,EAED,GAAG,oDAAqD,SAAY,CAElE,MAAMU,EACJ,6CACIC,EAA6B,CACjC,GAAGX,EACH,aAAcU,CAChB,EACA,GAAG,MAAM,EAAAL,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMJ,CAAS,CAAC,EAG/D,MAAMK,EAAS,MAAMP,EAAW,8BAC9BY,CACF,EAGA,OAAOL,EAAO,QAAQ,CAAC,EAAE,KAAK,EAAI,EAClC,OAAO,EAAAD,QAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,IAAK,GAAGP,EAAO,sBAAsB,GAAG,gBAAgBE,EAAY,OAAO,mBAAmBU,CAAqB,EACrH,CAAC,CACH,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1D,MAAME,EAAkB,0BAClBC,EAA4B,CAChC,GAAGb,EACH,UAAWY,CACb,EACA,GAAG,MAAM,EAAAP,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMJ,CAAS,CAAC,EAG/D,MAAMK,EAAS,MAAMP,EAAW,8BAC9Bc,CACF,EAGA,OAAOP,EAAO,QAAQ,CAAC,EAAE,KAAK,EAAI,EAClC,OAAO,EAAAD,QAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,OAAQ,CACN,UAAWO,EACX,SAAU,cACZ,CACF,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_axios", "import_HttpHeaders", "import_package", "import_HttpSafeProxyDataSource", "config", "datasource", "validParams", "validDto", "version", "PACKAGE", "requestSpy", "axios", "result", "_", "invalidDto", "paramsWithDifferentChainId", "differentProxyAddress", "paramsWithDifferentAddress", "customChallenge", "paramsWithCustomChallenge"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var d=(r,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of i(e))!m.call(r,t)&&t!==o&&n(r,t,{get:()=>e[t],enumerable:!(s=a(e,t))||s.enumerable});return r};var p=r=>d(n({},"__esModule",{value:!0}),r);var l={};module.exports=p(l);
2
+ //# sourceMappingURL=ProxyDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/proxy/data/ProxyDataSource.ts"],
4
+ "sourcesContent": ["import { type Either } from \"purify-ts\";\n\nexport type GetProxyImplementationAddressParam = {\n proxyAddress: string;\n chainId: number;\n challenge: string;\n calldata: string;\n};\n\nexport type ProxyImplementationAddress = {\n implementationAddress: string;\n signedDescriptor: string;\n};\n\nexport interface ProxyDataSource {\n getProxyImplementationAddress(\n params: GetProxyImplementationAddressParam,\n ): Promise<Either<Error, ProxyImplementationAddress>>;\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["ProxyDataSource_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var d=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var o=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var g=(s,r,i,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of o(r))!p.call(s,t)&&t!==i&&d(s,t,{get:()=>r[t],enumerable:!(e=n(r,t))||e.enumerable});return s};var a=s=>g(d({},"__esModule",{value:!0}),s);var m={};module.exports=a(m);
2
+ //# sourceMappingURL=SafeProxyImplementationAddressDto.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/proxy/data/dto/SafeProxyImplementationAddressDto.ts"],
4
+ "sourcesContent": ["export type SafeProxyImplementationAddressDto = {\n proxyAddress: string;\n implementationAddress: string;\n standard: string;\n signedDescriptor: string;\n providedBy: string;\n};\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["SafeProxyImplementationAddressDto_exports", "__toCommonJS"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var p=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var f=(o,r)=>{for(var e in r)p(o,e,{get:r[e],enumerable:!0})},l=(o,r,e,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of n(r))!c.call(o,t)&&t!==e&&p(o,t,{get:()=>r[t],enumerable:!(a=d(r,t))||a.enumerable});return o};var u=o=>l(p({},"__esModule",{value:!0}),o);var C={};f(C,{proxyModuleFactory:()=>P});module.exports=u(C);var m=require("inversify"),y=require("../../proxy/data/HttpProxyDataSource"),x=require("../../proxy/di/proxyTypes"),i=require("../../proxy/domain/ProxyContextFieldLoader");const P=()=>new m.ContainerModule(({bind:o})=>{o(x.proxyTypes.ProxyDataSource).to(y.HttpProxyDataSource),o(x.proxyTypes.ProxyContextFieldLoader).to(i.ProxyContextFieldLoader)});0&&(module.exports={proxyModuleFactory});
1
+ "use strict";var p=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var d=(r,o)=>{for(var e in o)p(r,e,{get:o[e],enumerable:!0})},l=(r,o,e,x)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of n(o))!c.call(r,t)&&t!==e&&p(r,t,{get:()=>o[t],enumerable:!(x=u(o,t))||x.enumerable});return r};var C=r=>l(p({},"__esModule",{value:!0}),r);var s={};d(s,{proxyModuleFactory:()=>P});module.exports=C(s);var m=require("inversify"),y=require("../../proxy/data/HttpProxyDataSource"),f=require("../../proxy/data/HttpSafeProxyDataSource"),a=require("../../proxy/di/proxyTypes"),i=require("../../proxy/domain/ProxyContextFieldLoader");const P=r=>new m.ContainerModule(({bind:o})=>{r?.datasource?.proxy==="safe"?o(a.proxyTypes.ProxyDataSource).to(f.HttpSafeProxyDataSource):o(a.proxyTypes.ProxyDataSource).to(y.HttpProxyDataSource),o(a.proxyTypes.ProxyContextFieldLoader).to(i.ProxyContextFieldLoader)});0&&(module.exports={proxyModuleFactory});
2
2
  //# sourceMappingURL=proxyModuleFactory.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/di/proxyModuleFactory.ts"],
4
- "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\n\nexport const proxyModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(proxyTypes.ProxyDataSource).to(HttpProxyDataSource);\n bind(proxyTypes.ProxyContextFieldLoader).to(ProxyContextFieldLoader);\n });\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAAoC,4CACpCC,EAA2B,iCAC3BC,EAAwC,kDAEjC,MAAML,EAAqB,IAChC,IAAI,kBAAgB,CAAC,CAAE,KAAAM,CAAK,IAAM,CAChCA,EAAK,aAAW,eAAe,EAAE,GAAG,qBAAmB,EACvDA,EAAK,aAAW,uBAAuB,EAAE,GAAG,yBAAuB,CACrE,CAAC",
6
- "names": ["proxyModuleFactory_exports", "__export", "proxyModuleFactory", "__toCommonJS", "import_inversify", "import_HttpProxyDataSource", "import_proxyTypes", "import_ProxyContextFieldLoader", "bind"]
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"@/proxy/data/HttpSafeProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\n\nexport const proxyModuleFactory = (config?: ContextModuleConfig) =>\n new ContainerModule(({ bind }) => {\n if (config?.datasource?.proxy === \"safe\") {\n bind(proxyTypes.ProxyDataSource).to(HttpSafeProxyDataSource);\n } else {\n bind(proxyTypes.ProxyDataSource).to(HttpProxyDataSource);\n }\n bind(proxyTypes.ProxyContextFieldLoader).to(ProxyContextFieldLoader);\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAGhCC,EAAoC,4CACpCC,EAAwC,gDACxCC,EAA2B,iCAC3BC,EAAwC,kDAEjC,MAAMN,EAAsBO,GACjC,IAAI,kBAAgB,CAAC,CAAE,KAAAC,CAAK,IAAM,CAC5BD,GAAQ,YAAY,QAAU,OAChCC,EAAK,aAAW,eAAe,EAAE,GAAG,yBAAuB,EAE3DA,EAAK,aAAW,eAAe,EAAE,GAAG,qBAAmB,EAEzDA,EAAK,aAAW,uBAAuB,EAAE,GAAG,yBAAuB,CACrE,CAAC",
6
+ "names": ["proxyModuleFactory_exports", "__export", "proxyModuleFactory", "__toCommonJS", "import_inversify", "import_HttpProxyDataSource", "import_HttpSafeProxyDataSource", "import_proxyTypes", "import_ProxyContextFieldLoader", "config", "bind"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var d=require("inversify"),s=require("../../config/di/configTypes"),u=require("../../pki/di/pkiTypes"),i=require("../../proxy/data/HttpProxyDataSource"),f=require("../../proxy/data/HttpSafeProxyDataSource"),c=require("../../proxy/domain/ProxyContextFieldLoader"),n=require("./proxyModuleFactory"),r=require("./proxyTypes");describe("proxyModuleFactory",()=>{let o;const x={metadataServiceDomain:{url:"https://metadata.api.live.ledger.com"},originToken:"test-origin-token"},l={loadCertificate:vi.fn()};beforeEach(()=>{o=new d.Container,o.bind(s.configTypes.Config).toConstantValue(x),o.bind(u.pkiTypes.PkiCertificateLoader).toConstantValue(l)}),describe("when config is undefined",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const a=(0,n.proxyModuleFactory)();o.load(a);const e=o.get(r.proxyTypes.ProxyDataSource);expect(e).toBeInstanceOf(i.HttpProxyDataSource)}),it("should bind ProxyContextFieldLoader",()=>{const a=(0,n.proxyModuleFactory)();o.load(a);const e=o.get(r.proxyTypes.ProxyContextFieldLoader);expect(e).toBeInstanceOf(c.ProxyContextFieldLoader)})}),describe("when config.datasource.proxy is 'safe'",()=>{it("should bind HttpSafeProxyDataSource as the ProxyDataSource",()=>{const e=(0,n.proxyModuleFactory)({datasource:{proxy:"safe"}});o.load(e);const t=o.get(r.proxyTypes.ProxyDataSource);expect(t).toBeInstanceOf(f.HttpSafeProxyDataSource)}),it("should bind ProxyContextFieldLoader",()=>{const e=(0,n.proxyModuleFactory)({datasource:{proxy:"safe"}});o.load(e);const t=o.get(r.proxyTypes.ProxyContextFieldLoader);expect(t).toBeInstanceOf(c.ProxyContextFieldLoader)})}),describe("when config.datasource.proxy is 'default'",()=>{it("should bind HttpProxyDataSource as the ProxyDataSource",()=>{const e=(0,n.proxyModuleFactory)({datasource:{proxy:"default"}});o.load(e);const t=o.get(r.proxyTypes.ProxyDataSource);expect(t).toBeInstanceOf(i.HttpProxyDataSource)})}),describe("when config.datasource is undefined",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const e=(0,n.proxyModuleFactory)({});o.load(e);const t=o.get(r.proxyTypes.ProxyDataSource);expect(t).toBeInstanceOf(i.HttpProxyDataSource)})}),describe("when config.datasource.proxy is an unexpected value",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const e=(0,n.proxyModuleFactory)({datasource:{proxy:"unknown"}});o.load(e);const t=o.get(r.proxyTypes.ProxyDataSource);expect(t).toBeInstanceOf(i.HttpProxyDataSource)})})});
2
+ //# sourceMappingURL=proxyModuleFactory.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/proxy/di/proxyModuleFactory.test.ts"],
4
+ "sourcesContent": ["import { Container } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { HttpProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"@/proxy/data/HttpSafeProxyDataSource\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\n\nimport { proxyModuleFactory } from \"./proxyModuleFactory\";\nimport { proxyTypes } from \"./proxyTypes\";\n\ndescribe(\"proxyModuleFactory\", () => {\n let container: Container;\n const mockConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.api.live.ledger.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleConfig;\n\n const mockPkiCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n beforeEach(() => {\n container = new Container();\n // Bind the config that the datasources depend on\n container.bind(configTypes.Config).toConstantValue(mockConfig);\n // Bind the PKI certificate loader that ProxyContextFieldLoader depends on\n container\n .bind(pkiTypes.PkiCertificateLoader)\n .toConstantValue(mockPkiCertificateLoader);\n });\n\n describe(\"when config is undefined\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const module = proxyModuleFactory();\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n\n it(\"should bind ProxyContextFieldLoader\", () => {\n const module = proxyModuleFactory();\n container.load(module);\n\n const proxyContextFieldLoader = container.get(\n proxyTypes.ProxyContextFieldLoader,\n );\n expect(proxyContextFieldLoader).toBeInstanceOf(ProxyContextFieldLoader);\n });\n });\n\n describe(\"when config.datasource.proxy is 'safe'\", () => {\n it(\"should bind HttpSafeProxyDataSource as the ProxyDataSource\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"safe\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpSafeProxyDataSource);\n });\n\n it(\"should bind ProxyContextFieldLoader\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"safe\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyContextFieldLoader = container.get(\n proxyTypes.ProxyContextFieldLoader,\n );\n expect(proxyContextFieldLoader).toBeInstanceOf(ProxyContextFieldLoader);\n });\n });\n\n describe(\"when config.datasource.proxy is 'default'\", () => {\n it(\"should bind HttpProxyDataSource as the ProxyDataSource\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"default\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"when config.datasource is undefined\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const config: ContextModuleConfig = {} as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"when config.datasource.proxy is an unexpected value\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"unknown\" as unknown as \"safe\" | \"default\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAA0B,qBAE1BC,EAA4B,mCAE5BC,EAAyB,6BAEzBC,EAAoC,4CACpCC,EAAwC,gDACxCC,EAAwC,kDAExCC,EAAmC,gCACnCC,EAA2B,wBAE3B,SAAS,qBAAsB,IAAM,CACnC,IAAIC,EACJ,MAAMC,EAAkC,CACtC,sBAAuB,CACrB,IAAK,sCACP,EACA,YAAa,mBACf,EAEMC,EAAiD,CACrD,gBAAiB,GAAG,GAAG,CACzB,EAEA,WAAW,IAAM,CACfF,EAAY,IAAI,YAEhBA,EAAU,KAAK,cAAY,MAAM,EAAE,gBAAgBC,CAAU,EAE7DD,EACG,KAAK,WAAS,oBAAoB,EAClC,gBAAgBE,CAAwB,CAC7C,CAAC,EAED,SAAS,2BAA4B,IAAM,CACzC,GAAG,iEAAkE,IAAM,CACzE,MAAMC,KAAS,sBAAmB,EAClCH,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAI,aAAW,eAAe,EAChE,OAAOI,CAAe,EAAE,eAAe,qBAAmB,CAC5D,CAAC,EAED,GAAG,sCAAuC,IAAM,CAC9C,MAAMD,KAAS,sBAAmB,EAClCH,EAAU,KAAKG,CAAM,EAErB,MAAME,EAA0BL,EAAU,IACxC,aAAW,uBACb,EACA,OAAOK,CAAuB,EAAE,eAAe,yBAAuB,CACxE,CAAC,CACH,CAAC,EAED,SAAS,yCAA0C,IAAM,CACvD,GAAG,6DAA8D,IAAM,CAOrE,MAAMF,KAAS,sBANqB,CAClC,WAAY,CACV,MAAO,MACT,CACF,CAEwC,EACxCH,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAI,aAAW,eAAe,EAChE,OAAOI,CAAe,EAAE,eAAe,yBAAuB,CAChE,CAAC,EAED,GAAG,sCAAuC,IAAM,CAO9C,MAAMD,KAAS,sBANqB,CAClC,WAAY,CACV,MAAO,MACT,CACF,CAEwC,EACxCH,EAAU,KAAKG,CAAM,EAErB,MAAME,EAA0BL,EAAU,IACxC,aAAW,uBACb,EACA,OAAOK,CAAuB,EAAE,eAAe,yBAAuB,CACxE,CAAC,CACH,CAAC,EAED,SAAS,4CAA6C,IAAM,CAC1D,GAAG,yDAA0D,IAAM,CAOjE,MAAMF,KAAS,sBANqB,CAClC,WAAY,CACV,MAAO,SACT,CACF,CAEwC,EACxCH,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAI,aAAW,eAAe,EAChE,OAAOI,CAAe,EAAE,eAAe,qBAAmB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,sCAAuC,IAAM,CACpD,GAAG,iEAAkE,IAAM,CAGzE,MAAMD,KAAS,sBAFqB,CAAC,CAEG,EACxCH,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAI,aAAW,eAAe,EAChE,OAAOI,CAAe,EAAE,eAAe,qBAAmB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,sDAAuD,IAAM,CACpE,GAAG,iEAAkE,IAAM,CAOzE,MAAMD,KAAS,sBANqB,CAClC,WAAY,CACV,MAAO,SACT,CACF,CAEwC,EACxCH,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAI,aAAW,eAAe,EAChE,OAAOI,CAAe,EAAE,eAAe,qBAAmB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_inversify", "import_configTypes", "import_pkiTypes", "import_HttpProxyDataSource", "import_HttpSafeProxyDataSource", "import_ProxyContextFieldLoader", "import_proxyModuleFactory", "import_proxyTypes", "container", "mockConfig", "mockPkiCertificateLoader", "module", "proxyDataSource", "proxyContextFieldLoader"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var P=(a,e)=>{for(var o in e)n(a,o,{get:e[o],enumerable:!0})},_=(a,e,o,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of D(e))!E.call(a,t)&&t!==o&&n(a,t,{get:()=>e[t],enumerable:!(r=y(e,t))||r.enumerable});return a};var A=a=>_(n({},"__esModule",{value:!0}),a),m=(a,e,o,r)=>{for(var t=r>1?void 0:r?y(e,o):e,c=a.length-1,p;c>=0;c--)(p=a[c])&&(t=(r?p(e,o,t):p(t))||t);return r&&t&&n(e,o,t),t},d=(a,e)=>(o,r)=>e(o,r,a);var T={};P(T,{ProxyContextFieldLoader:()=>i});module.exports=A(T);var l=require("inversify"),s=require("../../pki/di/pkiTypes"),L=require("../../pki/model/KeyId"),x=require("../../pki/model/KeyUsage"),f=require("../../proxy/di/proxyTypes"),g=require("../../shared/domain/ContextFieldLoader"),C=require("../../shared/model/ClearSignContext");let i=class{constructor(e,o){this._proxyDataSource=e;this._certificateLoader=o}kind=g.ContextFieldLoaderKind.PROXY_DELEGATE_CALL;async loadField(e){return(await this._proxyDataSource.getProxyDelegateCall({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge})).caseOf({Left:r=>Promise.resolve({type:C.ClearSignContextType.ERROR,error:r}),Right:async({signedDescriptor:r})=>{const t=await this._certificateLoader.loadCertificate({keyId:L.KeyId.CalCalldataKey,keyUsage:x.KeyUsage.Calldata,targetDevice:e.deviceModelId});return{type:C.ClearSignContextType.PROXY_DELEGATE_CALL,payload:r,certificate:t}}})}};i=m([(0,l.injectable)(),d(0,(0,l.inject)(f.proxyTypes.ProxyDataSource)),d(1,(0,l.inject)(s.pkiTypes.PkiCertificateLoader))],i);0&&(module.exports={ProxyContextFieldLoader});
1
+ "use strict";var l=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var D=(r,e)=>{for(var o in e)l(r,o,{get:e[o],enumerable:!0})},h=(r,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of L(e))!P.call(r,t)&&t!==o&&l(r,t,{get:()=>e[t],enumerable:!(a=s(e,t))||a.enumerable});return r};var A=r=>h(l({},"__esModule",{value:!0}),r),m=(r,e,o,a)=>{for(var t=a>1?void 0:a?s(e,o):e,c=r.length-1,d;c>=0;c--)(d=r[c])&&(t=(a?d(e,o,t):d(t))||t);return a&&t&&l(e,o,t),t},p=(r,e)=>(o,a)=>e(o,a,r);var f={};D(f,{ProxyContextFieldLoader:()=>i});module.exports=A(f);var n=require("inversify"),C=require("../../pki/di/pkiTypes"),x=require("../../pki/model/KeyId"),g=require("../../pki/model/KeyUsage"),u=require("../../proxy/di/proxyTypes"),I=require("../../shared/domain/ContextFieldLoader"),y=require("../../shared/model/ClearSignContext");let i=class{constructor(e,o){this._proxyDataSource=e;this._certificateLoader=o}canHandle(e){return typeof e=="object"&&e!==null&&"kind"in e&&e.kind===I.ContextFieldLoaderKind.PROXY_DELEGATE_CALL&&"chainId"in e&&"proxyAddress"in e&&"calldata"in e&&"challenge"in e&&"deviceModelId"in e}async loadField(e){return(await this._proxyDataSource.getProxyImplementationAddress({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge})).caseOf({Left:a=>Promise.resolve({type:y.ClearSignContextType.ERROR,error:a}),Right:async({signedDescriptor:a})=>{const t=await this._certificateLoader.loadCertificate({keyId:x.KeyId.CalCalldataKey,keyUsage:g.KeyUsage.Calldata,targetDevice:e.deviceModelId});return{type:y.ClearSignContextType.PROXY_DELEGATE_CALL,payload:a,certificate:t}}})}};i=m([(0,n.injectable)(),p(0,(0,n.inject)(u.proxyTypes.ProxyDataSource)),p(1,(0,n.inject)(C.pkiTypes.PkiCertificateLoader))],i);0&&(module.exports={ProxyContextFieldLoader});
2
2
  //# sourceMappingURL=ProxyContextFieldLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/domain/ProxyContextFieldLoader.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type ProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { type ProxyDelegateCall } from \"@/proxy/model/ProxyDelegateCall\";\nimport {\n type ContextFieldLoader,\n ContextFieldLoaderKind,\n} from \"@/shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\n\n@injectable()\nexport class ProxyContextFieldLoader\n implements ContextFieldLoader<ContextFieldLoaderKind.PROXY_DELEGATE_CALL>\n{\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL =\n ContextFieldLoaderKind.PROXY_DELEGATE_CALL;\n\n constructor(\n @inject(proxyTypes.ProxyDataSource)\n private _proxyDataSource: ProxyDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n ) {}\n\n async loadField(\n field: TransactionFieldContext<ContextFieldLoaderKind.PROXY_DELEGATE_CALL>,\n ): Promise<ClearSignContext> {\n const proxyDelegateCall = await this._proxyDataSource.getProxyDelegateCall({\n calldata: field.calldata,\n proxyAddress: field.proxyAddress,\n chainId: field.chainId,\n challenge: field.challenge,\n });\n\n return proxyDelegateCall.caseOf<Promise<ClearSignContext>>({\n Left: (error) =>\n Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: error,\n }),\n Right: async ({ signedDescriptor }: ProxyDelegateCall) => {\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: field.deviceModelId,\n });\n\n return {\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: signedDescriptor,\n certificate,\n };\n },\n });\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,qBAEnCC,EAAyB,6BAEzBC,EAAsB,6BACtBC,EAAyB,gCAEzBC,EAA2B,iCAE3BC,EAGO,8CACPC,EAGO,2CAIA,IAAMC,EAAN,KAEP,CAIE,YAEUC,EAEAC,EACR,CAHQ,sBAAAD,EAEA,wBAAAC,CACP,CARH,KACE,yBAAuB,oBASzB,MAAM,UACJC,EAC2B,CAQ3B,OAP0B,MAAM,KAAK,iBAAiB,qBAAqB,CACzE,SAAUA,EAAM,SAChB,aAAcA,EAAM,aACpB,QAASA,EAAM,QACf,UAAWA,EAAM,SACnB,CAAC,GAEwB,OAAkC,CACzD,KAAOC,GACL,QAAQ,QAAQ,CACd,KAAM,uBAAqB,MAC3B,MAAOA,CACT,CAAC,EACH,MAAO,MAAO,CAAE,iBAAAC,CAAiB,IAAyB,CACxD,MAAMC,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAO,QAAM,eACb,SAAU,WAAS,SACnB,aAAcH,EAAM,aACtB,CAAC,EAED,MAAO,CACL,KAAM,uBAAqB,oBAC3B,QAASE,EACT,YAAAC,CACF,CACF,CACF,CAAC,CACH,CACF,EA5CaN,EAANO,EAAA,IADN,cAAW,EAQPC,EAAA,eAAO,aAAW,eAAe,GAEjCA,EAAA,eAAO,WAAS,oBAAoB,IAT5BR",
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { type ProxyDelegateCall } from \"@/proxy/model/ProxyDelegateCall\";\nimport {\n type ContextFieldLoader,\n ContextFieldLoaderKind,\n} from \"@/shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\ntype ProxyFieldInput = {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL;\n chainId: number;\n proxyAddress: string;\n calldata: string;\n challenge: string;\n deviceModelId: DeviceModelId;\n};\n\n@injectable()\nexport class ProxyContextFieldLoader\n implements ContextFieldLoader<ProxyFieldInput>\n{\n constructor(\n @inject(proxyTypes.ProxyDataSource)\n private _proxyDataSource: ProxyDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n ) {}\n\n canHandle(field: unknown): field is ProxyFieldInput {\n return (\n typeof field === \"object\" &&\n field !== null &&\n \"kind\" in field &&\n field.kind === ContextFieldLoaderKind.PROXY_DELEGATE_CALL &&\n \"chainId\" in field &&\n \"proxyAddress\" in field &&\n \"calldata\" in field &&\n \"challenge\" in field &&\n \"deviceModelId\" in field\n );\n }\n\n async loadField(field: ProxyFieldInput): Promise<ClearSignContext> {\n const proxyDelegateCall =\n await this._proxyDataSource.getProxyImplementationAddress({\n calldata: field.calldata,\n proxyAddress: field.proxyAddress,\n chainId: field.chainId,\n challenge: field.challenge,\n });\n\n return proxyDelegateCall.caseOf<Promise<ClearSignContext>>({\n Left: (error) =>\n Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: error,\n }),\n Right: async ({ signedDescriptor }: ProxyDelegateCall) => {\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: field.deviceModelId,\n });\n\n return {\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: signedDescriptor,\n certificate,\n };\n },\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBAEnCC,EAAyB,6BAEzBC,EAAsB,6BACtBC,EAAyB,gCAEzBC,EAA2B,iCAE3BC,EAGO,8CACPC,EAGO,2CAYA,IAAMC,EAAN,KAEP,CACE,YAEUC,EAEAC,EACR,CAHQ,sBAAAD,EAEA,wBAAAC,CACP,CAEH,UAAUC,EAA0C,CAClD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,SAAUA,GACVA,EAAM,OAAS,yBAAuB,qBACtC,YAAaA,GACb,iBAAkBA,GAClB,aAAcA,GACd,cAAeA,GACf,kBAAmBA,CAEvB,CAEA,MAAM,UAAUA,EAAmD,CASjE,OAPE,MAAM,KAAK,iBAAiB,8BAA8B,CACxD,SAAUA,EAAM,SAChB,aAAcA,EAAM,aACpB,QAASA,EAAM,QACf,UAAWA,EAAM,SACnB,CAAC,GAEsB,OAAkC,CACzD,KAAOC,GACL,QAAQ,QAAQ,CACd,KAAM,uBAAqB,MAC3B,MAAOA,CACT,CAAC,EACH,MAAO,MAAO,CAAE,iBAAAC,CAAiB,IAAyB,CACxD,MAAMC,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAO,QAAM,eACb,SAAU,WAAS,SACnB,aAAcH,EAAM,aACtB,CAAC,EAED,MAAO,CACL,KAAM,uBAAqB,oBAC3B,QAASE,EACT,YAAAC,CACF,CACF,CACF,CAAC,CACH,CACF,EAtDaN,EAANO,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,aAAW,eAAe,GAEjCA,EAAA,eAAO,WAAS,oBAAoB,IAN5BR",
6
6
  "names": ["ProxyContextFieldLoader_exports", "__export", "ProxyContextFieldLoader", "__toCommonJS", "import_inversify", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_proxyTypes", "import_ContextFieldLoader", "import_ClearSignContext", "ProxyContextFieldLoader", "_proxyDataSource", "_certificateLoader", "field", "error", "signedDescriptor", "certificate", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var s=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),y=require("../../pki/model/KeyId"),p=require("../../pki/model/KeyUsage"),C=require("../../proxy/domain/ProxyContextFieldLoader"),x=require("../../shared/domain/ContextFieldLoader"),n=require("../../shared/model/ClearSignContext");describe("ProxyContextFieldLoader",()=>{const t={getProxyDelegateCall:vi.fn(),getProxyImplementationAddress:vi.fn()},l={loadCertificate:vi.fn()},d=new C.ProxyContextFieldLoader(t,l),e={kind:x.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x1234567890abcdef",calldata:"0xabcdef1234567890",challenge:"test-challenge",deviceModelId:s.DeviceModelId.STAX},o={delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"},c={keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])};beforeEach(()=>{vi.resetAllMocks()}),describe("constructor",()=>{it("should initialize with correct kind",()=>{expect(d.kind).toBe(x.ContextFieldLoaderKind.PROXY_DELEGATE_CALL)})}),describe("loadField",()=>{it("should return error context when proxy data source fails",async()=>{const a=new Error("Proxy data source error");vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Left)(a));const i=await d.loadField(e);expect(t.getProxyDelegateCall).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(i).toEqual({type:n.ClearSignContextType.ERROR,error:a}),expect(l.loadCertificate).not.toHaveBeenCalled()}),it("should return proxy delegate call context when successful",async()=>{vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Right)(o)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const a=await d.loadField(e);expect(t.getProxyDelegateCall).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(l.loadCertificate).toHaveBeenCalledWith({keyId:y.KeyId.CalCalldataKey,keyUsage:p.KeyUsage.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:n.ClearSignContextType.PROXY_DELEGATE_CALL,payload:o.signedDescriptor,certificate:c})}),it("should return proxy delegate call context with undefined certificate when certificate loading returns undefined",async()=>{vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Right)(o)),vi.spyOn(l,"loadCertificate").mockResolvedValue(void 0);const a=await d.loadField(e);expect(t.getProxyDelegateCall).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(l.loadCertificate).toHaveBeenCalledWith({keyId:y.KeyId.CalCalldataKey,keyUsage:p.KeyUsage.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:n.ClearSignContextType.PROXY_DELEGATE_CALL,payload:o.signedDescriptor,certificate:void 0})}),it("should handle different device model IDs correctly",async()=>{const a={...e,deviceModelId:s.DeviceModelId.NANO_X};vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Right)(o)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const i=await d.loadField(a);expect(l.loadCertificate).toHaveBeenCalledWith({keyId:y.KeyId.CalCalldataKey,keyUsage:p.KeyUsage.Calldata,targetDevice:s.DeviceModelId.NANO_X}),expect(i).toEqual({type:n.ClearSignContextType.PROXY_DELEGATE_CALL,payload:o.signedDescriptor,certificate:c})}),it("should handle different chain IDs and addresses correctly",async()=>{const a={...e,chainId:137,proxyAddress:"0xdeadbeef",calldata:"0xcafebabe",challenge:"custom-challenge"};vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Right)(o)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const i=await d.loadField(a);expect(t.getProxyDelegateCall).toHaveBeenCalledWith({calldata:"0xcafebabe",proxyAddress:"0xdeadbeef",chainId:137,challenge:"custom-challenge"}),expect(i).toEqual({type:n.ClearSignContextType.PROXY_DELEGATE_CALL,payload:o.signedDescriptor,certificate:c})}),it("should handle certificate loading failure gracefully",async()=>{vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Right)(o)),vi.spyOn(l,"loadCertificate").mockRejectedValue(new Error("Certificate loading failed")),await expect(d.loadField(e)).rejects.toThrow("Certificate loading failed"),expect(t.getProxyDelegateCall).toHaveBeenCalled(),expect(l.loadCertificate).toHaveBeenCalled()}),it("should preserve error message from proxy data source",async()=>{const a=new Error("Network timeout error");vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Left)(a));const i=await d.loadField(e);expect(i).toEqual({type:n.ClearSignContextType.ERROR,error:a})}),it("should handle empty signed descriptor",async()=>{const a={...o,signedDescriptor:""};vi.spyOn(t,"getProxyDelegateCall").mockResolvedValue((0,r.Right)(a)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const i=await d.loadField(e);expect(i).toEqual({type:n.ClearSignContextType.PROXY_DELEGATE_CALL,payload:"",certificate:c})})})});
1
+ "use strict";var o=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),y=require("../../pki/model/KeyId"),m=require("../../pki/model/KeyUsage"),x=require("../../proxy/domain/ProxyContextFieldLoader"),n=require("../../shared/domain/ContextFieldLoader"),p=require("../../shared/model/ClearSignContext");describe("ProxyContextFieldLoader",()=>{const t={getProxyImplementationAddress:vi.fn()},d={loadCertificate:vi.fn()},i=new x.ProxyContextFieldLoader(t,d),e={kind:n.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x1234567890abcdef",calldata:"0xabcdef1234567890",challenge:"test-challenge",deviceModelId:o.DeviceModelId.STAX},r={implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0"},s={keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])};beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid proxy field",()=>{const a={kind:n.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x1234567890abcdef",calldata:"0xabcdef1234567890",challenge:"test-challenge",deviceModelId:o.DeviceModelId.STAX};expect(i.canHandle(a)).toBe(!0)}),describe("should return false for invalid fields",()=>{const a=[{name:"null",value:null},{name:"undefined",value:void 0},{name:"string",value:"invalid"},{name:"number",value:123},{name:"boolean",value:!0},{name:"array",value:[]},{name:"empty object",value:{}},{name:"object missing kind",value:{chainId:1,proxyAddress:"0x123",calldata:"0xabc",challenge:"test",deviceModelId:o.DeviceModelId.STAX}},{name:"object missing chainId",value:{kind:n.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,proxyAddress:"0x123",calldata:"0xabc",challenge:"test",deviceModelId:o.DeviceModelId.STAX}},{name:"object missing proxyAddress",value:{kind:n.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,chainId:1,calldata:"0xabc",challenge:"test",deviceModelId:o.DeviceModelId.STAX}},{name:"object missing calldata",value:{kind:n.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x123",challenge:"test",deviceModelId:o.DeviceModelId.STAX}},{name:"object missing challenge",value:{kind:n.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x123",calldata:"0xabc",deviceModelId:o.DeviceModelId.STAX}},{name:"object missing deviceModelId",value:{kind:n.ContextFieldLoaderKind.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x123",calldata:"0xabc",challenge:"test"}},{name:"object with wrong kind",value:{kind:n.ContextFieldLoaderKind.TOKEN,chainId:1,proxyAddress:"0x123",calldata:"0xabc",challenge:"test",deviceModelId:o.DeviceModelId.STAX}}];test.each(a)("$name",({value:l})=>{expect(i.canHandle(l)).toBe(!1)})})}),describe("loadField",()=>{it("should return error context when proxy data source fails",async()=>{const a=new Error("Proxy data source error");vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Left)(a));const l=await i.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(l).toEqual({type:p.ClearSignContextType.ERROR,error:a}),expect(d.loadCertificate).not.toHaveBeenCalled()}),it("should return proxy delegate call context when successful",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Right)(r)),vi.spyOn(d,"loadCertificate").mockResolvedValue(s);const a=await i.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(d.loadCertificate).toHaveBeenCalledWith({keyId:y.KeyId.CalCalldataKey,keyUsage:m.KeyUsage.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:p.ClearSignContextType.PROXY_DELEGATE_CALL,payload:r.signedDescriptor,certificate:s})}),it("should return proxy delegate call context with undefined certificate when certificate loading returns undefined",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Right)(r)),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await i.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(d.loadCertificate).toHaveBeenCalledWith({keyId:y.KeyId.CalCalldataKey,keyUsage:m.KeyUsage.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:p.ClearSignContextType.PROXY_DELEGATE_CALL,payload:r.signedDescriptor,certificate:void 0})}),it("should handle different device model IDs correctly",async()=>{const a={...e,deviceModelId:o.DeviceModelId.NANO_X};vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Right)(r)),vi.spyOn(d,"loadCertificate").mockResolvedValue(s);const l=await i.loadField(a);expect(d.loadCertificate).toHaveBeenCalledWith({keyId:y.KeyId.CalCalldataKey,keyUsage:m.KeyUsage.Calldata,targetDevice:o.DeviceModelId.NANO_X}),expect(l).toEqual({type:p.ClearSignContextType.PROXY_DELEGATE_CALL,payload:r.signedDescriptor,certificate:s})}),it("should handle different chain IDs and addresses correctly",async()=>{const a={...e,chainId:137,proxyAddress:"0xdeadbeef",calldata:"0xcafebabe",challenge:"custom-challenge"};vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Right)(r)),vi.spyOn(d,"loadCertificate").mockResolvedValue(s);const l=await i.loadField(a);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:"0xcafebabe",proxyAddress:"0xdeadbeef",chainId:137,challenge:"custom-challenge"}),expect(l).toEqual({type:p.ClearSignContextType.PROXY_DELEGATE_CALL,payload:r.signedDescriptor,certificate:s})}),it("should handle certificate loading failure gracefully",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Right)(r)),vi.spyOn(d,"loadCertificate").mockRejectedValue(new Error("Certificate loading failed")),await expect(i.loadField(e)).rejects.toThrow("Certificate loading failed"),expect(t.getProxyImplementationAddress).toHaveBeenCalled(),expect(d.loadCertificate).toHaveBeenCalled()}),it("should preserve error message from proxy data source",async()=>{const a=new Error("Network timeout error");vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Left)(a));const l=await i.loadField(e);expect(l).toEqual({type:p.ClearSignContextType.ERROR,error:a})}),it("should handle empty signed descriptor",async()=>{const a={...r,signedDescriptor:""};vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue((0,c.Right)(a)),vi.spyOn(d,"loadCertificate").mockResolvedValue(s);const l=await i.loadField(e);expect(l).toEqual({type:p.ClearSignContextType.PROXY_DELEGATE_CALL,payload:"",certificate:s})})})});
2
2
  //# sourceMappingURL=ProxyContextFieldLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/domain/ProxyContextFieldLoader.test.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { type ProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\nimport { type ProxyDelegateCall } from \"@/proxy/model/ProxyDelegateCall\";\nimport { ContextFieldLoaderKind } from \"@/shared/domain/ContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\n\ndescribe(\"ProxyContextFieldLoader\", () => {\n const mockProxyDataSource: ProxyDataSource = {\n getProxyDelegateCall: vi.fn(),\n getProxyImplementationAddress: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const proxyContextFieldLoader = new ProxyContextFieldLoader(\n mockProxyDataSource,\n mockCertificateLoader,\n );\n\n const mockTransactionField: TransactionFieldContext<ContextFieldLoaderKind.PROXY_DELEGATE_CALL> =\n {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n chainId: 1,\n proxyAddress: \"0x1234567890abcdef\",\n calldata: \"0xabcdef1234567890\",\n challenge: \"test-challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const mockProxyDelegateCall: ProxyDelegateCall = {\n delegateAddresses: [\"0x987654321fedcba0\"],\n signedDescriptor: \"0x123456789abcdef0\",\n };\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"constructor\", () => {\n it(\"should initialize with correct kind\", () => {\n // THEN\n expect(proxyContextFieldLoader.kind).toBe(\n ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n );\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when proxy data source fails\", async () => {\n // GIVEN\n const error = new Error(\"Proxy data source error\");\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockProxyDataSource.getProxyDelegateCall).toHaveBeenCalledWith({\n calldata: mockTransactionField.calldata,\n proxyAddress: mockTransactionField.proxyAddress,\n chainId: mockTransactionField.chainId,\n challenge: mockTransactionField.challenge,\n });\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: error,\n });\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n });\n\n it(\"should return proxy delegate call context when successful\", async () => {\n // GIVEN\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Right(mockProxyDelegateCall),\n );\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockProxyDataSource.getProxyDelegateCall).toHaveBeenCalledWith({\n calldata: mockTransactionField.calldata,\n proxyAddress: mockTransactionField.proxyAddress,\n chainId: mockTransactionField.chainId,\n challenge: mockTransactionField.challenge,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: mockTransactionField.deviceModelId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: mockCertificate,\n });\n });\n\n it(\"should return proxy delegate call context with undefined certificate when certificate loading returns undefined\", async () => {\n // GIVEN\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Right(mockProxyDelegateCall),\n );\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockProxyDataSource.getProxyDelegateCall).toHaveBeenCalledWith({\n calldata: mockTransactionField.calldata,\n proxyAddress: mockTransactionField.proxyAddress,\n chainId: mockTransactionField.chainId,\n challenge: mockTransactionField.challenge,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: mockTransactionField.deviceModelId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: undefined,\n });\n });\n\n it(\"should handle different device model IDs correctly\", async () => {\n // GIVEN\n const nanoXField = {\n ...mockTransactionField,\n deviceModelId: DeviceModelId.NANO_X,\n };\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Right(mockProxyDelegateCall),\n );\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result = await proxyContextFieldLoader.loadField(nanoXField);\n\n // THEN\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: DeviceModelId.NANO_X,\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: mockCertificate,\n });\n });\n\n it(\"should handle different chain IDs and addresses correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n chainId: 137,\n proxyAddress: \"0xdeadbeef\",\n calldata: \"0xcafebabe\",\n challenge: \"custom-challenge\",\n };\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Right(mockProxyDelegateCall),\n );\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result = await proxyContextFieldLoader.loadField(customField);\n\n // THEN\n expect(mockProxyDataSource.getProxyDelegateCall).toHaveBeenCalledWith({\n calldata: \"0xcafebabe\",\n proxyAddress: \"0xdeadbeef\",\n chainId: 137,\n challenge: \"custom-challenge\",\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: mockCertificate,\n });\n });\n\n it(\"should handle certificate loading failure gracefully\", async () => {\n // GIVEN\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Right(mockProxyDelegateCall),\n );\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n new Error(\"Certificate loading failed\"),\n );\n\n // WHEN & THEN\n await expect(\n proxyContextFieldLoader.loadField(mockTransactionField),\n ).rejects.toThrow(\"Certificate loading failed\");\n\n expect(mockProxyDataSource.getProxyDelegateCall).toHaveBeenCalled();\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalled();\n });\n\n it(\"should preserve error message from proxy data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Left(specificError),\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty signed descriptor\", async () => {\n // GIVEN\n const proxyCallWithEmptyDescriptor = {\n ...mockProxyDelegateCall,\n signedDescriptor: \"\",\n };\n vi.spyOn(mockProxyDataSource, \"getProxyDelegateCall\").mockResolvedValue(\n Right(proxyCallWithEmptyDescriptor),\n );\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: \"\",\n certificate: mockCertificate,\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_KeyId", "import_KeyUsage", "import_ProxyContextFieldLoader", "import_ContextFieldLoader", "import_ClearSignContext", "mockProxyDataSource", "mockCertificateLoader", "proxyContextFieldLoader", "mockTransactionField", "mockProxyDelegateCall", "mockCertificate", "error", "result", "nanoXField", "customField", "specificError", "proxyCallWithEmptyDescriptor"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { type ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\nimport { type ProxyDelegateCall } from \"@/proxy/model/ProxyDelegateCall\";\nimport { ContextFieldLoaderKind } from \"@/shared/domain/ContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\n\ndescribe(\"ProxyContextFieldLoader\", () => {\n const mockProxyDataSource: ProxyDataSource = {\n getProxyImplementationAddress: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const proxyContextFieldLoader = new ProxyContextFieldLoader(\n mockProxyDataSource,\n mockCertificateLoader,\n );\n\n const mockTransactionField: TransactionFieldContext<ContextFieldLoaderKind.PROXY_DELEGATE_CALL> =\n {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n chainId: 1,\n proxyAddress: \"0x1234567890abcdef\",\n calldata: \"0xabcdef1234567890\",\n challenge: \"test-challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const mockProxyDelegateCall: ProxyDelegateCall = {\n implementationAddress: \"0x987654321fedcba0\",\n signedDescriptor: \"0x123456789abcdef0\",\n };\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle\", () => {\n it(\"should return true for valid proxy field\", () => {\n // GIVEN\n const validField = {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n chainId: 1,\n proxyAddress: \"0x1234567890abcdef\",\n calldata: \"0xabcdef1234567890\",\n challenge: \"test-challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // THEN\n expect(proxyContextFieldLoader.canHandle(validField)).toBe(true);\n });\n\n describe(\"should return false for invalid fields\", () => {\n const invalidFields = [\n { name: \"null\", value: null },\n { name: \"undefined\", value: undefined },\n { name: \"string\", value: \"invalid\" },\n { name: \"number\", value: 123 },\n { name: \"boolean\", value: true },\n { name: \"array\", value: [] },\n { name: \"empty object\", value: {} },\n {\n name: \"object missing kind\",\n value: {\n chainId: 1,\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing chainId\",\n value: {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing proxyAddress\",\n value: {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n chainId: 1,\n calldata: \"0xabc\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing calldata\",\n value: {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n chainId: 1,\n proxyAddress: \"0x123\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing challenge\",\n value: {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n chainId: 1,\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing deviceModelId\",\n value: {\n kind: ContextFieldLoaderKind.PROXY_DELEGATE_CALL,\n chainId: 1,\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n challenge: \"test\",\n },\n },\n {\n name: \"object with wrong kind\",\n value: {\n kind: ContextFieldLoaderKind.TOKEN,\n chainId: 1,\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n ];\n\n test.each(invalidFields)(\"$name\", ({ value }) => {\n expect(proxyContextFieldLoader.canHandle(value)).toBe(false);\n });\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when proxy data source fails\", async () => {\n // GIVEN\n const error = new Error(\"Proxy data source error\");\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Left(error));\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(\n mockProxyDataSource.getProxyImplementationAddress,\n ).toHaveBeenCalledWith({\n calldata: mockTransactionField.calldata,\n proxyAddress: mockTransactionField.proxyAddress,\n chainId: mockTransactionField.chainId,\n challenge: mockTransactionField.challenge,\n });\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: error,\n });\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n });\n\n it(\"should return proxy delegate call context when successful\", async () => {\n // GIVEN\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Right(mockProxyDelegateCall));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(\n mockProxyDataSource.getProxyImplementationAddress,\n ).toHaveBeenCalledWith({\n calldata: mockTransactionField.calldata,\n proxyAddress: mockTransactionField.proxyAddress,\n chainId: mockTransactionField.chainId,\n challenge: mockTransactionField.challenge,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: mockTransactionField.deviceModelId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: mockCertificate,\n });\n });\n\n it(\"should return proxy delegate call context with undefined certificate when certificate loading returns undefined\", async () => {\n // GIVEN\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Right(mockProxyDelegateCall));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(\n mockProxyDataSource.getProxyImplementationAddress,\n ).toHaveBeenCalledWith({\n calldata: mockTransactionField.calldata,\n proxyAddress: mockTransactionField.proxyAddress,\n chainId: mockTransactionField.chainId,\n challenge: mockTransactionField.challenge,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: mockTransactionField.deviceModelId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: undefined,\n });\n });\n\n it(\"should handle different device model IDs correctly\", async () => {\n // GIVEN\n const nanoXField = {\n ...mockTransactionField,\n deviceModelId: DeviceModelId.NANO_X,\n };\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Right(mockProxyDelegateCall));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result = await proxyContextFieldLoader.loadField(nanoXField);\n\n // THEN\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: DeviceModelId.NANO_X,\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: mockCertificate,\n });\n });\n\n it(\"should handle different chain IDs and addresses correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n chainId: 137,\n proxyAddress: \"0xdeadbeef\",\n calldata: \"0xcafebabe\",\n challenge: \"custom-challenge\",\n };\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Right(mockProxyDelegateCall));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result = await proxyContextFieldLoader.loadField(customField);\n\n // THEN\n expect(\n mockProxyDataSource.getProxyImplementationAddress,\n ).toHaveBeenCalledWith({\n calldata: \"0xcafebabe\",\n proxyAddress: \"0xdeadbeef\",\n chainId: 137,\n challenge: \"custom-challenge\",\n });\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: mockProxyDelegateCall.signedDescriptor,\n certificate: mockCertificate,\n });\n });\n\n it(\"should handle certificate loading failure gracefully\", async () => {\n // GIVEN\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Right(mockProxyDelegateCall));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n new Error(\"Certificate loading failed\"),\n );\n\n // WHEN & THEN\n await expect(\n proxyContextFieldLoader.loadField(mockTransactionField),\n ).rejects.toThrow(\"Certificate loading failed\");\n\n expect(\n mockProxyDataSource.getProxyImplementationAddress,\n ).toHaveBeenCalled();\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalled();\n });\n\n it(\"should preserve error message from proxy data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Left(specificError));\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty signed descriptor\", async () => {\n // GIVEN\n const proxyCallWithEmptyDescriptor = {\n ...mockProxyDelegateCall,\n signedDescriptor: \"\",\n };\n vi.spyOn(\n mockProxyDataSource,\n \"getProxyImplementationAddress\",\n ).mockResolvedValue(Right(proxyCallWithEmptyDescriptor));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n // WHEN\n const result =\n await proxyContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: \"\",\n certificate: mockCertificate,\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_KeyId", "import_KeyUsage", "import_ProxyContextFieldLoader", "import_ContextFieldLoader", "import_ClearSignContext", "mockProxyDataSource", "mockCertificateLoader", "proxyContextFieldLoader", "mockTransactionField", "mockProxyDelegateCall", "mockCertificate", "validField", "invalidFields", "value", "error", "result", "nanoXField", "customField", "specificError", "proxyCallWithEmptyDescriptor"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var g=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var n=(r,e,d,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of l(e))!a.call(r,s)&&s!==d&&g(r,s,{get:()=>e[s],enumerable:!(t=i(e,s))||t.enumerable});return r};var o=r=>n(g({},"__esModule",{value:!0}),r);var p={};module.exports=o(p);
1
+ "use strict";var s=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var p=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of l(e))!o.call(t,r)&&r!==n&&s(t,r,{get:()=>e[r],enumerable:!(i=g(e,r))||i.enumerable});return t};var a=t=>p(s({},"__esModule",{value:!0}),t);var d={};module.exports=a(d);
2
2
  //# sourceMappingURL=ProxyDelegateCall.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/model/ProxyDelegateCall.ts"],
4
- "sourcesContent": ["export type ProxyDelegateCall = {\n delegateAddresses: string[];\n signedDescriptor: string;\n};\n"],
4
+ "sourcesContent": ["export type ProxyDelegateCall = {\n implementationAddress: string;\n signedDescriptor: string;\n};\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["ProxyDelegateCall_exports", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var p=(n,t)=>{for(var o in t)r(n,o,{get:t[o],enumerable:!0})},x=(n,t,o,T)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of l(t))!m.call(n,e)&&e!==o&&r(n,e,{get:()=>t[e],enumerable:!(T=i(t,e))||T.enumerable});return n};var E=n=>x(r({},"__esModule",{value:!0}),n);var _={};p(_,{ContextFieldLoaderKind:()=>a});module.exports=E(_);var a=(e=>(e.PROXY_DELEGATE_CALL="proxy_delegate_call",e.TOKEN="token",e.NFT="nft",e.TRUSTED_NAME="trusted_name",e))(a||{});0&&(module.exports={ContextFieldLoaderKind});
1
+ "use strict";var o=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var E=(t,n)=>{for(var l in n)o(t,l,{get:n[l],enumerable:!0})},_=(t,n,l,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of T(n))!u.call(t,e)&&e!==l&&o(t,e,{get:()=>n[e],enumerable:!(a=r(n,e))||a.enumerable});return t};var f=t=>_(o({},"__esModule",{value:!0}),t);var m={};E(m,{ContextFieldLoaderKind:()=>p});module.exports=f(m);var p=(e=>(e.PROXY_DELEGATE_CALL="proxy_delegate_call",e.TOKEN="token",e.NFT="nft",e.TRUSTED_NAME="trusted_name",e))(p||{});0&&(module.exports={ContextFieldLoaderKind});
2
2
  //# sourceMappingURL=ContextFieldLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/domain/ContextFieldLoader.ts"],
4
- "sourcesContent": ["import { type ClearSignContext } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\n\nexport enum ContextFieldLoaderKind {\n PROXY_DELEGATE_CALL = \"proxy_delegate_call\",\n TOKEN = \"token\",\n NFT = \"nft\",\n TRUSTED_NAME = \"trusted_name\",\n}\n\nexport interface ContextFieldLoader<T extends ContextFieldLoaderKind> {\n kind: T;\n loadField: (field: TransactionFieldContext<T>) => Promise<ClearSignContext>;\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAGO,IAAKE,OACVA,EAAA,oBAAsB,sBACtBA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,eAJLA,OAAA",
4
+ "sourcesContent": ["import { type ClearSignContext } from \"@/shared/model/ClearSignContext\";\n\nexport enum ContextFieldLoaderKind {\n PROXY_DELEGATE_CALL = \"proxy_delegate_call\",\n TOKEN = \"token\",\n NFT = \"nft\",\n TRUSTED_NAME = \"trusted_name\",\n}\n\nexport interface ContextFieldLoader<TInput = unknown> {\n loadField: (field: TInput) => Promise<ClearSignContext>;\n canHandle: (field: unknown) => boolean;\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAEO,IAAKE,OACVA,EAAA,oBAAsB,sBACtBA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,eAJLA,OAAA",
6
6
  "names": ["ContextFieldLoader_exports", "__export", "ContextFieldLoaderKind", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var x=(o,t,i,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of l(t))!C.call(o,e)&&e!==i&&r(o,e,{get:()=>t[e],enumerable:!(n=a(t,e))||n.enumerable});return o};var m=o=>x(r({},"__esModule",{value:!0}),o);var p={};module.exports=m(p);
1
+ "use strict";var r=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var x=(o,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of C(t))!p.call(o,e)&&e!==a&&r(o,e,{get:()=>t[e],enumerable:!(n=i(t,e))||n.enumerable});return o};var m=o=>x(r({},"__esModule",{value:!0}),o);var s={};module.exports=m(s);
2
2
  //# sourceMappingURL=ContextLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/domain/ContextLoader.ts"],
4
- "sourcesContent": ["import { type ClearSignContext } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionContext } from \"@/shared/model/TransactionContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\n\nexport type ContextLoader = {\n load: (transaction: TransactionContext) => Promise<ClearSignContext[]>;\n loadField?: (\n field: TransactionFieldContext,\n ) => Promise<ClearSignContext | null>;\n};\n"],
4
+ "sourcesContent": ["import { type ClearSignContext } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionContext } from \"@/shared/model/TransactionContext\";\n\nexport type ContextLoader = {\n load: (transaction: TransactionContext) => Promise<ClearSignContext[]>;\n};\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["ContextLoader_exports", "__toCommonJS"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/model/TypedDataClearSignContext.ts"],
4
- "sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\n\nimport {\n type ClearSignContextSuccess,\n type ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { type TransactionSubset } from \"@/shared/model/TransactionSubset\";\n\n// The general informations for a typed message\nexport type TypedDataMessageInfo = {\n displayName: string;\n filtersCount: number;\n signature: string;\n};\n\n// Token index and descriptor. Needed for tokens that are referenced by a typed message\nexport type TypedDataTokenIndex = number;\nexport type TypedDataToken = string;\n// Calldata index. Needed for calldatas that are referenced by a typed message\nexport type TypedDataCalldataIndex = number;\n// Special token index value when the referenced token is the verifying contract\nexport const VERIFYING_CONTRACT_TOKEN_INDEX = 255;\n\n// Typed message filters, to select fields to display, and provide formatting informations\nexport type TypedDataFilterPath = string;\nexport type TypedDataFilterWithToken = {\n type: \"amount\" | \"token\";\n displayName: string;\n tokenIndex: TypedDataTokenIndex;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilterWithTrustedName = {\n type: \"trusted-name\";\n displayName: string;\n types: string[];\n sources: string[];\n typesAndSourcesPayload: string;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilterCalldata = {\n type:\n | \"calldata-value\"\n | \"calldata-callee\"\n | \"calldata-chain-id\"\n | \"calldata-selector\"\n | \"calldata-amount\"\n | \"calldata-spender\";\n displayName: string;\n calldataIndex: TypedDataCalldataIndex;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilter =\n | {\n type: \"datetime\" | \"raw\";\n displayName: string;\n path: TypedDataFilterPath;\n signature: string;\n }\n | TypedDataFilterWithToken\n | TypedDataFilterWithTrustedName\n | TypedDataFilterCalldata;\n\n// Calldata info when referenced by a typed message\nexport enum TypedDataCalldataParamPresence {\n None = \"none\",\n Present = \"present\",\n VerifyingContract = \"verifying_contract\",\n}\nexport type TypedDataFilterCalldataInfo = {\n displayName: string;\n calldataIndex: TypedDataCalldataIndex;\n valueFlag: boolean;\n calleeFlag: TypedDataCalldataParamPresence;\n chainIdFlag: boolean;\n selectorFlag: boolean;\n amountFlag: boolean;\n spenderFlag: TypedDataCalldataParamPresence;\n signature: string;\n};\nexport type TypedDataCalldataInfo = {\n filter: TypedDataFilterCalldataInfo;\n subset: TransactionSubset;\n};\n\n// Clear signing context for a typed message\nexport type TypedDataClearSignContextSuccess = {\n type: \"success\";\n messageInfo: TypedDataMessageInfo;\n filters: Record<TypedDataFilterPath, TypedDataFilter>;\n trustedNamesAddresses: Record<TypedDataFilterPath, HexaString>;\n tokens: Record<TypedDataTokenIndex, TypedDataToken>;\n calldatas: Record<TypedDataCalldataIndex, TypedDataCalldataInfo>;\n proxy:\n | ClearSignContextSuccess<ClearSignContextType.PROXY_DELEGATE_CALL>\n | undefined;\n};\nexport type TypedDataClearSignContextError = {\n type: \"error\";\n error: Error;\n};\nexport type TypedDataClearSignContext =\n | TypedDataClearSignContextSuccess\n | TypedDataClearSignContextError;\n"],
4
+ "sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\n\nimport {\n type ClearSignContextSuccess,\n type ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { type TransactionSubset } from \"@/shared/model/TransactionSubset\";\n\n// The general informations for a typed message\nexport type TypedDataMessageInfo = {\n displayName: string;\n filtersCount: number;\n signature: string;\n};\n\n// Token index and descriptor. Needed for tokens that are referenced by a typed message\nexport type TypedDataTokenIndex = number;\nexport type TypedDataToken = string;\n// Calldata index. Needed for calldatas that are referenced by a typed message\nexport type TypedDataCalldataIndex = number;\n// Special token index value when the referenced token is the verifying contract\nexport const VERIFYING_CONTRACT_TOKEN_INDEX = 255;\n\n// Typed message filters, to select fields to display, and provide formatting informations\nexport type TypedDataFilterPath = string;\nexport type TypedDataFilterWithToken = {\n type: \"amount\" | \"token\";\n displayName: string;\n tokenIndex: TypedDataTokenIndex;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilterWithTrustedName = {\n type: \"trusted-name\";\n displayName: string;\n types: string[];\n sources: string[];\n typesAndSourcesPayload: string;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilterCalldata = {\n type:\n | \"calldata-value\"\n | \"calldata-callee\"\n | \"calldata-chain-id\"\n | \"calldata-selector\"\n | \"calldata-amount\"\n | \"calldata-spender\";\n displayName: string;\n calldataIndex: TypedDataCalldataIndex;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilter =\n | {\n type: \"datetime\" | \"raw\";\n displayName: string;\n path: TypedDataFilterPath;\n signature: string;\n }\n | TypedDataFilterWithToken\n | TypedDataFilterWithTrustedName\n | TypedDataFilterCalldata;\n\n// Calldata info when referenced by a typed message\nexport enum TypedDataCalldataParamPresence {\n None = \"none\",\n Present = \"present\",\n VerifyingContract = \"verifying_contract\",\n}\nexport type TypedDataFilterCalldataInfo = {\n displayName: string;\n calldataIndex: TypedDataCalldataIndex;\n valueFlag: boolean;\n calleeFlag: TypedDataCalldataParamPresence;\n chainIdFlag: boolean;\n selectorFlag: boolean;\n amountFlag: boolean;\n spenderFlag: TypedDataCalldataParamPresence;\n signature: string;\n};\nexport type TypedDataCalldataInfo = {\n filter: TypedDataFilterCalldataInfo;\n subset: TransactionSubset;\n};\n\n// Clear signing context for a typed message\nexport type TypedDataClearSignContextSuccess = {\n type: \"success\";\n messageInfo: TypedDataMessageInfo;\n filters: Record<TypedDataFilterPath, TypedDataFilter>;\n trustedNamesAddresses: Record<TypedDataFilterPath, HexaString>;\n tokens: Record<TypedDataTokenIndex, TypedDataToken>;\n calldatas: Record<TypedDataCalldataIndex, TypedDataCalldataInfo>;\n proxy?: ClearSignContextSuccess<ClearSignContextType.PROXY_DELEGATE_CALL>;\n};\nexport type TypedDataClearSignContextError = {\n type: \"error\";\n error: Error;\n};\nexport type TypedDataClearSignContext =\n | TypedDataClearSignContextSuccess\n | TypedDataClearSignContextError;\n"],
5
5
  "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,EAAA,mCAAAC,IAAA,eAAAC,EAAAJ,GAqBO,MAAMG,EAAiC,IA6CvC,IAAKD,OACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,kBAAoB,qBAHVA,OAAA",
6
6
  "names": ["TypedDataClearSignContext_exports", "__export", "TypedDataCalldataParamPresence", "VERIFYING_CONTRACT_TOKEN_INDEX", "__toCommonJS"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/model/TypedDataContext.ts"],
4
- "sourcesContent": ["import { type DeviceModelId } from \"@ledgerhq/device-management-kit\";\n\n// The schema of a typed message\nexport type TypedDataSchema = Record<\n string,\n Array<{ name: string; type: string }>\n>;\n\n// The extracted message values, with their path\nexport type TypedDataFieldValues = Array<{ path: string; value: Uint8Array }>;\n\n// Context needed to fetch the clear signing context of a typed message\nexport type TypedDataContext = {\n deviceModelId: DeviceModelId; // needed to fetch the correct certificate\n verifyingContract: string;\n chainId: number;\n version: \"v1\" | \"v2\";\n schema: TypedDataSchema;\n challenge?: string;\n fieldsValues: TypedDataFieldValues;\n};\n"],
4
+ "sourcesContent": ["import { type DeviceModelId } from \"@ledgerhq/device-management-kit\";\n\n// The schema of a typed message\nexport type TypedDataSchema = Record<\n string,\n Array<{ name: string; type: string }>\n>;\n\n// The extracted message values, with their path\nexport type TypedDataFieldValues = Array<{ path: string; value: Uint8Array }>;\n\n// Context needed to fetch the clear signing context of a typed message\nexport type TypedDataContext = {\n deviceModelId: DeviceModelId; // needed to fetch the correct certificate\n verifyingContract: string;\n chainId: number;\n version: \"v1\" | \"v2\";\n schema: TypedDataSchema;\n fieldsValues: TypedDataFieldValues;\n challenge?: string;\n};\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["TypedDataContext_exports", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var K=(e,t)=>{for(var n in t)i(e,n,{get:t[n],enumerable:!0})},f=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of S(t))!T.call(e,a)&&a!==n&&i(e,a,{get:()=>t[a],enumerable:!(o=s(t,a))||o.enumerable});return e};var g=e=>f(i({},"__esModule",{value:!0}),e),m=(e,t,n,o)=>{for(var a=o>1?void 0:o?s(t,n):t,p=e.length-1,l;p>=0;p--)(l=e[p])&&(a=(o?l(t,n,a):l(a))||a);return o&&a&&i(t,n,a),a},C=(e,t)=>(n,o)=>t(n,o,e);var u={};K(u,{TokenContextFieldLoader:()=>r});module.exports=g(u);var d=require("inversify"),y=require("../../shared/domain/ContextFieldLoader"),c=require("../../shared/model/ClearSignContext"),x=require("../../token/di/tokenTypes");let r=class{constructor(t){this._dataSource=t}kind=y.ContextFieldLoaderKind.TOKEN;async loadField(t){return(await this._dataSource.getTokenInfosPayload({address:t.address,chainId:t.chainId})).caseOf({Left:o=>({type:c.ClearSignContextType.ERROR,error:o}),Right:o=>({type:c.ClearSignContextType.TOKEN,payload:o})})}};r=m([(0,d.injectable)(),C(0,(0,d.inject)(x.tokenTypes.TokenDataSource))],r);0&&(module.exports={TokenContextFieldLoader});
1
+ "use strict";var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var T=(t,e)=>{for(var a in e)i(t,a,{get:e[a],enumerable:!0})},I=(t,e,a,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of k(e))!S.call(t,o)&&o!==a&&i(t,o,{get:()=>e[o],enumerable:!(n=c(e,o))||n.enumerable});return t};var f=t=>I(i({},"__esModule",{value:!0}),t),m=(t,e,a,n)=>{for(var o=n>1?void 0:n?c(e,a):e,l=t.length-1,p;l>=0;l--)(p=t[l])&&(o=(n?p(e,a,o):p(o))||o);return n&&o&&i(e,a,o),o},y=(t,e)=>(a,n)=>e(a,n,t);var g={};T(g,{TokenContextFieldLoader:()=>r});module.exports=f(g);var d=require("inversify"),u=require("../../shared/domain/ContextFieldLoader"),s=require("../../shared/model/ClearSignContext"),C=require("../../token/di/tokenTypes");let r=class{constructor(e){this._dataSource=e}canHandle(e){return typeof e=="object"&&e!==null&&"kind"in e&&e.kind===u.ContextFieldLoaderKind.TOKEN&&"chainId"in e&&"address"in e}async loadField(e){return(await this._dataSource.getTokenInfosPayload({address:e.address,chainId:e.chainId})).caseOf({Left:n=>({type:s.ClearSignContextType.ERROR,error:n}),Right:n=>({type:s.ClearSignContextType.TOKEN,payload:n})})}};r=m([(0,d.injectable)(),y(0,(0,d.inject)(C.tokenTypes.TokenDataSource))],r);0&&(module.exports={TokenContextFieldLoader});
2
2
  //# sourceMappingURL=TokenContextFieldLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/token/domain/TokenContextFieldLoader.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport {\n type ContextFieldLoader,\n ContextFieldLoaderKind,\n} from \"@/shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\n\n@injectable()\nexport class TokenContextFieldLoader\n implements ContextFieldLoader<ContextFieldLoaderKind.TOKEN>\n{\n kind: ContextFieldLoaderKind.TOKEN = ContextFieldLoaderKind.TOKEN;\n\n constructor(\n @inject(tokenTypes.TokenDataSource) private _dataSource: TokenDataSource,\n ) {}\n\n async loadField(\n field: TransactionFieldContext<ContextFieldLoaderKind.TOKEN>,\n ): Promise<ClearSignContext> {\n const payload = await this._dataSource.getTokenInfosPayload({\n address: field.address,\n chainId: field.chainId,\n });\n return payload.caseOf({\n Left: (error): ClearSignContext => ({\n type: ClearSignContextType.ERROR,\n error,\n }),\n Right: (value): ClearSignContext => ({\n type: ClearSignContextType.TOKEN,\n payload: value,\n }),\n });\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,qBAEnCC,EAGO,8CACPC,EAGO,2CAGPC,EAA2B,iCAGpB,IAAMC,EAAN,KAEP,CAGE,YAC8CC,EAC5C,CAD4C,iBAAAA,CAC3C,CAJH,KAAqC,yBAAuB,MAM5D,MAAM,UACJC,EAC2B,CAK3B,OAJgB,MAAM,KAAK,YAAY,qBAAqB,CAC1D,QAASA,EAAM,QACf,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOC,IAA6B,CAClC,KAAM,uBAAqB,MAC3B,MAAAA,CACF,GACA,MAAQC,IAA6B,CACnC,KAAM,uBAAqB,MAC3B,QAASA,CACX,EACF,CAAC,CACH,CACF,EA3BaJ,EAANK,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,aAAW,eAAe,IANzBN",
6
- "names": ["TokenContextFieldLoader_exports", "__export", "TokenContextFieldLoader", "__toCommonJS", "import_inversify", "import_ContextFieldLoader", "import_ClearSignContext", "import_tokenTypes", "TokenContextFieldLoader", "_dataSource", "field", "error", "value", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport {\n type ContextFieldLoader,\n ContextFieldLoaderKind,\n} from \"@/shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\n\nexport type TokenFieldInput = {\n kind: ContextFieldLoaderKind.TOKEN;\n chainId: number;\n address: string;\n};\n\n@injectable()\nexport class TokenContextFieldLoader\n implements ContextFieldLoader<TokenFieldInput>\n{\n constructor(\n @inject(tokenTypes.TokenDataSource) private _dataSource: TokenDataSource,\n ) {}\n\n canHandle(input: unknown): input is TokenFieldInput {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"kind\" in input &&\n input.kind === ContextFieldLoaderKind.TOKEN &&\n \"chainId\" in input &&\n \"address\" in input\n );\n }\n\n async loadField(field: TokenFieldInput): Promise<ClearSignContext> {\n const payload = await this._dataSource.getTokenInfosPayload({\n address: field.address,\n chainId: field.chainId,\n });\n return payload.caseOf({\n Left: (error): ClearSignContext => ({\n type: ClearSignContextType.ERROR,\n error,\n }),\n Right: (value): ClearSignContext => ({\n type: ClearSignContextType.TOKEN,\n payload: value,\n }),\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,qBAEnCC,EAGO,8CACPC,EAGO,2CAEPC,EAA2B,iCASpB,IAAMC,EAAN,KAEP,CACE,YAC8CC,EAC5C,CAD4C,iBAAAA,CAC3C,CAEH,UAAUC,EAA0C,CAClD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,SAAUA,GACVA,EAAM,OAAS,yBAAuB,OACtC,YAAaA,GACb,YAAaA,CAEjB,CAEA,MAAM,UAAUC,EAAmD,CAKjE,OAJgB,MAAM,KAAK,YAAY,qBAAqB,CAC1D,QAASA,EAAM,QACf,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOC,IAA6B,CAClC,KAAM,uBAAqB,MAC3B,MAAAA,CACF,GACA,MAAQC,IAA6B,CACnC,KAAM,uBAAqB,MAC3B,QAASA,CACX,EACF,CAAC,CACH,CACF,EAlCaL,EAANM,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,aAAW,eAAe,IAJzBP",
6
+ "names": ["TokenContextFieldLoader_exports", "__export", "TokenContextFieldLoader", "__toCommonJS", "import_inversify", "import_ContextFieldLoader", "import_ClearSignContext", "import_tokenTypes", "TokenContextFieldLoader", "_dataSource", "input", "field", "error", "value", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("purify-ts"),l=require("../../shared/domain/ContextFieldLoader"),r=require("../../shared/model/ClearSignContext"),i=require("../../token/domain/TokenContextFieldLoader");describe("TokenContextFieldLoader",()=>{const o={getTokenInfosPayload:vi.fn()},d=new i.TokenContextFieldLoader(o),t={kind:l.ContextFieldLoaderKind.TOKEN,chainId:1,address:"0x1234567890abcdef"},s="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("constructor",()=>{it("should initialize with correct kind",()=>{expect(d.kind).toBe(l.ContextFieldLoaderKind.TOKEN)})}),describe("loadField",()=>{it("should return error context when token data source fails",async()=>{const e=new Error("Token data source error");vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue((0,n.Left)(e));const a=await d.loadField(t);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:t.address,chainId:t.chainId}),expect(a).toEqual({type:r.ClearSignContextType.ERROR,error:e})}),it("should return token context when successful",async()=>{vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue((0,n.Right)(s));const e=await d.loadField(t);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:t.address,chainId:t.chainId}),expect(e).toEqual({type:r.ClearSignContextType.TOKEN,payload:s})}),it("should handle different chain IDs and addresses correctly",async()=>{const e={...t,chainId:137,address:"0xdeadbeef"};vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue((0,n.Right)(s));const a=await d.loadField(e);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:"0xdeadbeef",chainId:137}),expect(a).toEqual({type:r.ClearSignContextType.TOKEN,payload:s})}),it("should preserve error message from token data source",async()=>{const e=new Error("Network timeout error");vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue((0,n.Left)(e));const a=await d.loadField(t);expect(a).toEqual({type:r.ClearSignContextType.ERROR,error:e})}),it("should handle empty token payload",async()=>{const e="";vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue((0,n.Right)(e));const a=await d.loadField(t);expect(a).toEqual({type:r.ClearSignContextType.TOKEN,payload:e})})})});
1
+ "use strict";var d=require("purify-ts"),s=require("../../shared/domain/ContextFieldLoader"),l=require("../../shared/model/ClearSignContext"),i=require("../../token/domain/TokenContextFieldLoader");describe("TokenContextFieldLoader",()=>{const a={getTokenInfosPayload:vi.fn()},t=new i.TokenContextFieldLoader(a),o={kind:s.ContextFieldLoaderKind.TOKEN,chainId:1,address:"0x1234567890abcdef"},r="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid token field",()=>{const e={kind:s.ContextFieldLoaderKind.TOKEN,chainId:1,address:"0x1234567890abcdef"};expect(t.canHandle(e)).toBe(!0)}),describe("should return false for invalid fields",()=>{const e=[{name:"null",value:null},{name:"undefined",value:void 0},{name:"string",value:"invalid"},{name:"number",value:123},{name:"boolean",value:!0},{name:"array",value:[]},{name:"empty object",value:{}},{name:"object missing kind",value:{chainId:1,address:"0x123"}},{name:"object missing chainId",value:{kind:s.ContextFieldLoaderKind.TOKEN,address:"0x123"}},{name:"object missing address",value:{kind:s.ContextFieldLoaderKind.TOKEN,chainId:1}},{name:"object with wrong kind",value:{kind:s.ContextFieldLoaderKind.NFT,chainId:1,address:"0x123"}}];test.each(e)("$name",({value:n})=>{expect(t.canHandle(n)).toBe(!1)})})}),describe("loadField",()=>{it("should return error context when token data source fails",async()=>{const e=new Error("Token data source error");vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue((0,d.Left)(e));const n=await t.loadField(o);expect(a.getTokenInfosPayload).toHaveBeenCalledWith({address:o.address,chainId:o.chainId}),expect(n).toEqual({type:l.ClearSignContextType.ERROR,error:e})}),it("should return token context when successful",async()=>{vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue((0,d.Right)(r));const e=await t.loadField(o);expect(a.getTokenInfosPayload).toHaveBeenCalledWith({address:o.address,chainId:o.chainId}),expect(e).toEqual({type:l.ClearSignContextType.TOKEN,payload:r})}),it("should handle different chain IDs and addresses correctly",async()=>{const e={...o,chainId:137,address:"0xdeadbeef"};vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue((0,d.Right)(r));const n=await t.loadField(e);expect(a.getTokenInfosPayload).toHaveBeenCalledWith({address:"0xdeadbeef",chainId:137}),expect(n).toEqual({type:l.ClearSignContextType.TOKEN,payload:r})}),it("should preserve error message from token data source",async()=>{const e=new Error("Network timeout error");vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue((0,d.Left)(e));const n=await t.loadField(o);expect(n).toEqual({type:l.ClearSignContextType.ERROR,error:e})}),it("should handle empty token payload",async()=>{const e="";vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue((0,d.Right)(e));const n=await t.loadField(o);expect(n).toEqual({type:l.ClearSignContextType.TOKEN,payload:e})})})});
2
2
  //# sourceMappingURL=TokenContextFieldLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/token/domain/TokenContextFieldLoader.test.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { ContextFieldLoaderKind } from \"@/shared/domain/ContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { TokenContextFieldLoader } from \"@/token/domain/TokenContextFieldLoader\";\n\ndescribe(\"TokenContextFieldLoader\", () => {\n const mockTokenDataSource: TokenDataSource = {\n getTokenInfosPayload: vi.fn(),\n };\n const tokenContextFieldLoader = new TokenContextFieldLoader(\n mockTokenDataSource,\n );\n\n const mockTransactionField: TransactionFieldContext<ContextFieldLoaderKind.TOKEN> =\n {\n kind: ContextFieldLoaderKind.TOKEN,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n const mockTokenPayload = \"0x123456789abcdef0\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"constructor\", () => {\n it(\"should initialize with correct kind\", () => {\n // THEN\n expect(tokenContextFieldLoader.kind).toBe(ContextFieldLoaderKind.TOKEN);\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when token data source fails\", async () => {\n // GIVEN\n const error = new Error(\"Token data source error\");\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: error,\n });\n });\n\n it(\"should return token context when successful\", async () => {\n // GIVEN\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(mockTokenPayload),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: mockTokenPayload,\n });\n });\n\n it(\"should handle different chain IDs and addresses correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n chainId: 137,\n address: \"0xdeadbeef\",\n };\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(mockTokenPayload),\n );\n\n // WHEN\n const result = await tokenContextFieldLoader.loadField(customField);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: \"0xdeadbeef\",\n chainId: 137,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: mockTokenPayload,\n });\n });\n\n it(\"should preserve error message from token data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(specificError),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty token payload\", async () => {\n // GIVEN\n const emptyPayload = \"\";\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(emptyPayload),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: emptyPayload,\n });\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAA4B,qBAE5BC,EAAuC,8CACvCC,EAAqC,2CAGrCC,EAAwC,kDAExC,SAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAuC,CAC3C,qBAAsB,GAAG,GAAG,CAC9B,EACMC,EAA0B,IAAI,0BAClCD,CACF,EAEME,EACJ,CACE,KAAM,yBAAuB,MAC7B,QAAS,EACT,QAAS,oBACX,EAEIC,EAAmB,qBAEzB,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,cAAe,IAAM,CAC5B,GAAG,sCAAuC,IAAM,CAE9C,OAAOF,EAAwB,IAAI,EAAE,KAAK,yBAAuB,KAAK,CACxE,CAAC,CACH,CAAC,EAED,SAAS,YAAa,IAAM,CAC1B,GAAG,2DAA4D,SAAY,CAEzE,MAAMG,EAAQ,IAAI,MAAM,yBAAyB,EACjD,GAAG,MAAMJ,EAAqB,sBAAsB,EAAE,qBACpD,QAAKI,CAAK,CACZ,EAGA,MAAMC,EACJ,MAAMJ,EAAwB,UAAUC,CAAoB,EAG9D,OAAOF,EAAoB,oBAAoB,EAAE,qBAAqB,CACpE,QAASE,EAAqB,QAC9B,QAASA,EAAqB,OAChC,CAAC,EACD,OAAOG,CAAM,EAAE,QAAQ,CACrB,KAAM,uBAAqB,MAC3B,MAAOD,CACT,CAAC,CACH,CAAC,EAED,GAAG,8CAA+C,SAAY,CAE5D,GAAG,MAAMJ,EAAqB,sBAAsB,EAAE,qBACpD,SAAMG,CAAgB,CACxB,EAGA,MAAME,EACJ,MAAMJ,EAAwB,UAAUC,CAAoB,EAG9D,OAAOF,EAAoB,oBAAoB,EAAE,qBAAqB,CACpE,QAASE,EAAqB,QAC9B,QAASA,EAAqB,OAChC,CAAC,EACD,OAAOG,CAAM,EAAE,QAAQ,CACrB,KAAM,uBAAqB,MAC3B,QAASF,CACX,CAAC,CACH,CAAC,EAED,GAAG,4DAA6D,SAAY,CAE1E,MAAMG,EAAc,CAClB,GAAGJ,EACH,QAAS,IACT,QAAS,YACX,EACA,GAAG,MAAMF,EAAqB,sBAAsB,EAAE,qBACpD,SAAMG,CAAgB,CACxB,EAGA,MAAME,EAAS,MAAMJ,EAAwB,UAAUK,CAAW,EAGlE,OAAON,EAAoB,oBAAoB,EAAE,qBAAqB,CACpE,QAAS,aACT,QAAS,GACX,CAAC,EACD,OAAOK,CAAM,EAAE,QAAQ,CACrB,KAAM,uBAAqB,MAC3B,QAASF,CACX,CAAC,CACH,CAAC,EAED,GAAG,uDAAwD,SAAY,CAErE,MAAMI,EAAgB,IAAI,MAAM,uBAAuB,EACvD,GAAG,MAAMP,EAAqB,sBAAsB,EAAE,qBACpD,QAAKO,CAAa,CACpB,EAGA,MAAMF,EACJ,MAAMJ,EAAwB,UAAUC,CAAoB,EAG9D,OAAOG,CAAM,EAAE,QAAQ,CACrB,KAAM,uBAAqB,MAC3B,MAAOE,CACT,CAAC,CACH,CAAC,EAED,GAAG,oCAAqC,SAAY,CAElD,MAAMC,EAAe,GACrB,GAAG,MAAMR,EAAqB,sBAAsB,EAAE,qBACpD,SAAMQ,CAAY,CACpB,EAGA,MAAMH,EACJ,MAAMJ,EAAwB,UAAUC,CAAoB,EAG9D,OAAOG,CAAM,EAAE,QAAQ,CACrB,KAAM,uBAAqB,MAC3B,QAASG,CACX,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
- "names": ["import_purify_ts", "import_ContextFieldLoader", "import_ClearSignContext", "import_TokenContextFieldLoader", "mockTokenDataSource", "tokenContextFieldLoader", "mockTransactionField", "mockTokenPayload", "error", "result", "customField", "specificError", "emptyPayload"]
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { ContextFieldLoaderKind } from \"@/shared/domain/ContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { TokenContextFieldLoader } from \"@/token/domain/TokenContextFieldLoader\";\n\ndescribe(\"TokenContextFieldLoader\", () => {\n const mockTokenDataSource: TokenDataSource = {\n getTokenInfosPayload: vi.fn(),\n };\n const tokenContextFieldLoader = new TokenContextFieldLoader(\n mockTokenDataSource,\n );\n\n const mockTransactionField: TransactionFieldContext<ContextFieldLoaderKind.TOKEN> =\n {\n kind: ContextFieldLoaderKind.TOKEN,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n const mockTokenPayload = \"0x123456789abcdef0\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle\", () => {\n it(\"should return true for valid token field\", () => {\n // GIVEN\n const validField = {\n kind: ContextFieldLoaderKind.TOKEN,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n // THEN\n expect(tokenContextFieldLoader.canHandle(validField)).toBe(true);\n });\n\n describe(\"should return false for invalid fields\", () => {\n const invalidFields = [\n { name: \"null\", value: null },\n { name: \"undefined\", value: undefined },\n { name: \"string\", value: \"invalid\" },\n { name: \"number\", value: 123 },\n { name: \"boolean\", value: true },\n { name: \"array\", value: [] },\n { name: \"empty object\", value: {} },\n {\n name: \"object missing kind\",\n value: { chainId: 1, address: \"0x123\" },\n },\n {\n name: \"object missing chainId\",\n value: { kind: ContextFieldLoaderKind.TOKEN, address: \"0x123\" },\n },\n {\n name: \"object missing address\",\n value: { kind: ContextFieldLoaderKind.TOKEN, chainId: 1 },\n },\n {\n name: \"object with wrong kind\",\n value: {\n kind: ContextFieldLoaderKind.NFT,\n chainId: 1,\n address: \"0x123\",\n },\n },\n ];\n\n test.each(invalidFields)(\"$name\", ({ value }) => {\n expect(tokenContextFieldLoader.canHandle(value)).toBe(false);\n });\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when token data source fails\", async () => {\n // GIVEN\n const error = new Error(\"Token data source error\");\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: error,\n });\n });\n\n it(\"should return token context when successful\", async () => {\n // GIVEN\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(mockTokenPayload),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: mockTokenPayload,\n });\n });\n\n it(\"should handle different chain IDs and addresses correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n chainId: 137,\n address: \"0xdeadbeef\",\n };\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(mockTokenPayload),\n );\n\n // WHEN\n const result = await tokenContextFieldLoader.loadField(customField);\n\n // THEN\n expect(mockTokenDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n address: \"0xdeadbeef\",\n chainId: 137,\n });\n expect(result).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: mockTokenPayload,\n });\n });\n\n it(\"should preserve error message from token data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(specificError),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty token payload\", async () => {\n // GIVEN\n const emptyPayload = \"\";\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(emptyPayload),\n );\n\n // WHEN\n const result =\n await tokenContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.TOKEN,\n payload: emptyPayload,\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_purify_ts", "import_ContextFieldLoader", "import_ClearSignContext", "import_TokenContextFieldLoader", "mockTokenDataSource", "tokenContextFieldLoader", "mockTransactionField", "mockTokenPayload", "validField", "invalidFields", "value", "error", "result", "customField", "specificError", "emptyPayload"]
7
7
  }