@ledgerhq/context-module 2.7.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/DefaultContextModule.js +1 -1
  3. package/lib/cjs/src/DefaultContextModule.js.map +2 -2
  4. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  5. package/lib/cjs/src/DefaultContextModule.test.js.map +3 -3
  6. package/lib/cjs/src/index.js +1 -1
  7. package/lib/cjs/src/index.js.map +2 -2
  8. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +1 -1
  9. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +2 -2
  10. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +1 -1
  11. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +3 -3
  12. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +1 -1
  13. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +3 -3
  14. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +1 -1
  15. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +3 -3
  16. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js +1 -1
  17. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +3 -3
  18. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +1 -1
  19. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +3 -3
  20. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +1 -1
  21. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +3 -3
  22. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.test.js +2 -0
  23. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.test.js.map +7 -0
  24. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js +1 -1
  25. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +2 -2
  26. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +1 -1
  27. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +2 -2
  28. package/lib/cjs/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.js +2 -0
  29. package/lib/cjs/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.js.map +7 -0
  30. package/lib/cjs/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.test.js +2 -0
  31. package/lib/cjs/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.test.js.map +7 -0
  32. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  33. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js.map +2 -2
  34. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js +1 -1
  35. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js.map +1 -1
  36. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  37. package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
  38. package/lib/esm/package.json +1 -1
  39. package/lib/esm/src/DefaultContextModule.js +1 -1
  40. package/lib/esm/src/DefaultContextModule.js.map +2 -2
  41. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  42. package/lib/esm/src/DefaultContextModule.test.js.map +3 -3
  43. package/lib/esm/src/index.js +1 -1
  44. package/lib/esm/src/index.js.map +2 -2
  45. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +1 -1
  46. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +2 -2
  47. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +1 -1
  48. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +3 -3
  49. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +1 -1
  50. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +3 -3
  51. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +1 -0
  52. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +4 -4
  53. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js +1 -1
  54. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +3 -3
  55. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +1 -1
  56. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +3 -3
  57. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +1 -1
  58. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +3 -3
  59. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.test.js +2 -0
  60. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.test.js.map +7 -0
  61. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js +1 -1
  62. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +2 -2
  63. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +1 -1
  64. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +2 -2
  65. package/lib/esm/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.js +2 -0
  66. package/lib/esm/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.js.map +7 -0
  67. package/lib/esm/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.test.js +2 -0
  68. package/lib/esm/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.test.js.map +7 -0
  69. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  70. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js.map +2 -2
  71. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  72. package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
  73. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  74. package/lib/types/src/index.d.ts +1 -0
  75. package/lib/types/src/index.d.ts.map +1 -1
  76. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts +3 -0
  77. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts.map +1 -1
  78. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts +20 -0
  79. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts.map +1 -1
  80. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts +26 -0
  81. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts.map +1 -1
  82. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts +9 -0
  83. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts.map +1 -1
  84. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts.map +1 -1
  85. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.test.d.ts +2 -0
  86. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.test.d.ts.map +1 -0
  87. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts +1 -0
  88. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts.map +1 -1
  89. package/lib/types/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.d.ts +31 -0
  90. package/lib/types/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.d.ts.map +1 -0
  91. package/lib/types/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.test.d.ts +2 -0
  92. package/lib/types/src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.test.d.ts.map +1 -0
  93. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts +4 -0
  94. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts.map +1 -1
  95. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts +20 -0
  96. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts.map +1 -1
  97. package/lib/types/src/shared/model/ClearSignContext.d.ts +1 -0
  98. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  99. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  100. package/package.json +2 -2
@@ -0,0 +1,2 @@
1
+ "use strict";var i=require("inversify"),o=require("vitest"),n=require("../../../../config/di/configTypes"),r=require("../../../../modules/multichain/pki/di/pkiTypes"),a=require("../../../../shared/network/di/networkTypes"),s=require("./instructionInfoModuleFactory"),e=require("./instructionInfoTypes");(0,o.describe)("instructionInfoModuleFactory",()=>{(0,o.it)("binds the data source as a singleton so its cache is shared",()=>{const t=new i.Container;t.bind(n.configTypes.Config).toConstantValue({}),t.bind(a.networkTypes.NetworkClient).toConstantValue({}),t.bind(r.pkiTypes.PkiCertificateLoader).toConstantValue({}),t.bind(n.configTypes.ContextModuleLoggerFactory).toConstantValue(()=>({debug:o.vi.fn(),warn:o.vi.fn()})),t.loadSync((0,s.instructionInfoModuleFactory)());const c=t.get(e.instructionInfoTypes.InstructionInfoDataSource),f=t.get(e.instructionInfoTypes.InstructionInfoDataSource);(0,o.expect)(c).toBe(f)})});
2
+ //# sourceMappingURL=instructionInfoModuleFactory.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/instruction-info/di/instructionInfoModuleFactory.test.ts"],
4
+ "sourcesContent": ["import { Container } from \"inversify\";\nimport { describe, expect, it, vi } from \"vitest\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { networkTypes } from \"@/shared/network/di/networkTypes\";\n\nimport { instructionInfoModuleFactory } from \"./instructionInfoModuleFactory\";\nimport { instructionInfoTypes } from \"./instructionInfoTypes\";\n\ndescribe(\"instructionInfoModuleFactory\", () => {\n it(\"binds the data source as a singleton so its cache is shared\", () => {\n const container = new Container();\n container.bind(configTypes.Config).toConstantValue({});\n container.bind(networkTypes.NetworkClient).toConstantValue({});\n container.bind(pkiTypes.PkiCertificateLoader).toConstantValue({});\n container\n .bind(configTypes.ContextModuleLoggerFactory)\n .toConstantValue(() => ({ debug: vi.fn(), warn: vi.fn() }));\n container.loadSync(instructionInfoModuleFactory());\n\n const first = container.get(instructionInfoTypes.InstructionInfoDataSource);\n const second = container.get(\n instructionInfoTypes.InstructionInfoDataSource,\n );\n expect(first).toBe(second);\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAA0B,qBAC1BC,EAAyC,kBAEzCC,EAA4B,mCAC5BC,EAAyB,gDACzBC,EAA6B,4CAE7BC,EAA6C,0CAC7CC,EAAqC,qCAErC,YAAS,+BAAgC,IAAM,IAC7C,MAAG,8DAA+D,IAAM,CACtE,MAAMC,EAAY,IAAI,YACtBA,EAAU,KAAK,cAAY,MAAM,EAAE,gBAAgB,CAAC,CAAC,EACrDA,EAAU,KAAK,eAAa,aAAa,EAAE,gBAAgB,CAAC,CAAC,EAC7DA,EAAU,KAAK,WAAS,oBAAoB,EAAE,gBAAgB,CAAC,CAAC,EAChEA,EACG,KAAK,cAAY,0BAA0B,EAC3C,gBAAgB,KAAO,CAAE,MAAO,KAAG,GAAG,EAAG,KAAM,KAAG,GAAG,CAAE,EAAE,EAC5DA,EAAU,YAAS,gCAA6B,CAAC,EAEjD,MAAMC,EAAQD,EAAU,IAAI,uBAAqB,yBAAyB,EACpEE,EAASF,EAAU,IACvB,uBAAqB,yBACvB,KACA,UAAOC,CAAK,EAAE,KAAKC,CAAM,CAC3B,CAAC,CACH,CAAC",
6
+ "names": ["import_inversify", "import_vitest", "import_configTypes", "import_pkiTypes", "import_networkTypes", "import_instructionInfoModuleFactory", "import_instructionInfoTypes", "container", "first", "second"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var I=Object.defineProperty;var e=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var u=(n,o)=>{for(var r in o)I(n,r,{get:o[r],enumerable:!0})},a=(n,o,r,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of f(o))!s.call(n,t)&&t!==r&&I(n,t,{get:()=>o[t],enumerable:!(c=e(o,t))||c.enumerable});return n};var i=n=>a(I({},"__esModule",{value:!0}),n);var x={};u(x,{instructionInfoTypes:()=>S});module.exports=i(x);const S={InstructionInfoDataSource:Symbol.for("InstructionInfoDataSource"),InstructionInfoContextLoader:Symbol.for("InstructionInfoContextLoader")};0&&(module.exports={instructionInfoTypes});
1
+ "use strict";var a=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var u=(n,o)=>{for(var r in o)a(n,r,{get:o[r],enumerable:!0})},I=(n,o,r,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of l(o))!s.call(n,t)&&t!==r&&a(n,t,{get:()=>o[t],enumerable:!(e=c(o,t))||e.enumerable});return n};var f=n=>I(a({},"__esModule",{value:!0}),n);var S={};u(S,{instructionInfoTypes:()=>i});module.exports=f(S);const i={InstructionInfoDataSource:Symbol.for("InstructionInfoDataSource"),InstructionInfoContextLoader:Symbol.for("InstructionInfoContextLoader"),SolanaBasicFlowRuleContextLoader:Symbol.for("SolanaBasicFlowRuleContextLoader")};0&&(module.exports={instructionInfoTypes});
2
2
  //# sourceMappingURL=instructionInfoTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/instruction-info/di/instructionInfoTypes.ts"],
4
- "sourcesContent": ["export const instructionInfoTypes = {\n InstructionInfoDataSource: Symbol.for(\"InstructionInfoDataSource\"),\n InstructionInfoContextLoader: Symbol.for(\"InstructionInfoContextLoader\"),\n};\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAuB,CAClC,0BAA2B,OAAO,IAAI,2BAA2B,EACjE,6BAA8B,OAAO,IAAI,8BAA8B,CACzE",
4
+ "sourcesContent": ["export const instructionInfoTypes = {\n InstructionInfoDataSource: Symbol.for(\"InstructionInfoDataSource\"),\n InstructionInfoContextLoader: Symbol.for(\"InstructionInfoContextLoader\"),\n SolanaBasicFlowRuleContextLoader: Symbol.for(\n \"SolanaBasicFlowRuleContextLoader\",\n ),\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAuB,CAClC,0BAA2B,OAAO,IAAI,2BAA2B,EACjE,6BAA8B,OAAO,IAAI,8BAA8B,EACvE,iCAAkC,OAAO,IACvC,kCACF,CACF",
6
6
  "names": ["instructionInfoTypes_exports", "__export", "instructionInfoTypes", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=require("@ledgerhq/device-management-kit"),n=require("purify-ts"),t=require("vitest"),i=require("../../../../shared/model/ClearSignContext"),g=require("./InstructionInfoContextLoader");const R=()=>({debug:t.vi.fn(),info:t.vi.fn(),warn:t.vi.fn(),error:t.vi.fn(),subscribers:[]}),y={keyUsageNumber:8,payload:new Uint8Array([66])},r="11111111111111111111111111111111",u="JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4";function f(){return{programId:r,discriminator:"00000000",instructionInfo:{data:"0001sys_data",signature:"prodsig_sys"},substructures:[{kind:0,data:"df1"},{kind:0,data:"df2"},{kind:1,data:"vfp1"}],enumVariants:[],idlDescriptor:{typePool:[],rootType:0},mintAssociations:[],ownerAssociations:[],valueFlowPorts:[],accountResets:[],displayFields:[],hideRules:[]}}function m(){return{programId:r,descriptors:{"00000000":(0,n.Right)(f())},enumVariants:[]}}function O(){return{programId:u,discriminator:"e517cb977ae3ad2a",instructionInfo:{data:"0001jup_data",signature:"prodsig_jup"},substructures:[],enumVariants:[],idlDescriptor:{typePool:[],rootType:0},mintAssociations:[],ownerAssociations:[],valueFlowPorts:[],accountResets:[],displayFields:[],hideRules:[]}}function A(){return{programId:u,descriptors:{e517cb977ae3ad2a:(0,n.Right)(O())},enumVariants:[]}}function N(d=[]){return{programId:u,descriptors:{e517cb977ae3ad2a:(0,n.Right)({...O(),enumVariants:d})},enumVariants:d}}(0,t.describe)("InstructionInfoContextLoader",()=>{let d,p;(0,t.beforeEach)(()=>{t.vi.restoreAllMocks(),d={getInstructionInfo:t.vi.fn()},p={loadCertificate:t.vi.fn().mockResolvedValue(y)}});const l=()=>new g.InstructionInfoContextLoader(d,p,R);(0,t.describe)("canHandle",()=>{(0,t.it)("returns true when SOLANA_INSTRUCTION_INFO is requested and instructions are present",()=>{(0,t.expect)(l().canHandle({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}]},[i.ClearSignContextType.SOLANA_INSTRUCTION_INFO])).toBe(!0)}),(0,t.it)("returns false when SOLANA_INSTRUCTION_INFO is not requested",()=>{(0,t.expect)(l().canHandle({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}]},[i.ClearSignContextType.SOLANA_TOKEN])).toBe(!1)}),(0,t.it)("returns false on missing / empty / malformed instructions",()=>{const o=l(),e=[i.ClearSignContextType.SOLANA_INSTRUCTION_INFO];(0,t.expect)(o.canHandle({},e)).toBe(!1),(0,t.expect)(o.canHandle({instructions:[]},e)).toBe(!1),(0,t.expect)(o.canHandle({instructions:[{programId:""}]},e)).toBe(!1),(0,t.expect)(o.canHandle(null,e)).toBe(!1),(0,t.expect)(o.canHandle("string",e)).toBe(!1)})}),(0,t.describe)("load",()=>{(0,t.it)("fans out one CAL call per distinct programId in parallel",async()=>{const o=l(),e=t.vi.spyOn(d,"getInstructionInfo").mockImplementation(async({programId:s})=>s===r?(0,n.Right)(m()):s===u?(0,n.Right)(A()):(0,n.Left)(new Error("unknown program"))),a=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"},{programId:r,discriminator:"00000000"},{programId:u,discriminator:"e517cb977ae3ad2a"}],network:"solana-mainnet"});(0,t.expect)(e).toHaveBeenCalledTimes(2),(0,t.expect)(e).toHaveBeenCalledWith({programId:r,network:"solana-mainnet"}),(0,t.expect)(e).toHaveBeenCalledWith({programId:u,network:"solana-mainnet"}),(0,t.expect)(a.every(s=>s.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO||s.type===i.ClearSignContextType.ERROR)).toBe(!0),(0,t.expect)(a.filter(s=>s.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO)).toHaveLength(2)}),(0,t.it)("emits one SOLANA_INSTRUCTION_INFO per matching (programId, discriminator), passing the decoded payload through with the certificate",async()=>{const o=l();t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(m()));const a=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"}]})).find(s=>s.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(a).toBeDefined(),(0,t.expect)(a).toMatchObject({type:i.ClearSignContextType.SOLANA_INSTRUCTION_INFO,certificate:y}),(0,t.expect)(a.payload).toEqual(f())}),(0,t.it)("does NOT emit SOLANA_ENUM_VARIANT contexts (those come from EnumVariantContextLoader)",async()=>{const o=l(),e=N([{enumId:"swap",variantIndex:46,descriptor:{data:"01_raydium_tlv",signature:"prodsig_v46"}}]);t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(e));const a=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:u,discriminator:"e517cb977ae3ad2a"}]});(0,t.expect)(a.filter(s=>s.type===i.ClearSignContextType.SOLANA_ENUM_VARIANT)).toHaveLength(0)}),(0,t.it)("bundles CAL enum_variants into the SOLANA_INSTRUCTION_INFO payload (host decode cache)",async()=>{const o=l(),e=[{enumId:"swap",variantIndex:46,descriptor:{data:"01_raydium_tlv",signature:"prodsig_v46"}}];t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(N(e)));const s=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:u,discriminator:"e517cb977ae3ad2a"}]})).find(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(s.payload.enumVariants).toEqual(e)}),(0,t.it)("forwards exactly the enumVariants the data source decoded \u2014 no NaN indices",async()=>{const o=l(),e={enumId:"swap",variantIndex:46,descriptor:{data:"01_raydium_tlv",signature:"prodsig_v46"}};t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(N([e])));const s=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:u,discriminator:"e517cb977ae3ad2a"}]})).find(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(s.payload.enumVariants).toEqual([e])}),(0,t.it)("filters descriptors by requested discriminator",async()=>{const o=l(),e={programId:r,descriptors:{"00000000":(0,n.Right)(f()),"00000001":(0,n.Right)({...f(),discriminator:"00000001",instructionInfo:{data:"0001other",signature:"p"}})},enumVariants:[]};t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(e));const s=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"}]})).filter(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(s).toHaveLength(1),(0,t.expect)(s[0].payload.discriminator).toBe("00000000")}),(0,t.it)("emits an ERROR context for a descriptor the data source could not decode",async()=>{const o=l(),e={programId:r,descriptors:{"00000000":(0,n.Left)(new Error("missing 'test' signature"))},enumVariants:[]};t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(e));const a=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"}]});(0,t.expect)(a).toHaveLength(1),(0,t.expect)(a[0]?.type).toBe(i.ClearSignContextType.ERROR),(0,t.expect)(a[0].error.message).toMatch(/missing 'test' signature/)}),(0,t.it)("emits one ERROR context when CAL fails for a program but keeps processing the others",async()=>{const o=l();t.vi.spyOn(d,"getInstructionInfo").mockImplementation(async({programId:I})=>I===r?(0,n.Right)(m()):(0,n.Left)(new Error("upstream-500")));const e=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"},{programId:u,discriminator:"e517cb977ae3ad2a"}]}),a=e.filter(I=>I.type===i.ClearSignContextType.ERROR),s=e.filter(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(a).toHaveLength(1),(0,t.expect)(s).toHaveLength(1)}),(0,t.it)("degrades every program to ERROR when certificate loading fails",async()=>{t.vi.spyOn(p,"loadCertificate").mockRejectedValue(new Error("pki-down")),t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(m()));const e=await l().load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r},{programId:u}]});(0,t.expect)(e).toHaveLength(2),(0,t.expect)(e.every(a=>a.type===i.ClearSignContextType.ERROR)).toBe(!0)}),(0,t.it)("degrades every program to ERROR when the certificate resolves undefined",async()=>{t.vi.spyOn(p,"loadCertificate").mockResolvedValue(void 0),t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(m()));const e=await l().load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r},{programId:u}]});(0,t.expect)(e).toHaveLength(2),(0,t.expect)(e.every(a=>a.type===i.ClearSignContextType.ERROR)).toBe(!0),(0,t.expect)(e[0].error.message).toMatch(/certificate is missing/)}),(0,t.it)("falls back to default network when input.network is omitted or empty string",async()=>{const o=l(),e=t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,n.Right)(m()));await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}]}),(0,t.expect)(e).toHaveBeenLastCalledWith({programId:r,network:"solana-mainnet"}),await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}],network:""}),(0,t.expect)(e).toHaveBeenLastCalledWith({programId:r,network:"solana-mainnet"})})})});
1
+ "use strict";var c=require("@ledgerhq/device-management-kit"),a=require("purify-ts"),t=require("vitest"),i=require("../../../../shared/model/ClearSignContext"),g=require("./InstructionInfoContextLoader");const R=()=>({debug:t.vi.fn(),info:t.vi.fn(),warn:t.vi.fn(),error:t.vi.fn(),subscribers:[]}),y={keyUsageNumber:8,payload:new Uint8Array([66])},r="11111111111111111111111111111111",u="JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4";function f(){return{programId:r,discriminator:"00000000",instructionInfo:{data:"0001sys_data",signature:"prodsig_sys"},substructures:[{kind:0,data:"df1"},{kind:0,data:"df2"},{kind:1,data:"vfp1"}],enumVariants:[],idlDescriptor:{typePool:[],rootType:0},mintAssociations:[],ownerAssociations:[],valueFlowPorts:[],accountResets:[],displayFields:[],hideRules:[]}}function m(){return{programId:r,descriptors:{"00000000":(0,a.Right)(f())},basicFlowTags:[],enumVariants:[]}}function O(){return{programId:u,discriminator:"e517cb977ae3ad2a",instructionInfo:{data:"0001jup_data",signature:"prodsig_jup"},substructures:[],enumVariants:[],idlDescriptor:{typePool:[],rootType:0},mintAssociations:[],ownerAssociations:[],valueFlowPorts:[],accountResets:[],displayFields:[],hideRules:[]}}function A(){return{programId:u,descriptors:{e517cb977ae3ad2a:(0,a.Right)(O())},basicFlowTags:[],enumVariants:[]}}function N(d=[]){return{programId:u,descriptors:{e517cb977ae3ad2a:(0,a.Right)({...O(),enumVariants:d})},enumVariants:d,basicFlowTags:[]}}(0,t.describe)("InstructionInfoContextLoader",()=>{let d,p;(0,t.beforeEach)(()=>{t.vi.restoreAllMocks(),d={getInstructionInfo:t.vi.fn()},p={loadCertificate:t.vi.fn().mockResolvedValue(y)}});const l=()=>new g.InstructionInfoContextLoader(d,p,R);(0,t.describe)("canHandle",()=>{(0,t.it)("returns true when SOLANA_INSTRUCTION_INFO is requested and instructions are present",()=>{(0,t.expect)(l().canHandle({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}]},[i.ClearSignContextType.SOLANA_INSTRUCTION_INFO])).toBe(!0)}),(0,t.it)("returns false when SOLANA_INSTRUCTION_INFO is not requested",()=>{(0,t.expect)(l().canHandle({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}]},[i.ClearSignContextType.SOLANA_TOKEN])).toBe(!1)}),(0,t.it)("returns false on missing / empty / malformed instructions",()=>{const o=l(),e=[i.ClearSignContextType.SOLANA_INSTRUCTION_INFO];(0,t.expect)(o.canHandle({},e)).toBe(!1),(0,t.expect)(o.canHandle({instructions:[]},e)).toBe(!1),(0,t.expect)(o.canHandle({instructions:[{programId:""}]},e)).toBe(!1),(0,t.expect)(o.canHandle(null,e)).toBe(!1),(0,t.expect)(o.canHandle("string",e)).toBe(!1)})}),(0,t.describe)("load",()=>{(0,t.it)("fans out one CAL call per distinct programId in parallel",async()=>{const o=l(),e=t.vi.spyOn(d,"getInstructionInfo").mockImplementation(async({programId:s})=>s===r?(0,a.Right)(m()):s===u?(0,a.Right)(A()):(0,a.Left)(new Error("unknown program"))),n=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"},{programId:r,discriminator:"00000000"},{programId:u,discriminator:"e517cb977ae3ad2a"}],network:"solana-mainnet"});(0,t.expect)(e).toHaveBeenCalledTimes(2),(0,t.expect)(e).toHaveBeenCalledWith({programId:r,network:"solana-mainnet"}),(0,t.expect)(e).toHaveBeenCalledWith({programId:u,network:"solana-mainnet"}),(0,t.expect)(n.every(s=>s.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO||s.type===i.ClearSignContextType.ERROR)).toBe(!0),(0,t.expect)(n.filter(s=>s.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO)).toHaveLength(2)}),(0,t.it)("emits one SOLANA_INSTRUCTION_INFO per matching (programId, discriminator), passing the decoded payload through with the certificate",async()=>{const o=l();t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(m()));const n=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"}]})).find(s=>s.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(n).toBeDefined(),(0,t.expect)(n).toMatchObject({type:i.ClearSignContextType.SOLANA_INSTRUCTION_INFO,certificate:y}),(0,t.expect)(n.payload).toEqual(f())}),(0,t.it)("does NOT emit SOLANA_ENUM_VARIANT contexts (those come from EnumVariantContextLoader)",async()=>{const o=l(),e=N([{enumId:"swap",variantIndex:46,descriptor:{data:"01_raydium_tlv",signature:"prodsig_v46"}}]);t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(e));const n=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:u,discriminator:"e517cb977ae3ad2a"}]});(0,t.expect)(n.filter(s=>s.type===i.ClearSignContextType.SOLANA_ENUM_VARIANT)).toHaveLength(0)}),(0,t.it)("bundles CAL enum_variants into the SOLANA_INSTRUCTION_INFO payload (host decode cache)",async()=>{const o=l(),e=[{enumId:"swap",variantIndex:46,descriptor:{data:"01_raydium_tlv",signature:"prodsig_v46"}}];t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(N(e)));const s=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:u,discriminator:"e517cb977ae3ad2a"}]})).find(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(s.payload.enumVariants).toEqual(e)}),(0,t.it)("forwards exactly the enumVariants the data source decoded \u2014 no NaN indices",async()=>{const o=l(),e={enumId:"swap",variantIndex:46,descriptor:{data:"01_raydium_tlv",signature:"prodsig_v46"}};t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(N([e])));const s=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:u,discriminator:"e517cb977ae3ad2a"}]})).find(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(s.payload.enumVariants).toEqual([e])}),(0,t.it)("filters descriptors by requested discriminator",async()=>{const o=l(),e={programId:r,descriptors:{"00000000":(0,a.Right)(f()),"00000001":(0,a.Right)({...f(),discriminator:"00000001",instructionInfo:{data:"0001other",signature:"p"}})},enumVariants:[],basicFlowTags:[]};t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(e));const s=(await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"}]})).filter(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(s).toHaveLength(1),(0,t.expect)(s[0].payload.discriminator).toBe("00000000")}),(0,t.it)("emits an ERROR context for a descriptor the data source could not decode",async()=>{const o=l(),e={programId:r,descriptors:{"00000000":(0,a.Left)(new Error("missing 'test' signature"))},enumVariants:[],basicFlowTags:[]};t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(e));const n=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"}]});(0,t.expect)(n).toHaveLength(1),(0,t.expect)(n[0]?.type).toBe(i.ClearSignContextType.ERROR),(0,t.expect)(n[0].error.message).toMatch(/missing 'test' signature/)}),(0,t.it)("emits one ERROR context when CAL fails for a program but keeps processing the others",async()=>{const o=l();t.vi.spyOn(d,"getInstructionInfo").mockImplementation(async({programId:I})=>I===r?(0,a.Right)(m()):(0,a.Left)(new Error("upstream-500")));const e=await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r,discriminator:"00000000"},{programId:u,discriminator:"e517cb977ae3ad2a"}]}),n=e.filter(I=>I.type===i.ClearSignContextType.ERROR),s=e.filter(I=>I.type===i.ClearSignContextType.SOLANA_INSTRUCTION_INFO);(0,t.expect)(n).toHaveLength(1),(0,t.expect)(s).toHaveLength(1)}),(0,t.it)("degrades every program to ERROR when certificate loading fails",async()=>{t.vi.spyOn(p,"loadCertificate").mockRejectedValue(new Error("pki-down")),t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(m()));const e=await l().load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r},{programId:u}]});(0,t.expect)(e).toHaveLength(2),(0,t.expect)(e.every(n=>n.type===i.ClearSignContextType.ERROR)).toBe(!0)}),(0,t.it)("degrades every program to ERROR when the certificate resolves undefined",async()=>{t.vi.spyOn(p,"loadCertificate").mockResolvedValue(void 0),t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(m()));const e=await l().load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r},{programId:u}]});(0,t.expect)(e).toHaveLength(2),(0,t.expect)(e.every(n=>n.type===i.ClearSignContextType.ERROR)).toBe(!0),(0,t.expect)(e[0].error.message).toMatch(/certificate is missing/)}),(0,t.it)("falls back to default network when input.network is omitted or empty string",async()=>{const o=l(),e=t.vi.spyOn(d,"getInstructionInfo").mockResolvedValue((0,a.Right)(m()));await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}]}),(0,t.expect)(e).toHaveBeenLastCalledWith({programId:r,network:"solana-mainnet"}),await o.load({deviceModelId:c.DeviceModelId.NANO_X,instructions:[{programId:r}],network:""}),(0,t.expect)(e).toHaveBeenLastCalledWith({programId:r,network:"solana-mainnet"})})})});
2
2
  //# sourceMappingURL=InstructionInfoContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport {\n type InstructionInfoDataSource,\n type InstructionInfoResult,\n} from \"@/modules/solana/instruction-info/data/InstructionInfoDataSource\";\nimport {\n type SolanaInstructionEnumVariant,\n type SolanaInstructionInfoPayload,\n} from \"@/modules/solana/model/SolanaPayloads\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { InstructionInfoContextLoader } from \"./InstructionInfoContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst mockCertificate = {\n keyUsageNumber: 8,\n payload: new Uint8Array([0x42]),\n};\n\nconst SYSTEM_PROGRAM = \"11111111111111111111111111111111\";\nconst JUPITER_PROGRAM = \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\";\n\n// The data source hands the loader fully-decoded core payloads.\nfunction makeSystemPayload(): SolanaInstructionInfoPayload {\n return {\n programId: SYSTEM_PROGRAM,\n discriminator: \"00000000\",\n instructionInfo: { data: \"0001sys_data\", signature: \"prodsig_sys\" },\n substructures: [\n { kind: 0x00, data: \"df1\" },\n { kind: 0x00, data: \"df2\" },\n { kind: 0x01, data: \"vfp1\" },\n ],\n enumVariants: [],\n idlDescriptor: { typePool: [], rootType: 0 },\n mintAssociations: [],\n ownerAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n hideRules: [],\n };\n}\n\nfunction makeSystemResult(): InstructionInfoResult {\n return {\n programId: SYSTEM_PROGRAM,\n descriptors: { \"00000000\": Right(makeSystemPayload()) },\n enumVariants: [],\n };\n}\n\nfunction makeJupiterPayload(): SolanaInstructionInfoPayload {\n return {\n programId: JUPITER_PROGRAM,\n discriminator: \"e517cb977ae3ad2a\",\n instructionInfo: { data: \"0001jup_data\", signature: \"prodsig_jup\" },\n substructures: [],\n enumVariants: [],\n idlDescriptor: { typePool: [], rootType: 0 },\n mintAssociations: [],\n ownerAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n hideRules: [],\n };\n}\n\nfunction makeJupiterResult(): InstructionInfoResult {\n return {\n programId: JUPITER_PROGRAM,\n descriptors: { e517cb977ae3ad2a: Right(makeJupiterPayload()) },\n enumVariants: [],\n };\n}\n\nfunction makeJupiterRouteResult(\n enumVariants: SolanaInstructionEnumVariant[] = [],\n): InstructionInfoResult {\n return {\n programId: JUPITER_PROGRAM,\n descriptors: {\n e517cb977ae3ad2a: Right({ ...makeJupiterPayload(), enumVariants }),\n },\n enumVariants,\n };\n}\n\ndescribe(\"InstructionInfoContextLoader\", () => {\n let dataSource: InstructionInfoDataSource;\n let certificateLoader: PkiCertificateLoader;\n\n beforeEach(() => {\n vi.restoreAllMocks();\n dataSource = {\n getInstructionInfo: vi.fn(),\n };\n certificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n };\n });\n\n const makeLoader = () =>\n new InstructionInfoContextLoader(\n dataSource,\n certificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_INSTRUCTION_INFO is requested and instructions are present\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n },\n [ClearSignContextType.SOLANA_INSTRUCTION_INFO],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_INSTRUCTION_INFO is not requested\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n },\n [ClearSignContextType.SOLANA_TOKEN],\n ),\n ).toBe(false);\n });\n\n it(\"returns false on missing / empty / malformed instructions\", () => {\n const loader = makeLoader();\n const types = [ClearSignContextType.SOLANA_INSTRUCTION_INFO];\n expect(loader.canHandle({} as any, types)).toBe(false);\n expect(loader.canHandle({ instructions: [] } as any, types)).toBe(false);\n expect(\n loader.canHandle({ instructions: [{ programId: \"\" }] } as any, types),\n ).toBe(false);\n expect(loader.canHandle(null, types)).toBe(false);\n expect(loader.canHandle(\"string\", types)).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"fans out one CAL call per distinct programId in parallel\", async () => {\n const loader = makeLoader();\n const spy = vi\n .spyOn(dataSource, \"getInstructionInfo\")\n .mockImplementation(async ({ programId }) => {\n if (programId === SYSTEM_PROGRAM) return Right(makeSystemResult());\n if (programId === JUPITER_PROGRAM) return Right(makeJupiterResult());\n return Left(new Error(\"unknown program\"));\n });\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" }, // dup\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n network: \"solana-mainnet\",\n });\n\n expect(spy).toHaveBeenCalledTimes(2);\n expect(spy).toHaveBeenCalledWith({\n programId: SYSTEM_PROGRAM,\n network: \"solana-mainnet\",\n });\n expect(spy).toHaveBeenCalledWith({\n programId: JUPITER_PROGRAM,\n network: \"solana-mainnet\",\n });\n\n expect(\n result.every(\n (c) =>\n c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO ||\n c.type === ClearSignContextType.ERROR,\n ),\n ).toBe(true);\n expect(\n result.filter(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n ),\n ).toHaveLength(2);\n });\n\n it(\"emits one SOLANA_INSTRUCTION_INFO per matching (programId, discriminator), passing the decoded payload through with the certificate\", async () => {\n const loader = makeLoader();\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeSystemResult()),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n ],\n });\n\n const infoCtx = result.find(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n expect(infoCtx).toBeDefined();\n expect(infoCtx).toMatchObject({\n type: ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n certificate: mockCertificate,\n });\n // The loader does not transform \u2014 it forwards the data source's payload.\n expect((infoCtx as any).payload).toEqual(makeSystemPayload());\n });\n\n it(\"does NOT emit SOLANA_ENUM_VARIANT contexts (those come from EnumVariantContextLoader)\", async () => {\n const loader = makeLoader();\n // Pass a pre-decoded variant to confirm the loader never emits SOLANA_ENUM_VARIANT.\n const jupiter = makeJupiterRouteResult([\n {\n enumId: \"swap\",\n variantIndex: 46,\n descriptor: { data: \"01_raydium_tlv\", signature: \"prodsig_v46\" },\n },\n ]);\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(jupiter),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n expect(\n result.filter(\n (c) => c.type === ClearSignContextType.SOLANA_ENUM_VARIANT,\n ),\n ).toHaveLength(0);\n });\n\n it(\"bundles CAL enum_variants into the SOLANA_INSTRUCTION_INFO payload (host decode cache)\", async () => {\n const loader = makeLoader();\n const expectedVariants: SolanaInstructionEnumVariant[] = [\n {\n enumId: \"swap\",\n variantIndex: 46,\n descriptor: { data: \"01_raydium_tlv\", signature: \"prodsig_v46\" },\n },\n ];\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeJupiterRouteResult(expectedVariants)),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n const infoCtx = result.find(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n\n expect((infoCtx as any).payload.enumVariants).toEqual(expectedVariants);\n });\n\n it(\"forwards exactly the enumVariants the data source decoded \u2014 no NaN indices\", async () => {\n const loader = makeLoader();\n // The data source is responsible for filtering malformed variant keys;\n // the loader forwards whatever pre-decoded variants it receives as-is.\n const validVariant: SolanaInstructionEnumVariant = {\n enumId: \"swap\",\n variantIndex: 46,\n descriptor: { data: \"01_raydium_tlv\", signature: \"prodsig_v46\" },\n };\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeJupiterRouteResult([validVariant])),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n const infoCtx = result.find(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n\n expect((infoCtx as any).payload.enumVariants).toEqual([validVariant]);\n });\n\n it(\"filters descriptors by requested discriminator\", async () => {\n const loader = makeLoader();\n const result: InstructionInfoResult = {\n programId: SYSTEM_PROGRAM,\n descriptors: {\n \"00000000\": Right(makeSystemPayload()),\n \"00000001\": Right({\n ...makeSystemPayload(),\n discriminator: \"00000001\",\n instructionInfo: { data: \"0001other\", signature: \"p\" },\n }),\n },\n enumVariants: [],\n };\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(result),\n );\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n ],\n });\n\n const infos = out.filter(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n expect(infos).toHaveLength(1);\n expect((infos[0] as any).payload.discriminator).toBe(\"00000000\");\n });\n\n it(\"emits an ERROR context for a descriptor the data source could not decode\", async () => {\n const loader = makeLoader();\n const result: InstructionInfoResult = {\n programId: SYSTEM_PROGRAM,\n descriptors: {\n \"00000000\": Left(new Error(\"missing 'test' signature\")),\n },\n enumVariants: [],\n };\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(result),\n );\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n ],\n });\n\n expect(out).toHaveLength(1);\n expect(out[0]?.type).toBe(ClearSignContextType.ERROR);\n expect((out[0] as any).error.message).toMatch(/missing 'test' signature/);\n });\n\n it(\"emits one ERROR context when CAL fails for a program but keeps processing the others\", async () => {\n const loader = makeLoader();\n vi.spyOn(dataSource, \"getInstructionInfo\").mockImplementation(\n async ({ programId }) => {\n if (programId === SYSTEM_PROGRAM) return Right(makeSystemResult());\n return Left(new Error(\"upstream-500\"));\n },\n );\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n const errors = out.filter((c) => c.type === ClearSignContextType.ERROR);\n const infos = out.filter(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n expect(errors).toHaveLength(1);\n expect(infos).toHaveLength(1);\n });\n\n it(\"degrades every program to ERROR when certificate loading fails\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockRejectedValue(\n new Error(\"pki-down\"),\n );\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeSystemResult()),\n );\n const loader = makeLoader();\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM },\n { programId: JUPITER_PROGRAM },\n ],\n });\n\n expect(out).toHaveLength(2);\n expect(out.every((c) => c.type === ClearSignContextType.ERROR)).toBe(\n true,\n );\n });\n\n it(\"degrades every program to ERROR when the certificate resolves undefined\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeSystemResult()),\n );\n const loader = makeLoader();\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM },\n { programId: JUPITER_PROGRAM },\n ],\n });\n\n expect(out).toHaveLength(2);\n expect(out.every((c) => c.type === ClearSignContextType.ERROR)).toBe(\n true,\n );\n expect((out[0] as any).error.message).toMatch(/certificate is missing/);\n });\n\n it(\"falls back to default network when input.network is omitted or empty string\", async () => {\n const loader = makeLoader();\n const spy = vi\n .spyOn(dataSource, \"getInstructionInfo\")\n .mockResolvedValue(Right(makeSystemResult()));\n\n await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n });\n expect(spy).toHaveBeenLastCalledWith({\n programId: SYSTEM_PROGRAM,\n network: \"solana-mainnet\",\n });\n\n await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n network: \"\",\n });\n expect(spy).toHaveBeenLastCalledWith({\n programId: SYSTEM_PROGRAM,\n network: \"solana-mainnet\",\n });\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport {\n type InstructionInfoDataSource,\n type InstructionInfoResult,\n} from \"@/modules/solana/instruction-info/data/InstructionInfoDataSource\";\nimport {\n type SolanaInstructionEnumVariant,\n type SolanaInstructionInfoPayload,\n} from \"@/modules/solana/model/SolanaPayloads\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { InstructionInfoContextLoader } from \"./InstructionInfoContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst mockCertificate = {\n keyUsageNumber: 8,\n payload: new Uint8Array([0x42]),\n};\n\nconst SYSTEM_PROGRAM = \"11111111111111111111111111111111\";\nconst JUPITER_PROGRAM = \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\";\n\n// The data source hands the loader fully-decoded core payloads.\nfunction makeSystemPayload(): SolanaInstructionInfoPayload {\n return {\n programId: SYSTEM_PROGRAM,\n discriminator: \"00000000\",\n instructionInfo: { data: \"0001sys_data\", signature: \"prodsig_sys\" },\n substructures: [\n { kind: 0x00, data: \"df1\" },\n { kind: 0x00, data: \"df2\" },\n { kind: 0x01, data: \"vfp1\" },\n ],\n enumVariants: [],\n idlDescriptor: { typePool: [], rootType: 0 },\n mintAssociations: [],\n ownerAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n hideRules: [],\n };\n}\n\nfunction makeSystemResult(): InstructionInfoResult {\n return {\n programId: SYSTEM_PROGRAM,\n descriptors: { \"00000000\": Right(makeSystemPayload()) },\n basicFlowTags: [],\n enumVariants: [],\n };\n}\n\nfunction makeJupiterPayload(): SolanaInstructionInfoPayload {\n return {\n programId: JUPITER_PROGRAM,\n discriminator: \"e517cb977ae3ad2a\",\n instructionInfo: { data: \"0001jup_data\", signature: \"prodsig_jup\" },\n substructures: [],\n enumVariants: [],\n idlDescriptor: { typePool: [], rootType: 0 },\n mintAssociations: [],\n ownerAssociations: [],\n valueFlowPorts: [],\n accountResets: [],\n displayFields: [],\n hideRules: [],\n };\n}\n\nfunction makeJupiterResult(): InstructionInfoResult {\n return {\n programId: JUPITER_PROGRAM,\n descriptors: { e517cb977ae3ad2a: Right(makeJupiterPayload()) },\n basicFlowTags: [],\n enumVariants: [],\n };\n}\n\nfunction makeJupiterRouteResult(\n enumVariants: SolanaInstructionEnumVariant[] = [],\n): InstructionInfoResult {\n return {\n programId: JUPITER_PROGRAM,\n descriptors: {\n e517cb977ae3ad2a: Right({ ...makeJupiterPayload(), enumVariants }),\n },\n enumVariants,\n basicFlowTags: [],\n };\n}\n\ndescribe(\"InstructionInfoContextLoader\", () => {\n let dataSource: InstructionInfoDataSource;\n let certificateLoader: PkiCertificateLoader;\n\n beforeEach(() => {\n vi.restoreAllMocks();\n dataSource = {\n getInstructionInfo: vi.fn(),\n };\n certificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n };\n });\n\n const makeLoader = () =>\n new InstructionInfoContextLoader(\n dataSource,\n certificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_INSTRUCTION_INFO is requested and instructions are present\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n },\n [ClearSignContextType.SOLANA_INSTRUCTION_INFO],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_INSTRUCTION_INFO is not requested\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n },\n [ClearSignContextType.SOLANA_TOKEN],\n ),\n ).toBe(false);\n });\n\n it(\"returns false on missing / empty / malformed instructions\", () => {\n const loader = makeLoader();\n const types = [ClearSignContextType.SOLANA_INSTRUCTION_INFO];\n expect(loader.canHandle({} as any, types)).toBe(false);\n expect(loader.canHandle({ instructions: [] } as any, types)).toBe(false);\n expect(\n loader.canHandle({ instructions: [{ programId: \"\" }] } as any, types),\n ).toBe(false);\n expect(loader.canHandle(null, types)).toBe(false);\n expect(loader.canHandle(\"string\", types)).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"fans out one CAL call per distinct programId in parallel\", async () => {\n const loader = makeLoader();\n const spy = vi\n .spyOn(dataSource, \"getInstructionInfo\")\n .mockImplementation(async ({ programId }) => {\n if (programId === SYSTEM_PROGRAM) return Right(makeSystemResult());\n if (programId === JUPITER_PROGRAM) return Right(makeJupiterResult());\n return Left(new Error(\"unknown program\"));\n });\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" }, // dup\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n network: \"solana-mainnet\",\n });\n\n expect(spy).toHaveBeenCalledTimes(2);\n expect(spy).toHaveBeenCalledWith({\n programId: SYSTEM_PROGRAM,\n network: \"solana-mainnet\",\n });\n expect(spy).toHaveBeenCalledWith({\n programId: JUPITER_PROGRAM,\n network: \"solana-mainnet\",\n });\n\n expect(\n result.every(\n (c) =>\n c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO ||\n c.type === ClearSignContextType.ERROR,\n ),\n ).toBe(true);\n expect(\n result.filter(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n ),\n ).toHaveLength(2);\n });\n\n it(\"emits one SOLANA_INSTRUCTION_INFO per matching (programId, discriminator), passing the decoded payload through with the certificate\", async () => {\n const loader = makeLoader();\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeSystemResult()),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n ],\n });\n\n const infoCtx = result.find(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n expect(infoCtx).toBeDefined();\n expect(infoCtx).toMatchObject({\n type: ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n certificate: mockCertificate,\n });\n // The loader does not transform \u2014 it forwards the data source's payload.\n expect((infoCtx as any).payload).toEqual(makeSystemPayload());\n });\n\n it(\"does NOT emit SOLANA_ENUM_VARIANT contexts (those come from EnumVariantContextLoader)\", async () => {\n const loader = makeLoader();\n // Pass a pre-decoded variant to confirm the loader never emits SOLANA_ENUM_VARIANT.\n const jupiter = makeJupiterRouteResult([\n {\n enumId: \"swap\",\n variantIndex: 46,\n descriptor: { data: \"01_raydium_tlv\", signature: \"prodsig_v46\" },\n },\n ]);\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(jupiter),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n expect(\n result.filter(\n (c) => c.type === ClearSignContextType.SOLANA_ENUM_VARIANT,\n ),\n ).toHaveLength(0);\n });\n\n it(\"bundles CAL enum_variants into the SOLANA_INSTRUCTION_INFO payload (host decode cache)\", async () => {\n const loader = makeLoader();\n const expectedVariants: SolanaInstructionEnumVariant[] = [\n {\n enumId: \"swap\",\n variantIndex: 46,\n descriptor: { data: \"01_raydium_tlv\", signature: \"prodsig_v46\" },\n },\n ];\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeJupiterRouteResult(expectedVariants)),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n const infoCtx = result.find(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n\n expect((infoCtx as any).payload.enumVariants).toEqual(expectedVariants);\n });\n\n it(\"forwards exactly the enumVariants the data source decoded \u2014 no NaN indices\", async () => {\n const loader = makeLoader();\n // The data source is responsible for filtering malformed variant keys;\n // the loader forwards whatever pre-decoded variants it receives as-is.\n const validVariant: SolanaInstructionEnumVariant = {\n enumId: \"swap\",\n variantIndex: 46,\n descriptor: { data: \"01_raydium_tlv\", signature: \"prodsig_v46\" },\n };\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeJupiterRouteResult([validVariant])),\n );\n\n const result = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n const infoCtx = result.find(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n\n expect((infoCtx as any).payload.enumVariants).toEqual([validVariant]);\n });\n\n it(\"filters descriptors by requested discriminator\", async () => {\n const loader = makeLoader();\n const result: InstructionInfoResult = {\n programId: SYSTEM_PROGRAM,\n descriptors: {\n \"00000000\": Right(makeSystemPayload()),\n \"00000001\": Right({\n ...makeSystemPayload(),\n discriminator: \"00000001\",\n instructionInfo: { data: \"0001other\", signature: \"p\" },\n }),\n },\n enumVariants: [],\n basicFlowTags: [],\n };\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(result),\n );\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n ],\n });\n\n const infos = out.filter(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n expect(infos).toHaveLength(1);\n expect((infos[0] as any).payload.discriminator).toBe(\"00000000\");\n });\n\n it(\"emits an ERROR context for a descriptor the data source could not decode\", async () => {\n const loader = makeLoader();\n const result: InstructionInfoResult = {\n programId: SYSTEM_PROGRAM,\n descriptors: {\n \"00000000\": Left(new Error(\"missing 'test' signature\")),\n },\n enumVariants: [],\n basicFlowTags: [],\n };\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(result),\n );\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n ],\n });\n\n expect(out).toHaveLength(1);\n expect(out[0]?.type).toBe(ClearSignContextType.ERROR);\n expect((out[0] as any).error.message).toMatch(/missing 'test' signature/);\n });\n\n it(\"emits one ERROR context when CAL fails for a program but keeps processing the others\", async () => {\n const loader = makeLoader();\n vi.spyOn(dataSource, \"getInstructionInfo\").mockImplementation(\n async ({ programId }) => {\n if (programId === SYSTEM_PROGRAM) return Right(makeSystemResult());\n return Left(new Error(\"upstream-500\"));\n },\n );\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM, discriminator: \"00000000\" },\n { programId: JUPITER_PROGRAM, discriminator: \"e517cb977ae3ad2a\" },\n ],\n });\n\n const errors = out.filter((c) => c.type === ClearSignContextType.ERROR);\n const infos = out.filter(\n (c) => c.type === ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n );\n expect(errors).toHaveLength(1);\n expect(infos).toHaveLength(1);\n });\n\n it(\"degrades every program to ERROR when certificate loading fails\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockRejectedValue(\n new Error(\"pki-down\"),\n );\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeSystemResult()),\n );\n const loader = makeLoader();\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM },\n { programId: JUPITER_PROGRAM },\n ],\n });\n\n expect(out).toHaveLength(2);\n expect(out.every((c) => c.type === ClearSignContextType.ERROR)).toBe(\n true,\n );\n });\n\n it(\"degrades every program to ERROR when the certificate resolves undefined\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n vi.spyOn(dataSource, \"getInstructionInfo\").mockResolvedValue(\n Right(makeSystemResult()),\n );\n const loader = makeLoader();\n\n const out = await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [\n { programId: SYSTEM_PROGRAM },\n { programId: JUPITER_PROGRAM },\n ],\n });\n\n expect(out).toHaveLength(2);\n expect(out.every((c) => c.type === ClearSignContextType.ERROR)).toBe(\n true,\n );\n expect((out[0] as any).error.message).toMatch(/certificate is missing/);\n });\n\n it(\"falls back to default network when input.network is omitted or empty string\", async () => {\n const loader = makeLoader();\n const spy = vi\n .spyOn(dataSource, \"getInstructionInfo\")\n .mockResolvedValue(Right(makeSystemResult()));\n\n await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n });\n expect(spy).toHaveBeenLastCalledWith({\n programId: SYSTEM_PROGRAM,\n network: \"solana-mainnet\",\n });\n\n await loader.load({\n deviceModelId: DeviceModelId.NANO_X,\n instructions: [{ programId: SYSTEM_PROGRAM }],\n network: \"\",\n });\n expect(spy).toHaveBeenLastCalledWith({\n programId: SYSTEM_PROGRAM,\n network: \"solana-mainnet\",\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_ClearSignContext", "import_InstructionInfoContextLoader", "mockLoggerFactory", "mockCertificate", "SYSTEM_PROGRAM", "JUPITER_PROGRAM", "makeSystemPayload", "makeSystemResult", "makeJupiterPayload", "makeJupiterResult", "makeJupiterRouteResult", "enumVariants", "dataSource", "certificateLoader", "makeLoader", "loader", "types", "spy", "programId", "result", "c", "infoCtx", "jupiter", "expectedVariants", "validVariant", "infos", "out", "errors"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var B=(n,t)=>{for(var e in t)m(n,e,{get:t[e],enumerable:!0})},E=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of A(t))!F.call(n,o)&&o!==e&&m(n,o,{get:()=>t[o],enumerable:!(r=h(t,o))||r.enumerable});return n};var P=n=>E(m({},"__esModule",{value:!0}),n),R=(n,t,e,r)=>{for(var o=r>1?void 0:r?h(t,e):t,l=n.length-1,i;l>=0;l--)(i=n[l])&&(o=(r?i(t,e,o):i(o))||o);return r&&o&&m(t,e,o),o},S=(n,t)=>(e,r)=>t(e,r,n);var O={};B(O,{SolanaBasicFlowRuleContextLoader:()=>d});module.exports=P(O);var w=require("@ledgerhq/device-management-kit"),f=require("inversify"),a=require("purify-ts"),C=require("../../../../config/di/configTypes"),L=require("../../../../modules/solana/instruction-info/data/InstructionInfoDataSource"),x=require("../../../../modules/solana/instruction-info/di/instructionInfoTypes"),y=require("../../../../shared/model/ClearSignContext");const v="solana-mainnet",M=[y.ClearSignContextType.SOLANA_BASIC_FLOW_RULE],T=a.Codec.interface({programIds:(0,a.array)(a.string),network:(0,a.optional)(a.string)});let d=class{constructor(t,e){this.dataSource=t;this.logger=e("SolanaBasicFlowRuleContextLoader")}logger;canHandle(t,e){return M.every(r=>e.includes(r))?T.decode(t).isRight():!1}async load(t){return(await this.loadRules(t)).caseOf({Left:r=>[{type:y.ClearSignContextType.ERROR,error:r}],Right:r=>r.map(o=>({type:y.ClearSignContextType.SOLANA_BASIC_FLOW_RULE,payload:o}))})}async loadRules({programIds:t,network:e}){const r=e||v,o=Array.from(new Set(t)),l=await Promise.all(o.map(async s=>({programId:s,either:await this.dataSource.getInstructionInfo({programId:s,network:r})}))),i=[],p=[];for(const{programId:s,either:b}of l)b.caseOf({Left:g=>{if(g instanceof L.SolanaProgramNotFoundError){this.logger.debug("[load] Program not in CAL, no signing route",{data:{programId:s}});return}this.logger.warn("[load] Failed to fetch signing routes from CAL",{data:{programId:s,error:g.message}}),p.push(g)},Right:g=>{i.push(g)}});const[c]=p;if(c!==void 0)return(0,a.Left)(c);const u=this.buildRules(i);return this.logger.debug("[load] Built basic-flow rules",{data:{rules:u.map(({id:s})=>s)}}),(0,a.Right)(u)}buildRules(t){const e=new Map;for(const{programId:r,basicFlowTags:o}of t)for(const{discriminator:l,rule:i,role:p}of o){const c=(0,w.hexaStringToBuffer)(l);if(c===null||c.length===0){this.logger.warn("[load] Skipping tag with invalid discriminator",{data:{programId:r,discriminator:l,rule:i}});continue}let u=e.get(i);u===void 0&&(u={required:new Map,allowed:new Map},e.set(i,u));const s=u[p].get(r)??[];s.push(c),u[p].set(r,s)}return Array.from(e,([r,o])=>({id:r,required:I(o.required),allowed:I(o.allowed)}))}};d=R([(0,f.injectable)(),S(0,(0,f.inject)(x.instructionInfoTypes.InstructionInfoDataSource)),S(1,(0,f.inject)(C.configTypes.ContextModuleLoggerFactory))],d);function I(n){return Array.from(n,([t,e])=>({programId:t,discriminators:e}))}0&&(module.exports={SolanaBasicFlowRuleContextLoader});
2
+ //# sourceMappingURL=SolanaBasicFlowRuleContextLoader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.ts"],
4
+ "sourcesContent": ["import {\n hexaStringToBuffer,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport {\n array,\n Codec,\n type Either,\n Left,\n optional,\n Right,\n string,\n} from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport {\n type InstructionInfoDataSource,\n type InstructionInfoResult,\n SolanaProgramNotFoundError,\n} from \"@/modules/solana/instruction-info/data/InstructionInfoDataSource\";\nimport { instructionInfoTypes } from \"@/modules/solana/instruction-info/di/instructionInfoTypes\";\nimport {\n type SolanaBasicFlowRule,\n type SolanaInstructionMatcher,\n} from \"@/modules/solana/model/SolanaContextTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nconst NETWORK_DEFAULT = \"solana-mainnet\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_BASIC_FLOW_RULE,\n];\n\nexport type SolanaBasicFlowRuleContextInput = {\n programIds: string[];\n network?: string;\n};\n\nconst solanaBasicFlowRuleInputCodec = Codec.interface({\n programIds: array(string),\n network: optional(string),\n});\n\ntype MatcherRole = \"required\" | \"allowed\";\n\n// Discriminators per program, in first-seen order, for one rule and role.\ntype RuleBuilder = Record<MatcherRole, Map<string, Uint8Array[]>>;\n\n/**\n * Rebuilds the basic-flow rules CAL tags on the given programs.\n *\n * CAL doesn't serve rules: it tags instructions with `{ rule, role }` in the\n * `solana_programs` response. Tags are grouped by rule id across programs,\n * giving one matcher per (program, role) with the tagged instructions'\n * discriminators. CAL rules always carry discriminators: CAL can't express\n * \"any instruction of this program\".\n *\n * Emits one SOLANA_BASIC_FLOW_RULE context per rule, or a single ERROR\n * context when any CAL lookup fails. A program CAL doesn't know just\n * contributes no tags.\n */\n@injectable()\nexport class SolanaBasicFlowRuleContextLoader\n implements ContextLoader<SolanaBasicFlowRuleContextInput>\n{\n private readonly logger: LoggerPublisherService;\n\n constructor(\n @inject(instructionInfoTypes.InstructionInfoDataSource)\n private readonly dataSource: InstructionInfoDataSource,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"SolanaBasicFlowRuleContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaBasicFlowRuleContextInput {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) return false;\n return solanaBasicFlowRuleInputCodec.decode(input).isRight();\n }\n\n public async load(\n input: SolanaBasicFlowRuleContextInput,\n ): Promise<ClearSignContext[]> {\n const rules = await this.loadRules(input);\n return rules.caseOf<ClearSignContext[]>({\n Left: (error) => [{ type: ClearSignContextType.ERROR, error }],\n Right: (loaded) =>\n loaded.map((rule) => ({\n type: ClearSignContextType.SOLANA_BASIC_FLOW_RULE,\n payload: rule,\n })),\n });\n }\n\n private async loadRules({\n programIds,\n network,\n }: SolanaBasicFlowRuleContextInput): Promise<\n Either<Error, SolanaBasicFlowRule[]>\n > {\n const resolvedNetwork = network || NETWORK_DEFAULT;\n const distinctProgramIds = Array.from(new Set(programIds));\n\n const results = await Promise.all(\n distinctProgramIds.map(async (programId) => ({\n programId,\n either: await this.dataSource.getInstructionInfo({\n programId,\n network: resolvedNetwork,\n }),\n })),\n );\n\n const programs: InstructionInfoResult[] = [];\n const failures: Error[] = [];\n for (const { programId, either } of results) {\n either.caseOf<void>({\n Left: (error) => {\n if (error instanceof SolanaProgramNotFoundError) {\n this.logger.debug(\"[load] Program not in CAL, no signing route\", {\n data: { programId },\n });\n return;\n }\n this.logger.warn(\"[load] Failed to fetch signing routes from CAL\", {\n data: { programId, error: error.message },\n });\n failures.push(error);\n },\n Right: (program) => {\n programs.push(program);\n },\n });\n }\n const [failure] = failures;\n if (failure !== undefined) {\n return Left(failure);\n }\n\n const rules = this.buildRules(programs);\n this.logger.debug(\"[load] Built basic-flow rules\", {\n data: { rules: rules.map(({ id }) => id) },\n });\n return Right(rules);\n }\n\n private buildRules(programs: InstructionInfoResult[]): SolanaBasicFlowRule[] {\n const builders = new Map<string, RuleBuilder>();\n\n for (const { programId, basicFlowTags } of programs) {\n for (const { discriminator, rule, role } of basicFlowTags) {\n const bytes = hexaStringToBuffer(discriminator);\n if (bytes === null || bytes.length === 0) {\n this.logger.warn(\"[load] Skipping tag with invalid discriminator\", {\n data: { programId, discriminator, rule },\n });\n continue;\n }\n\n let builder = builders.get(rule);\n if (builder === undefined) {\n builder = { required: new Map(), allowed: new Map() };\n builders.set(rule, builder);\n }\n const discriminators = builder[role].get(programId) ?? [];\n discriminators.push(bytes);\n builder[role].set(programId, discriminators);\n }\n }\n\n return Array.from(builders, ([id, builder]) => ({\n id,\n required: toMatchers(builder.required),\n allowed: toMatchers(builder.allowed),\n }));\n }\n}\n\nfunction toMatchers(\n byProgram: Map<string, Uint8Array[]>,\n): SolanaInstructionMatcher[] {\n return Array.from(byProgram, ([programId, discriminators]) => ({\n programId,\n discriminators,\n }));\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["SolanaBasicFlowRuleContextLoader_exports", "__export", "SolanaBasicFlowRuleContextLoader", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_purify_ts", "import_configTypes", "import_InstructionInfoDataSource", "import_instructionInfoTypes", "import_ClearSignContext", "NETWORK_DEFAULT", "SUPPORTED_TYPES", "solanaBasicFlowRuleInputCodec", "SolanaBasicFlowRuleContextLoader", "dataSource", "loggerFactory", "input", "expectedTypes", "t", "error", "loaded", "rule", "programIds", "network", "resolvedNetwork", "distinctProgramIds", "results", "programId", "programs", "failures", "either", "program", "failure", "rules", "id", "builders", "basicFlowTags", "discriminator", "role", "bytes", "builder", "discriminators", "toMatchers", "__decorateClass", "__decorateParam", "byProgram"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=require("purify-ts"),e=require("vitest"),I=require("../../../../modules/solana/instruction-info/data/InstructionInfoDataSource"),c=require("../../../../shared/model/ClearSignContext"),f=require("./SolanaBasicFlowRuleContextLoader");const g={debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]},k=()=>g,a="Stake11111111111111111111111111111111111111",i="11111111111111111111111111111111",w="MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",d=t=>new Uint8Array([t,0,0,0]);function u(t,r=[]){return{programId:t,descriptors:{},enumVariants:[],basicFlowTags:r}}const m=u(a,[{discriminator:"00000000",rule:"native-staking",role:"allowed"},{discriminator:"02000000",rule:"native-staking",role:"required"},{discriminator:"04000000",rule:"native-staking",role:"required"},{discriminator:"05000000",rule:"native-staking",role:"required"}]),y=u(i,[{discriminator:"03000000",rule:"native-staking",role:"allowed"}]),S=t=>(0,n.Left)(new I.SolanaProgramNotFoundError(t,`not found ${t}`)),p=t=>t.flatMap(r=>r.type===c.ClearSignContextType.SOLANA_BASIC_FLOW_RULE?[r.payload]:[]);(0,e.describe)("SolanaBasicFlowRuleContextLoader",()=>{let t,r;(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),r={},t={getInstructionInfo:e.vi.fn(({programId:o})=>Promise.resolve(r[o]??S(o)))}});const s=()=>new f.SolanaBasicFlowRuleContextLoader(t,k);(0,e.describe)("canHandle",()=>{const o=[c.ClearSignContextType.SOLANA_BASIC_FLOW_RULE];(0,e.it)("accepts program ids with an optional network",()=>{const l=s();(0,e.expect)(l.canHandle({programIds:[]},o)).toBe(!0),(0,e.expect)(l.canHandle({programIds:[a],network:"solana-devnet"},o)).toBe(!0)}),(0,e.it)("rejects other inputs",()=>{const l=s();(0,e.expect)(l.canHandle(void 0,o)).toBe(!1),(0,e.expect)(l.canHandle({programIds:[1]},o)).toBe(!1)}),(0,e.it)("rejects when basic-flow rules are not expected",()=>{(0,e.expect)(s().canHandle({programIds:[a]},[c.ClearSignContextType.SOLANA_INSTRUCTION_INFO])).toBe(!1)})}),(0,e.it)("rebuilds one rule from tags spread across two programs",async()=>{r[a]=(0,n.Right)(m),r[i]=(0,n.Right)(y);const o=await s().load({programIds:[a,i],network:"solana-mainnet"});(0,e.expect)(o).toEqual([{type:c.ClearSignContextType.SOLANA_BASIC_FLOW_RULE,payload:{id:"native-staking",required:[{programId:a,discriminators:[d(2),d(4),d(5)]}],allowed:[{programId:a,discriminators:[d(0)]},{programId:i,discriminators:[d(3)]}]}}])}),(0,e.it)("builds one rule per rule id",async()=>{r[a]=(0,n.Right)(u(a,[{discriminator:"02000000",rule:"native-staking",role:"required"},{discriminator:"02000000",rule:"foo",role:"required"}]));const o=await s().load({programIds:[a],network:"solana-mainnet"});(0,e.expect)(p(o).map(({id:l})=>l)).toEqual(["native-staking","foo"])}),(0,e.it)("returns no contexts when no program carries tags",async()=>{r[a]=(0,n.Right)(u(a)),r[i]=(0,n.Right)(u(i));const o=await s().load({programIds:[a,i],network:"solana-mainnet"});(0,e.expect)(o).toEqual([])}),(0,e.it)("treats a program not in CAL as having no tags",async()=>{r[a]=(0,n.Right)(m);const o=await s().load({programIds:[a,w],network:"solana-mainnet"});(0,e.expect)(p(o)).toEqual([e.expect.objectContaining({id:"native-staking",allowed:[{programId:a,discriminators:[d(0)]}]})]),(0,e.expect)(g.debug).toHaveBeenCalledWith("[load] Program not in CAL, no signing route",{data:{programId:w}}),(0,e.expect)(g.warn).not.toHaveBeenCalled()}),(0,e.it)("returns an error context when a CAL lookup fails",async()=>{const o=new Error("network");r[a]=(0,n.Right)(m),r[i]=(0,n.Left)(o);const l=await s().load({programIds:[a,i],network:"solana-mainnet"});(0,e.expect)(l).toEqual([{type:c.ClearSignContextType.ERROR,error:o}]),(0,e.expect)(g.warn).toHaveBeenCalledWith("[load] Failed to fetch signing routes from CAL",{data:{programId:i,error:"network"}})}),(0,e.it)("skips a tag whose discriminator is not valid hex",async()=>{r[a]=(0,n.Right)(u(a,[{discriminator:"zz",rule:"native-staking",role:"required"},{discriminator:"02000000",rule:"native-staking",role:"required"}]));const o=await s().load({programIds:[a],network:"solana-mainnet"});(0,e.expect)(p(o)[0].required).toEqual([{programId:a,discriminators:[d(2)]}])}),(0,e.it)("fetches each distinct program once, on mainnet by default",async()=>{r[a]=(0,n.Right)(m),await s().load({programIds:[a,a]}),(0,e.expect)(t.getInstructionInfo).toHaveBeenCalledTimes(1),(0,e.expect)(t.getInstructionInfo).toHaveBeenCalledWith({programId:a,network:"solana-mainnet"})}),(0,e.it)("forwards the network to the data source",async()=>{await s().load({programIds:[a],network:"solana-devnet"}),(0,e.expect)(t.getInstructionInfo).toHaveBeenCalledWith({programId:a,network:"solana-devnet"})})});
2
+ //# sourceMappingURL=SolanaBasicFlowRuleContextLoader.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/instruction-info/domain/SolanaBasicFlowRuleContextLoader.test.ts"],
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport {\n type InstructionInfoDataSource,\n type InstructionInfoResult,\n type SolanaBasicFlowTag,\n SolanaProgramNotFoundError,\n} from \"@/modules/solana/instruction-info/data/InstructionInfoDataSource\";\nimport { type SolanaBasicFlowRule } from \"@/modules/solana/model/SolanaContextTypes\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nimport { SolanaBasicFlowRuleContextLoader } from \"./SolanaBasicFlowRuleContextLoader\";\n\nconst mockLogger = {\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n};\nconst mockLoggerFactory = () => mockLogger;\n\nconst STAKE_PROGRAM = \"Stake11111111111111111111111111111111111111\";\nconst SYSTEM_PROGRAM = \"11111111111111111111111111111111\";\nconst MEMO_PROGRAM = \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\";\n\nconst u32le = (n: number) => new Uint8Array([n, 0, 0, 0]);\n\nfunction makeResult(\n programId: string,\n basicFlowTags: SolanaBasicFlowTag[] = [],\n): InstructionInfoResult {\n return { programId, descriptors: {}, enumVariants: [], basicFlowTags };\n}\n\n// What CAL will serve once the registry annotates native staking.\nconst stakeResult = makeResult(STAKE_PROGRAM, [\n { discriminator: \"00000000\", rule: \"native-staking\", role: \"allowed\" },\n { discriminator: \"02000000\", rule: \"native-staking\", role: \"required\" },\n { discriminator: \"04000000\", rule: \"native-staking\", role: \"required\" },\n { discriminator: \"05000000\", rule: \"native-staking\", role: \"required\" },\n]);\nconst systemResult = makeResult(SYSTEM_PROGRAM, [\n { discriminator: \"03000000\", rule: \"native-staking\", role: \"allowed\" },\n]);\n\nconst notFound = (programId: string) =>\n Left(new SolanaProgramNotFoundError(programId, `not found ${programId}`));\n\nconst rulesOf = (contexts: ClearSignContext[]): SolanaBasicFlowRule[] =>\n contexts.flatMap((context) =>\n context.type === ClearSignContextType.SOLANA_BASIC_FLOW_RULE\n ? [context.payload]\n : [],\n );\n\ndescribe(\"SolanaBasicFlowRuleContextLoader\", () => {\n let dataSource: InstructionInfoDataSource;\n let byProgram: Record<\n string,\n Awaited<ReturnType<InstructionInfoDataSource[\"getInstructionInfo\"]>>\n >;\n\n beforeEach(() => {\n vi.clearAllMocks();\n byProgram = {};\n dataSource = {\n getInstructionInfo: vi.fn(({ programId }: { programId: string }) =>\n Promise.resolve(byProgram[programId] ?? notFound(programId)),\n ),\n };\n });\n\n const makeLoader = () =>\n new SolanaBasicFlowRuleContextLoader(dataSource, mockLoggerFactory);\n\n describe(\"canHandle\", () => {\n const expectedTypes = [ClearSignContextType.SOLANA_BASIC_FLOW_RULE];\n\n it(\"accepts program ids with an optional network\", () => {\n const loader = makeLoader();\n expect(loader.canHandle({ programIds: [] }, expectedTypes)).toBe(true);\n expect(\n loader.canHandle(\n { programIds: [STAKE_PROGRAM], network: \"solana-devnet\" },\n expectedTypes,\n ),\n ).toBe(true);\n });\n\n it(\"rejects other inputs\", () => {\n const loader = makeLoader();\n expect(loader.canHandle(undefined, expectedTypes)).toBe(false);\n expect(loader.canHandle({ programIds: [1] }, expectedTypes)).toBe(false);\n });\n\n it(\"rejects when basic-flow rules are not expected\", () => {\n expect(\n makeLoader().canHandle({ programIds: [STAKE_PROGRAM] }, [\n ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n ]),\n ).toBe(false);\n });\n });\n\n it(\"rebuilds one rule from tags spread across two programs\", async () => {\n byProgram[STAKE_PROGRAM] = Right(stakeResult);\n byProgram[SYSTEM_PROGRAM] = Right(systemResult);\n\n const result = await makeLoader().load({\n programIds: [STAKE_PROGRAM, SYSTEM_PROGRAM],\n network: \"solana-mainnet\",\n });\n\n // One matcher per (program, role), same shape as the bundled default.\n expect(result).toEqual([\n {\n type: ClearSignContextType.SOLANA_BASIC_FLOW_RULE,\n payload: {\n id: \"native-staking\",\n required: [\n {\n programId: STAKE_PROGRAM,\n discriminators: [u32le(2), u32le(4), u32le(5)],\n },\n ],\n allowed: [\n { programId: STAKE_PROGRAM, discriminators: [u32le(0)] },\n { programId: SYSTEM_PROGRAM, discriminators: [u32le(3)] },\n ],\n },\n },\n ]);\n });\n\n it(\"builds one rule per rule id\", async () => {\n byProgram[STAKE_PROGRAM] = Right(\n makeResult(STAKE_PROGRAM, [\n { discriminator: \"02000000\", rule: \"native-staking\", role: \"required\" },\n { discriminator: \"02000000\", rule: \"foo\", role: \"required\" },\n ]),\n );\n\n const result = await makeLoader().load({\n programIds: [STAKE_PROGRAM],\n network: \"solana-mainnet\",\n });\n\n expect(rulesOf(result).map(({ id }) => id)).toEqual([\n \"native-staking\",\n \"foo\",\n ]);\n });\n\n it(\"returns no contexts when no program carries tags\", async () => {\n byProgram[STAKE_PROGRAM] = Right(makeResult(STAKE_PROGRAM));\n byProgram[SYSTEM_PROGRAM] = Right(makeResult(SYSTEM_PROGRAM));\n\n const result = await makeLoader().load({\n programIds: [STAKE_PROGRAM, SYSTEM_PROGRAM],\n network: \"solana-mainnet\",\n });\n\n expect(result).toEqual([]);\n });\n\n it(\"treats a program not in CAL as having no tags\", async () => {\n byProgram[STAKE_PROGRAM] = Right(stakeResult);\n\n const result = await makeLoader().load({\n programIds: [STAKE_PROGRAM, MEMO_PROGRAM],\n network: \"solana-mainnet\",\n });\n\n expect(rulesOf(result)).toEqual([\n expect.objectContaining({\n id: \"native-staking\",\n allowed: [{ programId: STAKE_PROGRAM, discriminators: [u32le(0)] }],\n }),\n ]);\n expect(mockLogger.debug).toHaveBeenCalledWith(\n \"[load] Program not in CAL, no signing route\",\n { data: { programId: MEMO_PROGRAM } },\n );\n expect(mockLogger.warn).not.toHaveBeenCalled();\n });\n\n it(\"returns an error context when a CAL lookup fails\", async () => {\n const error = new Error(\"network\");\n byProgram[STAKE_PROGRAM] = Right(stakeResult);\n byProgram[SYSTEM_PROGRAM] = Left(error);\n\n const result = await makeLoader().load({\n programIds: [STAKE_PROGRAM, SYSTEM_PROGRAM],\n network: \"solana-mainnet\",\n });\n\n expect(result).toEqual([{ type: ClearSignContextType.ERROR, error }]);\n expect(mockLogger.warn).toHaveBeenCalledWith(\n \"[load] Failed to fetch signing routes from CAL\",\n { data: { programId: SYSTEM_PROGRAM, error: \"network\" } },\n );\n });\n\n it(\"skips a tag whose discriminator is not valid hex\", async () => {\n byProgram[STAKE_PROGRAM] = Right(\n makeResult(STAKE_PROGRAM, [\n { discriminator: \"zz\", rule: \"native-staking\", role: \"required\" },\n { discriminator: \"02000000\", rule: \"native-staking\", role: \"required\" },\n ]),\n );\n\n const result = await makeLoader().load({\n programIds: [STAKE_PROGRAM],\n network: \"solana-mainnet\",\n });\n\n expect(rulesOf(result)[0]!.required).toEqual([\n { programId: STAKE_PROGRAM, discriminators: [u32le(2)] },\n ]);\n });\n\n it(\"fetches each distinct program once, on mainnet by default\", async () => {\n byProgram[STAKE_PROGRAM] = Right(stakeResult);\n\n await makeLoader().load({ programIds: [STAKE_PROGRAM, STAKE_PROGRAM] });\n\n expect(dataSource.getInstructionInfo).toHaveBeenCalledTimes(1);\n expect(dataSource.getInstructionInfo).toHaveBeenCalledWith({\n programId: STAKE_PROGRAM,\n network: \"solana-mainnet\",\n });\n });\n\n it(\"forwards the network to the data source\", async () => {\n await makeLoader().load({\n programIds: [STAKE_PROGRAM],\n network: \"solana-devnet\",\n });\n\n expect(dataSource.getInstructionInfo).toHaveBeenCalledWith({\n programId: STAKE_PROGRAM,\n network: \"solana-devnet\",\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_purify_ts", "import_vitest", "import_InstructionInfoDataSource", "import_ClearSignContext", "import_SolanaBasicFlowRuleContextLoader", "mockLogger", "mockLoggerFactory", "STAKE_PROGRAM", "SYSTEM_PROGRAM", "MEMO_PROGRAM", "u32le", "n", "makeResult", "programId", "basicFlowTags", "stakeResult", "systemResult", "notFound", "rulesOf", "contexts", "context", "dataSource", "byProgram", "makeLoader", "expectedTypes", "loader", "result", "id", "error"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var y=(t,e)=>{for(var n in e)l(t,n,{get:e[n],enumerable:!0})},N=(t,e,n,S)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of T(e))!c.call(t,o)&&o!==n&&l(t,o,{get:()=>e[o],enumerable:!(S=A(e,o))||S.enumerable});return t};var p=t=>N(l({},"__esModule",{value:!0}),t);var _={};y(_,{SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES:()=>C,SolanaContextType:()=>i,SolanaInstructionSubstructureKind:()=>r.SolanaInstructionSubstructureKind,isSolanaContextSuccess:()=>O});module.exports=p(_);var a=require("../../../shared/model/ClearSignContext"),r=require("../../../modules/solana/model/SolanaPayloads");const i={TOKEN:a.ClearSignContextType.SOLANA_TOKEN,LIFI:a.ClearSignContextType.SOLANA_LIFI,TRUSTED_NAME:a.ClearSignContextType.SOLANA_TRUSTED_NAME,BASIC_TRUSTED_NAME:a.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,TRANSACTION_CHECK:a.ClearSignContextType.SOLANA_TRANSACTION_CHECK,INSTRUCTION_INFO:a.ClearSignContextType.SOLANA_INSTRUCTION_INFO,ENUM_VARIANT:a.ClearSignContextType.SOLANA_ENUM_VARIANT,TOKEN_INFO:a.ClearSignContextType.SOLANA_TOKEN_INFO,TOKEN_ACCOUNT_STATE:a.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,ALT_RESOLUTION:a.ClearSignContextType.SOLANA_ALT_RESOLUTION},C=new Set(Object.values(i));function O(t){return C.has(t.type)}0&&(module.exports={SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES,SolanaContextType,SolanaInstructionSubstructureKind,isSolanaContextSuccess});
1
+ "use strict";var l=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var y=(o,t)=>{for(var n in t)l(o,n,{get:t[n],enumerable:!0})},N=(o,t,n,S)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of T(t))!c.call(o,e)&&e!==n&&l(o,e,{get:()=>t[e],enumerable:!(S=A(t,e))||S.enumerable});return o};var p=o=>N(l({},"__esModule",{value:!0}),o);var O={};y(O,{SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES:()=>C,SolanaContextType:()=>i,SolanaInstructionSubstructureKind:()=>r.SolanaInstructionSubstructureKind,isSolanaContextSuccess:()=>_});module.exports=p(O);var a=require("../../../shared/model/ClearSignContext"),r=require("../../../modules/solana/model/SolanaPayloads");const i={TOKEN:a.ClearSignContextType.SOLANA_TOKEN,LIFI:a.ClearSignContextType.SOLANA_LIFI,TRUSTED_NAME:a.ClearSignContextType.SOLANA_TRUSTED_NAME,BASIC_TRUSTED_NAME:a.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,TRANSACTION_CHECK:a.ClearSignContextType.SOLANA_TRANSACTION_CHECK,INSTRUCTION_INFO:a.ClearSignContextType.SOLANA_INSTRUCTION_INFO,ENUM_VARIANT:a.ClearSignContextType.SOLANA_ENUM_VARIANT,TOKEN_INFO:a.ClearSignContextType.SOLANA_TOKEN_INFO,TOKEN_ACCOUNT_STATE:a.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,ALT_RESOLUTION:a.ClearSignContextType.SOLANA_ALT_RESOLUTION},C=new Set(Object.values(i));function _(o){return C.has(o.type)}0&&(module.exports={SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES,SolanaContextType,SolanaInstructionSubstructureKind,isSolanaContextSuccess});
2
2
  //# sourceMappingURL=SolanaClearSignContext.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/solana/model/SolanaClearSignContext.ts"],
4
- "sourcesContent": ["import { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport {\n type SolanaAltResolutionPayload,\n type SolanaEnumVariantPayload,\n type SolanaInstructionInfoPayload,\n type SolanaLifiPayload,\n type SolanaTokenAccountStatePayload,\n type SolanaTokenData,\n type SolanaTokenInfoPayload,\n type SolanaTransactionCheckPayload,\n} from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\n// Re-export Solana payload types so consumers can import from this file\nexport type {\n SolanaAltResolutionPayload,\n SolanaCalAccountReset,\n SolanaCalAccountSchema,\n SolanaCalActiveWhenPredicate,\n SolanaCalDisplayField,\n SolanaCalHideRule,\n SolanaCalMintAssociation,\n SolanaCalOwnerAssociation,\n SolanaCalSlotConstraint,\n SolanaCalTokenValue,\n SolanaCalTypePoolEntry,\n SolanaCalValue,\n SolanaCalValueFlowPort,\n SolanaEnumVariantPayload,\n SolanaInstructionEnumVariant,\n SolanaInstructionInfoPayload,\n SolanaInstructionSubstructure,\n SolanaLifiInstructionMeta,\n SolanaLifiPayload,\n SolanaSignedDescriptor,\n SolanaTokenAccountStatePayload,\n SolanaTokenData,\n SolanaTokenInfoPayload,\n SolanaTransactionCheckPayload,\n SolanaTransactionDescriptor,\n} from \"@/modules/solana/model/SolanaPayloads\";\nexport { SolanaInstructionSubstructureKind } from \"@/modules/solana/model/SolanaPayloads\";\n\n/**\n * Solana-specific payload overrides \u2014 contributed to the shared\n * ClearSignContextSuccessPayloads map at the integration boundary.\n */\nexport type SolanaPayloadOverrides = {\n [ClearSignContextType.SOLANA_TOKEN]: {\n payload: SolanaTokenData;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_LIFI]: {\n payload: SolanaLifiPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRUSTED_NAME]: {\n payload: Uint8Array;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME]: {\n payload: Uint8Array;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRANSACTION_CHECK]: {\n payload: SolanaTransactionCheckPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_INSTRUCTION_INFO]: {\n payload: SolanaInstructionInfoPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_ENUM_VARIANT]: {\n payload: SolanaEnumVariantPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TOKEN_INFO]: {\n payload: SolanaTokenInfoPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE]: {\n payload: SolanaTokenAccountStatePayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_ALT_RESOLUTION]: {\n payload: SolanaAltResolutionPayload;\n certificate?: PkiCertificate;\n };\n};\n\nexport const SolanaContextType = {\n TOKEN: ClearSignContextType.SOLANA_TOKEN,\n LIFI: ClearSignContextType.SOLANA_LIFI,\n TRUSTED_NAME: ClearSignContextType.SOLANA_TRUSTED_NAME,\n BASIC_TRUSTED_NAME: ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n TRANSACTION_CHECK: ClearSignContextType.SOLANA_TRANSACTION_CHECK,\n INSTRUCTION_INFO: ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n ENUM_VARIANT: ClearSignContextType.SOLANA_ENUM_VARIANT,\n TOKEN_INFO: ClearSignContextType.SOLANA_TOKEN_INFO,\n TOKEN_ACCOUNT_STATE: ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n ALT_RESOLUTION: ClearSignContextType.SOLANA_ALT_RESOLUTION,\n} as const;\n\n/**\n * Union of all Solana-relevant success context types.\n */\nexport type SolanaClearSignContextSuccessType =\n (typeof SolanaContextType)[keyof typeof SolanaContextType];\n\n/**\n * A ClearSignContextSuccess narrowed to only Solana-relevant types.\n */\nexport type SolanaClearSignContextSuccess =\n ClearSignContextSuccess<SolanaClearSignContextSuccessType>;\n\n/**\n * Set of all Solana-relevant success ClearSignContextType values.\n * Used by the type guard below to filter out non-Solana contexts at runtime.\n */\nexport const SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES =\n new Set<ClearSignContextType>(Object.values(SolanaContextType));\n\n/**\n * Type guard that narrows a ClearSignContextSuccess to a\n * SolanaClearSignContextSuccess, filtering out non-Solana types.\n */\nexport function isSolanaContextSuccess(\n ctx: ClearSignContext,\n): ctx is SolanaClearSignContextSuccess {\n return SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES.has(ctx.type);\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6CAAAE,EAAA,sBAAAC,EAAA,qGAAAC,IAAA,eAAAC,EAAAL,GAWA,IAAAM,EAIO,2CA8BPC,EAAkD,iDAiD3C,MAAMJ,EAAoB,CAC/B,MAAO,uBAAqB,aAC5B,KAAM,uBAAqB,YAC3B,aAAc,uBAAqB,oBACnC,mBAAoB,uBAAqB,0BACzC,kBAAmB,uBAAqB,yBACxC,iBAAkB,uBAAqB,wBACvC,aAAc,uBAAqB,oBACnC,WAAY,uBAAqB,kBACjC,oBAAqB,uBAAqB,2BAC1C,eAAgB,uBAAqB,qBACvC,EAkBaD,EACX,IAAI,IAA0B,OAAO,OAAOC,CAAiB,CAAC,EAMzD,SAASC,EACdI,EACsC,CACtC,OAAON,EAAwC,IAAIM,EAAI,IAAI,CAC7D",
4
+ "sourcesContent": ["import { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { type SolanaBasicFlowRule } from \"@/modules/solana/model/SolanaContextTypes\";\nimport {\n type SolanaAltResolutionPayload,\n type SolanaEnumVariantPayload,\n type SolanaInstructionInfoPayload,\n type SolanaLifiPayload,\n type SolanaTokenAccountStatePayload,\n type SolanaTokenData,\n type SolanaTokenInfoPayload,\n type SolanaTransactionCheckPayload,\n} from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\n// Re-export Solana payload types so consumers can import from this file\nexport type {\n SolanaAltResolutionPayload,\n SolanaCalAccountReset,\n SolanaCalAccountSchema,\n SolanaCalActiveWhenPredicate,\n SolanaCalDisplayField,\n SolanaCalHideRule,\n SolanaCalMintAssociation,\n SolanaCalOwnerAssociation,\n SolanaCalSlotConstraint,\n SolanaCalTokenValue,\n SolanaCalTypePoolEntry,\n SolanaCalValue,\n SolanaCalValueFlowPort,\n SolanaEnumVariantPayload,\n SolanaInstructionEnumVariant,\n SolanaInstructionInfoPayload,\n SolanaInstructionSubstructure,\n SolanaLifiInstructionMeta,\n SolanaLifiPayload,\n SolanaSignedDescriptor,\n SolanaTokenAccountStatePayload,\n SolanaTokenData,\n SolanaTokenInfoPayload,\n SolanaTransactionCheckPayload,\n SolanaTransactionDescriptor,\n} from \"@/modules/solana/model/SolanaPayloads\";\nexport { SolanaInstructionSubstructureKind } from \"@/modules/solana/model/SolanaPayloads\";\n\n/**\n * Solana-specific payload overrides \u2014 contributed to the shared\n * ClearSignContextSuccessPayloads map at the integration boundary.\n */\nexport type SolanaPayloadOverrides = {\n [ClearSignContextType.SOLANA_TOKEN]: {\n payload: SolanaTokenData;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_LIFI]: {\n payload: SolanaLifiPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRUSTED_NAME]: {\n payload: Uint8Array;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME]: {\n payload: Uint8Array;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRANSACTION_CHECK]: {\n payload: SolanaTransactionCheckPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_INSTRUCTION_INFO]: {\n payload: SolanaInstructionInfoPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_ENUM_VARIANT]: {\n payload: SolanaEnumVariantPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TOKEN_INFO]: {\n payload: SolanaTokenInfoPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE]: {\n payload: SolanaTokenAccountStatePayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_ALT_RESOLUTION]: {\n payload: SolanaAltResolutionPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_BASIC_FLOW_RULE]: {\n payload: SolanaBasicFlowRule;\n };\n};\n\nexport const SolanaContextType = {\n TOKEN: ClearSignContextType.SOLANA_TOKEN,\n LIFI: ClearSignContextType.SOLANA_LIFI,\n TRUSTED_NAME: ClearSignContextType.SOLANA_TRUSTED_NAME,\n BASIC_TRUSTED_NAME: ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n TRANSACTION_CHECK: ClearSignContextType.SOLANA_TRANSACTION_CHECK,\n INSTRUCTION_INFO: ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n ENUM_VARIANT: ClearSignContextType.SOLANA_ENUM_VARIANT,\n TOKEN_INFO: ClearSignContextType.SOLANA_TOKEN_INFO,\n TOKEN_ACCOUNT_STATE: ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n ALT_RESOLUTION: ClearSignContextType.SOLANA_ALT_RESOLUTION,\n} as const;\n\n/**\n * Union of all Solana-relevant success context types.\n */\nexport type SolanaClearSignContextSuccessType =\n (typeof SolanaContextType)[keyof typeof SolanaContextType];\n\n/**\n * A ClearSignContextSuccess narrowed to only Solana-relevant types.\n */\nexport type SolanaClearSignContextSuccess =\n ClearSignContextSuccess<SolanaClearSignContextSuccessType>;\n\n/**\n * Set of all Solana-relevant success ClearSignContextType values.\n * Used by the type guard below to filter out non-Solana contexts at runtime.\n */\nexport const SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES =\n new Set<ClearSignContextType>(Object.values(SolanaContextType));\n\n/**\n * Type guard that narrows a ClearSignContextSuccess to a\n * SolanaClearSignContextSuccess, filtering out non-Solana types.\n */\nexport function isSolanaContextSuccess(\n ctx: ClearSignContext,\n): ctx is SolanaClearSignContextSuccess {\n return SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES.has(ctx.type);\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6CAAAE,EAAA,sBAAAC,EAAA,qGAAAC,IAAA,eAAAC,EAAAL,GAYA,IAAAM,EAIO,2CA8BPC,EAAkD,iDAoD3C,MAAMJ,EAAoB,CAC/B,MAAO,uBAAqB,aAC5B,KAAM,uBAAqB,YAC3B,aAAc,uBAAqB,oBACnC,mBAAoB,uBAAqB,0BACzC,kBAAmB,uBAAqB,yBACxC,iBAAkB,uBAAqB,wBACvC,aAAc,uBAAqB,oBACnC,WAAY,uBAAqB,kBACjC,oBAAqB,uBAAqB,2BAC1C,eAAgB,uBAAqB,qBACvC,EAkBaD,EACX,IAAI,IAA0B,OAAO,OAAOC,CAAiB,CAAC,EAMzD,SAASC,EACdI,EACsC,CACtC,OAAON,EAAwC,IAAIM,EAAI,IAAI,CAC7D",
6
6
  "names": ["SolanaClearSignContext_exports", "__export", "SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES", "SolanaContextType", "isSolanaContextSuccess", "__toCommonJS", "import_ClearSignContext", "import_SolanaPayloads", "ctx"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var i=(t,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of s(e))!C.call(t,n)&&n!==a&&r(t,n,{get:()=>e[n],enumerable:!(o=S(e,n))||o.enumerable});return t};var c=t=>i(r({},"__esModule",{value:!0}),t);var p={};module.exports=c(p);
1
+ "use strict";var r=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var C=(t,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of s(e))!i.call(t,n)&&n!==a&&r(t,n,{get:()=>e[n],enumerable:!(o=S(e,n))||o.enumerable});return t};var c=t=>C(r({},"__esModule",{value:!0}),t);var p={};module.exports=c(p);
2
2
  //# sourceMappingURL=SolanaContextTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/solana/model/SolanaContextTypes.ts"],
4
- "sourcesContent": ["import { type SolanaTransactionDescriptor } from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContextError,\n type ClearSignContextSuccess,\n type ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport type SolanaTransactionDescriptorRaw = {\n data: string;\n descriptorType: string;\n descriptorVersion: string;\n signatures: {\n prod?: string;\n test?: string;\n };\n};\n\nexport type SolanaLifiDescriptorEntry = {\n program_id: string;\n discriminator_hex?: string;\n has_basis_point?: boolean;\n descriptor: SolanaTransactionDescriptorRaw;\n};\n\nexport type GetTransactionDescriptorsResponse = {\n id: string;\n chain_id: number;\n instructions: Array<{\n program_id: string;\n discriminator?: number;\n discriminator_hex?: string;\n amount?: { capped_bps?: number };\n }>;\n descriptors: SolanaLifiDescriptorEntry[];\n};\n\nexport type SolanaTransactionDescriptorList = Record<\n string,\n SolanaTransactionDescriptor[]\n>;\n\n// The signer registry (`provideContextRegistry.ts`) uses a required mapped\n// type over this union, so every member listed here MUST have a matching\n// provide handler in the signer. The generic clear-signing types below are\n// declared together with their handlers\nexport type SolanaContextSuccessType =\n | ClearSignContextType.SOLANA_TOKEN\n | ClearSignContextType.SOLANA_LIFI\n | ClearSignContextType.SOLANA_TRANSACTION_CHECK\n | ClearSignContextType.SOLANA_INSTRUCTION_INFO\n | ClearSignContextType.SOLANA_ENUM_VARIANT\n | ClearSignContextType.SOLANA_TOKEN_INFO\n | ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE\n | ClearSignContextType.SOLANA_ALT_RESOLUTION\n | ClearSignContextType.SOLANA_TRUSTED_NAME\n | ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME;\n\nexport type SolanaContextSuccess<\n T extends SolanaContextSuccessType = SolanaContextSuccessType,\n> = ClearSignContextSuccess<T>;\n\nexport type SolanaContextError = ClearSignContextError;\n\nexport type SolanaContext = SolanaContextSuccess | SolanaContextError;\n\nexport type SolanaTokenContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN>;\n\nexport type SolanaLifiContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_LIFI>;\n\nexport type SolanaTransactionCheckContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TRANSACTION_CHECK>;\n\nexport type SolanaInstructionInfoContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_INSTRUCTION_INFO>;\n\nexport type SolanaEnumVariantContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_ENUM_VARIANT>;\n\nexport type SolanaTokenInfoContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN_INFO>;\n\nexport type SolanaTokenAccountStateContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE>;\n\nexport type SolanaAltResolutionContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_ALT_RESOLUTION>;\n\nexport type SolanaTrustedNameContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TRUSTED_NAME>;\n\nexport type SolanaBasicTrustedNameContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME>;\n\nexport type SolanaTokenContextResult =\n | SolanaTokenContextSuccess\n | SolanaContextError;\n\nexport type SolanaLifiContextResult =\n | SolanaLifiContextSuccess\n | SolanaContextError;\n\nexport type SolanaTransactionCheckContextResult =\n | SolanaTransactionCheckContextSuccess\n | SolanaContextError;\n\nexport type LoaderResult =\n | SolanaTokenContextResult\n | SolanaLifiContextResult\n | SolanaTransactionCheckContextResult;\n"],
4
+ "sourcesContent": ["import { type SolanaTransactionDescriptor } from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContextError,\n type ClearSignContextSuccess,\n type ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport type SolanaTransactionDescriptorRaw = {\n data: string;\n descriptorType: string;\n descriptorVersion: string;\n signatures: {\n prod?: string;\n test?: string;\n };\n};\n\nexport type SolanaLifiDescriptorEntry = {\n program_id: string;\n discriminator_hex?: string;\n has_basis_point?: boolean;\n descriptor: SolanaTransactionDescriptorRaw;\n};\n\nexport type GetTransactionDescriptorsResponse = {\n id: string;\n chain_id: number;\n instructions: Array<{\n program_id: string;\n discriminator?: number;\n discriminator_hex?: string;\n amount?: { capped_bps?: number };\n }>;\n descriptors: SolanaLifiDescriptorEntry[];\n};\n\n/**\n * Matches instructions of one program. `discriminators` is a prefix match on\n * the instruction data (u32 LE for native programs, 8-byte Anchor\n * discriminator for Anchor programs); absent means any instruction of the\n * program.\n */\nexport type SolanaInstructionMatcher = {\n programId: string;\n discriminators?: ReadonlyArray<Uint8Array>;\n};\n\n/**\n * Routes a transaction to the basic signing flow when at least one\n * instruction matches `required` and every instruction matches `required` or\n * `allowed`.\n */\nexport type SolanaBasicFlowRule = {\n id: string;\n required: ReadonlyArray<SolanaInstructionMatcher>;\n allowed: ReadonlyArray<SolanaInstructionMatcher>;\n};\n\nexport type SolanaTransactionDescriptorList = Record<\n string,\n SolanaTransactionDescriptor[]\n>;\n\n// The signer registry (`provideContextRegistry.ts`) uses a required mapped\n// type over this union, so every member listed here MUST have a matching\n// provide handler in the signer. The generic clear-signing types below are\n// declared together with their handlers\nexport type SolanaContextSuccessType =\n | ClearSignContextType.SOLANA_TOKEN\n | ClearSignContextType.SOLANA_LIFI\n | ClearSignContextType.SOLANA_TRANSACTION_CHECK\n | ClearSignContextType.SOLANA_INSTRUCTION_INFO\n | ClearSignContextType.SOLANA_ENUM_VARIANT\n | ClearSignContextType.SOLANA_TOKEN_INFO\n | ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE\n | ClearSignContextType.SOLANA_ALT_RESOLUTION\n | ClearSignContextType.SOLANA_TRUSTED_NAME\n | ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME;\n\nexport type SolanaContextSuccess<\n T extends SolanaContextSuccessType = SolanaContextSuccessType,\n> = ClearSignContextSuccess<T>;\n\nexport type SolanaContextError = ClearSignContextError;\n\nexport type SolanaContext = SolanaContextSuccess | SolanaContextError;\n\nexport type SolanaTokenContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN>;\n\nexport type SolanaLifiContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_LIFI>;\n\nexport type SolanaTransactionCheckContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TRANSACTION_CHECK>;\n\nexport type SolanaInstructionInfoContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_INSTRUCTION_INFO>;\n\nexport type SolanaEnumVariantContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_ENUM_VARIANT>;\n\nexport type SolanaTokenInfoContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN_INFO>;\n\nexport type SolanaTokenAccountStateContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE>;\n\nexport type SolanaAltResolutionContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_ALT_RESOLUTION>;\n\nexport type SolanaTrustedNameContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TRUSTED_NAME>;\n\nexport type SolanaBasicTrustedNameContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME>;\n\nexport type SolanaTokenContextResult =\n | SolanaTokenContextSuccess\n | SolanaContextError;\n\nexport type SolanaLifiContextResult =\n | SolanaLifiContextSuccess\n | SolanaContextError;\n\nexport type SolanaTransactionCheckContextResult =\n | SolanaTransactionCheckContextSuccess\n | SolanaContextError;\n\nexport type LoaderResult =\n | SolanaTokenContextResult\n | SolanaLifiContextResult\n | SolanaTransactionCheckContextResult;\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["SolanaContextTypes_exports", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var o=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var u=(r,E)=>{for(var a in E)o(r,a,{get:E[a],enumerable:!0})},A=(r,E,a,t)=>{if(E&&typeof E=="object"||typeof E=="function")for(let s of O(E))!_.call(r,s)&&s!==a&&o(r,s,{get:()=>E[s],enumerable:!(t=c(E,s))||t.enumerable});return r};var T=r=>A(o({},"__esModule",{value:!0}),r);var n={};u(n,{ClearSignContextType:()=>N});module.exports=T(n);var N=(e=>(e.ERROR="error",e.CONCORDIUM_ACCOUNT_OWNERSHIP="concordiumAccountOwnership",e.ETHEREUM_TOKEN="ethereumToken",e.ETHEREUM_NFT="ethereumNft",e.ETHEREUM_TRUSTED_NAME="ethereumTrustedName",e.ETHEREUM_PLUGIN="ethereumPlugin",e.ETHEREUM_EXTERNAL_PLUGIN="ethereumExternalPlugin",e.ETHEREUM_TRANSACTION_INFO="ethereumTransactionInfo",e.ETHEREUM_PROXY_INFO="ethereumProxyInfo",e.ETHEREUM_ENUM="ethereumEnum",e.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION="ethereumTransactionFieldDescription",e.ETHEREUM_TRANSACTION_CHECK="ethereumTransactionCheck",e.ETHEREUM_DYNAMIC_NETWORK="ethereumDynamicNetwork",e.ETHEREUM_DYNAMIC_NETWORK_ICON="ethereumDynamicNetworkIcon",e.ETHEREUM_SAFE="ethereumSafe",e.ETHEREUM_SIGNER="ethereumSigner",e.ETHEREUM_GATED_SIGNING="ethereumGatedSigning",e.SOLANA_TOKEN="solanaToken",e.SOLANA_LIFI="solanaLifi",e.SOLANA_TRUSTED_NAME="solanaTrustedName",e.SOLANA_BASIC_TRUSTED_NAME="solanaBasicTrustedName",e.SOLANA_TRANSACTION_CHECK="solanaTransactionCheck",e.SOLANA_INSTRUCTION_INFO="solanaInstructionInfo",e.SOLANA_ENUM_VARIANT="solanaEnumVariant",e.SOLANA_TOKEN_INFO="solanaTokenInfo",e.SOLANA_TOKEN_ACCOUNT_STATE="solanaTokenAccountState",e.SOLANA_ALT_RESOLUTION="solanaAltResolution",e.TRON_TOKEN="tronToken",e))(N||{});0&&(module.exports={ClearSignContextType});
1
+ "use strict";var o=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var A=(r,E)=>{for(var a in E)o(r,a,{get:E[a],enumerable:!0})},u=(r,E,a,N)=>{if(E&&typeof E=="object"||typeof E=="function")for(let s of _(E))!O.call(r,s)&&s!==a&&o(r,s,{get:()=>E[s],enumerable:!(N=c(E,s))||N.enumerable});return r};var R=r=>u(o({},"__esModule",{value:!0}),r);var T={};A(T,{ClearSignContextType:()=>t});module.exports=R(T);var t=(e=>(e.ERROR="error",e.CONCORDIUM_ACCOUNT_OWNERSHIP="concordiumAccountOwnership",e.ETHEREUM_TOKEN="ethereumToken",e.ETHEREUM_NFT="ethereumNft",e.ETHEREUM_TRUSTED_NAME="ethereumTrustedName",e.ETHEREUM_PLUGIN="ethereumPlugin",e.ETHEREUM_EXTERNAL_PLUGIN="ethereumExternalPlugin",e.ETHEREUM_TRANSACTION_INFO="ethereumTransactionInfo",e.ETHEREUM_PROXY_INFO="ethereumProxyInfo",e.ETHEREUM_ENUM="ethereumEnum",e.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION="ethereumTransactionFieldDescription",e.ETHEREUM_TRANSACTION_CHECK="ethereumTransactionCheck",e.ETHEREUM_DYNAMIC_NETWORK="ethereumDynamicNetwork",e.ETHEREUM_DYNAMIC_NETWORK_ICON="ethereumDynamicNetworkIcon",e.ETHEREUM_SAFE="ethereumSafe",e.ETHEREUM_SIGNER="ethereumSigner",e.ETHEREUM_GATED_SIGNING="ethereumGatedSigning",e.SOLANA_TOKEN="solanaToken",e.SOLANA_LIFI="solanaLifi",e.SOLANA_TRUSTED_NAME="solanaTrustedName",e.SOLANA_BASIC_TRUSTED_NAME="solanaBasicTrustedName",e.SOLANA_TRANSACTION_CHECK="solanaTransactionCheck",e.SOLANA_INSTRUCTION_INFO="solanaInstructionInfo",e.SOLANA_ENUM_VARIANT="solanaEnumVariant",e.SOLANA_TOKEN_INFO="solanaTokenInfo",e.SOLANA_TOKEN_ACCOUNT_STATE="solanaTokenAccountState",e.SOLANA_ALT_RESOLUTION="solanaAltResolution",e.SOLANA_BASIC_FLOW_RULE="solanaBasicFlowRule",e.TRON_TOKEN="tronToken",e))(t||{});0&&(module.exports={ClearSignContextType});
2
2
  //# sourceMappingURL=ClearSignContext.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/model/ClearSignContext.ts"],
4
- "sourcesContent": ["import { type EthereumPayloadOverrides } from \"@/modules/ethereum/model/EthereumClearSignContext\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { type SolanaPayloadOverrides } from \"@/modules/solana/model/SolanaClearSignContext\";\n\nexport enum ClearSignContextType {\n ERROR = \"error\",\n CONCORDIUM_ACCOUNT_OWNERSHIP = \"concordiumAccountOwnership\",\n ETHEREUM_TOKEN = \"ethereumToken\",\n ETHEREUM_NFT = \"ethereumNft\",\n ETHEREUM_TRUSTED_NAME = \"ethereumTrustedName\",\n ETHEREUM_PLUGIN = \"ethereumPlugin\",\n ETHEREUM_EXTERNAL_PLUGIN = \"ethereumExternalPlugin\",\n ETHEREUM_TRANSACTION_INFO = \"ethereumTransactionInfo\",\n ETHEREUM_PROXY_INFO = \"ethereumProxyInfo\",\n ETHEREUM_ENUM = \"ethereumEnum\",\n ETHEREUM_TRANSACTION_FIELD_DESCRIPTION = \"ethereumTransactionFieldDescription\",\n ETHEREUM_TRANSACTION_CHECK = \"ethereumTransactionCheck\",\n ETHEREUM_DYNAMIC_NETWORK = \"ethereumDynamicNetwork\",\n ETHEREUM_DYNAMIC_NETWORK_ICON = \"ethereumDynamicNetworkIcon\",\n ETHEREUM_SAFE = \"ethereumSafe\",\n ETHEREUM_SIGNER = \"ethereumSigner\",\n ETHEREUM_GATED_SIGNING = \"ethereumGatedSigning\",\n SOLANA_TOKEN = \"solanaToken\",\n SOLANA_LIFI = \"solanaLifi\",\n SOLANA_TRUSTED_NAME = \"solanaTrustedName\",\n SOLANA_BASIC_TRUSTED_NAME = \"solanaBasicTrustedName\",\n SOLANA_TRANSACTION_CHECK = \"solanaTransactionCheck\",\n SOLANA_INSTRUCTION_INFO = \"solanaInstructionInfo\",\n SOLANA_ENUM_VARIANT = \"solanaEnumVariant\",\n SOLANA_TOKEN_INFO = \"solanaTokenInfo\",\n SOLANA_TOKEN_ACCOUNT_STATE = \"solanaTokenAccountState\",\n SOLANA_ALT_RESOLUTION = \"solanaAltResolution\",\n TRON_TOKEN = \"tronToken\",\n}\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\n/**\n * Base payload shape shared by every success context. Chain modules extend\n * this via PayloadOverrides for variants that carry typed payloads.\n */\nexport type ClearSignContextSuccessBase = {\n payload: string;\n certificate?: PkiCertificate;\n};\n\ntype ClearSignContextSuccessPayloadsBase = {\n [K in ClearSignContextSuccessType]: ClearSignContextSuccessBase;\n};\n\n// Chain modules contribute typed-payload overrides. This file is the\n// integration boundary that assembles them into the cross-chain union.\ntype ClearSignContextSuccessPayloadOverrides = EthereumPayloadOverrides &\n SolanaPayloadOverrides;\n\ntype ClearSignContextSuccessPayloads = Omit<\n ClearSignContextSuccessPayloadsBase,\n keyof ClearSignContextSuccessPayloadOverrides\n> &\n ClearSignContextSuccessPayloadOverrides;\n\nexport type ClearSignContextSuccess<\n T extends ClearSignContextSuccessType = ClearSignContextSuccessType,\n> = T extends ClearSignContextSuccessType\n ? { type: T } & ClearSignContextSuccessPayloads[T]\n : never;\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAIO,IAAKE,OACVA,EAAA,MAAQ,QACRA,EAAA,6BAA+B,6BAC/BA,EAAA,eAAiB,gBACjBA,EAAA,aAAe,cACfA,EAAA,sBAAwB,sBACxBA,EAAA,gBAAkB,iBAClBA,EAAA,yBAA2B,yBAC3BA,EAAA,0BAA4B,0BAC5BA,EAAA,oBAAsB,oBACtBA,EAAA,cAAgB,eAChBA,EAAA,uCAAyC,sCACzCA,EAAA,2BAA6B,2BAC7BA,EAAA,yBAA2B,yBAC3BA,EAAA,8BAAgC,6BAChCA,EAAA,cAAgB,eAChBA,EAAA,gBAAkB,iBAClBA,EAAA,uBAAyB,uBACzBA,EAAA,aAAe,cACfA,EAAA,YAAc,aACdA,EAAA,oBAAsB,oBACtBA,EAAA,0BAA4B,yBAC5BA,EAAA,yBAA2B,yBAC3BA,EAAA,wBAA0B,wBAC1BA,EAAA,oBAAsB,oBACtBA,EAAA,kBAAoB,kBACpBA,EAAA,2BAA6B,0BAC7BA,EAAA,sBAAwB,sBACxBA,EAAA,WAAa,YA5BHA,OAAA",
4
+ "sourcesContent": ["import { type EthereumPayloadOverrides } from \"@/modules/ethereum/model/EthereumClearSignContext\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { type SolanaPayloadOverrides } from \"@/modules/solana/model/SolanaClearSignContext\";\n\nexport enum ClearSignContextType {\n ERROR = \"error\",\n CONCORDIUM_ACCOUNT_OWNERSHIP = \"concordiumAccountOwnership\",\n ETHEREUM_TOKEN = \"ethereumToken\",\n ETHEREUM_NFT = \"ethereumNft\",\n ETHEREUM_TRUSTED_NAME = \"ethereumTrustedName\",\n ETHEREUM_PLUGIN = \"ethereumPlugin\",\n ETHEREUM_EXTERNAL_PLUGIN = \"ethereumExternalPlugin\",\n ETHEREUM_TRANSACTION_INFO = \"ethereumTransactionInfo\",\n ETHEREUM_PROXY_INFO = \"ethereumProxyInfo\",\n ETHEREUM_ENUM = \"ethereumEnum\",\n ETHEREUM_TRANSACTION_FIELD_DESCRIPTION = \"ethereumTransactionFieldDescription\",\n ETHEREUM_TRANSACTION_CHECK = \"ethereumTransactionCheck\",\n ETHEREUM_DYNAMIC_NETWORK = \"ethereumDynamicNetwork\",\n ETHEREUM_DYNAMIC_NETWORK_ICON = \"ethereumDynamicNetworkIcon\",\n ETHEREUM_SAFE = \"ethereumSafe\",\n ETHEREUM_SIGNER = \"ethereumSigner\",\n ETHEREUM_GATED_SIGNING = \"ethereumGatedSigning\",\n SOLANA_TOKEN = \"solanaToken\",\n SOLANA_LIFI = \"solanaLifi\",\n SOLANA_TRUSTED_NAME = \"solanaTrustedName\",\n SOLANA_BASIC_TRUSTED_NAME = \"solanaBasicTrustedName\",\n SOLANA_TRANSACTION_CHECK = \"solanaTransactionCheck\",\n SOLANA_INSTRUCTION_INFO = \"solanaInstructionInfo\",\n SOLANA_ENUM_VARIANT = \"solanaEnumVariant\",\n SOLANA_TOKEN_INFO = \"solanaTokenInfo\",\n SOLANA_TOKEN_ACCOUNT_STATE = \"solanaTokenAccountState\",\n SOLANA_ALT_RESOLUTION = \"solanaAltResolution\",\n SOLANA_BASIC_FLOW_RULE = \"solanaBasicFlowRule\",\n TRON_TOKEN = \"tronToken\",\n}\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\n/**\n * Base payload shape shared by every success context. Chain modules extend\n * this via PayloadOverrides for variants that carry typed payloads.\n */\nexport type ClearSignContextSuccessBase = {\n payload: string;\n certificate?: PkiCertificate;\n};\n\ntype ClearSignContextSuccessPayloadsBase = {\n [K in ClearSignContextSuccessType]: ClearSignContextSuccessBase;\n};\n\n// Chain modules contribute typed-payload overrides. This file is the\n// integration boundary that assembles them into the cross-chain union.\ntype ClearSignContextSuccessPayloadOverrides = EthereumPayloadOverrides &\n SolanaPayloadOverrides;\n\ntype ClearSignContextSuccessPayloads = Omit<\n ClearSignContextSuccessPayloadsBase,\n keyof ClearSignContextSuccessPayloadOverrides\n> &\n ClearSignContextSuccessPayloadOverrides;\n\nexport type ClearSignContextSuccess<\n T extends ClearSignContextSuccessType = ClearSignContextSuccessType,\n> = T extends ClearSignContextSuccessType\n ? { type: T } & ClearSignContextSuccessPayloads[T]\n : never;\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAIO,IAAKE,OACVA,EAAA,MAAQ,QACRA,EAAA,6BAA+B,6BAC/BA,EAAA,eAAiB,gBACjBA,EAAA,aAAe,cACfA,EAAA,sBAAwB,sBACxBA,EAAA,gBAAkB,iBAClBA,EAAA,yBAA2B,yBAC3BA,EAAA,0BAA4B,0BAC5BA,EAAA,oBAAsB,oBACtBA,EAAA,cAAgB,eAChBA,EAAA,uCAAyC,sCACzCA,EAAA,2BAA6B,2BAC7BA,EAAA,yBAA2B,yBAC3BA,EAAA,8BAAgC,6BAChCA,EAAA,cAAgB,eAChBA,EAAA,gBAAkB,iBAClBA,EAAA,uBAAyB,uBACzBA,EAAA,aAAe,cACfA,EAAA,YAAc,aACdA,EAAA,oBAAsB,oBACtBA,EAAA,0BAA4B,yBAC5BA,EAAA,yBAA2B,yBAC3BA,EAAA,wBAA0B,wBAC1BA,EAAA,oBAAsB,oBACtBA,EAAA,kBAAoB,kBACpBA,EAAA,2BAA6B,0BAC7BA,EAAA,sBAAwB,sBACxBA,EAAA,uBAAyB,sBACzBA,EAAA,WAAa,YA7BHA,OAAA",
6
6
  "names": ["ClearSignContext_exports", "__export", "ClearSignContextType", "__toCommonJS"]
7
7
  }
@@ -58,5 +58,5 @@
58
58
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
59
59
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
60
60
  },
61
- "version": "2.7.0"
61
+ "version": "2.8.0"
62
62
  }
@@ -1,2 +1,2 @@
1
- import{makeContainer as u}from"./di";import{accountOwnershipTypes as x}from"./modules/concordium/account-ownership/di/accountOwnershipTypes";import{calldataTypes as f}from"./modules/ethereum/calldata/di/calldataTypes";import{dynamicNetworkTypes as L}from"./modules/ethereum/dynamic-network/di/dynamicNetworkTypes";import{externalPluginTypes as y}from"./modules/ethereum/external-plugin/di/externalPluginTypes";import{gatedSigningTypes as p}from"./modules/ethereum/gated-signing/di/gatedSigningTypes";import{nftTypes as l}from"./modules/ethereum/nft/di/nftTypes";import{proxyTypes as h}from"./modules/ethereum/proxy/di/proxyTypes";import{safeTypes as T}from"./modules/ethereum/safe/di/safeTypes";import{tokenTypes as m}from"./modules/ethereum/token/di/tokenTypes";import{trustedNameTypes as C}from"./modules/ethereum/trusted-name/di/trustedNameTypes";import{typedDataTypes as _}from"./modules/ethereum/typed-data/di/typedDataTypes";import{reporterTypes as g}from"./modules/multichain/reporter/di/reporterTypes";import{signReporterTypes as c}from"./modules/multichain/sign-reporter/di/signReporterTypes";import{transactionCheckTypes as s}from"./modules/multichain/transaction-check/di/transactionCheckTypes";import{altResolutionTypes as S}from"./modules/solana/alt-resolution/di/altResolutionTypes";import{enumVariantTypes as R}from"./modules/solana/enum-variant/di/enumVariantTypes";import{instructionInfoTypes as D}from"./modules/solana/instruction-info/di/instructionInfoTypes";import{lifiTypes as k}from"./modules/solana/lifi/di/lifiTypes";import{ownerInfoTypes as v}from"./modules/solana/owner-info/di/ownerInfoTypes";import{tokenTypes as F}from"./modules/solana/token/di/tokenTypes";import{tokenAccountStateTypes as w}from"./modules/solana/token-account-state/di/tokenAccountStateTypes";import{tokenInfoTypes as P}from"./modules/solana/token-info/di/tokenInfoTypes";import{solanaTrustedNameTypes as B}from"./modules/solana/trusted-name/di/trustedNameTypes";import{tokenTypes as E}from"./modules/tron/token/di/tokenTypes";import{ContextModuleChainID as o}from"./shared/domain/ContextModuleChainID";import{ClearSignContextType as a}from"./shared/model/ClearSignContext";class se{_container;_config;_loaders;_typedDataLoader;_fieldLoaders;_blindSigningReporter;_signReporter;constructor(e){this._config=e,this._container=u({config:e}),this._loaders=e.defaultLoaders?this._getDefaultLoaders():[],this._loaders.push(...e.customLoaders),this._fieldLoaders=e.defaultFieldLoaders?this._getDefaultFieldLoaders():[],this._fieldLoaders.push(...e.customFieldLoaders),this._typedDataLoader=e.customTypedDataLoader??this._getDefaultTypedDataLoader(),this._blindSigningReporter=e.customBlindSigningReporter??this._getBlindSigningReporter(),this._signReporter=this._getSignReporter()}_getDefaultFieldLoaders(){return this._config.chain!==o.Ethereum?[]:[this._container.get(l.NftContextFieldLoader),this._container.get(m.TokenContextFieldLoader),this._container.get(C.TrustedNameContextFieldLoader),this._container.get(h.ProxyContextFieldLoader)]}_getDefaultLoaders(){const{chain:e}=this._config;switch(e){case o.Ethereum:return[this._container.get(y.ExternalPluginContextLoader),this._container.get(C.TrustedNameContextLoader),this._container.get(l.NftContextLoader),this._container.get(m.TokenContextLoader),this._container.get(f.CalldataContextLoader),this._container.get(L.DynamicNetworkContextLoader),this._container.get(T.SafeAddressLoader),this._container.get(p.GatedSigningContextLoader),this._container.get(p.GatedSigningTypedDataContextLoader),this._container.get(s.TransactionCheckLoader),this._container.get(s.TypedDataCheckLoader)];case o.Solana:return[this._container.get(F.TokenContextLoader),this._container.get(k.LifiContextLoader),this._container.get(v.OwnerInfoContextLoader),this._container.get(s.TransactionCheckLoader),this._container.get(D.InstructionInfoContextLoader),this._container.get(R.EnumVariantContextLoader),this._container.get(P.TokenInfoContextLoader),this._container.get(w.TokenAccountStateContextLoader),this._container.get(S.AltResolutionContextLoader),this._container.get(B.SolanaTrustedNameContextLoader)];case o.Concordium:return[this._container.get(x.AccountOwnershipContextLoader)];case o.Tron:return[this._container.get(E.TokenContextLoader)];default:{const t=e;return[]}}}_getDefaultTypedDataLoader(){return this._config.chain!==o.Ethereum?{load:()=>Promise.reject(new Error("[ContextModule] getTypedDataFilters is not supported for this chain"))}:this._container.get(_.TypedDataContextLoader)}_getBlindSigningReporter(){return this._container.isBound(g.BlindSigningReporter)?this._container.get(g.BlindSigningReporter):null}_getSignReporter(){return this._container.isBound(c.SignReporter)?this._container.get(c.SignReporter):null}async getContexts(e,t){const r=Object.values(a),i=this._loaders.filter(d=>d.canHandle(e,t??r)).map(d=>d.load(e));return(await Promise.all(i)).flat()}async getFieldContext(e,t){const r=this._fieldLoaders.filter(n=>n.canHandle(e,t));if(r.length===0)return Promise.resolve({type:a.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${t}`)});for(const n of r){const i=await n.loadField(e);if(i.type!==a.ERROR)return i}return{type:a.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${t}`)}}async getTypedDataFilters(e){return this._typedDataLoader.load(e)}async report(e){await this._blindSigningReporter?.report(e)}async signReport(e){await this._signReporter?.report(e)}}export{se as DefaultContextModule};
1
+ import{makeContainer as x}from"./di";import{accountOwnershipTypes as f}from"./modules/concordium/account-ownership/di/accountOwnershipTypes";import{calldataTypes as L}from"./modules/ethereum/calldata/di/calldataTypes";import{dynamicNetworkTypes as y}from"./modules/ethereum/dynamic-network/di/dynamicNetworkTypes";import{externalPluginTypes as h}from"./modules/ethereum/external-plugin/di/externalPluginTypes";import{gatedSigningTypes as p}from"./modules/ethereum/gated-signing/di/gatedSigningTypes";import{nftTypes as l}from"./modules/ethereum/nft/di/nftTypes";import{proxyTypes as _}from"./modules/ethereum/proxy/di/proxyTypes";import{safeTypes as T}from"./modules/ethereum/safe/di/safeTypes";import{tokenTypes as m}from"./modules/ethereum/token/di/tokenTypes";import{trustedNameTypes as C}from"./modules/ethereum/trusted-name/di/trustedNameTypes";import{typedDataTypes as S}from"./modules/ethereum/typed-data/di/typedDataTypes";import{reporterTypes as g}from"./modules/multichain/reporter/di/reporterTypes";import{signReporterTypes as c}from"./modules/multichain/sign-reporter/di/signReporterTypes";import{transactionCheckTypes as s}from"./modules/multichain/transaction-check/di/transactionCheckTypes";import{altResolutionTypes as R}from"./modules/solana/alt-resolution/di/altResolutionTypes";import{enumVariantTypes as D}from"./modules/solana/enum-variant/di/enumVariantTypes";import{instructionInfoTypes as u}from"./modules/solana/instruction-info/di/instructionInfoTypes";import{lifiTypes as k}from"./modules/solana/lifi/di/lifiTypes";import{ownerInfoTypes as v}from"./modules/solana/owner-info/di/ownerInfoTypes";import{tokenTypes as F}from"./modules/solana/token/di/tokenTypes";import{tokenAccountStateTypes as w}from"./modules/solana/token-account-state/di/tokenAccountStateTypes";import{tokenInfoTypes as P}from"./modules/solana/token-info/di/tokenInfoTypes";import{solanaTrustedNameTypes as B}from"./modules/solana/trusted-name/di/trustedNameTypes";import{tokenTypes as E}from"./modules/tron/token/di/tokenTypes";import{ContextModuleChainID as o}from"./shared/domain/ContextModuleChainID";import{ClearSignContextType as a}from"./shared/model/ClearSignContext";class se{_container;_config;_loaders;_typedDataLoader;_fieldLoaders;_blindSigningReporter;_signReporter;constructor(e){this._config=e,this._container=x({config:e}),this._loaders=e.defaultLoaders?this._getDefaultLoaders():[],this._loaders.push(...e.customLoaders),this._fieldLoaders=e.defaultFieldLoaders?this._getDefaultFieldLoaders():[],this._fieldLoaders.push(...e.customFieldLoaders),this._typedDataLoader=e.customTypedDataLoader??this._getDefaultTypedDataLoader(),this._blindSigningReporter=e.customBlindSigningReporter??this._getBlindSigningReporter(),this._signReporter=this._getSignReporter()}_getDefaultFieldLoaders(){return this._config.chain!==o.Ethereum?[]:[this._container.get(l.NftContextFieldLoader),this._container.get(m.TokenContextFieldLoader),this._container.get(C.TrustedNameContextFieldLoader),this._container.get(_.ProxyContextFieldLoader)]}_getDefaultLoaders(){const{chain:e}=this._config;switch(e){case o.Ethereum:return[this._container.get(h.ExternalPluginContextLoader),this._container.get(C.TrustedNameContextLoader),this._container.get(l.NftContextLoader),this._container.get(m.TokenContextLoader),this._container.get(L.CalldataContextLoader),this._container.get(y.DynamicNetworkContextLoader),this._container.get(T.SafeAddressLoader),this._container.get(p.GatedSigningContextLoader),this._container.get(p.GatedSigningTypedDataContextLoader),this._container.get(s.TransactionCheckLoader),this._container.get(s.TypedDataCheckLoader)];case o.Solana:return[this._container.get(F.TokenContextLoader),this._container.get(k.LifiContextLoader),this._container.get(v.OwnerInfoContextLoader),this._container.get(s.TransactionCheckLoader),this._container.get(u.InstructionInfoContextLoader),this._container.get(D.EnumVariantContextLoader),this._container.get(P.TokenInfoContextLoader),this._container.get(w.TokenAccountStateContextLoader),this._container.get(R.AltResolutionContextLoader),this._container.get(B.SolanaTrustedNameContextLoader),this._container.get(u.SolanaBasicFlowRuleContextLoader)];case o.Concordium:return[this._container.get(f.AccountOwnershipContextLoader)];case o.Tron:return[this._container.get(E.TokenContextLoader)];default:{const t=e;return[]}}}_getDefaultTypedDataLoader(){return this._config.chain!==o.Ethereum?{load:()=>Promise.reject(new Error("[ContextModule] getTypedDataFilters is not supported for this chain"))}:this._container.get(S.TypedDataContextLoader)}_getBlindSigningReporter(){return this._container.isBound(g.BlindSigningReporter)?this._container.get(g.BlindSigningReporter):null}_getSignReporter(){return this._container.isBound(c.SignReporter)?this._container.get(c.SignReporter):null}async getContexts(e,t){const r=Object.values(a),i=this._loaders.filter(d=>d.canHandle(e,t??r)).map(d=>d.load(e));return(await Promise.all(i)).flat()}async getFieldContext(e,t){const r=this._fieldLoaders.filter(n=>n.canHandle(e,t));if(r.length===0)return Promise.resolve({type:a.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${t}`)});for(const n of r){const i=await n.loadField(e);if(i.type!==a.ERROR)return i}return{type:a.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${t}`)}}async getTypedDataFilters(e){return this._typedDataLoader.load(e)}async report(e){await this._blindSigningReporter?.report(e)}async signReport(e){await this._signReporter?.report(e)}}export{se as DefaultContextModule};
2
2
  //# sourceMappingURL=DefaultContextModule.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/DefaultContextModule.ts"],
4
- "sourcesContent": ["import { type Container } from \"inversify\";\n\nimport {\n type ContextModuleLoaderConfig,\n type ContextModuleServiceConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { type ContextModule } from \"@/ContextModule\";\nimport { makeContainer } from \"@/di\";\nimport { accountOwnershipTypes } from \"@/modules/concordium/account-ownership/di/accountOwnershipTypes\";\nimport { calldataTypes } from \"@/modules/ethereum/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/modules/ethereum/dynamic-network/di/dynamicNetworkTypes\";\nimport { externalPluginTypes } from \"@/modules/ethereum/external-plugin/di/externalPluginTypes\";\nimport { gatedSigningTypes } from \"@/modules/ethereum/gated-signing/di/gatedSigningTypes\";\nimport type { TypedDataClearSignContext } from \"@/modules/ethereum/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/modules/ethereum/model/TypedDataContext\";\nimport { nftTypes } from \"@/modules/ethereum/nft/di/nftTypes\";\nimport { proxyTypes } from \"@/modules/ethereum/proxy/di/proxyTypes\";\nimport { safeTypes } from \"@/modules/ethereum/safe/di/safeTypes\";\nimport { tokenTypes as ethereumTokenTypes } from \"@/modules/ethereum/token/di/tokenTypes\";\nimport { trustedNameTypes } from \"@/modules/ethereum/trusted-name/di/trustedNameTypes\";\nimport { typedDataTypes } from \"@/modules/ethereum/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/modules/ethereum/typed-data/domain/TypedDataContextLoader\";\nimport { type BlindSigningReportParams } from \"@/modules/multichain/reporter/data/BlindSigningReporterDatasource\";\nimport { reporterTypes } from \"@/modules/multichain/reporter/di/reporterTypes\";\nimport { type BlindSigningReporter } from \"@/modules/multichain/reporter/domain/BlindSigningReporter\";\nimport { signReporterTypes } from \"@/modules/multichain/sign-reporter/di/signReporterTypes\";\nimport { type SignReporter } from \"@/modules/multichain/sign-reporter/domain/SignReporter\";\nimport { type SignReportParams } from \"@/modules/multichain/sign-reporter/model/SignReportParams\";\nimport { transactionCheckTypes } from \"@/modules/multichain/transaction-check/di/transactionCheckTypes\";\nimport { altResolutionTypes } from \"@/modules/solana/alt-resolution/di/altResolutionTypes\";\nimport { enumVariantTypes } from \"@/modules/solana/enum-variant/di/enumVariantTypes\";\nimport { instructionInfoTypes } from \"@/modules/solana/instruction-info/di/instructionInfoTypes\";\nimport { lifiTypes } from \"@/modules/solana/lifi/di/lifiTypes\";\nimport { ownerInfoTypes } from \"@/modules/solana/owner-info/di/ownerInfoTypes\";\nimport { tokenTypes as solanaTokenTypes } from \"@/modules/solana/token/di/tokenTypes\";\nimport { tokenAccountStateTypes } from \"@/modules/solana/token-account-state/di/tokenAccountStateTypes\";\nimport { tokenInfoTypes } from \"@/modules/solana/token-info/di/tokenInfoTypes\";\nimport { solanaTrustedNameTypes } from \"@/modules/solana/trusted-name/di/trustedNameTypes\";\nimport { tokenTypes as tronTokenTypes } from \"@/modules/tron/token/di/tokenTypes\";\nimport { type ContextFieldLoader } from \"@/shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport { ContextModuleChainID } from \"@/shared/domain/ContextModuleChainID\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _config: ContextModuleServiceConfig & ContextModuleLoaderConfig;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n private _blindSigningReporter: BlindSigningReporter | null;\n private _signReporter: SignReporter | null;\n\n constructor(args: ContextModuleServiceConfig & ContextModuleLoaderConfig) {\n this._config = args;\n this._container = makeContainer({ config: args });\n\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n\n this._fieldLoaders = args.defaultFieldLoaders\n ? this._getDefaultFieldLoaders()\n : [];\n this._fieldLoaders.push(...args.customFieldLoaders);\n\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._blindSigningReporter =\n args.customBlindSigningReporter ?? this._getBlindSigningReporter();\n this._signReporter = this._getSignReporter();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n if (this._config.chain !== ContextModuleChainID.Ethereum) return [];\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n ethereumTokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n trustedNameTypes.TrustedNameContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n proxyTypes.ProxyContextFieldLoader,\n ),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader<unknown>[] {\n const { chain } = this._config;\n switch (chain) {\n case ContextModuleChainID.Ethereum:\n return [\n this._container.get<ContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<ContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<ContextLoader>(nftTypes.NftContextLoader),\n this._container.get<ContextLoader>(\n ethereumTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(\n calldataTypes.CalldataContextLoader,\n ),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n this._container.get<ContextLoader>(safeTypes.SafeAddressLoader),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningContextLoader,\n ),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningTypedDataContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TypedDataCheckLoader,\n ),\n ];\n case ContextModuleChainID.Solana:\n return [\n this._container.get<ContextLoader>(\n solanaTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(lifiTypes.LifiContextLoader),\n this._container.get<ContextLoader>(\n ownerInfoTypes.OwnerInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n this._container.get<ContextLoader>(\n instructionInfoTypes.InstructionInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n enumVariantTypes.EnumVariantContextLoader,\n ),\n this._container.get<ContextLoader>(\n tokenInfoTypes.TokenInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n tokenAccountStateTypes.TokenAccountStateContextLoader,\n ),\n this._container.get<ContextLoader>(\n altResolutionTypes.AltResolutionContextLoader,\n ),\n this._container.get<ContextLoader>(\n solanaTrustedNameTypes.SolanaTrustedNameContextLoader,\n ),\n ];\n case ContextModuleChainID.Concordium:\n return [\n this._container.get<ContextLoader>(\n accountOwnershipTypes.AccountOwnershipContextLoader,\n ),\n ];\n case ContextModuleChainID.Tron:\n return [\n this._container.get<ContextLoader>(tronTokenTypes.TokenContextLoader),\n ];\n default: {\n const exhaustiveCheck: never = chain;\n void exhaustiveCheck;\n return [];\n }\n }\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n if (this._config.chain !== ContextModuleChainID.Ethereum) {\n return {\n load: () =>\n Promise.reject(\n new Error(\n \"[ContextModule] getTypedDataFilters is not supported for this chain\",\n ),\n ),\n };\n }\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getBlindSigningReporter(): BlindSigningReporter | null {\n if (this._container.isBound(reporterTypes.BlindSigningReporter)) {\n return this._container.get<BlindSigningReporter>(\n reporterTypes.BlindSigningReporter,\n );\n }\n return null;\n }\n\n private _getSignReporter(): SignReporter | null {\n if (this._container.isBound(signReporterTypes.SignReporter)) {\n return this._container.get<SignReporter>(signReporterTypes.SignReporter);\n }\n return null;\n }\n\n public async getContexts(\n input: unknown,\n expectedTypes?: ClearSignContextType[],\n ): Promise<ClearSignContext[]> {\n const allContextTypes = Object.values(ClearSignContextType);\n const loaders = this._loaders.filter((l) =>\n l.canHandle(input, expectedTypes ?? allContextTypes),\n );\n const promises = loaders.map((fetcher) => fetcher.load(input));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getFieldContext<TInput>(\n field: TInput,\n expectedType: ClearSignContextType,\n ): Promise<ClearSignContext> {\n const loaders = this._fieldLoaders.filter((l) =>\n l.canHandle(field, expectedType),\n );\n if (loaders.length === 0) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n });\n }\n\n for (const loader of loaders) {\n const context = await loader.loadField(field);\n if (context.type !== ClearSignContextType.ERROR) {\n return context;\n }\n }\n\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n };\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async report(params: BlindSigningReportParams): Promise<void> {\n await this._blindSigningReporter?.report(params);\n }\n\n public async signReport(params: SignReportParams): Promise<void> {\n await this._signReporter?.report(params);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type Container } from \"inversify\";\n\nimport {\n type ContextModuleLoaderConfig,\n type ContextModuleServiceConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { type ContextModule } from \"@/ContextModule\";\nimport { makeContainer } from \"@/di\";\nimport { accountOwnershipTypes } from \"@/modules/concordium/account-ownership/di/accountOwnershipTypes\";\nimport { calldataTypes } from \"@/modules/ethereum/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/modules/ethereum/dynamic-network/di/dynamicNetworkTypes\";\nimport { externalPluginTypes } from \"@/modules/ethereum/external-plugin/di/externalPluginTypes\";\nimport { gatedSigningTypes } from \"@/modules/ethereum/gated-signing/di/gatedSigningTypes\";\nimport type { TypedDataClearSignContext } from \"@/modules/ethereum/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/modules/ethereum/model/TypedDataContext\";\nimport { nftTypes } from \"@/modules/ethereum/nft/di/nftTypes\";\nimport { proxyTypes } from \"@/modules/ethereum/proxy/di/proxyTypes\";\nimport { safeTypes } from \"@/modules/ethereum/safe/di/safeTypes\";\nimport { tokenTypes as ethereumTokenTypes } from \"@/modules/ethereum/token/di/tokenTypes\";\nimport { trustedNameTypes } from \"@/modules/ethereum/trusted-name/di/trustedNameTypes\";\nimport { typedDataTypes } from \"@/modules/ethereum/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/modules/ethereum/typed-data/domain/TypedDataContextLoader\";\nimport { type BlindSigningReportParams } from \"@/modules/multichain/reporter/data/BlindSigningReporterDatasource\";\nimport { reporterTypes } from \"@/modules/multichain/reporter/di/reporterTypes\";\nimport { type BlindSigningReporter } from \"@/modules/multichain/reporter/domain/BlindSigningReporter\";\nimport { signReporterTypes } from \"@/modules/multichain/sign-reporter/di/signReporterTypes\";\nimport { type SignReporter } from \"@/modules/multichain/sign-reporter/domain/SignReporter\";\nimport { type SignReportParams } from \"@/modules/multichain/sign-reporter/model/SignReportParams\";\nimport { transactionCheckTypes } from \"@/modules/multichain/transaction-check/di/transactionCheckTypes\";\nimport { altResolutionTypes } from \"@/modules/solana/alt-resolution/di/altResolutionTypes\";\nimport { enumVariantTypes } from \"@/modules/solana/enum-variant/di/enumVariantTypes\";\nimport { instructionInfoTypes } from \"@/modules/solana/instruction-info/di/instructionInfoTypes\";\nimport { lifiTypes } from \"@/modules/solana/lifi/di/lifiTypes\";\nimport { ownerInfoTypes } from \"@/modules/solana/owner-info/di/ownerInfoTypes\";\nimport { tokenTypes as solanaTokenTypes } from \"@/modules/solana/token/di/tokenTypes\";\nimport { tokenAccountStateTypes } from \"@/modules/solana/token-account-state/di/tokenAccountStateTypes\";\nimport { tokenInfoTypes } from \"@/modules/solana/token-info/di/tokenInfoTypes\";\nimport { solanaTrustedNameTypes } from \"@/modules/solana/trusted-name/di/trustedNameTypes\";\nimport { tokenTypes as tronTokenTypes } from \"@/modules/tron/token/di/tokenTypes\";\nimport { type ContextFieldLoader } from \"@/shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport { ContextModuleChainID } from \"@/shared/domain/ContextModuleChainID\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _config: ContextModuleServiceConfig & ContextModuleLoaderConfig;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n private _blindSigningReporter: BlindSigningReporter | null;\n private _signReporter: SignReporter | null;\n\n constructor(args: ContextModuleServiceConfig & ContextModuleLoaderConfig) {\n this._config = args;\n this._container = makeContainer({ config: args });\n\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n\n this._fieldLoaders = args.defaultFieldLoaders\n ? this._getDefaultFieldLoaders()\n : [];\n this._fieldLoaders.push(...args.customFieldLoaders);\n\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._blindSigningReporter =\n args.customBlindSigningReporter ?? this._getBlindSigningReporter();\n this._signReporter = this._getSignReporter();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n if (this._config.chain !== ContextModuleChainID.Ethereum) return [];\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n ethereumTokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n trustedNameTypes.TrustedNameContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n proxyTypes.ProxyContextFieldLoader,\n ),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader<unknown>[] {\n const { chain } = this._config;\n switch (chain) {\n case ContextModuleChainID.Ethereum:\n return [\n this._container.get<ContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<ContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<ContextLoader>(nftTypes.NftContextLoader),\n this._container.get<ContextLoader>(\n ethereumTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(\n calldataTypes.CalldataContextLoader,\n ),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n this._container.get<ContextLoader>(safeTypes.SafeAddressLoader),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningContextLoader,\n ),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningTypedDataContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TypedDataCheckLoader,\n ),\n ];\n case ContextModuleChainID.Solana:\n return [\n this._container.get<ContextLoader>(\n solanaTokenTypes.TokenContextLoader,\n ),\n this._container.get<ContextLoader>(lifiTypes.LifiContextLoader),\n this._container.get<ContextLoader>(\n ownerInfoTypes.OwnerInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckLoader,\n ),\n this._container.get<ContextLoader>(\n instructionInfoTypes.InstructionInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n enumVariantTypes.EnumVariantContextLoader,\n ),\n this._container.get<ContextLoader>(\n tokenInfoTypes.TokenInfoContextLoader,\n ),\n this._container.get<ContextLoader>(\n tokenAccountStateTypes.TokenAccountStateContextLoader,\n ),\n this._container.get<ContextLoader>(\n altResolutionTypes.AltResolutionContextLoader,\n ),\n this._container.get<ContextLoader>(\n solanaTrustedNameTypes.SolanaTrustedNameContextLoader,\n ),\n this._container.get<ContextLoader>(\n instructionInfoTypes.SolanaBasicFlowRuleContextLoader,\n ),\n ];\n case ContextModuleChainID.Concordium:\n return [\n this._container.get<ContextLoader>(\n accountOwnershipTypes.AccountOwnershipContextLoader,\n ),\n ];\n case ContextModuleChainID.Tron:\n return [\n this._container.get<ContextLoader>(tronTokenTypes.TokenContextLoader),\n ];\n default: {\n const exhaustiveCheck: never = chain;\n void exhaustiveCheck;\n return [];\n }\n }\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n if (this._config.chain !== ContextModuleChainID.Ethereum) {\n return {\n load: () =>\n Promise.reject(\n new Error(\n \"[ContextModule] getTypedDataFilters is not supported for this chain\",\n ),\n ),\n };\n }\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getBlindSigningReporter(): BlindSigningReporter | null {\n if (this._container.isBound(reporterTypes.BlindSigningReporter)) {\n return this._container.get<BlindSigningReporter>(\n reporterTypes.BlindSigningReporter,\n );\n }\n return null;\n }\n\n private _getSignReporter(): SignReporter | null {\n if (this._container.isBound(signReporterTypes.SignReporter)) {\n return this._container.get<SignReporter>(signReporterTypes.SignReporter);\n }\n return null;\n }\n\n public async getContexts(\n input: unknown,\n expectedTypes?: ClearSignContextType[],\n ): Promise<ClearSignContext[]> {\n const allContextTypes = Object.values(ClearSignContextType);\n const loaders = this._loaders.filter((l) =>\n l.canHandle(input, expectedTypes ?? allContextTypes),\n );\n const promises = loaders.map((fetcher) => fetcher.load(input));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getFieldContext<TInput>(\n field: TInput,\n expectedType: ClearSignContextType,\n ): Promise<ClearSignContext> {\n const loaders = this._fieldLoaders.filter((l) =>\n l.canHandle(field, expectedType),\n );\n if (loaders.length === 0) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n });\n }\n\n for (const loader of loaders) {\n const context = await loader.loadField(field);\n if (context.type !== ClearSignContextType.ERROR) {\n return context;\n }\n }\n\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n };\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async report(params: BlindSigningReportParams): Promise<void> {\n await this._blindSigningReporter?.report(params);\n }\n\n public async signReport(params: SignReportParams): Promise<void> {\n await this._signReporter?.report(params);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["makeContainer", "accountOwnershipTypes", "calldataTypes", "dynamicNetworkTypes", "externalPluginTypes", "gatedSigningTypes", "nftTypes", "proxyTypes", "safeTypes", "ethereumTokenTypes", "trustedNameTypes", "typedDataTypes", "reporterTypes", "signReporterTypes", "transactionCheckTypes", "altResolutionTypes", "enumVariantTypes", "instructionInfoTypes", "lifiTypes", "ownerInfoTypes", "solanaTokenTypes", "tokenAccountStateTypes", "tokenInfoTypes", "solanaTrustedNameTypes", "tronTokenTypes", "ContextModuleChainID", "ClearSignContextType", "DefaultContextModule", "args", "chain", "exhaustiveCheck", "input", "expectedTypes", "allContextTypes", "promises", "l", "fetcher", "field", "expectedType", "loaders", "loader", "context", "typedData", "params"]
7
7
  }