@ledgerhq/context-module 1.8.1 → 1.9.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.
- package/lib/cjs/package.json +2 -2
- package/lib/cjs/src/DefaultContextModule.js +1 -1
- package/lib/cjs/src/DefaultContextModule.js.map +3 -3
- package/lib/cjs/src/di.js +1 -1
- package/lib/cjs/src/di.js.map +3 -3
- package/lib/cjs/src/pki/model/KeyUsage.js +1 -1
- package/lib/cjs/src/pki/model/KeyUsage.js.map +2 -2
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js +2 -0
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js.map +7 -0
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js +2 -0
- package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js.map +7 -0
- package/lib/cjs/src/safe/data/SafeAccountDataSource.js +2 -0
- package/lib/cjs/src/safe/data/SafeAccountDataSource.js.map +7 -0
- package/lib/cjs/src/safe/data/dto/SafeAccountDto.js +2 -0
- package/lib/cjs/src/safe/data/dto/SafeAccountDto.js.map +7 -0
- package/lib/cjs/src/safe/di/safeModuleFactory.js +2 -0
- package/lib/cjs/src/safe/di/safeModuleFactory.js.map +7 -0
- package/lib/cjs/src/safe/di/safeModuleFactory.test.js +2 -0
- package/lib/cjs/src/safe/di/safeModuleFactory.test.js.map +7 -0
- package/lib/cjs/src/safe/di/safeTypes.js +2 -0
- package/lib/cjs/src/safe/di/safeTypes.js.map +7 -0
- package/lib/cjs/src/safe/domain/SafeAddressLoader.js +2 -0
- package/lib/cjs/src/safe/domain/SafeAddressLoader.js.map +7 -0
- package/lib/cjs/src/safe/domain/SafeAddressLoader.test.js +2 -0
- package/lib/cjs/src/safe/domain/SafeAddressLoader.test.js.map +7 -0
- package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
- package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/cjs/src/shared/utils/KeyUsageMapper.js +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.js.map +2 -2
- package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
- package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
- package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +2 -2
- package/lib/cjs/src/token/data/HttpTokenDataSource.test.js +1 -1
- package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +2 -2
- package/lib/esm/package.json +2 -2
- package/lib/esm/src/DefaultContextModule.js +1 -1
- package/lib/esm/src/DefaultContextModule.js.map +3 -3
- package/lib/esm/src/di.js +1 -1
- package/lib/esm/src/di.js.map +3 -3
- package/lib/esm/src/pki/model/KeyUsage.js +1 -1
- package/lib/esm/src/pki/model/KeyUsage.js.map +2 -2
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js +2 -0
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js.map +7 -0
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js +2 -0
- package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js.map +7 -0
- package/lib/esm/src/safe/data/SafeAccountDataSource.js +1 -0
- package/lib/esm/src/safe/data/SafeAccountDataSource.js.map +7 -0
- package/lib/esm/src/safe/data/dto/SafeAccountDto.js +1 -0
- package/lib/esm/src/safe/data/dto/SafeAccountDto.js.map +7 -0
- package/lib/esm/src/safe/di/safeModuleFactory.js +2 -0
- package/lib/esm/src/safe/di/safeModuleFactory.js.map +7 -0
- package/lib/esm/src/safe/di/safeModuleFactory.test.js +2 -0
- package/lib/esm/src/safe/di/safeModuleFactory.test.js.map +7 -0
- package/lib/esm/src/safe/di/safeTypes.js +2 -0
- package/lib/esm/src/safe/di/safeTypes.js.map +7 -0
- package/lib/esm/src/safe/domain/SafeAddressLoader.js +2 -0
- package/lib/esm/src/safe/domain/SafeAddressLoader.js.map +7 -0
- package/lib/esm/src/safe/domain/SafeAddressLoader.test.js +2 -0
- package/lib/esm/src/safe/domain/SafeAddressLoader.test.js.map +7 -0
- package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
- package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/esm/src/shared/utils/KeyUsageMapper.js +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.js.map +2 -2
- package/lib/esm/src/shared/utils/KeyUsageMapper.test.js +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
- package/lib/esm/src/token/data/HttpTokenDataSource.js +1 -1
- package/lib/esm/src/token/data/HttpTokenDataSource.js.map +2 -2
- package/lib/esm/src/token/data/HttpTokenDataSource.test.js +1 -1
- package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +2 -2
- package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
- package/lib/types/src/di.d.ts.map +1 -1
- package/lib/types/src/pki/model/KeyUsage.d.ts +2 -1
- package/lib/types/src/pki/model/KeyUsage.d.ts.map +1 -1
- package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts +11 -0
- package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts.map +1 -0
- package/lib/types/src/safe/data/HttpSafeAccountDataSource.test.d.ts +2 -0
- package/lib/types/src/safe/data/HttpSafeAccountDataSource.test.d.ts.map +1 -0
- package/lib/types/src/safe/data/SafeAccountDataSource.d.ts +20 -0
- package/lib/types/src/safe/data/SafeAccountDataSource.d.ts.map +1 -0
- package/lib/types/src/safe/data/dto/SafeAccountDto.d.ts +10 -0
- package/lib/types/src/safe/data/dto/SafeAccountDto.d.ts.map +1 -0
- package/lib/types/src/safe/di/safeModuleFactory.d.ts +3 -0
- package/lib/types/src/safe/di/safeModuleFactory.d.ts.map +1 -0
- package/lib/types/src/safe/di/safeModuleFactory.test.d.ts +2 -0
- package/lib/types/src/safe/di/safeModuleFactory.test.d.ts.map +1 -0
- package/lib/types/src/safe/di/safeTypes.d.ts +5 -0
- package/lib/types/src/safe/di/safeTypes.d.ts.map +1 -0
- package/lib/types/src/safe/domain/SafeAddressLoader.d.ts +19 -0
- package/lib/types/src/safe/domain/SafeAddressLoader.d.ts.map +1 -0
- package/lib/types/src/safe/domain/SafeAddressLoader.test.d.ts +2 -0
- package/lib/types/src/safe/domain/SafeAddressLoader.test.d.ts.map +1 -0
- package/lib/types/src/shared/model/ClearSignContext.d.ts +3 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
- package/lib/types/src/shared/utils/KeyUsageMapper.d.ts.map +1 -1
- package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/shared/utils/KeyUsageMapper.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { KeyUsageMapper } from \"@/shared/utils/KeyUsageMapper\";\n\ndescribe(\"KeyUsageMapper\", () => {\n describe(\"mapKeyUsageForFirmware\", () => {\n it.each([\n [KeyUsage.GenuineCheck, 1],\n [KeyUsage.ExchangePayload, 2],\n [KeyUsage.NftMeta, 3],\n [KeyUsage.TrustedName, 4],\n [KeyUsage.BackupProvider, 5],\n [KeyUsage.ProtectOrchestrator, 6],\n [KeyUsage.PluginMeta, 7],\n [KeyUsage.CoinMeta, 8],\n [KeyUsage.SeedIdAuth, 9],\n [KeyUsage.TxSimulationSigner, 10],\n [KeyUsage.Calldata, 11],\n [KeyUsage.Network, 12],\n ])(`should map key usage %s to %i`, (keyUsage, expected) => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(keyUsage);\n\n // THEN\n expect(result).toEqual(expected);\n });\n\n it(\"should return -1 when key usage is not found\", () => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(\n \"unknown\" as KeyUsage,\n );\n\n // THEN\n expect(result).toEqual(-1);\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAAyB,gCACzBC,EAA+B,yCAE/B,SAAS,iBAAkB,IAAM,CAC/B,SAAS,yBAA0B,IAAM,CACvC,GAAG,KAAK,CACN,CAAC,WAAS,aAAc,CAAC,EACzB,CAAC,WAAS,gBAAiB,CAAC,EAC5B,CAAC,WAAS,QAAS,CAAC,EACpB,CAAC,WAAS,YAAa,CAAC,EACxB,CAAC,WAAS,eAAgB,CAAC,EAC3B,CAAC,WAAS,oBAAqB,CAAC,EAChC,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,SAAU,CAAC,EACrB,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,mBAAoB,EAAE,EAChC,CAAC,WAAS,SAAU,EAAE,EACtB,CAAC,WAAS,QAAS,EAAE,
|
|
4
|
+
"sourcesContent": ["import { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { KeyUsageMapper } from \"@/shared/utils/KeyUsageMapper\";\n\ndescribe(\"KeyUsageMapper\", () => {\n describe(\"mapKeyUsageForFirmware\", () => {\n it.each([\n [KeyUsage.GenuineCheck, 1],\n [KeyUsage.ExchangePayload, 2],\n [KeyUsage.NftMeta, 3],\n [KeyUsage.TrustedName, 4],\n [KeyUsage.BackupProvider, 5],\n [KeyUsage.ProtectOrchestrator, 6],\n [KeyUsage.PluginMeta, 7],\n [KeyUsage.CoinMeta, 8],\n [KeyUsage.SeedIdAuth, 9],\n [KeyUsage.TxSimulationSigner, 10],\n [KeyUsage.Calldata, 11],\n [KeyUsage.Network, 12],\n [KeyUsage.LESMultisig, 14],\n ])(`should map key usage %s to %i`, (keyUsage, expected) => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(keyUsage);\n\n // THEN\n expect(result).toEqual(expected);\n });\n\n it(\"should return -1 when key usage is not found\", () => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(\n \"unknown\" as KeyUsage,\n );\n\n // THEN\n expect(result).toEqual(-1);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAAyB,gCACzBC,EAA+B,yCAE/B,SAAS,iBAAkB,IAAM,CAC/B,SAAS,yBAA0B,IAAM,CACvC,GAAG,KAAK,CACN,CAAC,WAAS,aAAc,CAAC,EACzB,CAAC,WAAS,gBAAiB,CAAC,EAC5B,CAAC,WAAS,QAAS,CAAC,EACpB,CAAC,WAAS,YAAa,CAAC,EACxB,CAAC,WAAS,eAAgB,CAAC,EAC3B,CAAC,WAAS,oBAAqB,CAAC,EAChC,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,SAAU,CAAC,EACrB,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,mBAAoB,EAAE,EAChC,CAAC,WAAS,SAAU,EAAE,EACtB,CAAC,WAAS,QAAS,EAAE,EACrB,CAAC,WAAS,YAAa,EAAE,CAC3B,CAAC,EAAE,gCAAiC,CAACC,EAAUC,IAAa,CAE1D,MAAMC,EAAS,iBAAe,uBAAuBF,CAAQ,EAG7D,OAAOE,CAAM,EAAE,QAAQD,CAAQ,CACjC,CAAC,EAED,GAAG,+CAAgD,IAAM,CAEvD,MAAMC,EAAS,iBAAe,uBAC5B,SACF,EAGA,OAAOA,CAAM,EAAE,QAAQ,EAAE,CAC3B,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_KeyUsage", "import_KeyUsageMapper", "keyUsage", "expected", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var T=Object.create;var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var D=(r,
|
|
1
|
+
"use strict";var T=Object.create;var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var D=(r,o)=>{for(var e in o)s(r,e,{get:o[e],enumerable:!0})},p=(r,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of x(o))!_.call(r,t)&&t!==e&&s(r,t,{get:()=>o[t],enumerable:!(n=d(o,t))||n.enumerable});return r};var g=(r,o,e)=>(e=r!=null?T(y(r)):{},p(o||!r||!r.__esModule?s(e,"default",{value:r,enumerable:!0}):e,r)),G=r=>p(s({},"__esModule",{value:!0}),r),l=(r,o,e,n)=>{for(var t=n>1?void 0:n?d(o,e):o,i=r.length-1,m;i>=0;i--)(m=r[i])&&(t=(n?m(o,e,t):m(t))||t);return n&&t&&s(o,e,t),t},u=(r,o)=>(e,n)=>o(e,n,r);var I={};D(I,{HttpTokenDataSource:()=>a});module.exports=G(I);var h=g(require("axios")),f=require("inversify"),c=require("purify-ts"),E=require("../../config/di/configTypes"),k=require("../../shared/constant/HttpHeaders"),C=g(require("../../../package.json"));let a=class{constructor(o){this.config=o}async getTokenInfosPayload({chainId:o,address:e}){try{const t=(await h.default.request({method:"GET",url:`${this.config.cal.url}/tokens`,params:{contract_address:e,chain_id:o,output:"descriptor",ref:`branch:${this.config.cal.branch}`},headers:{[k.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${C.default.version}`}})).data?.[0];if(!t||!t.descriptor||!t.descriptor.data||!t.descriptor.signatures||typeof t.descriptor.signatures[this.config.cal.mode]!="string")return(0,c.Left)(new Error(`[ContextModule] HttpTokenDataSource: no token metadata for address ${e} on chain ${o}`));const i=(t.descriptor.data.length/2-20-4-4).toString(16).padStart(2,"0");return(0,c.Right)([i,t.descriptor.data,t.descriptor.signatures[this.config.cal.mode]].join(""))}catch{return(0,c.Left)(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};a=l([(0,f.injectable)(),u(0,(0,f.inject)(E.configTypes.Config))],a);0&&(module.exports={HttpTokenDataSource});
|
|
2
2
|
//# sourceMappingURL=HttpTokenDataSource.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/token/data/HttpTokenDataSource.ts"],
|
|
4
|
-
"sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { GetTokenInfosParams, TokenDataSource } from \"./TokenDataSource\";\nimport { TokenDto } from \"./TokenDto\";\n\n@injectable()\nexport class HttpTokenDataSource implements TokenDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n public async getTokenInfosPayload({\n chainId,\n address,\n }: GetTokenInfosParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<TokenDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/tokens`,\n params: {\n contract_address: address,\n chain_id: chainId,\n output: \"descriptor
|
|
5
|
-
"mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAE5BC,EAA6C,yCAC7CC,EAAoB,iCAMb,IAAMC,EAAN,KAAqD,CAC1D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CACH,MAAa,qBAAqB,CAChC,QAAAC,EACA,QAAAC,CACF,EAAwD,CACtD,GAAI,CAcF,MAAMC,GAbW,MAAM,EAAAC,QAAM,QAAoB,CAC/C,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,UAC3B,OAAQ,CACN,iBAAkBF,EAClB,SAAUD,EACV,OAAQ,
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { GetTokenInfosParams, TokenDataSource } from \"./TokenDataSource\";\nimport { TokenDto } from \"./TokenDto\";\n\n@injectable()\nexport class HttpTokenDataSource implements TokenDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n public async getTokenInfosPayload({\n chainId,\n address,\n }: GetTokenInfosParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<TokenDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/tokens`,\n params: {\n contract_address: address,\n chain_id: chainId,\n output: \"descriptor\",\n ref: `branch:${this.config.cal.branch}`,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n });\n const tokenInfos = response.data?.[0];\n\n if (\n !tokenInfos ||\n !tokenInfos.descriptor ||\n !tokenInfos.descriptor.data ||\n !tokenInfos.descriptor.signatures ||\n typeof tokenInfos.descriptor.signatures[this.config.cal.mode] !==\n \"string\"\n ) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenDataSource: no token metadata for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n // According to documentation: https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#provide-erc-20-token-information\n // Signed descriptor is composed of:\n // ticker || address (20 bytes) || number of decimals (4 bytes) || chainId (4 bytes)\n const tickerLengthBuff = (\n tokenInfos.descriptor.data.length / 2 -\n 20 -\n 4 -\n 4\n )\n .toString(16)\n .padStart(2, \"0\");\n\n return Right(\n [\n tickerLengthBuff,\n tokenInfos.descriptor.data,\n tokenInfos.descriptor.signatures[this.config.cal.mode],\n ].join(\"\"),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n );\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAE5BC,EAA6C,yCAC7CC,EAAoB,iCAMb,IAAMC,EAAN,KAAqD,CAC1D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CACH,MAAa,qBAAqB,CAChC,QAAAC,EACA,QAAAC,CACF,EAAwD,CACtD,GAAI,CAcF,MAAMC,GAbW,MAAM,EAAAC,QAAM,QAAoB,CAC/C,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,UAC3B,OAAQ,CACN,iBAAkBF,EAClB,SAAUD,EACV,OAAQ,aACR,IAAK,UAAU,KAAK,OAAO,IAAI,MAAM,EACvC,EACA,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAI,QAAQ,OAAO,EACnE,CACF,CAAC,GAC2B,OAAO,CAAC,EAEpC,GACE,CAACF,GACD,CAACA,EAAW,YACZ,CAACA,EAAW,WAAW,MACvB,CAACA,EAAW,WAAW,YACvB,OAAOA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,GAC1D,SAEF,SAAO,QACL,IAAI,MACF,sEAAsED,CAAO,aAAaD,CAAO,EACnG,CACF,EAMF,MAAMK,GACJH,EAAW,WAAW,KAAK,OAAS,EACpC,GACA,EACA,GAEC,SAAS,EAAE,EACX,SAAS,EAAG,GAAG,EAElB,SAAO,SACL,CACEG,EACAH,EAAW,WAAW,KACtBA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,CACvD,EAAE,KAAK,EAAE,CACX,CACF,MAAiB,CACf,SAAO,QACL,IAAI,MACF,yEACF,CACF,CACF,CACF,CACF,EAlEaJ,EAANQ,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,cAAY,MAAM,IAFjBT",
|
|
6
6
|
"names": ["HttpTokenDataSource_exports", "__export", "HttpTokenDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_configTypes", "import_HttpHeaders", "import_package", "HttpTokenDataSource", "config", "chainId", "address", "tokenInfos", "axios", "PACKAGE", "tickerLengthBuff", "__decorateClass", "__decorateParam"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var p=Object.create;var
|
|
1
|
+
"use strict";var p=Object.create;var c=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var h=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of m(e))!f.call(t,n)&&n!==o&&c(t,n,{get:()=>e[n],enumerable:!(s=k(e,n))||s.enumerable});return t};var d=(t,e,o)=>(o=t!=null?p(x(t)):{},h(e||!t||!t.__esModule?c(o,"default",{value:t,enumerable:!0}):o,t));var a=d(require("axios")),r=require("purify-ts"),i=require("../../shared/constant/HttpHeaders"),l=require("../../token/data/HttpTokenDataSource"),u=d(require("../../../package.json"));vi.mock("axios");describe("HttpTokenDataSource",()=>{let t;beforeAll(()=>{const e={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}};t=new l.HttpTokenDataSource(e),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const e=`context-module/${u.default.version}`,o=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(a.default,"request").mockImplementation(o),await t.getTokenInfosPayload({address:"0x00",chainId:1}),expect(o).toHaveBeenCalledWith(expect.objectContaining({headers:{[i.LEDGER_CLIENT_VERSION_HEADER]:e}}))}),it("should return a string when axios response is correct",async()=>{const e={ticker:"USDC",descriptor:{data:"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089",signatures:{prod:"0123"}}};vi.spyOn(a.default,"request").mockResolvedValue({data:[e]});const o=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(o.extract()).toEqual("04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123")}),it("should return a string when axios response is correct with a prefixed ticker",async()=>{const e={ticker:"tUSDC",descriptor:{data:"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7",signatures:{prod:"0123"}}};vi.spyOn(a.default,"request").mockResolvedValue({data:[e]});const o=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(o.extract()).toEqual("067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123")}),it("should return an error when data is empty",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:void 0});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no signature",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:[{}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no decimals",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:[{live_signature:"0x0",ticker:"USDC"}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return an error when axios throws an error",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error);const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
|
|
2
2
|
//# sourceMappingURL=HttpTokenDataSource.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/token/data/HttpTokenDataSource.test.ts"],
|
|
4
|
-
"sourcesContent": ["import axios from \"axios\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport { HttpTokenDataSource } from \"@/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/token/data/TokenDto\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n datasource = new HttpTokenDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n });\n\n it(\"should return a string when axios response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"
|
|
5
|
-
"mappings": "wdAAA,IAAAA,EAAkB,oBAClBC,EAAqB,qBAGrBC,EAA6C,yCAC7CC,EAAoC,4CAGpCC,EAAoB,iCAEpB,GAAG,KAAK,OAAO,EAEf,SAAS,sBAAuB,IAAM,CACpC,IAAIC,EAEJ,UAAU,IAAM,CACd,MAAMC,EAAS,CACb,IAAK,CACH,IAAK,kDACL,KAAM,OACN,OAAQ,MACV,CACF,EACAD,EAAa,IAAI,sBAAoBC,CAAM,EAC3C,GAAG,cAAc,CACnB,CAAC,EAED,GAAG,0DAA2D,SAAY,CAExE,MAAMC,EAAU,kBAAkB,EAAAC,QAAQ,OAAO,GAC3CC,EAAa,GAAG,GAAG,IAAM,QAAQ,QAAQ,CAAE,KAAM,CAAC,CAAE,CAAC,CAAC,EAC5D,GAAG,MAAM,EAAAC,QAAO,SAAS,EAAE,mBAAmBD,CAAU,EAGxD,MAAMJ,EAAW,qBAAqB,CAAE,QAAS,OAAQ,QAAS,CAAE,CAAC,EAGrE,OAAOI,CAAU,EAAE,qBACjB,OAAO,iBAAiB,CACtB,QAAS,CAAE,CAAC,8BAA4B,EAAGF,CAAQ,CACrD,CAAC,CACH,CACF,CAAC,EAED,GAAG,wDAAyD,SAAY,CAEtE,MAAMI,EAAqB,CACzB,OAAQ,OACR,WAAY,CACV,KAAM,
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport { HttpTokenDataSource } from \"@/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/token/data/TokenDto\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n datasource = new HttpTokenDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n });\n\n it(\"should return a string when axios response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123\",\n );\n });\n\n it(\"should return a string when axios response is correct with a prefixed ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"tUSDC\",\n descriptor: {\n data: \"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123\",\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [{}] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({\n data: [{ live_signature: \"0x0\", ticker: \"USDC\" }],\n });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_axios", "import_purify_ts", "import_HttpHeaders", "import_HttpTokenDataSource", "import_package", "datasource", "config", "version", "PACKAGE", "requestSpy", "axios", "tokenDTO", "result"]
|
|
7
7
|
}
|
package/lib/esm/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/context-module",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"exports": {
|
|
@@ -53,6 +53,6 @@
|
|
|
53
53
|
"reflect-metadata": "catalog:"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
|
-
"@ledgerhq/device-management-kit": "
|
|
56
|
+
"@ledgerhq/device-management-kit": "workspace:*"
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Left as C}from"purify-ts";import{calldataTypes as p}from"./calldata/di/calldataTypes";import{dynamicNetworkTypes as c}from"./dynamic-network/di/dynamicNetworkTypes";import{trustedNameTypes as i}from"./trusted-name/di/trustedNameTypes";import{externalPluginTypes as x}from"./external-plugin/di/externalPluginTypes";import{nftTypes as s}from"./nft/di/nftTypes";import{proxyTypes as m}from"./proxy/di/proxyTypes";import{ClearSignContextType as a}from"./shared/model/ClearSignContext";import{solanaContextTypes as
|
|
1
|
+
import{Left as C}from"purify-ts";import{calldataTypes as p}from"./calldata/di/calldataTypes";import{dynamicNetworkTypes as c}from"./dynamic-network/di/dynamicNetworkTypes";import{trustedNameTypes as i}from"./trusted-name/di/trustedNameTypes";import{externalPluginTypes as x}from"./external-plugin/di/externalPluginTypes";import{nftTypes as s}from"./nft/di/nftTypes";import{proxyTypes as m}from"./proxy/di/proxyTypes";import{safeTypes as L}from"./safe/di/safeTypes";import{ClearSignContextType as a}from"./shared/model/ClearSignContext";import{solanaContextTypes as y}from"./solana/di/solanaContextTypes";import{tokenTypes as l}from"./token/di/tokenTypes";import{typedDataTypes as f}from"./typed-data/di/typedDataTypes";import{web3CheckTypes as u}from"./web3-check/di/web3CheckTypes";import{makeContainer as h}from"./di";class O{_container;_loaders;_typedDataLoader;_web3CheckLoader;_solanaLoader;_fieldLoaders;constructor(e){this._container=h({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._web3CheckLoader=e.customWeb3CheckLoader??this._getWeb3CheckLoader(),this._solanaLoader=e.customSolanaLoader??this._getSolanaLoader()}_getDefaultFieldLoaders(){return[this._container.get(s.NftContextFieldLoader),this._container.get(l.TokenContextFieldLoader),this._container.get(i.TrustedNameContextFieldLoader),this._container.get(m.ProxyContextFieldLoader)]}_getDefaultLoaders(){return[this._container.get(x.ExternalPluginContextLoader),this._container.get(i.TrustedNameContextLoader),this._container.get(s.NftContextLoader),this._container.get(l.TokenContextLoader),this._container.get(p.CalldataContextLoader),this._container.get(c.DynamicNetworkContextLoader),this._container.get(L.SafeAddressLoader)]}_getDefaultTypedDataLoader(){return this._container.get(f.TypedDataContextLoader)}_getWeb3CheckLoader(){return this._container.get(u.Web3CheckContextLoader)}_getSolanaLoader(){try{return this._container.get(y.SolanaContextLoader)}catch{return{load:async e=>C(new Error("[ContextModule] - DefaultContextModule: no SolanaContextLoader bound"))}}}async getContexts(e,o){const t=Object.values(a),n=this._loaders.filter(d=>d.canHandle(e,o??t)).map(d=>d.load(e));return(await Promise.all(n)).flat()}async getFieldContext(e,o){const t=this._fieldLoaders.filter(r=>r.canHandle(e,o));if(t.length===0)return Promise.resolve({type:a.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${o}`)});for(const r of t){const n=await r.loadField(e);if(n.type!==a.ERROR)return n}return{type:a.ERROR,error:new Error(`Loader not found for field: ${e} and expected type: ${o}`)}}async getTypedDataFilters(e){return this._typedDataLoader.load(e)}async getWeb3Checks(e){return(await this._web3CheckLoader.load(e)).caseOf({Right:t=>({type:a.WEB3_CHECK,payload:t.descriptor,certificate:t.certificate}),Left:()=>null})}async getSolanaContext(e){return await this._solanaLoader.load(e)}}export{O 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\";\nimport { Left } from \"purify-ts\";\n\nimport { calldataTypes } from \"@/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { proxyTypes } from \"./proxy/di/proxyTypes\";\nimport { type ContextFieldLoader } from \"./shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { web3CheckTypes } from \"./web3-check/di/web3CheckTypes\";\nimport { type Web3CheckContextLoader } from \"./web3-check/domain/Web3CheckContextLoader\";\nimport {\n type Web3CheckContext,\n type Web3Checks,\n} from \"./web3-check/domain/web3CheckTypes\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _web3CheckLoader: Web3CheckContextLoader;\n private _solanaLoader: SolanaContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n\n constructor(args: ContextModuleConfig) {\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._web3CheckLoader =\n args.customWeb3CheckLoader ?? this._getWeb3CheckLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n tokenTypes.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 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>(tokenTypes.TokenContextLoader),\n this._container.get<ContextLoader>(calldataTypes.CalldataContextLoader),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getWeb3CheckLoader(): Web3CheckContextLoader {\n return this._container.get<Web3CheckContextLoader>(\n web3CheckTypes.Web3CheckContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\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 getWeb3Checks(\n transactionContext: Web3CheckContext,\n ): Promise<ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null> {\n const web3Checks = await this._web3CheckLoader.load(transactionContext);\n\n return web3Checks.caseOf({\n Right: (checks: Web3Checks) => ({\n type: ClearSignContextType.WEB3_CHECK,\n payload: checks.descriptor,\n certificate: checks.certificate,\n }),\n Left: () => null,\n });\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,OAAS,QAAAA,MAAY,YAErB,OAAS,iBAAAC,MAAqB,8BAC9B,OAAS,uBAAAC,MAA2B,2CAGpC,OAAS,oBAAAC,MAAwB,qCAGjC,OAAS,uBAAAC,MAA2B,2CACpC,OAAS,YAAAC,MAAgB,oBACzB,OAAS,cAAAC,MAAkB,
|
|
6
|
-
"names": ["Left", "calldataTypes", "dynamicNetworkTypes", "trustedNameTypes", "externalPluginTypes", "nftTypes", "proxyTypes", "ClearSignContextType", "solanaContextTypes", "tokenTypes", "typedDataTypes", "web3CheckTypes", "makeContainer", "DefaultContextModule", "args", "_ctx", "input", "expectedTypes", "allContextTypes", "promises", "l", "fetcher", "field", "expectedType", "loaders", "loader", "context", "typedData", "transactionContext", "checks"]
|
|
4
|
+
"sourcesContent": ["import { type Container } from \"inversify\";\nimport { Left } from \"purify-ts\";\n\nimport { calldataTypes } from \"@/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { proxyTypes } from \"./proxy/di/proxyTypes\";\nimport { safeTypes } from \"./safe/di/safeTypes\";\nimport { type ContextFieldLoader } from \"./shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { web3CheckTypes } from \"./web3-check/di/web3CheckTypes\";\nimport { type Web3CheckContextLoader } from \"./web3-check/domain/Web3CheckContextLoader\";\nimport {\n type Web3CheckContext,\n type Web3Checks,\n} from \"./web3-check/domain/web3CheckTypes\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _web3CheckLoader: Web3CheckContextLoader;\n private _solanaLoader: SolanaContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n\n constructor(args: ContextModuleConfig) {\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._web3CheckLoader =\n args.customWeb3CheckLoader ?? this._getWeb3CheckLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n tokenTypes.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 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>(tokenTypes.TokenContextLoader),\n this._container.get<ContextLoader>(calldataTypes.CalldataContextLoader),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n this._container.get<ContextLoader>(safeTypes.SafeAddressLoader),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getWeb3CheckLoader(): Web3CheckContextLoader {\n return this._container.get<Web3CheckContextLoader>(\n web3CheckTypes.Web3CheckContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\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 getWeb3Checks(\n transactionContext: Web3CheckContext,\n ): Promise<ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null> {\n const web3Checks = await this._web3CheckLoader.load(transactionContext);\n\n return web3Checks.caseOf({\n Right: (checks: Web3Checks) => ({\n type: ClearSignContextType.WEB3_CHECK,\n payload: checks.descriptor,\n certificate: checks.certificate,\n }),\n Left: () => null,\n });\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Left", "calldataTypes", "dynamicNetworkTypes", "trustedNameTypes", "externalPluginTypes", "nftTypes", "proxyTypes", "safeTypes", "ClearSignContextType", "solanaContextTypes", "tokenTypes", "typedDataTypes", "web3CheckTypes", "makeContainer", "DefaultContextModule", "args", "_ctx", "input", "expectedTypes", "allContextTypes", "promises", "l", "fetcher", "field", "expectedType", "loaders", "loader", "context", "typedData", "transactionContext", "checks"]
|
|
7
7
|
}
|
package/lib/esm/src/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Container as t}from"inversify";import{calldataModuleFactory as e}from"./calldata/di/calldataModuleFactory";import{configModuleFactory as a}from"./config/di/configModuleFactory";import{dynamicNetworkModuleFactory as m}from"./dynamic-network/di/dynamicNetworkModuleFactory";import{externalPluginModuleFactory as n}from"./external-plugin/di/externalPluginModuleFactory";import{nftModuleFactory as i}from"./nft/di/nftModuleFactory";import{nanoPkiModuleFactory as c}from"./pki/di/pkiModuleFactory";import{proxyModuleFactory as l}from"./proxy/di/proxyModuleFactory";import{
|
|
1
|
+
import{Container as t}from"inversify";import{calldataModuleFactory as e}from"./calldata/di/calldataModuleFactory";import{configModuleFactory as a}from"./config/di/configModuleFactory";import{dynamicNetworkModuleFactory as m}from"./dynamic-network/di/dynamicNetworkModuleFactory";import{externalPluginModuleFactory as n}from"./external-plugin/di/externalPluginModuleFactory";import{nftModuleFactory as i}from"./nft/di/nftModuleFactory";import{nanoPkiModuleFactory as c}from"./pki/di/pkiModuleFactory";import{proxyModuleFactory as l}from"./proxy/di/proxyModuleFactory";import{safeModuleFactory as p}from"./safe/di/safeModuleFactory";import{solanaContextModuleFactory as d}from"./solana/di/SolanaContextModuleFactory";import{tokenModuleFactory as f}from"./token/di/tokenModuleFactory";import{trustedNameModuleFactory as u}from"./trusted-name/di/trustedNameModuleFactory";import{typedDataModuleFactory as y}from"./typed-data/di/typedDataModuleFactory";import{uniswapModuleFactory as M}from"./uniswap/di/uniswapModuleFactory";import{web3CheckModuleFactory as F}from"./web3-check/di/web3CheckModuleFactory";const v=({config:o})=>{const r=new t;return r.loadSync(a(o),n(),m(),i(),l(o),p(),f(),e(),u(),y(),c(),M(),F(),d()),r};export{v as makeContainer};
|
|
2
2
|
//# sourceMappingURL=di.js.map
|
package/lib/esm/src/di.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/di.ts"],
|
|
4
|
-
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { calldataModuleFactory } from \"@/calldata/di/calldataModuleFactory\";\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { dynamicNetworkModuleFactory } from \"@/dynamic-network/di/dynamicNetworkModuleFactory\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { proxyModuleFactory } from \"@/proxy/di/proxyModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\nimport { web3CheckModuleFactory } from \"@/web3-check/di/web3CheckModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n dynamicNetworkModuleFactory(),\n nftModuleFactory(),\n proxyModuleFactory(config),\n tokenModuleFactory(),\n calldataModuleFactory(),\n trustedNameModuleFactory(),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n web3CheckModuleFactory(),\n solanaContextModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,yBAAAC,MAA6B,sCACtC,OAAS,uBAAAC,MAA2B,kCAEpC,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,oBAAAC,MAAwB,4BACjC,OAAS,wBAAAC,MAA4B,4BACrC,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,8BAAAC,MAAkC,yCAC3C,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,4BAAAC,MAAgC,6CACzC,OAAS,0BAAAC,MAA8B,yCACvC,OAAS,wBAAAC,MAA4B,oCACrC,OAAS,0BAAAC,MAA8B,yCAMhC,MAAMC,EAAgB,CAAC,CAAE,OAAAC,CAAO,IAAyB,CAC9D,MAAMC,EAAY,
|
|
6
|
-
"names": ["Container", "calldataModuleFactory", "configModuleFactory", "dynamicNetworkModuleFactory", "externalPluginModuleFactory", "nftModuleFactory", "nanoPkiModuleFactory", "proxyModuleFactory", "solanaContextModuleFactory", "tokenModuleFactory", "trustedNameModuleFactory", "typedDataModuleFactory", "uniswapModuleFactory", "web3CheckModuleFactory", "makeContainer", "config", "container"]
|
|
4
|
+
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { calldataModuleFactory } from \"@/calldata/di/calldataModuleFactory\";\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { dynamicNetworkModuleFactory } from \"@/dynamic-network/di/dynamicNetworkModuleFactory\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { proxyModuleFactory } from \"@/proxy/di/proxyModuleFactory\";\nimport { safeModuleFactory } from \"@/safe/di/safeModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\nimport { web3CheckModuleFactory } from \"@/web3-check/di/web3CheckModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n dynamicNetworkModuleFactory(),\n nftModuleFactory(),\n proxyModuleFactory(config),\n safeModuleFactory(),\n tokenModuleFactory(),\n calldataModuleFactory(),\n trustedNameModuleFactory(),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n web3CheckModuleFactory(),\n solanaContextModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,yBAAAC,MAA6B,sCACtC,OAAS,uBAAAC,MAA2B,kCAEpC,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,oBAAAC,MAAwB,4BACjC,OAAS,wBAAAC,MAA4B,4BACrC,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,qBAAAC,MAAyB,8BAClC,OAAS,8BAAAC,MAAkC,yCAC3C,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,4BAAAC,MAAgC,6CACzC,OAAS,0BAAAC,MAA8B,yCACvC,OAAS,wBAAAC,MAA4B,oCACrC,OAAS,0BAAAC,MAA8B,yCAMhC,MAAMC,EAAgB,CAAC,CAAE,OAAAC,CAAO,IAAyB,CAC9D,MAAMC,EAAY,IAAIjB,EAEtB,OAAAiB,EAAU,SACRf,EAAoBc,CAAM,EAC1BZ,EAA4B,EAC5BD,EAA4B,EAC5BE,EAAiB,EACjBE,EAAmBS,CAAM,EACzBR,EAAkB,EAClBE,EAAmB,EACnBT,EAAsB,EACtBU,EAAyB,EACzBC,EAAuB,EACvBN,EAAqB,EACrBO,EAAqB,EACrBC,EAAuB,EACvBL,EAA2B,CAC7B,EAEOQ,CACT",
|
|
6
|
+
"names": ["Container", "calldataModuleFactory", "configModuleFactory", "dynamicNetworkModuleFactory", "externalPluginModuleFactory", "nftModuleFactory", "nanoPkiModuleFactory", "proxyModuleFactory", "safeModuleFactory", "solanaContextModuleFactory", "tokenModuleFactory", "trustedNameModuleFactory", "typedDataModuleFactory", "uniswapModuleFactory", "web3CheckModuleFactory", "makeContainer", "config", "container"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var r=(t=>(t.GenuineCheck="genuine_check",t.ExchangePayload="exchange_payload",t.NftMeta="nft_meta",t.TrustedName="trusted_name",t.BackupProvider="backup_provider",t.ProtectOrchestrator="protect_orchestrator",t.PluginMeta="plugin_meta",t.CoinMeta="coin_meta",t.SeedIdAuth="seed_id_auth",t.TxSimulationSigner="tx_simu_signer",t.Calldata="calldata",t.Network="network",t))(r||{});export{r as KeyUsage};
|
|
1
|
+
var r=(t=>(t.GenuineCheck="genuine_check",t.ExchangePayload="exchange_payload",t.NftMeta="nft_meta",t.TrustedName="trusted_name",t.BackupProvider="backup_provider",t.ProtectOrchestrator="protect_orchestrator",t.PluginMeta="plugin_meta",t.CoinMeta="coin_meta",t.SeedIdAuth="seed_id_auth",t.TxSimulationSigner="tx_simu_signer",t.Calldata="calldata",t.Network="network",t.LESMultisig="les_multisig",t))(r||{});export{r as KeyUsage};
|
|
2
2
|
//# sourceMappingURL=KeyUsage.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/pki/model/KeyUsage.ts"],
|
|
4
|
-
"sourcesContent": ["export enum KeyUsage {\n GenuineCheck = \"genuine_check\",\n ExchangePayload = \"exchange_payload\",\n NftMeta = \"nft_meta\",\n TrustedName = \"trusted_name\",\n BackupProvider = \"backup_provider\",\n ProtectOrchestrator = \"protect_orchestrator\",\n PluginMeta = \"plugin_meta\",\n CoinMeta = \"coin_meta\",\n SeedIdAuth = \"seed_id_auth\",\n TxSimulationSigner = \"tx_simu_signer\",\n Calldata = \"calldata\",\n Network = \"network\",\n}\n"],
|
|
5
|
-
"mappings": "AAAO,IAAKA,OACVA,EAAA,aAAe,gBACfA,EAAA,gBAAkB,mBAClBA,EAAA,QAAU,WACVA,EAAA,YAAc,eACdA,EAAA,eAAiB,kBACjBA,EAAA,oBAAsB,uBACtBA,EAAA,WAAa,cACbA,EAAA,SAAW,YACXA,EAAA,WAAa,eACbA,EAAA,mBAAqB,iBACrBA,EAAA,SAAW,WACXA,EAAA,QAAU,
|
|
4
|
+
"sourcesContent": ["export enum KeyUsage {\n GenuineCheck = \"genuine_check\",\n ExchangePayload = \"exchange_payload\",\n NftMeta = \"nft_meta\",\n TrustedName = \"trusted_name\",\n BackupProvider = \"backup_provider\",\n ProtectOrchestrator = \"protect_orchestrator\",\n PluginMeta = \"plugin_meta\",\n CoinMeta = \"coin_meta\",\n SeedIdAuth = \"seed_id_auth\",\n TxSimulationSigner = \"tx_simu_signer\",\n Calldata = \"calldata\",\n Network = \"network\",\n LESMultisig = \"les_multisig\",\n}\n"],
|
|
5
|
+
"mappings": "AAAO,IAAKA,OACVA,EAAA,aAAe,gBACfA,EAAA,gBAAkB,mBAClBA,EAAA,QAAU,WACVA,EAAA,YAAc,eACdA,EAAA,eAAiB,kBACjBA,EAAA,oBAAsB,uBACtBA,EAAA,WAAa,cACbA,EAAA,SAAW,YACXA,EAAA,WAAa,eACbA,EAAA,mBAAqB,iBACrBA,EAAA,SAAW,WACXA,EAAA,QAAU,UACVA,EAAA,YAAc,eAbJA,OAAA",
|
|
6
6
|
"names": ["KeyUsage"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var D=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=(s,e,o,r)=>{for(var t=r>1?void 0:r?d(e,o):e,c=s.length-1,n;c>=0;c--)(n=s[c])&&(t=(r?n(e,o,t):n(t))||t);return r&&t&&D(e,o,t),t},f=(s,e)=>(o,r)=>e(o,r,s);import u from"axios";import{inject as g}from"inversify";import{Left as a,Right as m}from"purify-ts";import{configTypes as y}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as S,LEDGER_ORIGIN_TOKEN_HEADER as E}from"../../shared/constant/HttpHeaders";import k from"../../../package.json";let i=class{constructor(e){this.config=e}async getDescriptors({safeContractAddress:e,chainId:o,challenge:r}){try{const t=await u.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/ethereum/${o}/safe/account/${e}`,params:{challenge:r},headers:{[S]:`context-module/${k.version}`,[E]:this.config.originToken}});return t.data?this.isSafeAccountDto(t.data)?m({account:{signedDescriptor:t.data.accountDescriptor.signedDescriptor,keyId:t.data.accountDescriptor.keyId,keyUsage:t.data.accountDescriptor.keyUsage},signers:{signedDescriptor:t.data.signersDescriptor.signedDescriptor,keyId:t.data.signersDescriptor.keyId,keyUsage:t.data.signersDescriptor.keyUsage}}):a(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")):a(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response"))}catch{return a(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors"))}}isSafeAccountDto(e){return typeof e=="object"&&e!==null&&"accountDescriptor"in e&&"signersDescriptor"in e&&typeof e.accountDescriptor=="object"&&typeof e.signersDescriptor=="object"&&this.isSafeDescriptorDto(e.accountDescriptor)&&this.isSafeDescriptorDto(e.signersDescriptor)}isSafeDescriptorDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.signedDescriptor=="string"&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"}};i=p([f(0,g(y.Config))],i);export{i as HttpSafeAccountDataSource};
|
|
2
|
+
//# sourceMappingURL=HttpSafeAccountDataSource.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/safe/data/HttpSafeAccountDataSource.ts"],
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { inject } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { SafeAccountDto, SafeDescriptorDto } from \"./dto/SafeAccountDto\";\nimport {\n type GetSafeAccountParams,\n type GetSafeAccountResponse,\n type SafeAccountDataSource,\n} from \"./SafeAccountDataSource\";\n\nexport class HttpSafeAccountDataSource implements SafeAccountDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async getDescriptors({\n safeContractAddress,\n chainId,\n challenge,\n }: GetSafeAccountParams): Promise<Either<Error, GetSafeAccountResponse>> {\n try {\n const response = await axios.request<SafeAccountDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/ethereum/${chainId}/safe/account/${safeContractAddress}`,\n params: {\n challenge,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n if (!response.data) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isSafeAccountDto(response.data)) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n );\n }\n\n return Right({\n account: {\n signedDescriptor: response.data.accountDescriptor.signedDescriptor,\n keyId: response.data.accountDescriptor.keyId,\n keyUsage: response.data.accountDescriptor.keyUsage,\n },\n signers: {\n signedDescriptor: response.data.signersDescriptor.signedDescriptor,\n keyId: response.data.signersDescriptor.keyId,\n keyUsage: response.data.signersDescriptor.keyUsage,\n },\n });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n );\n }\n }\n\n private isSafeAccountDto(value: unknown): value is SafeAccountDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"accountDescriptor\" in value &&\n \"signersDescriptor\" in value &&\n typeof value.accountDescriptor === \"object\" &&\n typeof value.signersDescriptor === \"object\" &&\n this.isSafeDescriptorDto(value.accountDescriptor) &&\n this.isSafeDescriptorDto(value.signersDescriptor)\n );\n }\n\n private isSafeDescriptorDto(value: unknown): value is SafeDescriptorDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,MAAc,YACvB,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBASb,IAAMC,EAAN,KAAiE,CACtE,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,eAAe,CACnB,oBAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAyE,CACvE,GAAI,CACF,MAAMC,EAAW,MAAMC,EAAM,QAAwB,CACnD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBH,CAAO,iBAAiBD,CAAmB,GACxG,OAAQ,CACN,UAAAE,CACF,EACA,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKJ,EAAS,KAQT,KAAK,iBAAiBA,EAAS,IAAI,EAQjCK,EAAM,CACX,QAAS,CACP,iBAAkBL,EAAS,KAAK,kBAAkB,iBAClD,MAAOA,EAAS,KAAK,kBAAkB,MACvC,SAAUA,EAAS,KAAK,kBAAkB,QAC5C,EACA,QAAS,CACP,iBAAkBA,EAAS,KAAK,kBAAkB,iBAClD,MAAOA,EAAS,KAAK,kBAAkB,MACvC,SAAUA,EAAS,KAAK,kBAAkB,QAC5C,CACF,CAAC,EAlBQM,EACL,IAAI,MACF,iFACF,CACF,EAZOA,EACL,IAAI,MACF,sEACF,CACF,CAuBJ,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,qFACF,CACF,CACF,CACF,CAEQ,iBAAiBC,EAAyC,CAChE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,sBAAuBA,GACvB,sBAAuBA,GACvB,OAAOA,EAAM,mBAAsB,UACnC,OAAOA,EAAM,mBAAsB,UACnC,KAAK,oBAAoBA,EAAM,iBAAiB,GAChD,KAAK,oBAAoBA,EAAM,iBAAiB,CAEpD,CAEQ,oBAAoBA,EAA4C,CACtE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,qBAAsBA,GACtB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EArFaZ,EAANa,EAAA,CAEFC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBhB",
|
|
6
|
+
"names": ["axios", "inject", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpSafeAccountDataSource", "config", "safeContractAddress", "chainId", "challenge", "response", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Right", "Left", "value", "__decorateClass", "__decorateParam", "inject", "configTypes"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import s from"axios";import{Left as n,Right as i}from"purify-ts";import{HttpSafeAccountDataSource as a}from"../../safe/data/HttpSafeAccountDataSource";import{LEDGER_CLIENT_VERSION_HEADER as l,LEDGER_ORIGIN_TOKEN_HEADER as d}from"../../shared/constant/HttpHeaders";import p from"../../../package.json";vi.mock("axios");describe("HttpSafeAccountDataSource",()=>{const o={metadataServiceDomain:{url:"https://metadata.ledger.com"},originToken:"test-origin-token"},c={accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:{signedDescriptor:"signers-signed-descriptor-data",keyId:"signers-key-id",keyUsage:"signers-key-usage"}},r="0x1234567890123456789012345678901234567890";beforeEach(()=>{vi.clearAllMocks()}),describe("getDescriptors",()=>{it("should return safe account descriptors on successful request",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c});const t=await new a(o).getDescriptors(e);expect(s.request).toHaveBeenCalledWith({method:"GET",url:"https://metadata.ledger.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890",params:{challenge:"0xabcdef"},headers:{[l]:`context-module/${p.version}`,[d]:"test-origin-token"}}),expect(t).toEqual(i({account:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id",keyUsage:"account-key-usage"},signers:{signedDescriptor:"signers-signed-descriptor-data",keyId:"signers-key-id",keyUsage:"signers-key-usage"}}))}),it("should work with different chain IDs",async()=>{const e={safeContractAddress:r,chainId:137,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(o).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://metadata.ledger.com/v2/ethereum/137/safe/account/0x1234567890123456789012345678901234567890"}))}),it("should work with different safe addresses",async()=>{const e={safeContractAddress:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(o).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://metadata.ledger.com/v2/ethereum/1/safe/account/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"}))}),it("should work with different challenges",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0x123456789"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(o).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0x123456789"}}))}),it("should return error when response data is empty",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:null});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response")))}),it("should return error when response data is undefined",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:void 0});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response")))}),it("should return error when accountDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:c.accountDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.signedDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.keyId is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyUsage:"account-key-usage"},signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.keyUsage is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id"},signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor fields are invalid",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:c.accountDescriptor,signersDescriptor:{signedDescriptor:"signers-signed-descriptor-data",keyId:123,keyUsage:"signers-key-usage"}}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor is not an object",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:"invalid-string",signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor is not an object",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:c.accountDescriptor,signersDescriptor:null}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when axios request fails",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockRejectedValue(new Error("Network error"));const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors")))}),it("should return error when axios throws an exception",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockRejectedValue(new Error("timeout"));const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors")))}),it("should handle empty string values in descriptors",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"",keyId:"",keyUsage:""},signersDescriptor:{signedDescriptor:"",keyId:"",keyUsage:""}}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(i({account:{signedDescriptor:"",keyId:"",keyUsage:""},signers:{signedDescriptor:"",keyId:"",keyUsage:""}}))}),it("should correctly parse response with long descriptor values",async()=>{const e="a".repeat(1e3),t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:e,keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:{signedDescriptor:e,keyId:"signers-key-id",keyUsage:"signers-key-usage"}}});const u=await new a(o).getDescriptors(t);expect(u).toEqual(i({account:{signedDescriptor:e,keyId:"account-key-id",keyUsage:"account-key-usage"},signers:{signedDescriptor:e,keyId:"signers-key-id",keyUsage:"signers-key-usage"}}))}),it("should use correct origin token from config",async()=>{const e={metadataServiceDomain:{url:"https://metadata.ledger.com"},originToken:"custom-origin-token"},t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(e).getDescriptors(t),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({headers:expect.objectContaining({[d]:"custom-origin-token"})}))}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"test-token"},t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(e).getDescriptors(t),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890"}))})})});
|
|
2
|
+
//# sourceMappingURL=HttpSafeAccountDataSource.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/safe/data/HttpSafeAccountDataSource.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { type HexaString } from \"@ledgerhq/device-management-kit\";\nimport axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpSafeAccountDataSource } from \"@/safe/data/HttpSafeAccountDataSource\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpSafeAccountDataSource\", () => {\n const config: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleConfig;\n\n const validSafeAccountDto = {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n };\n\n const validsafeContractAddress: HexaString =\n \"0x1234567890123456789012345678901234567890\";\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getDescriptors\", () => {\n it(\"should return safe account descriptors on successful request\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n params: {\n challenge: \"0xabcdef\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should work with different chain IDs\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 137, // Polygon\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/137/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n\n it(\"should work with different safe addresses\", async () => {\n // GIVEN\n const params = {\n safeContractAddress:\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as HexaString,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\",\n }),\n );\n });\n\n it(\"should work with different challenges\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0x123456789\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0x123456789\",\n },\n }),\n );\n });\n\n it(\"should return error when response data is empty\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when response data is undefined\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: undefined,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.signedDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyId is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyUsage is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor fields are invalid\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: 123, // wrong type\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: \"invalid-string\",\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: null,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios request fails\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios throws an exception\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"timeout\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should handle empty string values in descriptors\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signersDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signers: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n }),\n );\n });\n\n it(\"should correctly parse response with long descriptor values\", async () => {\n // GIVEN\n const longValue = \"a\".repeat(1000);\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should use correct origin token from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"custom-origin-token\",\n } as ContextModuleConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-origin-token\",\n }),\n }),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"test-token\",\n } as ContextModuleConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["axios", "Left", "Right", "HttpSafeAccountDataSource", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "config", "validSafeAccountDto", "validsafeContractAddress", "params", "result", "longValue", "customConfig"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=SafeAccountDataSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=SafeAccountDto.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ContainerModule as r}from"inversify";import{HttpSafeAccountDataSource as t}from"../../safe/data/HttpSafeAccountDataSource";import{SafeAddressLoader as a}from"../../safe/domain/SafeAddressLoader";import{safeTypes as e}from"./safeTypes";const p=()=>new r(({bind:o})=>{o(e.SafeAddressDataSource).to(t),o(e.SafeAddressLoader).to(a)});export{p as safeModuleFactory};
|
|
2
|
+
//# sourceMappingURL=safeModuleFactory.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/safe/di/safeModuleFactory.ts"],
|
|
4
|
+
"sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpSafeAccountDataSource } from \"@/safe/data/HttpSafeAccountDataSource\";\nimport { SafeAddressLoader } from \"@/safe/domain/SafeAddressLoader\";\n\nimport { safeTypes } from \"./safeTypes\";\n\nexport const safeModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(safeTypes.SafeAddressDataSource).to(HttpSafeAccountDataSource);\n bind(safeTypes.SafeAddressLoader).to(SafeAddressLoader);\n });\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,6BAAAC,MAAiC,wCAC1C,OAAS,qBAAAC,MAAyB,kCAElC,OAAS,aAAAC,MAAiB,cAEnB,MAAMC,EAAoB,IAC/B,IAAIJ,EAAgB,CAAC,CAAE,KAAAK,CAAK,IAAM,CAChCA,EAAKF,EAAU,qBAAqB,EAAE,GAAGF,CAAyB,EAClEI,EAAKF,EAAU,iBAAiB,EAAE,GAAGD,CAAiB,CACxD,CAAC",
|
|
6
|
+
"names": ["ContainerModule", "HttpSafeAccountDataSource", "SafeAddressLoader", "safeTypes", "safeModuleFactory", "bind"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/safe/di/safeModuleFactory.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, it } from \"vitest\";\n\nimport { safeModuleFactory } from \"./safeModuleFactory\";\n\ndescribe(\"safeModuleFactory\", () => {\n it(\"should be defined\", () => {\n expect(safeModuleFactory).toBeDefined();\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,YAAAA,EAAU,MAAAC,MAAU,SAE7B,OAAS,qBAAAC,MAAyB,sBAElCF,EAAS,oBAAqB,IAAM,CAClCC,EAAG,oBAAqB,IAAM,CAC5B,OAAOC,CAAiB,EAAE,YAAY,CACxC,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["describe", "it", "safeModuleFactory"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/safe/di/safeTypes.ts"],
|
|
4
|
+
"sourcesContent": ["export const safeTypes = {\n SafeAddressDataSource: Symbol.for(\"SafeAddressDataSource\"),\n SafeAddressLoader: Symbol.for(\"SafeAddressLoader\"),\n};\n"],
|
|
5
|
+
"mappings": "AAAO,MAAMA,EAAY,CACvB,sBAAuB,OAAO,IAAI,uBAAuB,EACzD,kBAAmB,OAAO,IAAI,mBAAmB,CACnD",
|
|
6
|
+
"names": ["safeTypes"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var y=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var l=(i,e,a,t)=>{for(var r=t>1?void 0:t?C(e,a):e,c=i.length-1,o;c>=0;c--)(o=i[c])&&(r=(t?o(e,a,r):o(r))||r);return t&&r&&y(e,a,r),r},f=(i,e)=>(a,t)=>e(a,t,i);import{isHexaString as S}from"@ledgerhq/device-management-kit";import{inject as p,injectable as g}from"inversify";import{pkiTypes as m}from"../../pki/di/pkiTypes";import{safeTypes as x}from"../../safe/di/safeTypes";import{ClearSignContextType as n}from"../../shared/model/ClearSignContext";const I=[n.SAFE,n.SIGNER];let s=class{constructor(e,a){this._dataSource=e;this._certificateLoader=a}canHandle(e,a){return a.every(t=>I.includes(t))&&typeof e=="object"&&e!==null&&"safeContractAddress"in e&&S(e.safeContractAddress)&&e.safeContractAddress!=="0x"&&"chainId"in e&&typeof e.chainId=="number"&&"deviceModelId"in e&&e.deviceModelId!==void 0&&"challenge"in e&&typeof e.challenge=="string"&&e.challenge.length>0}async load({safeContractAddress:e,chainId:a,deviceModelId:t,challenge:r}){return(await this._dataSource.getDescriptors({safeContractAddress:e,chainId:a,challenge:r})).caseOf({Left:o=>Promise.resolve([{type:n.ERROR,error:o}]),Right:async({account:o,signers:d})=>[{type:n.SAFE,payload:o.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:o.keyId,keyUsage:o.keyUsage,targetDevice:t})},{type:n.SIGNER,payload:d.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:d.keyId,keyUsage:d.keyUsage,targetDevice:t})}]})}};s=l([g(),f(0,p(x.SafeAddressDataSource)),f(1,p(m.PkiCertificateLoader))],s);export{s as SafeAddressLoader};
|
|
2
|
+
//# sourceMappingURL=SafeAddressLoader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/safe/domain/SafeAddressLoader.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n DeviceModelId,\n HexaString,\n isHexaString,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport type {\n GetSafeAccountResponse,\n SafeAccountDataSource,\n} from \"@/safe/data/SafeAccountDataSource\";\nimport { safeTypes } from \"@/safe/di/safeTypes\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport type SafeAddressContextInput = {\n safeContractAddress: HexaString;\n chainId: number;\n deviceModelId: DeviceModelId;\n challenge: string;\n};\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n];\n\n@injectable()\nexport class SafeAddressLoader\n implements ContextLoader<SafeAddressContextInput>\n{\n constructor(\n @inject(safeTypes.SafeAddressDataSource)\n private readonly _dataSource: SafeAccountDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n ) {}\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SafeAddressContextInput {\n return (\n expectedTypes.every((type) => SUPPORTED_TYPES.includes(type)) &&\n typeof input === \"object\" &&\n input !== null &&\n \"safeContractAddress\" in input &&\n isHexaString(input.safeContractAddress) &&\n input.safeContractAddress !== \"0x\" &&\n \"chainId\" in input &&\n typeof input.chainId === \"number\" &&\n \"deviceModelId\" in input &&\n input.deviceModelId !== undefined &&\n \"challenge\" in input &&\n typeof input.challenge === \"string\" &&\n input.challenge.length > 0\n );\n }\n\n async load({\n safeContractAddress,\n chainId,\n deviceModelId,\n challenge,\n }: SafeAddressContextInput): Promise<ClearSignContext[]> {\n const descriptors = await this._dataSource.getDescriptors({\n safeContractAddress,\n chainId,\n challenge,\n });\n\n return descriptors.caseOf({\n Left: (error): Promise<ClearSignContext[]> =>\n Promise.resolve([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]),\n Right: async ({\n account,\n signers,\n }: GetSafeAccountResponse): Promise<ClearSignContext[]> => [\n {\n type: ClearSignContextType.SAFE,\n payload: account.signedDescriptor,\n certificate: await this._certificateLoader.loadCertificate({\n keyId: account.keyId,\n keyUsage: account.keyUsage,\n targetDevice: deviceModelId,\n }),\n },\n {\n type: ClearSignContextType.SIGNER,\n payload: signers.signedDescriptor,\n certificate: await this._certificateLoader.loadCertificate({\n keyId: signers.keyId,\n keyUsage: signers.keyUsage,\n targetDevice: deviceModelId,\n }),\n },\n ],\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "iOAAA,OAGE,gBAAAA,MACK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,YAAAC,MAAgB,oBAMzB,OAAS,aAAAC,MAAiB,sBAE1B,OAEE,wBAAAC,MACK,kCASP,MAAMC,EAA0C,CAC9CC,EAAqB,KACrBA,EAAqB,MACvB,EAGO,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EACjB,CAHiB,iBAAAD,EAEA,wBAAAC,CAChB,CAEH,UACEC,EACAC,EACkC,CAClC,OACEA,EAAc,MAAOC,GAASP,EAAgB,SAASO,CAAI,CAAC,GAC5D,OAAOF,GAAU,UACjBA,IAAU,MACV,wBAAyBA,GACzBG,EAAaH,EAAM,mBAAmB,GACtCA,EAAM,sBAAwB,MAC9B,YAAaA,GACb,OAAOA,EAAM,SAAY,UACzB,kBAAmBA,GACnBA,EAAM,gBAAkB,QACxB,cAAeA,GACf,OAAOA,EAAM,WAAc,UAC3BA,EAAM,UAAU,OAAS,CAE7B,CAEA,MAAM,KAAK,CACT,oBAAAI,EACA,QAAAC,EACA,cAAAC,EACA,UAAAC,CACF,EAAyD,CAOvD,OANoB,MAAM,KAAK,YAAY,eAAe,CACxD,oBAAAH,EACA,QAAAC,EACA,UAAAE,CACF,CAAC,GAEkB,OAAO,CACxB,KAAOC,GACL,QAAQ,QAAQ,CACd,CACE,KAAMZ,EAAqB,MAC3B,MAAAY,CACF,CACF,CAAC,EACH,MAAO,MAAO,CACZ,QAAAC,EACA,QAAAC,CACF,IAA2D,CACzD,CACE,KAAMd,EAAqB,KAC3B,QAASa,EAAQ,iBACjB,YAAa,MAAM,KAAK,mBAAmB,gBAAgB,CACzD,MAAOA,EAAQ,MACf,SAAUA,EAAQ,SAClB,aAAcH,CAChB,CAAC,CACH,EACA,CACE,KAAMV,EAAqB,OAC3B,QAASc,EAAQ,iBACjB,YAAa,MAAM,KAAK,mBAAmB,gBAAgB,CACzD,MAAOA,EAAQ,MACf,SAAUA,EAAQ,SAClB,aAAcJ,CAChB,CAAC,CACH,CACF,CACF,CAAC,CACH,CACF,EA5EaT,EAANc,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAU,qBAAqB,GAEtCF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,IAN5BnB",
|
|
6
|
+
"names": ["isHexaString", "inject", "injectable", "pkiTypes", "safeTypes", "ClearSignContextType", "SUPPORTED_TYPES", "ClearSignContextType", "SafeAddressLoader", "_dataSource", "_certificateLoader", "input", "expectedTypes", "type", "isHexaString", "safeContractAddress", "chainId", "deviceModelId", "challenge", "error", "account", "signers", "__decorateClass", "injectable", "__decorateParam", "inject", "safeTypes", "pkiTypes"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{DeviceModelId as o}from"@ledgerhq/device-management-kit";import{Left as u,Right as r}from"purify-ts";import{SafeAddressLoader as f}from"../../safe/domain/SafeAddressLoader";import{ClearSignContextType as e}from"../../shared/model/ClearSignContext";describe("SafeAddressLoader",()=>{const n={getDescriptors:vi.fn()},d={loadCertificate:vi.fn()},s=new f(n,d),l={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},i={account:{signedDescriptor:"safe-descriptor-payload",keyId:"safe-key-id",keyUsage:"safe-key-usage"},signers:{signedDescriptor:"signers-descriptor-payload",keyId:"signers-key-id",keyUsage:"signers-key-usage"}};beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(d,"loadCertificate").mockResolvedValue(l)}),describe("canHandle function",()=>{const t={safeContractAddress:"0x1234567890123456789012345678901234567890",chainId:1,deviceModelId:o.FLEX,challenge:"0xabcdef"};it("should return true for valid input with SAFE and SIGNER types",()=>{expect(s.canHandle(t,[e.SAFE,e.SIGNER])).toBe(!0)}),it("should return true when expected types are subset of SAFE and SIGNER",()=>{expect(s.canHandle(t,[e.SAFE])).toBe(!0),expect(s.canHandle(t,[e.SIGNER])).toBe(!0)}),it("should return false when expected types include unsupported types",()=>{expect(s.canHandle(t,[e.TOKEN])).toBe(!1),expect(s.canHandle(t,[e.NFT])).toBe(!1)}),it("should return false when expected types include other types besides SAFE and SIGNER",()=>{expect(s.canHandle(t,[e.SAFE,e.SIGNER,e.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"],[[],"array input"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.SAFE,e.SIGNER])).toBe(!1)}),it.each([[{...t,safeContractAddress:void 0},"missing safeContractAddress"],[{...t,chainId:void 0},"missing chainId"],[{...t,deviceModelId:void 0},"missing deviceModelId"],[{...t,challenge:void 0},"missing challenge"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.SAFE,e.SIGNER])).toBe(!1)}),it.each([[{...t,safeContractAddress:"invalid-hex"},"invalid safeContractAddress hex"],[{...t,safeContractAddress:"0x"},"empty safeContractAddress (0x)"],[{...t,safeContractAddress:"not-hex"},"non-hex safeContractAddress"],[{...t,safeContractAddress:123},"number safeContractAddress"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.SAFE,e.SIGNER])).toBe(!1)}),it.each([[{...t,chainId:"1"},"string chainId"],[{...t,chainId:null},"null chainId"],[{...t,chainId:void 0},"undefined chainId"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.SAFE,e.SIGNER])).toBe(!1)}),it.each([[{...t,challenge:""},"empty challenge string"],[{...t,challenge:123},"number challenge"],[{...t,challenge:null},"null challenge"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.SAFE,e.SIGNER])).toBe(!1)}),it("should return true for different device models",()=>{expect(s.canHandle({...t,deviceModelId:o.NANO_S},[e.SAFE,e.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.NANO_SP},[e.SAFE,e.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.NANO_X},[e.SAFE,e.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.STAX},[e.SAFE,e.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.FLEX},[e.SAFE,e.SIGNER])).toBe(!0)}),it("should return true for different chain IDs",()=>{expect(s.canHandle({...t,chainId:1},[e.SAFE,e.SIGNER])).toBe(!0),expect(s.canHandle({...t,chainId:137},[e.SAFE,e.SIGNER])).toBe(!0),expect(s.canHandle({...t,chainId:10},[e.SAFE,e.SIGNER])).toBe(!0)})}),describe("load function",()=>{const t={safeContractAddress:"0x1234567890123456789012345678901234567890",chainId:1,deviceModelId:o.FLEX,challenge:"0xabcdef"};it("should return SAFE and SIGNER contexts with certificates",async()=>{vi.spyOn(n,"getDescriptors").mockResolvedValue(r(i));const a=await s.load(t);expect(n.getDescriptors).toHaveBeenCalledWith({safeContractAddress:"0x1234567890123456789012345678901234567890",chainId:1,challenge:"0xabcdef"}),expect(d.loadCertificate).toHaveBeenCalledTimes(2),expect(d.loadCertificate).toHaveBeenNthCalledWith(1,{keyId:"safe-key-id",keyUsage:"safe-key-usage",targetDevice:o.FLEX}),expect(d.loadCertificate).toHaveBeenNthCalledWith(2,{keyId:"signers-key-id",keyUsage:"signers-key-usage",targetDevice:o.FLEX}),expect(a).toEqual([{type:e.SAFE,payload:"safe-descriptor-payload",certificate:l},{type:e.SIGNER,payload:"signers-descriptor-payload",certificate:l}])}),it("should return SAFE and SIGNER contexts without certificates when loadCertificate returns undefined",async()=>{vi.spyOn(n,"getDescriptors").mockResolvedValue(r(i)),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await s.load(t);expect(a).toEqual([{type:e.SAFE,payload:"safe-descriptor-payload",certificate:void 0},{type:e.SIGNER,payload:"signers-descriptor-payload",certificate:void 0}])}),it("should return ERROR context when data source returns Left",async()=>{const a=new Error("Failed to get safe account descriptors");vi.spyOn(n,"getDescriptors").mockResolvedValue(u(a));const c=await s.load(t);expect(c).toEqual([{type:e.ERROR,error:a}]),expect(d.loadCertificate).not.toHaveBeenCalled()}),it("should work with different device models",async()=>{const a={...t,deviceModelId:o.NANO_S};vi.spyOn(n,"getDescriptors").mockResolvedValue(r(i));const c=await s.load(a);expect(d.loadCertificate).toHaveBeenCalledWith(expect.objectContaining({targetDevice:o.NANO_S})),expect(c).toHaveLength(2),expect(c[0]?.type).toBe(e.SAFE),expect(c[1]?.type).toBe(e.SIGNER)}),it("should work with different chain IDs",async()=>{const a={...t,chainId:137};vi.spyOn(n,"getDescriptors").mockResolvedValue(r(i)),await s.load(a),expect(n.getDescriptors).toHaveBeenCalledWith(expect.objectContaining({chainId:137}))}),it("should work with different safe addresses",async()=>{const a={...t,safeContractAddress:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"};vi.spyOn(n,"getDescriptors").mockResolvedValue(r(i)),await s.load(a),expect(n.getDescriptors).toHaveBeenCalledWith(expect.objectContaining({safeContractAddress:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"}))}),it("should handle different certificate data for account and signers",async()=>{const a={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},c={keyUsageNumber:2,payload:new Uint8Array([4,5,6])};vi.spyOn(n,"getDescriptors").mockResolvedValue(r(i)),vi.spyOn(d,"loadCertificate").mockResolvedValueOnce(a).mockResolvedValueOnce(c);const p=await s.load(t);expect(p).toEqual([{type:e.SAFE,payload:"safe-descriptor-payload",certificate:a},{type:e.SIGNER,payload:"signers-descriptor-payload",certificate:c}])}),it("should handle empty descriptor payloads",async()=>{const a={account:{signedDescriptor:"",keyId:"key-id",keyUsage:"key-usage"},signers:{signedDescriptor:"",keyId:"key-id",keyUsage:"key-usage"}};vi.spyOn(n,"getDescriptors").mockResolvedValue(r(a));const c=await s.load(t);expect(c).toEqual([{type:e.SAFE,payload:"",certificate:l},{type:e.SIGNER,payload:"",certificate:l}])}),it("should handle long descriptor payloads",async()=>{const a="a".repeat(1e3),c={account:{signedDescriptor:a,keyId:"key-id",keyUsage:"key-usage"},signers:{signedDescriptor:a,keyId:"key-id",keyUsage:"key-usage"}};vi.spyOn(n,"getDescriptors").mockResolvedValue(r(c));const p=await s.load(t);expect(p[0].payload).toBe(a),expect(p[1].payload).toBe(a)}),it("should handle data source errors gracefully",async()=>{const a=new Error("Network error");vi.spyOn(n,"getDescriptors").mockResolvedValue(u(a));const c=await s.load(t);expect(c).toEqual([{type:e.ERROR,error:new Error("Network error")}])})})});
|
|
2
|
+
//# sourceMappingURL=SafeAddressLoader.test.js.map
|