@ledgerhq/context-module 0.0.0-develop-20260423002441 → 0.0.0-develop-20260424083553
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/package.json +1 -1
- package/lib/cjs/src/account-ownership/data/AccountOwnershipError.js +2 -0
- package/lib/cjs/src/account-ownership/data/AccountOwnershipError.js.map +7 -0
- package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
- package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
- package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
- package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
- package/lib/cjs/src/index.js +1 -1
- package/lib/cjs/src/index.js.map +2 -2
- package/lib/esm/package.json +1 -1
- package/lib/esm/src/account-ownership/data/AccountOwnershipError.js +2 -0
- package/lib/esm/src/account-ownership/data/AccountOwnershipError.js.map +7 -0
- package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
- package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
- package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
- package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
- package/lib/esm/src/index.js +1 -1
- package/lib/esm/src/index.js.map +2 -2
- package/lib/types/src/account-ownership/data/AccountOwnershipError.d.ts +17 -0
- package/lib/types/src/account-ownership/data/AccountOwnershipError.d.ts.map +1 -0
- package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts +20 -0
- package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts.map +1 -1
- package/lib/types/src/index.d.ts +1 -0
- package/lib/types/src/index.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
package/lib/cjs/package.json
CHANGED
|
@@ -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-
|
|
61
|
+
"version": "0.0.0-develop-20260424083553"
|
|
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
|
|
1
|
+
"use strict";var A=Object.create;var a=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var b=(r,e)=>{for(var t in e)a(r,t,{get:e[t],enumerable:!0})},y=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of D(e))!x.call(r,n)&&n!==t&&a(r,n,{get:()=>e[n],enumerable:!(s=h(e,n))||s.enumerable});return r};var w=(r,e,t)=>(t=r!=null?A(O(r)):{},y(e||!r||!r.__esModule?a(t,"default",{value:r,enumerable:!0}):t,r)),S=r=>y(a({},"__esModule",{value:!0}),r),d=(r,e,t,s)=>{for(var n=s>1?void 0:s?h(e,t):e,i=r.length-1,g;i>=0;i--)(g=r[i])&&(n=(s?g(e,t,n):g(n))||n);return s&&n&&a(e,t,n),n},l=(r,e)=>(t,s)=>e(t,s,r);var C={};b(C,{HttpAccountOwnershipDataSource:()=>p});module.exports=S(C);var f=w(require("axios")),u=require("inversify"),c=require("purify-ts"),o=require("../../account-ownership/data/AccountOwnershipError"),E=require("../../config/di/configTypes"),m=require("../../shared/constant/HttpHeaders"),k=w(require("../../../package.json"));let p=class{constructor(e){this.config=e}async getDescriptor({publicKey:e,address:t,challenge:s,network:n}){try{const i=await f.default.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${t}`,params:{challenge:s,network:n},headers:{[m.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${k.default.version}`,[m.LEDGER_ORIGIN_TOKEN_HEADER]:this.config.originToken}});return i.data?this.isAccountOwnershipDto(i.data)?(0,c.Right)({signedDescriptor:i.data.signedDescriptor,keyId:i.data.keyId,keyUsage:i.data.keyUsage}):(0,c.Left)(new o.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):(0,c.Left)(new o.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(i){return(0,c.Left)(this.classifyError(i))}}classifyError(e){if(f.default.isAxiosError(e)&&e.response){const t=e.response.status,s=this.extractBackendMessage(e.response.data,e.message);return this.classifyFromStatus(t,s)}if(this.hasNumericStatus(e)){const t=e.status,s=this.extractErrorMessage(e);return this.classifyFromStatus(t,s)}return new o.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}classifyFromStatus(e,t){return e>=400&&e<500?new o.AccountOwnershipError("verification_failed",t):new o.AccountOwnershipError("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${e}: ${t}`)}hasNumericStatus(e){return typeof e=="object"&&e!==null&&"status"in e&&typeof e.status=="number"}extractErrorMessage(e){return typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"?e.message:typeof e=="string"?e:"Unknown error"}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=d([(0,u.injectable)(),l(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
|
|
5
|
-
"mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAyC,
|
|
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 * unrecognized errors) is marked as `service_unavailable`.\n *\n * Two shapes are recognized:\n * - Vanilla {@link AxiosError} with `.response` (standalone axios usage).\n * - Any error carrying a numeric `.status` field. Consumers may install a\n * global axios interceptor that replaces {@link AxiosError} with a\n * custom class, typically stripping `.response` but preserving the HTTP\n * status on a top-level `.status` field. The duck-typed branch keeps\n * classification correct on those paths without coupling to any\n * host-specific class.\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 return this.classifyFromStatus(status, backendMessage);\n }\n\n if (this.hasNumericStatus(error)) {\n const status = error.status;\n const message = this.extractErrorMessage(error);\n return this.classifyFromStatus(status, message);\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n );\n }\n\n private classifyFromStatus(\n status: number,\n message: string,\n ): AccountOwnershipError {\n if (status >= 400 && status < 500) {\n return new AccountOwnershipError(\"verification_failed\", message);\n }\n return new AccountOwnershipError(\n \"service_unavailable\",\n `[ContextModule] HttpAccountOwnershipDataSource: backend ${status}: ${message}`,\n );\n }\n\n private hasNumericStatus(value: unknown): value is { status: number } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as { status: unknown }).status === \"number\"\n );\n }\n\n private extractErrorMessage(value: unknown): string {\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"message\" in value &&\n typeof (value as { message: unknown }).message === \"string\"\n ) {\n return (value as { message: string }).message;\n }\n if (typeof value === \"string\") {\n return value;\n }\n return \"Unknown error\";\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,CAiBQ,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,EACA,OAAO,KAAK,mBAAmBC,EAAQC,CAAc,CACvD,CAEA,GAAI,KAAK,iBAAiBF,CAAK,EAAG,CAChC,MAAMC,EAASD,EAAM,OACfG,EAAU,KAAK,oBAAoBH,CAAK,EAC9C,OAAO,KAAK,mBAAmBC,EAAQE,CAAO,CAChD,CAEA,OAAO,IAAI,wBACT,sBACA,8FACF,CACF,CAEQ,mBACNF,EACAE,EACuB,CACvB,OAAIF,GAAU,KAAOA,EAAS,IACrB,IAAI,wBAAsB,sBAAuBE,CAAO,EAE1D,IAAI,wBACT,sBACA,2DAA2DF,CAAM,KAAKE,CAAO,EAC/E,CACF,CAEQ,iBAAiBC,EAA6C,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,WAAYA,GACZ,OAAQA,EAA8B,QAAW,QAErD,CAEQ,oBAAoBA,EAAwB,CAClD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,OAAQA,EAA+B,SAAY,SAE3CA,EAA8B,QAEpC,OAAOA,GAAU,SACZA,EAEF,eACT,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,sBAAsBF,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,EAhKab,EAANgB,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,IAJjBjB",
|
|
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", "message", "value", "data", "fallback", "__decorateClass", "__decorateParam"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var x=Object.create;var m=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var b=(s,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of k(n))!y.call(s,e)&&e!==r&&m(s,e,{get:()=>n[e],enumerable:!(t=h(n,e))||t.enumerable});return s};var g=(s,n,r)=>(r=s!=null?x(v(s)):{},b(n||!s||!s.__esModule?m(r,"default",{value:s,enumerable:!0}):r,s));var a=g(require("axios")),d=require("purify-ts"),l=require("../../account-ownership/data/AccountOwnershipError"),p=require("../../shared/constant/HttpHeaders"),f=g(require("../../../package.json")),o=require("./HttpAccountOwnershipDataSource");vi.mock("axios");function i(s,n,r="Request failed"){const t=new a.AxiosError(r);return t.message=r,t.response={status:s,data:n,statusText:"",headers:{},config:{}},t}function w(s,n){const r=new Error(n);return r.status=s,r}describe("HttpAccountOwnershipDataSource",()=>{const s={metadataServiceDomain:{url:"https://nft.api.live.ledger-test.com"},originToken:"test-origin-token"},n={signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"},r={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(a.default,"isAxiosError").mockImplementation(t=>t instanceof a.AxiosError)}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:n});const t=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);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:{[p.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${f.default.version}`,[p.LEDGER_ORIGIN_TOKEN_HEADER]:"test-origin-token"}}),expect(t).toEqual((0,d.Right)(n))}),it("should pass testnet network parameter",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:n}),await new o.HttpAccountOwnershipDataSource(s).getDescriptor({...r,network:"testnet"}),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0xabcdef",network:"testnet"}}))}),it("should classify empty response as service_unavailable",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:null});const t=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(t.isLeft()).toBe(!0);const e=t.extract();expect(e).toBeInstanceOf(l.AccountOwnershipError),expect(e.kind).toBe("service_unavailable"),expect(e.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(t,e)=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:e});const c=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(c.isLeft()).toBe(!0);const u=c.extract();expect(u).toBeInstanceOf(l.AccountOwnershipError),expect(u.kind).toBe("service_unavailable"),expect(u.message).toContain("invalid response format")}),it("should classify 422 with { message } body as verification_failed and forward backend message",async()=>{const t="Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet";vi.spyOn(a.default,"request").mockRejectedValue(i(422,{message:t}));const e=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(e.isLeft()).toBe(!0);const c=e.extract();expect(c).toBeInstanceOf(l.AccountOwnershipError),expect(c.kind).toBe("verification_failed"),expect(c.message).toBe(t)}),it.each([400,401,403,404,429])("should classify HTTP %s as verification_failed",async t=>{vi.spyOn(a.default,"request").mockRejectedValue(i(t,{message:"refused"}));const c=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(c.kind).toBe("verification_failed"),expect(c.message).toBe("refused")}),it("should classify 500 as service_unavailable with status prefix",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(500,{message:"internal error"}));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("service_unavailable"),expect(e.message).toContain("backend 500"),expect(e.message).toContain("internal error")}),it.each([502,503,504])("should classify HTTP %s as service_unavailable",async t=>{vi.spyOn(a.default,"request").mockRejectedValue(i(t,{message:"down"}));const c=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(c.kind).toBe("service_unavailable")}),it("should accept string body and forward it as message on 4xx",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(422,"plain text reason"));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("plain text reason")}),it("should fall back to axios error message when body has no message",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(422,{},"Request failed with status code 422"));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("Request failed with status code 422")}),it("should fall back to axios error message when body message is empty",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(422,{message:""},"Request failed with status code 422"));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("Request failed with status code 422")}),it("should classify non-axios / network errors as service_unavailable",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error("ECONNREFUSED"));const t=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(t).toEqual((0,d.Left)(new l.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),describe("intercepted error shape (numeric .status on the error)",()=>{it.each([400,401,403,404,422,429])("should classify HTTP %s on .status as verification_failed and forward message",async t=>{const e="Address ByteVector(...) is not associated with the given public key ByteVector(...)";vi.spyOn(a.default,"request").mockRejectedValue(w(t,e));const u=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(u.kind).toBe("verification_failed"),expect(u.message).toBe(e)}),it.each([500,502,503,504])("should classify HTTP %s on .status as service_unavailable with status prefix",async t=>{vi.spyOn(a.default,"request").mockRejectedValue(w(t,"down"));const c=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(c.kind).toBe("service_unavailable"),expect(c.message).toContain(`backend ${t}`),expect(c.message).toContain("down")}),it("should ignore non-numeric .status and fall through to service_unavailable fallback",async()=>{const t=new Error("bad");t.status="422",vi.spyOn(a.default,"request").mockRejectedValue(t);const e=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(e).toEqual((0,d.Left)(new l.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should forward .message from plain object errors (not Error instances)",async()=>{vi.spyOn(a.default,"request").mockRejectedValue({status:422,message:"plain object message"});const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("plain object message")}),it("should use an 'Unknown error' fallback when the object has no usable message",async()=>{vi.spyOn(a.default,"request").mockRejectedValue({status:422});const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("Unknown error")})}),it("should use correct metadata service URL from config",async()=>{const t={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:n}),await new o.HttpAccountOwnershipDataSource(t).getDescriptor(r),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",headers:expect.objectContaining({[p.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": "wdAAA,IAAAA,
|
|
6
|
-
"names": ["import_axios", "import_purify_ts", "import_HttpHeaders", "import_package", "import_HttpAccountOwnershipDataSource", "config", "validDto", "
|
|
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\nfunction makeInterceptedError(status: number, message: string): Error {\n const err = new Error(message);\n (err as unknown as { status: number }).status = status;\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 // Consumers may install a global axios interceptor that replaces\n // AxiosError with a custom class, preserving the HTTP status on\n // `.status` and dropping `.response`. The datasource must still\n // classify these.\n describe(\"intercepted error shape (numeric .status on the error)\", () => {\n it.each([400, 401, 403, 404, 422, 429])(\n \"should classify HTTP %s on .status as verification_failed and forward message\",\n async (status) => {\n const backendMessage =\n \"Address ByteVector(...) is not associated with the given public key ByteVector(...)\";\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeInterceptedError(status, backendMessage),\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(backendMessage);\n },\n );\n\n it.each([500, 502, 503, 504])(\n \"should classify HTTP %s on .status as service_unavailable with status prefix\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeInterceptedError(status, \"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 expect(err.message).toContain(`backend ${status}`);\n expect(err.message).toContain(\"down\");\n },\n );\n\n it(\"should ignore non-numeric .status and fall through to service_unavailable fallback\", async () => {\n const err = new Error(\"bad\");\n (err as unknown as { status: string }).status = \"422\";\n vi.spyOn(axios, \"request\").mockRejectedValue(err);\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 forward .message from plain object errors (not Error instances)\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue({\n status: 422,\n message: \"plain object message\",\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 object message\");\n });\n\n it(\"should use an 'Unknown error' fallback when the object has no usable message\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue({ status: 422 });\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(\"Unknown error\");\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": "wdAAA,IAAAA,EAAsD,oBACtDC,EAA4B,qBAE5BC,EAAsC,0DAEtCC,EAGO,yCACPC,EAAoB,iCAEpBC,EAA+C,4CAE/C,GAAG,KAAK,OAAO,EAEf,SAASC,EACPC,EACAC,EACAC,EAAU,iBACE,CACZ,MAAMC,EAAM,IAAI,aAAWD,CAAO,EAClC,OAAAC,EAAI,QAAUD,EACdC,EAAI,SAAW,CACb,OAAAH,EACA,KAAAC,EACA,WAAY,GACZ,QAAS,CAAC,EACV,OAAQ,CAAC,CACX,EACOE,CACT,CAEA,SAASC,EAAqBJ,EAAgBE,EAAwB,CACpE,MAAMC,EAAM,IAAI,MAAMD,CAAO,EAC7B,OAACC,EAAsC,OAASH,EACzCG,CACT,CAEA,SAAS,iCAAkC,IAAM,CAC/C,MAAME,EAAqC,CACzC,sBAAuB,CACrB,IAAK,sCACP,EACA,YAAa,mBACf,EAEMC,EAAW,CACf,iBAAkB,yBAClB,MAAO,sBACP,SAAU,cACZ,EAEMC,EAAa,CACjB,UAAW,mBACX,QAAS,qDACT,UAAW,WACX,QAAS,SACX,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,EACjB,GAAG,MAAM,EAAAC,QAAO,cAAc,EAAE,mBAC7BC,GAAwCA,aAAiB,YAC5D,CACF,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,iDAAkD,SAAY,CAC/D,GAAG,MAAM,EAAAD,QAAO,SAAS,EAAE,kBAAkB,CAC3C,OAAQ,IACR,KAAMF,CACR,CAAC,EAED,MAAMI,EAAS,MAAM,IAAI,iCACvBL,CACF,EAAE,cAAcE,CAAU,EAE1B,OAAO,EAAAC,QAAM,OAAO,EAAE,qBAAqB,CACzC,OAAQ,MACR,IAAK,+HACL,OAAQ,CACN,UAAW,WACX,QAAS,SACX,EACA,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAG,QAAQ,OAAO,GACjE,CAAC,4BAA0B,EAAG,mBAChC,CACF,CAAC,EACD,OAAOD,CAAM,EAAE,WAAQ,SAAMJ,CAAQ,CAAC,CACxC,CAAC,EAED,GAAG,wCAAyC,SAAY,CACtD,GAAG,MAAM,EAAAE,QAAO,SAAS,EAAE,kBAAkB,CAC3C,OAAQ,IACR,KAAMF,CACR,CAAC,EAED,MAAM,IAAI,iCAA+BD,CAAM,EAAE,cAAc,CAC7D,GAAGE,EACH,QAAS,SACX,CAAC,EAED,OAAO,EAAAC,QAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,OAAQ,CACN,UAAW,WACX,QAAS,SACX,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,wDAAyD,SAAY,CACtE,GAAG,MAAM,EAAAA,QAAO,SAAS,EAAE,kBAAkB,CAC3C,OAAQ,IACR,KAAM,IACR,CAAC,EAED,MAAME,EAAS,MAAM,IAAI,iCACvBL,CACF,EAAE,cAAcE,CAAU,EAE1B,OAAOG,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,MAAMP,EAAMO,EAAO,QAAQ,EAC3B,OAAOP,CAAG,EAAE,eAAe,uBAAqB,EAChD,OAAOA,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,UAAU,2BAA2B,CAC3D,CAAC,EAED,GAAG,KAAK,CACN,CAAC,2BAA4B,CAAE,MAAO,IAAK,SAAU,GAAI,CAAC,EAC1D,CAAC,gBAAiB,CAAE,iBAAkB,IAAK,SAAU,GAAI,CAAC,EAC1D,CAAC,mBAAoB,CAAE,iBAAkB,IAAK,MAAO,GAAI,CAAC,EAC1D,CACE,mBACA,CAAE,iBAAkB,IAAK,MAAO,IAAK,SAAU,GAAI,CACrD,CACF,CAAC,EACC,iEACA,MAAOS,EAAQX,IAAS,CACtB,GAAG,MAAM,EAAAO,QAAO,SAAS,EAAE,kBAAkB,CAAE,OAAQ,IAAK,KAAAP,CAAK,CAAC,EAElE,MAAMS,EAAS,MAAM,IAAI,iCACvBL,CACF,EAAE,cAAcE,CAAU,EAE1B,OAAOG,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,MAAMP,EAAMO,EAAO,QAAQ,EAC3B,OAAOP,CAAG,EAAE,eAAe,uBAAqB,EAChD,OAAOA,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,UAAU,yBAAyB,CACzD,CACF,EAEA,GAAG,+FAAgG,SAAY,CAC7G,MAAMU,EACJ,uIACF,GAAG,MAAM,EAAAL,QAAO,SAAS,EAAE,kBACzBT,EAAe,IAAK,CAAE,QAASc,CAAe,CAAC,CACjD,EAEA,MAAMH,EAAS,MAAM,IAAI,iCACvBL,CACF,EAAE,cAAcE,CAAU,EAE1B,OAAOG,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjC,MAAMP,EAAMO,EAAO,QAAQ,EAC3B,OAAOP,CAAG,EAAE,eAAe,uBAAqB,EAChD,OAAOA,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAKU,CAAc,CACzC,CAAC,EAED,GAAG,KAAK,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,EAC/B,iDACA,MAAOb,GAAW,CAChB,GAAG,MAAM,EAAAQ,QAAO,SAAS,EAAE,kBACzBT,EAAeC,EAAQ,CAAE,QAAS,SAAU,CAAC,CAC/C,EAMA,MAAMG,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAK,SAAS,CACpC,CACF,EAEA,GAAG,gEAAiE,SAAY,CAC9E,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBACzBT,EAAe,IAAK,CAAE,QAAS,gBAAiB,CAAC,CACnD,EAMA,MAAMI,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,UAAU,aAAa,EAC3C,OAAOA,EAAI,OAAO,EAAE,UAAU,gBAAgB,CAChD,CAAC,EAED,GAAG,KAAK,CAAC,IAAK,IAAK,GAAG,CAAC,EACrB,iDACA,MAAOH,GAAW,CAChB,GAAG,MAAM,EAAAQ,QAAO,SAAS,EAAE,kBACzBT,EAAeC,EAAQ,CAAE,QAAS,MAAO,CAAC,CAC5C,EAMA,MAAMG,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,CAC7C,CACF,EAEA,GAAG,6DAA8D,SAAY,CAC3E,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBACzBT,EAAe,IAAK,mBAAmB,CACzC,EAMA,MAAMI,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAK,mBAAmB,CAC9C,CAAC,EAED,GAAG,mEAAoE,SAAY,CACjF,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBACzBT,EAAe,IAAK,CAAC,EAAG,qCAAqC,CAC/D,EAMA,MAAMI,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAK,qCAAqC,CAChE,CAAC,EAED,GAAG,qEAAsE,SAAY,CACnF,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBACzBT,EACE,IACA,CAAE,QAAS,EAAG,EACd,qCACF,CACF,EAMA,MAAMI,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAK,qCAAqC,CAChE,CAAC,EAED,GAAG,oEAAqE,SAAY,CAClF,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkB,IAAI,MAAM,cAAc,CAAC,EAEtE,MAAME,EAAS,MAAM,IAAI,iCACvBL,CACF,EAAE,cAAcE,CAAU,EAE1B,OAAOG,CAAM,EAAE,WACb,QACE,IAAI,wBACF,sBACA,8FACF,CACF,CACF,CACF,CAAC,EAMD,SAAS,yDAA0D,IAAM,CACvE,GAAG,KAAK,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,CAAC,EACpC,gFACA,MAAOV,GAAW,CAChB,MAAMa,EACJ,sFACF,GAAG,MAAM,EAAAL,QAAO,SAAS,EAAE,kBACzBJ,EAAqBJ,EAAQa,CAAc,CAC7C,EAMA,MAAMV,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAKU,CAAc,CACzC,CACF,EAEA,GAAG,KAAK,CAAC,IAAK,IAAK,IAAK,GAAG,CAAC,EAC1B,+EACA,MAAOb,GAAW,CAChB,GAAG,MAAM,EAAAQ,QAAO,SAAS,EAAE,kBACzBJ,EAAqBJ,EAAQ,MAAM,CACrC,EAMA,MAAMG,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,UAAU,WAAWH,CAAM,EAAE,EACjD,OAAOG,EAAI,OAAO,EAAE,UAAU,MAAM,CACtC,CACF,EAEA,GAAG,qFAAsF,SAAY,CACnG,MAAMA,EAAM,IAAI,MAAM,KAAK,EAC1BA,EAAsC,OAAS,MAChD,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkBL,CAAG,EAEhD,MAAMO,EAAS,MAAM,IAAI,iCACvBL,CACF,EAAE,cAAcE,CAAU,EAE1B,OAAOG,CAAM,EAAE,WACb,QACE,IAAI,wBACF,sBACA,8FACF,CACF,CACF,CACF,CAAC,EAED,GAAG,yEAA0E,SAAY,CACvF,GAAG,MAAM,EAAAF,QAAO,SAAS,EAAE,kBAAkB,CAC3C,OAAQ,IACR,QAAS,sBACX,CAAC,EAMD,MAAML,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAK,sBAAsB,CACjD,CAAC,EAED,GAAG,+EAAgF,SAAY,CAC7F,GAAG,MAAM,EAAAK,QAAO,SAAS,EAAE,kBAAkB,CAAE,OAAQ,GAAI,CAAC,EAM5D,MAAML,GAJS,MAAM,IAAI,iCACvBE,CACF,EAAE,cAAcE,CAAU,GAEP,QAAQ,EAC3B,OAAOJ,EAAI,IAAI,EAAE,KAAK,qBAAqB,EAC3C,OAAOA,EAAI,OAAO,EAAE,KAAK,eAAe,CAC1C,CAAC,CACH,CAAC,EAED,GAAG,sDAAuD,SAAY,CACpE,MAAMW,EAA2C,CAC/C,sBAAuB,CACrB,IAAK,qCACP,EACA,YAAa,cACf,EACA,GAAG,MAAM,EAAAN,QAAO,SAAS,EAAE,kBAAkB,CAC3C,OAAQ,IACR,KAAMF,CACR,CAAC,EAED,MAAM,IAAI,iCAA+BQ,CAAY,EAAE,cACrDP,CACF,EAEA,OAAO,EAAAC,QAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,IAAK,8HACL,QAAS,OAAO,iBAAiB,CAC/B,CAAC,4BAA0B,EAAG,cAChC,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_axios", "import_purify_ts", "import_AccountOwnershipError", "import_HttpHeaders", "import_package", "import_HttpAccountOwnershipDataSource", "makeAxiosError", "status", "data", "message", "err", "makeInterceptedError", "config", "validDto", "baseParams", "axios", "value", "result", "PACKAGE", "_label", "backendMessage", "customConfig"]
|
|
7
7
|
}
|
package/lib/cjs/src/index.js
CHANGED
|
@@ -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
|
package/lib/cjs/src/index.js.map
CHANGED
|
@@ -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,
|
|
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
|
}
|
package/lib/esm/package.json
CHANGED
|
@@ -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-
|
|
61
|
+
"version": "0.0.0-develop-20260424083553"
|
|
62
62
|
}
|
|
@@ -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
|
|
1
|
+
var f=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var u=(i,e,t,r)=>{for(var n=r>1?void 0:r?h(e,t):e,s=i.length-1,a;s>=0;s--)(a=i[s])&&(n=(r?a(e,t,n):a(n))||n);return r&&n&&f(e,t,n),n},m=(i,e)=>(t,r)=>e(t,r,i);import g from"axios";import{inject as y,injectable as w}from"inversify";import{Left as p,Right as d}from"purify-ts";import{AccountOwnershipError as o}from"../../account-ownership/data/AccountOwnershipError";import{configTypes as l}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as E,LEDGER_ORIGIN_TOKEN_HEADER as k}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:n}){try{const s=await g.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${t}`,params:{challenge:r,network:n},headers:{[E]:`context-module/${A.version}`,[k]:this.config.originToken}});return s.data?this.isAccountOwnershipDto(s.data)?d({signedDescriptor:s.data.signedDescriptor,keyId:s.data.keyId,keyUsage:s.data.keyUsage}):p(new o("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):p(new o("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(s){return p(this.classifyError(s))}}classifyError(e){if(g.isAxiosError(e)&&e.response){const t=e.response.status,r=this.extractBackendMessage(e.response.data,e.message);return this.classifyFromStatus(t,r)}if(this.hasNumericStatus(e)){const t=e.status,r=this.extractErrorMessage(e);return this.classifyFromStatus(t,r)}return new o("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}classifyFromStatus(e,t){return e>=400&&e<500?new o("verification_failed",t):new o("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${e}: ${t}`)}hasNumericStatus(e){return typeof e=="object"&&e!==null&&"status"in e&&typeof e.status=="number"}extractErrorMessage(e){return typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"?e.message:typeof e=="string"?e:"Unknown error"}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([w(),m(0,y(l.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
|
|
5
|
-
"mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,
|
|
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 * unrecognized errors) is marked as `service_unavailable`.\n *\n * Two shapes are recognized:\n * - Vanilla {@link AxiosError} with `.response` (standalone axios usage).\n * - Any error carrying a numeric `.status` field. Consumers may install a\n * global axios interceptor that replaces {@link AxiosError} with a\n * custom class, typically stripping `.response` but preserving the HTTP\n * status on a top-level `.status` field. The duck-typed branch keeps\n * classification correct on those paths without coupling to any\n * host-specific class.\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 return this.classifyFromStatus(status, backendMessage);\n }\n\n if (this.hasNumericStatus(error)) {\n const status = error.status;\n const message = this.extractErrorMessage(error);\n return this.classifyFromStatus(status, message);\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n );\n }\n\n private classifyFromStatus(\n status: number,\n message: string,\n ): AccountOwnershipError {\n if (status >= 400 && status < 500) {\n return new AccountOwnershipError(\"verification_failed\", message);\n }\n return new AccountOwnershipError(\n \"service_unavailable\",\n `[ContextModule] HttpAccountOwnershipDataSource: backend ${status}: ${message}`,\n );\n }\n\n private hasNumericStatus(value: unknown): value is { status: number } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as { status: unknown }).status === \"number\"\n );\n }\n\n private extractErrorMessage(value: unknown): string {\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"message\" in value &&\n typeof (value as { message: unknown }).message === \"string\"\n ) {\n return (value as { message: string }).message;\n }\n if (typeof value === \"string\") {\n return value;\n }\n return \"Unknown error\";\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,CAiBQ,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,EACA,OAAO,KAAK,mBAAmBC,EAAQC,CAAc,CACvD,CAEA,GAAI,KAAK,iBAAiBF,CAAK,EAAG,CAChC,MAAMC,EAASD,EAAM,OACfG,EAAU,KAAK,oBAAoBH,CAAK,EAC9C,OAAO,KAAK,mBAAmBC,EAAQE,CAAO,CAChD,CAEA,OAAO,IAAIJ,EACT,sBACA,8FACF,CACF,CAEQ,mBACNE,EACAE,EACuB,CACvB,OAAIF,GAAU,KAAOA,EAAS,IACrB,IAAIF,EAAsB,sBAAuBI,CAAO,EAE1D,IAAIJ,EACT,sBACA,2DAA2DE,CAAM,KAAKE,CAAO,EAC/E,CACF,CAEQ,iBAAiBC,EAA6C,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,WAAYA,GACZ,OAAQA,EAA8B,QAAW,QAErD,CAEQ,oBAAoBA,EAAwB,CAClD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,OAAQA,EAA+B,SAAY,SAE3CA,EAA8B,QAEpC,OAAOA,GAAU,SACZA,EAEF,eACT,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,sBAAsBF,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,EAhKalB,EAANqB,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAJjBzB",
|
|
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", "message", "value", "data", "fallback", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import r,{AxiosError as g}from"axios";import{Left as d,Right as w}from"purify-ts";import{AccountOwnershipError as l}from"../../account-ownership/data/AccountOwnershipError";import{LEDGER_CLIENT_VERSION_HEADER as f,LEDGER_ORIGIN_TOKEN_HEADER as p}from"../../shared/constant/HttpHeaders";import x from"../../../package.json";import{HttpAccountOwnershipDataSource as o}from"./HttpAccountOwnershipDataSource";vi.mock("axios");function i(a,c,s="Request failed"){const e=new g(s);return e.message=s,e.response={status:a,data:c,statusText:"",headers:{},config:{}},e}function m(a,c){const s=new Error(c);return s.status=a,s}describe("HttpAccountOwnershipDataSource",()=>{const a={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"},s={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(r,"isAxiosError").mockImplementation(e=>e instanceof g)}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:c});const e=await new o(a).getDescriptor(s);expect(r.request).toHaveBeenCalledWith({method:"GET",url:"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",params:{challenge:"0xabcdef",network:"mainnet"},headers:{[f]:`context-module/${x.version}`,[p]:"test-origin-token"}}),expect(e).toEqual(w(c))}),it("should pass testnet network parameter",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:c}),await new o(a).getDescriptor({...s,network:"testnet"}),expect(r.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0xabcdef",network:"testnet"}}))}),it("should classify empty response as service_unavailable",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:null});const e=await new o(a).getDescriptor(s);expect(e.isLeft()).toBe(!0);const t=e.extract();expect(t).toBeInstanceOf(l),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(r,"request").mockResolvedValue({status:200,data:t});const n=await new o(a).getDescriptor(s);expect(n.isLeft()).toBe(!0);const u=n.extract();expect(u).toBeInstanceOf(l),expect(u.kind).toBe("service_unavailable"),expect(u.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(r,"request").mockRejectedValue(i(422,{message:e}));const t=await new o(a).getDescriptor(s);expect(t.isLeft()).toBe(!0);const n=t.extract();expect(n).toBeInstanceOf(l),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(r,"request").mockRejectedValue(i(e,{message:"refused"}));const n=(await new o(a).getDescriptor(s)).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(r,"request").mockRejectedValue(i(500,{message:"internal error"}));const t=(await new o(a).getDescriptor(s)).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(r,"request").mockRejectedValue(i(e,{message:"down"}));const n=(await new o(a).getDescriptor(s)).extract();expect(n.kind).toBe("service_unavailable")}),it("should accept string body and forward it as message on 4xx",async()=>{vi.spyOn(r,"request").mockRejectedValue(i(422,"plain text reason"));const t=(await new o(a).getDescriptor(s)).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(r,"request").mockRejectedValue(i(422,{},"Request failed with status code 422"));const t=(await new o(a).getDescriptor(s)).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(r,"request").mockRejectedValue(i(422,{message:""},"Request failed with status code 422"));const t=(await new o(a).getDescriptor(s)).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(r,"request").mockRejectedValue(new Error("ECONNREFUSED"));const e=await new o(a).getDescriptor(s);expect(e).toEqual(d(new l("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),describe("intercepted error shape (numeric .status on the error)",()=>{it.each([400,401,403,404,422,429])("should classify HTTP %s on .status as verification_failed and forward message",async e=>{const t="Address ByteVector(...) is not associated with the given public key ByteVector(...)";vi.spyOn(r,"request").mockRejectedValue(m(e,t));const u=(await new o(a).getDescriptor(s)).extract();expect(u.kind).toBe("verification_failed"),expect(u.message).toBe(t)}),it.each([500,502,503,504])("should classify HTTP %s on .status as service_unavailable with status prefix",async e=>{vi.spyOn(r,"request").mockRejectedValue(m(e,"down"));const n=(await new o(a).getDescriptor(s)).extract();expect(n.kind).toBe("service_unavailable"),expect(n.message).toContain(`backend ${e}`),expect(n.message).toContain("down")}),it("should ignore non-numeric .status and fall through to service_unavailable fallback",async()=>{const e=new Error("bad");e.status="422",vi.spyOn(r,"request").mockRejectedValue(e);const t=await new o(a).getDescriptor(s);expect(t).toEqual(d(new l("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should forward .message from plain object errors (not Error instances)",async()=>{vi.spyOn(r,"request").mockRejectedValue({status:422,message:"plain object message"});const t=(await new o(a).getDescriptor(s)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("plain object message")}),it("should use an 'Unknown error' fallback when the object has no usable message",async()=>{vi.spyOn(r,"request").mockRejectedValue({status:422});const t=(await new o(a).getDescriptor(s)).extract();expect(t.kind).toBe("verification_failed"),expect(t.message).toBe("Unknown error")})}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"};vi.spyOn(r,"request").mockResolvedValue({status:200,data:c}),await new o(e).getDescriptor(s),expect(r.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",headers:expect.objectContaining({[p]:"custom-token"})}))})})});
|
|
2
2
|
//# sourceMappingURL=HttpAccountOwnershipDataSource.test.js.map
|