@ledgerhq/context-module 0.0.0-multisig-20250918154034 → 0.0.0-multisig-2-20250922095845

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 (189) hide show
  1. package/lib/cjs/src/ContextModule.js +1 -1
  2. package/lib/cjs/src/ContextModule.js.map +1 -1
  3. package/lib/cjs/src/DefaultContextModule.js +1 -1
  4. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  5. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  6. package/lib/cjs/src/DefaultContextModule.test.js.map +2 -2
  7. package/lib/cjs/src/calldata/data/CalldataDescriptorDataSource.js +2 -0
  8. package/lib/cjs/src/calldata/data/CalldataDescriptorDataSource.js.map +7 -0
  9. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +2 -0
  10. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +7 -0
  11. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +2 -0
  12. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +7 -0
  13. package/lib/cjs/src/{transaction → calldata}/data/dto/CalldataDto.js.map +1 -1
  14. package/lib/cjs/src/calldata/di/calldataModuleFactory.js +2 -0
  15. package/lib/cjs/src/calldata/di/calldataModuleFactory.js.map +7 -0
  16. package/lib/cjs/src/calldata/di/calldataTypes.js +2 -0
  17. package/lib/cjs/src/calldata/di/calldataTypes.js.map +7 -0
  18. package/lib/cjs/src/calldata/domain/CalldataContextLoader.js +2 -0
  19. package/lib/cjs/src/calldata/domain/CalldataContextLoader.js.map +7 -0
  20. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js +2 -0
  21. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js.map +7 -0
  22. package/lib/cjs/src/di.js +1 -1
  23. package/lib/cjs/src/di.js.map +3 -3
  24. package/lib/cjs/src/index.js +1 -1
  25. package/lib/cjs/src/index.js.map +2 -2
  26. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js +1 -1
  27. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js.map +3 -3
  28. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js +1 -1
  29. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js.map +3 -3
  30. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js +1 -1
  31. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js.map +3 -3
  32. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js +1 -1
  33. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js.map +3 -3
  34. package/lib/cjs/src/shared/domain/ContextFieldLoader.js +1 -1
  35. package/lib/cjs/src/shared/domain/ContextFieldLoader.js.map +3 -3
  36. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  37. package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
  38. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js.map +1 -1
  39. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js +1 -1
  40. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js.map +3 -3
  41. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js +1 -1
  42. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js.map +3 -3
  43. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
  44. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +3 -3
  45. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +1 -1
  46. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +3 -3
  47. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  48. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +1 -1
  49. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  50. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +2 -2
  51. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  52. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +2 -2
  53. package/lib/esm/src/DefaultContextModule.js +1 -1
  54. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  55. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  56. package/lib/esm/src/DefaultContextModule.test.js.map +2 -2
  57. package/lib/esm/src/calldata/data/CalldataDescriptorDataSource.js +1 -0
  58. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +2 -0
  59. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +7 -0
  60. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +2 -0
  61. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +7 -0
  62. package/lib/esm/src/calldata/di/calldataModuleFactory.js +2 -0
  63. package/lib/esm/src/calldata/di/calldataModuleFactory.js.map +7 -0
  64. package/lib/esm/src/calldata/di/calldataTypes.js +2 -0
  65. package/lib/esm/src/calldata/di/calldataTypes.js.map +7 -0
  66. package/lib/esm/src/calldata/domain/CalldataContextLoader.js +2 -0
  67. package/lib/esm/src/calldata/domain/CalldataContextLoader.js.map +7 -0
  68. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js +2 -0
  69. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js.map +7 -0
  70. package/lib/esm/src/di.js +1 -1
  71. package/lib/esm/src/di.js.map +3 -3
  72. package/lib/esm/src/index.js +1 -1
  73. package/lib/esm/src/index.js.map +2 -2
  74. package/lib/esm/src/nft/domain/NftContextFieldLoader.js +1 -1
  75. package/lib/esm/src/nft/domain/NftContextFieldLoader.js.map +3 -3
  76. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js +1 -1
  77. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js.map +3 -3
  78. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js +1 -1
  79. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js.map +3 -3
  80. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js +1 -1
  81. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js.map +3 -3
  82. package/lib/esm/src/shared/domain/ContextFieldLoader.js +0 -1
  83. package/lib/esm/src/shared/domain/ContextFieldLoader.js.map +4 -4
  84. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  85. package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
  86. package/lib/esm/src/shared/model/TypedDataClearSignContext.js.map +1 -1
  87. package/lib/esm/src/token/domain/TokenContextFieldLoader.js +1 -1
  88. package/lib/esm/src/token/domain/TokenContextFieldLoader.js.map +3 -3
  89. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js +1 -1
  90. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js.map +3 -3
  91. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
  92. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +3 -3
  93. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +1 -1
  94. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +3 -3
  95. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  96. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +1 -1
  97. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  98. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +2 -2
  99. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  100. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +2 -2
  101. package/lib/types/src/ContextModule.d.ts +2 -2
  102. package/lib/types/src/ContextModule.d.ts.map +1 -1
  103. package/lib/types/src/DefaultContextModule.d.ts +1 -1
  104. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  105. package/lib/types/src/{transaction/data/TransactionDataSource.d.ts → calldata/data/CalldataDescriptorDataSource.d.ts} +4 -4
  106. package/lib/types/src/calldata/data/CalldataDescriptorDataSource.d.ts.map +1 -0
  107. package/lib/types/src/{transaction/data/HttpTransactionDataSource.d.ts → calldata/data/HttpCalldataDescriptorDataSource.d.ts} +6 -5
  108. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -0
  109. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.test.d.ts +2 -0
  110. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.test.d.ts.map +1 -0
  111. package/lib/types/src/calldata/data/dto/CalldataDto.d.ts.map +1 -0
  112. package/lib/types/src/calldata/di/calldataModuleFactory.d.ts +3 -0
  113. package/lib/types/src/calldata/di/calldataModuleFactory.d.ts.map +1 -0
  114. package/lib/types/src/calldata/di/calldataTypes.d.ts +6 -0
  115. package/lib/types/src/calldata/di/calldataTypes.d.ts.map +1 -0
  116. package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts +15 -0
  117. package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts.map +1 -0
  118. package/lib/types/src/calldata/domain/CalldataContextLoader.test.d.ts +2 -0
  119. package/lib/types/src/calldata/domain/CalldataContextLoader.test.d.ts.map +1 -0
  120. package/lib/types/src/di.d.ts.map +1 -1
  121. package/lib/types/src/index.d.ts +5 -4
  122. package/lib/types/src/index.d.ts.map +1 -1
  123. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts +4 -5
  124. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts.map +1 -1
  125. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts +4 -5
  126. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts.map +1 -1
  127. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts +11 -8
  128. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts.map +1 -1
  129. package/lib/types/src/shared/model/ClearSignContext.d.ts +1 -1
  130. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  131. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts +1 -1
  132. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts.map +1 -1
  133. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts +4 -5
  134. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts.map +1 -1
  135. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts +4 -5
  136. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts.map +1 -1
  137. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  138. package/package.json +3 -3
  139. package/lib/cjs/src/shared/model/TransactionFieldContext.js +0 -2
  140. package/lib/cjs/src/shared/model/TransactionFieldContext.js.map +0 -7
  141. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js +0 -2
  142. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js.map +0 -7
  143. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js +0 -2
  144. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js.map +0 -7
  145. package/lib/cjs/src/transaction/data/TransactionDataSource.js +0 -2
  146. package/lib/cjs/src/transaction/data/TransactionDataSource.js.map +0 -7
  147. package/lib/cjs/src/transaction/di/transactionModuleFactory.js +0 -2
  148. package/lib/cjs/src/transaction/di/transactionModuleFactory.js.map +0 -7
  149. package/lib/cjs/src/transaction/di/transactionTypes.js +0 -2
  150. package/lib/cjs/src/transaction/di/transactionTypes.js.map +0 -7
  151. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js +0 -2
  152. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js.map +0 -7
  153. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js +0 -2
  154. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js.map +0 -7
  155. package/lib/esm/src/shared/model/TransactionFieldContext.js +0 -1
  156. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js +0 -2
  157. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js.map +0 -7
  158. package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js +0 -2
  159. package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js.map +0 -7
  160. package/lib/esm/src/transaction/data/TransactionDataSource.js +0 -1
  161. package/lib/esm/src/transaction/data/TransactionDataSource.js.map +0 -7
  162. package/lib/esm/src/transaction/di/transactionModuleFactory.js +0 -2
  163. package/lib/esm/src/transaction/di/transactionModuleFactory.js.map +0 -7
  164. package/lib/esm/src/transaction/di/transactionTypes.js +0 -2
  165. package/lib/esm/src/transaction/di/transactionTypes.js.map +0 -7
  166. package/lib/esm/src/transaction/domain/TransactionContextLoader.js +0 -2
  167. package/lib/esm/src/transaction/domain/TransactionContextLoader.js.map +0 -7
  168. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js +0 -2
  169. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js.map +0 -7
  170. package/lib/types/src/shared/model/TransactionFieldContext.d.ts +0 -26
  171. package/lib/types/src/shared/model/TransactionFieldContext.d.ts.map +0 -1
  172. package/lib/types/src/transaction/data/HttpTransactionDataSource.d.ts.map +0 -1
  173. package/lib/types/src/transaction/data/HttpTransactionDataSource.test.d.ts +0 -2
  174. package/lib/types/src/transaction/data/HttpTransactionDataSource.test.d.ts.map +0 -1
  175. package/lib/types/src/transaction/data/TransactionDataSource.d.ts.map +0 -1
  176. package/lib/types/src/transaction/data/dto/CalldataDto.d.ts.map +0 -1
  177. package/lib/types/src/transaction/di/transactionModuleFactory.d.ts +0 -3
  178. package/lib/types/src/transaction/di/transactionModuleFactory.d.ts.map +0 -1
  179. package/lib/types/src/transaction/di/transactionTypes.d.ts +0 -5
  180. package/lib/types/src/transaction/di/transactionTypes.d.ts.map +0 -1
  181. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts +0 -12
  182. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts.map +0 -1
  183. package/lib/types/src/transaction/domain/TransactionContextLoader.test.d.ts +0 -2
  184. package/lib/types/src/transaction/domain/TransactionContextLoader.test.d.ts.map +0 -1
  185. /package/lib/cjs/src/{transaction → calldata}/data/dto/CalldataDto.js +0 -0
  186. /package/lib/esm/src/{shared/model/TransactionFieldContext.js.map → calldata/data/CalldataDescriptorDataSource.js.map} +0 -0
  187. /package/lib/esm/src/{transaction → calldata}/data/dto/CalldataDto.js +0 -0
  188. /package/lib/esm/src/{transaction → calldata}/data/dto/CalldataDto.js.map +0 -0
  189. /package/lib/types/src/{transaction → calldata}/data/dto/CalldataDto.d.ts +0 -0
@@ -1,2 +1,2 @@
1
- import{Left as i,Right as r}from"purify-ts";import{NftContextFieldLoader as c}from"../../nft/domain/NftContextFieldLoader";import{ContextFieldLoaderKind as n}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as s}from"../../shared/model/ClearSignContext";describe("NftContextFieldLoader",()=>{const a={getNftInfosPayload:vi.fn(),getSetPluginPayload:vi.fn()},d=new c(a),t={kind:n.NFT,chainId:1,address:"0x1234567890abcdef"},l="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid NFT field",()=>{const e={kind:n.NFT,chainId:1,address:"0x1234567890abcdef"};expect(d.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:n.NFT,address:"0x123"}},{name:"object missing address",value:{kind:n.NFT,chainId:1}},{name:"object with wrong kind",value:{kind:n.TOKEN,chainId:1,address:"0x123"}}];test.each(e)("$name",({value:o})=>{expect(d.canHandle(o)).toBe(!1)})})}),describe("loadField",()=>{it("should return error context when NFT data source fails",async()=>{const e=new Error("NFT data source error");vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(i(e));const o=await d.loadField(t);expect(a.getNftInfosPayload).toHaveBeenCalledWith({address:t.address,chainId:t.chainId}),expect(o).toEqual({type:s.ERROR,error:e})}),it("should return NFT context when successful",async()=>{vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(r(l));const e=await d.loadField(t);expect(a.getNftInfosPayload).toHaveBeenCalledWith({address:t.address,chainId:t.chainId}),expect(e).toEqual({type:s.NFT,payload:l})}),it("should handle different chain IDs and addresses correctly",async()=>{const e={...t,chainId:137,address:"0xdeadbeef"};vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(r(l));const o=await d.loadField(e);expect(a.getNftInfosPayload).toHaveBeenCalledWith({address:"0xdeadbeef",chainId:137}),expect(o).toEqual({type:s.NFT,payload:l})}),it("should preserve error message from NFT data source",async()=>{const e=new Error("Network timeout error");vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(i(e));const o=await d.loadField(t);expect(o).toEqual({type:s.ERROR,error:e})}),it("should handle empty NFT payload",async()=>{const e="";vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(r(e));const o=await d.loadField(t);expect(o).toEqual({type:s.NFT,payload:e})})})});
1
+ import{Left as r,Right as s}from"purify-ts";import{NftContextFieldLoader as c}from"../../nft/domain/NftContextFieldLoader";import{ClearSignContextType as l}from"../../shared/model/ClearSignContext";describe("NftContextFieldLoader",()=>{const t={getNftInfosPayload:vi.fn(),getSetPluginPayload:vi.fn()},d=new c(t),a={chainId:1,address:"0x1234567890abcdef"},n="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid NFT field",()=>{const e={chainId:1,address:"0x1234567890abcdef"};expect(d.canHandle(e,l.NFT)).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 chainId",value:{address:"0x123"}},{name:"object missing address",value:{chainId:1}}];test.each(e)("$name",({value:o})=>{expect(d.canHandle(o,l.NFT)).toBe(!1)})}),it("should return false for invalid expected type",()=>{expect(d.canHandle(a,l.TOKEN)).toBe(!1)})}),describe("loadField",()=>{it("should return error context when NFT data source fails",async()=>{const e=new Error("NFT data source error");vi.spyOn(t,"getNftInfosPayload").mockResolvedValue(r(e));const o=await d.loadField(a);expect(t.getNftInfosPayload).toHaveBeenCalledWith({address:a.address,chainId:a.chainId}),expect(o).toEqual({type:l.ERROR,error:e})}),it("should return NFT context when successful",async()=>{vi.spyOn(t,"getNftInfosPayload").mockResolvedValue(s(n));const e=await d.loadField(a);expect(t.getNftInfosPayload).toHaveBeenCalledWith({address:a.address,chainId:a.chainId}),expect(e).toEqual({type:l.NFT,payload:n})}),it("should handle different chain IDs and addresses correctly",async()=>{const e={...a,chainId:137,address:"0xdeadbeef"};vi.spyOn(t,"getNftInfosPayload").mockResolvedValue(s(n));const o=await d.loadField(e);expect(t.getNftInfosPayload).toHaveBeenCalledWith({address:"0xdeadbeef",chainId:137}),expect(o).toEqual({type:l.NFT,payload:n})}),it("should preserve error message from NFT data source",async()=>{const e=new Error("Network timeout error");vi.spyOn(t,"getNftInfosPayload").mockResolvedValue(r(e));const o=await d.loadField(a);expect(o).toEqual({type:l.ERROR,error:e})}),it("should handle empty NFT payload",async()=>{const e="";vi.spyOn(t,"getNftInfosPayload").mockResolvedValue(s(e));const o=await d.loadField(a);expect(o).toEqual({type:l.NFT,payload:e})})})});
2
2
  //# sourceMappingURL=NftContextFieldLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/nft/domain/NftContextFieldLoader.test.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { type NftDataSource } from \"@/nft/data/NftDataSource\";\nimport { NftContextFieldLoader } from \"@/nft/domain/NftContextFieldLoader\";\nimport { ContextFieldLoaderKind } from \"@/shared/domain/ContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\n\ndescribe(\"NftContextFieldLoader\", () => {\n const mockNftDataSource: NftDataSource = {\n getNftInfosPayload: vi.fn(),\n getSetPluginPayload: vi.fn(),\n };\n const nftContextFieldLoader = new NftContextFieldLoader(mockNftDataSource);\n\n const mockTransactionField: TransactionFieldContext<ContextFieldLoaderKind.NFT> =\n {\n kind: ContextFieldLoaderKind.NFT,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n const mockNftPayload = \"0x123456789abcdef0\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle\", () => {\n it(\"should return true for valid NFT field\", () => {\n // GIVEN\n const validField = {\n kind: ContextFieldLoaderKind.NFT,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n // THEN\n expect(nftContextFieldLoader.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.NFT, address: \"0x123\" },\n },\n {\n name: \"object missing address\",\n value: { kind: ContextFieldLoaderKind.NFT, chainId: 1 },\n },\n {\n name: \"object with wrong kind\",\n value: {\n kind: ContextFieldLoaderKind.TOKEN,\n chainId: 1,\n address: \"0x123\",\n },\n },\n ];\n\n test.each(invalidFields)(\"$name\", ({ value }) => {\n expect(nftContextFieldLoader.canHandle(value)).toBe(false);\n });\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when NFT data source fails\", async () => {\n // GIVEN\n const error = new Error(\"NFT data source error\");\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).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 NFT context when successful\", async () => {\n // GIVEN\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(mockNftPayload),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: mockNftPayload,\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(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(mockNftPayload),\n );\n\n // WHEN\n const result = await nftContextFieldLoader.loadField(customField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).toHaveBeenCalledWith({\n address: \"0xdeadbeef\",\n chainId: 137,\n });\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: mockNftPayload,\n });\n });\n\n it(\"should preserve error message from NFT data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Left(specificError),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty NFT payload\", async () => {\n // GIVEN\n const emptyPayload = \"\";\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(emptyPayload),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: emptyPayload,\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["Left", "Right", "NftContextFieldLoader", "ContextFieldLoaderKind", "ClearSignContextType", "mockNftDataSource", "nftContextFieldLoader", "mockTransactionField", "mockNftPayload", "validField", "invalidFields", "value", "error", "result", "customField", "specificError", "emptyPayload"]
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { type NftDataSource } from \"@/nft/data/NftDataSource\";\nimport { NftContextFieldLoader } from \"@/nft/domain/NftContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\ndescribe(\"NftContextFieldLoader\", () => {\n const mockNftDataSource: NftDataSource = {\n getNftInfosPayload: vi.fn(),\n getSetPluginPayload: vi.fn(),\n };\n const nftContextFieldLoader = new NftContextFieldLoader(mockNftDataSource);\n\n const mockTransactionField = {\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n const mockNftPayload = \"0x123456789abcdef0\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle\", () => {\n it(\"should return true for valid NFT field\", () => {\n // GIVEN\n const validField = {\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n // THEN\n expect(\n nftContextFieldLoader.canHandle(validField, ClearSignContextType.NFT),\n ).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 chainId\",\n value: { address: \"0x123\" },\n },\n {\n name: \"object missing address\",\n value: { chainId: 1 },\n },\n ];\n\n test.each(invalidFields)(\"$name\", ({ value }) => {\n expect(\n nftContextFieldLoader.canHandle(value, ClearSignContextType.NFT),\n ).toBe(false);\n });\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(\n nftContextFieldLoader.canHandle(\n mockTransactionField,\n ClearSignContextType.TOKEN,\n ),\n ).toBe(false);\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when NFT data source fails\", async () => {\n // GIVEN\n const error = new Error(\"NFT data source error\");\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).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 NFT context when successful\", async () => {\n // GIVEN\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(mockNftPayload),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: mockNftPayload,\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(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(mockNftPayload),\n );\n\n // WHEN\n const result = await nftContextFieldLoader.loadField(customField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).toHaveBeenCalledWith({\n address: \"0xdeadbeef\",\n chainId: 137,\n });\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: mockNftPayload,\n });\n });\n\n it(\"should preserve error message from NFT data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Left(specificError),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty NFT payload\", async () => {\n // GIVEN\n const emptyPayload = \"\";\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(emptyPayload),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: emptyPayload,\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "Right", "NftContextFieldLoader", "ClearSignContextType", "mockNftDataSource", "nftContextFieldLoader", "mockTransactionField", "mockNftPayload", "validField", "invalidFields", "value", "error", "result", "customField", "specificError", "emptyPayload"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var d=(o,e,a,t)=>{for(var r=t>1?void 0:t?m(e,a):e,n=o.length-1,l;n>=0;n--)(l=o[n])&&(r=(t?l(e,a,r):l(r))||r);return t&&r&&s(e,a,r),r},c=(o,e)=>(a,t)=>e(a,t,o);import{inject as p,injectable as C}from"inversify";import{pkiTypes as x}from"../../pki/di/pkiTypes";import{KeyId as g}from"../../pki/model/KeyId";import{KeyUsage as u}from"../../pki/model/KeyUsage";import{proxyTypes as I}from"../../proxy/di/proxyTypes";import{ContextFieldLoaderKind as L}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as y}from"../../shared/model/ClearSignContext";let i=class{constructor(e,a){this._proxyDataSource=e;this._certificateLoader=a}canHandle(e){return typeof e=="object"&&e!==null&&"kind"in e&&e.kind===L.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:t=>Promise.resolve({type:y.ERROR,error:t}),Right:async({signedDescriptor:t})=>{const r=await this._certificateLoader.loadCertificate({keyId:g.CalCalldataKey,keyUsage:u.Calldata,targetDevice:e.deviceModelId});return{type:y.PROXY_DELEGATE_CALL,payload:t,certificate:r}}})}};i=d([C(),c(0,p(I.ProxyDataSource)),c(1,p(x.PkiCertificateLoader))],i);export{i as ProxyContextFieldLoader};
1
+ var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var y=(o,e,a,r)=>{for(var t=r>1?void 0:r?m(e,a):e,l=o.length-1,d;l>=0;l--)(d=o[l])&&(t=(r?d(e,a,t):d(t))||t);return r&&t&&s(e,a,t),t},c=(o,e)=>(a,r)=>e(a,r,o);import{inject as p,injectable as f}from"inversify";import{pkiTypes as g}from"../../pki/di/pkiTypes";import{KeyId as x}from"../../pki/model/KeyId";import{KeyUsage as C}from"../../pki/model/KeyUsage";import{proxyTypes as I}from"../../proxy/di/proxyTypes";import{ClearSignContextType as n}from"../../shared/model/ClearSignContext";let i=class{constructor(e,a){this._proxyDataSource=e;this._certificateLoader=a}canHandle(e,a){return a===n.PROXY_INFO&&typeof e=="object"&&e!==null&&"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:r=>Promise.resolve({type:n.ERROR,error:r}),Right:async({signedDescriptor:r})=>{const t=await this._certificateLoader.loadCertificate({keyId:x.CalCalldataKey,keyUsage:C.Calldata,targetDevice:e.deviceModelId});return{type:n.PROXY_INFO,payload:r,certificate:t}}})}};i=y([f(),c(0,p(I.ProxyDataSource)),c(1,p(g.PkiCertificateLoader))],i);export{i as 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 { 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": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,SAAAC,MAAa,oBACtB,OAAS,YAAAC,MAAgB,uBAEzB,OAAS,cAAAC,MAAkB,wBAE3B,OAEE,0BAAAC,MACK,qCACP,OAEE,wBAAAC,MACK,kCAYA,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,OAASC,EAAuB,qBACtC,YAAaD,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,KAAOE,GACL,QAAQ,QAAQ,CACd,KAAMC,EAAqB,MAC3B,MAAOD,CACT,CAAC,EACH,MAAO,MAAO,CAAE,iBAAAE,CAAiB,IAAyB,CACxD,MAAMC,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAOC,EAAM,eACb,SAAUC,EAAS,SACnB,aAAcP,EAAM,aACtB,CAAC,EAED,MAAO,CACL,KAAMG,EAAqB,oBAC3B,QAASC,EACT,YAAAC,CACF,CACF,CACF,CAAC,CACH,CACF,EAtDaR,EAANW,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAW,eAAe,GAEjCF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,IAN5BhB",
6
- "names": ["inject", "injectable", "pkiTypes", "KeyId", "KeyUsage", "proxyTypes", "ContextFieldLoaderKind", "ClearSignContextType", "ProxyContextFieldLoader", "_proxyDataSource", "_certificateLoader", "field", "ContextFieldLoaderKind", "error", "ClearSignContextType", "signedDescriptor", "certificate", "KeyId", "KeyUsage", "__decorateClass", "injectable", "__decorateParam", "inject", "proxyTypes", "pkiTypes"]
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 { type ContextFieldLoader } from \"@/shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\ntype ProxyFieldInput = {\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(\n input: unknown,\n expectedType: ClearSignContextType,\n ): input is ProxyFieldInput {\n return (\n expectedType === ClearSignContextType.PROXY_INFO &&\n typeof input === \"object\" &&\n input !== null &&\n \"chainId\" in input &&\n \"proxyAddress\" in input &&\n \"calldata\" in input &&\n \"challenge\" in input &&\n \"deviceModelId\" in input\n );\n }\n\n async loadField(input: ProxyFieldInput): Promise<ClearSignContext> {\n const proxyDelegateCall =\n await this._proxyDataSource.getProxyImplementationAddress({\n calldata: input.calldata,\n proxyAddress: input.proxyAddress,\n chainId: input.chainId,\n challenge: input.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: input.deviceModelId,\n });\n\n return {\n type: ClearSignContextType.PROXY_INFO,\n payload: signedDescriptor,\n certificate,\n };\n },\n });\n }\n}\n"],
5
+ "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,SAAAC,MAAa,oBACtB,OAAS,YAAAC,MAAgB,uBAEzB,OAAS,cAAAC,MAAkB,wBAG3B,OAEE,wBAAAC,MACK,kCAWA,IAAMC,EAAN,KAEP,CACE,YAEUC,EAEAC,EACR,CAHQ,sBAAAD,EAEA,wBAAAC,CACP,CAEH,UACEC,EACAC,EAC0B,CAC1B,OACEA,IAAiBC,EAAqB,YACtC,OAAOF,GAAU,UACjBA,IAAU,MACV,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,KAAOG,GACL,QAAQ,QAAQ,CACd,KAAMD,EAAqB,MAC3B,MAAOC,CACT,CAAC,EACH,MAAO,MAAO,CAAE,iBAAAC,CAAiB,IAAyB,CACxD,MAAMC,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAOC,EAAM,eACb,SAAUC,EAAS,SACnB,aAAcP,EAAM,aACtB,CAAC,EAED,MAAO,CACL,KAAME,EAAqB,WAC3B,QAASE,EACT,YAAAC,CACF,CACF,CACF,CAAC,CACH,CACF,EAxDaR,EAANW,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAW,eAAe,GAEjCF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,IAN5BhB",
6
+ "names": ["inject", "injectable", "pkiTypes", "KeyId", "KeyUsage", "proxyTypes", "ClearSignContextType", "ProxyContextFieldLoader", "_proxyDataSource", "_certificateLoader", "input", "expectedType", "ClearSignContextType", "error", "signedDescriptor", "certificate", "KeyId", "KeyUsage", "__decorateClass", "injectable", "__decorateParam", "inject", "proxyTypes", "pkiTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as r}from"@ledgerhq/device-management-kit";import{Left as x,Right as p}from"purify-ts";import{KeyId as y}from"../../pki/model/KeyId";import{KeyUsage as m}from"../../pki/model/KeyUsage";import{ProxyContextFieldLoader as u}from"../../proxy/domain/ProxyContextFieldLoader";import{ContextFieldLoaderKind as n}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as s}from"../../shared/model/ClearSignContext";describe("ProxyContextFieldLoader",()=>{const t={getProxyImplementationAddress:vi.fn()},d={loadCertificate:vi.fn()},o=new u(t,d),e={kind:n.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x1234567890abcdef",calldata:"0xabcdef1234567890",challenge:"test-challenge",deviceModelId:r.STAX},i={implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0"},c={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.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x1234567890abcdef",calldata:"0xabcdef1234567890",challenge:"test-challenge",deviceModelId:r.STAX};expect(o.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:r.STAX}},{name:"object missing chainId",value:{kind:n.PROXY_DELEGATE_CALL,proxyAddress:"0x123",calldata:"0xabc",challenge:"test",deviceModelId:r.STAX}},{name:"object missing proxyAddress",value:{kind:n.PROXY_DELEGATE_CALL,chainId:1,calldata:"0xabc",challenge:"test",deviceModelId:r.STAX}},{name:"object missing calldata",value:{kind:n.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x123",challenge:"test",deviceModelId:r.STAX}},{name:"object missing challenge",value:{kind:n.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x123",calldata:"0xabc",deviceModelId:r.STAX}},{name:"object missing deviceModelId",value:{kind:n.PROXY_DELEGATE_CALL,chainId:1,proxyAddress:"0x123",calldata:"0xabc",challenge:"test"}},{name:"object with wrong kind",value:{kind:n.TOKEN,chainId:1,proxyAddress:"0x123",calldata:"0xabc",challenge:"test",deviceModelId:r.STAX}}];test.each(a)("$name",({value:l})=>{expect(o.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(x(a));const l=await o.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(l).toEqual({type:s.ERROR,error:a}),expect(d.loadCertificate).not.toHaveBeenCalled()}),it("should return proxy delegate call context when successful",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(p(i)),vi.spyOn(d,"loadCertificate").mockResolvedValue(c);const a=await o.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(d.loadCertificate).toHaveBeenCalledWith({keyId:y.CalCalldataKey,keyUsage:m.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:s.PROXY_DELEGATE_CALL,payload:i.signedDescriptor,certificate:c})}),it("should return proxy delegate call context with undefined certificate when certificate loading returns undefined",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(p(i)),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await o.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(d.loadCertificate).toHaveBeenCalledWith({keyId:y.CalCalldataKey,keyUsage:m.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:s.PROXY_DELEGATE_CALL,payload:i.signedDescriptor,certificate:void 0})}),it("should handle different device model IDs correctly",async()=>{const a={...e,deviceModelId:r.NANO_X};vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(p(i)),vi.spyOn(d,"loadCertificate").mockResolvedValue(c);const l=await o.loadField(a);expect(d.loadCertificate).toHaveBeenCalledWith({keyId:y.CalCalldataKey,keyUsage:m.Calldata,targetDevice:r.NANO_X}),expect(l).toEqual({type:s.PROXY_DELEGATE_CALL,payload:i.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,"getProxyImplementationAddress").mockResolvedValue(p(i)),vi.spyOn(d,"loadCertificate").mockResolvedValue(c);const l=await o.loadField(a);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:"0xcafebabe",proxyAddress:"0xdeadbeef",chainId:137,challenge:"custom-challenge"}),expect(l).toEqual({type:s.PROXY_DELEGATE_CALL,payload:i.signedDescriptor,certificate:c})}),it("should handle certificate loading failure gracefully",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(p(i)),vi.spyOn(d,"loadCertificate").mockRejectedValue(new Error("Certificate loading failed")),await expect(o.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(x(a));const l=await o.loadField(e);expect(l).toEqual({type:s.ERROR,error:a})}),it("should handle empty signed descriptor",async()=>{const a={...i,signedDescriptor:""};vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(p(a)),vi.spyOn(d,"loadCertificate").mockResolvedValue(c);const l=await o.loadField(e);expect(l).toEqual({type:s.PROXY_DELEGATE_CALL,payload:"",certificate:c})})})});
1
+ import{DeviceModelId as n}from"@ledgerhq/device-management-kit";import{Left as m,Right as s}from"purify-ts";import{KeyId as p}from"../../pki/model/KeyId";import{KeyUsage as y}from"../../pki/model/KeyUsage";import{ProxyContextFieldLoader as x}from"../../proxy/domain/ProxyContextFieldLoader";import{ClearSignContextType as i}from"../../shared/model/ClearSignContext";describe("ProxyContextFieldLoader",()=>{const t={getProxyImplementationAddress:vi.fn()},l={loadCertificate:vi.fn()},d=new x(t,l),e={chainId:1,proxyAddress:"0x1234567890abcdef",calldata:"0xabcdef1234567890",challenge:"test-challenge",deviceModelId:n.STAX},r={implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0"},c={keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])};beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid proxy field",()=>{const a={chainId:1,proxyAddress:"0x1234567890abcdef",calldata:"0xabcdef1234567890",challenge:"test-challenge",deviceModelId:n.STAX};expect(d.canHandle(a,i.PROXY_INFO)).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 chainId",value:{proxyAddress:"0x123",calldata:"0xabc",challenge:"test",deviceModelId:n.STAX}},{name:"object missing proxyAddress",value:{chainId:1,calldata:"0xabc",challenge:"test",deviceModelId:n.STAX}},{name:"object missing calldata",value:{chainId:1,proxyAddress:"0x123",challenge:"test",deviceModelId:n.STAX}},{name:"object missing challenge",value:{chainId:1,proxyAddress:"0x123",calldata:"0xabc",deviceModelId:n.STAX}},{name:"object missing deviceModelId",value:{chainId:1,proxyAddress:"0x123",calldata:"0xabc",challenge:"test"}}];test.each(a)("$name",({value:o})=>{expect(d.canHandle(o,i.PROXY_INFO)).toBe(!1)})}),it("should return false for invalid expected type",()=>{expect(d.canHandle(e,i.TOKEN)).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(m(a));const o=await d.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(o).toEqual({type:i.ERROR,error:a}),expect(l.loadCertificate).not.toHaveBeenCalled()}),it("should return proxy delegate call context when successful",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(s(r)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const a=await d.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(l.loadCertificate).toHaveBeenCalledWith({keyId:p.CalCalldataKey,keyUsage:y.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:i.PROXY_INFO,payload:r.signedDescriptor,certificate:c})}),it("should return proxy delegate call context with undefined certificate when certificate loading returns undefined",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(s(r)),vi.spyOn(l,"loadCertificate").mockResolvedValue(void 0);const a=await d.loadField(e);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:e.calldata,proxyAddress:e.proxyAddress,chainId:e.chainId,challenge:e.challenge}),expect(l.loadCertificate).toHaveBeenCalledWith({keyId:p.CalCalldataKey,keyUsage:y.Calldata,targetDevice:e.deviceModelId}),expect(a).toEqual({type:i.PROXY_INFO,payload:r.signedDescriptor,certificate:void 0})}),it("should handle different device model IDs correctly",async()=>{const a={...e,deviceModelId:n.NANO_X};vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(s(r)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const o=await d.loadField(a);expect(l.loadCertificate).toHaveBeenCalledWith({keyId:p.CalCalldataKey,keyUsage:y.Calldata,targetDevice:n.NANO_X}),expect(o).toEqual({type:i.PROXY_INFO,payload:r.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,"getProxyImplementationAddress").mockResolvedValue(s(r)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const o=await d.loadField(a);expect(t.getProxyImplementationAddress).toHaveBeenCalledWith({calldata:"0xcafebabe",proxyAddress:"0xdeadbeef",chainId:137,challenge:"custom-challenge"}),expect(o).toEqual({type:i.PROXY_INFO,payload:r.signedDescriptor,certificate:c})}),it("should handle certificate loading failure gracefully",async()=>{vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(s(r)),vi.spyOn(l,"loadCertificate").mockRejectedValue(new Error("Certificate loading failed")),await expect(d.loadField(e)).rejects.toThrow("Certificate loading failed"),expect(t.getProxyImplementationAddress).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,"getProxyImplementationAddress").mockResolvedValue(m(a));const o=await d.loadField(e);expect(o).toEqual({type:i.ERROR,error:a})}),it("should handle empty signed descriptor",async()=>{const a={...r,signedDescriptor:""};vi.spyOn(t,"getProxyImplementationAddress").mockResolvedValue(s(a)),vi.spyOn(l,"loadCertificate").mockResolvedValue(c);const o=await d.loadField(e);expect(o).toEqual({type:i.PROXY_INFO,payload:"",certificate:c})})})});
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/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": ["DeviceModelId", "Left", "Right", "KeyId", "KeyUsage", "ProxyContextFieldLoader", "ContextFieldLoaderKind", "ClearSignContextType", "mockProxyDataSource", "mockCertificateLoader", "proxyContextFieldLoader", "mockTransactionField", "mockProxyDelegateCall", "mockCertificate", "validField", "invalidFields", "value", "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 { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\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 = {\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 chainId: 1,\n proxyAddress: \"0x1234567890abcdef\",\n calldata: \"0xabcdef1234567890\",\n challenge: \"test-challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // THEN\n expect(\n proxyContextFieldLoader.canHandle(\n validField,\n ClearSignContextType.PROXY_INFO,\n ),\n ).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 chainId\",\n value: {\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing proxyAddress\",\n value: {\n chainId: 1,\n calldata: \"0xabc\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing calldata\",\n value: {\n chainId: 1,\n proxyAddress: \"0x123\",\n challenge: \"test\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing challenge\",\n value: {\n chainId: 1,\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n deviceModelId: DeviceModelId.STAX,\n },\n },\n {\n name: \"object missing deviceModelId\",\n value: {\n chainId: 1,\n proxyAddress: \"0x123\",\n calldata: \"0xabc\",\n challenge: \"test\",\n },\n },\n ];\n\n test.each(invalidFields)(\"$name\", ({ value }) => {\n expect(\n proxyContextFieldLoader.canHandle(\n value,\n ClearSignContextType.PROXY_INFO,\n ),\n ).toBe(false);\n });\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(\n proxyContextFieldLoader.canHandle(\n mockTransactionField,\n ClearSignContextType.TOKEN,\n ),\n ).toBe(false);\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_INFO,\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_INFO,\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_INFO,\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_INFO,\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_INFO,\n payload: \"\",\n certificate: mockCertificate,\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["DeviceModelId", "Left", "Right", "KeyId", "KeyUsage", "ProxyContextFieldLoader", "ClearSignContextType", "mockProxyDataSource", "mockCertificateLoader", "proxyContextFieldLoader", "mockTransactionField", "mockProxyDelegateCall", "mockCertificate", "validField", "invalidFields", "value", "error", "result", "nanoXField", "customField", "specificError", "proxyCallWithEmptyDescriptor"]
7
7
  }
@@ -1,2 +1 @@
1
- var n=(e=>(e.PROXY_DELEGATE_CALL="proxy_delegate_call",e.TOKEN="token",e.NFT="nft",e.TRUSTED_NAME="trusted_name",e))(n||{});export{n as ContextFieldLoaderKind};
2
1
  //# sourceMappingURL=ContextFieldLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../../src/shared/domain/ContextFieldLoader.ts"],
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": "AAEO,IAAKA,OACVA,EAAA,oBAAsB,sBACtBA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,eAJLA,OAAA",
6
- "names": ["ContextFieldLoaderKind"]
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var r=(e=>(e.TOKEN="token",e.NFT="nft",e.TRUSTED_NAME="trustedName",e.PLUGIN="plugin",e.EXTERNAL_PLUGIN="externalPlugin",e.TRANSACTION_INFO="transactionInfo",e.PROXY_DELEGATE_CALL="proxyDelegateCall",e.ENUM="enum",e.TRANSACTION_FIELD_DESCRIPTION="transactionFieldDescription",e.WEB3_CHECK="web3Check",e.DYNAMIC_NETWORK="dynamicNetwork",e.DYNAMIC_NETWORK_ICON="dynamicNetworkIcon",e.ERROR="error",e))(r||{}),n=(t=>(t.TOKEN="token",t.NFT="nft",t.TRUSTED_NAME="trustedName",t.ENUM="enum",t.CALLDATA="calldata",t))(n||{});export{n as ClearSignContextReferenceType,r as ClearSignContextType};
1
+ var r=(e=>(e.TOKEN="token",e.NFT="nft",e.TRUSTED_NAME="trustedName",e.PLUGIN="plugin",e.EXTERNAL_PLUGIN="externalPlugin",e.TRANSACTION_INFO="transactionInfo",e.PROXY_INFO="proxyInfo",e.ENUM="enum",e.TRANSACTION_FIELD_DESCRIPTION="transactionFieldDescription",e.WEB3_CHECK="web3Check",e.DYNAMIC_NETWORK="dynamicNetwork",e.DYNAMIC_NETWORK_ICON="dynamicNetworkIcon",e.ERROR="error",e))(r||{}),n=(t=>(t.TOKEN="token",t.NFT="nft",t.TRUSTED_NAME="trustedName",t.ENUM="enum",t.CALLDATA="calldata",t))(n||{});export{n as ClearSignContextReferenceType,r as ClearSignContextType};
2
2
  //# sourceMappingURL=ClearSignContext.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/model/ClearSignContext.ts"],
4
- "sourcesContent": ["import { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\n\nimport { type GenericPath } from \"./GenericPath\";\n\nexport enum ClearSignContextType {\n TOKEN = \"token\",\n NFT = \"nft\",\n TRUSTED_NAME = \"trustedName\",\n PLUGIN = \"plugin\",\n EXTERNAL_PLUGIN = \"externalPlugin\",\n TRANSACTION_INFO = \"transactionInfo\",\n PROXY_DELEGATE_CALL = \"proxyDelegateCall\",\n ENUM = \"enum\",\n TRANSACTION_FIELD_DESCRIPTION = \"transactionFieldDescription\",\n WEB3_CHECK = \"web3Check\",\n DYNAMIC_NETWORK = \"dynamicNetwork\",\n DYNAMIC_NETWORK_ICON = \"dynamicNetworkIcon\",\n ERROR = \"error\",\n}\n\nexport enum ClearSignContextReferenceType {\n TOKEN = ClearSignContextType.TOKEN,\n NFT = ClearSignContextType.NFT,\n TRUSTED_NAME = ClearSignContextType.TRUSTED_NAME,\n ENUM = ClearSignContextType.ENUM,\n CALLDATA = \"calldata\",\n}\n\nexport type ClearSignContextReference<\n Type extends ClearSignContextReferenceType = ClearSignContextReferenceType,\n> = Type extends ClearSignContextReferenceType.ENUM\n ? {\n type: ClearSignContextReferenceType.ENUM;\n valuePath: GenericPath;\n id: number; // enum id to reference\n }\n : Type extends ClearSignContextReferenceType.TRUSTED_NAME\n ? {\n type: ClearSignContextReferenceType.TRUSTED_NAME;\n valuePath: GenericPath;\n types: string[];\n sources: string[];\n }\n : Type extends ClearSignContextReferenceType.CALLDATA\n ? {\n type: ClearSignContextReferenceType.CALLDATA;\n callee: GenericPath;\n valuePath: GenericPath;\n selector?: GenericPath;\n amount?: GenericPath;\n spender?: GenericPath;\n chainId?: GenericPath;\n }\n :\n | {\n type: Type;\n valuePath: GenericPath;\n value?: never;\n }\n | {\n type: Type;\n valuePath?: never;\n value: string;\n };\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\nexport type ClearSignContextSuccess<\n T extends Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n > = ClearSignContextSuccessType,\n> = T extends ClearSignContextType.ENUM\n ? {\n type: ClearSignContextType.ENUM;\n id: number;\n payload: string;\n value: number;\n certificate?: PkiCertificate;\n }\n : T extends ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION\n ? {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION;\n payload: string;\n reference?: ClearSignContextReference;\n certificate?: PkiCertificate;\n }\n : {\n type: T;\n payload: string;\n certificate?: PkiCertificate;\n };\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
5
- "mappings": "AAIO,IAAKA,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,OAAS,SACTA,EAAA,gBAAkB,iBAClBA,EAAA,iBAAmB,kBACnBA,EAAA,oBAAsB,oBACtBA,EAAA,KAAO,OACPA,EAAA,8BAAgC,8BAChCA,EAAA,WAAa,YACbA,EAAA,gBAAkB,iBAClBA,EAAA,qBAAuB,qBACvBA,EAAA,MAAQ,QAbEA,OAAA,IAgBAC,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,KAAO,OACPA,EAAA,SAAW,WALDA,OAAA",
4
+ "sourcesContent": ["import { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\n\nimport { type GenericPath } from \"./GenericPath\";\n\nexport enum ClearSignContextType {\n TOKEN = \"token\",\n NFT = \"nft\",\n TRUSTED_NAME = \"trustedName\",\n PLUGIN = \"plugin\",\n EXTERNAL_PLUGIN = \"externalPlugin\",\n TRANSACTION_INFO = \"transactionInfo\",\n PROXY_INFO = \"proxyInfo\",\n ENUM = \"enum\",\n TRANSACTION_FIELD_DESCRIPTION = \"transactionFieldDescription\",\n WEB3_CHECK = \"web3Check\",\n DYNAMIC_NETWORK = \"dynamicNetwork\",\n DYNAMIC_NETWORK_ICON = \"dynamicNetworkIcon\",\n ERROR = \"error\",\n}\n\nexport enum ClearSignContextReferenceType {\n TOKEN = ClearSignContextType.TOKEN,\n NFT = ClearSignContextType.NFT,\n TRUSTED_NAME = ClearSignContextType.TRUSTED_NAME,\n ENUM = ClearSignContextType.ENUM,\n CALLDATA = \"calldata\",\n}\n\nexport type ClearSignContextReference<\n Type extends ClearSignContextReferenceType = ClearSignContextReferenceType,\n> = Type extends ClearSignContextReferenceType.ENUM\n ? {\n type: ClearSignContextReferenceType.ENUM;\n valuePath: GenericPath;\n id: number; // enum id to reference\n }\n : Type extends ClearSignContextReferenceType.TRUSTED_NAME\n ? {\n type: ClearSignContextReferenceType.TRUSTED_NAME;\n valuePath: GenericPath;\n types: string[];\n sources: string[];\n }\n : Type extends ClearSignContextReferenceType.CALLDATA\n ? {\n type: ClearSignContextReferenceType.CALLDATA;\n callee: GenericPath;\n valuePath: GenericPath;\n selector?: GenericPath;\n amount?: GenericPath;\n spender?: GenericPath;\n chainId?: GenericPath;\n }\n :\n | {\n type: Type;\n valuePath: GenericPath;\n value?: never;\n }\n | {\n type: Type;\n valuePath?: never;\n value: string;\n };\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\nexport type ClearSignContextSuccess<\n T extends Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n > = ClearSignContextSuccessType,\n> = T extends ClearSignContextType.ENUM\n ? {\n type: ClearSignContextType.ENUM;\n id: number;\n payload: string;\n value: number;\n certificate?: PkiCertificate;\n }\n : T extends ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION\n ? {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION;\n payload: string;\n reference?: ClearSignContextReference;\n certificate?: PkiCertificate;\n }\n : {\n type: T;\n payload: string;\n certificate?: PkiCertificate;\n };\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
5
+ "mappings": "AAIO,IAAKA,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,OAAS,SACTA,EAAA,gBAAkB,iBAClBA,EAAA,iBAAmB,kBACnBA,EAAA,WAAa,YACbA,EAAA,KAAO,OACPA,EAAA,8BAAgC,8BAChCA,EAAA,WAAa,YACbA,EAAA,gBAAkB,iBAClBA,EAAA,qBAAuB,qBACvBA,EAAA,MAAQ,QAbEA,OAAA,IAgBAC,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,KAAO,OACPA,EAAA,SAAW,WALDA,OAAA",
6
6
  "names": ["ClearSignContextType", "ClearSignContextReferenceType"]
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?: ClearSignContextSuccess<ClearSignContextType.PROXY_DELEGATE_CALL>;\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_INFO>;\n};\nexport type TypedDataClearSignContextError = {\n type: \"error\";\n error: Error;\n};\nexport type TypedDataClearSignContext =\n | TypedDataClearSignContextSuccess\n | TypedDataClearSignContextError;\n"],
5
5
  "mappings": "AAqBO,MAAMA,EAAiC,IA6CvC,IAAKC,OACVA,EAAA,KAAO,OACPA,EAAA,QAAU,UACVA,EAAA,kBAAoB,qBAHVA,OAAA",
6
6
  "names": ["VERIFYING_CONTRACT_TOKEN_INDEX", "TypedDataCalldataParamPresence"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var c=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var l=(a,e,o,t)=>{for(var n=t>1?void 0:t?m(e,o):e,i=a.length-1,d;i>=0;i--)(d=a[i])&&(n=(t?d(e,o,n):d(n))||n);return t&&n&&c(e,o,n),n},p=(a,e)=>(o,t)=>e(o,t,a);import{inject as y,injectable as u}from"inversify";import{ContextFieldLoaderKind as C}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as s}from"../../shared/model/ClearSignContext";import{tokenTypes as k}from"../../token/di/tokenTypes";let r=class{constructor(e){this._dataSource=e}canHandle(e){return typeof e=="object"&&e!==null&&"kind"in e&&e.kind===C.TOKEN&&"chainId"in e&&"address"in e}async loadField(e){return(await this._dataSource.getTokenInfosPayload({address:e.address,chainId:e.chainId})).caseOf({Left:t=>({type:s.ERROR,error:t}),Right:t=>({type:s.TOKEN,payload:t})})}};r=l([u(),p(0,y(k.TokenDataSource))],r);export{r as TokenContextFieldLoader};
1
+ var c=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var l=(o,e,a,t)=>{for(var n=t>1?void 0:t?y(e,a):e,i=o.length-1,d;i>=0;i--)(d=o[i])&&(n=(t?d(e,a,n):d(n))||n);return t&&n&&c(e,a,n),n},s=(o,e)=>(a,t)=>e(a,t,o);import{inject as m,injectable as u}from"inversify";import{ClearSignContextType as p}from"../../shared/model/ClearSignContext";import{tokenTypes as C}from"../../token/di/tokenTypes";let r=class{constructor(e){this._dataSource=e}canHandle(e,a){return a===p.TOKEN&&typeof e=="object"&&e!==null&&"chainId"in e&&"address"in e}async loadField(e){return(await this._dataSource.getTokenInfosPayload({address:e.address,chainId:e.chainId})).caseOf({Left:t=>({type:p.ERROR,error:t}),Right:t=>({type:p.TOKEN,payload:t})})}};r=l([u(),s(0,m(C.TokenDataSource))],r);export{r as 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 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": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAEE,0BAAAC,MACK,qCACP,OAEE,wBAAAC,MACK,kCAEP,OAAS,cAAAC,MAAkB,wBASpB,IAAMC,EAAN,KAEP,CACE,YAC8CC,EAC5C,CAD4C,iBAAAA,CAC3C,CAEH,UAAUC,EAA0C,CAClD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,SAAUA,GACVA,EAAM,OAASC,EAAuB,OACtC,YAAaD,GACb,YAAaA,CAEjB,CAEA,MAAM,UAAUE,EAAmD,CAKjE,OAJgB,MAAM,KAAK,YAAY,qBAAqB,CAC1D,QAASA,EAAM,QACf,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOC,IAA6B,CAClC,KAAMC,EAAqB,MAC3B,MAAAD,CACF,GACA,MAAQE,IAA6B,CACnC,KAAMD,EAAqB,MAC3B,QAASC,CACX,EACF,CAAC,CACH,CACF,EAlCaP,EAANQ,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAW,eAAe,IAJzBZ",
6
- "names": ["inject", "injectable", "ContextFieldLoaderKind", "ClearSignContextType", "tokenTypes", "TokenContextFieldLoader", "_dataSource", "input", "ContextFieldLoaderKind", "field", "error", "ClearSignContextType", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "tokenTypes"]
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { type ContextFieldLoader } 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 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(\n input: unknown,\n expectedType: ClearSignContextType,\n ): input is TokenFieldInput {\n return (\n expectedType === ClearSignContextType.TOKEN &&\n typeof input === \"object\" &&\n input !== null &&\n \"chainId\" in input &&\n \"address\" in input\n );\n }\n\n async loadField(input: TokenFieldInput): Promise<ClearSignContext> {\n const payload = await this._dataSource.getTokenInfosPayload({\n address: input.address,\n chainId: input.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": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAGnC,OAEE,wBAAAC,MACK,kCAEP,OAAS,cAAAC,MAAkB,wBAQpB,IAAMC,EAAN,KAEP,CACE,YAC8CC,EAC5C,CAD4C,iBAAAA,CAC3C,CAEH,UACEC,EACAC,EAC0B,CAC1B,OACEA,IAAiBC,EAAqB,OACtC,OAAOF,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,YAAaA,CAEjB,CAEA,MAAM,UAAUA,EAAmD,CAKjE,OAJgB,MAAM,KAAK,YAAY,qBAAqB,CAC1D,QAASA,EAAM,QACf,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOG,IAA6B,CAClC,KAAMD,EAAqB,MAC3B,MAAAC,CACF,GACA,MAAQC,IAA6B,CACnC,KAAMF,EAAqB,MAC3B,QAASE,CACX,EACF,CAAC,CACH,CACF,EApCaN,EAANO,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAW,eAAe,IAJzBX",
6
+ "names": ["inject", "injectable", "ClearSignContextType", "tokenTypes", "TokenContextFieldLoader", "_dataSource", "input", "expectedType", "ClearSignContextType", "error", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "tokenTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as i,Right as r}from"purify-ts";import{ContextFieldLoaderKind as d}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as s}from"../../shared/model/ClearSignContext";import{TokenContextFieldLoader as c}from"../../token/domain/TokenContextFieldLoader";describe("TokenContextFieldLoader",()=>{const a={getTokenInfosPayload:vi.fn()},t=new c(a),o={kind:d.TOKEN,chainId:1,address:"0x1234567890abcdef"},l="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid token field",()=>{const e={kind:d.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:d.TOKEN,address:"0x123"}},{name:"object missing address",value:{kind:d.TOKEN,chainId:1}},{name:"object with wrong kind",value:{kind:d.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(i(e));const n=await t.loadField(o);expect(a.getTokenInfosPayload).toHaveBeenCalledWith({address:o.address,chainId:o.chainId}),expect(n).toEqual({type:s.ERROR,error:e})}),it("should return token context when successful",async()=>{vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue(r(l));const e=await t.loadField(o);expect(a.getTokenInfosPayload).toHaveBeenCalledWith({address:o.address,chainId:o.chainId}),expect(e).toEqual({type:s.TOKEN,payload:l})}),it("should handle different chain IDs and addresses correctly",async()=>{const e={...o,chainId:137,address:"0xdeadbeef"};vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue(r(l));const n=await t.loadField(e);expect(a.getTokenInfosPayload).toHaveBeenCalledWith({address:"0xdeadbeef",chainId:137}),expect(n).toEqual({type:s.TOKEN,payload:l})}),it("should preserve error message from token data source",async()=>{const e=new Error("Network timeout error");vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue(i(e));const n=await t.loadField(o);expect(n).toEqual({type:s.ERROR,error:e})}),it("should handle empty token payload",async()=>{const e="";vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue(r(e));const n=await t.loadField(o);expect(n).toEqual({type:s.TOKEN,payload:e})})})});
1
+ import{Left as r,Right as l}from"purify-ts";import{ClearSignContextType as d}from"../../shared/model/ClearSignContext";import{TokenContextFieldLoader as i}from"../../token/domain/TokenContextFieldLoader";describe("TokenContextFieldLoader",()=>{const o={getTokenInfosPayload:vi.fn()},t=new i(o),a={kind:"TOKEN",chainId:1,address:"0x1234567890abcdef"},s="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid token field",()=>{const e={kind:"TOKEN",chainId:1,address:"0x1234567890abcdef"};expect(t.canHandle(e,d.TOKEN)).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 chainId",value:{kind:"TOKEN",address:"0x123"}},{name:"object missing address",value:{kind:"TOKEN",chainId:1}}];test.each(e)("$name",({value:n})=>{expect(t.canHandle(n,d.TOKEN)).toBe(!1)})}),it("should return false for invalid expected type",()=>{expect(t.canHandle(a,d.NFT)).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(o,"getTokenInfosPayload").mockResolvedValue(r(e));const n=await t.loadField(a);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:a.address,chainId:a.chainId}),expect(n).toEqual({type:d.ERROR,error:e})}),it("should return token context when successful",async()=>{vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue(l(s));const e=await t.loadField(a);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:a.address,chainId:a.chainId}),expect(e).toEqual({type:d.TOKEN,payload:s})}),it("should handle different chain IDs and addresses correctly",async()=>{const e={...a,chainId:137,address:"0xdeadbeef"};vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue(l(s));const n=await t.loadField(e);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:"0xdeadbeef",chainId:137}),expect(n).toEqual({type:d.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(r(e));const n=await t.loadField(a);expect(n).toEqual({type:d.ERROR,error:e})}),it("should handle empty token payload",async()=>{const e="";vi.spyOn(o,"getTokenInfosPayload").mockResolvedValue(l(e));const n=await t.loadField(a);expect(n).toEqual({type:d.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(\"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": "AAAA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAE5B,OAAS,0BAAAC,MAA8B,qCACvC,OAAS,wBAAAC,MAA4B,kCAGrC,OAAS,2BAAAC,MAA+B,yCAExC,SAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAuC,CAC3C,qBAAsB,GAAG,GAAG,CAC9B,EACMC,EAA0B,IAAIF,EAClCC,CACF,EAEME,EACJ,CACE,KAAML,EAAuB,MAC7B,QAAS,EACT,QAAS,oBACX,EAEIM,EAAmB,qBAEzB,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,YAAa,IAAM,CAC1B,GAAG,2CAA4C,IAAM,CAEnD,MAAMC,EAAa,CACjB,KAAMP,EAAuB,MAC7B,QAAS,EACT,QAAS,oBACX,EAGA,OAAOI,EAAwB,UAAUG,CAAU,CAAC,EAAE,KAAK,EAAI,CACjE,CAAC,EAED,SAAS,yCAA0C,IAAM,CACvD,MAAMC,EAAgB,CACpB,CAAE,KAAM,OAAQ,MAAO,IAAK,EAC5B,CAAE,KAAM,YAAa,MAAO,MAAU,EACtC,CAAE,KAAM,SAAU,MAAO,SAAU,EACnC,CAAE,KAAM,SAAU,MAAO,GAAI,EAC7B,CAAE,KAAM,UAAW,MAAO,EAAK,EAC/B,CAAE,KAAM,QAAS,MAAO,CAAC,CAAE,EAC3B,CAAE,KAAM,eAAgB,MAAO,CAAC,CAAE,EAClC,CACE,KAAM,sBACN,MAAO,CAAE,QAAS,EAAG,QAAS,OAAQ,CACxC,EACA,CACE,KAAM,yBACN,MAAO,CAAE,KAAMR,EAAuB,MAAO,QAAS,OAAQ,CAChE,EACA,CACE,KAAM,yBACN,MAAO,CAAE,KAAMA,EAAuB,MAAO,QAAS,CAAE,CAC1D,EACA,CACE,KAAM,yBACN,MAAO,CACL,KAAMA,EAAuB,IAC7B,QAAS,EACT,QAAS,OACX,CACF,CACF,EAEA,KAAK,KAAKQ,CAAa,EAAE,QAAS,CAAC,CAAE,MAAAC,CAAM,IAAM,CAC/C,OAAOL,EAAwB,UAAUK,CAAK,CAAC,EAAE,KAAK,EAAK,CAC7D,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,YAAa,IAAM,CAC1B,GAAG,2DAA4D,SAAY,CAEzE,MAAMC,EAAQ,IAAI,MAAM,yBAAyB,EACjD,GAAG,MAAMP,EAAqB,sBAAsB,EAAE,kBACpDL,EAAKY,CAAK,CACZ,EAGA,MAAMC,EACJ,MAAMP,EAAwB,UAAUC,CAAoB,EAG9D,OAAOF,EAAoB,oBAAoB,EAAE,qBAAqB,CACpE,QAASE,EAAqB,QAC9B,QAASA,EAAqB,OAChC,CAAC,EACD,OAAOM,CAAM,EAAE,QAAQ,CACrB,KAAMV,EAAqB,MAC3B,MAAOS,CACT,CAAC,CACH,CAAC,EAED,GAAG,8CAA+C,SAAY,CAE5D,GAAG,MAAMP,EAAqB,sBAAsB,EAAE,kBACpDJ,EAAMO,CAAgB,CACxB,EAGA,MAAMK,EACJ,MAAMP,EAAwB,UAAUC,CAAoB,EAG9D,OAAOF,EAAoB,oBAAoB,EAAE,qBAAqB,CACpE,QAASE,EAAqB,QAC9B,QAASA,EAAqB,OAChC,CAAC,EACD,OAAOM,CAAM,EAAE,QAAQ,CACrB,KAAMV,EAAqB,MAC3B,QAASK,CACX,CAAC,CACH,CAAC,EAED,GAAG,4DAA6D,SAAY,CAE1E,MAAMM,EAAc,CAClB,GAAGP,EACH,QAAS,IACT,QAAS,YACX,EACA,GAAG,MAAMF,EAAqB,sBAAsB,EAAE,kBACpDJ,EAAMO,CAAgB,CACxB,EAGA,MAAMK,EAAS,MAAMP,EAAwB,UAAUQ,CAAW,EAGlE,OAAOT,EAAoB,oBAAoB,EAAE,qBAAqB,CACpE,QAAS,aACT,QAAS,GACX,CAAC,EACD,OAAOQ,CAAM,EAAE,QAAQ,CACrB,KAAMV,EAAqB,MAC3B,QAASK,CACX,CAAC,CACH,CAAC,EAED,GAAG,uDAAwD,SAAY,CAErE,MAAMO,EAAgB,IAAI,MAAM,uBAAuB,EACvD,GAAG,MAAMV,EAAqB,sBAAsB,EAAE,kBACpDL,EAAKe,CAAa,CACpB,EAGA,MAAMF,EACJ,MAAMP,EAAwB,UAAUC,CAAoB,EAG9D,OAAOM,CAAM,EAAE,QAAQ,CACrB,KAAMV,EAAqB,MAC3B,MAAOY,CACT,CAAC,CACH,CAAC,EAED,GAAG,oCAAqC,SAAY,CAElD,MAAMC,EAAe,GACrB,GAAG,MAAMX,EAAqB,sBAAsB,EAAE,kBACpDJ,EAAMe,CAAY,CACpB,EAGA,MAAMH,EACJ,MAAMP,EAAwB,UAAUC,CAAoB,EAG9D,OAAOM,CAAM,EAAE,QAAQ,CACrB,KAAMV,EAAqB,MAC3B,QAASa,CACX,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
- "names": ["Left", "Right", "ContextFieldLoaderKind", "ClearSignContextType", "TokenContextFieldLoader", "mockTokenDataSource", "tokenContextFieldLoader", "mockTransactionField", "mockTokenPayload", "validField", "invalidFields", "value", "error", "result", "customField", "specificError", "emptyPayload"]
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\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 = {\n kind: \"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: \"TOKEN\",\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n // THEN\n expect(\n tokenContextFieldLoader.canHandle(\n validField,\n ClearSignContextType.TOKEN,\n ),\n ).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 chainId\",\n value: { kind: \"TOKEN\", address: \"0x123\" },\n },\n {\n name: \"object missing address\",\n value: { kind: \"TOKEN\", chainId: 1 },\n },\n ];\n\n test.each(invalidFields)(\"$name\", ({ value }) => {\n expect(\n tokenContextFieldLoader.canHandle(value, ClearSignContextType.TOKEN),\n ).toBe(false);\n });\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(\n tokenContextFieldLoader.canHandle(\n mockTransactionField,\n ClearSignContextType.NFT,\n ),\n ).toBe(false);\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": ["Left", "Right", "ClearSignContextType", "TokenContextFieldLoader", "mockTokenDataSource", "tokenContextFieldLoader", "mockTransactionField", "mockTokenPayload", "validField", "invalidFields", "value", "error", "result", "customField", "specificError", "emptyPayload"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var p=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var c=(r,e,n,t)=>{for(var a=t>1?void 0:t?m(e,n):e,o=r.length-1,i;o>=0;o--)(i=r[o])&&(a=(t?i(e,n,a):i(a))||a);return t&&a&&p(e,n,a),a},d=(r,e)=>(n,t)=>e(n,t,r);import{inject as l,injectable as g}from"inversify";import{ContextFieldLoaderKind as y}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as u}from"../../shared/model/ClearSignContext";import{trustedNameTypes as S}from"../../trusted-name/di/trustedNameTypes";let s=class{constructor(e){this._dataSource=e}canHandle(e){return typeof e=="object"&&e!==null&&"kind"in e&&e.kind===y.TRUSTED_NAME&&"chainId"in e&&"address"in e&&"challenge"in e&&"types"in e&&"sources"in e}async loadField(e){return(await this._dataSource.getTrustedNamePayload({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources})).caseOf({Left:t=>({type:u.ERROR,error:t}),Right:t=>({type:u.TRUSTED_NAME,payload:t})})}};s=c([g(),d(0,l(S.TrustedNameDataSource))],s);export{s as TrustedNameContextFieldLoader};
1
+ var m=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var c=(s,e,t,a)=>{for(var r=a>1?void 0:a?u(e,t):e,o=s.length-1,d;o>=0;o--)(d=s[o])&&(r=(a?d(e,t,r):d(r))||r);return a&&r&&m(e,t,r),r},i=(s,e)=>(t,a)=>e(t,a,s);import{inject as p,injectable as g}from"inversify";import{ClearSignContextType as l}from"../../shared/model/ClearSignContext";import{trustedNameTypes as y}from"../../trusted-name/di/trustedNameTypes";let n=class{constructor(e){this._dataSource=e}canHandle(e,t){return t===l.TRUSTED_NAME&&typeof e=="object"&&e!==null&&"chainId"in e&&"address"in e&&"challenge"in e&&"types"in e&&"sources"in e}async loadField(e){return(await this._dataSource.getTrustedNamePayload({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources})).caseOf({Left:a=>({type:l.ERROR,error:a}),Right:a=>({type:l.TRUSTED_NAME,payload:a})})}};n=c([g(),i(0,p(y.TrustedNameDataSource))],n);export{n as TrustedNameContextFieldLoader};
2
2
  //# sourceMappingURL=TrustedNameContextFieldLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/trusted-name/domain/TrustedNameContextFieldLoader.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport {\n ContextFieldLoader,\n ContextFieldLoaderKind,\n} from \"@/shared/domain/ContextFieldLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport * as TrustedNameDataSource from \"@/trusted-name/data/TrustedNameDataSource\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\ntype TrustedNameFieldInput = {\n kind: ContextFieldLoaderKind.TRUSTED_NAME;\n chainId: number;\n address: string;\n challenge: string;\n types: string[];\n sources: string[];\n};\n\n@injectable()\nexport class TrustedNameContextFieldLoader\n implements ContextFieldLoader<TrustedNameFieldInput>\n{\n constructor(\n @inject(trustedNameTypes.TrustedNameDataSource)\n private _dataSource: TrustedNameDataSource.TrustedNameDataSource,\n ) {}\n\n canHandle(field: unknown): field is TrustedNameFieldInput {\n return (\n typeof field === \"object\" &&\n field !== null &&\n \"kind\" in field &&\n field.kind === ContextFieldLoaderKind.TRUSTED_NAME &&\n \"chainId\" in field &&\n \"address\" in field &&\n \"challenge\" in field &&\n \"types\" in field &&\n \"sources\" in field\n );\n }\n\n async loadField(field: TrustedNameFieldInput): Promise<ClearSignContext> {\n const payload = await this._dataSource.getTrustedNamePayload({\n chainId: field.chainId,\n address: field.address,\n challenge: field.challenge,\n types: field.types,\n sources: field.sources,\n });\n return payload.caseOf({\n Left: (error): ClearSignContext => ({\n type: ClearSignContextType.ERROR,\n error,\n }),\n Right: (value): ClearSignContext => ({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: value,\n }),\n });\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAEE,0BAAAC,MACK,qCACP,OAEE,wBAAAC,MACK,kCAEP,OAAS,oBAAAC,MAAwB,qCAY1B,IAAMC,EAAN,KAEP,CACE,YAEUC,EACR,CADQ,iBAAAA,CACP,CAEH,UAAUC,EAAgD,CACxD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,SAAUA,GACVA,EAAM,OAASC,EAAuB,cACtC,YAAaD,GACb,YAAaA,GACb,cAAeA,GACf,UAAWA,GACX,YAAaA,CAEjB,CAEA,MAAM,UAAUA,EAAyD,CAQvE,OAPgB,MAAM,KAAK,YAAY,sBAAsB,CAC3D,QAASA,EAAM,QACf,QAASA,EAAM,QACf,UAAWA,EAAM,UACjB,MAAOA,EAAM,MACb,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOE,IAA6B,CAClC,KAAMC,EAAqB,MAC3B,MAAAD,CACF,GACA,MAAQE,IAA6B,CACnC,KAAMD,EAAqB,aAC3B,QAASC,CACX,EACF,CAAC,CACH,CACF,EAzCaN,EAANO,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAiB,qBAAqB,IAJrCX",
6
- "names": ["inject", "injectable", "ContextFieldLoaderKind", "ClearSignContextType", "trustedNameTypes", "TrustedNameContextFieldLoader", "_dataSource", "field", "ContextFieldLoaderKind", "error", "ClearSignContextType", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "trustedNameTypes"]
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { ContextFieldLoader } from \"@/shared/domain/ContextFieldLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport * as TrustedNameDataSource from \"@/trusted-name/data/TrustedNameDataSource\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\ntype TrustedNameFieldInput = {\n chainId: number;\n address: string;\n challenge: string;\n types: string[];\n sources: string[];\n};\n\n@injectable()\nexport class TrustedNameContextFieldLoader\n implements ContextFieldLoader<TrustedNameFieldInput>\n{\n constructor(\n @inject(trustedNameTypes.TrustedNameDataSource)\n private _dataSource: TrustedNameDataSource.TrustedNameDataSource,\n ) {}\n\n canHandle(\n input: unknown,\n expectedType: ClearSignContextType,\n ): input is TrustedNameFieldInput {\n return (\n expectedType === ClearSignContextType.TRUSTED_NAME &&\n typeof input === \"object\" &&\n input !== null &&\n \"chainId\" in input &&\n \"address\" in input &&\n \"challenge\" in input &&\n \"types\" in input &&\n \"sources\" in input\n );\n }\n\n async loadField(input: TrustedNameFieldInput): Promise<ClearSignContext> {\n const payload = await this._dataSource.getTrustedNamePayload({\n chainId: input.chainId,\n address: input.address,\n challenge: input.challenge,\n types: input.types,\n sources: input.sources,\n });\n return payload.caseOf({\n Left: (error): ClearSignContext => ({\n type: ClearSignContextType.ERROR,\n error,\n }),\n Right: (value): ClearSignContext => ({\n type: ClearSignContextType.TRUSTED_NAME,\n payload: value,\n }),\n });\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAGnC,OAEE,wBAAAC,MACK,kCAEP,OAAS,oBAAAC,MAAwB,qCAW1B,IAAMC,EAAN,KAEP,CACE,YAEUC,EACR,CADQ,iBAAAA,CACP,CAEH,UACEC,EACAC,EACgC,CAChC,OACEA,IAAiBC,EAAqB,cACtC,OAAOF,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,YAAaA,GACb,cAAeA,GACf,UAAWA,GACX,YAAaA,CAEjB,CAEA,MAAM,UAAUA,EAAyD,CAQvE,OAPgB,MAAM,KAAK,YAAY,sBAAsB,CAC3D,QAASA,EAAM,QACf,QAASA,EAAM,QACf,UAAWA,EAAM,UACjB,MAAOA,EAAM,MACb,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOG,IAA6B,CAClC,KAAMD,EAAqB,MAC3B,MAAAC,CACF,GACA,MAAQC,IAA6B,CACnC,KAAMF,EAAqB,aAC3B,QAASE,CACX,EACF,CAAC,CACH,CACF,EA3CaN,EAANO,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAiB,qBAAqB,IAJrCX",
6
+ "names": ["inject", "injectable", "ClearSignContextType", "trustedNameTypes", "TrustedNameContextFieldLoader", "_dataSource", "input", "expectedType", "ClearSignContextType", "error", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "trustedNameTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as r,Right as c}from"purify-ts";import{ContextFieldLoaderKind as n}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as o}from"../../shared/model/ClearSignContext";import{TrustedNameContextFieldLoader as i}from"../../trusted-name/domain/TrustedNameContextFieldLoader";describe("TrustedNameContextFieldLoader",()=>{const t={getTrustedNamePayload:vi.fn(),getDomainNamePayload:vi.fn()},d=new i(t),e={kind:n.TRUSTED_NAME,chainId:1,address:"0x1234567890abcdef",challenge:"test-challenge",types:["contract","token"],sources:["ledger","ens"]},l="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid trusted name field",()=>{const a={kind:n.TRUSTED_NAME,chainId:1,address:"0x1234567890abcdef",challenge:"test-challenge",types:["contract","token"],sources:["ledger","ens"]};expect(d.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,address:"0x123",challenge:"test",types:["contract"],sources:["ledger"]}},{name:"object missing chainId",value:{kind:n.TRUSTED_NAME,address:"0x123",challenge:"test",types:["contract"],sources:["ledger"]}},{name:"object missing address",value:{kind:n.TRUSTED_NAME,chainId:1,challenge:"test",types:["contract"],sources:["ledger"]}},{name:"object missing challenge",value:{kind:n.TRUSTED_NAME,chainId:1,address:"0x123",types:["contract"],sources:["ledger"]}},{name:"object missing types",value:{kind:n.TRUSTED_NAME,chainId:1,address:"0x123",challenge:"test",sources:["ledger"]}},{name:"object missing sources",value:{kind:n.TRUSTED_NAME,chainId:1,address:"0x123",challenge:"test",types:["contract"]}},{name:"object with wrong kind",value:{kind:n.TOKEN,chainId:1,address:"0x123",challenge:"test",types:["contract"],sources:["ledger"]}}];test.each(a)("$name",({value:s})=>{expect(d.canHandle(s)).toBe(!1)})})}),describe("loadField",()=>{it("should return error context when trusted name data source fails",async()=>{const a=new Error("Trusted name data source error");vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(r(a));const s=await d.loadField(e);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources}),expect(s).toEqual({type:o.ERROR,error:a})}),it("should return trusted name context when successful",async()=>{vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(l));const a=await d.loadField(e);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources}),expect(a).toEqual({type:o.TRUSTED_NAME,payload:l})}),it("should handle different chain IDs and addresses correctly",async()=>{const a={...e,chainId:137,address:"0xdeadbeef",challenge:"custom-challenge"};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(l));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:137,address:"0xdeadbeef",challenge:"custom-challenge",types:e.types,sources:e.sources}),expect(s).toEqual({type:o.TRUSTED_NAME,payload:l})}),it("should handle different types and sources correctly",async()=>{const a={...e,types:["wallet","exchange"],sources:["coingecko","1inch"]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(l));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:["wallet","exchange"],sources:["coingecko","1inch"]}),expect(s).toEqual({type:o.TRUSTED_NAME,payload:l})}),it("should preserve error message from trusted name data source",async()=>{const a=new Error("Network timeout error");vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(r(a));const s=await d.loadField(e);expect(s).toEqual({type:o.ERROR,error:a})}),it("should handle empty trusted name payload",async()=>{const a="";vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(a));const s=await d.loadField(e);expect(s).toEqual({type:o.TRUSTED_NAME,payload:a})}),it("should handle empty types and sources arrays",async()=>{const a={...e,types:[],sources:[]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(l));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:[],sources:[]}),expect(s).toEqual({type:o.TRUSTED_NAME,payload:l})}),it("should handle single type and source",async()=>{const a={...e,types:["contract"],sources:["ens"]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(l));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:["contract"],sources:["ens"]}),expect(s).toEqual({type:o.TRUSTED_NAME,payload:l})})})});
1
+ import{Left as c,Right as n}from"purify-ts";import{ClearSignContextType as l}from"../../shared/model/ClearSignContext";import{TrustedNameContextFieldLoader as r}from"../../trusted-name/domain/TrustedNameContextFieldLoader";describe("TrustedNameContextFieldLoader",()=>{const t={getTrustedNamePayload:vi.fn(),getDomainNamePayload:vi.fn()},d=new r(t),e={chainId:1,address:"0x1234567890abcdef",challenge:"test-challenge",types:["contract","token"],sources:["ledger","ens"]},o="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid trusted name field",()=>{const a={chainId:1,address:"0x1234567890abcdef",challenge:"test-challenge",types:["contract","token"],sources:["ledger","ens"]};expect(d.canHandle(a,l.TRUSTED_NAME)).toBe(!0)}),describe("should return false for invalid inputs",()=>{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 chainId",value:{address:"0x123",challenge:"test",types:["contract"],sources:["ledger"]}},{name:"object missing address",value:{chainId:1,challenge:"test",types:["contract"],sources:["ledger"]}},{name:"object missing challenge",value:{chainId:1,address:"0x123",types:["contract"],sources:["ledger"]}},{name:"object missing types",value:{chainId:1,address:"0x123",challenge:"test",sources:["ledger"]}},{name:"object missing sources",value:{chainId:1,address:"0x123",challenge:"test",types:["contract"]}}];test.each(a)("$name",({value:s})=>{expect(d.canHandle(s,l.TRUSTED_NAME)).toBe(!1)})}),it("should return false for invalid expected type",()=>{expect(d.canHandle(e,l.TOKEN)).toBe(!1)})}),describe("loadField",()=>{it("should return error context when trusted name data source fails",async()=>{const a=new Error("Trusted name data source error");vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(a));const s=await d.loadField(e);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources}),expect(s).toEqual({type:l.ERROR,error:a})}),it("should return trusted name context when successful",async()=>{vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const a=await d.loadField(e);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:e.types,sources:e.sources}),expect(a).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should handle different chain IDs and addresses correctly",async()=>{const a={...e,chainId:137,address:"0xdeadbeef",challenge:"custom-challenge"};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:137,address:"0xdeadbeef",challenge:"custom-challenge",types:e.types,sources:e.sources}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should handle different types and sources correctly",async()=>{const a={...e,types:["wallet","exchange"],sources:["coingecko","1inch"]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:["wallet","exchange"],sources:["coingecko","1inch"]}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should preserve error message from trusted name data source",async()=>{const a=new Error("Network timeout error");vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(c(a));const s=await d.loadField(e);expect(s).toEqual({type:l.ERROR,error:a})}),it("should handle empty trusted name payload",async()=>{const a="";vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(a));const s=await d.loadField(e);expect(s).toEqual({type:l.TRUSTED_NAME,payload:a})}),it("should handle empty types and sources arrays",async()=>{const a={...e,types:[],sources:[]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:[],sources:[]}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})}),it("should handle single type and source",async()=>{const a={...e,types:["contract"],sources:["ens"]};vi.spyOn(t,"getTrustedNamePayload").mockResolvedValue(n(o));const s=await d.loadField(a);expect(t.getTrustedNamePayload).toHaveBeenCalledWith({chainId:e.chainId,address:e.address,challenge:e.challenge,types:["contract"],sources:["ens"]}),expect(s).toEqual({type:l.TRUSTED_NAME,payload:o})})})});
2
2
  //# sourceMappingURL=TrustedNameContextFieldLoader.test.js.map