@xyo-network/api-call-witness 2.82.2 → 2.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/Config.d.cts +34 -37
- package/dist/browser/Config.d.cts.map +1 -1
- package/dist/browser/Config.d.mts +34 -37
- package/dist/browser/Config.d.mts.map +1 -1
- package/dist/browser/Config.d.ts +34 -37
- package/dist/browser/Config.d.ts.map +1 -1
- package/dist/browser/Payload.d.cts +22 -23
- package/dist/browser/Payload.d.cts.map +1 -1
- package/dist/browser/Payload.d.mts +22 -23
- package/dist/browser/Payload.d.mts.map +1 -1
- package/dist/browser/Payload.d.ts +22 -23
- package/dist/browser/Payload.d.ts.map +1 -1
- package/dist/browser/Witness.d.cts.map +1 -1
- package/dist/browser/Witness.d.mts.map +1 -1
- package/dist/browser/Witness.d.ts.map +1 -1
- package/dist/browser/index.cjs +4 -4
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +4 -4
- package/dist/browser/index.js.map +1 -1
- package/dist/node/Config.d.cts +34 -37
- package/dist/node/Config.d.cts.map +1 -1
- package/dist/node/Config.d.mts +34 -37
- package/dist/node/Config.d.mts.map +1 -1
- package/dist/node/Config.d.ts +34 -37
- package/dist/node/Config.d.ts.map +1 -1
- package/dist/node/Payload.d.cts +22 -23
- package/dist/node/Payload.d.cts.map +1 -1
- package/dist/node/Payload.d.mts +22 -23
- package/dist/node/Payload.d.mts.map +1 -1
- package/dist/node/Payload.d.ts +22 -23
- package/dist/node/Payload.d.ts.map +1 -1
- package/dist/node/Witness.d.cts.map +1 -1
- package/dist/node/Witness.d.mts.map +1 -1
- package/dist/node/Witness.d.ts.map +1 -1
- package/dist/node/index.cjs +4 -4
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +4 -4
- package/dist/node/index.js.map +1 -1
- package/package.json +11 -11
- package/src/Config.ts +5 -5
- package/src/Payload.ts +13 -8
- package/src/Witness.ts +2 -2
package/dist/browser/index.cjs
CHANGED
|
@@ -55,9 +55,9 @@ var import_payload_model = require("@xyo-network/payload-model");
|
|
|
55
55
|
var ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
|
|
56
56
|
var isApiCallWitnessConfig = (0, import_payload_model.isPayloadOfSchemaType)(ApiCallWitnessConfigSchema);
|
|
57
57
|
var asApiCallWitnessConfig = import_object.AsObjectFactory.create(isApiCallWitnessConfig);
|
|
58
|
-
var isApiUriCallWitnessConfig = (
|
|
58
|
+
var isApiUriCallWitnessConfig = (value) => isApiCallWitnessConfig(value) && !!value.uri;
|
|
59
59
|
var asApiUriCallWitnessConfig = import_object.AsObjectFactory.create(isApiUriCallWitnessConfig);
|
|
60
|
-
var isApiUriTemplateCallWitnessConfig = (
|
|
60
|
+
var isApiUriTemplateCallWitnessConfig = (value) => isApiCallWitnessConfig(value) && !!value.uriTemplate;
|
|
61
61
|
var asApiUriTemplateCallWitnessConfig = import_object.AsObjectFactory.create(isApiUriTemplateCallWitnessConfig);
|
|
62
62
|
|
|
63
63
|
// src/Payload.ts
|
|
@@ -67,9 +67,9 @@ var ApiCallSchema = "network.xyo.api.call";
|
|
|
67
67
|
var ApiCallResultSchema = "network.xyo.api.call.result";
|
|
68
68
|
var isApiCall = (0, import_payload_model2.isPayloadOfSchemaType)(ApiCallSchema);
|
|
69
69
|
var asApiCall = import_object2.AsObjectFactory.create(isApiCall);
|
|
70
|
-
var isApiUriCall = (
|
|
70
|
+
var isApiUriCall = (value) => isApiCall(value) && !!value.uri;
|
|
71
71
|
var asApiUriCall = import_object2.AsObjectFactory.create(isApiUriCall);
|
|
72
|
-
var isApiUriTemplateCall = (
|
|
72
|
+
var isApiUriTemplateCall = (value) => isApiCall(value) && !!(value.uriTemplate || value.params);
|
|
73
73
|
var asApiUriTemplateCall = import_object2.AsObjectFactory.create(isApiUriTemplateCall);
|
|
74
74
|
|
|
75
75
|
// src/Witness.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Config.ts","../../src/Payload.ts","../../src/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["export * from './Config'\nexport * from './Payload'\nexport * from './Witness'\n","import { AsObjectFactory } from '@xyo-network/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { WitnessConfig } from '@xyo-network/witness-model'\n\nimport { ApiCall, ApiUriCall, ApiUriTemplateCall } from './Payload'\n\nexport const ApiCallWitnessConfigSchema = 'network.xyo.api.call.witness.config'\nexport type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema\n\nexport type ApiCallWitnessConfigBase = WitnessConfig<{\n accept?: 'application/json'\n queries?: ApiCall['queries']\n schema: ApiCallWitnessConfigSchema\n timeout?: number\n verb?: ApiCall['verb']\n}>\n\nexport type ApiUriCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n uri: ApiUriCall['uri']\n }\n>\n\nexport type ApiUriTemplateCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n params?: Record<string, unknown>\n uriTemplate: ApiUriTemplateCall['uriTemplate']\n }\n>\n\nexport type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase\n\nexport const isApiCallWitnessConfig = isPayloadOfSchemaType(ApiCallWitnessConfigSchema)\nexport const asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig)\n\nexport const isApiUriCallWitnessConfig = (payload?: Payload): payload is ApiUriCallWitnessConfig =>\n isApiCallWitnessConfig(payload) && !!(payload as ApiUriCallWitnessConfig).uri\nexport const asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig)\n\nexport const isApiUriTemplateCallWitnessConfig = (payload?: Payload): payload is ApiUriTemplateCallWitnessConfig =>\n isApiCallWitnessConfig(payload) && !!(payload as ApiUriTemplateCallWitnessConfig).uriTemplate\nexport const asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig)\n","import { Hash } from '@xylabs/hex'\nimport { AsObjectFactory } from '@xyo-network/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const ApiCallSchema = 'network.xyo.api.call'\nexport type ApiCallSchema = typeof ApiCallSchema\n\ntype Verb = 'get' | 'post'\ntype Queries = Record<string, string>\n\nexport interface ApiCallFields {\n queries?: Queries\n verb?: Verb\n}\n\nexport type ApiUriCall = Payload<\n ApiCallFields & {\n uri: string\n },\n ApiCallSchema\n>\n\nexport type ApiUriTemplateCall = Payload<\n ApiCallFields & {\n params?: Record<string, unknown>\n uriTemplate?: string\n },\n ApiCallSchema\n>\n\nexport type ApiCall = ApiUriCall | ApiUriTemplateCall\n\nexport const ApiCallResultSchema = 'network.xyo.api.call.result'\nexport type ApiCallResultSchema = typeof ApiCallResultSchema\n\nexport interface HttpMeta {\n code?: string\n status?: number\n}\n\nexport type ApiCallJsonResult<T extends object | [] = object> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallBase64Result = Payload<\n {\n call: Hash\n contentType: Exclude<string, ApiCallJsonResult['contentType']>\n data: string\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallErrorResult = Payload<\n {\n call: Hash\n http?: HttpMeta\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallResult = ApiCallBase64Result | ApiCallJsonResult | ApiCallErrorResult\n\nexport const isApiCall = isPayloadOfSchemaType(ApiCallSchema)\nexport const asApiCall = AsObjectFactory.create(isApiCall)\n\nexport const isApiUriCall = (payload?: Payload): payload is ApiUriCall => isApiCall(payload) && !!(payload as ApiUriCall).uri\nexport const asApiUriCall = AsObjectFactory.create(isApiUriCall)\n\nexport const isApiUriTemplateCall = (payload?: Payload): payload is ApiUriTemplateCall =>\n isApiCall(payload) && !!((payload as ApiUriTemplateCall).uriTemplate || (payload as ApiUriTemplateCall).params)\nexport const asApiUriTemplateCall = AsObjectFactory.create(isApiUriTemplateCall)\n","import { assertEx } from '@xylabs/assert'\nimport { Axios, AxiosError, AxiosJson } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { JsonArray, JsonObject } from '@xyo-network/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { fromByteArray } from 'base64-js'\nimport template from 'es6-template-strings'\n\nimport { ApiCallWitnessConfig, ApiCallWitnessConfigSchema, asApiUriCallWitnessConfig, asApiUriTemplateCallWitnessConfig } from './Config'\nimport { checkIpfsUrl } from './lib'\nimport {\n ApiCall,\n ApiCallBase64Result,\n ApiCallErrorResult,\n ApiCallJsonResult,\n ApiCallResult,\n ApiCallResultSchema,\n ApiCallSchema,\n asApiUriCall,\n asApiUriTemplateCall,\n} from './Payload'\n\nexport type ApiCallWitnessParams = WitnessParams<\n ApiCallWitnessConfig,\n {\n headers?: Record<string, string | undefined>\n ipfsGateway?: string\n }\n>\n\nexport class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {\n static override configSchemas = [ApiCallWitnessConfigSchema]\n\n get accept() {\n return this.config.accept ?? 'application/json'\n }\n\n get ipfsGateway() {\n return this.params.ipfsGateway\n }\n\n get timeout() {\n return this.config.timeout\n }\n\n getFullUri(call?: ApiCall): string {\n const { uri: callUri } = asApiUriCall(call) ?? {}\n const { uriTemplate: callUriTemplate, params: callParams, queries: callQueries } = asApiUriTemplateCall(call) ?? {}\n const { uri: configUri } = asApiUriCallWitnessConfig(this.config) ?? {}\n const { uriTemplate: configUriTemplate, params: configParams, queries: configQueries } = asApiUriTemplateCallWitnessConfig(this.config) ?? {}\n\n const params = { ...configParams, ...callParams }\n\n let url: URL | undefined = undefined\n\n if (callUri) {\n url = new URL(callUri)\n } else if (callUriTemplate) {\n url = new URL(template(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(template(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n queries.map(([key, value]) => url?.searchParams.set(key, value))\n return url.href\n }\n\n throw Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n protected override async observeHandler(inPayloads: ApiCall[] = []): Promise<ApiCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(ApiCallSchema)).map(async (call) => {\n const { verb: callVerb } = call\n const { verb: configVerb } = this.config\n const verb = callVerb ?? configVerb ?? 'get'\n const uri = this.getFullUri(call)\n\n const validatedUri = assertEx(checkIpfsUrl(uri, this.ipfsGateway), 'Invalid URI')\n\n if (verb === 'get') {\n return this.httpGet(validatedUri, uri)\n }\n\n const observation: ApiCallResult = {\n call: await PayloadHasher.hashAsync(call),\n schema: ApiCallResultSchema,\n }\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.error(`Error [${this.config.name}]: ${error.message}`)\n console.log(error.stack)\n throw error\n }\n }\n\n private async httpGet(url: string, call: Hash): Promise<ApiCallResult> {\n const result: ApiCallResult = {\n call,\n schema: ApiCallResultSchema,\n }\n try {\n switch (this.accept) {\n case 'application/json': {\n const axios = new AxiosJson({ headers: this.params.headers, timeout: this.timeout })\n const response = await axios.get<JsonArray | JsonObject>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n default: {\n const axios = new Axios({ headers: this.params.headers, responseType: 'arraybuffer', timeout: this.timeout })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallBase64Result\n jsonResult.data = fromByteArray(Buffer.from(response.data, 'binary'))\n jsonResult.contentType = response.headers['content-type']?.toString() ?? 'application/octet-stream'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n }\n } catch (ex) {\n const axiosError = ex as AxiosError\n if (axiosError.isAxiosError) {\n if (axiosError?.response?.status !== undefined) {\n result.http = result.http ?? {}\n result.http.status = axiosError?.response?.status\n }\n if (axiosError?.code !== undefined) {\n result.http = result.http ?? {}\n result.http.code = axiosError?.code\n }\n return result\n } else {\n throw ex\n }\n }\n return result\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nconst allowIpfsIoRepair = true\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway?: string): string => {\n try {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else if (allowIpfsIoRepair && protocol === 'https' && host === 'ipfs.io') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n const pathParts = path.split('/')\n if (pathParts[0] === 'ipfs') {\n pathParts.shift()\n }\n path = pathParts.join('/')\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n } catch (ex) {\n //const error = ex as Error\n //console.error(`${error.name}:${error.message} [${urlToCheck}]`)\n //console.log(error.stack)\n return urlToCheck\n }\n}\n"],"mappings":"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","names":["import_object","import_payload_model","import_assert","import_payload_model","template"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Config.ts","../../src/Payload.ts","../../src/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["export * from './Config'\nexport * from './Payload'\nexport * from './Witness'\n","import { AsObjectFactory } from '@xyo-network/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessConfig } from '@xyo-network/witness-model'\n\nimport { ApiCall, ApiUriCall, ApiUriTemplateCall } from './Payload'\n\nexport const ApiCallWitnessConfigSchema = 'network.xyo.api.call.witness.config'\nexport type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema\n\nexport type ApiCallWitnessConfigBase = WitnessConfig<{\n accept?: 'application/json'\n queries?: ApiCall['queries']\n schema: ApiCallWitnessConfigSchema\n timeout?: number\n verb?: ApiCall['verb']\n}>\n\nexport type ApiUriCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n uri: ApiUriCall['uri']\n }\n>\n\nexport type ApiUriTemplateCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n params?: Record<string, unknown>\n uriTemplate: ApiUriTemplateCall['uriTemplate']\n }\n>\n\nexport type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase\n\nexport const isApiCallWitnessConfig = isPayloadOfSchemaType(ApiCallWitnessConfigSchema)\nexport const asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig)\n\nexport const isApiUriCallWitnessConfig = (value?: unknown): value is ApiUriCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriCallWitnessConfig).uri\nexport const asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig)\n\nexport const isApiUriTemplateCallWitnessConfig = (value?: unknown): value is ApiUriTemplateCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriTemplateCallWitnessConfig).uriTemplate\nexport const asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig)\n","import { Hash } from '@xylabs/hex'\nimport { AsObjectFactory, JsonArray, JsonObject } from '@xyo-network/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const ApiCallSchema = 'network.xyo.api.call'\nexport type ApiCallSchema = typeof ApiCallSchema\n\nexport type Verb = 'get' | 'post'\nexport type Queries = Record<string, string>\n\nexport interface ApiCallFields {\n queries?: Queries\n verb?: Verb\n}\n\nexport type ApiUriCall = Payload<\n ApiCallFields & {\n uri: string\n },\n ApiCallSchema\n>\n\nexport type ApiUriTemplateCall = Payload<\n ApiCallFields & {\n params?: Record<string, unknown>\n uriTemplate?: string\n },\n ApiCallSchema\n>\n\nexport type ApiCall = ApiUriCall | ApiUriTemplateCall\n\nexport const ApiCallResultSchema = 'network.xyo.api.call.result'\nexport type ApiCallResultSchema = typeof ApiCallResultSchema\n\nexport interface HttpMeta {\n code?: string\n status?: number\n}\n\nexport type ApiCallJsonResultType = JsonArray | JsonObject\n\nexport type ApiCallJsonResult<T extends ApiCallJsonResultType = ApiCallJsonResultType> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallBase64Result = Payload<\n {\n call: Hash\n contentType: Exclude<string, ApiCallJsonResult['contentType']>\n data: string\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallErrorResult = Payload<\n {\n call: Hash\n http?: HttpMeta\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallResult<TJson extends JsonArray | JsonObject = JsonArray | JsonObject> =\n | ApiCallBase64Result\n | ApiCallJsonResult<TJson>\n | ApiCallErrorResult\n\nexport const isApiCall = isPayloadOfSchemaType(ApiCallSchema)\nexport const asApiCall = AsObjectFactory.create(isApiCall)\n\nexport const isApiUriCall = (value?: unknown): value is ApiUriCall => isApiCall(value) && !!(value as ApiUriCall).uri\nexport const asApiUriCall = AsObjectFactory.create(isApiUriCall)\n\nexport const isApiUriTemplateCall = (value?: unknown): value is ApiUriTemplateCall =>\n isApiCall(value) && !!((value as ApiUriTemplateCall).uriTemplate || (value as ApiUriTemplateCall).params)\nexport const asApiUriTemplateCall = AsObjectFactory.create(isApiUriTemplateCall)\n","import { assertEx } from '@xylabs/assert'\nimport { Axios, AxiosError, AxiosJson } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { fromByteArray } from 'base64-js'\nimport template from 'es6-template-strings'\n\nimport { ApiCallWitnessConfig, ApiCallWitnessConfigSchema, asApiUriCallWitnessConfig, asApiUriTemplateCallWitnessConfig } from './Config'\nimport { checkIpfsUrl } from './lib'\nimport {\n ApiCall,\n ApiCallBase64Result,\n ApiCallErrorResult,\n ApiCallJsonResult,\n ApiCallJsonResultType,\n ApiCallResult,\n ApiCallResultSchema,\n ApiCallSchema,\n asApiUriCall,\n asApiUriTemplateCall,\n} from './Payload'\n\nexport type ApiCallWitnessParams = WitnessParams<\n ApiCallWitnessConfig,\n {\n headers?: Record<string, string | undefined>\n ipfsGateway?: string\n }\n>\n\nexport class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {\n static override configSchemas = [ApiCallWitnessConfigSchema]\n\n get accept() {\n return this.config.accept ?? 'application/json'\n }\n\n get ipfsGateway() {\n return this.params.ipfsGateway\n }\n\n get timeout() {\n return this.config.timeout\n }\n\n getFullUri(call?: ApiCall): string {\n const { uri: callUri } = asApiUriCall(call) ?? {}\n const { uriTemplate: callUriTemplate, params: callParams, queries: callQueries } = asApiUriTemplateCall(call) ?? {}\n const { uri: configUri } = asApiUriCallWitnessConfig(this.config) ?? {}\n const { uriTemplate: configUriTemplate, params: configParams, queries: configQueries } = asApiUriTemplateCallWitnessConfig(this.config) ?? {}\n\n const params = { ...configParams, ...callParams }\n\n let url: URL | undefined = undefined\n\n if (callUri) {\n url = new URL(callUri)\n } else if (callUriTemplate) {\n url = new URL(template(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(template(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n queries.map(([key, value]) => url?.searchParams.set(key, value))\n return url.href\n }\n\n throw Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n protected override async observeHandler(inPayloads: ApiCall[] = []): Promise<ApiCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(ApiCallSchema)).map(async (call) => {\n const { verb: callVerb } = call\n const { verb: configVerb } = this.config\n const verb = callVerb ?? configVerb ?? 'get'\n const uri = this.getFullUri(call)\n\n const validatedUri = assertEx(checkIpfsUrl(uri, this.ipfsGateway), 'Invalid URI')\n\n if (verb === 'get') {\n return this.httpGet(validatedUri, uri)\n }\n\n const observation: ApiCallResult = {\n call: await PayloadHasher.hashAsync(call),\n schema: ApiCallResultSchema,\n }\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.error(`Error [${this.config.name}]: ${error.message}`)\n console.log(error.stack)\n throw error\n }\n }\n\n private async httpGet(url: string, call: Hash): Promise<ApiCallResult> {\n const result: ApiCallResult = {\n call,\n schema: ApiCallResultSchema,\n }\n try {\n switch (this.accept) {\n case 'application/json': {\n const axios = new AxiosJson({ headers: this.params.headers, timeout: this.timeout })\n const response = await axios.get<ApiCallJsonResultType>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n default: {\n const axios = new Axios({ headers: this.params.headers, responseType: 'arraybuffer', timeout: this.timeout })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallBase64Result\n jsonResult.data = fromByteArray(Buffer.from(response.data, 'binary'))\n jsonResult.contentType = response.headers['content-type']?.toString() ?? 'application/octet-stream'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n }\n } catch (ex) {\n const axiosError = ex as AxiosError\n if (axiosError.isAxiosError) {\n if (axiosError?.response?.status !== undefined) {\n result.http = result.http ?? {}\n result.http.status = axiosError?.response?.status\n }\n if (axiosError?.code !== undefined) {\n result.http = result.http ?? {}\n result.http.code = axiosError?.code\n }\n return result\n } else {\n throw ex\n }\n }\n return result\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nconst allowIpfsIoRepair = true\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway?: string): string => {\n try {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else if (allowIpfsIoRepair && protocol === 'https' && host === 'ipfs.io') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n const pathParts = path.split('/')\n if (pathParts[0] === 'ipfs') {\n pathParts.shift()\n }\n path = pathParts.join('/')\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n } catch (ex) {\n //const error = ex as Error\n //console.error(`${error.name}:${error.message} [${urlToCheck}]`)\n //console.log(error.stack)\n return urlToCheck\n }\n}\n"],"mappings":"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","names":["import_object","import_payload_model","import_assert","import_payload_model","template"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -4,9 +4,9 @@ import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
|
4
4
|
var ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
|
|
5
5
|
var isApiCallWitnessConfig = isPayloadOfSchemaType(ApiCallWitnessConfigSchema);
|
|
6
6
|
var asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig);
|
|
7
|
-
var isApiUriCallWitnessConfig = (
|
|
7
|
+
var isApiUriCallWitnessConfig = (value) => isApiCallWitnessConfig(value) && !!value.uri;
|
|
8
8
|
var asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig);
|
|
9
|
-
var isApiUriTemplateCallWitnessConfig = (
|
|
9
|
+
var isApiUriTemplateCallWitnessConfig = (value) => isApiCallWitnessConfig(value) && !!value.uriTemplate;
|
|
10
10
|
var asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig);
|
|
11
11
|
|
|
12
12
|
// src/Payload.ts
|
|
@@ -16,9 +16,9 @@ var ApiCallSchema = "network.xyo.api.call";
|
|
|
16
16
|
var ApiCallResultSchema = "network.xyo.api.call.result";
|
|
17
17
|
var isApiCall = isPayloadOfSchemaType2(ApiCallSchema);
|
|
18
18
|
var asApiCall = AsObjectFactory2.create(isApiCall);
|
|
19
|
-
var isApiUriCall = (
|
|
19
|
+
var isApiUriCall = (value) => isApiCall(value) && !!value.uri;
|
|
20
20
|
var asApiUriCall = AsObjectFactory2.create(isApiUriCall);
|
|
21
|
-
var isApiUriTemplateCall = (
|
|
21
|
+
var isApiUriTemplateCall = (value) => isApiCall(value) && !!(value.uriTemplate || value.params);
|
|
22
22
|
var asApiUriTemplateCall = AsObjectFactory2.create(isApiUriTemplateCall);
|
|
23
23
|
|
|
24
24
|
// src/Witness.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Config.ts","../../src/Payload.ts","../../src/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["import { AsObjectFactory } from '@xyo-network/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\nimport { WitnessConfig } from '@xyo-network/witness-model'\n\nimport { ApiCall, ApiUriCall, ApiUriTemplateCall } from './Payload'\n\nexport const ApiCallWitnessConfigSchema = 'network.xyo.api.call.witness.config'\nexport type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema\n\nexport type ApiCallWitnessConfigBase = WitnessConfig<{\n accept?: 'application/json'\n queries?: ApiCall['queries']\n schema: ApiCallWitnessConfigSchema\n timeout?: number\n verb?: ApiCall['verb']\n}>\n\nexport type ApiUriCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n uri: ApiUriCall['uri']\n }\n>\n\nexport type ApiUriTemplateCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n params?: Record<string, unknown>\n uriTemplate: ApiUriTemplateCall['uriTemplate']\n }\n>\n\nexport type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase\n\nexport const isApiCallWitnessConfig = isPayloadOfSchemaType(ApiCallWitnessConfigSchema)\nexport const asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig)\n\nexport const isApiUriCallWitnessConfig = (payload?: Payload): payload is ApiUriCallWitnessConfig =>\n isApiCallWitnessConfig(payload) && !!(payload as ApiUriCallWitnessConfig).uri\nexport const asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig)\n\nexport const isApiUriTemplateCallWitnessConfig = (payload?: Payload): payload is ApiUriTemplateCallWitnessConfig =>\n isApiCallWitnessConfig(payload) && !!(payload as ApiUriTemplateCallWitnessConfig).uriTemplate\nexport const asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig)\n","import { Hash } from '@xylabs/hex'\nimport { AsObjectFactory } from '@xyo-network/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const ApiCallSchema = 'network.xyo.api.call'\nexport type ApiCallSchema = typeof ApiCallSchema\n\ntype Verb = 'get' | 'post'\ntype Queries = Record<string, string>\n\nexport interface ApiCallFields {\n queries?: Queries\n verb?: Verb\n}\n\nexport type ApiUriCall = Payload<\n ApiCallFields & {\n uri: string\n },\n ApiCallSchema\n>\n\nexport type ApiUriTemplateCall = Payload<\n ApiCallFields & {\n params?: Record<string, unknown>\n uriTemplate?: string\n },\n ApiCallSchema\n>\n\nexport type ApiCall = ApiUriCall | ApiUriTemplateCall\n\nexport const ApiCallResultSchema = 'network.xyo.api.call.result'\nexport type ApiCallResultSchema = typeof ApiCallResultSchema\n\nexport interface HttpMeta {\n code?: string\n status?: number\n}\n\nexport type ApiCallJsonResult<T extends object | [] = object> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallBase64Result = Payload<\n {\n call: Hash\n contentType: Exclude<string, ApiCallJsonResult['contentType']>\n data: string\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallErrorResult = Payload<\n {\n call: Hash\n http?: HttpMeta\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallResult = ApiCallBase64Result | ApiCallJsonResult | ApiCallErrorResult\n\nexport const isApiCall = isPayloadOfSchemaType(ApiCallSchema)\nexport const asApiCall = AsObjectFactory.create(isApiCall)\n\nexport const isApiUriCall = (payload?: Payload): payload is ApiUriCall => isApiCall(payload) && !!(payload as ApiUriCall).uri\nexport const asApiUriCall = AsObjectFactory.create(isApiUriCall)\n\nexport const isApiUriTemplateCall = (payload?: Payload): payload is ApiUriTemplateCall =>\n isApiCall(payload) && !!((payload as ApiUriTemplateCall).uriTemplate || (payload as ApiUriTemplateCall).params)\nexport const asApiUriTemplateCall = AsObjectFactory.create(isApiUriTemplateCall)\n","import { assertEx } from '@xylabs/assert'\nimport { Axios, AxiosError, AxiosJson } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { JsonArray, JsonObject } from '@xyo-network/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { fromByteArray } from 'base64-js'\nimport template from 'es6-template-strings'\n\nimport { ApiCallWitnessConfig, ApiCallWitnessConfigSchema, asApiUriCallWitnessConfig, asApiUriTemplateCallWitnessConfig } from './Config'\nimport { checkIpfsUrl } from './lib'\nimport {\n ApiCall,\n ApiCallBase64Result,\n ApiCallErrorResult,\n ApiCallJsonResult,\n ApiCallResult,\n ApiCallResultSchema,\n ApiCallSchema,\n asApiUriCall,\n asApiUriTemplateCall,\n} from './Payload'\n\nexport type ApiCallWitnessParams = WitnessParams<\n ApiCallWitnessConfig,\n {\n headers?: Record<string, string | undefined>\n ipfsGateway?: string\n }\n>\n\nexport class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {\n static override configSchemas = [ApiCallWitnessConfigSchema]\n\n get accept() {\n return this.config.accept ?? 'application/json'\n }\n\n get ipfsGateway() {\n return this.params.ipfsGateway\n }\n\n get timeout() {\n return this.config.timeout\n }\n\n getFullUri(call?: ApiCall): string {\n const { uri: callUri } = asApiUriCall(call) ?? {}\n const { uriTemplate: callUriTemplate, params: callParams, queries: callQueries } = asApiUriTemplateCall(call) ?? {}\n const { uri: configUri } = asApiUriCallWitnessConfig(this.config) ?? {}\n const { uriTemplate: configUriTemplate, params: configParams, queries: configQueries } = asApiUriTemplateCallWitnessConfig(this.config) ?? {}\n\n const params = { ...configParams, ...callParams }\n\n let url: URL | undefined = undefined\n\n if (callUri) {\n url = new URL(callUri)\n } else if (callUriTemplate) {\n url = new URL(template(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(template(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n queries.map(([key, value]) => url?.searchParams.set(key, value))\n return url.href\n }\n\n throw Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n protected override async observeHandler(inPayloads: ApiCall[] = []): Promise<ApiCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(ApiCallSchema)).map(async (call) => {\n const { verb: callVerb } = call\n const { verb: configVerb } = this.config\n const verb = callVerb ?? configVerb ?? 'get'\n const uri = this.getFullUri(call)\n\n const validatedUri = assertEx(checkIpfsUrl(uri, this.ipfsGateway), 'Invalid URI')\n\n if (verb === 'get') {\n return this.httpGet(validatedUri, uri)\n }\n\n const observation: ApiCallResult = {\n call: await PayloadHasher.hashAsync(call),\n schema: ApiCallResultSchema,\n }\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.error(`Error [${this.config.name}]: ${error.message}`)\n console.log(error.stack)\n throw error\n }\n }\n\n private async httpGet(url: string, call: Hash): Promise<ApiCallResult> {\n const result: ApiCallResult = {\n call,\n schema: ApiCallResultSchema,\n }\n try {\n switch (this.accept) {\n case 'application/json': {\n const axios = new AxiosJson({ headers: this.params.headers, timeout: this.timeout })\n const response = await axios.get<JsonArray | JsonObject>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n default: {\n const axios = new Axios({ headers: this.params.headers, responseType: 'arraybuffer', timeout: this.timeout })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallBase64Result\n jsonResult.data = fromByteArray(Buffer.from(response.data, 'binary'))\n jsonResult.contentType = response.headers['content-type']?.toString() ?? 'application/octet-stream'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n }\n } catch (ex) {\n const axiosError = ex as AxiosError\n if (axiosError.isAxiosError) {\n if (axiosError?.response?.status !== undefined) {\n result.http = result.http ?? {}\n result.http.status = axiosError?.response?.status\n }\n if (axiosError?.code !== undefined) {\n result.http = result.http ?? {}\n result.http.code = axiosError?.code\n }\n return result\n } else {\n throw ex\n }\n }\n return result\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nconst allowIpfsIoRepair = true\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway?: string): string => {\n try {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else if (allowIpfsIoRepair && protocol === 'https' && host === 'ipfs.io') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n const pathParts = path.split('/')\n if (pathParts[0] === 'ipfs') {\n pathParts.shift()\n }\n path = pathParts.join('/')\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n } catch (ex) {\n //const error = ex as Error\n //console.error(`${error.name}:${error.message} [${urlToCheck}]`)\n //console.log(error.stack)\n return urlToCheck\n }\n}\n"],"mappings":"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","names":["AsObjectFactory","isPayloadOfSchemaType","assertEx","isPayloadOfSchemaType","isPayloadOfSchemaType","assertEx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Config.ts","../../src/Payload.ts","../../src/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["import { AsObjectFactory } from '@xyo-network/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessConfig } from '@xyo-network/witness-model'\n\nimport { ApiCall, ApiUriCall, ApiUriTemplateCall } from './Payload'\n\nexport const ApiCallWitnessConfigSchema = 'network.xyo.api.call.witness.config'\nexport type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema\n\nexport type ApiCallWitnessConfigBase = WitnessConfig<{\n accept?: 'application/json'\n queries?: ApiCall['queries']\n schema: ApiCallWitnessConfigSchema\n timeout?: number\n verb?: ApiCall['verb']\n}>\n\nexport type ApiUriCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n uri: ApiUriCall['uri']\n }\n>\n\nexport type ApiUriTemplateCallWitnessConfig = WitnessConfig<\n ApiCallWitnessConfigBase & {\n params?: Record<string, unknown>\n uriTemplate: ApiUriTemplateCall['uriTemplate']\n }\n>\n\nexport type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase\n\nexport const isApiCallWitnessConfig = isPayloadOfSchemaType(ApiCallWitnessConfigSchema)\nexport const asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig)\n\nexport const isApiUriCallWitnessConfig = (value?: unknown): value is ApiUriCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriCallWitnessConfig).uri\nexport const asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig)\n\nexport const isApiUriTemplateCallWitnessConfig = (value?: unknown): value is ApiUriTemplateCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriTemplateCallWitnessConfig).uriTemplate\nexport const asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig)\n","import { Hash } from '@xylabs/hex'\nimport { AsObjectFactory, JsonArray, JsonObject } from '@xyo-network/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nexport const ApiCallSchema = 'network.xyo.api.call'\nexport type ApiCallSchema = typeof ApiCallSchema\n\nexport type Verb = 'get' | 'post'\nexport type Queries = Record<string, string>\n\nexport interface ApiCallFields {\n queries?: Queries\n verb?: Verb\n}\n\nexport type ApiUriCall = Payload<\n ApiCallFields & {\n uri: string\n },\n ApiCallSchema\n>\n\nexport type ApiUriTemplateCall = Payload<\n ApiCallFields & {\n params?: Record<string, unknown>\n uriTemplate?: string\n },\n ApiCallSchema\n>\n\nexport type ApiCall = ApiUriCall | ApiUriTemplateCall\n\nexport const ApiCallResultSchema = 'network.xyo.api.call.result'\nexport type ApiCallResultSchema = typeof ApiCallResultSchema\n\nexport interface HttpMeta {\n code?: string\n status?: number\n}\n\nexport type ApiCallJsonResultType = JsonArray | JsonObject\n\nexport type ApiCallJsonResult<T extends ApiCallJsonResultType = ApiCallJsonResultType> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallBase64Result = Payload<\n {\n call: Hash\n contentType: Exclude<string, ApiCallJsonResult['contentType']>\n data: string\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallErrorResult = Payload<\n {\n call: Hash\n http?: HttpMeta\n },\n ApiCallResultSchema\n>\n\nexport type ApiCallResult<TJson extends JsonArray | JsonObject = JsonArray | JsonObject> =\n | ApiCallBase64Result\n | ApiCallJsonResult<TJson>\n | ApiCallErrorResult\n\nexport const isApiCall = isPayloadOfSchemaType(ApiCallSchema)\nexport const asApiCall = AsObjectFactory.create(isApiCall)\n\nexport const isApiUriCall = (value?: unknown): value is ApiUriCall => isApiCall(value) && !!(value as ApiUriCall).uri\nexport const asApiUriCall = AsObjectFactory.create(isApiUriCall)\n\nexport const isApiUriTemplateCall = (value?: unknown): value is ApiUriTemplateCall =>\n isApiCall(value) && !!((value as ApiUriTemplateCall).uriTemplate || (value as ApiUriTemplateCall).params)\nexport const asApiUriTemplateCall = AsObjectFactory.create(isApiUriTemplateCall)\n","import { assertEx } from '@xylabs/assert'\nimport { Axios, AxiosError, AxiosJson } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessParams } from '@xyo-network/witness-model'\nimport { fromByteArray } from 'base64-js'\nimport template from 'es6-template-strings'\n\nimport { ApiCallWitnessConfig, ApiCallWitnessConfigSchema, asApiUriCallWitnessConfig, asApiUriTemplateCallWitnessConfig } from './Config'\nimport { checkIpfsUrl } from './lib'\nimport {\n ApiCall,\n ApiCallBase64Result,\n ApiCallErrorResult,\n ApiCallJsonResult,\n ApiCallJsonResultType,\n ApiCallResult,\n ApiCallResultSchema,\n ApiCallSchema,\n asApiUriCall,\n asApiUriTemplateCall,\n} from './Payload'\n\nexport type ApiCallWitnessParams = WitnessParams<\n ApiCallWitnessConfig,\n {\n headers?: Record<string, string | undefined>\n ipfsGateway?: string\n }\n>\n\nexport class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {\n static override configSchemas = [ApiCallWitnessConfigSchema]\n\n get accept() {\n return this.config.accept ?? 'application/json'\n }\n\n get ipfsGateway() {\n return this.params.ipfsGateway\n }\n\n get timeout() {\n return this.config.timeout\n }\n\n getFullUri(call?: ApiCall): string {\n const { uri: callUri } = asApiUriCall(call) ?? {}\n const { uriTemplate: callUriTemplate, params: callParams, queries: callQueries } = asApiUriTemplateCall(call) ?? {}\n const { uri: configUri } = asApiUriCallWitnessConfig(this.config) ?? {}\n const { uriTemplate: configUriTemplate, params: configParams, queries: configQueries } = asApiUriTemplateCallWitnessConfig(this.config) ?? {}\n\n const params = { ...configParams, ...callParams }\n\n let url: URL | undefined = undefined\n\n if (callUri) {\n url = new URL(callUri)\n } else if (callUriTemplate) {\n url = new URL(template(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(template(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n queries.map(([key, value]) => url?.searchParams.set(key, value))\n return url.href\n }\n\n throw Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n protected override async observeHandler(inPayloads: ApiCall[] = []): Promise<ApiCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType(ApiCallSchema)).map(async (call) => {\n const { verb: callVerb } = call\n const { verb: configVerb } = this.config\n const verb = callVerb ?? configVerb ?? 'get'\n const uri = this.getFullUri(call)\n\n const validatedUri = assertEx(checkIpfsUrl(uri, this.ipfsGateway), 'Invalid URI')\n\n if (verb === 'get') {\n return this.httpGet(validatedUri, uri)\n }\n\n const observation: ApiCallResult = {\n call: await PayloadHasher.hashAsync(call),\n schema: ApiCallResultSchema,\n }\n return observation\n }),\n )\n return observations\n } catch (ex) {\n const error = ex as Error\n console.error(`Error [${this.config.name}]: ${error.message}`)\n console.log(error.stack)\n throw error\n }\n }\n\n private async httpGet(url: string, call: Hash): Promise<ApiCallResult> {\n const result: ApiCallResult = {\n call,\n schema: ApiCallResultSchema,\n }\n try {\n switch (this.accept) {\n case 'application/json': {\n const axios = new AxiosJson({ headers: this.params.headers, timeout: this.timeout })\n const response = await axios.get<ApiCallJsonResultType>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n default: {\n const axios = new Axios({ headers: this.params.headers, responseType: 'arraybuffer', timeout: this.timeout })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallBase64Result\n jsonResult.data = fromByteArray(Buffer.from(response.data, 'binary'))\n jsonResult.contentType = response.headers['content-type']?.toString() ?? 'application/octet-stream'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n }\n } catch (ex) {\n const axiosError = ex as AxiosError\n if (axiosError.isAxiosError) {\n if (axiosError?.response?.status !== undefined) {\n result.http = result.http ?? {}\n result.http.status = axiosError?.response?.status\n }\n if (axiosError?.code !== undefined) {\n result.http = result.http ?? {}\n result.http.code = axiosError?.code\n }\n return result\n } else {\n throw ex\n }\n }\n return result\n }\n}\n","import { assertEx } from '@xylabs/assert'\n\nconst allowIpfsIoRepair = true\n\n/**\n * Returns the equivalent IPFS gateway URL for the supplied URL.\n * @param urlToCheck The URL to check\n * @returns If the supplied URL is an IPFS URL, it converts the URL to the\n * equivalent IPFS gateway URL. Otherwise, returns the original URL.\n */\nexport const checkIpfsUrl = (urlToCheck: string, ipfsGateway?: string): string => {\n try {\n const url = new URL(urlToCheck)\n let protocol = url.protocol\n let host = url.host\n let path = url.pathname\n const query = url.search\n if (protocol === 'ipfs:') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n path = url.host === 'ipfs' ? `ipfs${path}` : `ipfs/${url.host}${path}`\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else if (allowIpfsIoRepair && protocol === 'https' && host === 'ipfs.io') {\n protocol = 'https:'\n host = assertEx(ipfsGateway, 'No ipfsGateway provided')\n const pathParts = path.split('/')\n if (pathParts[0] === 'ipfs') {\n pathParts.shift()\n }\n path = pathParts.join('/')\n const root = `${protocol}//${host}/${path}`\n return query?.length > 0 ? `${root}?${query}` : root\n } else {\n return urlToCheck\n }\n } catch (ex) {\n //const error = ex as Error\n //console.error(`${error.name}:${error.message} [${urlToCheck}]`)\n //console.log(error.stack)\n return urlToCheck\n }\n}\n"],"mappings":";AAAA,SAAS,uBAAuB;AAChC,SAAS,6BAA6B;AAK/B,IAAM,6BAA6B;AA0BnC,IAAM,yBAAyB,sBAAsB,0BAA0B;AAC/E,IAAM,yBAAyB,gBAAgB,OAAO,sBAAsB;AAE5E,IAAM,4BAA4B,CAAC,UACxC,uBAAuB,KAAK,KAAK,CAAC,CAAE,MAAkC;AACjE,IAAM,4BAA4B,gBAAgB,OAAO,yBAAyB;AAElF,IAAM,oCAAoC,CAAC,UAChD,uBAAuB,KAAK,KAAK,CAAC,CAAE,MAA0C;AACzE,IAAM,oCAAoC,gBAAgB,OAAO,iCAAiC;;;ACxCzG,SAAS,mBAAAA,wBAA8C;AACvD,SAAS,yBAAAC,8BAAsC;AAExC,IAAM,gBAAgB;AA4BtB,IAAM,sBAAsB;AAyC5B,IAAM,YAAYA,uBAAsB,aAAa;AACrD,IAAM,YAAYD,iBAAgB,OAAO,SAAS;AAElD,IAAM,eAAe,CAAC,UAAyC,UAAU,KAAK,KAAK,CAAC,CAAE,MAAqB;AAC3G,IAAM,eAAeA,iBAAgB,OAAO,YAAY;AAExD,IAAM,uBAAuB,CAAC,UACnC,UAAU,KAAK,KAAK,CAAC,EAAG,MAA6B,eAAgB,MAA6B;AAC7F,IAAM,uBAAuBA,iBAAgB,OAAO,oBAAoB;;;ACjF/E,SAAS,YAAAE,iBAAgB;AACzB,SAAS,OAAmB,iBAAiB;AAE7C,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,yBAAAC,8BAA6B;AAEtC,SAAS,qBAAqB;AAC9B,OAAO,cAAc;;;ACRrB,SAAS,gBAAgB;AAEzB,IAAM,oBAAoB;AAQnB,IAAM,eAAe,CAAC,YAAoB,gBAAiC;AAChF,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,UAAU;AAC9B,QAAI,WAAW,IAAI;AACnB,QAAI,OAAO,IAAI;AACf,QAAI,OAAO,IAAI;AACf,UAAM,QAAQ,IAAI;AAClB,QAAI,aAAa,SAAS;AACxB,iBAAW;AACX,aAAO,SAAS,aAAa,yBAAyB;AACtD,aAAO,IAAI,SAAS,SAAS,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,GAAG,IAAI;AACpE,YAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI;AACzC,aAAO,OAAO,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK;AAAA,IAClD,WAAW,qBAAqB,aAAa,WAAW,SAAS,WAAW;AAC1E,iBAAW;AACX,aAAO,SAAS,aAAa,yBAAyB;AACtD,YAAM,YAAY,KAAK,MAAM,GAAG;AAChC,UAAI,UAAU,CAAC,MAAM,QAAQ;AAC3B,kBAAU,MAAM;AAAA,MAClB;AACA,aAAO,UAAU,KAAK,GAAG;AACzB,YAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI;AACzC,aAAO,OAAO,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK;AAAA,IAClD,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,SAAS,IAAI;AAIX,WAAO;AAAA,EACT;AACF;;;ADTO,IAAM,iBAAN,cAA0F,gBAAiD;AAAA,EAChJ,OAAgB,gBAAgB,CAAC,0BAA0B;AAAA,EAE3D,IAAI,SAAS;AACX,WAAO,KAAK,OAAO,UAAU;AAAA,EAC/B;AAAA,EAEA,IAAI,cAAc;AAChB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,IAAI,UAAU;AACZ,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,WAAW,MAAwB;AACjC,UAAM,EAAE,KAAK,QAAQ,IAAI,aAAa,IAAI,KAAK,CAAC;AAChD,UAAM,EAAE,aAAa,iBAAiB,QAAQ,YAAY,SAAS,YAAY,IAAI,qBAAqB,IAAI,KAAK,CAAC;AAClH,UAAM,EAAE,KAAK,UAAU,IAAI,0BAA0B,KAAK,MAAM,KAAK,CAAC;AACtE,UAAM,EAAE,aAAa,mBAAmB,QAAQ,cAAc,SAAS,cAAc,IAAI,kCAAkC,KAAK,MAAM,KAAK,CAAC;AAE5I,UAAM,SAAS,EAAE,GAAG,cAAc,GAAG,WAAW;AAEhD,QAAI,MAAuB;AAE3B,QAAI,SAAS;AACX,YAAM,IAAI,IAAI,OAAO;AAAA,IACvB,WAAW,iBAAiB;AAC1B,YAAM,IAAI,IAAI,SAAS,iBAAiB,MAAM,CAAC;AAAA,IACjD,WAAW,WAAW;AACpB,YAAM,IAAI,IAAI,SAAS;AAAA,IACzB,WAAW,mBAAmB;AAC5B,YAAM,IAAI,IAAI,SAAS,mBAAmB,MAAM,CAAC;AAAA,IACnD;AAEA,QAAI,KAAK;AACP,YAAM,UAAU,OAAO,QAAQ,EAAE,GAAG,eAAe,GAAG,YAAY,CAAC;AACnE,cAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,KAAK,aAAa,IAAI,KAAK,KAAK,CAAC;AAC/D,aAAO,IAAI;AAAA,IACb;AAEA,UAAM,MAAM,qFAAqF;AAAA,EACnG;AAAA,EAEA,MAAyB,eAAe,aAAwB,CAAC,GAA6B;AAC5F,UAAM,KAAK,QAAQ,OAAO;AAC1B,QAAI;AACF,YAAM,eAAe,MAAM,QAAQ;AAAA,QACjC,WAAW,OAAOC,uBAAsB,aAAa,CAAC,EAAE,IAAI,OAAO,SAAS;AAC1E,gBAAM,EAAE,MAAM,SAAS,IAAI;AAC3B,gBAAM,EAAE,MAAM,WAAW,IAAI,KAAK;AAClC,gBAAM,OAAO,YAAY,cAAc;AACvC,gBAAM,MAAM,KAAK,WAAW,IAAI;AAEhC,gBAAM,eAAeC,UAAS,aAAa,KAAK,KAAK,WAAW,GAAG,aAAa;AAEhF,cAAI,SAAS,OAAO;AAClB,mBAAO,KAAK,QAAQ,cAAc,GAAG;AAAA,UACvC;AAEA,gBAAM,cAA6B;AAAA,YACjC,MAAM,MAAM,cAAc,UAAU,IAAI;AAAA,YACxC,QAAQ;AAAA,UACV;AACA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT,SAAS,IAAI;AACX,YAAM,QAAQ;AACd,cAAQ,MAAM,UAAU,KAAK,OAAO,IAAI,MAAM,MAAM,OAAO,EAAE;AAC7D,cAAQ,IAAI,MAAM,KAAK;AACvB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAc,QAAQ,KAAa,MAAoC;AACrE,UAAM,SAAwB;AAAA,MAC5B;AAAA,MACA,QAAQ;AAAA,IACV;AACA,QAAI;AACF,cAAQ,KAAK,QAAQ;AAAA,QACnB,KAAK,oBAAoB;AACvB,gBAAM,QAAQ,IAAI,UAAU,EAAE,SAAS,KAAK,OAAO,SAAS,SAAS,KAAK,QAAQ,CAAC;AACnF,gBAAM,WAAW,MAAM,MAAM,IAA2B,GAAG;AAC3D,cAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;AACnD,kBAAM,aAAa;AACnB,uBAAW,OAAO,SAAS;AAC3B,uBAAW,cAAc;AAAA,UAC3B,OAAO;AACL,kBAAM,cAAc;AACpB,wBAAY,OAAO;AAAA,cACjB,QAAQ,SAAS;AAAA,YACnB;AAAA,UACF;AACA;AAAA,QACF;AAAA,QACA,SAAS;AACP,gBAAM,QAAQ,IAAI,MAAM,EAAE,SAAS,KAAK,OAAO,SAAS,cAAc,eAAe,SAAS,KAAK,QAAQ,CAAC;AAC5G,gBAAM,WAAW,MAAM,MAAM,IAAI,GAAG;AACpC,cAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;AACnD,kBAAM,aAAa;AACnB,uBAAW,OAAO,cAAc,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAC;AACpE,uBAAW,cAAc,SAAS,QAAQ,cAAc,GAAG,SAAS,KAAK;AAAA,UAC3E,OAAO;AACL,kBAAM,cAAc;AACpB,wBAAY,OAAO;AAAA,cACjB,QAAQ,SAAS;AAAA,YACnB;AAAA,UACF;AACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,IAAI;AACX,YAAM,aAAa;AACnB,UAAI,WAAW,cAAc;AAC3B,YAAI,YAAY,UAAU,WAAW,QAAW;AAC9C,iBAAO,OAAO,OAAO,QAAQ,CAAC;AAC9B,iBAAO,KAAK,SAAS,YAAY,UAAU;AAAA,QAC7C;AACA,YAAI,YAAY,SAAS,QAAW;AAClC,iBAAO,OAAO,OAAO,QAAQ,CAAC;AAC9B,iBAAO,KAAK,OAAO,YAAY;AAAA,QACjC;AACA,eAAO;AAAA,MACT,OAAO;AACL,cAAM;AAAA,MACR;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;","names":["AsObjectFactory","isPayloadOfSchemaType","assertEx","isPayloadOfSchemaType","isPayloadOfSchemaType","assertEx"]}
|
package/dist/node/Config.d.cts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Payload } from '@xyo-network/payload-model';
|
|
2
1
|
import { WitnessConfig } from '@xyo-network/witness-model';
|
|
3
2
|
import { ApiCall, ApiUriCall, ApiUriTemplateCall } from './Payload';
|
|
4
3
|
export declare const ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
|
|
@@ -18,20 +17,18 @@ export type ApiUriTemplateCallWitnessConfig = WitnessConfig<ApiCallWitnessConfig
|
|
|
18
17
|
uriTemplate: ApiUriTemplateCall['uriTemplate'];
|
|
19
18
|
}>;
|
|
20
19
|
export type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase;
|
|
21
|
-
export declare const isApiCallWitnessConfig: (x?: {
|
|
20
|
+
export declare const isApiCallWitnessConfig: (x?: unknown) => x is {
|
|
22
21
|
schema: string;
|
|
23
|
-
}
|
|
24
|
-
schema: string;
|
|
25
|
-
};
|
|
22
|
+
} & import("@xyo-network/payload-model").PayloadFields;
|
|
26
23
|
export declare const asApiCallWitnessConfig: {
|
|
27
|
-
<
|
|
24
|
+
<TType extends {
|
|
28
25
|
schema: string;
|
|
29
|
-
}>(
|
|
30
|
-
<
|
|
26
|
+
} & import("@xyo-network/payload-model").PayloadFields>(value: unknown, config?: import("@xyo-network/object").TypeCheckConfig | undefined): TType | undefined;
|
|
27
|
+
<TType_1 extends {
|
|
31
28
|
schema: string;
|
|
32
|
-
}>(
|
|
29
|
+
} & import("@xyo-network/payload-model").PayloadFields>(value: unknown, assert: string | (() => string), config?: import("@xyo-network/object").TypeCheckConfig | undefined): TType_1;
|
|
33
30
|
};
|
|
34
|
-
export declare const isApiUriCallWitnessConfig: (
|
|
31
|
+
export declare const isApiUriCallWitnessConfig: (value?: unknown) => value is import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
35
32
|
accountDerivationPath?: string | undefined;
|
|
36
33
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
37
34
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -50,10 +47,10 @@ export declare const isApiUriCallWitnessConfig: (payload?: Payload) => payload i
|
|
|
50
47
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
51
48
|
archivist?: string | undefined;
|
|
52
49
|
schema: "network.xyo.api.call.witness.config";
|
|
53
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
50
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
54
51
|
schema: "network.xyo.payload.set";
|
|
55
52
|
}) | undefined;
|
|
56
|
-
} & import("@xyo-network/payload-model").SchemaFields & Omit<{
|
|
53
|
+
} & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
57
54
|
accountDerivationPath?: string | undefined;
|
|
58
55
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
59
56
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -72,7 +69,7 @@ export declare const isApiUriCallWitnessConfig: (payload?: Payload) => payload i
|
|
|
72
69
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
73
70
|
archivist?: string | undefined;
|
|
74
71
|
schema: "network.xyo.api.call.witness.config";
|
|
75
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
72
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
76
73
|
schema: "network.xyo.payload.set";
|
|
77
74
|
}) | undefined;
|
|
78
75
|
} & {
|
|
@@ -89,7 +86,7 @@ export declare const isApiUriCallWitnessConfig: (payload?: Payload) => payload i
|
|
|
89
86
|
schema: "network.xyo.api.call.witness.config";
|
|
90
87
|
};
|
|
91
88
|
export declare const asApiUriCallWitnessConfig: {
|
|
92
|
-
<
|
|
89
|
+
<TType extends import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
93
90
|
accountDerivationPath?: string | undefined;
|
|
94
91
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
95
92
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -108,10 +105,10 @@ export declare const asApiUriCallWitnessConfig: {
|
|
|
108
105
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
109
106
|
archivist?: string | undefined;
|
|
110
107
|
schema: "network.xyo.api.call.witness.config";
|
|
111
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
108
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
112
109
|
schema: "network.xyo.payload.set";
|
|
113
110
|
}) | undefined;
|
|
114
|
-
} & import("@xyo-network/payload-model").SchemaFields & Omit<{
|
|
111
|
+
} & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
115
112
|
accountDerivationPath?: string | undefined;
|
|
116
113
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
117
114
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -130,7 +127,7 @@ export declare const asApiUriCallWitnessConfig: {
|
|
|
130
127
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
131
128
|
archivist?: string | undefined;
|
|
132
129
|
schema: "network.xyo.api.call.witness.config";
|
|
133
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
130
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
134
131
|
schema: "network.xyo.payload.set";
|
|
135
132
|
}) | undefined;
|
|
136
133
|
} & {
|
|
@@ -145,8 +142,8 @@ export declare const asApiUriCallWitnessConfig: {
|
|
|
145
142
|
uri: ApiUriCall['uri'];
|
|
146
143
|
}, "schema"> & {
|
|
147
144
|
schema: "network.xyo.api.call.witness.config";
|
|
148
|
-
}>(
|
|
149
|
-
<
|
|
145
|
+
}>(value: unknown, config?: import("@xyo-network/object").TypeCheckConfig | undefined): TType | undefined;
|
|
146
|
+
<TType_1 extends import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
150
147
|
accountDerivationPath?: string | undefined;
|
|
151
148
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
152
149
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -165,10 +162,10 @@ export declare const asApiUriCallWitnessConfig: {
|
|
|
165
162
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
166
163
|
archivist?: string | undefined;
|
|
167
164
|
schema: "network.xyo.api.call.witness.config";
|
|
168
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
165
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
169
166
|
schema: "network.xyo.payload.set";
|
|
170
167
|
}) | undefined;
|
|
171
|
-
} & import("@xyo-network/payload-model").SchemaFields & Omit<{
|
|
168
|
+
} & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
172
169
|
accountDerivationPath?: string | undefined;
|
|
173
170
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
174
171
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -187,7 +184,7 @@ export declare const asApiUriCallWitnessConfig: {
|
|
|
187
184
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
188
185
|
archivist?: string | undefined;
|
|
189
186
|
schema: "network.xyo.api.call.witness.config";
|
|
190
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
187
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
191
188
|
schema: "network.xyo.payload.set";
|
|
192
189
|
}) | undefined;
|
|
193
190
|
} & {
|
|
@@ -202,9 +199,9 @@ export declare const asApiUriCallWitnessConfig: {
|
|
|
202
199
|
uri: ApiUriCall['uri'];
|
|
203
200
|
}, "schema"> & {
|
|
204
201
|
schema: "network.xyo.api.call.witness.config";
|
|
205
|
-
}>(
|
|
202
|
+
}>(value: unknown, assert: string | (() => string), config?: import("@xyo-network/object").TypeCheckConfig | undefined): TType_1;
|
|
206
203
|
};
|
|
207
|
-
export declare const isApiUriTemplateCallWitnessConfig: (
|
|
204
|
+
export declare const isApiUriTemplateCallWitnessConfig: (value?: unknown) => value is import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
208
205
|
accountDerivationPath?: string | undefined;
|
|
209
206
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
210
207
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -223,10 +220,10 @@ export declare const isApiUriTemplateCallWitnessConfig: (payload?: Payload) => p
|
|
|
223
220
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
224
221
|
archivist?: string | undefined;
|
|
225
222
|
schema: "network.xyo.api.call.witness.config";
|
|
226
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
223
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
227
224
|
schema: "network.xyo.payload.set";
|
|
228
225
|
}) | undefined;
|
|
229
|
-
} & import("@xyo-network/payload-model").SchemaFields & Omit<{
|
|
226
|
+
} & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
230
227
|
accountDerivationPath?: string | undefined;
|
|
231
228
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
232
229
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -245,7 +242,7 @@ export declare const isApiUriTemplateCallWitnessConfig: (payload?: Payload) => p
|
|
|
245
242
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
246
243
|
archivist?: string | undefined;
|
|
247
244
|
schema: "network.xyo.api.call.witness.config";
|
|
248
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
245
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
249
246
|
schema: "network.xyo.payload.set";
|
|
250
247
|
}) | undefined;
|
|
251
248
|
} & {
|
|
@@ -263,7 +260,7 @@ export declare const isApiUriTemplateCallWitnessConfig: (payload?: Payload) => p
|
|
|
263
260
|
schema: "network.xyo.api.call.witness.config";
|
|
264
261
|
};
|
|
265
262
|
export declare const asApiUriTemplateCallWitnessConfig: {
|
|
266
|
-
<
|
|
263
|
+
<TType extends import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
267
264
|
accountDerivationPath?: string | undefined;
|
|
268
265
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
269
266
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -282,10 +279,10 @@ export declare const asApiUriTemplateCallWitnessConfig: {
|
|
|
282
279
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
283
280
|
archivist?: string | undefined;
|
|
284
281
|
schema: "network.xyo.api.call.witness.config";
|
|
285
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
282
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
286
283
|
schema: "network.xyo.payload.set";
|
|
287
284
|
}) | undefined;
|
|
288
|
-
} & import("@xyo-network/payload-model").SchemaFields & Omit<{
|
|
285
|
+
} & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
289
286
|
accountDerivationPath?: string | undefined;
|
|
290
287
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
291
288
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -304,7 +301,7 @@ export declare const asApiUriTemplateCallWitnessConfig: {
|
|
|
304
301
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
305
302
|
archivist?: string | undefined;
|
|
306
303
|
schema: "network.xyo.api.call.witness.config";
|
|
307
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
304
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
308
305
|
schema: "network.xyo.payload.set";
|
|
309
306
|
}) | undefined;
|
|
310
307
|
} & {
|
|
@@ -320,8 +317,8 @@ export declare const asApiUriTemplateCallWitnessConfig: {
|
|
|
320
317
|
uriTemplate: ApiUriTemplateCall['uriTemplate'];
|
|
321
318
|
}, "schema"> & {
|
|
322
319
|
schema: "network.xyo.api.call.witness.config";
|
|
323
|
-
}>(
|
|
324
|
-
<
|
|
320
|
+
}>(value: unknown, config?: import("@xyo-network/object").TypeCheckConfig | undefined): TType | undefined;
|
|
321
|
+
<TType_1 extends import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
325
322
|
accountDerivationPath?: string | undefined;
|
|
326
323
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
327
324
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -340,10 +337,10 @@ export declare const asApiUriTemplateCallWitnessConfig: {
|
|
|
340
337
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
341
338
|
archivist?: string | undefined;
|
|
342
339
|
schema: "network.xyo.api.call.witness.config";
|
|
343
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
340
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
344
341
|
schema: "network.xyo.payload.set";
|
|
345
342
|
}) | undefined;
|
|
346
|
-
} & import("@xyo-network/payload-model").SchemaFields & Omit<{
|
|
343
|
+
} & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<{
|
|
347
344
|
accountDerivationPath?: string | undefined;
|
|
348
345
|
readonly archivist?: import("@xyo-network/module-model").ArchivistModuleConfig | undefined;
|
|
349
346
|
readonly labels?: import("@xyo-network/module-model").Labels | undefined;
|
|
@@ -362,7 +359,7 @@ export declare const asApiUriTemplateCallWitnessConfig: {
|
|
|
362
359
|
} & import("@xyo-network/module-model").ArchivingModuleConfig & {
|
|
363
360
|
archivist?: string | undefined;
|
|
364
361
|
schema: "network.xyo.api.call.witness.config";
|
|
365
|
-
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
362
|
+
targetSet?: (import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & import("@xyo-network/payload-model").PayloadSet & {
|
|
366
363
|
schema: "network.xyo.payload.set";
|
|
367
364
|
}) | undefined;
|
|
368
365
|
} & {
|
|
@@ -378,6 +375,6 @@ export declare const asApiUriTemplateCallWitnessConfig: {
|
|
|
378
375
|
uriTemplate: ApiUriTemplateCall['uriTemplate'];
|
|
379
376
|
}, "schema"> & {
|
|
380
377
|
schema: "network.xyo.api.call.witness.config";
|
|
381
|
-
}>(
|
|
378
|
+
}>(value: unknown, assert: string | (() => string), config?: import("@xyo-network/object").TypeCheckConfig | undefined): TType_1;
|
|
382
379
|
};
|
|
383
380
|
//# sourceMappingURL=Config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAEnE,eAAO,MAAM,0BAA0B,wCAAwC,CAAA;AAC/E,MAAM,MAAM,0BAA0B,GAAG,OAAO,0BAA0B,CAAA;AAE1E,MAAM,MAAM,wBAAwB,GAAG,aAAa,CAAC;IACnD,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5B,MAAM,EAAE,0BAA0B,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CACvB,CAAC,CAAA;AAEF,MAAM,MAAM,uBAAuB,GAAG,aAAa,CACjD,wBAAwB,GAAG;IACzB,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;CACvB,CACF,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG,aAAa,CACzD,wBAAwB,GAAG;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAA;CAC/C,CACF,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,uBAAuB,GAAG,+BAA+B,GAAG,wBAAwB,CAAA;AAEvH,eAAO,MAAM,sBAAsB;;sDAAoD,CAAA;AACvF,eAAO,MAAM,sBAAsB;;;;;;;CAAiD,CAAA;AAEpF,eAAO,MAAM,yBAAyB,WAAY,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAxB7C,OAAO,CAAC,SAAS,CAAC;YACpB,0BAA0B;;WAE3B,OAAO,CAAC,MAAM,CAAC;;;;SAKf,UAAU,CAAC,KAAK,CAAC;;;CAiBiD,CAAA;AAC3E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA1B1B,OAAO,CAAC,SAAS,CAAC;gBACpB,0BAA0B;;eAE3B,OAAO,CAAC,MAAM,CAAC;;;;aAKf,UAAU,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBARd,OAAO,CAAC,SAAS,CAAC;gBACpB,0BAA0B;;eAE3B,OAAO,CAAC,MAAM,CAAC;;;;aAKf,UAAU,CAAC,KAAK,CAAC;;;;CAkBgE,CAAA;AAE1F,eAAO,MAAM,iCAAiC,WAAY,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA5BrD,OAAO,CAAC,SAAS,CAAC;YACpB,0BAA0B;;WAE3B,OAAO,CAAC,MAAM,CAAC;;;;;iBAYP,kBAAkB,CAAC,aAAa,CAAC;;;CAcyC,CAAA;AAC3F,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA9BlC,OAAO,CAAC,SAAS,CAAC;gBACpB,0BAA0B;;eAE3B,OAAO,CAAC,MAAM,CAAC;;;;;qBAYP,kBAAkB,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAftC,OAAO,CAAC,SAAS,CAAC;gBACpB,0BAA0B;;eAE3B,OAAO,CAAC,MAAM,CAAC;;;;;qBAYP,kBAAkB,CAAC,aAAa,CAAC;;;;CAewD,CAAA"}
|