@xyo-network/http-call-witness 5.1.3 → 5.1.5
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/neutral/index.mjs +3 -3
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +26 -23
- package/src/Witness/Witness.ts +3 -3
- package/dist/neutral/Witness/spec/Witness.spec.d.ts +0 -2
- package/dist/neutral/Witness/spec/Witness.spec.d.ts.map +0 -1
- package/dist/neutral/Witness/spec/opensea.nft-call.spec.d.ts +0 -2
- package/dist/neutral/Witness/spec/opensea.nft-call.spec.d.ts.map +0 -1
- package/src/Witness/spec/Witness.spec.ts +0 -27
- package/src/Witness/spec/opensea.nft-call.spec.ts +0 -122
package/dist/neutral/index.mjs
CHANGED
|
@@ -95,7 +95,7 @@ var asHttpUriTemplateCallWitnessConfig = AsObjectFactory8.create(isHttpUriTempla
|
|
|
95
95
|
|
|
96
96
|
// src/Witness/Witness.ts
|
|
97
97
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
98
|
-
import {
|
|
98
|
+
import { axiosJsonConfig } from "@xylabs/axios";
|
|
99
99
|
import { URL as URL2 } from "@xylabs/url";
|
|
100
100
|
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
101
101
|
import { ObjectHasher } from "@xyo-network/hash";
|
|
@@ -230,11 +230,11 @@ var HttpCallWitness = class extends AbstractWitness {
|
|
|
230
230
|
try {
|
|
231
231
|
switch (this.accept) {
|
|
232
232
|
case "application/json": {
|
|
233
|
-
const axios = new
|
|
233
|
+
const axios = new Axios(axiosJsonConfig({
|
|
234
234
|
headers: { ...this.getHeaders(headers), Accept: "application/json" },
|
|
235
235
|
timeout: this.timeout,
|
|
236
236
|
decompress: true
|
|
237
|
-
});
|
|
237
|
+
}));
|
|
238
238
|
const response = await axios.get(url);
|
|
239
239
|
if (response.status >= 200 && response.status < 300) {
|
|
240
240
|
const jsonResult = result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Payload/identity/asHttpCall.ts","../../src/Payload/identity/isHttpCall.ts","../../src/Payload/Schema.ts","../../src/Payload/identity/asHttpCallBase64Result.ts","../../src/Payload/identity/isHttpCallBase64Result.ts","../../src/Payload/identity/asHttpCallResult.ts","../../src/Payload/identity/isHttpCallResult.ts","../../src/Payload/identity/asHttpCallXmlResult.ts","../../src/Payload/identity/isHttpCallXmlResult.ts","../../src/Payload/identity/asHttpUriCall.ts","../../src/Payload/identity/isHttpUriCall.ts","../../src/Payload/identity/asHttpUriTemplateCall.ts","../../src/Payload/identity/isHttpUriTemplateCall.ts","../../src/Payload/identity/isHttpCallErrorResult.ts","../../src/Payload/types/HttpCallJsonResult.ts","../../src/Witness/Config.ts","../../src/Witness/Schema.ts","../../src/Witness/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCall } from './isHttpCall.ts'\n\nexport const asApiCall = AsObjectFactory.create(isHttpCall)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallSchema } from '../Schema.ts'\nimport type { HttpCall } from '../types/index.ts'\n\nexport const isHttpCall = isPayloadOfSchemaType<HttpCall>(HttpCallSchema)\n","export const HttpCallSchema = 'network.xyo.http.call'\nexport type HttpCallSchema = typeof HttpCallSchema\n\nexport const HttpCallResultSchema = `${HttpCallSchema}.result`\nexport type HttpCallResultSchema = typeof HttpCallResultSchema\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCallBase64Result } from './isHttpCallBase64Result.ts'\n\nexport const asHttpCallBase64Result = AsObjectFactory.create(isHttpCallBase64Result)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallBase64Result, HttpCallResult } from '../types/index.ts'\n\nexport const isHttpCallBase64Result = (x?: unknown | null): x is HttpCallBase64Result => {\n return isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)(x) && typeof (x as HttpCallBase64Result)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCallResult } from './isHttpCallResult.ts'\n\nexport const asHttpCallResult = AsObjectFactory.create(isHttpCallResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallResult } from '../types/index.ts'\n\nexport const isHttpCallResult = isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCallXmlResult } from './isHttpCallXmlResult.ts'\n\nexport const asHttpCallXmlResult = AsObjectFactory.create(isHttpCallXmlResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallResult, HttpCallXmlResult } from '../types/index.ts'\n\nexport const isHttpCallXmlResult = (x?: unknown | null): x is HttpCallXmlResult => {\n return isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)(x) && typeof (x as HttpCallXmlResult)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpUriCall } from './isHttpUriCall.ts'\n\nexport const asHttpUriCall = AsObjectFactory.create(isHttpUriCall)\n","import type { HttpUriCall } from '../types/index.ts'\nimport { isHttpCall } from './isHttpCall.ts'\n\nexport const isHttpUriCall = (value?: unknown): value is HttpUriCall => isHttpCall(value) && !!(value as HttpUriCall).uri\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpUriTemplateCall } from './isHttpUriTemplateCall.ts'\n\nexport const asHttpUriTemplateCall = AsObjectFactory.create(isHttpUriTemplateCall)\n","import type { HttpUriTemplateCall } from '../types/index.ts'\nimport { isHttpCall } from './isHttpCall.ts'\n\nexport const isHttpUriTemplateCall = (value?: unknown): value is HttpUriTemplateCall =>\n isHttpCall(value) && !!((value as HttpUriTemplateCall).uriTemplate || (value as HttpUriTemplateCall).params)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallErrorResult, HttpCallResult } from '../types/index.ts'\n\nexport const isHttpCallErrorResult = (value: unknown): value is HttpCallErrorResult =>\n !!isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema) && ((value as HttpCallErrorResult).http?.status ?? 200) >= 400\n","import type { Hash } from '@xylabs/hex'\nimport type { JsonArray, JsonObject } from '@xylabs/object'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallResult } from './HttpCallResult.ts'\n\nexport type HttpCallJsonResultType = JsonArray | JsonObject\n\nexport type HttpCallJsonResult<T extends HttpCallJsonResultType = HttpCallJsonResultType> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n HttpCallResultSchema\n>\n\nexport const isHttpCallJsonResult = <T extends HttpCallJsonResultType = HttpCallJsonResultType>(x?: unknown | null): x is HttpCallJsonResult<T> => {\n return isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)(x) && (x as HttpCallJsonResult)?.contentType === 'application/json'\n}\nexport const asHttpCallJsonResult = AsObjectFactory.create(isHttpCallJsonResult)\n","import { AsObjectFactory } from '@xylabs/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport type { WitnessConfig } from '@xyo-network/witness-model'\n\nimport type {\n HttpCall, HttpUriCall, HttpUriTemplateCall, MimeTypes,\n} from '../Payload/index.ts'\nimport { HttpCallWitnessConfigSchema } from './Schema.ts'\n\nexport type HttpCallWitnessConfigBase = WitnessConfig<{\n accept?: MimeTypes\n headers?: Record<string, string | undefined>\n queries?: HttpCall['queries']\n schema: HttpCallWitnessConfigSchema\n timeout?: number\n verb?: HttpCall['verb']\n}>\n\nexport type HttpUriCallWitnessConfig = WitnessConfig<\n HttpCallWitnessConfigBase & {\n uri: HttpUriCall['uri']\n }\n>\n\nexport type HttpUriTemplateCallWitnessConfig = WitnessConfig<\n HttpCallWitnessConfigBase & {\n params?: Record<string, string>\n uriTemplate: HttpUriTemplateCall['uriTemplate']\n }\n>\n\nexport type HttpCallWitnessConfig = HttpUriCallWitnessConfig | HttpUriTemplateCallWitnessConfig | HttpCallWitnessConfigBase\n\nexport const isHttpCallWitnessConfig = isPayloadOfSchemaType<HttpCallWitnessConfig>(HttpCallWitnessConfigSchema)\nexport const asHttpCallWitnessConfig = AsObjectFactory.create(isHttpCallWitnessConfig)\n\nexport const isHttpUriCallWitnessConfig = (value?: unknown): value is HttpUriCallWitnessConfig =>\n isHttpCallWitnessConfig(value) && !!(value as HttpUriCallWitnessConfig).uri\nexport const asHttpUriCallWitnessConfig = AsObjectFactory.create(isHttpUriCallWitnessConfig)\n\nexport const isHttpUriTemplateCallWitnessConfig = (value?: unknown): value is HttpUriTemplateCallWitnessConfig =>\n isHttpCallWitnessConfig(value) && !!(value as HttpUriTemplateCallWitnessConfig).uriTemplate\nexport const asHttpUriTemplateCallWitnessConfig = AsObjectFactory.create(isHttpUriTemplateCallWitnessConfig)\n","export const HttpCallWitnessConfigSchema = 'network.xyo.http.call.witness.config'\nexport type HttpCallWitnessConfigSchema = typeof HttpCallWitnessConfigSchema\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { AxiosJson } from '@xylabs/axios'\nimport type { Hash } from '@xylabs/hex'\nimport { URL } from '@xylabs/url'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { ObjectHasher } from '@xyo-network/hash'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport type { AxiosError } from 'axios'\nimport { Axios } from 'axios'\nimport { fromByteArray } from 'base64-js'\nimport fillTemplate from 'es6-dynamic-template'\n\nimport { checkIpfsUrl } from '../lib/index.ts'\nimport type {\n HttpCall,\n HttpCallBase64Result,\n HttpCallErrorResult,\n HttpCallJsonResult,\n HttpCallJsonResultType,\n HttpCallResult,\n HttpCallXmlResult,\n MimeTypes,\n} from '../Payload/index.ts'\nimport {\n asHttpUriCall,\n asHttpUriTemplateCall,\n HttpCallResultSchema,\n HttpCallSchema,\n} from '../Payload/index.ts'\nimport type { HttpCallHtmlResult } from '../Payload/types/index.ts'\nimport { asHttpUriCallWitnessConfig, asHttpUriTemplateCallWitnessConfig } from './Config.ts'\nimport type { HttpCallWitnessParams } from './Params.ts'\nimport { HttpCallWitnessConfigSchema } from './Schema.ts'\n\nexport class HttpCallWitness<TParams extends HttpCallWitnessParams = HttpCallWitnessParams> extends AbstractWitness<TParams, HttpCall, HttpCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpCallWitnessConfigSchema\n\n get accept(): MimeTypes {\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?: HttpCall): string {\n const { uri: callUri } = asHttpUriCall(call) ?? {}\n const {\n uriTemplate: callUriTemplate, params: callParams, queries: callQueries,\n } = asHttpUriTemplateCall(call) ?? {}\n const { uri: configUri } = asHttpUriCallWitnessConfig(this.config) ?? {}\n const {\n uriTemplate: configUriTemplate, params: configParams, queries: configQueries,\n } = asHttpUriTemplateCallWitnessConfig(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(fillTemplate(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(fillTemplate(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n for (let [key, value] of queries) {\n url?.searchParams.set(key, value)\n }\n return url.href\n }\n\n throw new Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n getHeaders(headers?: Record<string, string | undefined>): Record<string, string | undefined> {\n return {\n ...this.params.headers, ...this.config.headers, ...headers,\n }\n }\n\n protected override async observeHandler(inPayloads: HttpCall[] = []): Promise<HttpCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<HttpCall>(HttpCallSchema)).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, (await PayloadBuilder.dataHash(call)))\n }\n\n const observation: HttpCallResult = {\n call: await ObjectHasher.hash(call),\n schema: HttpCallResultSchema,\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 // eslint-disable-next-line complexity\n private async httpGet(url: string, call: Hash, headers?: Record<string, string | undefined>): Promise<HttpCallResult> {\n const result: HttpCallResult = {\n call,\n schema: HttpCallResultSchema,\n }\n try {\n switch (this.accept) {\n case 'application/json': {\n const axios = new AxiosJson({\n headers: { ...this.getHeaders(headers), Accept: 'application/json' }, timeout: this.timeout, decompress: true,\n })\n const response = await axios.get<HttpCallJsonResultType>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as HttpCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\n }\n break\n }\n case 'application/xml':\n case 'text/xml': {\n const axios = new Axios({\n headers: { ...this.getHeaders(headers), Accept: this.accept },\n responseType: 'arraybuffer',\n decompress: true,\n timeout: this.timeout,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const xmlResult = result as HttpCallXmlResult\n xmlResult.data = Buffer.from(response.data, 'binary').toString('utf8')\n xmlResult.contentType = response.headers['content-type']?.toString() ?? 'application/xml'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\n }\n break\n }\n case 'text/html':{\n const axios = new Axios({\n headers: { ...this.getHeaders(headers), Accept: this.accept },\n responseType: 'text',\n decompress: true,\n timeout: this.timeout,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const htmlResult = result as HttpCallHtmlResult\n htmlResult.data = response.data\n htmlResult.contentType = response.headers['content-type']?.toString() ?? 'text/html'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\n }\n break\n }\n default: {\n const axios = new Axios({\n headers: this.params.headers, responseType: 'arraybuffer', timeout: this.timeout, decompress: true,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as HttpCallBase64Result\n jsonResult.data = fromByteArray(response.data)\n jsonResult.contentType = response.headers['content-type']?.toString() ?? 'application/octet-stream'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\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'\nimport { URL } from '@xylabs/url'\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 {\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","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","AsObjectFactory","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","assertEx","URL","isPayloadOfSchemaType","URL","isPayloadOfSchemaType","assertEx"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Payload/identity/asHttpCall.ts","../../src/Payload/identity/isHttpCall.ts","../../src/Payload/Schema.ts","../../src/Payload/identity/asHttpCallBase64Result.ts","../../src/Payload/identity/isHttpCallBase64Result.ts","../../src/Payload/identity/asHttpCallResult.ts","../../src/Payload/identity/isHttpCallResult.ts","../../src/Payload/identity/asHttpCallXmlResult.ts","../../src/Payload/identity/isHttpCallXmlResult.ts","../../src/Payload/identity/asHttpUriCall.ts","../../src/Payload/identity/isHttpUriCall.ts","../../src/Payload/identity/asHttpUriTemplateCall.ts","../../src/Payload/identity/isHttpUriTemplateCall.ts","../../src/Payload/identity/isHttpCallErrorResult.ts","../../src/Payload/types/HttpCallJsonResult.ts","../../src/Witness/Config.ts","../../src/Witness/Schema.ts","../../src/Witness/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCall } from './isHttpCall.ts'\n\nexport const asApiCall = AsObjectFactory.create(isHttpCall)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallSchema } from '../Schema.ts'\nimport type { HttpCall } from '../types/index.ts'\n\nexport const isHttpCall = isPayloadOfSchemaType<HttpCall>(HttpCallSchema)\n","export const HttpCallSchema = 'network.xyo.http.call'\nexport type HttpCallSchema = typeof HttpCallSchema\n\nexport const HttpCallResultSchema = `${HttpCallSchema}.result`\nexport type HttpCallResultSchema = typeof HttpCallResultSchema\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCallBase64Result } from './isHttpCallBase64Result.ts'\n\nexport const asHttpCallBase64Result = AsObjectFactory.create(isHttpCallBase64Result)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallBase64Result, HttpCallResult } from '../types/index.ts'\n\nexport const isHttpCallBase64Result = (x?: unknown | null): x is HttpCallBase64Result => {\n return isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)(x) && typeof (x as HttpCallBase64Result)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCallResult } from './isHttpCallResult.ts'\n\nexport const asHttpCallResult = AsObjectFactory.create(isHttpCallResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallResult } from '../types/index.ts'\n\nexport const isHttpCallResult = isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpCallXmlResult } from './isHttpCallXmlResult.ts'\n\nexport const asHttpCallXmlResult = AsObjectFactory.create(isHttpCallXmlResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallResult, HttpCallXmlResult } from '../types/index.ts'\n\nexport const isHttpCallXmlResult = (x?: unknown | null): x is HttpCallXmlResult => {\n return isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)(x) && typeof (x as HttpCallXmlResult)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpUriCall } from './isHttpUriCall.ts'\n\nexport const asHttpUriCall = AsObjectFactory.create(isHttpUriCall)\n","import type { HttpUriCall } from '../types/index.ts'\nimport { isHttpCall } from './isHttpCall.ts'\n\nexport const isHttpUriCall = (value?: unknown): value is HttpUriCall => isHttpCall(value) && !!(value as HttpUriCall).uri\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isHttpUriTemplateCall } from './isHttpUriTemplateCall.ts'\n\nexport const asHttpUriTemplateCall = AsObjectFactory.create(isHttpUriTemplateCall)\n","import type { HttpUriTemplateCall } from '../types/index.ts'\nimport { isHttpCall } from './isHttpCall.ts'\n\nexport const isHttpUriTemplateCall = (value?: unknown): value is HttpUriTemplateCall =>\n isHttpCall(value) && !!((value as HttpUriTemplateCall).uriTemplate || (value as HttpUriTemplateCall).params)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallErrorResult, HttpCallResult } from '../types/index.ts'\n\nexport const isHttpCallErrorResult = (value: unknown): value is HttpCallErrorResult =>\n !!isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema) && ((value as HttpCallErrorResult).http?.status ?? 200) >= 400\n","import type { Hash } from '@xylabs/hex'\nimport type { JsonArray, JsonObject } from '@xylabs/object'\nimport { AsObjectFactory } from '@xylabs/object'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { HttpCallResultSchema } from '../Schema.ts'\nimport type { HttpCallResult } from './HttpCallResult.ts'\n\nexport type HttpCallJsonResultType = JsonArray | JsonObject\n\nexport type HttpCallJsonResult<T extends HttpCallJsonResultType = HttpCallJsonResultType> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n HttpCallResultSchema\n>\n\nexport const isHttpCallJsonResult = <T extends HttpCallJsonResultType = HttpCallJsonResultType>(x?: unknown | null): x is HttpCallJsonResult<T> => {\n return isPayloadOfSchemaType<HttpCallResult>(HttpCallResultSchema)(x) && (x as HttpCallJsonResult)?.contentType === 'application/json'\n}\nexport const asHttpCallJsonResult = AsObjectFactory.create(isHttpCallJsonResult)\n","import { AsObjectFactory } from '@xylabs/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport type { WitnessConfig } from '@xyo-network/witness-model'\n\nimport type {\n HttpCall, HttpUriCall, HttpUriTemplateCall, MimeTypes,\n} from '../Payload/index.ts'\nimport { HttpCallWitnessConfigSchema } from './Schema.ts'\n\nexport type HttpCallWitnessConfigBase = WitnessConfig<{\n accept?: MimeTypes\n headers?: Record<string, string | undefined>\n queries?: HttpCall['queries']\n schema: HttpCallWitnessConfigSchema\n timeout?: number\n verb?: HttpCall['verb']\n}>\n\nexport type HttpUriCallWitnessConfig = WitnessConfig<\n HttpCallWitnessConfigBase & {\n uri: HttpUriCall['uri']\n }\n>\n\nexport type HttpUriTemplateCallWitnessConfig = WitnessConfig<\n HttpCallWitnessConfigBase & {\n params?: Record<string, string>\n uriTemplate: HttpUriTemplateCall['uriTemplate']\n }\n>\n\nexport type HttpCallWitnessConfig = HttpUriCallWitnessConfig | HttpUriTemplateCallWitnessConfig | HttpCallWitnessConfigBase\n\nexport const isHttpCallWitnessConfig = isPayloadOfSchemaType<HttpCallWitnessConfig>(HttpCallWitnessConfigSchema)\nexport const asHttpCallWitnessConfig = AsObjectFactory.create(isHttpCallWitnessConfig)\n\nexport const isHttpUriCallWitnessConfig = (value?: unknown): value is HttpUriCallWitnessConfig =>\n isHttpCallWitnessConfig(value) && !!(value as HttpUriCallWitnessConfig).uri\nexport const asHttpUriCallWitnessConfig = AsObjectFactory.create(isHttpUriCallWitnessConfig)\n\nexport const isHttpUriTemplateCallWitnessConfig = (value?: unknown): value is HttpUriTemplateCallWitnessConfig =>\n isHttpCallWitnessConfig(value) && !!(value as HttpUriTemplateCallWitnessConfig).uriTemplate\nexport const asHttpUriTemplateCallWitnessConfig = AsObjectFactory.create(isHttpUriTemplateCallWitnessConfig)\n","export const HttpCallWitnessConfigSchema = 'network.xyo.http.call.witness.config'\nexport type HttpCallWitnessConfigSchema = typeof HttpCallWitnessConfigSchema\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { axiosJsonConfig } from '@xylabs/axios'\nimport type { Hash } from '@xylabs/hex'\nimport { URL } from '@xylabs/url'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { ObjectHasher } from '@xyo-network/hash'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport type { AxiosError } from 'axios'\nimport { Axios } from 'axios'\nimport { fromByteArray } from 'base64-js'\nimport fillTemplate from 'es6-dynamic-template'\n\nimport { checkIpfsUrl } from '../lib/index.ts'\nimport type {\n HttpCall,\n HttpCallBase64Result,\n HttpCallErrorResult,\n HttpCallJsonResult,\n HttpCallJsonResultType,\n HttpCallResult,\n HttpCallXmlResult,\n MimeTypes,\n} from '../Payload/index.ts'\nimport {\n asHttpUriCall,\n asHttpUriTemplateCall,\n HttpCallResultSchema,\n HttpCallSchema,\n} from '../Payload/index.ts'\nimport type { HttpCallHtmlResult } from '../Payload/types/index.ts'\nimport { asHttpUriCallWitnessConfig, asHttpUriTemplateCallWitnessConfig } from './Config.ts'\nimport type { HttpCallWitnessParams } from './Params.ts'\nimport { HttpCallWitnessConfigSchema } from './Schema.ts'\n\nexport class HttpCallWitness<TParams extends HttpCallWitnessParams = HttpCallWitnessParams> extends AbstractWitness<TParams, HttpCall, HttpCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, HttpCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = HttpCallWitnessConfigSchema\n\n get accept(): MimeTypes {\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?: HttpCall): string {\n const { uri: callUri } = asHttpUriCall(call) ?? {}\n const {\n uriTemplate: callUriTemplate, params: callParams, queries: callQueries,\n } = asHttpUriTemplateCall(call) ?? {}\n const { uri: configUri } = asHttpUriCallWitnessConfig(this.config) ?? {}\n const {\n uriTemplate: configUriTemplate, params: configParams, queries: configQueries,\n } = asHttpUriTemplateCallWitnessConfig(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(fillTemplate(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(fillTemplate(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n for (let [key, value] of queries) {\n url?.searchParams.set(key, value)\n }\n return url.href\n }\n\n throw new Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n getHeaders(headers?: Record<string, string | undefined>): Record<string, string | undefined> {\n return {\n ...this.params.headers, ...this.config.headers, ...headers,\n }\n }\n\n protected override async observeHandler(inPayloads: HttpCall[] = []): Promise<HttpCallResult[]> {\n await this.started('throw')\n try {\n const observations = await Promise.all(\n inPayloads.filter(isPayloadOfSchemaType<HttpCall>(HttpCallSchema)).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, (await PayloadBuilder.dataHash(call)))\n }\n\n const observation: HttpCallResult = {\n call: await ObjectHasher.hash(call),\n schema: HttpCallResultSchema,\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 // eslint-disable-next-line complexity\n private async httpGet(url: string, call: Hash, headers?: Record<string, string | undefined>): Promise<HttpCallResult> {\n const result: HttpCallResult = {\n call,\n schema: HttpCallResultSchema,\n }\n try {\n switch (this.accept) {\n case 'application/json': {\n const axios = new Axios(axiosJsonConfig({\n headers: { ...this.getHeaders(headers), Accept: 'application/json' }, timeout: this.timeout, decompress: true,\n }))\n const response = await axios.get<HttpCallJsonResultType>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as HttpCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\n }\n break\n }\n case 'application/xml':\n case 'text/xml': {\n const axios = new Axios({\n headers: { ...this.getHeaders(headers), Accept: this.accept },\n responseType: 'arraybuffer',\n decompress: true,\n timeout: this.timeout,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const xmlResult = result as HttpCallXmlResult\n xmlResult.data = Buffer.from(response.data, 'binary').toString('utf8')\n xmlResult.contentType = response.headers['content-type']?.toString() ?? 'application/xml'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\n }\n break\n }\n case 'text/html':{\n const axios = new Axios({\n headers: { ...this.getHeaders(headers), Accept: this.accept },\n responseType: 'text',\n decompress: true,\n timeout: this.timeout,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const htmlResult = result as HttpCallHtmlResult\n htmlResult.data = response.data\n htmlResult.contentType = response.headers['content-type']?.toString() ?? 'text/html'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\n }\n break\n }\n default: {\n const axios = new Axios({\n headers: this.params.headers, responseType: 'arraybuffer', timeout: this.timeout, decompress: true,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as HttpCallBase64Result\n jsonResult.data = fromByteArray(response.data)\n jsonResult.contentType = response.headers['content-type']?.toString() ?? 'application/octet-stream'\n } else {\n const errorResult = result as HttpCallErrorResult\n errorResult.http = { status: response.status }\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'\nimport { URL } from '@xylabs/url'\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 {\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","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","AsObjectFactory","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","AsObjectFactory","isPayloadOfSchemaType","isPayloadOfSchemaType","AsObjectFactory","assertEx","URL","isPayloadOfSchemaType","URL","isPayloadOfSchemaType","assertEx"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/http-call-witness",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.5",
|
|
4
4
|
"description": "Typescript/Javascript Plugins for XYO Platform",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -30,35 +30,38 @@
|
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"files": [
|
|
32
32
|
"dist",
|
|
33
|
-
"src"
|
|
33
|
+
"src",
|
|
34
|
+
"!**/*.bench.*",
|
|
35
|
+
"!**/*.spec.*",
|
|
36
|
+
"!**/*.test.*"
|
|
34
37
|
],
|
|
35
38
|
"dependencies": {
|
|
36
|
-
"@xylabs/assert": "~5.0.
|
|
37
|
-
"@xylabs/axios": "~5.0.
|
|
38
|
-
"@xylabs/hex": "~5.0.
|
|
39
|
-
"@xylabs/object": "~5.0.
|
|
40
|
-
"@xylabs/url": "~5.0.
|
|
41
|
-
"@xyo-network/abstract-witness": "~5.1.
|
|
42
|
-
"@xyo-network/hash": "~5.1.
|
|
43
|
-
"@xyo-network/payload-builder": "~5.1.
|
|
44
|
-
"@xyo-network/payload-model": "~5.1.
|
|
45
|
-
"@xyo-network/witness-model": "~5.1.
|
|
46
|
-
"axios": "~1.
|
|
39
|
+
"@xylabs/assert": "~5.0.37",
|
|
40
|
+
"@xylabs/axios": "~5.0.37",
|
|
41
|
+
"@xylabs/hex": "~5.0.37",
|
|
42
|
+
"@xylabs/object": "~5.0.37",
|
|
43
|
+
"@xylabs/url": "~5.0.37",
|
|
44
|
+
"@xyo-network/abstract-witness": "~5.1.23",
|
|
45
|
+
"@xyo-network/hash": "~5.1.23",
|
|
46
|
+
"@xyo-network/payload-builder": "~5.1.23",
|
|
47
|
+
"@xyo-network/payload-model": "~5.1.23",
|
|
48
|
+
"@xyo-network/witness-model": "~5.1.23",
|
|
49
|
+
"axios": "~1.13.2",
|
|
47
50
|
"base64-js": "~1.5.1",
|
|
48
51
|
"es6-dynamic-template": "~2.0.0"
|
|
49
52
|
},
|
|
50
53
|
"devDependencies": {
|
|
51
|
-
"@xylabs/ts-scripts-yarn3": "~7.
|
|
52
|
-
"@xylabs/tsconfig": "~7.
|
|
53
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
54
|
-
"@xyo-network/manifest": "~5.1.
|
|
55
|
-
"@xyo-network/module-factory-locator": "~5.1.
|
|
56
|
-
"@xyo-network/module-model": "~5.1.
|
|
57
|
-
"@xyo-network/sentinel-model": "~5.1.
|
|
58
|
-
"@xyo-network/wallet": "~5.1.
|
|
54
|
+
"@xylabs/ts-scripts-yarn3": "~7.2.8",
|
|
55
|
+
"@xylabs/tsconfig": "~7.2.8",
|
|
56
|
+
"@xylabs/vitest-extended": "~5.0.37",
|
|
57
|
+
"@xyo-network/manifest": "~5.1.23",
|
|
58
|
+
"@xyo-network/module-factory-locator": "~5.1.23",
|
|
59
|
+
"@xyo-network/module-model": "~5.1.23",
|
|
60
|
+
"@xyo-network/sentinel-model": "~5.1.23",
|
|
61
|
+
"@xyo-network/wallet": "~5.1.23",
|
|
59
62
|
"ethers": "~6.15.0",
|
|
60
|
-
"typescript": "~5.9.
|
|
61
|
-
"vitest": "~
|
|
63
|
+
"typescript": "~5.9.3",
|
|
64
|
+
"vitest": "~4.0.10"
|
|
62
65
|
},
|
|
63
66
|
"publishConfig": {
|
|
64
67
|
"access": "public"
|
package/src/Witness/Witness.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable max-statements */
|
|
2
2
|
import { assertEx } from '@xylabs/assert'
|
|
3
|
-
import {
|
|
3
|
+
import { axiosJsonConfig } from '@xylabs/axios'
|
|
4
4
|
import type { Hash } from '@xylabs/hex'
|
|
5
5
|
import { URL } from '@xylabs/url'
|
|
6
6
|
import { AbstractWitness } from '@xyo-network/abstract-witness'
|
|
@@ -133,9 +133,9 @@ export class HttpCallWitness<TParams extends HttpCallWitnessParams = HttpCallWit
|
|
|
133
133
|
try {
|
|
134
134
|
switch (this.accept) {
|
|
135
135
|
case 'application/json': {
|
|
136
|
-
const axios = new
|
|
136
|
+
const axios = new Axios(axiosJsonConfig({
|
|
137
137
|
headers: { ...this.getHeaders(headers), Accept: 'application/json' }, timeout: this.timeout, decompress: true,
|
|
138
|
-
})
|
|
138
|
+
}))
|
|
139
139
|
const response = await axios.get<HttpCallJsonResultType>(url)
|
|
140
140
|
if (response.status >= 200 && response.status < 300) {
|
|
141
141
|
const jsonResult = result as HttpCallJsonResult
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.spec.d.ts","sourceRoot":"","sources":["../../../../src/Witness/spec/Witness.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opensea.nft-call.spec.d.ts","sourceRoot":"","sources":["../../../../src/Witness/spec/opensea.nft-call.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import '@xylabs/vitest-extended'
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
describe, expect,
|
|
5
|
-
it,
|
|
6
|
-
} from 'vitest'
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
HttpCallResultSchema, HttpCallSchema, isHttpCallErrorResult,
|
|
10
|
-
} from '../../Payload/index.ts'
|
|
11
|
-
import { HttpCallWitnessConfigSchema } from '../Schema.ts'
|
|
12
|
-
import { HttpCallWitness } from '../Witness.ts'
|
|
13
|
-
|
|
14
|
-
describe('CryptoWalletNftWitness', () => {
|
|
15
|
-
const uri = 'https://cnn.com'
|
|
16
|
-
describe('observe', () => {
|
|
17
|
-
it('get code from contract', async () => {
|
|
18
|
-
const witness = await HttpCallWitness.create({
|
|
19
|
-
account: 'random',
|
|
20
|
-
config: { accept: 'text/html', schema: HttpCallWitnessConfigSchema },
|
|
21
|
-
})
|
|
22
|
-
const observation = await witness.observe([{ schema: HttpCallSchema, uri }])
|
|
23
|
-
expect(observation[0].schema).toBe(HttpCallResultSchema)
|
|
24
|
-
expect(isHttpCallErrorResult(observation[0].schema)).toBe(false)
|
|
25
|
-
})
|
|
26
|
-
})
|
|
27
|
-
})
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import '@xylabs/vitest-extended'
|
|
2
|
-
|
|
3
|
-
import type { PackageManifestPayload } from '@xyo-network/manifest'
|
|
4
|
-
import { ManifestWrapper } from '@xyo-network/manifest'
|
|
5
|
-
import { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'
|
|
6
|
-
import { ModuleFactory } from '@xyo-network/module-model'
|
|
7
|
-
import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
|
|
8
|
-
import { asSentinelInstance } from '@xyo-network/sentinel-model'
|
|
9
|
-
import { HDWallet } from '@xyo-network/wallet'
|
|
10
|
-
import { asWitnessInstance } from '@xyo-network/witness-model'
|
|
11
|
-
import {
|
|
12
|
-
describe, expect,
|
|
13
|
-
it,
|
|
14
|
-
} from 'vitest'
|
|
15
|
-
|
|
16
|
-
import type { HttpCallJsonResult, HttpUriTemplateCall } from '../../Payload/index.ts'
|
|
17
|
-
import { HttpCallResultSchema, HttpCallSchema } from '../../Payload/index.ts'
|
|
18
|
-
import type { HttpCallWitnessParams } from '../Params.ts'
|
|
19
|
-
import { HttpCallWitness } from '../Witness.ts'
|
|
20
|
-
import openseaNftsManifest from './opensea.nft-call.json' with { type: 'json' }
|
|
21
|
-
|
|
22
|
-
describe('OpenSeaHttp', () => {
|
|
23
|
-
const address = '0xECA1bB9c8d3Fd8b926372f42c8D4c6c3ed0669B3' // Random Wallet
|
|
24
|
-
|
|
25
|
-
const apiKey = process.env.OPENSEA_API_KEY
|
|
26
|
-
|
|
27
|
-
describe.skipIf(!apiKey)('report', () => {
|
|
28
|
-
type OpenSeaNft = {
|
|
29
|
-
/*
|
|
30
|
-
* Collection slug. A unique string to identify a collection on OpenSea
|
|
31
|
-
*/
|
|
32
|
-
collection: string
|
|
33
|
-
/*
|
|
34
|
-
* The unique public blockchain identifier for the contract
|
|
35
|
-
*/
|
|
36
|
-
contract: string
|
|
37
|
-
/**
|
|
38
|
-
* @deprecated
|
|
39
|
-
*/
|
|
40
|
-
created_at: string
|
|
41
|
-
/*
|
|
42
|
-
* Description of the NFT
|
|
43
|
-
*/
|
|
44
|
-
description: string
|
|
45
|
-
/*
|
|
46
|
-
* The NFT's unique identifier within the smart contract (also referred to as token_id)
|
|
47
|
-
*/
|
|
48
|
-
identifier: string
|
|
49
|
-
/*
|
|
50
|
-
* Link to the image associated with the NFT
|
|
51
|
-
*/
|
|
52
|
-
image_url: string
|
|
53
|
-
/*
|
|
54
|
-
* If the item is currently able to be bought or sold using OpenSea
|
|
55
|
-
*/
|
|
56
|
-
is_disabled: boolean
|
|
57
|
-
/*
|
|
58
|
-
* If the item is currently classified as 'Not Safe for Work' by OpenSea as defined in OpenSea's NSFW Policy.
|
|
59
|
-
*/
|
|
60
|
-
is_nsfw: boolean
|
|
61
|
-
/*
|
|
62
|
-
* Link to the offchain metadata store
|
|
63
|
-
*/
|
|
64
|
-
metadata_url: string
|
|
65
|
-
/*
|
|
66
|
-
* Name of the NFT
|
|
67
|
-
*/
|
|
68
|
-
name: string
|
|
69
|
-
/*
|
|
70
|
-
* ERC standard of the token (erc721, erc1155)
|
|
71
|
-
*/
|
|
72
|
-
token_standard: string
|
|
73
|
-
/*
|
|
74
|
-
* Last time that the NFT's metadata was updated by OpenSea
|
|
75
|
-
*/
|
|
76
|
-
updated_at: string
|
|
77
|
-
}
|
|
78
|
-
type OpenSeaListNftsByAccountResponse = {
|
|
79
|
-
next: string
|
|
80
|
-
nfts: OpenSeaNft[]
|
|
81
|
-
}
|
|
82
|
-
it('specifying address', async () => {
|
|
83
|
-
const mnemonic = 'later puppy sound rebuild rebuild noise ozone amazing hope broccoli crystal grief'
|
|
84
|
-
const wallet = await HDWallet.fromPhrase(mnemonic)
|
|
85
|
-
const locator = new ModuleFactoryLocator()
|
|
86
|
-
|
|
87
|
-
locator.register(
|
|
88
|
-
new ModuleFactory(HttpCallWitness, {
|
|
89
|
-
config: { uriTemplate: 'https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts' },
|
|
90
|
-
headers: { 'x-api-key': apiKey },
|
|
91
|
-
} as HttpCallWitnessParams),
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
const manifest = new ManifestWrapper(openseaNftsManifest as PackageManifestPayload, wallet, locator)
|
|
95
|
-
|
|
96
|
-
const node = await manifest.loadNodeFromIndex(0)
|
|
97
|
-
|
|
98
|
-
const mods = await node.resolve('*')
|
|
99
|
-
|
|
100
|
-
expect(mods.length).toBeGreaterThan(1)
|
|
101
|
-
|
|
102
|
-
const resolvedWitness = await node.resolve('HttpCallWitness')
|
|
103
|
-
expect(resolvedWitness).toBeDefined()
|
|
104
|
-
|
|
105
|
-
const witness = asWitnessInstance(resolvedWitness)
|
|
106
|
-
expect(witness).toBeDefined()
|
|
107
|
-
|
|
108
|
-
const sentinel = asSentinelInstance(await node.resolve('HttpCallSentinel'))
|
|
109
|
-
expect(sentinel).toBeDefined()
|
|
110
|
-
|
|
111
|
-
const call: HttpUriTemplateCall = { params: { address }, schema: HttpCallSchema }
|
|
112
|
-
|
|
113
|
-
const report = await sentinel?.report([call])
|
|
114
|
-
|
|
115
|
-
const apiCallResult = report?.find(isPayloadOfSchemaType<HttpCallJsonResult<OpenSeaListNftsByAccountResponse>>(HttpCallResultSchema))
|
|
116
|
-
expect(apiCallResult).toBeDefined()
|
|
117
|
-
expect(apiCallResult?.schema).toBeString()
|
|
118
|
-
expect(apiCallResult?.data.nfts).toBeArrayOfSize(1)
|
|
119
|
-
expect(apiCallResult?.data.nfts[0].collection).toBeString()
|
|
120
|
-
})
|
|
121
|
-
})
|
|
122
|
-
})
|