@ledgerhq/context-module 1.13.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  3. package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
  4. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
  6. package/lib/cjs/src/config/model/ContextModuleBuildArgs.js.map +1 -1
  7. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  8. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  9. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  10. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +3 -3
  11. package/lib/cjs/src/signing-tracker/data/SigningTrackerDataSource.js +2 -0
  12. package/lib/cjs/src/signing-tracker/data/SigningTrackerDataSource.js.map +7 -0
  13. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  14. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  15. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  16. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +2 -2
  17. package/lib/esm/package.json +1 -1
  18. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  19. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  20. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  21. package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
  22. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  23. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  24. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  25. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +3 -3
  26. package/lib/esm/src/signing-tracker/data/SigningTrackerDataSource.js +1 -0
  27. package/lib/esm/src/signing-tracker/data/SigningTrackerDataSource.js.map +7 -0
  28. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  29. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  30. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  31. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +2 -2
  32. package/lib/types/src/ContextModuleBuilder.d.ts +2 -1
  33. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  34. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts +1 -1
  35. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts.map +1 -1
  36. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -1
  37. package/lib/types/src/signing-tracker/data/SigningTrackerDataSource.d.ts +40 -0
  38. package/lib/types/src/signing-tracker/data/SigningTrackerDataSource.d.ts.map +1 -0
  39. package/lib/types/src/trusted-name/domain/TrustedNameContextLoader.d.ts +3 -5
  40. package/lib/types/src/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -1
  41. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  42. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/trusted-name/domain/TrustedNameContextLoader.ts"],
4
- "sourcesContent": ["import {\n DeviceModelId,\n LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type { TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nexport type TrustedNameContextInput = {\n chainId: number;\n domain: string;\n challenge: string;\n deviceModelId: DeviceModelId;\n};\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.TRUSTED_NAME,\n];\n\n@injectable()\nexport class TrustedNameContextLoader\n implements ContextLoader<TrustedNameContextInput>\n{\n private _dataSource: TrustedNameDataSource;\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(trustedNameTypes.TrustedNameDataSource)\n dataSource: TrustedNameDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._dataSource = dataSource;\n this.logger = loggerFactory(\"TrustedNameContextLoader\");\n }\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is TrustedNameContextInput {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"chainId\" in input &&\n \"domain\" in input &&\n \"challenge\" in input &&\n \"deviceModelId\" in input &&\n input.deviceModelId !== undefined &&\n typeof input.chainId === \"number\" &&\n typeof input.domain === \"string\" &&\n input.domain.length > 0 &&\n typeof input.challenge === \"string\" &&\n input.challenge.length > 0 &&\n SUPPORTED_TYPES.every((type) => expectedTypes.includes(type))\n );\n }\n\n async load(input: TrustedNameContextInput): Promise<ClearSignContext[]> {\n const { chainId, domain, challenge, deviceModelId } = input;\n\n if (!this.isDomainValid(domain)) {\n const result = [\n {\n type: ClearSignContextType.ERROR as const,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ];\n this.logger.debug(\"load result\", { data: { result } });\n return result;\n }\n\n const payload = await this._dataSource.getDomainNamePayload({\n chainId,\n domain,\n challenge,\n });\n const response = await payload.caseOf({\n Left: (error): Promise<ClearSignContext> =>\n Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: error,\n }),\n Right: async ({ data, keyId, keyUsage }): Promise<ClearSignContext> => {\n const certificate = await this.certificateLoader.loadCertificate({\n keyId,\n keyUsage,\n targetDevice: deviceModelId,\n });\n return {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: data,\n certificate,\n };\n },\n });\n\n const result = [response];\n this.logger.debug(\"load result\", { data: { result } });\n return result;\n }\n\n private isDomainValid(domain: string) {\n const lengthIsValid = domain.length > 0 && Number(domain.length) < 30;\n const containsOnlyValidChars = new RegExp(\"^[a-zA-Z0-9\\\\-\\\\_\\\\.]+$\").test(\n domain,\n );\n\n return lengthIsValid && containsOnlyValidChars;\n }\n}\n"],
5
- "mappings": "iOAIA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAC5B,OAAS,YAAAC,MAAgB,oBAGzB,OAEE,wBAAAC,MACK,kCAEP,OAAS,oBAAAC,MAAwB,qCASjC,MAAMC,EAA0C,CAC9CC,EAAqB,YACvB,EAGO,IAAMC,EAAN,KAEP,CAIE,YAEEC,EAEQC,EAERC,EACA,CAHQ,uBAAAD,EAIR,KAAK,YAAcD,EACnB,KAAK,OAASE,EAAc,0BAA0B,CACxD,CAbQ,YACA,OAcR,UACEC,EACAC,EACkC,CAClC,OACE,OAAOD,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,WAAYA,GACZ,cAAeA,GACf,kBAAmBA,GACnBA,EAAM,gBAAkB,QACxB,OAAOA,EAAM,SAAY,UACzB,OAAOA,EAAM,QAAW,UACxBA,EAAM,OAAO,OAAS,GACtB,OAAOA,EAAM,WAAc,UAC3BA,EAAM,UAAU,OAAS,GACzBN,EAAgB,MAAOQ,GAASD,EAAc,SAASC,CAAI,CAAC,CAEhE,CAEA,MAAM,KAAKF,EAA6D,CACtE,KAAM,CAAE,QAAAG,EAAS,OAAAC,EAAQ,UAAAC,EAAW,cAAAC,CAAc,EAAIN,EAEtD,GAAI,CAAC,KAAK,cAAcI,CAAM,EAAG,CAC/B,MAAMG,EAAS,CACb,CACE,KAAMZ,EAAqB,MAC3B,MAAO,IAAI,MAAM,mDAAmD,CACtE,CACF,EACA,YAAK,OAAO,MAAM,cAAe,CAAE,KAAM,CAAE,OAAAY,CAAO,CAAE,CAAC,EAC9CA,CACT,CA2BA,MAAMA,EAAS,CApBE,MALD,MAAM,KAAK,YAAY,qBAAqB,CAC1D,QAAAJ,EACA,OAAAC,EACA,UAAAC,CACF,CAAC,GAC8B,OAAO,CACpC,KAAOG,GACL,QAAQ,QAAQ,CACd,KAAMb,EAAqB,MAC3B,MAAOa,CACT,CAAC,EACH,MAAO,MAAO,CAAE,KAAAC,EAAM,MAAAC,EAAO,SAAAC,CAAS,IAAiC,CACrE,MAAMC,EAAc,MAAM,KAAK,kBAAkB,gBAAgB,CAC/D,MAAAF,EACA,SAAAC,EACA,aAAcL,CAChB,CAAC,EACD,MAAO,CACL,KAAMX,EAAqB,aAC3B,QAASc,EACT,YAAAG,CACF,CACF,CACF,CAAC,CAEuB,EACxB,YAAK,OAAO,MAAM,cAAe,CAAE,KAAM,CAAE,OAAAL,CAAO,CAAE,CAAC,EAC9CA,CACT,CAEQ,cAAcH,EAAgB,CACpC,MAAMS,EAAgBT,EAAO,OAAS,GAAK,OAAOA,EAAO,MAAM,EAAI,GAC7DU,EAAyB,IAAI,OAAO,yBAAyB,EAAE,KACnEV,CACF,EAEA,OAAOS,GAAiBC,CAC1B,CACF,EA3FalB,EAANmB,EAAA,CADNC,EAAW,EAQPC,EAAA,EAAAC,EAAOC,EAAiB,qBAAqB,GAE7CF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,GAEpCH,EAAA,EAAAC,EAAOG,EAAY,0BAA0B,IAXrCzB",
6
- "names": ["inject", "injectable", "configTypes", "pkiTypes", "ClearSignContextType", "trustedNameTypes", "SUPPORTED_TYPES", "ClearSignContextType", "TrustedNameContextLoader", "dataSource", "certificateLoader", "loggerFactory", "input", "expectedTypes", "type", "chainId", "domain", "challenge", "deviceModelId", "result", "error", "data", "keyId", "keyUsage", "certificate", "lengthIsValid", "containsOnlyValidChars", "__decorateClass", "injectable", "__decorateParam", "inject", "trustedNameTypes", "pkiTypes", "configTypes"]
4
+ "sourcesContent": ["import {\n DeviceModelId,\n isHexaString,\n LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type { TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nexport type TrustedNameContextInput = {\n chainId: number;\n to: string;\n deviceModelId: DeviceModelId;\n};\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.TRUSTED_NAME,\n];\n\n@injectable()\nexport class TrustedNameContextLoader\n implements ContextLoader<TrustedNameContextInput>\n{\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(trustedNameTypes.TrustedNameDataSource)\n private _dataSource: TrustedNameDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"TrustedNameContextLoader\");\n }\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is TrustedNameContextInput {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"chainId\" in input &&\n input.chainId !== undefined &&\n typeof input.chainId === \"number\" &&\n \"to\" in input &&\n input.to !== undefined &&\n isHexaString(input.to) &&\n input.to !== \"0x\" &&\n \"deviceModelId\" in input &&\n input.deviceModelId !== undefined &&\n SUPPORTED_TYPES.every((type) => expectedTypes.includes(type))\n );\n }\n\n async load(input: TrustedNameContextInput): Promise<ClearSignContext[]> {\n const payload = await this._dataSource.getTrustedNamePayload({\n chainId: input.chainId,\n address: input.to,\n challenge: \"\", // use empty challenge for trusted name context loader as it will be re fetched during the provide step\n types: [\"eoa\"],\n sources: [\"ens\"],\n });\n\n this.logger.debug(\"[ContextModule]: load result\", { data: { payload } });\n\n return await payload.caseOf({\n Left: (error): Promise<ClearSignContext[]> =>\n Promise.resolve([{ type: ClearSignContextType.ERROR, error }]),\n Right: async ({ data, keyId, keyUsage }): Promise<ClearSignContext[]> => {\n const certificate = await this._certificateLoader.loadCertificate({\n keyId,\n keyUsage,\n targetDevice: input.deviceModelId,\n });\n return [\n {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: data,\n certificate,\n },\n ];\n },\n });\n }\n}\n"],
5
+ "mappings": "iOAAA,OAEE,gBAAAA,MAEK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAC5B,OAAS,YAAAC,MAAgB,oBAGzB,OAEE,wBAAAC,MACK,kCAEP,OAAS,oBAAAC,MAAwB,qCAQjC,MAAMC,EAA0C,CAC9CC,EAAqB,YACvB,EAGO,IAAMC,EAAN,KAEP,CAGE,YAEUC,EAEAC,EAERC,EACA,CALQ,iBAAAF,EAEA,wBAAAC,EAIR,KAAK,OAASC,EAAc,0BAA0B,CACxD,CAXQ,OAaR,UACEC,EACAC,EACkC,CAClC,OACE,OAAOD,GAAU,UACjBA,IAAU,MACV,YAAaA,GACbA,EAAM,UAAY,QAClB,OAAOA,EAAM,SAAY,UACzB,OAAQA,GACRA,EAAM,KAAO,QACbE,EAAaF,EAAM,EAAE,GACrBA,EAAM,KAAO,MACb,kBAAmBA,GACnBA,EAAM,gBAAkB,QACxBN,EAAgB,MAAOS,GAASF,EAAc,SAASE,CAAI,CAAC,CAEhE,CAEA,MAAM,KAAKH,EAA6D,CACtE,MAAMI,EAAU,MAAM,KAAK,YAAY,sBAAsB,CAC3D,QAASJ,EAAM,QACf,QAASA,EAAM,GACf,UAAW,GACX,MAAO,CAAC,KAAK,EACb,QAAS,CAAC,KAAK,CACjB,CAAC,EAED,YAAK,OAAO,MAAM,+BAAgC,CAAE,KAAM,CAAE,QAAAI,CAAQ,CAAE,CAAC,EAEhE,MAAMA,EAAQ,OAAO,CAC1B,KAAOC,GACL,QAAQ,QAAQ,CAAC,CAAE,KAAMV,EAAqB,MAAO,MAAAU,CAAM,CAAC,CAAC,EAC/D,MAAO,MAAO,CAAE,KAAAC,EAAM,MAAAC,EAAO,SAAAC,CAAS,IAAmC,CACvE,MAAMC,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAAF,EACA,SAAAC,EACA,aAAcR,EAAM,aACtB,CAAC,EACD,MAAO,CACL,CACE,KAAML,EAAqB,aAC3B,QAASW,EACT,YAAAG,CACF,CACF,CACF,CACF,CAAC,CACH,CACF,EAlEab,EAANc,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAiB,qBAAqB,GAE7CF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,GAEpCH,EAAA,EAAAC,EAAOG,EAAY,0BAA0B,IAVrCpB",
6
+ "names": ["isHexaString", "inject", "injectable", "configTypes", "pkiTypes", "ClearSignContextType", "trustedNameTypes", "SUPPORTED_TYPES", "ClearSignContextType", "TrustedNameContextLoader", "_dataSource", "_certificateLoader", "loggerFactory", "input", "expectedTypes", "isHexaString", "type", "payload", "error", "data", "keyId", "keyUsage", "certificate", "__decorateClass", "injectable", "__decorateParam", "inject", "trustedNameTypes", "pkiTypes", "configTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as o}from"@ledgerhq/device-management-kit";import{Left as c,Right as s}from"purify-ts";import{ClearSignContextType as n}from"../../shared/model/ClearSignContext";import{TrustedNameContextLoader as u}from"../../trusted-name/domain/TrustedNameContextLoader";const m=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("TrustedNameContextLoader",()=>{const r={getDomainNamePayload:vi.fn(),getTrustedNamePayload:vi.fn()},i={loadCertificate:vi.fn()},a=new u(r,i,m),d={keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])};beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(r,"getDomainNamePayload").mockResolvedValue(s({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),describe("canHandle function",()=>{const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.STAX};it("should return true for valid input",()=>{expect(a.canHandle(e,[n.TRUSTED_NAME])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(a.canHandle(e,[n.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(t,l)=>{expect(a.canHandle(t,[n.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,chainId:void 0},"missing chainId"],[{...e,domain:void 0},"missing domain"],[{...e,challenge:void 0},"missing challenge"],[{...e,deviceModelId:void 0},"missing device model"]])("should return false for %s",(t,l)=>{expect(a.canHandle(t,[n.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,domain:""},"empty domain"],[{...e,challenge:""},"empty challenge"],[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"],[{...e,domain:123},"numeric domain"],[{...e,challenge:123},"numeric challenge"]])("should return false for %s",(t,l)=>{expect(a.canHandle(t,[n.TRUSTED_NAME])).toBe(!1)})}),describe("load function",()=>{it("should return an error when domain > max length",async()=>{const e={chainId:1,domain:"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength",challenge:"challenge",deviceModelId:o.STAX},t=await a.load(e);expect(i.loadCertificate).not.toHaveBeenCalled(),expect(t).toEqual([{type:n.ERROR,error:new Error("[ContextModule] TrustedNameLoader: invalid domain")}])}),it("should return an error when domain is not valid",async()=>{const e={chainId:1,domain:"hello\u{1F44B}",challenge:"challenge",deviceModelId:o.STAX},t=await a.load(e);expect(i.loadCertificate).not.toHaveBeenCalled(),expect(t).toEqual([{type:n.ERROR,error:new Error("[ContextModule] TrustedNameLoader: invalid domain")}])}),it("should return a payload",async()=>{vi.spyOn(i,"loadCertificate").mockResolvedValue(d);const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.STAX},t=await a.load(e);expect(i.loadCertificate).toHaveBeenCalledWith({keyId:"testKeyId",keyUsage:"testKeyUsage",targetDevice:o.STAX}),expect(t).toEqual([{type:n.TRUSTED_NAME,payload:"payload",certificate:d}])}),it("should return an error when unable to fetch the datasource",async()=>{const e={chainId:1,domain:"hello.eth",challenge:"challenge",deviceModelId:o.STAX};vi.spyOn(r,"getDomainNamePayload").mockResolvedValue(c(new Error("error")));const t=await a.load(e);expect(t).toEqual([{type:n.ERROR,error:new Error("error")}])})})});
1
+ import{DeviceModelId as n}from"@ledgerhq/device-management-kit";import{Left as s,Right as l}from"purify-ts";import{ClearSignContextType as o}from"../../shared/model/ClearSignContext";import{TrustedNameContextLoader as u}from"../../trusted-name/domain/TrustedNameContextLoader";const f=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("TrustedNameContextLoader",()=>{const d={getDomainNamePayload:vi.fn(),getTrustedNamePayload:vi.fn()},r={loadCertificate:vi.fn()},a=new u(d,r,f),i={keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])};beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(d,"getTrustedNamePayload").mockResolvedValue(l({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),describe("canHandle function",()=>{const e={chainId:1,to:"0x1234567890abcdef1234567890abcdef12345678",deviceModelId:n.STAX};it("should return true for valid input",()=>{expect(a.canHandle(e,[o.TRUSTED_NAME])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(a.canHandle(e,[o.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(t,c)=>{expect(a.canHandle(t,[o.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,chainId:void 0},"missing chainId"],[{...e,to:void 0},"missing to"],[{...e,deviceModelId:void 0},"missing device model"]])("should return false for %s",(t,c)=>{expect(a.canHandle(t,[o.TRUSTED_NAME])).toBe(!1)}),it.each([[{...e,to:"0x"},"empty to address (0x)"],[{...e,to:"not-hex"},"non-hex to address"],[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"]])("should return false for %s",(t,c)=>{expect(a.canHandle(t,[o.TRUSTED_NAME])).toBe(!1)})}),describe("load function",()=>{it("should return a payload",async()=>{vi.spyOn(r,"loadCertificate").mockResolvedValue(i);const e={chainId:1,to:"0x1234567890abcdef1234567890abcdef12345678",deviceModelId:n.STAX},t=await a.load(e);expect(d.getTrustedNamePayload).toHaveBeenCalledWith({chainId:1,address:"0x1234567890abcdef1234567890abcdef12345678",challenge:"",types:["eoa"],sources:["ens"]}),expect(r.loadCertificate).toHaveBeenCalledWith({keyId:"testKeyId",keyUsage:"testKeyUsage",targetDevice:n.STAX}),expect(t).toEqual([{type:o.TRUSTED_NAME,payload:"payload",certificate:i}])}),it("should return an error when unable to fetch the datasource",async()=>{const e={chainId:1,to:"0x1234567890abcdef1234567890abcdef12345678",deviceModelId:n.STAX};vi.spyOn(d,"getTrustedNamePayload").mockResolvedValue(s(new Error("error")));const t=await a.load(e);expect(t).toEqual([{type:o.ERROR,error:new Error("error")}])})})});
2
2
  //# sourceMappingURL=TrustedNameContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/trusted-name/domain/TrustedNameContextLoader.test.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport {\n type TrustedNameContextInput,\n TrustedNameContextLoader,\n} from \"@/trusted-name/domain/TrustedNameContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"TrustedNameContextLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TrustedNameContextLoader(\n mockTrustedNameDataSource,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, domain: undefined }, \"missing domain\"],\n [{ ...validInput, challenge: undefined }, \"missing challenge\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing device model\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, domain: \"\" }, \"empty domain\"],\n [{ ...validInput, challenge: \"\" }, \"empty challenge\"],\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, domain: 123 }, \"numeric domain\"],\n [{ ...validInput, challenge: 123 }, \"numeric challenge\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return an error when domain > max length\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return an error when domain is not valid\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello\uD83D\uDC4B\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return a payload\", async () => {\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n targetDevice: DeviceModelId.STAX,\n });\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should return an error when unable to fetch the datasource\", async () => {\n // GIVEN\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // WHEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(Left(new Error(\"error\")));\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport {\n type TrustedNameContextInput,\n TrustedNameContextLoader,\n} from \"@/trusted-name/domain/TrustedNameContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"TrustedNameContextLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TrustedNameContextLoader(\n mockTrustedNameDataSource,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TrustedNameContextInput = {\n chainId: 1,\n to: \"0x1234567890abcdef1234567890abcdef12345678\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, to: undefined }, \"missing to\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing device model\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, to: \"0x\" }, \"empty to address (0x)\"],\n [{ ...validInput, to: \"not-hex\" }, \"non-hex to address\"],\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return a payload\", async () => {\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n const input: TrustedNameContextInput = {\n chainId: 1,\n to: \"0x1234567890abcdef1234567890abcdef12345678\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(\n mockTrustedNameDataSource.getTrustedNamePayload,\n ).toHaveBeenCalledWith({\n chainId: 1,\n address: \"0x1234567890abcdef1234567890abcdef12345678\",\n challenge: \"\",\n types: [\"eoa\"],\n sources: [\"ens\"],\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n targetDevice: DeviceModelId.STAX,\n });\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should return an error when unable to fetch the datasource\", async () => {\n // GIVEN\n const input: TrustedNameContextInput = {\n chainId: 1,\n to: \"0x1234567890abcdef1234567890abcdef12345678\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // WHEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getTrustedNamePayload\",\n ).mockResolvedValue(Left(new Error(\"error\")));\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["DeviceModelId", "Left", "Right", "ClearSignContextType", "TrustedNameContextLoader", "mockLoggerFactory", "mockTrustedNameDataSource", "mockCertificateLoader", "loader", "mockCertificate", "validInput", "input", "_description", "result"]
7
7
  }
@@ -1,11 +1,12 @@
1
1
  import { type LoggerPublisherService } from "@ledgerhq/device-management-kit";
2
2
  import { type ContextModuleConstructorArgs } from "./config/model/ContextModuleBuildArgs";
3
- import { type ContextModuleCalConfig, type ContextModuleDatasourceConfig, type ContextModuleMetadataServiceConfig, type ContextModuleWeb3ChecksConfig } from "./config/model/ContextModuleConfig";
3
+ import { type ContextModuleCalConfig, type ContextModuleConfig, type ContextModuleDatasourceConfig, type ContextModuleMetadataServiceConfig, type ContextModuleWeb3ChecksConfig } from "./config/model/ContextModuleConfig";
4
4
  import { type ContextLoader } from "./shared/domain/ContextLoader";
5
5
  import { type SolanaContextLoader } from "./solana/domain/SolanaContextLoader";
6
6
  import { type TrustedNameDataSource } from "./trusted-name/data/TrustedNameDataSource";
7
7
  import { type TypedDataContextLoader } from "./typed-data/domain/TypedDataContextLoader";
8
8
  import { type ContextModule } from "./ContextModule";
9
+ export declare const DEFAULT_CONFIG: ContextModuleConfig;
9
10
  export declare class ContextModuleBuilder {
10
11
  private config;
11
12
  private originToken?;
@@ -1 +1 @@
1
- {"version":3,"file":"ContextModuleBuilder.d.ts","sourceRoot":"","sources":["../../../src/ContextModuleBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EACL,KAAK,sBAAsB,EAE3B,KAAK,6BAA6B,EAClC,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,EACnC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOrD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAC,CAAS;gBAEjB,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,4BAA4B;IAyBxE;;;;OAIG;IACH,oBAAoB;IAKpB;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,aAAa;IAK/B;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,sBAAsB;IAKjD;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,mBAAmB;IAK3C;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,sBAAsB;IAK9C;;;;;OAKG;IACH,wBAAwB,CACtB,qBAAqB,EAAE,kCAAkC;IAM3D;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,6BAA6B;IAKnE;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,6BAA6B;IAKnE;;;;;OAKG;IACH,wBAAwB,CAAC,UAAU,EAAE,qBAAqB;IAK1D;;;;;OAKG;IACH,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB;IAKvE;;;;OAIG;IACH,KAAK,IAAI,aAAa;CAIvB"}
1
+ {"version":3,"file":"ContextModuleBuilder.d.ts","sourceRoot":"","sources":["../../../src/ContextModuleBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,EACnC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOrD,eAAO,MAAM,cAAc,EAAE,mBAmB5B,CAAC;AAEF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,WAAW,CAAC,CAAS;gBAEjB,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,4BAA4B;IAgBxE;;;;OAIG;IACH,oBAAoB;IAKpB;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,aAAa;IAK/B;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,sBAAsB;IAKjD;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,mBAAmB;IAK3C;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,sBAAsB;IAK9C;;;;;OAKG;IACH,wBAAwB,CACtB,qBAAqB,EAAE,kCAAkC;IAM3D;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,6BAA6B;IAKnE;;;;;OAKG;IACH,mBAAmB,CAAC,gBAAgB,EAAE,6BAA6B;IAKnE;;;;;OAKG;IACH,wBAAwB,CAAC,UAAU,EAAE,qBAAqB;IAK1D;;;;;OAKG;IACH,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB;IAKvE;;;;OAIG;IACH,KAAK,IAAI,aAAa;CAIvB"}
@@ -1,6 +1,6 @@
1
1
  import { type LoggerPublisherService } from "@ledgerhq/device-management-kit";
2
2
  export type ContextModuleConstructorArgs = {
3
3
  originToken?: string;
4
- loggerFactory: (tag: string) => LoggerPublisherService;
4
+ loggerFactory?: (tag: string) => LoggerPublisherService;
5
5
  };
6
6
  //# sourceMappingURL=ContextModuleBuildArgs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContextModuleBuildArgs.d.ts","sourceRoot":"","sources":["../../../../../src/config/model/ContextModuleBuildArgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,MAAM,MAAM,4BAA4B,GAAG;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;CACxD,CAAC"}
1
+ {"version":3,"file":"ContextModuleBuildArgs.d.ts","sourceRoot":"","sources":["../../../../../src/config/model/ContextModuleBuildArgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE9E,MAAM,MAAM,4BAA4B,GAAG;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB,CAAC;CACzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"HttpDynamicNetworkDataSource.d.ts","sourceRoot":"","sources":["../../../../../src/dynamic-network/data/HttpDynamicNetworkDataSource.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAe,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,KAAK,2BAA2B,EAEjC,MAAM,qDAAqD,CAAC;AAK7D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE3E,qBACa,4BAA6B,YAAW,wBAAwB;IAE7C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAGpE,8BAA8B,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;IAyCtD,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,+BAA+B;CAsBxC"}
1
+ {"version":3,"file":"HttpDynamicNetworkDataSource.d.ts","sourceRoot":"","sources":["../../../../../src/dynamic-network/data/HttpDynamicNetworkDataSource.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAe,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EACL,KAAK,2BAA2B,EAEjC,MAAM,qDAAqD,CAAC;AAK7D,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAY3E,qBACa,4BAA6B,YAAW,wBAAwB;IAE7C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,mBAAmB;IAGpE,8BAA8B,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;IAyCtD,OAAO,CAAC,kBAAkB;IAkC1B,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,+BAA+B;CA2BxC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Data source for tracking signing events.
3
+ *
4
+ * Implement this interface to POST signing context to an external API
5
+ * for blind-signing tracking or auditing purposes.
6
+ *
7
+ * The `reportSigningContext` method is called just before the device
8
+ * signature request, after contexts have been provided to the device,
9
+ * when the blind-sign status is known.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const myTracker: SigningTrackerDataSource = {
14
+ * reportSigningContext: async (params) => {
15
+ * await fetch("https://my-api.example.com/signing-events", {
16
+ * method: "POST",
17
+ * headers: { "Content-Type": "application/json" },
18
+ * body: JSON.stringify(params),
19
+ * });
20
+ * },
21
+ * };
22
+ *
23
+ * const contextModule = new ContextModuleBuilder({ ... })
24
+ * .setSigningTrackerDataSource(myTracker)
25
+ * .build();
26
+ * ```
27
+ */
28
+ export interface SigningTrackerDataSource {
29
+ /**
30
+ * Report signing context to an external API.
31
+ *
32
+ * Called with the full signing context info (including `isBlindSign`
33
+ * status) just before the signature is requested from the device.
34
+ *
35
+ * @param params - The signing context info. Shape varies by signer
36
+ * (ETH vs Solana) but always contains `signatureId` and `isBlindSign`.
37
+ */
38
+ reportSigningContext(params: Record<string, unknown>): Promise<void>;
39
+ }
40
+ //# sourceMappingURL=SigningTrackerDataSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SigningTrackerDataSource.d.ts","sourceRoot":"","sources":["../../../../../src/signing-tracker/data/SigningTrackerDataSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;;;;;OAQG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE"}
@@ -5,17 +5,15 @@ import { ClearSignContext, ClearSignContextType } from "../../shared/model/Clear
5
5
  import type { TrustedNameDataSource } from "../../trusted-name/data/TrustedNameDataSource";
6
6
  export type TrustedNameContextInput = {
7
7
  chainId: number;
8
- domain: string;
9
- challenge: string;
8
+ to: string;
10
9
  deviceModelId: DeviceModelId;
11
10
  };
12
11
  export declare class TrustedNameContextLoader implements ContextLoader<TrustedNameContextInput> {
13
- private certificateLoader;
14
12
  private _dataSource;
13
+ private _certificateLoader;
15
14
  private logger;
16
- constructor(dataSource: TrustedNameDataSource, certificateLoader: PkiCertificateLoader, loggerFactory: (tag: string) => LoggerPublisherService);
15
+ constructor(_dataSource: TrustedNameDataSource, _certificateLoader: PkiCertificateLoader, loggerFactory: (tag: string) => LoggerPublisherService);
17
16
  canHandle(input: unknown, expectedTypes: ClearSignContextType[]): input is TrustedNameContextInput;
18
17
  load(input: TrustedNameContextInput): Promise<ClearSignContext[]>;
19
- private isDomainValid;
20
18
  }
21
19
  //# sourceMappingURL=TrustedNameContextLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TrustedNameContextLoader.d.ts","sourceRoot":"","sources":["../../../../../src/trusted-name/domain/TrustedNameContextLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAGvF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAMF,qBACa,wBACX,YAAW,aAAa,CAAC,uBAAuB,CAAC;IAS/C,OAAO,CAAC,iBAAiB;IAP3B,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,MAAM,CAAyB;gBAIrC,UAAU,EAAE,qBAAqB,EAEzB,iBAAiB,EAAE,oBAAoB,EAE/C,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB;IAMxD,SAAS,CACP,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,oBAAoB,EAAE,GACpC,KAAK,IAAI,uBAAuB;IAkB7B,IAAI,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA4CvE,OAAO,CAAC,aAAa;CAQtB"}
1
+ {"version":3,"file":"TrustedNameContextLoader.d.ts","sourceRoot":"","sources":["../../../../../src/trusted-name/domain/TrustedNameContextLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAGvF,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAMF,qBACa,wBACX,YAAW,aAAa,CAAC,uBAAuB,CAAC;IAM/C,OAAO,CAAC,WAAW;IAEnB,OAAO,CAAC,kBAAkB;IAN5B,OAAO,CAAC,MAAM,CAAyB;gBAI7B,WAAW,EAAE,qBAAqB,EAElC,kBAAkB,EAAE,oBAAoB,EAEhD,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,sBAAsB;IAKxD,SAAS,CACP,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,oBAAoB,EAAE,GACpC,KAAK,IAAI,uBAAuB;IAiB7B,IAAI,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;CA8BxE"}