@ledgerhq/context-module 1.17.0 → 1.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/lib/cjs/package.json +2 -2
  2. package/lib/cjs/src/network/di/networkModuleFactory.js +1 -1
  3. package/lib/cjs/src/network/di/networkModuleFactory.js.map +3 -3
  4. package/lib/cjs/src/network/networkClientFactory.js +2 -0
  5. package/lib/cjs/src/network/networkClientFactory.js.map +7 -0
  6. package/lib/cjs/src/network/networkClientFactory.test.js +2 -0
  7. package/lib/cjs/src/network/networkClientFactory.test.js.map +7 -0
  8. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  9. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  10. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  11. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  12. package/lib/esm/package.json +2 -2
  13. package/lib/esm/src/network/di/networkModuleFactory.js +1 -1
  14. package/lib/esm/src/network/di/networkModuleFactory.js.map +3 -3
  15. package/lib/esm/src/network/networkClientFactory.js +2 -0
  16. package/lib/esm/src/network/networkClientFactory.js.map +7 -0
  17. package/lib/esm/src/network/networkClientFactory.test.js +2 -0
  18. package/lib/esm/src/network/networkClientFactory.test.js.map +7 -0
  19. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  20. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  21. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  22. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  23. package/lib/types/src/network/di/networkModuleFactory.d.ts.map +1 -1
  24. package/lib/types/src/network/networkClientFactory.d.ts +4 -0
  25. package/lib/types/src/network/networkClientFactory.d.ts.map +1 -0
  26. package/lib/types/src/network/networkClientFactory.test.d.ts +2 -0
  27. package/lib/types/src/network/networkClientFactory.test.d.ts.map +1 -0
  28. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts +1 -1
  29. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts.map +1 -1
  30. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +1 -1
  31. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  32. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  33. package/package.json +3 -3
@@ -34,7 +34,7 @@
34
34
  "license": "Apache-2.0",
35
35
  "name": "@ledgerhq/context-module",
36
36
  "peerDependencies": {
37
- "@ledgerhq/device-management-kit": "workspace:^"
37
+ "@ledgerhq/device-management-kit": "^1.3.0"
38
38
  },
39
39
  "private": false,
40
40
  "repository": {
@@ -57,5 +57,5 @@
57
57
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
58
58
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
59
59
  },
60
- "version": "1.17.0"
60
+ "version": "1.17.1"
61
61
  }
@@ -1,2 +1,2 @@
1
- "use strict";var f=Object.create;var n=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;var D=(o,e)=>{for(var t in e)n(o,t,{get:e[t],enumerable:!0})},E=(o,e,t,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of N(e))!u.call(o,r)&&r!==t&&n(o,r,{get:()=>e[r],enumerable:!(m=w(e,r))||m.enumerable});return o};var R=(o,e,t)=>(t=o!=null?f(d(o)):{},E(e||!o||!o.__esModule?n(t,"default",{value:o,enumerable:!0}):t,o)),_=o=>E(n({},"__esModule",{value:!0}),o);var s={};D(s,{networkModuleFactory:()=>a});module.exports=_(s);var C=require("@ledgerhq/device-management-kit"),k=require("inversify"),l=require("../../network/di/networkTypes"),i=require("../../shared/constant/HttpHeaders"),p=R(require("../../../package.json"));const a=o=>new k.ContainerModule(({bind:e})=>{e(l.networkTypes.NetworkClient).toConstantValue(new C.DmkNetworkClient({headers:{[i.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${p.default.version}`,...o.originToken&&{[i.LEDGER_ORIGIN_TOKEN_HEADER]:o.originToken}}}))});0&&(module.exports={networkModuleFactory});
1
+ "use strict";var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var w=(t,o)=>{for(var r in o)n(t,r,{get:o[r],enumerable:!0})},a=(t,o,r,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of k(o))!f.call(t,e)&&e!==r&&n(t,e,{get:()=>o[e],enumerable:!(i=p(o,e))||i.enumerable});return t};var c=t=>a(n({},"__esModule",{value:!0}),t);var y={};w(y,{networkModuleFactory:()=>u});module.exports=c(y);var m=require("inversify"),C=require("../../network/di/networkTypes"),l=require("../../network/networkClientFactory");const u=t=>new m.ContainerModule(({bind:o})=>{o(C.networkTypes.NetworkClient).toConstantValue((0,l.networkClientFactory)(t))});0&&(module.exports={networkModuleFactory});
2
2
  //# sourceMappingURL=networkModuleFactory.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/network/di/networkModuleFactory.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { ContainerModule } from \"inversify\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nexport const networkModuleFactory = (config: ContextModuleServiceConfig) =>\n new ContainerModule(({ bind }) => {\n bind<DmkNetworkClient>(networkTypes.NetworkClient).toConstantValue(\n new DmkNetworkClient({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n ...(config.originToken && {\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n }),\n },\n }),\n );\n });\n"],
5
- "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiC,2CACjCC,EAAgC,qBAGhCC,EAA6B,qCAC7BC,EAGO,yCACPC,EAAoB,iCAEb,MAAMN,EAAwBO,GACnC,IAAI,kBAAgB,CAAC,CAAE,KAAAC,CAAK,IAAM,CAChCA,EAAuB,eAAa,aAAa,EAAE,gBACjD,IAAI,mBAAiB,CACnB,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAC,QAAQ,OAAO,GACjE,GAAIF,EAAO,aAAe,CACxB,CAAC,4BAA0B,EAAGA,EAAO,WACvC,CACF,CACF,CAAC,CACH,CACF,CAAC",
6
- "names": ["networkModuleFactory_exports", "__export", "networkModuleFactory", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_networkTypes", "import_HttpHeaders", "import_package", "config", "bind", "PACKAGE"]
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { ContainerModule } from \"inversify\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\n\nexport const networkModuleFactory = (config: ContextModuleServiceConfig) =>\n new ContainerModule(({ bind }) => {\n bind<DmkNetworkClient>(networkTypes.NetworkClient).toConstantValue(\n networkClientFactory(config),\n );\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAgC,qBAGhCC,EAA6B,qCAC7BC,EAAqC,0CAE9B,MAAMJ,EAAwBK,GACnC,IAAI,kBAAgB,CAAC,CAAE,KAAAC,CAAK,IAAM,CAChCA,EAAuB,eAAa,aAAa,EAAE,mBACjD,wBAAqBD,CAAM,CAC7B,CACF,CAAC",
6
+ "names": ["networkModuleFactory_exports", "__export", "networkModuleFactory", "__toCommonJS", "import_inversify", "import_networkTypes", "import_networkClientFactory", "config", "bind"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var R=Object.create;var i=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var D=(o,e)=>{for(var r in e)i(o,r,{get:e[r],enumerable:!0})},m=(o,e,r,E)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of f(e))!l.call(o,t)&&t!==r&&i(o,t,{get:()=>e[t],enumerable:!(E=_(e,t))||E.enumerable});return o};var N=(o,e,r)=>(r=o!=null?R(k(o)):{},m(e||!o||!o.__esModule?i(r,"default",{value:o,enumerable:!0}):r,o)),c=o=>m(i({},"__esModule",{value:!0}),o);var x={};D(x,{networkClientFactory:()=>d});module.exports=c(x);var C=require("@ledgerhq/device-management-kit"),n=require("../shared/constant/HttpHeaders"),p=N(require("../../package.json"));const d=o=>new C.DmkNetworkClient({headers:{[n.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${p.default.version}`,...o.originToken&&{[n.LEDGER_ORIGIN_TOKEN_HEADER]:o.originToken}}});0&&(module.exports={networkClientFactory});
2
+ //# sourceMappingURL=networkClientFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/network/networkClientFactory.ts"],
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\n\nimport { type ContextModuleServiceConfig } 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\nexport const networkClientFactory = (config: ContextModuleServiceConfig) =>\n new DmkNetworkClient({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n ...(config.originToken && {\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n }),\n },\n });\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAiC,2CAGjCC,EAGO,yCACPC,EAAoB,iCAEb,MAAMJ,EAAwBK,GACnC,IAAI,mBAAiB,CACnB,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAC,QAAQ,OAAO,GACjE,GAAID,EAAO,aAAe,CACxB,CAAC,4BAA0B,EAAGA,EAAO,WACvC,CACF,CACF,CAAC",
6
+ "names": ["networkClientFactory_exports", "__export", "networkClientFactory", "__toCommonJS", "import_device_management_kit", "import_HttpHeaders", "import_package", "config", "PACKAGE"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var l=Object.create;var r=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var g=(e,o,t,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of f(o))!h.call(e,i)&&i!==t&&r(e,i,{get:()=>o[i],enumerable:!(n=p(o,i))||n.enumerable});return e};var u=(e,o,t)=>(t=e!=null?l(d(e)):{},g(o||!e||!e.__esModule?r(t,"default",{value:e,enumerable:!0}):t,e));var c=require("../network/networkClientFactory"),s=require("../shared/constant/HttpHeaders"),a=u(require("../../package.json"));describe("networkClientFactory",()=>{let e;beforeEach(()=>{e=vi.fn().mockResolvedValue(new Response(null,{status:204})),vi.stubGlobal("fetch",e)}),afterEach(()=>{vi.unstubAllGlobals()});const o=()=>{expect(e).toHaveBeenCalledTimes(1);const t=e.mock.calls[0]?.[1];return expect(t).toBeDefined(),t?.headers};it("should set the context-module client version header",async()=>{await(0,c.networkClientFactory)({}).get("https://example.test",{responseType:"void"}),expect(o()).toMatchObject({[s.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${a.default.version}`})}),it("should set the origin token header when configured",async()=>{const t={originToken:"origin-token"};await(0,c.networkClientFactory)(t).get("https://example.test",{responseType:"void"}),expect(o()).toMatchObject({[s.LEDGER_ORIGIN_TOKEN_HEADER]:t.originToken})}),it("should not set the origin token header when it is missing",async()=>{await(0,c.networkClientFactory)({}).get("https://example.test",{responseType:"void"}),expect(o()).not.toHaveProperty(s.LEDGER_ORIGIN_TOKEN_HEADER)})});
2
+ //# sourceMappingURL=networkClientFactory.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/network/networkClientFactory.test.ts"],
4
+ "sourcesContent": ["import { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\ndescribe(\"networkClientFactory\", () => {\n let fetchMock: ReturnType<typeof vi.fn<typeof fetch>>;\n\n beforeEach(() => {\n fetchMock = vi\n .fn<typeof fetch>()\n .mockResolvedValue(new Response(null, { status: 204 }));\n vi.stubGlobal(\"fetch\", fetchMock);\n });\n\n afterEach(() => {\n vi.unstubAllGlobals();\n });\n\n const getRequestHeaders = () => {\n expect(fetchMock).toHaveBeenCalledTimes(1);\n\n const requestInit = fetchMock.mock.calls[0]?.[1];\n expect(requestInit).toBeDefined();\n\n return requestInit?.headers as Record<string, string>;\n };\n\n it(\"should set the context-module client version header\", async () => {\n // GIVEN\n const config = {} as ContextModuleServiceConfig;\n const client = networkClientFactory(config);\n\n // WHEN\n await client.get(\"https://example.test\", { responseType: \"void\" });\n\n // THEN\n expect(getRequestHeaders()).toMatchObject({\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n });\n });\n\n it(\"should set the origin token header when configured\", async () => {\n // GIVEN\n const config = {\n originToken: \"origin-token\",\n } as ContextModuleServiceConfig;\n const client = networkClientFactory(config);\n\n // WHEN\n await client.get(\"https://example.test\", { responseType: \"void\" });\n\n // THEN\n expect(getRequestHeaders()).toMatchObject({\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n });\n });\n\n it(\"should not set the origin token header when it is missing\", async () => {\n // GIVEN\n const config = {} as ContextModuleServiceConfig;\n const client = networkClientFactory(config);\n\n // WHEN\n await client.get(\"https://example.test\", { responseType: \"void\" });\n\n // THEN\n expect(getRequestHeaders()).not.toHaveProperty(LEDGER_ORIGIN_TOKEN_HEADER);\n });\n});\n"],
5
+ "mappings": "wdACA,IAAAA,EAAqC,0CACrCC,EAGO,yCACPC,EAAoB,iCAEpB,SAAS,uBAAwB,IAAM,CACrC,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAY,GACT,GAAiB,EACjB,kBAAkB,IAAI,SAAS,KAAM,CAAE,OAAQ,GAAI,CAAC,CAAC,EACxD,GAAG,WAAW,QAASA,CAAS,CAClC,CAAC,EAED,UAAU,IAAM,CACd,GAAG,iBAAiB,CACtB,CAAC,EAED,MAAMC,EAAoB,IAAM,CAC9B,OAAOD,CAAS,EAAE,sBAAsB,CAAC,EAEzC,MAAME,EAAcF,EAAU,KAAK,MAAM,CAAC,IAAI,CAAC,EAC/C,cAAOE,CAAW,EAAE,YAAY,EAEzBA,GAAa,OACtB,EAEA,GAAG,sDAAuD,SAAY,CAMpE,QAHe,wBADA,CAAC,CAC0B,EAG7B,IAAI,uBAAwB,CAAE,aAAc,MAAO,CAAC,EAGjE,OAAOD,EAAkB,CAAC,EAAE,cAAc,CACxC,CAAC,8BAA4B,EAAG,kBAAkB,EAAAE,QAAQ,OAAO,EACnE,CAAC,CACH,CAAC,EAED,GAAG,qDAAsD,SAAY,CAEnE,MAAMC,EAAS,CACb,YAAa,cACf,EAIA,QAHe,wBAAqBA,CAAM,EAG7B,IAAI,uBAAwB,CAAE,aAAc,MAAO,CAAC,EAGjE,OAAOH,EAAkB,CAAC,EAAE,cAAc,CACxC,CAAC,4BAA0B,EAAGG,EAAO,WACvC,CAAC,CACH,CAAC,EAED,GAAG,4DAA6D,SAAY,CAM1E,QAHe,wBADA,CAAC,CAC0B,EAG7B,IAAI,uBAAwB,CAAE,aAAc,MAAO,CAAC,EAGjE,OAAOH,EAAkB,CAAC,EAAE,IAAI,eAAe,4BAA0B,CAC3E,CAAC,CACH,CAAC",
6
+ "names": ["import_networkClientFactory", "import_HttpHeaders", "import_package", "fetchMock", "getRequestHeaders", "requestInit", "PACKAGE", "config"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var m=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var C=(r,e)=>{for(var o in e)m(r,o,{get:e[o],enumerable:!0})},v=(r,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of u(e))!h.call(r,t)&&t!==o&&m(r,t,{get:()=>e[t],enumerable:!(i=f(e,t))||i.enumerable});return r};var k=r=>v(m({},"__esModule",{value:!0}),r),g=(r,e,o,i)=>{for(var t=i>1?void 0:i?f(e,o):e,l=r.length-1,a;l>=0;l--)(a=r[l])&&(t=(i?a(e,o,t):a(t))||t);return i&&t&&m(e,o,t),t},c=(r,e)=>(o,i)=>e(o,i,r);var w={};C(w,{HttpBlindSigningReporterDatasource:()=>n});module.exports=k(w);var p=require("inversify"),s=require("purify-ts"),d=require("../../config/di/configTypes"),y=require("../../network/di/networkTypes");let n=class{constructor(e,o){this.config=e;this.http=o}async report(e){try{await this.http.post(`${this.config.reporter.url}/blind-signing-events`,{...e,source:this.config.appSource},{responseType:"void"})}catch{return(0,s.Left)(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return(0,s.Right)(void 0)}};n=g([(0,p.injectable)(),c(0,(0,p.inject)(d.configTypes.Config)),c(1,(0,p.inject)(y.networkTypes.NetworkClient))],n);0&&(module.exports={HttpBlindSigningReporterDatasource});
1
+ "use strict";var m=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var k=(e,r)=>{for(var t in r)m(e,t,{get:r[t],enumerable:!0})},v=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of C(r))!u.call(e,o)&&o!==t&&m(e,o,{get:()=>r[o],enumerable:!(i=f(r,o))||i.enumerable});return e};var w=e=>v(m({},"__esModule",{value:!0}),e),g=(e,r,t,i)=>{for(var o=i>1?void 0:i?f(r,t):r,l=e.length-1,a;l>=0;l--)(a=e[l])&&(o=(i?a(r,t,o):a(o))||o);return i&&o&&m(r,t,o),o},c=(e,r)=>(t,i)=>r(t,i,e);var S={};k(S,{HttpBlindSigningReporterDatasource:()=>n});module.exports=w(S);var p=require("inversify"),s=require("purify-ts"),d=require("../../config/di/configTypes"),y=require("../../network/di/networkTypes"),h=require("../../network/networkClientFactory");let n=class{constructor(r,t){this.config=r;this.http=t??(0,h.networkClientFactory)(r)}http;async report(r){try{await this.http.post(`${this.config.reporter.url}/blind-signing-events`,{...r,source:this.config.appSource},{responseType:"void"})}catch{return(0,s.Left)(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return(0,s.Right)(void 0)}};n=g([(0,p.injectable)(),c(0,(0,p.inject)(d.configTypes.Config)),c(1,(0,p.inject)(y.networkTypes.NetworkClient))],n);0&&(module.exports={HttpBlindSigningReporterDatasource});
2
2
  //# sourceMappingURL=HttpBlindSigningReporterDatasource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/reporter/data/HttpBlindSigningReporterDatasource.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\n\nimport {\n type BlindSigningReporterDatasource,\n type BlindSigningReportParams,\n} from \"./BlindSigningReporterDatasource\";\n\n@injectable()\nexport class HttpBlindSigningReporterDatasource\n implements BlindSigningReporterDatasource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n async report(params: BlindSigningReportParams): Promise<Either<Error, void>> {\n try {\n await this.http.post(\n `${this.config.reporter.url}/blind-signing-events`,\n { ...params, source: this.config.appSource },\n { responseType: \"void\" },\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n );\n }\n\n return Right(undefined);\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBACnCC,EAAyC,qBAEzCC,EAA4B,mCAE5BC,EAA6B,qCAQtB,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAM,OAAOC,EAAgE,CAC3E,GAAI,CACF,MAAM,KAAK,KAAK,KACd,GAAG,KAAK,OAAO,SAAS,GAAG,wBAC3B,CAAE,GAAGA,EAAQ,OAAQ,KAAK,OAAO,SAAU,EAC3C,CAAE,aAAc,MAAO,CACzB,CACF,MAAiB,CACf,SAAO,QACL,IAAI,MACF,0FACF,CACF,CACF,CAEA,SAAO,SAAM,MAAS,CACxB,CACF,EA3BaH,EAANI,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,eAAa,aAAa,IANzBL",
6
- "names": ["HttpBlindSigningReporterDatasource_exports", "__export", "HttpBlindSigningReporterDatasource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "HttpBlindSigningReporterDatasource", "config", "http", "params", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\n\nimport {\n type BlindSigningReporterDatasource,\n type BlindSigningReportParams,\n} from \"./BlindSigningReporterDatasource\";\n\n@injectable()\nexport class HttpBlindSigningReporterDatasource\n implements BlindSigningReporterDatasource\n{\n private readonly http: DmkNetworkClient;\n\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n networkClient?: DmkNetworkClient,\n ) {\n this.http = networkClient ?? networkClientFactory(config);\n }\n\n async report(params: BlindSigningReportParams): Promise<Either<Error, void>> {\n try {\n await this.http.post(\n `${this.config.reporter.url}/blind-signing-events`,\n { ...params, source: this.config.appSource },\n { responseType: \"void\" },\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n );\n }\n\n return Right(undefined);\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBACnCC,EAAyC,qBAEzCC,EAA4B,mCAE5BC,EAA6B,qCAC7BC,EAAqC,0CAQ9B,IAAMC,EAAN,KAEP,CAGE,YAEmBC,EAEjBC,EACA,CAHiB,YAAAD,EAIjB,KAAK,KAAOC,MAAiB,wBAAqBD,CAAM,CAC1D,CATiB,KAWjB,MAAM,OAAOE,EAAgE,CAC3E,GAAI,CACF,MAAM,KAAK,KAAK,KACd,GAAG,KAAK,OAAO,SAAS,GAAG,wBAC3B,CAAE,GAAGA,EAAQ,OAAQ,KAAK,OAAO,SAAU,EAC3C,CAAE,aAAc,MAAO,CACzB,CACF,MAAiB,CACf,SAAO,QACL,IAAI,MACF,0FACF,CACF,CACF,CAEA,SAAO,SAAM,MAAS,CACxB,CACF,EA/BaH,EAANI,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,eAAa,aAAa,IARzBL",
6
+ "names": ["HttpBlindSigningReporterDatasource_exports", "__export", "HttpBlindSigningReporterDatasource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "import_networkClientFactory", "HttpBlindSigningReporterDatasource", "config", "networkClient", "params", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var T=(s,e)=>{for(var r in e)c(s,r,{get:e[r],enumerable:!0})},k=(s,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of N(e))!h.call(s,t)&&t!==r&&c(s,t,{get:()=>e[t],enumerable:!(a=f(e,t))||a.enumerable});return s};var $=s=>k(c({},"__esModule",{value:!0}),s),g=(s,e,r,a)=>{for(var t=a>1?void 0:a?f(e,r):e,i=s.length-1,o;i>=0;i--)(o=s[i])&&(t=(a?o(e,r,t):o(t))||t);return a&&t&&c(e,r,t),t},p=(s,e)=>(r,a)=>e(r,a,s);var C={};T(C,{HttpTrustedNameDataSource:()=>d});module.exports=$(C);var m=require("inversify"),n=require("purify-ts"),y=require("../../config/di/configTypes"),D=require("../../network/di/networkTypes");let d=class{constructor(e,r){this.config=e;this.http=r}async getDomainNamePayload({chainId:e,domain:r,challenge:a}){let t;try{t=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/forward/${r}`,{params:{types:"eoa",sources:"ens",challenge:a}})}catch{return(0,n.Left)(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name"))}return t?this.isTrustedNameDto(t)?(0,n.Right)({data:t.signedDescriptor.data,keyId:t.keyId,keyUsage:t.keyUsage}):(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${r} on chain ${e}`)):(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for domain ${r} on chain ${e}`))}async getTrustedNamePayload({chainId:e,address:r,challenge:a,sources:t,types:i}){let o;try{t=t.filter(u=>u==="ens"||u==="crypto_asset_list"),o=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/reverse/${r}`,{params:{types:i.join(","),sources:t.join(","),challenge:a}})}catch{return(0,n.Left)(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name"))}if(!o)return(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for address ${r} on chain ${e}`));if(!this.isTrustedNameDto(o))return(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${r} on chain ${e}`));if(typeof o.signedDescriptor.signatures[this.config.cal.mode]!="string")return(0,n.Right)({data:o.signedDescriptor.data,keyId:o.keyId,keyUsage:o.keyUsage});const l=o.signedDescriptor.signatures[this.config.cal.mode];return(0,n.Right)({data:this.formatTrustedName(o.signedDescriptor.data,l),keyId:o.keyId,keyUsage:o.keyUsage})}formatTrustedName(e,r){r.length%2!==0&&(r="0"+r);const a="15",t=(r.length/2).toString(16);return`${e}${a}${t}${r}`}isTrustedNameDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"&&typeof e.signedDescriptor=="object"&&e.signedDescriptor!==null&&"data"in e.signedDescriptor&&"signatures"in e.signedDescriptor&&typeof e.signedDescriptor.data=="string"&&typeof e.signedDescriptor.signatures=="object"}};d=g([(0,m.injectable)(),p(0,(0,m.inject)(y.configTypes.Config)),p(1,(0,m.inject)(D.networkTypes.NetworkClient))],d);0&&(module.exports={HttpTrustedNameDataSource});
1
+ "use strict";var c=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var T=(s,e)=>{for(var t in e)c(s,t,{get:e[t],enumerable:!0})},C=(s,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of h(e))!k.call(s,r)&&r!==t&&c(s,r,{get:()=>e[r],enumerable:!(a=f(e,r))||a.enumerable});return s};var $=s=>C(c({},"__esModule",{value:!0}),s),g=(s,e,t,a)=>{for(var r=a>1?void 0:a?f(e,t):e,i=s.length-1,o;i>=0;i--)(o=s[i])&&(r=(a?o(e,t,r):o(r))||r);return a&&r&&c(e,t,r),r},u=(s,e)=>(t,a)=>e(t,a,s);var w={};T(w,{HttpTrustedNameDataSource:()=>d});module.exports=$(w);var m=require("inversify"),n=require("purify-ts"),y=require("../../config/di/configTypes"),l=require("../../network/di/networkTypes"),D=require("../../network/networkClientFactory");let d=class{constructor(e,t){this.config=e;this.http=t??(0,D.networkClientFactory)(e)}http;async getDomainNamePayload({chainId:e,domain:t,challenge:a}){let r;try{r=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/forward/${t}`,{params:{types:"eoa",sources:"ens",challenge:a}})}catch{return(0,n.Left)(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name"))}return r?this.isTrustedNameDto(r)?(0,n.Right)({data:r.signedDescriptor.data,keyId:r.keyId,keyUsage:r.keyUsage}):(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${t} on chain ${e}`)):(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for domain ${t} on chain ${e}`))}async getTrustedNamePayload({chainId:e,address:t,challenge:a,sources:r,types:i}){let o;try{r=r.filter(p=>p==="ens"||p==="crypto_asset_list"),o=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/reverse/${t}`,{params:{types:i.join(","),sources:r.join(","),challenge:a}})}catch{return(0,n.Left)(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name"))}if(!o)return(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for address ${t} on chain ${e}`));if(!this.isTrustedNameDto(o))return(0,n.Left)(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${t} on chain ${e}`));if(typeof o.signedDescriptor.signatures[this.config.cal.mode]!="string")return(0,n.Right)({data:o.signedDescriptor.data,keyId:o.keyId,keyUsage:o.keyUsage});const N=o.signedDescriptor.signatures[this.config.cal.mode];return(0,n.Right)({data:this.formatTrustedName(o.signedDescriptor.data,N),keyId:o.keyId,keyUsage:o.keyUsage})}formatTrustedName(e,t){t.length%2!==0&&(t="0"+t);const a="15",r=(t.length/2).toString(16);return`${e}${a}${r}${t}`}isTrustedNameDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"&&typeof e.signedDescriptor=="object"&&e.signedDescriptor!==null&&"data"in e.signedDescriptor&&"signatures"in e.signedDescriptor&&typeof e.signedDescriptor.data=="string"&&typeof e.signedDescriptor.signatures=="object"}};d=g([(0,m.injectable)(),u(0,(0,m.inject)(y.configTypes.Config)),u(1,(0,m.inject)(l.networkTypes.NetworkClient))],d);0&&(module.exports={HttpTrustedNameDataSource});
2
2
  //# sourceMappingURL=HttpTrustedNameDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/trusted-name/data/HttpTrustedNameDataSource.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport {\n GetDomainNameInfosParams,\n GetTrustedNameInfosParams,\n TrustedNameDataSource,\n TrustedNamePayload,\n} from \"@/trusted-name/data/TrustedNameDataSource\";\n\nimport { TrustedNameDto } from \"./TrustedNameDto\";\n\n@injectable()\nexport class HttpTrustedNameDataSource implements TrustedNameDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getDomainNamePayload({\n chainId,\n domain,\n challenge,\n }: GetDomainNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n const type = \"eoa\"; // Externally owned account\n const source = \"ens\"; // Ethereum name service\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/forward/${domain}`,\n {\n params: { types: type, sources: source, challenge },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n public async getTrustedNamePayload({\n chainId,\n address,\n challenge,\n sources,\n types,\n }: GetTrustedNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n // TODO remove that filtering once https://ledgerhq.atlassian.net/browse/BACK-8075 is done\n // For now we have to filter or trusted names won't work with the generic parser, because transaction\n // fields descriptors can contain unsupported sources.\n sources = sources.filter(\n (source) => source === \"ens\" || source === \"crypto_asset_list\",\n );\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/reverse/${address}`,\n {\n params: {\n types: types.join(\",\"),\n sources: sources.join(\",\"),\n challenge,\n },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (\n typeof dto.signedDescriptor.signatures[this.config.cal.mode] !== \"string\"\n ) {\n // If we have no separated signature but a valid descriptor, it may mean the descriptor was\n // signed on-the-fly for dynamic sources such as ens\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n const signature = dto.signedDescriptor.signatures[this.config.cal.mode]!;\n return Right({\n data: this.formatTrustedName(dto.signedDescriptor.data, signature),\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n private formatTrustedName(payload: string, signature: string): string {\n // Ensure correct padding\n if (signature.length % 2 !== 0) {\n signature = \"0\" + signature;\n }\n // TLV encoding as according to trusted name documentation\n const signatureTag = \"15\";\n const signatureLength = (signature.length / 2).toString(16);\n return `${payload}${signatureTag}${signatureLength}${signature}`;\n }\n /**\n * Type guard to validate ProxyDelegateCallDto\n */\n private isTrustedNameDto(value: unknown): value is TrustedNameDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\" &&\n typeof value.signedDescriptor === \"object\" &&\n value.signedDescriptor !== null &&\n \"data\" in value.signedDescriptor &&\n \"signatures\" in value.signedDescriptor &&\n typeof value.signedDescriptor.data === \"string\" &&\n typeof value.signedDescriptor.signatures === \"object\"\n );\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["HttpTrustedNameDataSource_exports", "__export", "HttpTrustedNameDataSource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "HttpTrustedNameDataSource", "config", "http", "chainId", "domain", "challenge", "dto", "address", "sources", "types", "source", "signature", "payload", "signatureTag", "signatureLength", "value", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\nimport {\n GetDomainNameInfosParams,\n GetTrustedNameInfosParams,\n TrustedNameDataSource,\n TrustedNamePayload,\n} from \"@/trusted-name/data/TrustedNameDataSource\";\n\nimport { TrustedNameDto } from \"./TrustedNameDto\";\n\n@injectable()\nexport class HttpTrustedNameDataSource implements TrustedNameDataSource {\n private readonly http: DmkNetworkClient;\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n networkClient?: DmkNetworkClient,\n ) {\n this.http = networkClient ?? networkClientFactory(config);\n }\n\n public async getDomainNamePayload({\n chainId,\n domain,\n challenge,\n }: GetDomainNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n const type = \"eoa\"; // Externally owned account\n const source = \"ens\"; // Ethereum name service\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/forward/${domain}`,\n {\n params: { types: type, sources: source, challenge },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n public async getTrustedNamePayload({\n chainId,\n address,\n challenge,\n sources,\n types,\n }: GetTrustedNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n // TODO remove that filtering once https://ledgerhq.atlassian.net/browse/BACK-8075 is done\n // For now we have to filter or trusted names won't work with the generic parser, because transaction\n // fields descriptors can contain unsupported sources.\n sources = sources.filter(\n (source) => source === \"ens\" || source === \"crypto_asset_list\",\n );\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/reverse/${address}`,\n {\n params: {\n types: types.join(\",\"),\n sources: sources.join(\",\"),\n challenge,\n },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (\n typeof dto.signedDescriptor.signatures[this.config.cal.mode] !== \"string\"\n ) {\n // If we have no separated signature but a valid descriptor, it may mean the descriptor was\n // signed on-the-fly for dynamic sources such as ens\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n const signature = dto.signedDescriptor.signatures[this.config.cal.mode]!;\n return Right({\n data: this.formatTrustedName(dto.signedDescriptor.data, signature),\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n private formatTrustedName(payload: string, signature: string): string {\n // Ensure correct padding\n if (signature.length % 2 !== 0) {\n signature = \"0\" + signature;\n }\n // TLV encoding as according to trusted name documentation\n const signatureTag = \"15\";\n const signatureLength = (signature.length / 2).toString(16);\n return `${payload}${signatureTag}${signatureLength}${signature}`;\n }\n /**\n * Type guard to validate ProxyDelegateCallDto\n */\n private isTrustedNameDto(value: unknown): value is TrustedNameDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\" &&\n typeof value.signedDescriptor === \"object\" &&\n value.signedDescriptor !== null &&\n \"data\" in value.signedDescriptor &&\n \"signatures\" in value.signedDescriptor &&\n typeof value.signedDescriptor.data === \"string\" &&\n typeof value.signedDescriptor.signatures === \"object\"\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["HttpTrustedNameDataSource_exports", "__export", "HttpTrustedNameDataSource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "import_networkClientFactory", "HttpTrustedNameDataSource", "config", "networkClient", "chainId", "domain", "challenge", "dto", "address", "sources", "types", "source", "signature", "payload", "signatureTag", "signatureLength", "value", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -34,7 +34,7 @@
34
34
  "license": "Apache-2.0",
35
35
  "name": "@ledgerhq/context-module",
36
36
  "peerDependencies": {
37
- "@ledgerhq/device-management-kit": "workspace:^"
37
+ "@ledgerhq/device-management-kit": "^1.3.0"
38
38
  },
39
39
  "private": false,
40
40
  "repository": {
@@ -57,5 +57,5 @@
57
57
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
58
58
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
59
59
  },
60
- "version": "1.17.0"
60
+ "version": "1.17.1"
61
61
  }
@@ -1,2 +1,2 @@
1
- import{DmkNetworkClient as t}from"@ledgerhq/device-management-kit";import{ContainerModule as r}from"inversify";import{networkTypes as n}from"../../network/di/networkTypes";import{LEDGER_CLIENT_VERSION_HEADER as i,LEDGER_ORIGIN_TOKEN_HEADER as m}from"../../shared/constant/HttpHeaders";import E from"../../../package.json";const w=o=>new r(({bind:e})=>{e(n.NetworkClient).toConstantValue(new t({headers:{[i]:`context-module/${E.version}`,...o.originToken&&{[m]:o.originToken}}}))});export{w as networkModuleFactory};
1
+ import{ContainerModule as e}from"inversify";import{networkTypes as r}from"../../network/di/networkTypes";import{networkClientFactory as n}from"../../network/networkClientFactory";const l=o=>new e(({bind:t})=>{t(r.NetworkClient).toConstantValue(n(o))});export{l as networkModuleFactory};
2
2
  //# sourceMappingURL=networkModuleFactory.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/network/di/networkModuleFactory.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { ContainerModule } from \"inversify\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nexport const networkModuleFactory = (config: ContextModuleServiceConfig) =>\n new ContainerModule(({ bind }) => {\n bind<DmkNetworkClient>(networkTypes.NetworkClient).toConstantValue(\n new DmkNetworkClient({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n ...(config.originToken && {\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n }),\n },\n }),\n );\n });\n"],
5
- "mappings": "AAAA,OAAS,oBAAAA,MAAwB,kCACjC,OAAS,mBAAAC,MAAuB,YAGhC,OAAS,gBAAAC,MAAoB,4BAC7B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAEb,MAAMC,EAAwBC,GACnC,IAAIN,EAAgB,CAAC,CAAE,KAAAO,CAAK,IAAM,CAChCA,EAAuBN,EAAa,aAAa,EAAE,gBACjD,IAAIF,EAAiB,CACnB,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBE,EAAQ,OAAO,GACjE,GAAIE,EAAO,aAAe,CACxB,CAACH,CAA0B,EAAGG,EAAO,WACvC,CACF,CACF,CAAC,CACH,CACF,CAAC",
6
- "names": ["DmkNetworkClient", "ContainerModule", "networkTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "networkModuleFactory", "config", "bind"]
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { ContainerModule } from \"inversify\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\n\nexport const networkModuleFactory = (config: ContextModuleServiceConfig) =>\n new ContainerModule(({ bind }) => {\n bind<DmkNetworkClient>(networkTypes.NetworkClient).toConstantValue(\n networkClientFactory(config),\n );\n });\n"],
5
+ "mappings": "AACA,OAAS,mBAAAA,MAAuB,YAGhC,OAAS,gBAAAC,MAAoB,4BAC7B,OAAS,wBAAAC,MAA4B,iCAE9B,MAAMC,EAAwBC,GACnC,IAAIJ,EAAgB,CAAC,CAAE,KAAAK,CAAK,IAAM,CAChCA,EAAuBJ,EAAa,aAAa,EAAE,gBACjDC,EAAqBE,CAAM,CAC7B,CACF,CAAC",
6
+ "names": ["ContainerModule", "networkTypes", "networkClientFactory", "networkModuleFactory", "config", "bind"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{DmkNetworkClient as e}from"@ledgerhq/device-management-kit";import{LEDGER_CLIENT_VERSION_HEADER as r,LEDGER_ORIGIN_TOKEN_HEADER as t}from"../shared/constant/HttpHeaders";import i from"../../package.json";const C=o=>new e({headers:{[r]:`context-module/${i.version}`,...o.originToken&&{[t]:o.originToken}}});export{C as networkClientFactory};
2
+ //# sourceMappingURL=networkClientFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/network/networkClientFactory.ts"],
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\n\nimport { type ContextModuleServiceConfig } 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\nexport const networkClientFactory = (config: ContextModuleServiceConfig) =>\n new DmkNetworkClient({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n ...(config.originToken && {\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n }),\n },\n });\n"],
5
+ "mappings": "AAAA,OAAS,oBAAAA,MAAwB,kCAGjC,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAEb,MAAMC,EAAwBC,GACnC,IAAIL,EAAiB,CACnB,QAAS,CACP,CAACC,CAA4B,EAAG,kBAAkBE,EAAQ,OAAO,GACjE,GAAIE,EAAO,aAAe,CACxB,CAACH,CAA0B,EAAGG,EAAO,WACvC,CACF,CACF,CAAC",
6
+ "names": ["DmkNetworkClient", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "networkClientFactory", "config"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{networkClientFactory as n}from"../network/networkClientFactory";import{LEDGER_CLIENT_VERSION_HEADER as c,LEDGER_ORIGIN_TOKEN_HEADER as s}from"../shared/constant/HttpHeaders";import r from"../../package.json";describe("networkClientFactory",()=>{let t;beforeEach(()=>{t=vi.fn().mockResolvedValue(new Response(null,{status:204})),vi.stubGlobal("fetch",t)}),afterEach(()=>{vi.unstubAllGlobals()});const o=()=>{expect(t).toHaveBeenCalledTimes(1);const e=t.mock.calls[0]?.[1];return expect(e).toBeDefined(),e?.headers};it("should set the context-module client version header",async()=>{await n({}).get("https://example.test",{responseType:"void"}),expect(o()).toMatchObject({[c]:`context-module/${r.version}`})}),it("should set the origin token header when configured",async()=>{const e={originToken:"origin-token"};await n(e).get("https://example.test",{responseType:"void"}),expect(o()).toMatchObject({[s]:e.originToken})}),it("should not set the origin token header when it is missing",async()=>{await n({}).get("https://example.test",{responseType:"void"}),expect(o()).not.toHaveProperty(s)})});
2
+ //# sourceMappingURL=networkClientFactory.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/network/networkClientFactory.test.ts"],
4
+ "sourcesContent": ["import { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\ndescribe(\"networkClientFactory\", () => {\n let fetchMock: ReturnType<typeof vi.fn<typeof fetch>>;\n\n beforeEach(() => {\n fetchMock = vi\n .fn<typeof fetch>()\n .mockResolvedValue(new Response(null, { status: 204 }));\n vi.stubGlobal(\"fetch\", fetchMock);\n });\n\n afterEach(() => {\n vi.unstubAllGlobals();\n });\n\n const getRequestHeaders = () => {\n expect(fetchMock).toHaveBeenCalledTimes(1);\n\n const requestInit = fetchMock.mock.calls[0]?.[1];\n expect(requestInit).toBeDefined();\n\n return requestInit?.headers as Record<string, string>;\n };\n\n it(\"should set the context-module client version header\", async () => {\n // GIVEN\n const config = {} as ContextModuleServiceConfig;\n const client = networkClientFactory(config);\n\n // WHEN\n await client.get(\"https://example.test\", { responseType: \"void\" });\n\n // THEN\n expect(getRequestHeaders()).toMatchObject({\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n });\n });\n\n it(\"should set the origin token header when configured\", async () => {\n // GIVEN\n const config = {\n originToken: \"origin-token\",\n } as ContextModuleServiceConfig;\n const client = networkClientFactory(config);\n\n // WHEN\n await client.get(\"https://example.test\", { responseType: \"void\" });\n\n // THEN\n expect(getRequestHeaders()).toMatchObject({\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n });\n });\n\n it(\"should not set the origin token header when it is missing\", async () => {\n // GIVEN\n const config = {} as ContextModuleServiceConfig;\n const client = networkClientFactory(config);\n\n // WHEN\n await client.get(\"https://example.test\", { responseType: \"void\" });\n\n // THEN\n expect(getRequestHeaders()).not.toHaveProperty(LEDGER_ORIGIN_TOKEN_HEADER);\n });\n});\n"],
5
+ "mappings": "AACA,OAAS,wBAAAA,MAA4B,iCACrC,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAEpB,SAAS,uBAAwB,IAAM,CACrC,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAY,GACT,GAAiB,EACjB,kBAAkB,IAAI,SAAS,KAAM,CAAE,OAAQ,GAAI,CAAC,CAAC,EACxD,GAAG,WAAW,QAASA,CAAS,CAClC,CAAC,EAED,UAAU,IAAM,CACd,GAAG,iBAAiB,CACtB,CAAC,EAED,MAAMC,EAAoB,IAAM,CAC9B,OAAOD,CAAS,EAAE,sBAAsB,CAAC,EAEzC,MAAME,EAAcF,EAAU,KAAK,MAAM,CAAC,IAAI,CAAC,EAC/C,cAAOE,CAAW,EAAE,YAAY,EAEzBA,GAAa,OACtB,EAEA,GAAG,sDAAuD,SAAY,CAMpE,MAHeN,EADA,CAAC,CAC0B,EAG7B,IAAI,uBAAwB,CAAE,aAAc,MAAO,CAAC,EAGjE,OAAOK,EAAkB,CAAC,EAAE,cAAc,CACxC,CAACJ,CAA4B,EAAG,kBAAkBE,EAAQ,OAAO,EACnE,CAAC,CACH,CAAC,EAED,GAAG,qDAAsD,SAAY,CAEnE,MAAMI,EAAS,CACb,YAAa,cACf,EAIA,MAHeP,EAAqBO,CAAM,EAG7B,IAAI,uBAAwB,CAAE,aAAc,MAAO,CAAC,EAGjE,OAAOF,EAAkB,CAAC,EAAE,cAAc,CACxC,CAACH,CAA0B,EAAGK,EAAO,WACvC,CAAC,CACH,CAAC,EAED,GAAG,4DAA6D,SAAY,CAM1E,MAHeP,EADA,CAAC,CAC0B,EAG7B,IAAI,uBAAwB,CAAE,aAAc,MAAO,CAAC,EAGjE,OAAOK,EAAkB,CAAC,EAAE,IAAI,eAAeH,CAA0B,CAC3E,CAAC,CACH,CAAC",
6
+ "names": ["networkClientFactory", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "fetchMock", "getRequestHeaders", "requestInit", "config"]
7
+ }
@@ -1,2 +1,2 @@
1
- var c=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var l=(i,e,r,o)=>{for(var t=o>1?void 0:o?f(e,r):e,p=i.length-1,m;p>=0;p--)(m=i[p])&&(t=(o?m(e,r,t):m(t))||t);return o&&t&&c(e,r,t),t},s=(i,e)=>(r,o)=>e(r,o,i);import{inject as a,injectable as g}from"inversify";import{Left as d,Right as y}from"purify-ts";import{configTypes as u}from"../../config/di/configTypes";import{networkTypes as h}from"../../network/di/networkTypes";let n=class{constructor(e,r){this.config=e;this.http=r}async report(e){try{await this.http.post(`${this.config.reporter.url}/blind-signing-events`,{...e,source:this.config.appSource},{responseType:"void"})}catch{return d(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return y(void 0)}};n=l([g(),s(0,a(u.Config)),s(1,a(h.NetworkClient))],n);export{n as HttpBlindSigningReporterDatasource};
1
+ var c=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var l=(i,r,e,o)=>{for(var t=o>1?void 0:o?f(r,e):r,p=i.length-1,m;p>=0;p--)(m=i[p])&&(t=(o?m(r,e,t):m(t))||t);return o&&t&&c(r,e,t),t},s=(i,r)=>(e,o)=>r(e,o,i);import{inject as a,injectable as g}from"inversify";import{Left as d,Right as y}from"purify-ts";import{configTypes as h}from"../../config/di/configTypes";import{networkTypes as C}from"../../network/di/networkTypes";import{networkClientFactory as u}from"../../network/networkClientFactory";let n=class{constructor(r,e){this.config=r;this.http=e??u(r)}http;async report(r){try{await this.http.post(`${this.config.reporter.url}/blind-signing-events`,{...r,source:this.config.appSource},{responseType:"void"})}catch{return d(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return y(void 0)}};n=l([g(),s(0,a(h.Config)),s(1,a(C.NetworkClient))],n);export{n as HttpBlindSigningReporterDatasource};
2
2
  //# sourceMappingURL=HttpBlindSigningReporterDatasource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/reporter/data/HttpBlindSigningReporterDatasource.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\n\nimport {\n type BlindSigningReporterDatasource,\n type BlindSigningReportParams,\n} from \"./BlindSigningReporterDatasource\";\n\n@injectable()\nexport class HttpBlindSigningReporterDatasource\n implements BlindSigningReporterDatasource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n async report(params: BlindSigningReportParams): Promise<Either<Error, void>> {\n try {\n await this.http.post(\n `${this.config.reporter.url}/blind-signing-events`,\n { ...params, source: this.config.appSource },\n { responseType: \"void\" },\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n );\n }\n\n return Right(undefined);\n }\n}\n"],
5
- "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,gBAAAC,MAAoB,4BAQtB,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAM,OAAOC,EAAgE,CAC3E,GAAI,CACF,MAAM,KAAK,KAAK,KACd,GAAG,KAAK,OAAO,SAAS,GAAG,wBAC3B,CAAE,GAAGA,EAAQ,OAAQ,KAAK,OAAO,SAAU,EAC3C,CAAE,aAAc,MAAO,CACzB,CACF,MAAiB,CACf,OAAOC,EACL,IAAI,MACF,0FACF,CACF,CACF,CAEA,OAAOC,EAAM,MAAS,CACxB,CACF,EA3BaL,EAANM,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,GAEzBF,EAAA,EAAAC,EAAOE,EAAa,aAAa,IANzBX",
6
- "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "HttpBlindSigningReporterDatasource", "config", "http", "params", "Left", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\n\nimport {\n type BlindSigningReporterDatasource,\n type BlindSigningReportParams,\n} from \"./BlindSigningReporterDatasource\";\n\n@injectable()\nexport class HttpBlindSigningReporterDatasource\n implements BlindSigningReporterDatasource\n{\n private readonly http: DmkNetworkClient;\n\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n networkClient?: DmkNetworkClient,\n ) {\n this.http = networkClient ?? networkClientFactory(config);\n }\n\n async report(params: BlindSigningReportParams): Promise<Either<Error, void>> {\n try {\n await this.http.post(\n `${this.config.reporter.url}/blind-signing-events`,\n { ...params, source: this.config.appSource },\n { responseType: \"void\" },\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n );\n }\n\n return Right(undefined);\n }\n}\n"],
5
+ "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,gBAAAC,MAAoB,4BAC7B,OAAS,wBAAAC,MAA4B,iCAQ9B,IAAMC,EAAN,KAEP,CAGE,YAEmBC,EAEjBC,EACA,CAHiB,YAAAD,EAIjB,KAAK,KAAOC,GAAiBC,EAAqBF,CAAM,CAC1D,CATiB,KAWjB,MAAM,OAAOG,EAAgE,CAC3E,GAAI,CACF,MAAM,KAAK,KAAK,KACd,GAAG,KAAK,OAAO,SAAS,GAAG,wBAC3B,CAAE,GAAGA,EAAQ,OAAQ,KAAK,OAAO,SAAU,EAC3C,CAAE,aAAc,MAAO,CACzB,CACF,MAAiB,CACf,OAAOC,EACL,IAAI,MACF,0FACF,CACF,CACF,CAEA,OAAOC,EAAM,MAAS,CACxB,CACF,EA/BaN,EAANO,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,GAEzBF,EAAA,EAAAC,EAAOE,EAAa,aAAa,IARzBZ",
6
+ "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "networkClientFactory", "HttpBlindSigningReporterDatasource", "config", "networkClient", "networkClientFactory", "params", "Left", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var y=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var p=(i,e,t,a)=>{for(var r=a>1?void 0:a?D(e,t):e,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=(a?o(e,t,r):o(r))||r);return a&&r&&y(e,t,r),r},c=(i,e)=>(t,a)=>e(t,a,i);import{inject as f,injectable as l}from"inversify";import{Left as n,Right as u}from"purify-ts";import{configTypes as N}from"../../config/di/configTypes";import{networkTypes as h}from"../../network/di/networkTypes";let d=class{constructor(e,t){this.config=e;this.http=t}async getDomainNamePayload({chainId:e,domain:t,challenge:a}){let r;try{r=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/forward/${t}`,{params:{types:"eoa",sources:"ens",challenge:a}})}catch{return n(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name"))}return r?this.isTrustedNameDto(r)?u({data:r.signedDescriptor.data,keyId:r.keyId,keyUsage:r.keyUsage}):n(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${t} on chain ${e}`)):n(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for domain ${t} on chain ${e}`))}async getTrustedNamePayload({chainId:e,address:t,challenge:a,sources:r,types:s}){let o;try{r=r.filter(m=>m==="ens"||m==="crypto_asset_list"),o=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/reverse/${t}`,{params:{types:s.join(","),sources:r.join(","),challenge:a}})}catch{return n(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name"))}if(!o)return n(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for address ${t} on chain ${e}`));if(!this.isTrustedNameDto(o))return n(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${t} on chain ${e}`));if(typeof o.signedDescriptor.signatures[this.config.cal.mode]!="string")return u({data:o.signedDescriptor.data,keyId:o.keyId,keyUsage:o.keyUsage});const g=o.signedDescriptor.signatures[this.config.cal.mode];return u({data:this.formatTrustedName(o.signedDescriptor.data,g),keyId:o.keyId,keyUsage:o.keyUsage})}formatTrustedName(e,t){t.length%2!==0&&(t="0"+t);const a="15",r=(t.length/2).toString(16);return`${e}${a}${r}${t}`}isTrustedNameDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"&&typeof e.signedDescriptor=="object"&&e.signedDescriptor!==null&&"data"in e.signedDescriptor&&"signatures"in e.signedDescriptor&&typeof e.signedDescriptor.data=="string"&&typeof e.signedDescriptor.signatures=="object"}};d=p([l(),c(0,f(N.Config)),c(1,f(h.NetworkClient))],d);export{d as HttpTrustedNameDataSource};
1
+ var y=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var u=(i,e,t,a)=>{for(var r=a>1?void 0:a?l(e,t):e,s=i.length-1,o;s>=0;s--)(o=i[s])&&(r=(a?o(e,t,r):o(r))||r);return a&&r&&y(e,t,r),r},c=(i,e)=>(t,a)=>e(t,a,i);import{inject as f,injectable as D}from"inversify";import{Left as n,Right as p}from"purify-ts";import{configTypes as N}from"../../config/di/configTypes";import{networkTypes as h}from"../../network/di/networkTypes";import{networkClientFactory as k}from"../../network/networkClientFactory";let d=class{constructor(e,t){this.config=e;this.http=t??k(e)}http;async getDomainNamePayload({chainId:e,domain:t,challenge:a}){let r;try{r=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/forward/${t}`,{params:{types:"eoa",sources:"ens",challenge:a}})}catch{return n(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name"))}return r?this.isTrustedNameDto(r)?p({data:r.signedDescriptor.data,keyId:r.keyId,keyUsage:r.keyUsage}):n(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${t} on chain ${e}`)):n(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for domain ${t} on chain ${e}`))}async getTrustedNamePayload({chainId:e,address:t,challenge:a,sources:r,types:s}){let o;try{r=r.filter(m=>m==="ens"||m==="crypto_asset_list"),o=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${e}/reverse/${t}`,{params:{types:s.join(","),sources:r.join(","),challenge:a}})}catch{return n(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name"))}if(!o)return n(new Error(`[ContextModule] HttpTrustedNameDataSource: No data received for address ${t} on chain ${e}`));if(!this.isTrustedNameDto(o))return n(new Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${t} on chain ${e}`));if(typeof o.signedDescriptor.signatures[this.config.cal.mode]!="string")return p({data:o.signedDescriptor.data,keyId:o.keyId,keyUsage:o.keyUsage});const g=o.signedDescriptor.signatures[this.config.cal.mode];return p({data:this.formatTrustedName(o.signedDescriptor.data,g),keyId:o.keyId,keyUsage:o.keyUsage})}formatTrustedName(e,t){t.length%2!==0&&(t="0"+t);const a="15",r=(t.length/2).toString(16);return`${e}${a}${r}${t}`}isTrustedNameDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"&&typeof e.signedDescriptor=="object"&&e.signedDescriptor!==null&&"data"in e.signedDescriptor&&"signatures"in e.signedDescriptor&&typeof e.signedDescriptor.data=="string"&&typeof e.signedDescriptor.signatures=="object"}};d=u([D(),c(0,f(N.Config)),c(1,f(h.NetworkClient))],d);export{d as HttpTrustedNameDataSource};
2
2
  //# sourceMappingURL=HttpTrustedNameDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/trusted-name/data/HttpTrustedNameDataSource.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport {\n GetDomainNameInfosParams,\n GetTrustedNameInfosParams,\n TrustedNameDataSource,\n TrustedNamePayload,\n} from \"@/trusted-name/data/TrustedNameDataSource\";\n\nimport { TrustedNameDto } from \"./TrustedNameDto\";\n\n@injectable()\nexport class HttpTrustedNameDataSource implements TrustedNameDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getDomainNamePayload({\n chainId,\n domain,\n challenge,\n }: GetDomainNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n const type = \"eoa\"; // Externally owned account\n const source = \"ens\"; // Ethereum name service\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/forward/${domain}`,\n {\n params: { types: type, sources: source, challenge },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n public async getTrustedNamePayload({\n chainId,\n address,\n challenge,\n sources,\n types,\n }: GetTrustedNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n // TODO remove that filtering once https://ledgerhq.atlassian.net/browse/BACK-8075 is done\n // For now we have to filter or trusted names won't work with the generic parser, because transaction\n // fields descriptors can contain unsupported sources.\n sources = sources.filter(\n (source) => source === \"ens\" || source === \"crypto_asset_list\",\n );\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/reverse/${address}`,\n {\n params: {\n types: types.join(\",\"),\n sources: sources.join(\",\"),\n challenge,\n },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (\n typeof dto.signedDescriptor.signatures[this.config.cal.mode] !== \"string\"\n ) {\n // If we have no separated signature but a valid descriptor, it may mean the descriptor was\n // signed on-the-fly for dynamic sources such as ens\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n const signature = dto.signedDescriptor.signatures[this.config.cal.mode]!;\n return Right({\n data: this.formatTrustedName(dto.signedDescriptor.data, signature),\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n private formatTrustedName(payload: string, signature: string): string {\n // Ensure correct padding\n if (signature.length % 2 !== 0) {\n signature = \"0\" + signature;\n }\n // TLV encoding as according to trusted name documentation\n const signatureTag = \"15\";\n const signatureLength = (signature.length / 2).toString(16);\n return `${payload}${signatureTag}${signatureLength}${signature}`;\n }\n /**\n * Type guard to validate ProxyDelegateCallDto\n */\n private isTrustedNameDto(value: unknown): value is TrustedNameDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\" &&\n typeof value.signedDescriptor === \"object\" &&\n value.signedDescriptor !== null &&\n \"data\" in value.signedDescriptor &&\n \"signatures\" in value.signedDescriptor &&\n typeof value.signedDescriptor.data === \"string\" &&\n typeof value.signedDescriptor.signatures === \"object\"\n );\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "HttpTrustedNameDataSource", "config", "http", "chainId", "domain", "challenge", "dto", "Left", "Right", "address", "sources", "types", "source", "signature", "payload", "signatureTag", "signatureLength", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { networkClientFactory } from \"@/network/networkClientFactory\";\nimport {\n GetDomainNameInfosParams,\n GetTrustedNameInfosParams,\n TrustedNameDataSource,\n TrustedNamePayload,\n} from \"@/trusted-name/data/TrustedNameDataSource\";\n\nimport { TrustedNameDto } from \"./TrustedNameDto\";\n\n@injectable()\nexport class HttpTrustedNameDataSource implements TrustedNameDataSource {\n private readonly http: DmkNetworkClient;\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n networkClient?: DmkNetworkClient,\n ) {\n this.http = networkClient ?? networkClientFactory(config);\n }\n\n public async getDomainNamePayload({\n chainId,\n domain,\n challenge,\n }: GetDomainNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n const type = \"eoa\"; // Externally owned account\n const source = \"ens\"; // Ethereum name service\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/forward/${domain}`,\n {\n params: { types: type, sources: source, challenge },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${domain} on chain ${chainId}`,\n ),\n );\n }\n\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n public async getTrustedNamePayload({\n chainId,\n address,\n challenge,\n sources,\n types,\n }: GetTrustedNameInfosParams): Promise<Either<Error, TrustedNamePayload>> {\n let dto: TrustedNameDto | undefined;\n try {\n // TODO remove that filtering once https://ledgerhq.atlassian.net/browse/BACK-8075 is done\n // For now we have to filter or trusted names won't work with the generic parser, because transaction\n // fields descriptors can contain unsupported sources.\n sources = sources.filter(\n (source) => source === \"ens\" || source === \"crypto_asset_list\",\n );\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/ethereum/${chainId}/reverse/${address}`,\n {\n params: {\n types: types.join(\",\"),\n sources: sources.join(\",\"),\n challenge,\n },\n },\n )) as TrustedNameDto;\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: No data received for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isTrustedNameDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n if (\n typeof dto.signedDescriptor.signatures[this.config.cal.mode] !== \"string\"\n ) {\n // If we have no separated signature but a valid descriptor, it may mean the descriptor was\n // signed on-the-fly for dynamic sources such as ens\n return Right({\n data: dto.signedDescriptor.data,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n const signature = dto.signedDescriptor.signatures[this.config.cal.mode]!;\n return Right({\n data: this.formatTrustedName(dto.signedDescriptor.data, signature),\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n private formatTrustedName(payload: string, signature: string): string {\n // Ensure correct padding\n if (signature.length % 2 !== 0) {\n signature = \"0\" + signature;\n }\n // TLV encoding as according to trusted name documentation\n const signatureTag = \"15\";\n const signatureLength = (signature.length / 2).toString(16);\n return `${payload}${signatureTag}${signatureLength}${signature}`;\n }\n /**\n * Type guard to validate ProxyDelegateCallDto\n */\n private isTrustedNameDto(value: unknown): value is TrustedNameDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\" &&\n typeof value.signedDescriptor === \"object\" &&\n value.signedDescriptor !== null &&\n \"data\" in value.signedDescriptor &&\n \"signatures\" in value.signedDescriptor &&\n typeof value.signedDescriptor.data === \"string\" &&\n typeof value.signedDescriptor.signatures === \"object\"\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "networkClientFactory", "HttpTrustedNameDataSource", "config", "networkClient", "networkClientFactory", "chainId", "domain", "challenge", "dto", "Left", "Right", "address", "sources", "types", "source", "signature", "payload", "signatureTag", "signatureLength", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"networkModuleFactory.d.ts","sourceRoot":"","sources":["../../../../../src/network/di/networkModuleFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAQrF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,0BAA0B,oBAYnE,CAAC"}
1
+ {"version":3,"file":"networkModuleFactory.d.ts","sourceRoot":"","sources":["../../../../../src/network/di/networkModuleFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAIrF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,0BAA0B,oBAKnE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { DmkNetworkClient } from "@ledgerhq/device-management-kit";
2
+ import { type ContextModuleServiceConfig } from "../config/model/ContextModuleConfig";
3
+ export declare const networkClientFactory: (config: ContextModuleServiceConfig) => DmkNetworkClient;
4
+ //# sourceMappingURL=networkClientFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkClientFactory.d.ts","sourceRoot":"","sources":["../../../../src/network/networkClientFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAOrF,eAAO,MAAM,oBAAoB,GAAI,QAAQ,0BAA0B,qBAQnE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=networkClientFactory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkClientFactory.test.d.ts","sourceRoot":"","sources":["../../../../src/network/networkClientFactory.test.ts"],"names":[],"mappings":""}
@@ -5,7 +5,7 @@ import { type BlindSigningReporterDatasource, type BlindSigningReportParams } fr
5
5
  export declare class HttpBlindSigningReporterDatasource implements BlindSigningReporterDatasource {
6
6
  private readonly config;
7
7
  private readonly http;
8
- constructor(config: ContextModuleServiceConfig, http: DmkNetworkClient);
8
+ constructor(config: ContextModuleServiceConfig, networkClient?: DmkNetworkClient);
9
9
  report(params: BlindSigningReportParams): Promise<Either<Error, void>>;
10
10
  }
11
11
  //# sourceMappingURL=HttpBlindSigningReporterDatasource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HttpBlindSigningReporterDatasource.d.ts","sourceRoot":"","sources":["../../../../../src/reporter/data/HttpBlindSigningReporterDatasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAGrF,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,qBACa,kCACX,YAAW,8BAA8B;IAIvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,MAAM,EAAE,0BAA0B,EAElC,IAAI,EAAE,gBAAgB;IAGnC,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;CAiB7E"}
1
+ {"version":3,"file":"HttpBlindSigningReporterDatasource.d.ts","sourceRoot":"","sources":["../../../../../src/reporter/data/HttpBlindSigningReporterDatasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,WAAW,CAAC;AAGrD,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAIrF,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,qBACa,kCACX,YAAW,8BAA8B;IAMvC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;gBAIrB,MAAM,EAAE,0BAA0B,EAEnD,aAAa,CAAC,EAAE,gBAAgB;IAK5B,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;CAiB7E"}
@@ -5,7 +5,7 @@ import { GetDomainNameInfosParams, GetTrustedNameInfosParams, TrustedNameDataSou
5
5
  export declare class HttpTrustedNameDataSource implements TrustedNameDataSource {
6
6
  private readonly config;
7
7
  private readonly http;
8
- constructor(config: ContextModuleServiceConfig, http: DmkNetworkClient);
8
+ constructor(config: ContextModuleServiceConfig, networkClient?: DmkNetworkClient);
9
9
  getDomainNamePayload({ chainId, domain, challenge, }: GetDomainNameInfosParams): Promise<Either<Error, TrustedNamePayload>>;
10
10
  getTrustedNamePayload({ chainId, address, challenge, sources, types, }: GetTrustedNameInfosParams): Promise<Either<Error, TrustedNamePayload>>;
11
11
  private formatTrustedName;
@@ -1 +1 @@
1
- {"version":3,"file":"HttpTrustedNameDataSource.d.ts","sourceRoot":"","sources":["../../../../../src/trusted-name/data/HttpTrustedNameDataSource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAe,MAAM,WAAW,CAAC;AAGhD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAErF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAInD,qBACa,yBAA0B,YAAW,qBAAqB;IAGnE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,MAAM,EAAE,0BAA0B,EAElC,IAAI,EAAE,gBAAgB;IAG5B,oBAAoB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,SAAS,GACV,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IA0C3D,qBAAqB,CAAC,EACjC,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,KAAK,GACN,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IA+DzE,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAiBzB"}
1
+ {"version":3,"file":"HttpTrustedNameDataSource.d.ts","sourceRoot":"","sources":["../../../../../src/trusted-name/data/HttpTrustedNameDataSource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAe,MAAM,WAAW,CAAC;AAGhD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAGrF,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,2CAA2C,CAAC;AAInD,qBACa,yBAA0B,YAAW,qBAAqB;IAInE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;gBAGrB,MAAM,EAAE,0BAA0B,EAEnD,aAAa,CAAC,EAAE,gBAAgB;IAKrB,oBAAoB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,SAAS,GACV,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IA0C3D,qBAAqB,CAAC,EACjC,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,KAAK,GACN,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;IA+DzE,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAiBzB"}