@ledgerhq/context-module 0.0.0-develop-20260125001208 → 0.0.0-develop-20260127001144

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 (90) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  3. package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
  4. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.test.js.map +2 -2
  6. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  7. package/lib/cjs/src/DefaultContextModule.test.js.map +3 -3
  8. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js +1 -1
  9. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js.map +3 -3
  10. package/lib/cjs/src/config/model/ContextModuleBuildArgs.js.map +1 -1
  11. package/lib/cjs/src/di.js +1 -1
  12. package/lib/cjs/src/di.js.map +2 -2
  13. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  14. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +3 -3
  15. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  16. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  17. package/lib/cjs/src/nft/domain/NftContextLoader.test.js +1 -1
  18. package/lib/cjs/src/nft/domain/NftContextLoader.test.js.map +3 -3
  19. package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
  20. package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js.map +3 -3
  21. package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
  22. package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
  23. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
  24. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +3 -3
  25. package/lib/cjs/src/token/domain/TokenContextLoader.test.js +1 -1
  26. package/lib/cjs/src/token/domain/TokenContextLoader.test.js.map +3 -3
  27. package/lib/cjs/src/transaction-check/domain/TransactionCheckContextLoader.test.js +1 -1
  28. package/lib/cjs/src/transaction-check/domain/TransactionCheckContextLoader.test.js.map +3 -3
  29. package/lib/cjs/src/transaction-check/domain/TypedDataCheckContextLoader.test.js +1 -1
  30. package/lib/cjs/src/transaction-check/domain/TypedDataCheckContextLoader.test.js.map +3 -3
  31. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  32. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  33. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  34. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  35. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  36. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js.map +3 -3
  37. package/lib/esm/package.json +1 -1
  38. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  39. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  40. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  41. package/lib/esm/src/ContextModuleBuilder.test.js.map +2 -2
  42. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  43. package/lib/esm/src/DefaultContextModule.test.js.map +3 -3
  44. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js +1 -1
  45. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js.map +3 -3
  46. package/lib/esm/src/di.js +1 -1
  47. package/lib/esm/src/di.js.map +2 -2
  48. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  49. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +3 -3
  50. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  51. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  52. package/lib/esm/src/nft/domain/NftContextLoader.test.js +1 -1
  53. package/lib/esm/src/nft/domain/NftContextLoader.test.js.map +3 -3
  54. package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
  55. package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js.map +3 -3
  56. package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
  57. package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
  58. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
  59. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +3 -3
  60. package/lib/esm/src/token/domain/TokenContextLoader.test.js +1 -1
  61. package/lib/esm/src/token/domain/TokenContextLoader.test.js.map +3 -3
  62. package/lib/esm/src/transaction-check/domain/TransactionCheckContextLoader.test.js +1 -1
  63. package/lib/esm/src/transaction-check/domain/TransactionCheckContextLoader.test.js.map +3 -3
  64. package/lib/esm/src/transaction-check/domain/TypedDataCheckContextLoader.test.js +1 -1
  65. package/lib/esm/src/transaction-check/domain/TypedDataCheckContextLoader.test.js.map +3 -3
  66. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  67. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  68. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  69. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  70. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  71. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js.map +3 -3
  72. package/lib/types/src/ContextModuleBuilder.d.ts +2 -3
  73. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  74. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts +1 -1
  75. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts.map +1 -1
  76. package/lib/types/src/di.d.ts.map +1 -1
  77. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  78. package/package.json +6 -6
  79. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.js +0 -2
  80. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.js.map +0 -7
  81. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.test.js +0 -2
  82. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.test.js.map +0 -7
  83. package/lib/esm/src/shared/utils/NullLoggerPublisherService.js +0 -2
  84. package/lib/esm/src/shared/utils/NullLoggerPublisherService.js.map +0 -7
  85. package/lib/esm/src/shared/utils/NullLoggerPublisherService.test.js +0 -2
  86. package/lib/esm/src/shared/utils/NullLoggerPublisherService.test.js.map +0 -7
  87. package/lib/types/src/shared/utils/NullLoggerPublisherService.d.ts +0 -3
  88. package/lib/types/src/shared/utils/NullLoggerPublisherService.d.ts.map +0 -1
  89. package/lib/types/src/shared/utils/NullLoggerPublisherService.test.d.ts +0 -2
  90. package/lib/types/src/shared/utils/NullLoggerPublisherService.test.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- "use strict";var k=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),e=require("vitest"),u=require("../../pki/model/KeyUsage"),n=require("../../shared/model/SolanaContextTypes"),f=require("../../shared/utils/NullLoggerPublisherService"),y=require("./SolanaTokenContextLoader");(0,e.describe)("SolanaTokenContextLoader",()=>{let s,d;const i=new Uint8Array([240,202,204,26]),t={descriptor:{data:{symbol:"SOL",name:"Solana",decimals:9},signatures:{prod:"prod-sig",test:"test-sig"}}},c={tokenInternalId:"token-1",deviceModelId:k.DeviceModelId.FLEX};(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),s={getTokenInfosPayload:e.vi.fn()},d={loadCertificate:e.vi.fn()}});const r=a=>{const o={cal:{mode:a}};return new y.SolanaTokenContextLoader(s,o,d,f.NullLoggerPublisherService)};(0,e.describe)("canHandle",()=>{(0,e.it)("returns true when tokenInternalId is provided",()=>{const a=r("prod");(0,e.expect)(a.canHandle({tokenInternalId:"abc123"},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!0)}),(0,e.it)("returns false when tokenInternalId is missing or falsy",()=>{const a=r("prod");(0,e.expect)(a.canHandle({tokenInternalId:""},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!1),(0,e.expect)(a.canHandle({tokenInternalId:void 0},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!1),(0,e.expect)(a.canHandle({},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!1)})}),(0,e.describe)("loadField",()=>{(0,e.it)("returns an error when datasource returns Left(error) (certificate still retrieved)",async()=>{const a=r("prod"),o=new Error("datasource failed");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Left)(o)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue({keyUsageNumber:0,payload:i});const p=await a.loadField(c);(0,e.expect)(s.getTokenInfosPayload).toHaveBeenCalledWith({tokenInternalId:"token-1"}),(0,e.expect)(d.loadCertificate).toHaveBeenCalledWith({keyId:"token_metadata_key",keyUsage:u.KeyUsage.CoinMeta,targetDevice:c.deviceModelId}),(0,e.expect)(p).toEqual({type:n.SolanaContextTypes.ERROR,error:o})}),(0,e.it)("returns SOLANA_TOKEN with prod signature by default (falsy mode) and includes certificate",async()=>{const a=r("");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Right)(t)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue({keyUsageNumber:0,payload:i});const o=await a.loadField({...c,tokenInternalId:"token-2"});(0,e.expect)(o).toEqual({type:n.SolanaContextTypes.SOLANA_TOKEN,payload:{solanaTokenDescriptor:{data:t.descriptor.data,signature:"prod-sig"}},certificate:{keyUsageNumber:0,payload:i}})}),(0,e.it)("returns SOLANA_TOKEN with signature matching config.cal.mode",async()=>{const a=r("test");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Right)(t)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue({keyUsageNumber:1,payload:i});const o=await a.loadField({...c,tokenInternalId:"token-3"});(0,e.expect)(o).toEqual({type:n.SolanaContextTypes.SOLANA_TOKEN,payload:{solanaTokenDescriptor:{data:t.descriptor.data,signature:"test-sig"}},certificate:{keyUsageNumber:1,payload:i}})}),(0,e.it)("works even if certificate loader returns undefined (certificate omitted)",async()=>{const a=r("prod");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Right)(t)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const o=await a.loadField(c);(0,e.expect)(o).toEqual({type:n.SolanaContextTypes.SOLANA_TOKEN,payload:{solanaTokenDescriptor:{data:t.descriptor.data,signature:"prod-sig"}},certificate:void 0})})}),(0,e.describe)("pluckTokenData (private)",()=>{(0,e.it)("picks the signature for the configured mode",()=>{const a=r("test"),p=a.pluckTokenData.bind(a)(t);(0,e.expect)(p).toEqual({solanaTokenDescriptor:{data:t.descriptor.data,signature:"test-sig"}})}),(0,e.it)("falls back to 'prod' when config.cal.mode is falsy",()=>{const o=r(void 0).pluckTokenData(t);(0,e.expect)(o).toEqual({solanaTokenDescriptor:{data:t.descriptor.data,signature:"prod-sig"}})})})});
1
+ "use strict";var p=require("@ledgerhq/device-management-kit"),l=require("purify-ts"),e=require("vitest"),u=require("../../pki/model/KeyUsage"),n=require("../../shared/model/SolanaContextTypes"),f=require("./SolanaTokenContextLoader");const y=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]});(0,e.describe)("SolanaTokenContextLoader",()=>{let s,d;const i=new Uint8Array([240,202,204,26]),t={descriptor:{data:{symbol:"SOL",name:"Solana",decimals:9},signatures:{prod:"prod-sig",test:"test-sig"}}},c={tokenInternalId:"token-1",deviceModelId:p.DeviceModelId.FLEX};(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),s={getTokenInfosPayload:e.vi.fn()},d={loadCertificate:e.vi.fn()}});const r=a=>{const o={cal:{mode:a}};return new f.SolanaTokenContextLoader(s,o,d,y)};(0,e.describe)("canHandle",()=>{(0,e.it)("returns true when tokenInternalId is provided",()=>{const a=r("prod");(0,e.expect)(a.canHandle({tokenInternalId:"abc123"},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!0)}),(0,e.it)("returns false when tokenInternalId is missing or falsy",()=>{const a=r("prod");(0,e.expect)(a.canHandle({tokenInternalId:""},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!1),(0,e.expect)(a.canHandle({tokenInternalId:void 0},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!1),(0,e.expect)(a.canHandle({},n.SolanaContextTypes.SOLANA_TOKEN)).toBe(!1)})}),(0,e.describe)("loadField",()=>{(0,e.it)("returns an error when datasource returns Left(error) (certificate still retrieved)",async()=>{const a=r("prod"),o=new Error("datasource failed");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Left)(o)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue({keyUsageNumber:0,payload:i});const k=await a.loadField(c);(0,e.expect)(s.getTokenInfosPayload).toHaveBeenCalledWith({tokenInternalId:"token-1"}),(0,e.expect)(d.loadCertificate).toHaveBeenCalledWith({keyId:"token_metadata_key",keyUsage:u.KeyUsage.CoinMeta,targetDevice:c.deviceModelId}),(0,e.expect)(k).toEqual({type:n.SolanaContextTypes.ERROR,error:o})}),(0,e.it)("returns SOLANA_TOKEN with prod signature by default (falsy mode) and includes certificate",async()=>{const a=r("");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Right)(t)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue({keyUsageNumber:0,payload:i});const o=await a.loadField({...c,tokenInternalId:"token-2"});(0,e.expect)(o).toEqual({type:n.SolanaContextTypes.SOLANA_TOKEN,payload:{solanaTokenDescriptor:{data:t.descriptor.data,signature:"prod-sig"}},certificate:{keyUsageNumber:0,payload:i}})}),(0,e.it)("returns SOLANA_TOKEN with signature matching config.cal.mode",async()=>{const a=r("test");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Right)(t)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue({keyUsageNumber:1,payload:i});const o=await a.loadField({...c,tokenInternalId:"token-3"});(0,e.expect)(o).toEqual({type:n.SolanaContextTypes.SOLANA_TOKEN,payload:{solanaTokenDescriptor:{data:t.descriptor.data,signature:"test-sig"}},certificate:{keyUsageNumber:1,payload:i}})}),(0,e.it)("works even if certificate loader returns undefined (certificate omitted)",async()=>{const a=r("prod");e.vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Right)(t)),e.vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const o=await a.loadField(c);(0,e.expect)(o).toEqual({type:n.SolanaContextTypes.SOLANA_TOKEN,payload:{solanaTokenDescriptor:{data:t.descriptor.data,signature:"prod-sig"}},certificate:void 0})})}),(0,e.describe)("pluckTokenData (private)",()=>{(0,e.it)("picks the signature for the configured mode",()=>{const a=r("test"),k=a.pluckTokenData.bind(a)(t);(0,e.expect)(k).toEqual({solanaTokenDescriptor:{data:t.descriptor.data,signature:"test-sig"}})}),(0,e.it)("falls back to 'prod' when config.cal.mode is falsy",()=>{const o=r(void 0).pluckTokenData(t);(0,e.expect)(o).toEqual({solanaTokenDescriptor:{data:t.descriptor.data,signature:"prod-sig"}})})})});
2
2
  //# sourceMappingURL=SolanaTokenContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/solanaToken/domain/SolanaTokenContextLoader.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport type { PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { SolanaContextTypes } from \"@/shared/model/SolanaContextTypes\";\nimport { NullLoggerPublisherService } from \"@/shared/utils/NullLoggerPublisherService\";\nimport type { SolanaTransactionContext } from \"@/solana/domain/solanaContextTypes\";\nimport {\n type SolanaTokenDataSource,\n type TokenDataResponse,\n} from \"@/solanaToken/data/SolanaTokenDataSource\";\n\nimport { SolanaTokenContextLoader } from \"./SolanaTokenContextLoader\";\n\ndescribe(\"SolanaTokenContextLoader\", () => {\n let mockDataSource: SolanaTokenDataSource;\n let mockCertLoader: PkiCertificateLoader;\n\n const bytes = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n\n const tokenDataResponse: TokenDataResponse = {\n descriptor: {\n // The loader just forwards this; exact shape isn't important for the test\n data: { symbol: \"SOL\", name: \"Solana\", decimals: 9 } as any,\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n } as any,\n },\n } as any;\n\n const baseCtx = {\n tokenInternalId: \"token-1\",\n deviceModelId: DeviceModelId.FLEX,\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n\n mockDataSource = {\n getTokenInfosPayload: vi.fn(),\n } as unknown as SolanaTokenDataSource;\n\n mockCertLoader = {\n loadCertificate: vi.fn(),\n } as unknown as PkiCertificateLoader;\n });\n\n const makeLoader = (mode?: string) => {\n const config = { cal: { mode } } as unknown as ContextModuleConfig;\n return new SolanaTokenContextLoader(\n mockDataSource,\n config,\n mockCertLoader,\n NullLoggerPublisherService,\n );\n };\n\n describe(\"canHandle\", () => {\n it(\"returns true when tokenInternalId is provided\", () => {\n const loader = makeLoader(\"prod\");\n\n expect(\n loader.canHandle(\n {\n tokenInternalId: \"abc123\",\n } as SolanaTransactionContext,\n SolanaContextTypes.SOLANA_TOKEN,\n ),\n ).toBe(true);\n });\n\n it(\"returns false when tokenInternalId is missing or falsy\", () => {\n const loader = makeLoader(\"prod\");\n\n expect(\n loader.canHandle(\n { tokenInternalId: \"\" } as any,\n SolanaContextTypes.SOLANA_TOKEN,\n ),\n ).toBe(false);\n expect(\n loader.canHandle(\n { tokenInternalId: undefined } as any,\n SolanaContextTypes.SOLANA_TOKEN,\n ),\n ).toBe(false);\n expect(loader.canHandle({} as any, SolanaContextTypes.SOLANA_TOKEN)).toBe(\n false,\n );\n });\n });\n\n describe(\"loadField\", () => {\n it(\"returns an error when datasource returns Left(error) (certificate still retrieved)\", async () => {\n const loader = makeLoader(\"prod\");\n const error = new Error(\"datasource failed\");\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(error),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue({\n keyUsageNumber: 0,\n payload: bytes,\n });\n\n const result = await loader.loadField(baseCtx);\n\n expect(mockDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n tokenInternalId: \"token-1\",\n });\n expect(mockCertLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"token_metadata_key\",\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: baseCtx.deviceModelId,\n });\n expect(result).toEqual({\n type: SolanaContextTypes.ERROR,\n error,\n });\n });\n\n it(\"returns SOLANA_TOKEN with prod signature by default (falsy mode) and includes certificate\", async () => {\n const loader = makeLoader(\"\"); // falsy -> default 'prod'\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(tokenDataResponse),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue({\n keyUsageNumber: 0,\n payload: bytes,\n });\n\n const result = await loader.loadField({\n ...baseCtx,\n tokenInternalId: \"token-2\",\n });\n\n expect(result).toEqual({\n type: SolanaContextTypes.SOLANA_TOKEN,\n payload: {\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"prod-sig\",\n },\n },\n certificate: { keyUsageNumber: 0, payload: bytes },\n });\n });\n\n it(\"returns SOLANA_TOKEN with signature matching config.cal.mode\", async () => {\n const loader = makeLoader(\"test\");\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(tokenDataResponse),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue({\n keyUsageNumber: 1,\n payload: bytes,\n });\n\n const result = await loader.loadField({\n ...baseCtx,\n tokenInternalId: \"token-3\",\n });\n\n expect(result).toEqual({\n type: SolanaContextTypes.SOLANA_TOKEN,\n payload: {\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"test-sig\",\n },\n },\n certificate: { keyUsageNumber: 1, payload: bytes },\n });\n });\n\n it(\"works even if certificate loader returns undefined (certificate omitted)\", async () => {\n const loader = makeLoader(\"prod\");\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(tokenDataResponse),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(undefined);\n\n const result = await loader.loadField(baseCtx);\n\n expect(result).toEqual({\n type: SolanaContextTypes.SOLANA_TOKEN,\n payload: {\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"prod-sig\",\n },\n },\n certificate: undefined,\n });\n });\n });\n\n describe(\"pluckTokenData (private)\", () => {\n it(\"picks the signature for the configured mode\", () => {\n const loader = makeLoader(\"test\");\n const pluck = (loader as any).pluckTokenData.bind(loader);\n\n const result = pluck(tokenDataResponse);\n\n expect(result).toEqual({\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"test-sig\",\n },\n });\n });\n\n it(\"falls back to 'prod' when config.cal.mode is falsy\", () => {\n const loader = makeLoader(undefined as any);\n const result = (loader as any).pluckTokenData(tokenDataResponse);\n\n expect(result).toEqual({\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"prod-sig\",\n },\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_KeyUsage", "import_SolanaContextTypes", "import_NullLoggerPublisherService", "import_SolanaTokenContextLoader", "mockDataSource", "mockCertLoader", "bytes", "tokenDataResponse", "baseCtx", "makeLoader", "mode", "config", "loader", "error", "result"]
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport type { PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { SolanaContextTypes } from \"@/shared/model/SolanaContextTypes\";\nimport type { SolanaTransactionContext } from \"@/solana/domain/solanaContextTypes\";\nimport {\n type SolanaTokenDataSource,\n type TokenDataResponse,\n} from \"@/solanaToken/data/SolanaTokenDataSource\";\n\nimport { SolanaTokenContextLoader } from \"./SolanaTokenContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"SolanaTokenContextLoader\", () => {\n let mockDataSource: SolanaTokenDataSource;\n let mockCertLoader: PkiCertificateLoader;\n\n const bytes = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n\n const tokenDataResponse: TokenDataResponse = {\n descriptor: {\n // The loader just forwards this; exact shape isn't important for the test\n data: { symbol: \"SOL\", name: \"Solana\", decimals: 9 } as any,\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n } as any,\n },\n } as any;\n\n const baseCtx = {\n tokenInternalId: \"token-1\",\n deviceModelId: DeviceModelId.FLEX,\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n\n mockDataSource = {\n getTokenInfosPayload: vi.fn(),\n } as unknown as SolanaTokenDataSource;\n\n mockCertLoader = {\n loadCertificate: vi.fn(),\n } as unknown as PkiCertificateLoader;\n });\n\n const makeLoader = (mode?: string) => {\n const config = { cal: { mode } } as unknown as ContextModuleConfig;\n return new SolanaTokenContextLoader(\n mockDataSource,\n config,\n mockCertLoader,\n mockLoggerFactory,\n );\n };\n\n describe(\"canHandle\", () => {\n it(\"returns true when tokenInternalId is provided\", () => {\n const loader = makeLoader(\"prod\");\n\n expect(\n loader.canHandle(\n {\n tokenInternalId: \"abc123\",\n } as SolanaTransactionContext,\n SolanaContextTypes.SOLANA_TOKEN,\n ),\n ).toBe(true);\n });\n\n it(\"returns false when tokenInternalId is missing or falsy\", () => {\n const loader = makeLoader(\"prod\");\n\n expect(\n loader.canHandle(\n { tokenInternalId: \"\" } as any,\n SolanaContextTypes.SOLANA_TOKEN,\n ),\n ).toBe(false);\n expect(\n loader.canHandle(\n { tokenInternalId: undefined } as any,\n SolanaContextTypes.SOLANA_TOKEN,\n ),\n ).toBe(false);\n expect(loader.canHandle({} as any, SolanaContextTypes.SOLANA_TOKEN)).toBe(\n false,\n );\n });\n });\n\n describe(\"loadField\", () => {\n it(\"returns an error when datasource returns Left(error) (certificate still retrieved)\", async () => {\n const loader = makeLoader(\"prod\");\n const error = new Error(\"datasource failed\");\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(error),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue({\n keyUsageNumber: 0,\n payload: bytes,\n });\n\n const result = await loader.loadField(baseCtx);\n\n expect(mockDataSource.getTokenInfosPayload).toHaveBeenCalledWith({\n tokenInternalId: \"token-1\",\n });\n expect(mockCertLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"token_metadata_key\",\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: baseCtx.deviceModelId,\n });\n expect(result).toEqual({\n type: SolanaContextTypes.ERROR,\n error,\n });\n });\n\n it(\"returns SOLANA_TOKEN with prod signature by default (falsy mode) and includes certificate\", async () => {\n const loader = makeLoader(\"\"); // falsy -> default 'prod'\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(tokenDataResponse),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue({\n keyUsageNumber: 0,\n payload: bytes,\n });\n\n const result = await loader.loadField({\n ...baseCtx,\n tokenInternalId: \"token-2\",\n });\n\n expect(result).toEqual({\n type: SolanaContextTypes.SOLANA_TOKEN,\n payload: {\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"prod-sig\",\n },\n },\n certificate: { keyUsageNumber: 0, payload: bytes },\n });\n });\n\n it(\"returns SOLANA_TOKEN with signature matching config.cal.mode\", async () => {\n const loader = makeLoader(\"test\");\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(tokenDataResponse),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue({\n keyUsageNumber: 1,\n payload: bytes,\n });\n\n const result = await loader.loadField({\n ...baseCtx,\n tokenInternalId: \"token-3\",\n });\n\n expect(result).toEqual({\n type: SolanaContextTypes.SOLANA_TOKEN,\n payload: {\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"test-sig\",\n },\n },\n certificate: { keyUsageNumber: 1, payload: bytes },\n });\n });\n\n it(\"works even if certificate loader returns undefined (certificate omitted)\", async () => {\n const loader = makeLoader(\"prod\");\n\n vi.spyOn(mockDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Right(tokenDataResponse),\n );\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(undefined);\n\n const result = await loader.loadField(baseCtx);\n\n expect(result).toEqual({\n type: SolanaContextTypes.SOLANA_TOKEN,\n payload: {\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"prod-sig\",\n },\n },\n certificate: undefined,\n });\n });\n });\n\n describe(\"pluckTokenData (private)\", () => {\n it(\"picks the signature for the configured mode\", () => {\n const loader = makeLoader(\"test\");\n const pluck = (loader as any).pluckTokenData.bind(loader);\n\n const result = pluck(tokenDataResponse);\n\n expect(result).toEqual({\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"test-sig\",\n },\n });\n });\n\n it(\"falls back to 'prod' when config.cal.mode is falsy\", () => {\n const loader = makeLoader(undefined as any);\n const result = (loader as any).pluckTokenData(tokenDataResponse);\n\n expect(result).toEqual({\n solanaTokenDescriptor: {\n data: tokenDataResponse.descriptor.data,\n signature: \"prod-sig\",\n },\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_KeyUsage", "import_SolanaContextTypes", "import_SolanaTokenContextLoader", "mockLoggerFactory", "mockDataSource", "mockCertLoader", "bytes", "tokenDataResponse", "baseCtx", "makeLoader", "mode", "config", "loader", "error", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=require("purify-ts"),n=require("../../shared/model/ClearSignContext"),l=require("../../shared/utils/NullLoggerPublisherService"),c=require("../../token/domain/TokenContextLoader");describe("TokenContextLoader",()=>{const a={getTokenInfosPayload:vi.fn()},o=new c.TokenContextLoader(a,l.NullLoggerPublisherService);beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(a,"getTokenInfosPayload").mockImplementation(({address:e})=>Promise.resolve((0,r.Right)(`payload-${e}`)))}),describe("canHandle function",()=>{const e={to:"0xdAC17F958D2ee523a2206206994597C13D831ec7",selector:"0x095ea7b3",chainId:1};it("should return true for valid input",()=>{expect(o.canHandle(e,[n.ClearSignContextType.TOKEN])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(o.canHandle(e,[n.ClearSignContextType.NFT])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(t,i)=>{expect(o.canHandle(t,[n.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[{...e,to:void 0},"missing to"],[{...e,selector:void 0},"missing selector"],[{...e,chainId:void 0},"missing chainId"]])("should return false for %s",(t,i)=>{expect(o.canHandle(t,[n.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[{...e,to:"invalid-hex"},"invalid to hex"],[{...e,to:"0x"},"empty to hex"],[{...e,to:"not-hex-at-all"},"non-hex to"],[{...e,selector:"invalid-hex"},"invalid selector hex"],[{...e,selector:"0x"},"empty selector hex"],[{...e,selector:"not-hex-at-all"},"non-hex selector"]])("should return false for %s",(t,i)=>{expect(o.canHandle(t,[n.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"],[{...e,chainId:void 0},"undefined chainId"]])("should return false for %s",(t,i)=>{expect(o.canHandle(t,[n.ClearSignContextType.TOKEN])).toBe(!1)})}),describe("load function",()=>{it("should return an error when datasource returns an error",async()=>{const e={to:"0xdAC17F958D2ee523a2206206994597C13D831ec7",chainId:1,selector:"0x095ea7b3"};vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue((0,r.Left)(new Error("error")));const t=await o.load(e);expect(t).toEqual([{type:n.ClearSignContextType.ERROR,error:new Error("error")}])}),it("should return a correct response",async()=>{const e={to:"0xdAC17F958D2ee523a2206206994597C13D831ec7",chainId:1,selector:"0x095ea7b3"},t=await o.load(e);expect(t).toEqual([{type:n.ClearSignContextType.TOKEN,payload:"payload-0xdAC17F958D2ee523a2206206994597C13D831ec7"}])})})});
1
+ "use strict";var r=require("purify-ts"),t=require("../../shared/model/ClearSignContext"),c=require("../../token/domain/TokenContextLoader");const s=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("TokenContextLoader",()=>{const a={getTokenInfosPayload:vi.fn()},o=new c.TokenContextLoader(a,s);beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(a,"getTokenInfosPayload").mockImplementation(({address:e})=>Promise.resolve((0,r.Right)(`payload-${e}`)))}),describe("canHandle function",()=>{const e={to:"0xdAC17F958D2ee523a2206206994597C13D831ec7",selector:"0x095ea7b3",chainId:1};it("should return true for valid input",()=>{expect(o.canHandle(e,[t.ClearSignContextType.TOKEN])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(o.canHandle(e,[t.ClearSignContextType.NFT])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(n,i)=>{expect(o.canHandle(n,[t.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[{...e,to:void 0},"missing to"],[{...e,selector:void 0},"missing selector"],[{...e,chainId:void 0},"missing chainId"]])("should return false for %s",(n,i)=>{expect(o.canHandle(n,[t.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[{...e,to:"invalid-hex"},"invalid to hex"],[{...e,to:"0x"},"empty to hex"],[{...e,to:"not-hex-at-all"},"non-hex to"],[{...e,selector:"invalid-hex"},"invalid selector hex"],[{...e,selector:"0x"},"empty selector hex"],[{...e,selector:"not-hex-at-all"},"non-hex selector"]])("should return false for %s",(n,i)=>{expect(o.canHandle(n,[t.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"],[{...e,chainId:void 0},"undefined chainId"]])("should return false for %s",(n,i)=>{expect(o.canHandle(n,[t.ClearSignContextType.TOKEN])).toBe(!1)})}),describe("load function",()=>{it("should return an error when datasource returns an error",async()=>{const e={to:"0xdAC17F958D2ee523a2206206994597C13D831ec7",chainId:1,selector:"0x095ea7b3"};vi.spyOn(a,"getTokenInfosPayload").mockResolvedValue((0,r.Left)(new Error("error")));const n=await o.load(e);expect(n).toEqual([{type:t.ClearSignContextType.ERROR,error:new Error("error")}])}),it("should return a correct response",async()=>{const e={to:"0xdAC17F958D2ee523a2206206994597C13D831ec7",chainId:1,selector:"0x095ea7b3"},n=await o.load(e);expect(n).toEqual([{type:t.ClearSignContextType.TOKEN,payload:"payload-0xdAC17F958D2ee523a2206206994597C13D831ec7"}])})})});
2
2
  //# sourceMappingURL=TokenContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/token/domain/TokenContextLoader.test.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { NullLoggerPublisherService } from \"@/shared/utils/NullLoggerPublisherService\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport {\n type TokenContextInput,\n TokenContextLoader,\n} from \"@/token/domain/TokenContextLoader\";\n\ndescribe(\"TokenContextLoader\", () => {\n const mockTokenDataSource: TokenDataSource = {\n getTokenInfosPayload: vi.fn(),\n };\n const loader = new TokenContextLoader(\n mockTokenDataSource,\n NullLoggerPublisherService,\n );\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n ({ address }) => Promise.resolve(Right(`payload-${address}`)),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TokenContextInput = {\n to: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n selector: \"0x095ea7b3\",\n chainId: 1,\n };\n\n it(\"should return true for valid input\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n true,\n );\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.NFT])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n\n it.each([\n [{ ...validInput, to: undefined }, \"missing to\"],\n [{ ...validInput, selector: undefined }, \"missing selector\"],\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n\n it.each([\n [{ ...validInput, to: \"invalid-hex\" }, \"invalid to hex\"],\n [{ ...validInput, to: \"0x\" }, \"empty to hex\"],\n [{ ...validInput, to: \"not-hex-at-all\" }, \"non-hex to\"],\n [{ ...validInput, selector: \"invalid-hex\" }, \"invalid selector hex\"],\n [{ ...validInput, selector: \"0x\" }, \"empty selector hex\"],\n [{ ...validInput, selector: \"not-hex-at-all\" }, \"non-hex selector\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n\n it.each([\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, chainId: undefined }, \"undefined chainId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return an error when datasource returns an error\", async () => {\n // GIVEN\n const input: TokenContextInput = {\n to: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n chainId: 1,\n selector: \"0x095ea7b3\",\n };\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(new Error(\"error\")),\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n\n it(\"should return a correct response\", async () => {\n // GIVEN\n const input: TokenContextInput = {\n to: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n chainId: 1,\n selector: \"0x095ea7b3\",\n };\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n },\n ]);\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_purify_ts", "import_ClearSignContext", "import_NullLoggerPublisherService", "import_TokenContextLoader", "mockTokenDataSource", "loader", "address", "validInput", "input", "_description", "result"]
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport {\n type TokenContextInput,\n TokenContextLoader,\n} from \"@/token/domain/TokenContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"TokenContextLoader\", () => {\n const mockTokenDataSource: TokenDataSource = {\n getTokenInfosPayload: vi.fn(),\n };\n const loader = new TokenContextLoader(mockTokenDataSource, mockLoggerFactory);\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockImplementation(\n ({ address }) => Promise.resolve(Right(`payload-${address}`)),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TokenContextInput = {\n to: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n selector: \"0x095ea7b3\",\n chainId: 1,\n };\n\n it(\"should return true for valid input\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n true,\n );\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.NFT])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n\n it.each([\n [{ ...validInput, to: undefined }, \"missing to\"],\n [{ ...validInput, selector: undefined }, \"missing selector\"],\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n\n it.each([\n [{ ...validInput, to: \"invalid-hex\" }, \"invalid to hex\"],\n [{ ...validInput, to: \"0x\" }, \"empty to hex\"],\n [{ ...validInput, to: \"not-hex-at-all\" }, \"non-hex to\"],\n [{ ...validInput, selector: \"invalid-hex\" }, \"invalid selector hex\"],\n [{ ...validInput, selector: \"0x\" }, \"empty selector hex\"],\n [{ ...validInput, selector: \"not-hex-at-all\" }, \"non-hex selector\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n\n it.each([\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, chainId: undefined }, \"undefined chainId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TOKEN])).toBe(false);\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return an error when datasource returns an error\", async () => {\n // GIVEN\n const input: TokenContextInput = {\n to: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n chainId: 1,\n selector: \"0x095ea7b3\",\n };\n vi.spyOn(mockTokenDataSource, \"getTokenInfosPayload\").mockResolvedValue(\n Left(new Error(\"error\")),\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n\n it(\"should return a correct response\", async () => {\n // GIVEN\n const input: TokenContextInput = {\n to: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n chainId: 1,\n selector: \"0x095ea7b3\",\n };\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n {\n type: ClearSignContextType.TOKEN,\n payload: \"payload-0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n },\n ]);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_purify_ts", "import_ClearSignContext", "import_TokenContextLoader", "mockLoggerFactory", "mockTokenDataSource", "loader", "address", "validInput", "input", "_description", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var l=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),u=require("../../pki/model/KeyUsage"),d=require("../../shared/model/ClearSignContext"),f=require("../../shared/utils/NullLoggerPublisherService"),p=require("../../transaction-check/domain/TransactionCheckContextLoader");describe("TransactionCheckContextLoader",()=>{const i={getTransactionCheck:vi.fn()},s={loadCertificate:vi.fn()},a=new p.TransactionCheckContextLoader(i,s,f.NullLoggerPublisherService),r=[d.ClearSignContextType.TRANSACTION_CHECK];beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle function",()=>{const e={from:"0x1234567890123456789012345678901234567890",chainId:1,transaction:new Uint8Array([1,2,3]),deviceModelId:l.DeviceModelId.FLEX};it("should return true for valid input",()=>{expect(a.canHandle(e,r)).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(a.canHandle(e,[d.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(n,t)=>{expect(a.canHandle(n,r)).toBe(!1)}),it.each([[{...e,from:void 0},"missing from"],[{...e,chainId:void 0},"missing chainId"],[{...e,transaction:void 0},"missing transaction"],[{...e,deviceModelId:void 0},"missing deviceModelId"]])("should return false for %s",(n,t)=>{expect(a.canHandle(n,r)).toBe(!1)}),it.each([[{...e,from:"invalid-hex"},"invalid from hex"],[{...e,from:"0x"},"empty from hex"],[{...e,from:"not-hex"},"non-hex from"]])("should return false for %s",(n,t)=>{expect(a.canHandle(n,r)).toBe(!1)}),it("should return false for NANO_S device model",()=>{const n={...e,deviceModelId:l.DeviceModelId.NANO_S};expect(a.canHandle(n,r)).toBe(!1)}),it("should return false for non-number chainId",()=>{const n={...e,chainId:"not-a-number"};expect(a.canHandle(n,r)).toBe(!1)})}),describe("load function",()=>{const e={from:"0x1234567890123456789012345678901234567890",chainId:1,transaction:new Uint8Array([1,2,3]),deviceModelId:l.DeviceModelId.FLEX},n={descriptor:"cert-descriptor",signature:"cert-signature",keyUsageNumber:0,payload:new Uint8Array};it("should return empty array when from is empty",async()=>{const t={...e,from:""},o=await a.load(t);expect(o).toEqual([])}),it("should return error context when transaction check fails",async()=>{const t=new Error("Transaction check failed");vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Left)(t));const o=await a.load(e);expect(o).toEqual([{type:d.ClearSignContextType.ERROR,error:t}])}),it("should return transaction check context when successful",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Right)(t)),vi.spyOn(s,"loadCertificate").mockResolvedValue(n);const o=await a.load(e);expect(i.getTransactionCheck).toHaveBeenCalledWith({chainId:e.chainId,rawTx:"0x010203",from:e.from}),expect(s.loadCertificate).toHaveBeenCalledWith({keyId:t.publicKeyId,keyUsage:u.KeyUsage.TxSimulationSigner,targetDevice:e.deviceModelId}),expect(o).toEqual([{type:d.ClearSignContextType.TRANSACTION_CHECK,payload:t.descriptor,certificate:n}])}),it("should handle certificate loading failure",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"},o=new Error("Certificate loading failed");vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Right)(t)),vi.spyOn(s,"loadCertificate").mockRejectedValue(o),await expect(a.load(e)).rejects.toThrow(o)}),it("should convert transaction buffer to hex string correctly",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Right)(t)),vi.spyOn(s,"loadCertificate").mockResolvedValue(n),await a.load(e),expect(i.getTransactionCheck).toHaveBeenCalledWith({chainId:e.chainId,rawTx:"0x010203",from:e.from})})})});
1
+ "use strict";var l=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),u=require("../../pki/model/KeyUsage"),d=require("../../shared/model/ClearSignContext"),f=require("../../transaction-check/domain/TransactionCheckContextLoader");const p=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("TransactionCheckContextLoader",()=>{const i={getTransactionCheck:vi.fn()},s={loadCertificate:vi.fn()},a=new f.TransactionCheckContextLoader(i,s,p),r=[d.ClearSignContextType.TRANSACTION_CHECK];beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle function",()=>{const e={from:"0x1234567890123456789012345678901234567890",chainId:1,transaction:new Uint8Array([1,2,3]),deviceModelId:l.DeviceModelId.FLEX};it("should return true for valid input",()=>{expect(a.canHandle(e,r)).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(a.canHandle(e,[d.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(n,t)=>{expect(a.canHandle(n,r)).toBe(!1)}),it.each([[{...e,from:void 0},"missing from"],[{...e,chainId:void 0},"missing chainId"],[{...e,transaction:void 0},"missing transaction"],[{...e,deviceModelId:void 0},"missing deviceModelId"]])("should return false for %s",(n,t)=>{expect(a.canHandle(n,r)).toBe(!1)}),it.each([[{...e,from:"invalid-hex"},"invalid from hex"],[{...e,from:"0x"},"empty from hex"],[{...e,from:"not-hex"},"non-hex from"]])("should return false for %s",(n,t)=>{expect(a.canHandle(n,r)).toBe(!1)}),it("should return false for NANO_S device model",()=>{const n={...e,deviceModelId:l.DeviceModelId.NANO_S};expect(a.canHandle(n,r)).toBe(!1)}),it("should return false for non-number chainId",()=>{const n={...e,chainId:"not-a-number"};expect(a.canHandle(n,r)).toBe(!1)})}),describe("load function",()=>{const e={from:"0x1234567890123456789012345678901234567890",chainId:1,transaction:new Uint8Array([1,2,3]),deviceModelId:l.DeviceModelId.FLEX},n={descriptor:"cert-descriptor",signature:"cert-signature",keyUsageNumber:0,payload:new Uint8Array};it("should return empty array when from is empty",async()=>{const t={...e,from:""},o=await a.load(t);expect(o).toEqual([])}),it("should return error context when transaction check fails",async()=>{const t=new Error("Transaction check failed");vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Left)(t));const o=await a.load(e);expect(o).toEqual([{type:d.ClearSignContextType.ERROR,error:t}])}),it("should return transaction check context when successful",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Right)(t)),vi.spyOn(s,"loadCertificate").mockResolvedValue(n);const o=await a.load(e);expect(i.getTransactionCheck).toHaveBeenCalledWith({chainId:e.chainId,rawTx:"0x010203",from:e.from}),expect(s.loadCertificate).toHaveBeenCalledWith({keyId:t.publicKeyId,keyUsage:u.KeyUsage.TxSimulationSigner,targetDevice:e.deviceModelId}),expect(o).toEqual([{type:d.ClearSignContextType.TRANSACTION_CHECK,payload:t.descriptor,certificate:n}])}),it("should handle certificate loading failure",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"},o=new Error("Certificate loading failed");vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Right)(t)),vi.spyOn(s,"loadCertificate").mockRejectedValue(o),await expect(a.load(e)).rejects.toThrow(o)}),it("should convert transaction buffer to hex string correctly",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(i,"getTransactionCheck").mockResolvedValue((0,c.Right)(t)),vi.spyOn(s,"loadCertificate").mockResolvedValue(n),await a.load(e),expect(i.getTransactionCheck).toHaveBeenCalledWith({chainId:e.chainId,rawTx:"0x010203",from:e.from})})})});
2
2
  //# sourceMappingURL=TransactionCheckContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/transaction-check/domain/TransactionCheckContextLoader.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 { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { NullLoggerPublisherService } from \"@/shared/utils/NullLoggerPublisherService\";\nimport { type TransactionCheckDataSource } from \"@/transaction-check/data/TransactionCheckDataSource\";\nimport {\n type TransactionCheckContextInput,\n TransactionCheckContextLoader,\n} from \"@/transaction-check/domain/TransactionCheckContextLoader\";\n\ndescribe(\"TransactionCheckContextLoader\", () => {\n const mockTransactionCheckDataSource: TransactionCheckDataSource = {\n getTransactionCheck: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TransactionCheckContextLoader(\n mockTransactionCheckDataSource,\n mockCertificateLoader,\n NullLoggerPublisherService,\n );\n\n const SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.TRANSACTION_CHECK,\n ];\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TransactionCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n transaction: new Uint8Array([1, 2, 3]),\n deviceModelId: DeviceModelId.FLEX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(loader.canHandle(validInput, SUPPORTED_TYPES)).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: undefined }, \"missing from\"],\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, transaction: undefined }, \"missing transaction\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: \"invalid-hex\" }, \"invalid from hex\"],\n [{ ...validInput, from: \"0x\" }, \"empty from hex\"],\n [{ ...validInput, from: \"not-hex\" }, \"non-hex from\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for NANO_S device model\", () => {\n const inputWithNanoS = {\n ...validInput,\n deviceModelId: DeviceModelId.NANO_S,\n };\n expect(loader.canHandle(inputWithNanoS, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for non-number chainId\", () => {\n const inputWithInvalidChainId = {\n ...validInput,\n chainId: \"not-a-number\" as unknown as number,\n };\n expect(loader.canHandle(inputWithInvalidChainId, SUPPORTED_TYPES)).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n const validInput: TransactionCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n transaction: new Uint8Array([1, 2, 3]),\n deviceModelId: DeviceModelId.FLEX,\n };\n\n const mockCertificate = {\n descriptor: \"cert-descriptor\",\n signature: \"cert-signature\",\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n };\n\n it(\"should return empty array when from is empty\", async () => {\n const inputWithEmptyFrom = { ...validInput, from: \"\" };\n const result = await loader.load(inputWithEmptyFrom);\n expect(result).toEqual([]);\n });\n\n it(\"should return error context when transaction check fails\", async () => {\n const error = new Error(\"Transaction check failed\");\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Left(error));\n\n const result = await loader.load(validInput);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n\n it(\"should return transaction check context when successful\", async () => {\n const transactionCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Right(transactionCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n const result = await loader.load(validInput);\n\n expect(\n mockTransactionCheckDataSource.getTransactionCheck,\n ).toHaveBeenCalledWith({\n chainId: validInput.chainId,\n rawTx: \"0x010203\",\n from: validInput.from,\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: transactionCheckData.publicKeyId,\n keyUsage: KeyUsage.TxSimulationSigner,\n targetDevice: validInput.deviceModelId,\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: transactionCheckData.descriptor,\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should handle certificate loading failure\", async () => {\n const transactionCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n const certificateError = new Error(\"Certificate loading failed\");\n\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Right(transactionCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n certificateError,\n );\n\n await expect(loader.load(validInput)).rejects.toThrow(certificateError);\n });\n\n it(\"should convert transaction buffer to hex string correctly\", async () => {\n const transactionCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Right(transactionCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n await loader.load(validInput);\n\n expect(\n mockTransactionCheckDataSource.getTransactionCheck,\n ).toHaveBeenCalledWith({\n chainId: validInput.chainId,\n rawTx: \"0x010203\", // Uint8Array([1, 2, 3]) converted to hex\n from: validInput.from,\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_KeyUsage", "import_ClearSignContext", "import_NullLoggerPublisherService", "import_TransactionCheckContextLoader", "mockTransactionCheckDataSource", "mockCertificateLoader", "loader", "SUPPORTED_TYPES", "validInput", "input", "_description", "inputWithNanoS", "inputWithInvalidChainId", "mockCertificate", "inputWithEmptyFrom", "result", "error", "transactionCheckData", "certificateError"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport type { PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionCheckDataSource } from \"@/transaction-check/data/TransactionCheckDataSource\";\nimport {\n type TransactionCheckContextInput,\n TransactionCheckContextLoader,\n} from \"@/transaction-check/domain/TransactionCheckContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"TransactionCheckContextLoader\", () => {\n const mockTransactionCheckDataSource: TransactionCheckDataSource = {\n getTransactionCheck: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TransactionCheckContextLoader(\n mockTransactionCheckDataSource,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n const SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.TRANSACTION_CHECK,\n ];\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TransactionCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n transaction: new Uint8Array([1, 2, 3]),\n deviceModelId: DeviceModelId.FLEX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(loader.canHandle(validInput, SUPPORTED_TYPES)).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: undefined }, \"missing from\"],\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, transaction: undefined }, \"missing transaction\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: \"invalid-hex\" }, \"invalid from hex\"],\n [{ ...validInput, from: \"0x\" }, \"empty from hex\"],\n [{ ...validInput, from: \"not-hex\" }, \"non-hex from\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for NANO_S device model\", () => {\n const inputWithNanoS = {\n ...validInput,\n deviceModelId: DeviceModelId.NANO_S,\n };\n expect(loader.canHandle(inputWithNanoS, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for non-number chainId\", () => {\n const inputWithInvalidChainId = {\n ...validInput,\n chainId: \"not-a-number\" as unknown as number,\n };\n expect(loader.canHandle(inputWithInvalidChainId, SUPPORTED_TYPES)).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n const validInput: TransactionCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n transaction: new Uint8Array([1, 2, 3]),\n deviceModelId: DeviceModelId.FLEX,\n };\n\n const mockCertificate = {\n descriptor: \"cert-descriptor\",\n signature: \"cert-signature\",\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n };\n\n it(\"should return empty array when from is empty\", async () => {\n const inputWithEmptyFrom = { ...validInput, from: \"\" };\n const result = await loader.load(inputWithEmptyFrom);\n expect(result).toEqual([]);\n });\n\n it(\"should return error context when transaction check fails\", async () => {\n const error = new Error(\"Transaction check failed\");\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Left(error));\n\n const result = await loader.load(validInput);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n\n it(\"should return transaction check context when successful\", async () => {\n const transactionCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Right(transactionCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n const result = await loader.load(validInput);\n\n expect(\n mockTransactionCheckDataSource.getTransactionCheck,\n ).toHaveBeenCalledWith({\n chainId: validInput.chainId,\n rawTx: \"0x010203\",\n from: validInput.from,\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: transactionCheckData.publicKeyId,\n keyUsage: KeyUsage.TxSimulationSigner,\n targetDevice: validInput.deviceModelId,\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: transactionCheckData.descriptor,\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should handle certificate loading failure\", async () => {\n const transactionCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n const certificateError = new Error(\"Certificate loading failed\");\n\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Right(transactionCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n certificateError,\n );\n\n await expect(loader.load(validInput)).rejects.toThrow(certificateError);\n });\n\n it(\"should convert transaction buffer to hex string correctly\", async () => {\n const transactionCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTransactionCheckDataSource,\n \"getTransactionCheck\",\n ).mockResolvedValue(Right(transactionCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n await loader.load(validInput);\n\n expect(\n mockTransactionCheckDataSource.getTransactionCheck,\n ).toHaveBeenCalledWith({\n chainId: validInput.chainId,\n rawTx: \"0x010203\", // Uint8Array([1, 2, 3]) converted to hex\n from: validInput.from,\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_KeyUsage", "import_ClearSignContext", "import_TransactionCheckContextLoader", "mockLoggerFactory", "mockTransactionCheckDataSource", "mockCertificateLoader", "loader", "SUPPORTED_TYPES", "validInput", "input", "_description", "inputWithNanoS", "inputWithInvalidChainId", "mockCertificate", "inputWithEmptyFrom", "result", "error", "transactionCheckData", "certificateError"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var l=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),y=require("../../pki/model/KeyUsage"),s=require("../../shared/model/ClearSignContext"),m=require("../../shared/utils/NullLoggerPublisherService"),u=require("../../transaction-check/domain/TypedDataCheckContextLoader");describe("TypedDataCheckContextLoader",()=>{const o={getTypedDataCheck:vi.fn()},c={loadCertificate:vi.fn()},n=new u.TypedDataCheckContextLoader(o,c,m.NullLoggerPublisherService),r=[s.ClearSignContextType.TRANSACTION_CHECK];beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle function",()=>{const e={from:"0x1234567890123456789012345678901234567890",data:{domain:{name:"Test Domain",version:"1",chainId:1,verifyingContract:"0x1234567890123456789012345678901234567890"},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Person:[{name:"name",type:"string"},{name:"wallet",type:"address"}]},primaryType:"Person",message:{name:"Alice",wallet:"0x1234567890123456789012345678901234567890"}},deviceModelId:l.DeviceModelId.FLEX};it("should return true for valid input",()=>{expect(n.canHandle(e,r)).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(n.canHandle(e,[s.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(a,t)=>{expect(n.canHandle(a,r)).toBe(!1)}),it.each([[{...e,from:void 0},"missing from"],[{...e,data:void 0},"missing data"],[{...e,deviceModelId:void 0},"missing deviceModelId"]])("should return false for %s",(a,t)=>{expect(n.canHandle(a,r)).toBe(!1)}),it.each([[{...e,from:"invalid-hex"},"invalid from hex"],[{...e,from:"0x"},"empty from hex"],[{...e,from:"not-hex"},"non-hex from"]])("should return false for %s",(a,t)=>{expect(n.canHandle(a,r)).toBe(!1)}),it("should return false for NANO_S device model",()=>{const a={...e,deviceModelId:l.DeviceModelId.NANO_S};expect(n.canHandle(a,r)).toBe(!1)}),it("should return false for non-object data",()=>{const a={...e,data:"not-an-object"};expect(n.canHandle(a,r)).toBe(!1)})}),describe("load function",()=>{const p={domain:{name:"Test Domain",version:"1",chainId:1,verifyingContract:"0x1234567890123456789012345678901234567890"},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Person:[{name:"name",type:"string"},{name:"wallet",type:"address"}]},primaryType:"Person",message:{name:"Alice",wallet:"0x1234567890123456789012345678901234567890"}},e={from:"0x1234567890123456789012345678901234567890",data:p,deviceModelId:l.DeviceModelId.FLEX},a={descriptor:"cert-descriptor",signature:"cert-signature",keyUsageNumber:0,payload:new Uint8Array};it("should return empty array when from is empty",async()=>{const t={...e,from:""},i=await n.load(t);expect(i).toEqual([])}),it("should return error context when typed data check fails",async()=>{const t=new Error("Typed data check failed");vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Left)(t));const i=await n.load(e);expect(i).toEqual([{type:s.ClearSignContextType.ERROR,error:t}])}),it("should return transaction check context when successful",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Right)(t)),vi.spyOn(c,"loadCertificate").mockResolvedValue(a);const i=await n.load(e);expect(o.getTypedDataCheck).toHaveBeenCalledWith({data:e.data,from:e.from}),expect(c.loadCertificate).toHaveBeenCalledWith({keyId:t.publicKeyId,keyUsage:y.KeyUsage.TxSimulationSigner,targetDevice:e.deviceModelId}),expect(i).toEqual([{type:s.ClearSignContextType.TRANSACTION_CHECK,payload:t.descriptor,certificate:a}])}),it("should handle certificate loading failure",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"},i=new Error("Certificate loading failed");vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Right)(t)),vi.spyOn(c,"loadCertificate").mockRejectedValue(i),await expect(n.load(e)).rejects.toThrow(i)}),it("should call typed data check with correct parameters",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Right)(t)),vi.spyOn(c,"loadCertificate").mockResolvedValue(a),await n.load(e),expect(o.getTypedDataCheck).toHaveBeenCalledWith({data:p,from:e.from})})})});
1
+ "use strict";var l=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),y=require("../../pki/model/KeyUsage"),s=require("../../shared/model/ClearSignContext"),m=require("../../transaction-check/domain/TypedDataCheckContextLoader");const f=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("TypedDataCheckContextLoader",()=>{const o={getTypedDataCheck:vi.fn()},c={loadCertificate:vi.fn()},n=new m.TypedDataCheckContextLoader(o,c,f),r=[s.ClearSignContextType.TRANSACTION_CHECK];beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle function",()=>{const e={from:"0x1234567890123456789012345678901234567890",data:{domain:{name:"Test Domain",version:"1",chainId:1,verifyingContract:"0x1234567890123456789012345678901234567890"},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Person:[{name:"name",type:"string"},{name:"wallet",type:"address"}]},primaryType:"Person",message:{name:"Alice",wallet:"0x1234567890123456789012345678901234567890"}},deviceModelId:l.DeviceModelId.FLEX};it("should return true for valid input",()=>{expect(n.canHandle(e,r)).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(n.canHandle(e,[s.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(a,t)=>{expect(n.canHandle(a,r)).toBe(!1)}),it.each([[{...e,from:void 0},"missing from"],[{...e,data:void 0},"missing data"],[{...e,deviceModelId:void 0},"missing deviceModelId"]])("should return false for %s",(a,t)=>{expect(n.canHandle(a,r)).toBe(!1)}),it.each([[{...e,from:"invalid-hex"},"invalid from hex"],[{...e,from:"0x"},"empty from hex"],[{...e,from:"not-hex"},"non-hex from"]])("should return false for %s",(a,t)=>{expect(n.canHandle(a,r)).toBe(!1)}),it("should return false for NANO_S device model",()=>{const a={...e,deviceModelId:l.DeviceModelId.NANO_S};expect(n.canHandle(a,r)).toBe(!1)}),it("should return false for non-object data",()=>{const a={...e,data:"not-an-object"};expect(n.canHandle(a,r)).toBe(!1)})}),describe("load function",()=>{const p={domain:{name:"Test Domain",version:"1",chainId:1,verifyingContract:"0x1234567890123456789012345678901234567890"},types:{EIP712Domain:[{name:"name",type:"string"},{name:"version",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}],Person:[{name:"name",type:"string"},{name:"wallet",type:"address"}]},primaryType:"Person",message:{name:"Alice",wallet:"0x1234567890123456789012345678901234567890"}},e={from:"0x1234567890123456789012345678901234567890",data:p,deviceModelId:l.DeviceModelId.FLEX},a={descriptor:"cert-descriptor",signature:"cert-signature",keyUsageNumber:0,payload:new Uint8Array};it("should return empty array when from is empty",async()=>{const t={...e,from:""},i=await n.load(t);expect(i).toEqual([])}),it("should return error context when typed data check fails",async()=>{const t=new Error("Typed data check failed");vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Left)(t));const i=await n.load(e);expect(i).toEqual([{type:s.ClearSignContextType.ERROR,error:t}])}),it("should return transaction check context when successful",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Right)(t)),vi.spyOn(c,"loadCertificate").mockResolvedValue(a);const i=await n.load(e);expect(o.getTypedDataCheck).toHaveBeenCalledWith({data:e.data,from:e.from}),expect(c.loadCertificate).toHaveBeenCalledWith({keyId:t.publicKeyId,keyUsage:y.KeyUsage.TxSimulationSigner,targetDevice:e.deviceModelId}),expect(i).toEqual([{type:s.ClearSignContextType.TRANSACTION_CHECK,payload:t.descriptor,certificate:a}])}),it("should handle certificate loading failure",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"},i=new Error("Certificate loading failed");vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Right)(t)),vi.spyOn(c,"loadCertificate").mockRejectedValue(i),await expect(n.load(e)).rejects.toThrow(i)}),it("should call typed data check with correct parameters",async()=>{const t={publicKeyId:"test-key-id",descriptor:"test-descriptor"};vi.spyOn(o,"getTypedDataCheck").mockResolvedValue((0,d.Right)(t)),vi.spyOn(c,"loadCertificate").mockResolvedValue(a),await n.load(e),expect(o.getTypedDataCheck).toHaveBeenCalledWith({data:p,from:e.from})})})});
2
2
  //# sourceMappingURL=TypedDataCheckContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/transaction-check/domain/TypedDataCheckContextLoader.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 { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { NullLoggerPublisherService } from \"@/shared/utils/NullLoggerPublisherService\";\nimport {\n type TypedData,\n type TypedDataCheckDataSource,\n} from \"@/transaction-check/data/TypedDataCheckDataSource\";\nimport {\n type TypedDataCheckContextInput,\n TypedDataCheckContextLoader,\n} from \"@/transaction-check/domain/TypedDataCheckContextLoader\";\n\ndescribe(\"TypedDataCheckContextLoader\", () => {\n const mockTypedDataCheckDataSource: TypedDataCheckDataSource = {\n getTypedDataCheck: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TypedDataCheckContextLoader(\n mockTypedDataCheckDataSource,\n mockCertificateLoader,\n NullLoggerPublisherService,\n );\n\n const SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.TRANSACTION_CHECK,\n ];\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle function\", () => {\n const validTypedData: TypedData = {\n domain: {\n name: \"Test Domain\",\n version: \"1\",\n chainId: 1,\n verifyingContract: \"0x1234567890123456789012345678901234567890\",\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"verifyingContract\", type: \"address\" },\n ],\n Person: [\n { name: \"name\", type: \"string\" },\n { name: \"wallet\", type: \"address\" },\n ],\n },\n primaryType: \"Person\",\n message: {\n name: \"Alice\",\n wallet: \"0x1234567890123456789012345678901234567890\",\n },\n };\n\n const validInput: TypedDataCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n data: validTypedData,\n deviceModelId: DeviceModelId.FLEX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(loader.canHandle(validInput, SUPPORTED_TYPES)).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: undefined }, \"missing from\"],\n [{ ...validInput, data: undefined }, \"missing data\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: \"invalid-hex\" }, \"invalid from hex\"],\n [{ ...validInput, from: \"0x\" }, \"empty from hex\"],\n [{ ...validInput, from: \"not-hex\" }, \"non-hex from\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for NANO_S device model\", () => {\n const inputWithNanoS = {\n ...validInput,\n deviceModelId: DeviceModelId.NANO_S,\n };\n expect(loader.canHandle(inputWithNanoS, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for non-object data\", () => {\n const inputWithInvalidData = {\n ...validInput,\n data: \"not-an-object\" as unknown as TypedData,\n };\n expect(loader.canHandle(inputWithInvalidData, SUPPORTED_TYPES)).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n const validTypedData: TypedData = {\n domain: {\n name: \"Test Domain\",\n version: \"1\",\n chainId: 1,\n verifyingContract: \"0x1234567890123456789012345678901234567890\",\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"verifyingContract\", type: \"address\" },\n ],\n Person: [\n { name: \"name\", type: \"string\" },\n { name: \"wallet\", type: \"address\" },\n ],\n },\n primaryType: \"Person\",\n message: {\n name: \"Alice\",\n wallet: \"0x1234567890123456789012345678901234567890\",\n },\n };\n\n const validInput: TypedDataCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n data: validTypedData,\n deviceModelId: DeviceModelId.FLEX,\n };\n\n const mockCertificate = {\n descriptor: \"cert-descriptor\",\n signature: \"cert-signature\",\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n };\n\n it(\"should return empty array when from is empty\", async () => {\n const inputWithEmptyFrom = { ...validInput, from: \"\" };\n const result = await loader.load(inputWithEmptyFrom);\n expect(result).toEqual([]);\n });\n\n it(\"should return error context when typed data check fails\", async () => {\n const error = new Error(\"Typed data check failed\");\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Left(error));\n\n const result = await loader.load(validInput);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n\n it(\"should return transaction check context when successful\", async () => {\n const typedDataCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Right(typedDataCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n const result = await loader.load(validInput);\n\n expect(\n mockTypedDataCheckDataSource.getTypedDataCheck,\n ).toHaveBeenCalledWith({\n data: validInput.data,\n from: validInput.from,\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: typedDataCheckData.publicKeyId,\n keyUsage: KeyUsage.TxSimulationSigner,\n targetDevice: validInput.deviceModelId,\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: typedDataCheckData.descriptor,\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should handle certificate loading failure\", async () => {\n const typedDataCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n const certificateError = new Error(\"Certificate loading failed\");\n\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Right(typedDataCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n certificateError,\n );\n\n await expect(loader.load(validInput)).rejects.toThrow(certificateError);\n });\n\n it(\"should call typed data check with correct parameters\", async () => {\n const typedDataCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Right(typedDataCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n await loader.load(validInput);\n\n expect(\n mockTypedDataCheckDataSource.getTypedDataCheck,\n ).toHaveBeenCalledWith({\n data: validTypedData,\n from: validInput.from,\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_KeyUsage", "import_ClearSignContext", "import_NullLoggerPublisherService", "import_TypedDataCheckContextLoader", "mockTypedDataCheckDataSource", "mockCertificateLoader", "loader", "SUPPORTED_TYPES", "validInput", "input", "_description", "inputWithNanoS", "inputWithInvalidData", "validTypedData", "mockCertificate", "inputWithEmptyFrom", "result", "error", "typedDataCheckData", "certificateError"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport type { PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport {\n type TypedData,\n type TypedDataCheckDataSource,\n} from \"@/transaction-check/data/TypedDataCheckDataSource\";\nimport {\n type TypedDataCheckContextInput,\n TypedDataCheckContextLoader,\n} from \"@/transaction-check/domain/TypedDataCheckContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"TypedDataCheckContextLoader\", () => {\n const mockTypedDataCheckDataSource: TypedDataCheckDataSource = {\n getTypedDataCheck: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TypedDataCheckContextLoader(\n mockTypedDataCheckDataSource,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n const SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.TRANSACTION_CHECK,\n ];\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle function\", () => {\n const validTypedData: TypedData = {\n domain: {\n name: \"Test Domain\",\n version: \"1\",\n chainId: 1,\n verifyingContract: \"0x1234567890123456789012345678901234567890\",\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"verifyingContract\", type: \"address\" },\n ],\n Person: [\n { name: \"name\", type: \"string\" },\n { name: \"wallet\", type: \"address\" },\n ],\n },\n primaryType: \"Person\",\n message: {\n name: \"Alice\",\n wallet: \"0x1234567890123456789012345678901234567890\",\n },\n };\n\n const validInput: TypedDataCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n data: validTypedData,\n deviceModelId: DeviceModelId.FLEX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(loader.canHandle(validInput, SUPPORTED_TYPES)).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: undefined }, \"missing from\"],\n [{ ...validInput, data: undefined }, \"missing data\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it.each([\n [{ ...validInput, from: \"invalid-hex\" }, \"invalid from hex\"],\n [{ ...validInput, from: \"0x\" }, \"empty from hex\"],\n [{ ...validInput, from: \"not-hex\" }, \"non-hex from\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for NANO_S device model\", () => {\n const inputWithNanoS = {\n ...validInput,\n deviceModelId: DeviceModelId.NANO_S,\n };\n expect(loader.canHandle(inputWithNanoS, SUPPORTED_TYPES)).toBe(false);\n });\n\n it(\"should return false for non-object data\", () => {\n const inputWithInvalidData = {\n ...validInput,\n data: \"not-an-object\" as unknown as TypedData,\n };\n expect(loader.canHandle(inputWithInvalidData, SUPPORTED_TYPES)).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n const validTypedData: TypedData = {\n domain: {\n name: \"Test Domain\",\n version: \"1\",\n chainId: 1,\n verifyingContract: \"0x1234567890123456789012345678901234567890\",\n },\n types: {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"version\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n { name: \"verifyingContract\", type: \"address\" },\n ],\n Person: [\n { name: \"name\", type: \"string\" },\n { name: \"wallet\", type: \"address\" },\n ],\n },\n primaryType: \"Person\",\n message: {\n name: \"Alice\",\n wallet: \"0x1234567890123456789012345678901234567890\",\n },\n };\n\n const validInput: TypedDataCheckContextInput = {\n from: \"0x1234567890123456789012345678901234567890\",\n data: validTypedData,\n deviceModelId: DeviceModelId.FLEX,\n };\n\n const mockCertificate = {\n descriptor: \"cert-descriptor\",\n signature: \"cert-signature\",\n keyUsageNumber: 0,\n payload: new Uint8Array(),\n };\n\n it(\"should return empty array when from is empty\", async () => {\n const inputWithEmptyFrom = { ...validInput, from: \"\" };\n const result = await loader.load(inputWithEmptyFrom);\n expect(result).toEqual([]);\n });\n\n it(\"should return error context when typed data check fails\", async () => {\n const error = new Error(\"Typed data check failed\");\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Left(error));\n\n const result = await loader.load(validInput);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n\n it(\"should return transaction check context when successful\", async () => {\n const typedDataCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Right(typedDataCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n const result = await loader.load(validInput);\n\n expect(\n mockTypedDataCheckDataSource.getTypedDataCheck,\n ).toHaveBeenCalledWith({\n data: validInput.data,\n from: validInput.from,\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: typedDataCheckData.publicKeyId,\n keyUsage: KeyUsage.TxSimulationSigner,\n targetDevice: validInput.deviceModelId,\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRANSACTION_CHECK,\n payload: typedDataCheckData.descriptor,\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should handle certificate loading failure\", async () => {\n const typedDataCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n const certificateError = new Error(\"Certificate loading failed\");\n\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Right(typedDataCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockRejectedValue(\n certificateError,\n );\n\n await expect(loader.load(validInput)).rejects.toThrow(certificateError);\n });\n\n it(\"should call typed data check with correct parameters\", async () => {\n const typedDataCheckData = {\n publicKeyId: \"test-key-id\",\n descriptor: \"test-descriptor\",\n };\n vi.spyOn(\n mockTypedDataCheckDataSource,\n \"getTypedDataCheck\",\n ).mockResolvedValue(Right(typedDataCheckData));\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n\n await loader.load(validInput);\n\n expect(\n mockTypedDataCheckDataSource.getTypedDataCheck,\n ).toHaveBeenCalledWith({\n data: validTypedData,\n from: validInput.from,\n });\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAA8B,2CAC9BC,EAA4B,qBAG5BC,EAAyB,gCACzBC,EAAqC,2CAKrCC,EAGO,kEAEP,MAAMC,EAAoB,KAAO,CAC/B,MAAO,GAAG,GAAG,EACb,KAAM,GAAG,GAAG,EACZ,KAAM,GAAG,GAAG,EACZ,MAAO,GAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEA,SAAS,8BAA+B,IAAM,CAC5C,MAAMC,EAAyD,CAC7D,kBAAmB,GAAG,GAAG,CAC3B,EACMC,EAA8C,CAClD,gBAAiB,GAAG,GAAG,CACzB,EACMC,EAAS,IAAI,8BACjBF,EACAC,EACAF,CACF,EAEMI,EAA0C,CAC9C,uBAAqB,iBACvB,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,qBAAsB,IAAM,CA2BnC,MAAMC,EAAyC,CAC7C,KAAM,6CACN,KA5BgC,CAChC,OAAQ,CACN,KAAM,cACN,QAAS,IACT,QAAS,EACT,kBAAmB,4CACrB,EACA,MAAO,CACL,aAAc,CACZ,CAAE,KAAM,OAAQ,KAAM,QAAS,EAC/B,CAAE,KAAM,UAAW,KAAM,QAAS,EAClC,CAAE,KAAM,UAAW,KAAM,SAAU,EACnC,CAAE,KAAM,oBAAqB,KAAM,SAAU,CAC/C,EACA,OAAQ,CACN,CAAE,KAAM,OAAQ,KAAM,QAAS,EAC/B,CAAE,KAAM,SAAU,KAAM,SAAU,CACpC,CACF,EACA,YAAa,SACb,QAAS,CACP,KAAM,QACN,OAAQ,4CACV,CACF,EAKE,cAAe,gBAAc,IAC/B,EAEA,GAAG,qCAAsC,IAAM,CAC7C,OAAOF,EAAO,UAAUE,EAAYD,CAAe,CAAC,EAAE,KAAK,EAAI,CACjE,CAAC,EAED,GAAG,gDAAiD,IAAM,CACxD,OAAOD,EAAO,UAAUE,EAAY,CAAC,uBAAqB,KAAK,CAAC,CAAC,EAAE,KACjE,EACF,CACF,CAAC,EAED,GAAG,KAAK,CACN,CAAC,KAAM,YAAY,EACnB,CAAC,OAAW,iBAAiB,EAC7B,CAAC,CAAC,EAAG,cAAc,EACnB,CAAC,SAAU,cAAc,EACzB,CAAC,IAAK,cAAc,CACtB,CAAC,EAAE,6BAA8B,CAACC,EAAOC,IAAiB,CACxD,OAAOJ,EAAO,UAAUG,EAAOF,CAAe,CAAC,EAAE,KAAK,EAAK,CAC7D,CAAC,EAED,GAAG,KAAK,CACN,CAAC,CAAE,GAAGC,EAAY,KAAM,MAAU,EAAG,cAAc,EACnD,CAAC,CAAE,GAAGA,EAAY,KAAM,MAAU,EAAG,cAAc,EACnD,CAAC,CAAE,GAAGA,EAAY,cAAe,MAAU,EAAG,uBAAuB,CACvE,CAAC,EAAE,6BAA8B,CAACC,EAAOC,IAAiB,CACxD,OAAOJ,EAAO,UAAUG,EAAOF,CAAe,CAAC,EAAE,KAAK,EAAK,CAC7D,CAAC,EAED,GAAG,KAAK,CACN,CAAC,CAAE,GAAGC,EAAY,KAAM,aAAc,EAAG,kBAAkB,EAC3D,CAAC,CAAE,GAAGA,EAAY,KAAM,IAAK,EAAG,gBAAgB,EAChD,CAAC,CAAE,GAAGA,EAAY,KAAM,SAAU,EAAG,cAAc,CACrD,CAAC,EAAE,6BAA8B,CAACC,EAAOC,IAAiB,CACxD,OAAOJ,EAAO,UAAUG,EAAOF,CAAe,CAAC,EAAE,KAAK,EAAK,CAC7D,CAAC,EAED,GAAG,8CAA+C,IAAM,CACtD,MAAMI,EAAiB,CACrB,GAAGH,EACH,cAAe,gBAAc,MAC/B,EACA,OAAOF,EAAO,UAAUK,EAAgBJ,CAAe,CAAC,EAAE,KAAK,EAAK,CACtE,CAAC,EAED,GAAG,0CAA2C,IAAM,CAClD,MAAMK,EAAuB,CAC3B,GAAGJ,EACH,KAAM,eACR,EACA,OAAOF,EAAO,UAAUM,EAAsBL,CAAe,CAAC,EAAE,KAC9D,EACF,CACF,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,MAAMM,EAA4B,CAChC,OAAQ,CACN,KAAM,cACN,QAAS,IACT,QAAS,EACT,kBAAmB,4CACrB,EACA,MAAO,CACL,aAAc,CACZ,CAAE,KAAM,OAAQ,KAAM,QAAS,EAC/B,CAAE,KAAM,UAAW,KAAM,QAAS,EAClC,CAAE,KAAM,UAAW,KAAM,SAAU,EACnC,CAAE,KAAM,oBAAqB,KAAM,SAAU,CAC/C,EACA,OAAQ,CACN,CAAE,KAAM,OAAQ,KAAM,QAAS,EAC/B,CAAE,KAAM,SAAU,KAAM,SAAU,CACpC,CACF,EACA,YAAa,SACb,QAAS,CACP,KAAM,QACN,OAAQ,4CACV,CACF,EAEML,EAAyC,CAC7C,KAAM,6CACN,KAAMK,EACN,cAAe,gBAAc,IAC/B,EAEMC,EAAkB,CACtB,WAAY,kBACZ,UAAW,iBACX,eAAgB,EAChB,QAAS,IAAI,UACf,EAEA,GAAG,+CAAgD,SAAY,CAC7D,MAAMC,EAAqB,CAAE,GAAGP,EAAY,KAAM,EAAG,EAC/CQ,EAAS,MAAMV,EAAO,KAAKS,CAAkB,EACnD,OAAOC,CAAM,EAAE,QAAQ,CAAC,CAAC,CAC3B,CAAC,EAED,GAAG,0DAA2D,SAAY,CACxE,MAAMC,EAAQ,IAAI,MAAM,yBAAyB,EACjD,GAAG,MACDb,EACA,mBACF,EAAE,qBAAkB,QAAKa,CAAK,CAAC,EAE/B,MAAMD,EAAS,MAAMV,EAAO,KAAKE,CAAU,EAE3C,OAAOQ,CAAM,EAAE,QAAQ,CACrB,CACE,KAAM,uBAAqB,MAC3B,MAAAC,CACF,CACF,CAAC,CACH,CAAC,EAED,GAAG,0DAA2D,SAAY,CACxE,MAAMC,EAAqB,CACzB,YAAa,cACb,WAAY,iBACd,EACA,GAAG,MACDd,EACA,mBACF,EAAE,qBAAkB,SAAMc,CAAkB,CAAC,EAC7C,GAAG,MAAMb,EAAuB,iBAAiB,EAAE,kBACjDS,CACF,EAEA,MAAME,EAAS,MAAMV,EAAO,KAAKE,CAAU,EAE3C,OACEJ,EAA6B,iBAC/B,EAAE,qBAAqB,CACrB,KAAMI,EAAW,KACjB,KAAMA,EAAW,IACnB,CAAC,EAED,OAAOH,EAAsB,eAAe,EAAE,qBAAqB,CACjE,MAAOa,EAAmB,YAC1B,SAAU,WAAS,mBACnB,aAAcV,EAAW,aAC3B,CAAC,EAED,OAAOQ,CAAM,EAAE,QAAQ,CACrB,CACE,KAAM,uBAAqB,kBAC3B,QAASE,EAAmB,WAC5B,YAAaJ,CACf,CACF,CAAC,CACH,CAAC,EAED,GAAG,4CAA6C,SAAY,CAC1D,MAAMI,EAAqB,CACzB,YAAa,cACb,WAAY,iBACd,EACMC,EAAmB,IAAI,MAAM,4BAA4B,EAE/D,GAAG,MACDf,EACA,mBACF,EAAE,qBAAkB,SAAMc,CAAkB,CAAC,EAC7C,GAAG,MAAMb,EAAuB,iBAAiB,EAAE,kBACjDc,CACF,EAEA,MAAM,OAAOb,EAAO,KAAKE,CAAU,CAAC,EAAE,QAAQ,QAAQW,CAAgB,CACxE,CAAC,EAED,GAAG,uDAAwD,SAAY,CACrE,MAAMD,EAAqB,CACzB,YAAa,cACb,WAAY,iBACd,EACA,GAAG,MACDd,EACA,mBACF,EAAE,qBAAkB,SAAMc,CAAkB,CAAC,EAC7C,GAAG,MAAMb,EAAuB,iBAAiB,EAAE,kBACjDS,CACF,EAEA,MAAMR,EAAO,KAAKE,CAAU,EAE5B,OACEJ,EAA6B,iBAC/B,EAAE,qBAAqB,CACrB,KAAMS,EACN,KAAML,EAAW,IACnB,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_KeyUsage", "import_ClearSignContext", "import_TypedDataCheckContextLoader", "mockLoggerFactory", "mockTypedDataCheckDataSource", "mockCertificateLoader", "loader", "SUPPORTED_TYPES", "validInput", "input", "_description", "inputWithNanoS", "inputWithInvalidData", "validTypedData", "mockCertificate", "inputWithEmptyFrom", "result", "error", "typedDataCheckData", "certificateError"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var o=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),a=require("../../shared/model/ClearSignContext"),s=require("../../shared/utils/NullLoggerPublisherService"),u=require("../../trusted-name/domain/TrustedNameContextLoader");describe("TrustedNameContextLoader",()=>{const r={getDomainNamePayload:vi.fn(),getTrustedNamePayload:vi.fn()},i={loadCertificate:vi.fn()},n=new u.TrustedNameContextLoader(r,i,s.NullLoggerPublisherService),l={keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])};beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(r,"getDomainNamePayload").mockResolvedValue((0,d.Right)({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),describe("canHandle function",()=>{const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX};it("should return true for valid input",()=>{expect(n.canHandle(e,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(n.canHandle(e,[a.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(t,c)=>{expect(n.canHandle(t,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,chainId:void 0},"missing chainId"],[{...e,domain:void 0},"missing domain"],[{...e,challenge:void 0},"missing challenge"],[{...e,deviceModelId:void 0},"missing device model"]])("should return false for %s",(t,c)=>{expect(n.canHandle(t,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,domain:""},"empty domain"],[{...e,challenge:""},"empty challenge"],[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"],[{...e,domain:123},"numeric domain"],[{...e,challenge:123},"numeric challenge"]])("should return false for %s",(t,c)=>{expect(n.canHandle(t,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!1)})}),describe("load function",()=>{it("should return an error when domain > max length",async()=>{const e={chainId:1,domain:"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX},t=await n.load(e);expect(i.loadCertificate).not.toHaveBeenCalled(),expect(t).toEqual([{type:a.ClearSignContextType.ERROR,error:new Error("[ContextModule] TrustedNameLoader: invalid domain")}])}),it("should return an error when domain is not valid",async()=>{const e={chainId:1,domain:"hello\u{1F44B}",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX},t=await n.load(e);expect(i.loadCertificate).not.toHaveBeenCalled(),expect(t).toEqual([{type:a.ClearSignContextType.ERROR,error:new Error("[ContextModule] TrustedNameLoader: invalid domain")}])}),it("should return a payload",async()=>{vi.spyOn(i,"loadCertificate").mockResolvedValue(l);const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX},t=await n.load(e);expect(i.loadCertificate).toHaveBeenCalledWith({keyId:"testKeyId",keyUsage:"testKeyUsage",targetDevice:o.DeviceModelId.STAX}),expect(t).toEqual([{type:a.ClearSignContextType.TRUSTED_NAME,payload:"payload",certificate:l}])}),it("should return an error when unable to fetch the datasource",async()=>{const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX};vi.spyOn(r,"getDomainNamePayload").mockResolvedValue((0,d.Left)(new Error("error")));const t=await n.load(e);expect(t).toEqual([{type:a.ClearSignContextType.ERROR,error:new Error("error")}])})})});
1
+ "use strict";var o=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),a=require("../../shared/model/ClearSignContext"),s=require("../../trusted-name/domain/TrustedNameContextLoader");const u=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("TrustedNameContextLoader",()=>{const d={getDomainNamePayload:vi.fn(),getTrustedNamePayload:vi.fn()},i={loadCertificate:vi.fn()},n=new s.TrustedNameContextLoader(d,i,u),l={keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])};beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(d,"getDomainNamePayload").mockResolvedValue((0,r.Right)({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),describe("canHandle function",()=>{const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX};it("should return true for valid input",()=>{expect(n.canHandle(e,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(n.canHandle(e,[a.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(t,c)=>{expect(n.canHandle(t,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,chainId:void 0},"missing chainId"],[{...e,domain:void 0},"missing domain"],[{...e,challenge:void 0},"missing challenge"],[{...e,deviceModelId:void 0},"missing device model"]])("should return false for %s",(t,c)=>{expect(n.canHandle(t,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,domain:""},"empty domain"],[{...e,challenge:""},"empty challenge"],[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"],[{...e,domain:123},"numeric domain"],[{...e,challenge:123},"numeric challenge"]])("should return false for %s",(t,c)=>{expect(n.canHandle(t,[a.ClearSignContextType.TRUSTED_NAME])).toBe(!1)})}),describe("load function",()=>{it("should return an error when domain > max length",async()=>{const e={chainId:1,domain:"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX},t=await n.load(e);expect(i.loadCertificate).not.toHaveBeenCalled(),expect(t).toEqual([{type:a.ClearSignContextType.ERROR,error:new Error("[ContextModule] TrustedNameLoader: invalid domain")}])}),it("should return an error when domain is not valid",async()=>{const e={chainId:1,domain:"hello\u{1F44B}",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX},t=await n.load(e);expect(i.loadCertificate).not.toHaveBeenCalled(),expect(t).toEqual([{type:a.ClearSignContextType.ERROR,error:new Error("[ContextModule] TrustedNameLoader: invalid domain")}])}),it("should return a payload",async()=>{vi.spyOn(i,"loadCertificate").mockResolvedValue(l);const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX},t=await n.load(e);expect(i.loadCertificate).toHaveBeenCalledWith({keyId:"testKeyId",keyUsage:"testKeyUsage",targetDevice:o.DeviceModelId.STAX}),expect(t).toEqual([{type:a.ClearSignContextType.TRUSTED_NAME,payload:"payload",certificate:l}])}),it("should return an error when unable to fetch the datasource",async()=>{const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.DeviceModelId.STAX};vi.spyOn(d,"getDomainNamePayload").mockResolvedValue((0,r.Left)(new Error("error")));const t=await n.load(e);expect(t).toEqual([{type:a.ClearSignContextType.ERROR,error:new Error("error")}])})})});
2
2
  //# sourceMappingURL=TrustedNameContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/trusted-name/domain/TrustedNameContextLoader.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 { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { NullLoggerPublisherService } from \"@/shared/utils/NullLoggerPublisherService\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport {\n type TrustedNameContextInput,\n TrustedNameContextLoader,\n} from \"@/trusted-name/domain/TrustedNameContextLoader\";\n\ndescribe(\"TrustedNameContextLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TrustedNameContextLoader(\n mockTrustedNameDataSource,\n mockCertificateLoader,\n NullLoggerPublisherService,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, domain: undefined }, \"missing domain\"],\n [{ ...validInput, challenge: undefined }, \"missing challenge\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing device model\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, domain: \"\" }, \"empty domain\"],\n [{ ...validInput, challenge: \"\" }, \"empty challenge\"],\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, domain: 123 }, \"numeric domain\"],\n [{ ...validInput, challenge: 123 }, \"numeric challenge\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return an error when domain > max length\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return an error when domain is not valid\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello\uD83D\uDC4B\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return a payload\", async () => {\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n targetDevice: DeviceModelId.STAX,\n });\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should return an error when unable to fetch the datasource\", async () => {\n // GIVEN\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // WHEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(Left(new Error(\"error\")));\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_ClearSignContext", "import_NullLoggerPublisherService", "import_TrustedNameContextLoader", "mockTrustedNameDataSource", "mockCertificateLoader", "loader", "mockCertificate", "validInput", "input", "_description", "result"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport {\n type TrustedNameContextInput,\n TrustedNameContextLoader,\n} from \"@/trusted-name/domain/TrustedNameContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"TrustedNameContextLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TrustedNameContextLoader(\n mockTrustedNameDataSource,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, domain: undefined }, \"missing domain\"],\n [{ ...validInput, challenge: undefined }, \"missing challenge\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing device model\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, domain: \"\" }, \"empty domain\"],\n [{ ...validInput, challenge: \"\" }, \"empty challenge\"],\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, domain: 123 }, \"numeric domain\"],\n [{ ...validInput, challenge: 123 }, \"numeric challenge\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return an error when domain > max length\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return an error when domain is not valid\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello\uD83D\uDC4B\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return a payload\", async () => {\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n targetDevice: DeviceModelId.STAX,\n });\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should return an error when unable to fetch the datasource\", async () => {\n // GIVEN\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // WHEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(Left(new Error(\"error\")));\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_ClearSignContext", "import_TrustedNameContextLoader", "mockLoggerFactory", "mockTrustedNameDataSource", "mockCertificateLoader", "loader", "mockCertificate", "validInput", "input", "_description", "result"]
7
7
  }