@ledgerhq/context-module 0.0.0-develop-20260423002441 → 0.0.0-develop-20260423152505

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 (26) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/account-ownership/data/AccountOwnershipError.js +2 -0
  3. package/lib/cjs/src/account-ownership/data/AccountOwnershipError.js.map +7 -0
  4. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
  5. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
  6. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
  7. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
  8. package/lib/cjs/src/index.js +1 -1
  9. package/lib/cjs/src/index.js.map +2 -2
  10. package/lib/esm/package.json +1 -1
  11. package/lib/esm/src/account-ownership/data/AccountOwnershipError.js +2 -0
  12. package/lib/esm/src/account-ownership/data/AccountOwnershipError.js.map +7 -0
  13. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
  14. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
  15. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
  16. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
  17. package/lib/esm/src/index.js +1 -1
  18. package/lib/esm/src/index.js.map +2 -2
  19. package/lib/types/src/account-ownership/data/AccountOwnershipError.d.ts +17 -0
  20. package/lib/types/src/account-ownership/data/AccountOwnershipError.d.ts.map +1 -0
  21. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts +8 -0
  22. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts.map +1 -1
  23. package/lib/types/src/index.d.ts +1 -0
  24. package/lib/types/src/index.d.ts.map +1 -1
  25. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  26. package/package.json +5 -5
@@ -58,5 +58,5 @@
58
58
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
59
59
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
60
60
  },
61
- "version": "0.0.0-develop-20260423002441"
61
+ "version": "0.0.0-develop-20260423152505"
62
62
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var o=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var a=(n,r)=>{for(var i in r)o(n,i,{get:r[i],enumerable:!0})},d=(n,r,i,c)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of s(r))!p.call(n,e)&&e!==i&&o(n,e,{get:()=>r[e],enumerable:!(c=t(r,e))||c.enumerable});return n};var u=n=>d(o({},"__esModule",{value:!0}),n);var E={};a(E,{AccountOwnershipError:()=>h});module.exports=u(E);class h extends Error{kind;constructor(r,i){super(i),this.name="AccountOwnershipError",this.kind=r}}0&&(module.exports={AccountOwnershipError});
2
+ //# sourceMappingURL=AccountOwnershipError.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/account-ownership/data/AccountOwnershipError.ts"],
4
+ "sourcesContent": ["/**\n * Classification for errors returned by the trusted metadata service when\n * fetching an account-ownership descriptor.\n *\n * - `verification_failed`: the service was reached and actively refused the\n * pubkey \u2192 address mapping (HTTP 4xx). Treat as a terminal, non-retryable\n * verification failure.\n * - `service_unavailable`: the service could not answer (network failure,\n * HTTP 5xx, malformed response). Treat as transient; fallback UI may be\n * appropriate.\n */\nexport type AccountOwnershipErrorKind =\n | \"verification_failed\"\n | \"service_unavailable\";\n\nexport class AccountOwnershipError extends Error {\n readonly kind: AccountOwnershipErrorKind;\n\n constructor(kind: AccountOwnershipErrorKind, message: string) {\n super(message);\n this.name = \"AccountOwnershipError\";\n this.kind = kind;\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAeO,MAAME,UAA8B,KAAM,CACtC,KAET,YAAYE,EAAiCC,EAAiB,CAC5D,MAAMA,CAAO,EACb,KAAK,KAAO,wBACZ,KAAK,KAAOD,CACd,CACF",
6
+ "names": ["AccountOwnershipError_exports", "__export", "AccountOwnershipError", "__toCommonJS", "kind", "message"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var A=Object.create;var c=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var k=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var C=(r,e)=>{for(var t in e)c(r,t,{get:e[t],enumerable:!0})},f=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of O(e))!l.call(r,o)&&o!==t&&c(r,o,{get:()=>e[o],enumerable:!(n=u(e,o))||n.enumerable});return r};var y=(r,e,t)=>(t=r!=null?A(k(r)):{},f(e||!r||!r.__esModule?c(t,"default",{value:r,enumerable:!0}):t,r)),x=r=>f(c({},"__esModule",{value:!0}),r),h=(r,e,t,n)=>{for(var o=n>1?void 0:n?u(e,t):e,i=r.length-1,d;i>=0;i--)(d=r[i])&&(o=(n?d(e,t,o):d(o))||o);return n&&o&&c(e,t,o),o},g=(r,e)=>(t,n)=>e(t,n,r);var I={};C(I,{HttpAccountOwnershipDataSource:()=>p});module.exports=x(I);var D=y(require("axios")),a=require("inversify"),s=require("purify-ts"),E=require("../../config/di/configTypes"),m=require("../../shared/constant/HttpHeaders"),w=y(require("../../../package.json"));let p=class{constructor(e){this.config=e}async getDescriptor({publicKey:e,address:t,challenge:n,network:o}){try{const i=await D.default.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${t}`,params:{challenge:n,network:o},headers:{[m.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${w.default.version}`,[m.LEDGER_ORIGIN_TOKEN_HEADER]:this.config.originToken}});return i.data?this.isAccountOwnershipDto(i.data)?(0,s.Right)({signedDescriptor:i.data.signedDescriptor,keyId:i.data.keyId,keyUsage:i.data.keyUsage}):(0,s.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):(0,s.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch{return(0,s.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor"))}}isAccountOwnershipDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.signedDescriptor=="string"&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"}};p=h([(0,a.injectable)(),g(0,(0,a.inject)(E.configTypes.Config))],p);0&&(module.exports={HttpAccountOwnershipDataSource});
1
+ "use strict";var A=Object.create;var a=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty;var x=(r,e)=>{for(var t in e)a(r,t,{get:e[t],enumerable:!0})},y=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of k(e))!v.call(r,n)&&n!==t&&a(r,n,{get:()=>e[n],enumerable:!(o=h(e,n))||o.enumerable});return r};var d=(r,e,t)=>(t=r!=null?A(O(r)):{},y(e||!r||!r.__esModule?a(t,"default",{value:r,enumerable:!0}):t,r)),C=r=>y(a({},"__esModule",{value:!0}),r),l=(r,e,t,o)=>{for(var n=o>1?void 0:o?h(e,t):e,s=r.length-1,g;s>=0;s--)(g=r[s])&&(n=(o?g(e,t,n):g(n))||n);return o&&n&&a(e,t,n),n},w=(r,e)=>(t,o)=>e(t,o,r);var _={};x(_,{HttpAccountOwnershipDataSource:()=>p});module.exports=C(_);var f=d(require("axios")),u=require("inversify"),c=require("purify-ts"),i=require("../../account-ownership/data/AccountOwnershipError"),E=require("../../config/di/configTypes"),m=require("../../shared/constant/HttpHeaders"),D=d(require("../../../package.json"));let p=class{constructor(e){this.config=e}async getDescriptor({publicKey:e,address:t,challenge:o,network:n}){try{const s=await f.default.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${t}`,params:{challenge:o,network:n},headers:{[m.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${D.default.version}`,[m.LEDGER_ORIGIN_TOKEN_HEADER]:this.config.originToken}});return s.data?this.isAccountOwnershipDto(s.data)?(0,c.Right)({signedDescriptor:s.data.signedDescriptor,keyId:s.data.keyId,keyUsage:s.data.keyUsage}):(0,c.Left)(new i.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):(0,c.Left)(new i.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(s){return(0,c.Left)(this.classifyError(s))}}classifyError(e){if(f.default.isAxiosError(e)&&e.response){const t=e.response.status,o=this.extractBackendMessage(e.response.data,e.message);return t>=400&&t<500?new i.AccountOwnershipError("verification_failed",o):new i.AccountOwnershipError("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${t}: ${o}`)}return new i.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}extractBackendMessage(e,t){return typeof e=="string"&&e.length>0?e:typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"&&e.message.length>0?e.message:t}isAccountOwnershipDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.signedDescriptor=="string"&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"}};p=l([(0,u.injectable)(),w(0,(0,u.inject)(E.configTypes.Config))],p);0&&(module.exports={HttpAccountOwnershipDataSource});
2
2
  //# sourceMappingURL=HttpAccountOwnershipDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/account-ownership/data/HttpAccountOwnershipDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport {\n type AccountOwnershipDataSource,\n type AccountOwnershipDescriptor,\n type GetAccountOwnershipParams,\n} from \"@/account-ownership/data/AccountOwnershipDataSource\";\nimport { type AccountOwnershipDto } from \"@/account-ownership/data/dto/AccountOwnershipDto\";\nimport { configTypes } from \"@/config/di/configTypes\";\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\n@injectable()\nexport class HttpAccountOwnershipDataSource\n implements AccountOwnershipDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDescriptor({\n publicKey,\n address,\n challenge,\n network,\n }: GetAccountOwnershipParams): Promise<\n Either<Error, AccountOwnershipDescriptor>\n > {\n try {\n const response = await axios.request<AccountOwnershipDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/concordium/owner/${publicKey}/${address}`,\n params: {\n challenge,\n network,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n if (!response.data) {\n return Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isAccountOwnershipDto(response.data)) {\n return Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n );\n }\n\n return Right({\n signedDescriptor: response.data.signedDescriptor,\n keyId: response.data.keyId,\n keyUsage: response.data.keyUsage,\n });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n );\n }\n }\n\n private isAccountOwnershipDto(value: unknown): value is AccountOwnershipDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\n );\n }\n}\n"],
5
- "mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAyC,qBAQzCC,EAA4B,mCAE5BC,EAGO,yCACPC,EAAoB,iCAGb,IAAMC,EAAN,KAEP,CACE,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,cAAc,CAClB,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAEE,CACA,GAAI,CACF,MAAMC,EAAW,MAAM,EAAAC,QAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,wBAAwBL,CAAS,IAAIC,CAAO,GACzF,OAAQ,CACN,UAAAC,EACA,QAAAC,CACF,EACA,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAG,QAAQ,OAAO,GACjE,CAAC,4BAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKF,EAAS,KAQT,KAAK,sBAAsBA,EAAS,IAAI,KAQtC,SAAM,CACX,iBAAkBA,EAAS,KAAK,iBAChC,MAAOA,EAAS,KAAK,MACrB,SAAUA,EAAS,KAAK,QAC1B,CAAC,KAXQ,QACL,IAAI,MACF,yEACF,CACF,KAZO,QACL,IAAI,MACF,2EACF,CACF,CAgBJ,MAAiB,CACf,SAAO,QACL,IAAI,MACF,8FACF,CACF,CACF,CACF,CAEQ,sBAAsBG,EAA8C,CAC1E,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,qBAAsBA,GACtB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EAxEaT,EAANU,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,IAJjBX",
6
- "names": ["HttpAccountOwnershipDataSource_exports", "__export", "HttpAccountOwnershipDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_configTypes", "import_HttpHeaders", "import_package", "HttpAccountOwnershipDataSource", "config", "publicKey", "address", "challenge", "network", "response", "axios", "PACKAGE", "value", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport {\n type AccountOwnershipDataSource,\n type AccountOwnershipDescriptor,\n type GetAccountOwnershipParams,\n} from \"@/account-ownership/data/AccountOwnershipDataSource\";\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\nimport { type AccountOwnershipDto } from \"@/account-ownership/data/dto/AccountOwnershipDto\";\nimport { configTypes } from \"@/config/di/configTypes\";\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\n@injectable()\nexport class HttpAccountOwnershipDataSource\n implements AccountOwnershipDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDescriptor({\n publicKey,\n address,\n challenge,\n network,\n }: GetAccountOwnershipParams): Promise<\n Either<Error, AccountOwnershipDescriptor>\n > {\n try {\n const response = await axios.request<AccountOwnershipDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/concordium/owner/${publicKey}/${address}`,\n params: {\n challenge,\n network,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n if (!response.data) {\n return Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isAccountOwnershipDto(response.data)) {\n return Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n );\n }\n\n return Right({\n signedDescriptor: response.data.signedDescriptor,\n keyId: response.data.keyId,\n keyUsage: response.data.keyUsage,\n });\n } catch (error) {\n return Left(this.classifyError(error));\n }\n }\n\n /**\n * Classifies a caught request error into an {@link AccountOwnershipError}:\n * HTTP 4xx responses carry the backend's `message` verbatim and are marked\n * as `verification_failed`; everything else (network failure, 5xx,\n * non-axios errors) is marked as `service_unavailable`.\n */\n private classifyError(error: unknown): AccountOwnershipError {\n if (axios.isAxiosError(error) && error.response) {\n const status = error.response.status;\n const backendMessage = this.extractBackendMessage(\n error.response.data,\n error.message,\n );\n\n if (status >= 400 && status < 500) {\n return new AccountOwnershipError(\"verification_failed\", backendMessage);\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n `[ContextModule] HttpAccountOwnershipDataSource: backend ${status}: ${backendMessage}`,\n );\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n );\n }\n\n private extractBackendMessage(data: unknown, fallback: string): string {\n if (typeof data === \"string\" && data.length > 0) {\n return data;\n }\n if (\n typeof data === \"object\" &&\n data !== null &&\n \"message\" in data &&\n typeof (data as { message: unknown }).message === \"string\" &&\n (data as { message: string }).message.length > 0\n ) {\n return (data as { message: string }).message;\n }\n return fallback;\n }\n\n private isAccountOwnershipDto(value: unknown): value is AccountOwnershipDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\n );\n }\n}\n"],
5
+ "mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAyC,qBAOzCC,EAAsC,0DAEtCC,EAA4B,mCAE5BC,EAGO,yCACPC,EAAoB,iCAGb,IAAMC,EAAN,KAEP,CACE,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,cAAc,CAClB,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAEE,CACA,GAAI,CACF,MAAMC,EAAW,MAAM,EAAAC,QAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,wBAAwBL,CAAS,IAAIC,CAAO,GACzF,OAAQ,CACN,UAAAC,EACA,QAAAC,CACF,EACA,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAG,QAAQ,OAAO,GACjE,CAAC,4BAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKF,EAAS,KAST,KAAK,sBAAsBA,EAAS,IAAI,KAStC,SAAM,CACX,iBAAkBA,EAAS,KAAK,iBAChC,MAAOA,EAAS,KAAK,MACrB,SAAUA,EAAS,KAAK,QAC1B,CAAC,KAZQ,QACL,IAAI,wBACF,sBACA,yEACF,CACF,KAdO,QACL,IAAI,wBACF,sBACA,2EACF,CACF,CAiBJ,OAASG,EAAO,CACd,SAAO,QAAK,KAAK,cAAcA,CAAK,CAAC,CACvC,CACF,CAQQ,cAAcA,EAAuC,CAC3D,GAAI,EAAAF,QAAM,aAAaE,CAAK,GAAKA,EAAM,SAAU,CAC/C,MAAMC,EAASD,EAAM,SAAS,OACxBE,EAAiB,KAAK,sBAC1BF,EAAM,SAAS,KACfA,EAAM,OACR,EAEA,OAAIC,GAAU,KAAOA,EAAS,IACrB,IAAI,wBAAsB,sBAAuBC,CAAc,EAGjE,IAAI,wBACT,sBACA,2DAA2DD,CAAM,KAAKC,CAAc,EACtF,CACF,CAEA,OAAO,IAAI,wBACT,sBACA,8FACF,CACF,CAEQ,sBAAsBC,EAAeC,EAA0B,CACrE,OAAI,OAAOD,GAAS,UAAYA,EAAK,OAAS,EACrCA,EAGP,OAAOA,GAAS,UAChBA,IAAS,MACT,YAAaA,GACb,OAAQA,EAA8B,SAAY,UACjDA,EAA6B,QAAQ,OAAS,EAEvCA,EAA6B,QAEhCC,CACT,CAEQ,sBAAsBC,EAA8C,CAC1E,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,qBAAsBA,GACtB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EApHad,EAANe,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,IAJjBhB",
6
+ "names": ["HttpAccountOwnershipDataSource_exports", "__export", "HttpAccountOwnershipDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_AccountOwnershipError", "import_configTypes", "import_HttpHeaders", "import_package", "HttpAccountOwnershipDataSource", "config", "publicKey", "address", "challenge", "network", "response", "axios", "PACKAGE", "error", "status", "backendMessage", "data", "fallback", "value", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var p=Object.create;var d=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var h=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var g=(t,o,e,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let c of k(o))!f.call(t,c)&&c!==e&&d(t,c,{get:()=>o[c],enumerable:!(s=m(o,c))||s.enumerable});return t};var u=(t,o,e)=>(e=t!=null?p(h(t)):{},g(o||!t||!t.__esModule?d(e,"default",{value:t,enumerable:!0}):e,t));var a=u(require("axios")),r=require("purify-ts"),i=require("../../shared/constant/HttpHeaders"),l=u(require("../../../package.json")),n=require("./HttpAccountOwnershipDataSource");vi.mock("axios");describe("HttpAccountOwnershipDataSource",()=>{const t={metadataServiceDomain:{url:"https://nft.api.live.ledger-test.com"},originToken:"test-origin-token"},o={signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"};beforeEach(()=>{vi.clearAllMocks()}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:o});const s=await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e);expect(a.default.request).toHaveBeenCalledWith({method:"GET",url:"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",params:{challenge:"0xabcdef",network:"mainnet"},headers:{[i.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${l.default.version}`,[i.LEDGER_ORIGIN_TOKEN_HEADER]:"test-origin-token"}}),expect(s).toEqual((0,r.Right)({signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"}))}),it("should pass testnet network parameter",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"testnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:o}),await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0xabcdef",network:"testnet"}}))}),it("should return error when response data is empty",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:null});const s=await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e);expect(s).toEqual((0,r.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response")))}),it("should return error when signedDescriptor is missing",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:{keyId:"domain_metadata_key",keyUsage:"trusted_name"}});const s=await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e);expect(s).toEqual((0,r.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when keyId is missing",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:{signedDescriptor:"signed-descriptor-data",keyUsage:"trusted_name"}});const s=await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e);expect(s).toEqual((0,r.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when keyUsage is missing",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:{signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key"}});const s=await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e);expect(s).toEqual((0,r.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when field has wrong type",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:{signedDescriptor:"signed-descriptor-data",keyId:123,keyUsage:"trusted_name"}});const s=await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e);expect(s).toEqual((0,r.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when axios request fails",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockRejectedValue(new Error("Network error"));const s=await new n.HttpAccountOwnershipDataSource(t).getDescriptor(e);expect(s).toEqual((0,r.Left)(new Error("[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"},s={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:o}),await new n.HttpAccountOwnershipDataSource(e).getDescriptor(s),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",headers:expect.objectContaining({[i.LEDGER_ORIGIN_TOKEN_HEADER]:"custom-token"})}))})})});
1
+ "use strict";var x=Object.create;var m=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var y=(s,r,a,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of v(r))!h.call(s,t)&&t!==a&&m(s,t,{get:()=>r[t],enumerable:!(e=k(r,t))||e.enumerable});return s};var f=(s,r,a)=>(a=s!=null?x(w(s)):{},y(r||!s||!s.__esModule?m(a,"default",{value:s,enumerable:!0}):a,s));var o=f(require("axios")),d=require("purify-ts"),u=require("../../account-ownership/data/AccountOwnershipError"),l=require("../../shared/constant/HttpHeaders"),g=f(require("../../../package.json")),n=require("./HttpAccountOwnershipDataSource");vi.mock("axios");function c(s,r,a="Request failed"){const e=new o.AxiosError(a);return e.message=a,e.response={status:s,data:r,statusText:"",headers:{},config:{}},e}describe("HttpAccountOwnershipDataSource",()=>{const s={metadataServiceDomain:{url:"https://nft.api.live.ledger-test.com"},originToken:"test-origin-token"},r={signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"},a={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(o.default,"isAxiosError").mockImplementation(e=>e instanceof o.AxiosError)}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{vi.spyOn(o.default,"request").mockResolvedValue({status:200,data:r});const e=await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a);expect(o.default.request).toHaveBeenCalledWith({method:"GET",url:"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",params:{challenge:"0xabcdef",network:"mainnet"},headers:{[l.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${g.default.version}`,[l.LEDGER_ORIGIN_TOKEN_HEADER]:"test-origin-token"}}),expect(e).toEqual((0,d.Right)(r))}),it("should pass testnet network parameter",async()=>{vi.spyOn(o.default,"request").mockResolvedValue({status:200,data:r}),await new n.HttpAccountOwnershipDataSource(s).getDescriptor({...a,network:"testnet"}),expect(o.default.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0xabcdef",network:"testnet"}}))}),it("should classify empty response as service_unavailable",async()=>{vi.spyOn(o.default,"request").mockResolvedValue({status:200,data:null});const e=await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a);expect(e.isLeft()).toBe(!0);const t=e.extract();expect(t).toBeInstanceOf(u.AccountOwnershipError),expect(t.kind).toBe("service_unavailable"),expect(t.message).toContain("unexpected empty response")}),it.each([["signedDescriptor missing",{keyId:"k",keyUsage:"u"}],["keyId missing",{signedDescriptor:"s",keyUsage:"u"}],["keyUsage missing",{signedDescriptor:"s",keyId:"k"}],["wrong field type",{signedDescriptor:"s",keyId:123,keyUsage:"u"}]])("should classify malformed response (%s) as service_unavailable",async(e,t)=>{vi.spyOn(o.default,"request").mockResolvedValue({status:200,data:t});const i=await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a);expect(i.isLeft()).toBe(!0);const p=i.extract();expect(p).toBeInstanceOf(u.AccountOwnershipError),expect(p.kind).toBe("service_unavailable"),expect(p.message).toContain("invalid response format")}),it("should classify 422 with { message } body as verification_failed and forward backend message",async()=>{const e="Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet";vi.spyOn(o.default,"request").mockRejectedValue(c(422,{message:e}));const t=await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a);expect(t.isLeft()).toBe(!0);const i=t.extract();expect(i).toBeInstanceOf(u.AccountOwnershipError),expect(i.kind).toBe("verification_failed"),expect(i.message).toBe(e)}),it.each([400,401,403,404,429])("should classify HTTP %s as verification_failed",async e=>{vi.spyOn(o.default,"request").mockRejectedValue(c(e,{message:"refused"}));const i=(await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a)).extract();expect(i.kind).toBe("verification_failed"),expect(i.message).toBe("refused")}),it("should classify 500 as service_unavailable with status prefix",async()=>{vi.spyOn(o.default,"request").mockRejectedValue(c(500,{message:"internal error"}));const t=(await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a)).extract();expect(t.kind).toBe("service_unavailable"),expect(t.message).toContain("backend 500"),expect(t.message).toContain("internal error")}),it.each([502,503,504])("should classify HTTP %s as service_unavailable",async e=>{vi.spyOn(o.default,"request").mockRejectedValue(c(e,{message:"down"}));const i=(await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a)).extract();expect(i.kind).toBe("service_unavailable")}),it("should accept string body and forward it as message on 4xx",async()=>{vi.spyOn(o.default,"request").mockRejectedValue(c(422,"plain text reason"));const t=(await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("plain text reason")}),it("should fall back to axios error message when body has no message",async()=>{vi.spyOn(o.default,"request").mockRejectedValue(c(422,{},"Request failed with status code 422"));const t=(await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("Request failed with status code 422")}),it("should fall back to axios error message when body message is empty",async()=>{vi.spyOn(o.default,"request").mockRejectedValue(c(422,{message:""},"Request failed with status code 422"));const t=(await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("Request failed with status code 422")}),it("should classify non-axios / network errors as service_unavailable",async()=>{vi.spyOn(o.default,"request").mockRejectedValue(new Error("ECONNREFUSED"));const e=await new n.HttpAccountOwnershipDataSource(s).getDescriptor(a);expect(e).toEqual((0,d.Left)(new u.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"};vi.spyOn(o.default,"request").mockResolvedValue({status:200,data:r}),await new n.HttpAccountOwnershipDataSource(e).getDescriptor(a),expect(o.default.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",headers:expect.objectContaining({[l.LEDGER_ORIGIN_TOKEN_HEADER]:"custom-token"})}))})})});
2
2
  //# sourceMappingURL=HttpAccountOwnershipDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/account-ownership/data/HttpAccountOwnershipDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\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\nimport { HttpAccountOwnershipDataSource } from \"./HttpAccountOwnershipDataSource\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpAccountOwnershipDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger-test.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const validDto = {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getDescriptor\", () => {\n it(\"should return descriptor on successful request\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n params: {\n challenge: \"0xabcdef\",\n network: \"mainnet\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n }),\n );\n });\n\n it(\"should pass testnet network parameter\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"testnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n // WHEN\n await new HttpAccountOwnershipDataSource(config).getDescriptor(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0xabcdef\",\n network: \"testnet\",\n },\n }),\n );\n });\n\n it(\"should return error when response data is empty\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when signedDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when keyId is missing\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signedDescriptor: \"signed-descriptor-data\",\n keyUsage: \"trusted_name\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when keyUsage is missing\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when field has wrong type\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: 123,\n keyUsage: \"trusted_name\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios request fails\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"custom-token\",\n } as ContextModuleServiceConfig;\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n // WHEN\n await new HttpAccountOwnershipDataSource(customConfig).getDescriptor(\n params,\n );\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-token\",\n }),\n }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_axios", "import_purify_ts", "import_HttpHeaders", "import_package", "import_HttpAccountOwnershipDataSource", "config", "validDto", "params", "axios", "result", "PACKAGE", "customConfig"]
4
+ "sourcesContent": ["import axios, { AxiosError, type AxiosResponse } from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\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\nimport { HttpAccountOwnershipDataSource } from \"./HttpAccountOwnershipDataSource\";\n\nvi.mock(\"axios\");\n\nfunction makeAxiosError(\n status: number,\n data: unknown,\n message = \"Request failed\",\n): AxiosError {\n const err = new AxiosError(message);\n err.message = message;\n err.response = {\n status,\n data,\n statusText: \"\",\n headers: {},\n config: {} as never,\n } as AxiosResponse;\n return err;\n}\n\ndescribe(\"HttpAccountOwnershipDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger-test.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const validDto = {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n };\n\n const baseParams = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.spyOn(axios, \"isAxiosError\").mockImplementation(\n (value: unknown): value is AxiosError => value instanceof AxiosError,\n );\n });\n\n describe(\"getDescriptor\", () => {\n it(\"should return descriptor on successful request\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n params: {\n challenge: \"0xabcdef\",\n network: \"mainnet\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(Right(validDto));\n });\n\n it(\"should pass testnet network parameter\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n await new HttpAccountOwnershipDataSource(config).getDescriptor({\n ...baseParams,\n network: \"testnet\",\n });\n\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0xabcdef\",\n network: \"testnet\",\n },\n }),\n );\n });\n\n it(\"should classify empty response as service_unavailable\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"unexpected empty response\");\n });\n\n it.each([\n [\"signedDescriptor missing\", { keyId: \"k\", keyUsage: \"u\" }],\n [\"keyId missing\", { signedDescriptor: \"s\", keyUsage: \"u\" }],\n [\"keyUsage missing\", { signedDescriptor: \"s\", keyId: \"k\" }],\n [\n \"wrong field type\",\n { signedDescriptor: \"s\", keyId: 123, keyUsage: \"u\" },\n ],\n ])(\n \"should classify malformed response (%s) as service_unavailable\",\n async (_label, data) => {\n vi.spyOn(axios, \"request\").mockResolvedValue({ status: 200, data });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"invalid response format\");\n },\n );\n\n it(\"should classify 422 with { message } body as verification_failed and forward backend message\", async () => {\n const backendMessage =\n \"Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet\";\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, { message: backendMessage }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(backendMessage);\n });\n\n it.each([400, 401, 403, 404, 429])(\n \"should classify HTTP %s as verification_failed\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(status, { message: \"refused\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"refused\");\n },\n );\n\n it(\"should classify 500 as service_unavailable with status prefix\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(500, { message: \"internal error\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"backend 500\");\n expect(err.message).toContain(\"internal error\");\n });\n\n it.each([502, 503, 504])(\n \"should classify HTTP %s as service_unavailable\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(status, { message: \"down\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n },\n );\n\n it(\"should accept string body and forward it as message on 4xx\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, \"plain text reason\"),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"plain text reason\");\n });\n\n it(\"should fall back to axios error message when body has no message\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, {}, \"Request failed with status code 422\"),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Request failed with status code 422\");\n });\n\n it(\"should fall back to axios error message when body message is empty\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(\n 422,\n { message: \"\" },\n \"Request failed with status code 422\",\n ),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Request failed with status code 422\");\n });\n\n it(\"should classify non-axios / network errors as service_unavailable\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"ECONNREFUSED\"));\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result).toEqual(\n Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"custom-token\",\n } as ContextModuleServiceConfig;\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n await new HttpAccountOwnershipDataSource(customConfig).getDescriptor(\n baseParams,\n );\n\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-token\",\n }),\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_axios", "import_purify_ts", "import_AccountOwnershipError", "import_HttpHeaders", "import_package", "import_HttpAccountOwnershipDataSource", "makeAxiosError", "status", "data", "message", "err", "config", "validDto", "baseParams", "axios", "value", "result", "PACKAGE", "_label", "backendMessage", "customConfig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var C=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(t,e,f,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let x of l(e))!d.call(t,x)&&x!==f&&C(t,x,{get:()=>e[x],enumerable:!(m=n(e,x))||m.enumerable});return t},r=(t,e,f)=>(p(t,e,"default"),f&&p(f,e,"default"));var M=t=>p(C({},"__esModule",{value:!0}),t);var o={};module.exports=M(o);r(o,require("./account-ownership/data/AccountOwnershipDataSource"),module.exports);r(o,require("./account-ownership/data/HttpAccountOwnershipDataSource"),module.exports);r(o,require("./account-ownership/domain/AccountOwnershipContextLoader"),module.exports);r(o,require("./calldata/data/CalldataDescriptorDataSource"),module.exports);r(o,require("./calldata/data/HttpCalldataDescriptorDataSource"),module.exports);r(o,require("./calldata/domain/CalldataContextLoader"),module.exports);r(o,require("./ContextModule"),module.exports);r(o,require("./ContextModuleBuilder"),module.exports);r(o,require("./DefaultContextModule"),module.exports);r(o,require("./dynamic-network/data/DynamicNetworkDataSource"),module.exports);r(o,require("./dynamic-network/data/HttpDynamicNetworkDataSource"),module.exports);r(o,require("./dynamic-network/domain/DynamicNetworkContextLoader"),module.exports);r(o,require("./dynamic-network/model/DynamicNetworkConfiguration"),module.exports);r(o,require("./external-plugin/data/ExternalPluginDataSource"),module.exports);r(o,require("./external-plugin/data/HttpExternalPluginDataSource"),module.exports);r(o,require("./external-plugin/domain/ExternalPluginContextLoader"),module.exports);r(o,require("./gated-signing/data/GatedDescriptorDataSource"),module.exports);r(o,require("./gated-signing/data/HttpGatedDescriptorDataSource"),module.exports);r(o,require("./gated-signing/domain/GatedSigningContextLoader"),module.exports);r(o,require("./gated-signing/domain/GatedSigningTypedDataContextLoader"),module.exports);r(o,require("./nft/data/HttpNftDataSource"),module.exports);r(o,require("./nft/data/NftDataSource"),module.exports);r(o,require("./nft/domain/NftContextFieldLoader"),module.exports);r(o,require("./nft/domain/NftContextLoader"),module.exports);r(o,require("./pki/data/HttpPkiCertificateDataSource"),module.exports);r(o,require("./pki/data/PkiCertificateDataSource"),module.exports);r(o,require("./pki/domain/DefaultPkiCertificateLoader"),module.exports);r(o,require("./pki/domain/PkiCertificateLoader"),module.exports);r(o,require("./pki/model/KeyId"),module.exports);r(o,require("./pki/model/KeyUsage"),module.exports);r(o,require("./pki/model/PkiCertificate"),module.exports);r(o,require("./pki/model/PkiCertificateInfo"),module.exports);r(o,require("./proxy/data/HttpProxyDataSource"),module.exports);r(o,require("./proxy/data/HttpSafeProxyDataSource"),module.exports);r(o,require("./proxy/data/ProxyDataSource"),module.exports);r(o,require("./proxy/domain/ProxyContextFieldLoader"),module.exports);r(o,require("./reporter/data/BlindSigningReporterDatasource"),module.exports);r(o,require("./reporter/data/HttpBlindSigningReporterDatasource"),module.exports);r(o,require("./reporter/domain/BlindSigningReporter"),module.exports);r(o,require("./reporter/domain/DefaultBlindSigningReporter"),module.exports);r(o,require("./reporter/model/BlindSigningEvent"),module.exports);r(o,require("./reporter/model/BlindSigningModelId"),module.exports);r(o,require("./shared/domain/ContextFieldLoader"),module.exports);r(o,require("./shared/domain/ContextLoader"),module.exports);r(o,require("./shared/model/ClearSignContext"),module.exports);r(o,require("./shared/model/GenericPath"),module.exports);r(o,require("./shared/model/SolanaContextTypes"),module.exports);r(o,require("./shared/model/TransactionSubset"),module.exports);r(o,require("./shared/model/TypedDataClearSignContext"),module.exports);r(o,require("./shared/model/TypedDataContext"),module.exports);r(o,require("./solana/data/HttpSolanaOwnerInfoDataSource"),module.exports);r(o,require("./solana/data/SolanaDataSource"),module.exports);r(o,require("./solana/domain/DefaultSolanaContextLoader"),module.exports);r(o,require("./solana/domain/SolanaContextLoader"),module.exports);r(o,require("./solana/domain/solanaContextTypes"),module.exports);r(o,require("./token/data/HttpTokenDataSource"),module.exports);r(o,require("./token/data/TokenDataSource"),module.exports);r(o,require("./token/domain/TokenContextFieldLoader"),module.exports);r(o,require("./token/domain/TokenContextLoader"),module.exports);r(o,require("./trusted-name/data/HttpTrustedNameDataSource"),module.exports);r(o,require("./trusted-name/data/TrustedNameDataSource"),module.exports);r(o,require("./trusted-name/domain/TrustedNameContextFieldLoader"),module.exports);r(o,require("./trusted-name/domain/TrustedNameContextLoader"),module.exports);r(o,require("./typed-data/data/HttpTypedDataDataSource"),module.exports);r(o,require("./typed-data/data/TypedDataDataSource"),module.exports);r(o,require("./typed-data/domain/DefaultTypedDataContextLoader"),module.exports);r(o,require("./typed-data/domain/TypedDataContextLoader"),module.exports);r(o,require("./typed-data/utils/getSchemaHash"),module.exports);r(o,require("./uniswap/data/AbiDecoderDataSource"),module.exports);r(o,require("./uniswap/data/CommandDecoderDataSource"),module.exports);r(o,require("./uniswap/data/DefaultCommandDecoderDataSource"),module.exports);r(o,require("./uniswap/data/EthersAbiDecoderDataSource"),module.exports);r(o,require("./uniswap/domain/UniswapContextLoader"),module.exports);0&&(module.exports={...require("./account-ownership/data/AccountOwnershipDataSource"),...require("./account-ownership/data/HttpAccountOwnershipDataSource"),...require("./account-ownership/domain/AccountOwnershipContextLoader"),...require("./calldata/data/CalldataDescriptorDataSource"),...require("./calldata/data/HttpCalldataDescriptorDataSource"),...require("./calldata/domain/CalldataContextLoader"),...require("./ContextModule"),...require("./ContextModuleBuilder"),...require("./DefaultContextModule"),...require("./dynamic-network/data/DynamicNetworkDataSource"),...require("./dynamic-network/data/HttpDynamicNetworkDataSource"),...require("./dynamic-network/domain/DynamicNetworkContextLoader"),...require("./dynamic-network/model/DynamicNetworkConfiguration"),...require("./external-plugin/data/ExternalPluginDataSource"),...require("./external-plugin/data/HttpExternalPluginDataSource"),...require("./external-plugin/domain/ExternalPluginContextLoader"),...require("./gated-signing/data/GatedDescriptorDataSource"),...require("./gated-signing/data/HttpGatedDescriptorDataSource"),...require("./gated-signing/domain/GatedSigningContextLoader"),...require("./gated-signing/domain/GatedSigningTypedDataContextLoader"),...require("./nft/data/HttpNftDataSource"),...require("./nft/data/NftDataSource"),...require("./nft/domain/NftContextFieldLoader"),...require("./nft/domain/NftContextLoader"),...require("./pki/data/HttpPkiCertificateDataSource"),...require("./pki/data/PkiCertificateDataSource"),...require("./pki/domain/DefaultPkiCertificateLoader"),...require("./pki/domain/PkiCertificateLoader"),...require("./pki/model/KeyId"),...require("./pki/model/KeyUsage"),...require("./pki/model/PkiCertificate"),...require("./pki/model/PkiCertificateInfo"),...require("./proxy/data/HttpProxyDataSource"),...require("./proxy/data/HttpSafeProxyDataSource"),...require("./proxy/data/ProxyDataSource"),...require("./proxy/domain/ProxyContextFieldLoader"),...require("./reporter/data/BlindSigningReporterDatasource"),...require("./reporter/data/HttpBlindSigningReporterDatasource"),...require("./reporter/domain/BlindSigningReporter"),...require("./reporter/domain/DefaultBlindSigningReporter"),...require("./reporter/model/BlindSigningEvent"),...require("./reporter/model/BlindSigningModelId"),...require("./shared/domain/ContextFieldLoader"),...require("./shared/domain/ContextLoader"),...require("./shared/model/ClearSignContext"),...require("./shared/model/GenericPath"),...require("./shared/model/SolanaContextTypes"),...require("./shared/model/TransactionSubset"),...require("./shared/model/TypedDataClearSignContext"),...require("./shared/model/TypedDataContext"),...require("./solana/data/HttpSolanaOwnerInfoDataSource"),...require("./solana/data/SolanaDataSource"),...require("./solana/domain/DefaultSolanaContextLoader"),...require("./solana/domain/SolanaContextLoader"),...require("./solana/domain/solanaContextTypes"),...require("./token/data/HttpTokenDataSource"),...require("./token/data/TokenDataSource"),...require("./token/domain/TokenContextFieldLoader"),...require("./token/domain/TokenContextLoader"),...require("./trusted-name/data/HttpTrustedNameDataSource"),...require("./trusted-name/data/TrustedNameDataSource"),...require("./trusted-name/domain/TrustedNameContextFieldLoader"),...require("./trusted-name/domain/TrustedNameContextLoader"),...require("./typed-data/data/HttpTypedDataDataSource"),...require("./typed-data/data/TypedDataDataSource"),...require("./typed-data/domain/DefaultTypedDataContextLoader"),...require("./typed-data/domain/TypedDataContextLoader"),...require("./typed-data/utils/getSchemaHash"),...require("./uniswap/data/AbiDecoderDataSource"),...require("./uniswap/data/CommandDecoderDataSource"),...require("./uniswap/data/DefaultCommandDecoderDataSource"),...require("./uniswap/data/EthersAbiDecoderDataSource"),...require("./uniswap/domain/UniswapContextLoader")});
1
+ "use strict";var C=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var p=(t,e,f,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let x of l(e))!d.call(t,x)&&x!==f&&C(t,x,{get:()=>e[x],enumerable:!(m=n(e,x))||m.enumerable});return t},r=(t,e,f)=>(p(t,e,"default"),f&&p(f,e,"default"));var M=t=>p(C({},"__esModule",{value:!0}),t);var o={};module.exports=M(o);r(o,require("./account-ownership/data/AccountOwnershipDataSource"),module.exports);r(o,require("./account-ownership/data/AccountOwnershipError"),module.exports);r(o,require("./account-ownership/data/HttpAccountOwnershipDataSource"),module.exports);r(o,require("./account-ownership/domain/AccountOwnershipContextLoader"),module.exports);r(o,require("./calldata/data/CalldataDescriptorDataSource"),module.exports);r(o,require("./calldata/data/HttpCalldataDescriptorDataSource"),module.exports);r(o,require("./calldata/domain/CalldataContextLoader"),module.exports);r(o,require("./ContextModule"),module.exports);r(o,require("./ContextModuleBuilder"),module.exports);r(o,require("./DefaultContextModule"),module.exports);r(o,require("./dynamic-network/data/DynamicNetworkDataSource"),module.exports);r(o,require("./dynamic-network/data/HttpDynamicNetworkDataSource"),module.exports);r(o,require("./dynamic-network/domain/DynamicNetworkContextLoader"),module.exports);r(o,require("./dynamic-network/model/DynamicNetworkConfiguration"),module.exports);r(o,require("./external-plugin/data/ExternalPluginDataSource"),module.exports);r(o,require("./external-plugin/data/HttpExternalPluginDataSource"),module.exports);r(o,require("./external-plugin/domain/ExternalPluginContextLoader"),module.exports);r(o,require("./gated-signing/data/GatedDescriptorDataSource"),module.exports);r(o,require("./gated-signing/data/HttpGatedDescriptorDataSource"),module.exports);r(o,require("./gated-signing/domain/GatedSigningContextLoader"),module.exports);r(o,require("./gated-signing/domain/GatedSigningTypedDataContextLoader"),module.exports);r(o,require("./nft/data/HttpNftDataSource"),module.exports);r(o,require("./nft/data/NftDataSource"),module.exports);r(o,require("./nft/domain/NftContextFieldLoader"),module.exports);r(o,require("./nft/domain/NftContextLoader"),module.exports);r(o,require("./pki/data/HttpPkiCertificateDataSource"),module.exports);r(o,require("./pki/data/PkiCertificateDataSource"),module.exports);r(o,require("./pki/domain/DefaultPkiCertificateLoader"),module.exports);r(o,require("./pki/domain/PkiCertificateLoader"),module.exports);r(o,require("./pki/model/KeyId"),module.exports);r(o,require("./pki/model/KeyUsage"),module.exports);r(o,require("./pki/model/PkiCertificate"),module.exports);r(o,require("./pki/model/PkiCertificateInfo"),module.exports);r(o,require("./proxy/data/HttpProxyDataSource"),module.exports);r(o,require("./proxy/data/HttpSafeProxyDataSource"),module.exports);r(o,require("./proxy/data/ProxyDataSource"),module.exports);r(o,require("./proxy/domain/ProxyContextFieldLoader"),module.exports);r(o,require("./reporter/data/BlindSigningReporterDatasource"),module.exports);r(o,require("./reporter/data/HttpBlindSigningReporterDatasource"),module.exports);r(o,require("./reporter/domain/BlindSigningReporter"),module.exports);r(o,require("./reporter/domain/DefaultBlindSigningReporter"),module.exports);r(o,require("./reporter/model/BlindSigningEvent"),module.exports);r(o,require("./reporter/model/BlindSigningModelId"),module.exports);r(o,require("./shared/domain/ContextFieldLoader"),module.exports);r(o,require("./shared/domain/ContextLoader"),module.exports);r(o,require("./shared/model/ClearSignContext"),module.exports);r(o,require("./shared/model/GenericPath"),module.exports);r(o,require("./shared/model/SolanaContextTypes"),module.exports);r(o,require("./shared/model/TransactionSubset"),module.exports);r(o,require("./shared/model/TypedDataClearSignContext"),module.exports);r(o,require("./shared/model/TypedDataContext"),module.exports);r(o,require("./solana/data/HttpSolanaOwnerInfoDataSource"),module.exports);r(o,require("./solana/data/SolanaDataSource"),module.exports);r(o,require("./solana/domain/DefaultSolanaContextLoader"),module.exports);r(o,require("./solana/domain/SolanaContextLoader"),module.exports);r(o,require("./solana/domain/solanaContextTypes"),module.exports);r(o,require("./token/data/HttpTokenDataSource"),module.exports);r(o,require("./token/data/TokenDataSource"),module.exports);r(o,require("./token/domain/TokenContextFieldLoader"),module.exports);r(o,require("./token/domain/TokenContextLoader"),module.exports);r(o,require("./trusted-name/data/HttpTrustedNameDataSource"),module.exports);r(o,require("./trusted-name/data/TrustedNameDataSource"),module.exports);r(o,require("./trusted-name/domain/TrustedNameContextFieldLoader"),module.exports);r(o,require("./trusted-name/domain/TrustedNameContextLoader"),module.exports);r(o,require("./typed-data/data/HttpTypedDataDataSource"),module.exports);r(o,require("./typed-data/data/TypedDataDataSource"),module.exports);r(o,require("./typed-data/domain/DefaultTypedDataContextLoader"),module.exports);r(o,require("./typed-data/domain/TypedDataContextLoader"),module.exports);r(o,require("./typed-data/utils/getSchemaHash"),module.exports);r(o,require("./uniswap/data/AbiDecoderDataSource"),module.exports);r(o,require("./uniswap/data/CommandDecoderDataSource"),module.exports);r(o,require("./uniswap/data/DefaultCommandDecoderDataSource"),module.exports);r(o,require("./uniswap/data/EthersAbiDecoderDataSource"),module.exports);r(o,require("./uniswap/domain/UniswapContextLoader"),module.exports);0&&(module.exports={...require("./account-ownership/data/AccountOwnershipDataSource"),...require("./account-ownership/data/AccountOwnershipError"),...require("./account-ownership/data/HttpAccountOwnershipDataSource"),...require("./account-ownership/domain/AccountOwnershipContextLoader"),...require("./calldata/data/CalldataDescriptorDataSource"),...require("./calldata/data/HttpCalldataDescriptorDataSource"),...require("./calldata/domain/CalldataContextLoader"),...require("./ContextModule"),...require("./ContextModuleBuilder"),...require("./DefaultContextModule"),...require("./dynamic-network/data/DynamicNetworkDataSource"),...require("./dynamic-network/data/HttpDynamicNetworkDataSource"),...require("./dynamic-network/domain/DynamicNetworkContextLoader"),...require("./dynamic-network/model/DynamicNetworkConfiguration"),...require("./external-plugin/data/ExternalPluginDataSource"),...require("./external-plugin/data/HttpExternalPluginDataSource"),...require("./external-plugin/domain/ExternalPluginContextLoader"),...require("./gated-signing/data/GatedDescriptorDataSource"),...require("./gated-signing/data/HttpGatedDescriptorDataSource"),...require("./gated-signing/domain/GatedSigningContextLoader"),...require("./gated-signing/domain/GatedSigningTypedDataContextLoader"),...require("./nft/data/HttpNftDataSource"),...require("./nft/data/NftDataSource"),...require("./nft/domain/NftContextFieldLoader"),...require("./nft/domain/NftContextLoader"),...require("./pki/data/HttpPkiCertificateDataSource"),...require("./pki/data/PkiCertificateDataSource"),...require("./pki/domain/DefaultPkiCertificateLoader"),...require("./pki/domain/PkiCertificateLoader"),...require("./pki/model/KeyId"),...require("./pki/model/KeyUsage"),...require("./pki/model/PkiCertificate"),...require("./pki/model/PkiCertificateInfo"),...require("./proxy/data/HttpProxyDataSource"),...require("./proxy/data/HttpSafeProxyDataSource"),...require("./proxy/data/ProxyDataSource"),...require("./proxy/domain/ProxyContextFieldLoader"),...require("./reporter/data/BlindSigningReporterDatasource"),...require("./reporter/data/HttpBlindSigningReporterDatasource"),...require("./reporter/domain/BlindSigningReporter"),...require("./reporter/domain/DefaultBlindSigningReporter"),...require("./reporter/model/BlindSigningEvent"),...require("./reporter/model/BlindSigningModelId"),...require("./shared/domain/ContextFieldLoader"),...require("./shared/domain/ContextLoader"),...require("./shared/model/ClearSignContext"),...require("./shared/model/GenericPath"),...require("./shared/model/SolanaContextTypes"),...require("./shared/model/TransactionSubset"),...require("./shared/model/TypedDataClearSignContext"),...require("./shared/model/TypedDataContext"),...require("./solana/data/HttpSolanaOwnerInfoDataSource"),...require("./solana/data/SolanaDataSource"),...require("./solana/domain/DefaultSolanaContextLoader"),...require("./solana/domain/SolanaContextLoader"),...require("./solana/domain/solanaContextTypes"),...require("./token/data/HttpTokenDataSource"),...require("./token/data/TokenDataSource"),...require("./token/domain/TokenContextFieldLoader"),...require("./token/domain/TokenContextLoader"),...require("./trusted-name/data/HttpTrustedNameDataSource"),...require("./trusted-name/data/TrustedNameDataSource"),...require("./trusted-name/domain/TrustedNameContextFieldLoader"),...require("./trusted-name/domain/TrustedNameContextLoader"),...require("./typed-data/data/HttpTypedDataDataSource"),...require("./typed-data/data/TypedDataDataSource"),...require("./typed-data/domain/DefaultTypedDataContextLoader"),...require("./typed-data/domain/TypedDataContextLoader"),...require("./typed-data/utils/getSchemaHash"),...require("./uniswap/data/AbiDecoderDataSource"),...require("./uniswap/data/CommandDecoderDataSource"),...require("./uniswap/data/DefaultCommandDecoderDataSource"),...require("./uniswap/data/EthersAbiDecoderDataSource"),...require("./uniswap/domain/UniswapContextLoader")});
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts"],
4
- "sourcesContent": ["export * from \"./account-ownership/data/AccountOwnershipDataSource\";\nexport * from \"./account-ownership/data/HttpAccountOwnershipDataSource\";\nexport * from \"./account-ownership/domain/AccountOwnershipContextLoader\";\nexport * from \"./calldata/data/CalldataDescriptorDataSource\";\nexport * from \"./calldata/data/HttpCalldataDescriptorDataSource\";\nexport * from \"./calldata/domain/CalldataContextLoader\";\nexport type {\n ContextModuleCalBranch,\n ContextModuleCalConfig,\n ContextModuleCalMode,\n ContextModuleConfig,\n ContextModuleDatasourceConfig,\n ContextModuleMetadataServiceConfig,\n ContextModuleReporterConfig,\n ContextModuleWeb3ChecksConfig,\n} from \"./config/model/ContextModuleConfig\";\nexport * from \"./ContextModule\";\nexport * from \"./ContextModuleBuilder\";\nexport * from \"./DefaultContextModule\";\nexport * from \"./dynamic-network/data/DynamicNetworkDataSource\";\nexport * from \"./dynamic-network/data/HttpDynamicNetworkDataSource\";\nexport * from \"./dynamic-network/domain/DynamicNetworkContextLoader\";\nexport * from \"./dynamic-network/model/DynamicNetworkConfiguration\";\nexport * from \"./external-plugin/data/ExternalPluginDataSource\";\nexport * from \"./external-plugin/data/HttpExternalPluginDataSource\";\nexport * from \"./external-plugin/domain/ExternalPluginContextLoader\";\nexport * from \"./gated-signing/data/GatedDescriptorDataSource\";\nexport * from \"./gated-signing/data/HttpGatedDescriptorDataSource\";\nexport * from \"./gated-signing/domain/GatedSigningContextLoader\";\nexport * from \"./gated-signing/domain/GatedSigningTypedDataContextLoader\";\nexport * from \"./nft/data/HttpNftDataSource\";\nexport * from \"./nft/data/NftDataSource\";\nexport * from \"./nft/domain/NftContextFieldLoader\";\nexport * from \"./nft/domain/NftContextLoader\";\nexport * from \"./pki/data/HttpPkiCertificateDataSource\";\nexport * from \"./pki/data/PkiCertificateDataSource\";\nexport * from \"./pki/domain/DefaultPkiCertificateLoader\";\nexport * from \"./pki/domain/PkiCertificateLoader\";\nexport * from \"./pki/model/KeyId\";\nexport * from \"./pki/model/KeyUsage\";\nexport * from \"./pki/model/PkiCertificate\";\nexport * from \"./pki/model/PkiCertificateInfo\";\nexport * from \"./proxy/data/HttpProxyDataSource\";\nexport * from \"./proxy/data/HttpSafeProxyDataSource\";\nexport * from \"./proxy/data/ProxyDataSource\";\nexport * from \"./proxy/domain/ProxyContextFieldLoader\";\nexport * from \"./reporter/data/BlindSigningReporterDatasource\";\nexport * from \"./reporter/data/HttpBlindSigningReporterDatasource\";\nexport * from \"./reporter/domain/BlindSigningReporter\";\nexport * from \"./reporter/domain/DefaultBlindSigningReporter\";\nexport * from \"./reporter/model/BlindSigningEvent\";\nexport * from \"./reporter/model/BlindSigningModelId\";\nexport * from \"./shared/domain/ContextFieldLoader\";\nexport * from \"./shared/domain/ContextLoader\";\nexport * from \"./shared/model/ClearSignContext\";\nexport * from \"./shared/model/GenericPath\";\nexport * from \"./shared/model/SolanaContextTypes\";\nexport * from \"./shared/model/TransactionSubset\";\nexport * from \"./shared/model/TypedDataClearSignContext\";\nexport * from \"./shared/model/TypedDataContext\";\nexport * from \"./solana/data/HttpSolanaOwnerInfoDataSource\";\nexport * from \"./solana/data/SolanaDataSource\";\nexport * from \"./solana/domain/DefaultSolanaContextLoader\";\nexport * from \"./solana/domain/SolanaContextLoader\";\nexport * from \"./solana/domain/solanaContextTypes\";\nexport * from \"./token/data/HttpTokenDataSource\";\nexport * from \"./token/data/TokenDataSource\";\nexport * from \"./token/domain/TokenContextFieldLoader\";\nexport * from \"./token/domain/TokenContextLoader\";\nexport * from \"./trusted-name/data/HttpTrustedNameDataSource\";\nexport * from \"./trusted-name/data/TrustedNameDataSource\";\nexport * from \"./trusted-name/domain/TrustedNameContextFieldLoader\";\nexport * from \"./trusted-name/domain/TrustedNameContextLoader\";\nexport * from \"./typed-data/data/HttpTypedDataDataSource\";\nexport * from \"./typed-data/data/TypedDataDataSource\";\nexport * from \"./typed-data/domain/DefaultTypedDataContextLoader\";\nexport * from \"./typed-data/domain/TypedDataContextLoader\";\nexport * from \"./typed-data/utils/getSchemaHash\";\nexport * from \"./uniswap/data/AbiDecoderDataSource\";\nexport * from \"./uniswap/data/CommandDecoderDataSource\";\nexport * from \"./uniswap/data/DefaultCommandDecoderDataSource\";\nexport * from \"./uniswap/data/EthersAbiDecoderDataSource\";\nexport * from \"./uniswap/domain/UniswapContextLoader\";\n"],
5
- "mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAAE,EAAAF,EAAc,+DAAd,gBACAE,EAAAF,EAAc,mEADd,gBAEAE,EAAAF,EAAc,oEAFd,gBAGAE,EAAAF,EAAc,wDAHd,gBAIAE,EAAAF,EAAc,4DAJd,gBAKAE,EAAAF,EAAc,mDALd,gBAgBAE,EAAAF,EAAc,2BAhBd,gBAiBAE,EAAAF,EAAc,kCAjBd,gBAkBAE,EAAAF,EAAc,kCAlBd,gBAmBAE,EAAAF,EAAc,2DAnBd,gBAoBAE,EAAAF,EAAc,+DApBd,gBAqBAE,EAAAF,EAAc,gEArBd,gBAsBAE,EAAAF,EAAc,+DAtBd,gBAuBAE,EAAAF,EAAc,2DAvBd,gBAwBAE,EAAAF,EAAc,+DAxBd,gBAyBAE,EAAAF,EAAc,gEAzBd,gBA0BAE,EAAAF,EAAc,0DA1Bd,gBA2BAE,EAAAF,EAAc,8DA3Bd,gBA4BAE,EAAAF,EAAc,4DA5Bd,gBA6BAE,EAAAF,EAAc,qEA7Bd,gBA8BAE,EAAAF,EAAc,wCA9Bd,gBA+BAE,EAAAF,EAAc,oCA/Bd,gBAgCAE,EAAAF,EAAc,8CAhCd,gBAiCAE,EAAAF,EAAc,yCAjCd,gBAkCAE,EAAAF,EAAc,mDAlCd,gBAmCAE,EAAAF,EAAc,+CAnCd,gBAoCAE,EAAAF,EAAc,oDApCd,gBAqCAE,EAAAF,EAAc,6CArCd,gBAsCAE,EAAAF,EAAc,6BAtCd,gBAuCAE,EAAAF,EAAc,gCAvCd,gBAwCAE,EAAAF,EAAc,sCAxCd,gBAyCAE,EAAAF,EAAc,0CAzCd,gBA0CAE,EAAAF,EAAc,4CA1Cd,gBA2CAE,EAAAF,EAAc,gDA3Cd,gBA4CAE,EAAAF,EAAc,wCA5Cd,gBA6CAE,EAAAF,EAAc,kDA7Cd,gBA8CAE,EAAAF,EAAc,0DA9Cd,gBA+CAE,EAAAF,EAAc,8DA/Cd,gBAgDAE,EAAAF,EAAc,kDAhDd,gBAiDAE,EAAAF,EAAc,yDAjDd,gBAkDAE,EAAAF,EAAc,8CAlDd,gBAmDAE,EAAAF,EAAc,gDAnDd,gBAoDAE,EAAAF,EAAc,8CApDd,gBAqDAE,EAAAF,EAAc,yCArDd,gBAsDAE,EAAAF,EAAc,2CAtDd,gBAuDAE,EAAAF,EAAc,sCAvDd,gBAwDAE,EAAAF,EAAc,6CAxDd,gBAyDAE,EAAAF,EAAc,4CAzDd,gBA0DAE,EAAAF,EAAc,oDA1Dd,gBA2DAE,EAAAF,EAAc,2CA3Dd,gBA4DAE,EAAAF,EAAc,uDA5Dd,gBA6DAE,EAAAF,EAAc,0CA7Dd,gBA8DAE,EAAAF,EAAc,sDA9Dd,gBA+DAE,EAAAF,EAAc,+CA/Dd,gBAgEAE,EAAAF,EAAc,8CAhEd,gBAiEAE,EAAAF,EAAc,4CAjEd,gBAkEAE,EAAAF,EAAc,wCAlEd,gBAmEAE,EAAAF,EAAc,kDAnEd,gBAoEAE,EAAAF,EAAc,6CApEd,gBAqEAE,EAAAF,EAAc,yDArEd,gBAsEAE,EAAAF,EAAc,qDAtEd,gBAuEAE,EAAAF,EAAc,+DAvEd,gBAwEAE,EAAAF,EAAc,0DAxEd,gBAyEAE,EAAAF,EAAc,qDAzEd,gBA0EAE,EAAAF,EAAc,iDA1Ed,gBA2EAE,EAAAF,EAAc,6DA3Ed,gBA4EAE,EAAAF,EAAc,sDA5Ed,gBA6EAE,EAAAF,EAAc,4CA7Ed,gBA8EAE,EAAAF,EAAc,+CA9Ed,gBA+EAE,EAAAF,EAAc,mDA/Ed,gBAgFAE,EAAAF,EAAc,0DAhFd,gBAiFAE,EAAAF,EAAc,qDAjFd,gBAkFAE,EAAAF,EAAc,iDAlFd",
4
+ "sourcesContent": ["export * from \"./account-ownership/data/AccountOwnershipDataSource\";\nexport * from \"./account-ownership/data/AccountOwnershipError\";\nexport * from \"./account-ownership/data/HttpAccountOwnershipDataSource\";\nexport * from \"./account-ownership/domain/AccountOwnershipContextLoader\";\nexport * from \"./calldata/data/CalldataDescriptorDataSource\";\nexport * from \"./calldata/data/HttpCalldataDescriptorDataSource\";\nexport * from \"./calldata/domain/CalldataContextLoader\";\nexport type {\n ContextModuleCalBranch,\n ContextModuleCalConfig,\n ContextModuleCalMode,\n ContextModuleConfig,\n ContextModuleDatasourceConfig,\n ContextModuleMetadataServiceConfig,\n ContextModuleReporterConfig,\n ContextModuleWeb3ChecksConfig,\n} from \"./config/model/ContextModuleConfig\";\nexport * from \"./ContextModule\";\nexport * from \"./ContextModuleBuilder\";\nexport * from \"./DefaultContextModule\";\nexport * from \"./dynamic-network/data/DynamicNetworkDataSource\";\nexport * from \"./dynamic-network/data/HttpDynamicNetworkDataSource\";\nexport * from \"./dynamic-network/domain/DynamicNetworkContextLoader\";\nexport * from \"./dynamic-network/model/DynamicNetworkConfiguration\";\nexport * from \"./external-plugin/data/ExternalPluginDataSource\";\nexport * from \"./external-plugin/data/HttpExternalPluginDataSource\";\nexport * from \"./external-plugin/domain/ExternalPluginContextLoader\";\nexport * from \"./gated-signing/data/GatedDescriptorDataSource\";\nexport * from \"./gated-signing/data/HttpGatedDescriptorDataSource\";\nexport * from \"./gated-signing/domain/GatedSigningContextLoader\";\nexport * from \"./gated-signing/domain/GatedSigningTypedDataContextLoader\";\nexport * from \"./nft/data/HttpNftDataSource\";\nexport * from \"./nft/data/NftDataSource\";\nexport * from \"./nft/domain/NftContextFieldLoader\";\nexport * from \"./nft/domain/NftContextLoader\";\nexport * from \"./pki/data/HttpPkiCertificateDataSource\";\nexport * from \"./pki/data/PkiCertificateDataSource\";\nexport * from \"./pki/domain/DefaultPkiCertificateLoader\";\nexport * from \"./pki/domain/PkiCertificateLoader\";\nexport * from \"./pki/model/KeyId\";\nexport * from \"./pki/model/KeyUsage\";\nexport * from \"./pki/model/PkiCertificate\";\nexport * from \"./pki/model/PkiCertificateInfo\";\nexport * from \"./proxy/data/HttpProxyDataSource\";\nexport * from \"./proxy/data/HttpSafeProxyDataSource\";\nexport * from \"./proxy/data/ProxyDataSource\";\nexport * from \"./proxy/domain/ProxyContextFieldLoader\";\nexport * from \"./reporter/data/BlindSigningReporterDatasource\";\nexport * from \"./reporter/data/HttpBlindSigningReporterDatasource\";\nexport * from \"./reporter/domain/BlindSigningReporter\";\nexport * from \"./reporter/domain/DefaultBlindSigningReporter\";\nexport * from \"./reporter/model/BlindSigningEvent\";\nexport * from \"./reporter/model/BlindSigningModelId\";\nexport * from \"./shared/domain/ContextFieldLoader\";\nexport * from \"./shared/domain/ContextLoader\";\nexport * from \"./shared/model/ClearSignContext\";\nexport * from \"./shared/model/GenericPath\";\nexport * from \"./shared/model/SolanaContextTypes\";\nexport * from \"./shared/model/TransactionSubset\";\nexport * from \"./shared/model/TypedDataClearSignContext\";\nexport * from \"./shared/model/TypedDataContext\";\nexport * from \"./solana/data/HttpSolanaOwnerInfoDataSource\";\nexport * from \"./solana/data/SolanaDataSource\";\nexport * from \"./solana/domain/DefaultSolanaContextLoader\";\nexport * from \"./solana/domain/SolanaContextLoader\";\nexport * from \"./solana/domain/solanaContextTypes\";\nexport * from \"./token/data/HttpTokenDataSource\";\nexport * from \"./token/data/TokenDataSource\";\nexport * from \"./token/domain/TokenContextFieldLoader\";\nexport * from \"./token/domain/TokenContextLoader\";\nexport * from \"./trusted-name/data/HttpTrustedNameDataSource\";\nexport * from \"./trusted-name/data/TrustedNameDataSource\";\nexport * from \"./trusted-name/domain/TrustedNameContextFieldLoader\";\nexport * from \"./trusted-name/domain/TrustedNameContextLoader\";\nexport * from \"./typed-data/data/HttpTypedDataDataSource\";\nexport * from \"./typed-data/data/TypedDataDataSource\";\nexport * from \"./typed-data/domain/DefaultTypedDataContextLoader\";\nexport * from \"./typed-data/domain/TypedDataContextLoader\";\nexport * from \"./typed-data/utils/getSchemaHash\";\nexport * from \"./uniswap/data/AbiDecoderDataSource\";\nexport * from \"./uniswap/data/CommandDecoderDataSource\";\nexport * from \"./uniswap/data/DefaultCommandDecoderDataSource\";\nexport * from \"./uniswap/data/EthersAbiDecoderDataSource\";\nexport * from \"./uniswap/domain/UniswapContextLoader\";\n"],
5
+ "mappings": "iaAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAAE,EAAAF,EAAc,+DAAd,gBACAE,EAAAF,EAAc,0DADd,gBAEAE,EAAAF,EAAc,mEAFd,gBAGAE,EAAAF,EAAc,oEAHd,gBAIAE,EAAAF,EAAc,wDAJd,gBAKAE,EAAAF,EAAc,4DALd,gBAMAE,EAAAF,EAAc,mDANd,gBAiBAE,EAAAF,EAAc,2BAjBd,gBAkBAE,EAAAF,EAAc,kCAlBd,gBAmBAE,EAAAF,EAAc,kCAnBd,gBAoBAE,EAAAF,EAAc,2DApBd,gBAqBAE,EAAAF,EAAc,+DArBd,gBAsBAE,EAAAF,EAAc,gEAtBd,gBAuBAE,EAAAF,EAAc,+DAvBd,gBAwBAE,EAAAF,EAAc,2DAxBd,gBAyBAE,EAAAF,EAAc,+DAzBd,gBA0BAE,EAAAF,EAAc,gEA1Bd,gBA2BAE,EAAAF,EAAc,0DA3Bd,gBA4BAE,EAAAF,EAAc,8DA5Bd,gBA6BAE,EAAAF,EAAc,4DA7Bd,gBA8BAE,EAAAF,EAAc,qEA9Bd,gBA+BAE,EAAAF,EAAc,wCA/Bd,gBAgCAE,EAAAF,EAAc,oCAhCd,gBAiCAE,EAAAF,EAAc,8CAjCd,gBAkCAE,EAAAF,EAAc,yCAlCd,gBAmCAE,EAAAF,EAAc,mDAnCd,gBAoCAE,EAAAF,EAAc,+CApCd,gBAqCAE,EAAAF,EAAc,oDArCd,gBAsCAE,EAAAF,EAAc,6CAtCd,gBAuCAE,EAAAF,EAAc,6BAvCd,gBAwCAE,EAAAF,EAAc,gCAxCd,gBAyCAE,EAAAF,EAAc,sCAzCd,gBA0CAE,EAAAF,EAAc,0CA1Cd,gBA2CAE,EAAAF,EAAc,4CA3Cd,gBA4CAE,EAAAF,EAAc,gDA5Cd,gBA6CAE,EAAAF,EAAc,wCA7Cd,gBA8CAE,EAAAF,EAAc,kDA9Cd,gBA+CAE,EAAAF,EAAc,0DA/Cd,gBAgDAE,EAAAF,EAAc,8DAhDd,gBAiDAE,EAAAF,EAAc,kDAjDd,gBAkDAE,EAAAF,EAAc,yDAlDd,gBAmDAE,EAAAF,EAAc,8CAnDd,gBAoDAE,EAAAF,EAAc,gDApDd,gBAqDAE,EAAAF,EAAc,8CArDd,gBAsDAE,EAAAF,EAAc,yCAtDd,gBAuDAE,EAAAF,EAAc,2CAvDd,gBAwDAE,EAAAF,EAAc,sCAxDd,gBAyDAE,EAAAF,EAAc,6CAzDd,gBA0DAE,EAAAF,EAAc,4CA1Dd,gBA2DAE,EAAAF,EAAc,oDA3Dd,gBA4DAE,EAAAF,EAAc,2CA5Dd,gBA6DAE,EAAAF,EAAc,uDA7Dd,gBA8DAE,EAAAF,EAAc,0CA9Dd,gBA+DAE,EAAAF,EAAc,sDA/Dd,gBAgEAE,EAAAF,EAAc,+CAhEd,gBAiEAE,EAAAF,EAAc,8CAjEd,gBAkEAE,EAAAF,EAAc,4CAlEd,gBAmEAE,EAAAF,EAAc,wCAnEd,gBAoEAE,EAAAF,EAAc,kDApEd,gBAqEAE,EAAAF,EAAc,6CArEd,gBAsEAE,EAAAF,EAAc,yDAtEd,gBAuEAE,EAAAF,EAAc,qDAvEd,gBAwEAE,EAAAF,EAAc,+DAxEd,gBAyEAE,EAAAF,EAAc,0DAzEd,gBA0EAE,EAAAF,EAAc,qDA1Ed,gBA2EAE,EAAAF,EAAc,iDA3Ed,gBA4EAE,EAAAF,EAAc,6DA5Ed,gBA6EAE,EAAAF,EAAc,sDA7Ed,gBA8EAE,EAAAF,EAAc,4CA9Ed,gBA+EAE,EAAAF,EAAc,+CA/Ed,gBAgFAE,EAAAF,EAAc,mDAhFd,gBAiFAE,EAAAF,EAAc,0DAjFd,gBAkFAE,EAAAF,EAAc,qDAlFd,gBAmFAE,EAAAF,EAAc,iDAnFd",
6
6
  "names": ["src_exports", "__toCommonJS", "__reExport"]
7
7
  }
@@ -58,5 +58,5 @@
58
58
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
59
59
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
60
60
  },
61
- "version": "0.0.0-develop-20260423002441"
61
+ "version": "0.0.0-develop-20260423152505"
62
62
  }
@@ -0,0 +1,2 @@
1
+ class e extends Error{kind;constructor(r,n){super(n),this.name="AccountOwnershipError",this.kind=r}}export{e as AccountOwnershipError};
2
+ //# sourceMappingURL=AccountOwnershipError.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/account-ownership/data/AccountOwnershipError.ts"],
4
+ "sourcesContent": ["/**\n * Classification for errors returned by the trusted metadata service when\n * fetching an account-ownership descriptor.\n *\n * - `verification_failed`: the service was reached and actively refused the\n * pubkey \u2192 address mapping (HTTP 4xx). Treat as a terminal, non-retryable\n * verification failure.\n * - `service_unavailable`: the service could not answer (network failure,\n * HTTP 5xx, malformed response). Treat as transient; fallback UI may be\n * appropriate.\n */\nexport type AccountOwnershipErrorKind =\n | \"verification_failed\"\n | \"service_unavailable\";\n\nexport class AccountOwnershipError extends Error {\n readonly kind: AccountOwnershipErrorKind;\n\n constructor(kind: AccountOwnershipErrorKind, message: string) {\n super(message);\n this.name = \"AccountOwnershipError\";\n this.kind = kind;\n }\n}\n"],
5
+ "mappings": "AAeO,MAAMA,UAA8B,KAAM,CACtC,KAET,YAAYC,EAAiCC,EAAiB,CAC5D,MAAMA,CAAO,EACb,KAAK,KAAO,wBACZ,KAAK,KAAOD,CACd,CACF",
6
+ "names": ["AccountOwnershipError", "kind", "message"]
7
+ }
@@ -1,2 +1,2 @@
1
- var d=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var a=(i,e,n,o)=>{for(var t=o>1?void 0:o?u(e,n):e,r=i.length-1,c;r>=0;r--)(c=i[r])&&(t=(o?c(e,n,t):c(t))||t);return o&&t&&d(e,n,t),t},m=(i,e)=>(n,o)=>e(n,o,i);import f from"axios";import{inject as y,injectable as h}from"inversify";import{Left as p,Right as g}from"purify-ts";import{configTypes as D}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as E,LEDGER_ORIGIN_TOKEN_HEADER as w}from"../../shared/constant/HttpHeaders";import A from"../../../package.json";let s=class{constructor(e){this.config=e}async getDescriptor({publicKey:e,address:n,challenge:o,network:t}){try{const r=await f.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${n}`,params:{challenge:o,network:t},headers:{[E]:`context-module/${A.version}`,[w]:this.config.originToken}});return r.data?this.isAccountOwnershipDto(r.data)?g({signedDescriptor:r.data.signedDescriptor,keyId:r.data.keyId,keyUsage:r.data.keyUsage}):p(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):p(new Error("[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch{return p(new Error("[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor"))}}isAccountOwnershipDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.signedDescriptor=="string"&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"}};s=a([h(),m(0,y(D.Config))],s);export{s as HttpAccountOwnershipDataSource};
1
+ var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var u=(s,e,t,r)=>{for(var o=r>1?void 0:r?h(e,t):e,n=s.length-1,a;n>=0;n--)(a=s[n])&&(o=(r?a(e,t,o):a(o))||o);return r&&o&&f(e,t,o),o},m=(s,e)=>(t,r)=>e(t,r,s);import g from"axios";import{inject as y,injectable as d}from"inversify";import{Left as p,Right as l}from"purify-ts";import{AccountOwnershipError as i}from"../../account-ownership/data/AccountOwnershipError";import{configTypes as w}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as E,LEDGER_ORIGIN_TOKEN_HEADER as D}from"../../shared/constant/HttpHeaders";import A from"../../../package.json";let c=class{constructor(e){this.config=e}async getDescriptor({publicKey:e,address:t,challenge:r,network:o}){try{const n=await g.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${t}`,params:{challenge:r,network:o},headers:{[E]:`context-module/${A.version}`,[D]:this.config.originToken}});return n.data?this.isAccountOwnershipDto(n.data)?l({signedDescriptor:n.data.signedDescriptor,keyId:n.data.keyId,keyUsage:n.data.keyUsage}):p(new i("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):p(new i("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(n){return p(this.classifyError(n))}}classifyError(e){if(g.isAxiosError(e)&&e.response){const t=e.response.status,r=this.extractBackendMessage(e.response.data,e.message);return t>=400&&t<500?new i("verification_failed",r):new i("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${t}: ${r}`)}return new i("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}extractBackendMessage(e,t){return typeof e=="string"&&e.length>0?e:typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"&&e.message.length>0?e.message:t}isAccountOwnershipDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.signedDescriptor=="string"&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"}};c=u([d(),m(0,y(w.Config))],c);export{c as HttpAccountOwnershipDataSource};
2
2
  //# sourceMappingURL=HttpAccountOwnershipDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/account-ownership/data/HttpAccountOwnershipDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport {\n type AccountOwnershipDataSource,\n type AccountOwnershipDescriptor,\n type GetAccountOwnershipParams,\n} from \"@/account-ownership/data/AccountOwnershipDataSource\";\nimport { type AccountOwnershipDto } from \"@/account-ownership/data/dto/AccountOwnershipDto\";\nimport { configTypes } from \"@/config/di/configTypes\";\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\n@injectable()\nexport class HttpAccountOwnershipDataSource\n implements AccountOwnershipDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDescriptor({\n publicKey,\n address,\n challenge,\n network,\n }: GetAccountOwnershipParams): Promise<\n Either<Error, AccountOwnershipDescriptor>\n > {\n try {\n const response = await axios.request<AccountOwnershipDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/concordium/owner/${publicKey}/${address}`,\n params: {\n challenge,\n network,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n if (!response.data) {\n return Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isAccountOwnershipDto(response.data)) {\n return Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n );\n }\n\n return Right({\n signedDescriptor: response.data.signedDescriptor,\n keyId: response.data.keyId,\n keyUsage: response.data.keyUsage,\n });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n );\n }\n }\n\n private isAccountOwnershipDto(value: unknown): value is AccountOwnershipDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\n );\n }\n}\n"],
5
- "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAQzC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAGb,IAAMC,EAAN,KAEP,CACE,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,cAAc,CAClB,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAEE,CACA,GAAI,CACF,MAAMC,EAAW,MAAMC,EAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,wBAAwBL,CAAS,IAAIC,CAAO,GACzF,OAAQ,CACN,UAAAC,EACA,QAAAC,CACF,EACA,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKJ,EAAS,KAQT,KAAK,sBAAsBA,EAAS,IAAI,EAQtCK,EAAM,CACX,iBAAkBL,EAAS,KAAK,iBAChC,MAAOA,EAAS,KAAK,MACrB,SAAUA,EAAS,KAAK,QAC1B,CAAC,EAXQM,EACL,IAAI,MACF,yEACF,CACF,EAZOA,EACL,IAAI,MACF,2EACF,CACF,CAgBJ,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,8FACF,CACF,CACF,CACF,CAEQ,sBAAsBC,EAA8C,CAC1E,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,qBAAsBA,GACtB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EAxEab,EAANc,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAJjBlB",
6
- "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpAccountOwnershipDataSource", "config", "publicKey", "address", "challenge", "network", "response", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Right", "Left", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport {\n type AccountOwnershipDataSource,\n type AccountOwnershipDescriptor,\n type GetAccountOwnershipParams,\n} from \"@/account-ownership/data/AccountOwnershipDataSource\";\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\nimport { type AccountOwnershipDto } from \"@/account-ownership/data/dto/AccountOwnershipDto\";\nimport { configTypes } from \"@/config/di/configTypes\";\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\n@injectable()\nexport class HttpAccountOwnershipDataSource\n implements AccountOwnershipDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDescriptor({\n publicKey,\n address,\n challenge,\n network,\n }: GetAccountOwnershipParams): Promise<\n Either<Error, AccountOwnershipDescriptor>\n > {\n try {\n const response = await axios.request<AccountOwnershipDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/concordium/owner/${publicKey}/${address}`,\n params: {\n challenge,\n network,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n if (!response.data) {\n return Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isAccountOwnershipDto(response.data)) {\n return Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n );\n }\n\n return Right({\n signedDescriptor: response.data.signedDescriptor,\n keyId: response.data.keyId,\n keyUsage: response.data.keyUsage,\n });\n } catch (error) {\n return Left(this.classifyError(error));\n }\n }\n\n /**\n * Classifies a caught request error into an {@link AccountOwnershipError}:\n * HTTP 4xx responses carry the backend's `message` verbatim and are marked\n * as `verification_failed`; everything else (network failure, 5xx,\n * non-axios errors) is marked as `service_unavailable`.\n */\n private classifyError(error: unknown): AccountOwnershipError {\n if (axios.isAxiosError(error) && error.response) {\n const status = error.response.status;\n const backendMessage = this.extractBackendMessage(\n error.response.data,\n error.message,\n );\n\n if (status >= 400 && status < 500) {\n return new AccountOwnershipError(\"verification_failed\", backendMessage);\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n `[ContextModule] HttpAccountOwnershipDataSource: backend ${status}: ${backendMessage}`,\n );\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n );\n }\n\n private extractBackendMessage(data: unknown, fallback: string): string {\n if (typeof data === \"string\" && data.length > 0) {\n return data;\n }\n if (\n typeof data === \"object\" &&\n data !== null &&\n \"message\" in data &&\n typeof (data as { message: unknown }).message === \"string\" &&\n (data as { message: string }).message.length > 0\n ) {\n return (data as { message: string }).message;\n }\n return fallback;\n }\n\n private isAccountOwnershipDto(value: unknown): value is AccountOwnershipDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\n );\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAOzC,OAAS,yBAAAC,MAA6B,iDAEtC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAGb,IAAMC,EAAN,KAEP,CACE,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,cAAc,CAClB,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAEE,CACA,GAAI,CACF,MAAMC,EAAW,MAAMC,EAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,wBAAwBL,CAAS,IAAIC,CAAO,GACzF,OAAQ,CACN,UAAAC,EACA,QAAAC,CACF,EACA,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKJ,EAAS,KAST,KAAK,sBAAsBA,EAAS,IAAI,EAStCK,EAAM,CACX,iBAAkBL,EAAS,KAAK,iBAChC,MAAOA,EAAS,KAAK,MACrB,SAAUA,EAAS,KAAK,QAC1B,CAAC,EAZQM,EACL,IAAIC,EACF,sBACA,yEACF,CACF,EAdOD,EACL,IAAIC,EACF,sBACA,2EACF,CACF,CAiBJ,OAASC,EAAO,CACd,OAAOF,EAAK,KAAK,cAAcE,CAAK,CAAC,CACvC,CACF,CAQQ,cAAcA,EAAuC,CAC3D,GAAIP,EAAM,aAAaO,CAAK,GAAKA,EAAM,SAAU,CAC/C,MAAMC,EAASD,EAAM,SAAS,OACxBE,EAAiB,KAAK,sBAC1BF,EAAM,SAAS,KACfA,EAAM,OACR,EAEA,OAAIC,GAAU,KAAOA,EAAS,IACrB,IAAIF,EAAsB,sBAAuBG,CAAc,EAGjE,IAAIH,EACT,sBACA,2DAA2DE,CAAM,KAAKC,CAAc,EACtF,CACF,CAEA,OAAO,IAAIH,EACT,sBACA,8FACF,CACF,CAEQ,sBAAsBI,EAAeC,EAA0B,CACrE,OAAI,OAAOD,GAAS,UAAYA,EAAK,OAAS,EACrCA,EAGP,OAAOA,GAAS,UAChBA,IAAS,MACT,YAAaA,GACb,OAAQA,EAA8B,SAAY,UACjDA,EAA6B,QAAQ,OAAS,EAEvCA,EAA6B,QAEhCC,CACT,CAEQ,sBAAsBC,EAA8C,CAC1E,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,qBAAsBA,GACtB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EApHanB,EAANoB,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAJjBxB",
6
+ "names": ["axios", "inject", "injectable", "Left", "Right", "AccountOwnershipError", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpAccountOwnershipDataSource", "config", "publicKey", "address", "challenge", "network", "response", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Right", "Left", "AccountOwnershipError", "error", "status", "backendMessage", "data", "fallback", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import s from"axios";import{Left as n,Right as i}from"purify-ts";import{LEDGER_CLIENT_VERSION_HEADER as d,LEDGER_ORIGIN_TOKEN_HEADER as c}from"../../shared/constant/HttpHeaders";import u from"../../../package.json";import{HttpAccountOwnershipDataSource as a}from"./HttpAccountOwnershipDataSource";vi.mock("axios");describe("HttpAccountOwnershipDataSource",()=>{const o={metadataServiceDomain:{url:"https://nft.api.live.ledger-test.com"},originToken:"test-origin-token"},r={signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"};beforeEach(()=>{vi.clearAllMocks()}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:r});const t=await new a(o).getDescriptor(e);expect(s.request).toHaveBeenCalledWith({method:"GET",url:"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",params:{challenge:"0xabcdef",network:"mainnet"},headers:{[d]:`context-module/${u.version}`,[c]:"test-origin-token"}}),expect(t).toEqual(i({signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"}))}),it("should pass testnet network parameter",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"testnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:r}),await new a(o).getDescriptor(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0xabcdef",network:"testnet"}}))}),it("should return error when response data is empty",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:null});const t=await new a(o).getDescriptor(e);expect(t).toEqual(n(new Error("[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response")))}),it("should return error when signedDescriptor is missing",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{keyId:"domain_metadata_key",keyUsage:"trusted_name"}});const t=await new a(o).getDescriptor(e);expect(t).toEqual(n(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when keyId is missing",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{signedDescriptor:"signed-descriptor-data",keyUsage:"trusted_name"}});const t=await new a(o).getDescriptor(e);expect(t).toEqual(n(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when keyUsage is missing",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key"}});const t=await new a(o).getDescriptor(e);expect(t).toEqual(n(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when field has wrong type",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{signedDescriptor:"signed-descriptor-data",keyId:123,keyUsage:"trusted_name"}});const t=await new a(o).getDescriptor(e);expect(t).toEqual(n(new Error("[ContextModule] HttpAccountOwnershipDataSource: invalid response format")))}),it("should return error when axios request fails",async()=>{const e={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockRejectedValue(new Error("Network error"));const t=await new a(o).getDescriptor(e);expect(t).toEqual(n(new Error("[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"},t={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:r}),await new a(e).getDescriptor(t),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",headers:expect.objectContaining({[c]:"custom-token"})}))})})});
1
+ import s,{AxiosError as p}from"axios";import{Left as m,Right as f}from"purify-ts";import{AccountOwnershipError as u}from"../../account-ownership/data/AccountOwnershipError";import{LEDGER_CLIENT_VERSION_HEADER as g,LEDGER_ORIGIN_TOKEN_HEADER as d}from"../../shared/constant/HttpHeaders";import x from"../../../package.json";import{HttpAccountOwnershipDataSource as r}from"./HttpAccountOwnershipDataSource";vi.mock("axios");function i(o,c,a="Request failed"){const e=new p(a);return e.message=a,e.response={status:o,data:c,statusText:"",headers:{},config:{}},e}describe("HttpAccountOwnershipDataSource",()=>{const o={metadataServiceDomain:{url:"https://nft.api.live.ledger-test.com"},originToken:"test-origin-token"},c={signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"},a={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(s,"isAxiosError").mockImplementation(e=>e instanceof p)}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{vi.spyOn(s,"request").mockResolvedValue({status:200,data:c});const e=await new r(o).getDescriptor(a);expect(s.request).toHaveBeenCalledWith({method:"GET",url:"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",params:{challenge:"0xabcdef",network:"mainnet"},headers:{[g]:`context-module/${x.version}`,[d]:"test-origin-token"}}),expect(e).toEqual(f(c))}),it("should pass testnet network parameter",async()=>{vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new r(o).getDescriptor({...a,network:"testnet"}),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0xabcdef",network:"testnet"}}))}),it("should classify empty response as service_unavailable",async()=>{vi.spyOn(s,"request").mockResolvedValue({status:200,data:null});const e=await new r(o).getDescriptor(a);expect(e.isLeft()).toBe(!0);const t=e.extract();expect(t).toBeInstanceOf(u),expect(t.kind).toBe("service_unavailable"),expect(t.message).toContain("unexpected empty response")}),it.each([["signedDescriptor missing",{keyId:"k",keyUsage:"u"}],["keyId missing",{signedDescriptor:"s",keyUsage:"u"}],["keyUsage missing",{signedDescriptor:"s",keyId:"k"}],["wrong field type",{signedDescriptor:"s",keyId:123,keyUsage:"u"}]])("should classify malformed response (%s) as service_unavailable",async(e,t)=>{vi.spyOn(s,"request").mockResolvedValue({status:200,data:t});const n=await new r(o).getDescriptor(a);expect(n.isLeft()).toBe(!0);const l=n.extract();expect(l).toBeInstanceOf(u),expect(l.kind).toBe("service_unavailable"),expect(l.message).toContain("invalid response format")}),it("should classify 422 with { message } body as verification_failed and forward backend message",async()=>{const e="Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet";vi.spyOn(s,"request").mockRejectedValue(i(422,{message:e}));const t=await new r(o).getDescriptor(a);expect(t.isLeft()).toBe(!0);const n=t.extract();expect(n).toBeInstanceOf(u),expect(n.kind).toBe("verification_failed"),expect(n.message).toBe(e)}),it.each([400,401,403,404,429])("should classify HTTP %s as verification_failed",async e=>{vi.spyOn(s,"request").mockRejectedValue(i(e,{message:"refused"}));const n=(await new r(o).getDescriptor(a)).extract();expect(n.kind).toBe("verification_failed"),expect(n.message).toBe("refused")}),it("should classify 500 as service_unavailable with status prefix",async()=>{vi.spyOn(s,"request").mockRejectedValue(i(500,{message:"internal error"}));const t=(await new r(o).getDescriptor(a)).extract();expect(t.kind).toBe("service_unavailable"),expect(t.message).toContain("backend 500"),expect(t.message).toContain("internal error")}),it.each([502,503,504])("should classify HTTP %s as service_unavailable",async e=>{vi.spyOn(s,"request").mockRejectedValue(i(e,{message:"down"}));const n=(await new r(o).getDescriptor(a)).extract();expect(n.kind).toBe("service_unavailable")}),it("should accept string body and forward it as message on 4xx",async()=>{vi.spyOn(s,"request").mockRejectedValue(i(422,"plain text reason"));const t=(await new r(o).getDescriptor(a)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("plain text reason")}),it("should fall back to axios error message when body has no message",async()=>{vi.spyOn(s,"request").mockRejectedValue(i(422,{},"Request failed with status code 422"));const t=(await new r(o).getDescriptor(a)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("Request failed with status code 422")}),it("should fall back to axios error message when body message is empty",async()=>{vi.spyOn(s,"request").mockRejectedValue(i(422,{message:""},"Request failed with status code 422"));const t=(await new r(o).getDescriptor(a)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("Request failed with status code 422")}),it("should classify non-axios / network errors as service_unavailable",async()=>{vi.spyOn(s,"request").mockRejectedValue(new Error("ECONNREFUSED"));const e=await new r(o).getDescriptor(a);expect(e).toEqual(m(new u("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new r(e).getDescriptor(a),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",headers:expect.objectContaining({[d]:"custom-token"})}))})})});
2
2
  //# sourceMappingURL=HttpAccountOwnershipDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/account-ownership/data/HttpAccountOwnershipDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\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\nimport { HttpAccountOwnershipDataSource } from \"./HttpAccountOwnershipDataSource\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpAccountOwnershipDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger-test.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const validDto = {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getDescriptor\", () => {\n it(\"should return descriptor on successful request\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n params: {\n challenge: \"0xabcdef\",\n network: \"mainnet\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n }),\n );\n });\n\n it(\"should pass testnet network parameter\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"testnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n // WHEN\n await new HttpAccountOwnershipDataSource(config).getDescriptor(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0xabcdef\",\n network: \"testnet\",\n },\n }),\n );\n });\n\n it(\"should return error when response data is empty\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when signedDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when keyId is missing\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signedDescriptor: \"signed-descriptor-data\",\n keyUsage: \"trusted_name\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when keyUsage is missing\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when field has wrong type\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: 123,\n keyUsage: \"trusted_name\",\n },\n });\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios request fails\", async () => {\n // GIVEN\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"custom-token\",\n } as ContextModuleServiceConfig;\n const params = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n // WHEN\n await new HttpAccountOwnershipDataSource(customConfig).getDescriptor(\n params,\n );\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-token\",\n }),\n }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["axios", "Left", "Right", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpAccountOwnershipDataSource", "config", "validDto", "params", "result", "customConfig"]
4
+ "sourcesContent": ["import axios, { AxiosError, type AxiosResponse } from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\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\nimport { HttpAccountOwnershipDataSource } from \"./HttpAccountOwnershipDataSource\";\n\nvi.mock(\"axios\");\n\nfunction makeAxiosError(\n status: number,\n data: unknown,\n message = \"Request failed\",\n): AxiosError {\n const err = new AxiosError(message);\n err.message = message;\n err.response = {\n status,\n data,\n statusText: \"\",\n headers: {},\n config: {} as never,\n } as AxiosResponse;\n return err;\n}\n\ndescribe(\"HttpAccountOwnershipDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger-test.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const validDto = {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n };\n\n const baseParams = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.spyOn(axios, \"isAxiosError\").mockImplementation(\n (value: unknown): value is AxiosError => value instanceof AxiosError,\n );\n });\n\n describe(\"getDescriptor\", () => {\n it(\"should return descriptor on successful request\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n params: {\n challenge: \"0xabcdef\",\n network: \"mainnet\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(Right(validDto));\n });\n\n it(\"should pass testnet network parameter\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n await new HttpAccountOwnershipDataSource(config).getDescriptor({\n ...baseParams,\n network: \"testnet\",\n });\n\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0xabcdef\",\n network: \"testnet\",\n },\n }),\n );\n });\n\n it(\"should classify empty response as service_unavailable\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"unexpected empty response\");\n });\n\n it.each([\n [\"signedDescriptor missing\", { keyId: \"k\", keyUsage: \"u\" }],\n [\"keyId missing\", { signedDescriptor: \"s\", keyUsage: \"u\" }],\n [\"keyUsage missing\", { signedDescriptor: \"s\", keyId: \"k\" }],\n [\n \"wrong field type\",\n { signedDescriptor: \"s\", keyId: 123, keyUsage: \"u\" },\n ],\n ])(\n \"should classify malformed response (%s) as service_unavailable\",\n async (_label, data) => {\n vi.spyOn(axios, \"request\").mockResolvedValue({ status: 200, data });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"invalid response format\");\n },\n );\n\n it(\"should classify 422 with { message } body as verification_failed and forward backend message\", async () => {\n const backendMessage =\n \"Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet\";\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, { message: backendMessage }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(backendMessage);\n });\n\n it.each([400, 401, 403, 404, 429])(\n \"should classify HTTP %s as verification_failed\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(status, { message: \"refused\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"refused\");\n },\n );\n\n it(\"should classify 500 as service_unavailable with status prefix\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(500, { message: \"internal error\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"backend 500\");\n expect(err.message).toContain(\"internal error\");\n });\n\n it.each([502, 503, 504])(\n \"should classify HTTP %s as service_unavailable\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(status, { message: \"down\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n },\n );\n\n it(\"should accept string body and forward it as message on 4xx\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, \"plain text reason\"),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"plain text reason\");\n });\n\n it(\"should fall back to axios error message when body has no message\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, {}, \"Request failed with status code 422\"),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Request failed with status code 422\");\n });\n\n it(\"should fall back to axios error message when body message is empty\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(\n 422,\n { message: \"\" },\n \"Request failed with status code 422\",\n ),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Request failed with status code 422\");\n });\n\n it(\"should classify non-axios / network errors as service_unavailable\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"ECONNREFUSED\"));\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result).toEqual(\n Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"custom-token\",\n } as ContextModuleServiceConfig;\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n await new HttpAccountOwnershipDataSource(customConfig).getDescriptor(\n baseParams,\n );\n\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-token\",\n }),\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["axios", "AxiosError", "Left", "Right", "AccountOwnershipError", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpAccountOwnershipDataSource", "makeAxiosError", "status", "data", "message", "err", "config", "validDto", "baseParams", "value", "result", "_label", "backendMessage", "customConfig"]
7
7
  }