@xyo-network/api-call-witness 2.79.5 → 2.79.8
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 +383 -0
- package/dist/browser/Config.d.cts.map +1 -0
- package/dist/browser/Config.d.mts +383 -0
- package/dist/browser/Config.d.mts.map +1 -0
- package/dist/browser/Config.d.ts +383 -0
- package/dist/browser/Config.d.ts.map +1 -0
- package/dist/browser/Payload.d.cts +63 -3
- package/dist/browser/Payload.d.cts.map +1 -1
- package/dist/browser/Payload.d.mts +63 -3
- package/dist/browser/Payload.d.mts.map +1 -1
- package/dist/browser/Payload.d.ts +63 -3
- package/dist/browser/Payload.d.ts.map +1 -1
- package/dist/browser/Witness.d.cts +6 -9
- package/dist/browser/Witness.d.cts.map +1 -1
- package/dist/browser/Witness.d.mts +6 -9
- package/dist/browser/Witness.d.mts.map +1 -1
- package/dist/browser/Witness.d.ts +6 -9
- package/dist/browser/Witness.d.ts.map +1 -1
- package/dist/browser/index.cjs +92 -13
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +1 -0
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +1 -0
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +1 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +82 -13
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/lib/checkIpfsUrl.d.cts +1 -1
- package/dist/browser/lib/checkIpfsUrl.d.cts.map +1 -1
- package/dist/browser/lib/checkIpfsUrl.d.mts +1 -1
- package/dist/browser/lib/checkIpfsUrl.d.mts.map +1 -1
- package/dist/browser/lib/checkIpfsUrl.d.ts +1 -1
- package/dist/browser/lib/checkIpfsUrl.d.ts.map +1 -1
- package/dist/node/Config.d.cts +383 -0
- package/dist/node/Config.d.cts.map +1 -0
- package/dist/node/Config.d.mts +383 -0
- package/dist/node/Config.d.mts.map +1 -0
- package/dist/node/Config.d.ts +383 -0
- package/dist/node/Config.d.ts.map +1 -0
- package/dist/node/Payload.d.cts +63 -3
- package/dist/node/Payload.d.cts.map +1 -1
- package/dist/node/Payload.d.mts +63 -3
- package/dist/node/Payload.d.mts.map +1 -1
- package/dist/node/Payload.d.ts +63 -3
- package/dist/node/Payload.d.ts.map +1 -1
- package/dist/node/Witness.d.cts +6 -9
- package/dist/node/Witness.d.cts.map +1 -1
- package/dist/node/Witness.d.mts +6 -9
- package/dist/node/Witness.d.mts.map +1 -1
- package/dist/node/Witness.d.ts +6 -9
- package/dist/node/Witness.d.ts.map +1 -1
- package/dist/node/index.cjs +105 -14
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +1 -0
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +1 -0
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +1 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +82 -13
- package/dist/node/index.js.map +1 -1
- package/dist/node/lib/checkIpfsUrl.d.cts +1 -1
- package/dist/node/lib/checkIpfsUrl.d.cts.map +1 -1
- package/dist/node/lib/checkIpfsUrl.d.mts +1 -1
- package/dist/node/lib/checkIpfsUrl.d.mts.map +1 -1
- package/dist/node/lib/checkIpfsUrl.d.ts +1 -1
- package/dist/node/lib/checkIpfsUrl.d.ts.map +1 -1
- package/package.json +16 -11
- package/src/Config.ts +42 -0
- package/src/Payload.ts +31 -5
- package/src/Witness.ts +54 -17
- package/src/index.ts +1 -0
- package/src/lib/checkIpfsUrl.ts +17 -5
- package/src/spec/opensea.nft-call.json +41 -0
- package/src/types.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAExC,OAAO,EAAyB,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAE3E,eAAO,MAAM,aAAa,yBAAyB,CAAA;AACnD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAEhD,KAAK,IAAI,GAAG,KAAK,GAAG,MAAM,CAAA;AAC1B,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAErC,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAC9B,aAAa,GAAG;IACd,GAAG,EAAE,MAAM,CAAA;CACZ,EACD,aAAa,CACd,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACtC,aAAa,GAAG;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,EACD,aAAa,CACd,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,kBAAkB,CAAA;AAErD,eAAO,MAAM,mBAAmB,gCAAgC,CAAA;AAChE,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA;AAE5D,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,GAAG,MAAM,IAAI,OAAO,CACrE;IACE,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,kBAAkB,CAAA;IAC/B,IAAI,EAAE,CAAC,CAAA;CACR,EACD,mBAAmB,CACpB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC;IACE,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9D,IAAI,EAAE,MAAM,CAAA;CACb,EACD,mBAAmB,CACpB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACtC;IACE,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,CAAC,EAAE,QAAQ,CAAA;CAChB,EACD,mBAAmB,CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAExF,eAAO,MAAM,SAAS;;;;CAAuC,CAAA;AAC7D,eAAO,MAAM,SAAS;;;;;;;CAAoC,CAAA;AAE1D,eAAO,MAAM,YAAY,aAAc,OAAO;SAtDrC,MAAM;;;CAsD8G,CAAA;AAC7H,eAAO,MAAM,YAAY;;aAvDhB,MAAM;;;;;aAAN,MAAM;;;;CAuDiD,CAAA;AAEhE,eAAO,MAAM,oBAAoB,aAAc,OAAO;;;;;CAC2D,CAAA;AACjH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;CAA+C,CAAA"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema;
|
|
6
|
-
export type ApiCallWitnessConfig = WitnessConfig<{
|
|
7
|
-
accept: 'application/json';
|
|
8
|
-
schema: ApiCallWitnessConfigSchema;
|
|
9
|
-
verb?: Verb;
|
|
10
|
-
}>;
|
|
2
|
+
import { WitnessParams } from '@xyo-network/witness-model';
|
|
3
|
+
import { ApiCallWitnessConfig } from './Config';
|
|
4
|
+
import { ApiCall, ApiCallResult } from './Payload';
|
|
11
5
|
export type ApiCallWitnessParams = WitnessParams<ApiCallWitnessConfig, {
|
|
6
|
+
headers?: Record<string, string | undefined>;
|
|
12
7
|
ipfsGateway?: string;
|
|
13
8
|
}>;
|
|
14
9
|
export declare class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {
|
|
15
10
|
static configSchemas: string[];
|
|
16
11
|
get accept(): "application/json";
|
|
17
12
|
get ipfsGateway(): string | undefined;
|
|
13
|
+
get timeout(): number | undefined;
|
|
14
|
+
getFullUri(call?: ApiCall): string;
|
|
18
15
|
protected observeHandler(inPayloads?: ApiCall[]): Promise<ApiCallResult[]>;
|
|
19
16
|
private httpGet;
|
|
20
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI/D,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,OAAO,EAAE,oBAAoB,EAA4F,MAAM,UAAU,CAAA;AAEzI,OAAO,EACL,OAAO,EAIP,aAAa,EAKd,MAAM,WAAW,CAAA;AAElB,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAC9C,oBAAoB,EACpB;IACE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CACF,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAC/I,OAAgB,aAAa,WAA+B;IAE5D,IAAI,MAAM,uBAET;IAED,IAAI,WAAW,uBAEd;IAED,IAAI,OAAO,uBAEV;IAED,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM;cA6BT,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAgC/E,OAAO;CAwDtB"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema;
|
|
6
|
-
export type ApiCallWitnessConfig = WitnessConfig<{
|
|
7
|
-
accept: 'application/json';
|
|
8
|
-
schema: ApiCallWitnessConfigSchema;
|
|
9
|
-
verb?: Verb;
|
|
10
|
-
}>;
|
|
2
|
+
import { WitnessParams } from '@xyo-network/witness-model';
|
|
3
|
+
import { ApiCallWitnessConfig } from './Config';
|
|
4
|
+
import { ApiCall, ApiCallResult } from './Payload';
|
|
11
5
|
export type ApiCallWitnessParams = WitnessParams<ApiCallWitnessConfig, {
|
|
6
|
+
headers?: Record<string, string | undefined>;
|
|
12
7
|
ipfsGateway?: string;
|
|
13
8
|
}>;
|
|
14
9
|
export declare class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {
|
|
15
10
|
static configSchemas: string[];
|
|
16
11
|
get accept(): "application/json";
|
|
17
12
|
get ipfsGateway(): string | undefined;
|
|
13
|
+
get timeout(): number | undefined;
|
|
14
|
+
getFullUri(call?: ApiCall): string;
|
|
18
15
|
protected observeHandler(inPayloads?: ApiCall[]): Promise<ApiCallResult[]>;
|
|
19
16
|
private httpGet;
|
|
20
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI/D,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,OAAO,EAAE,oBAAoB,EAA4F,MAAM,UAAU,CAAA;AAEzI,OAAO,EACL,OAAO,EAIP,aAAa,EAKd,MAAM,WAAW,CAAA;AAElB,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAC9C,oBAAoB,EACpB;IACE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CACF,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAC/I,OAAgB,aAAa,WAA+B;IAE5D,IAAI,MAAM,uBAET;IAED,IAAI,WAAW,uBAEd;IAED,IAAI,OAAO,uBAEV;IAED,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM;cA6BT,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAgC/E,OAAO;CAwDtB"}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { AbstractWitness } from '@xyo-network/abstract-witness';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema;
|
|
6
|
-
export type ApiCallWitnessConfig = WitnessConfig<{
|
|
7
|
-
accept: 'application/json';
|
|
8
|
-
schema: ApiCallWitnessConfigSchema;
|
|
9
|
-
verb?: Verb;
|
|
10
|
-
}>;
|
|
2
|
+
import { WitnessParams } from '@xyo-network/witness-model';
|
|
3
|
+
import { ApiCallWitnessConfig } from './Config';
|
|
4
|
+
import { ApiCall, ApiCallResult } from './Payload';
|
|
11
5
|
export type ApiCallWitnessParams = WitnessParams<ApiCallWitnessConfig, {
|
|
6
|
+
headers?: Record<string, string | undefined>;
|
|
12
7
|
ipfsGateway?: string;
|
|
13
8
|
}>;
|
|
14
9
|
export declare class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {
|
|
15
10
|
static configSchemas: string[];
|
|
16
11
|
get accept(): "application/json";
|
|
17
12
|
get ipfsGateway(): string | undefined;
|
|
13
|
+
get timeout(): number | undefined;
|
|
14
|
+
getFullUri(call?: ApiCall): string;
|
|
18
15
|
protected observeHandler(inPayloads?: ApiCall[]): Promise<ApiCallResult[]>;
|
|
19
16
|
private httpGet;
|
|
20
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI/D,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"Witness.d.ts","sourceRoot":"","sources":["../../src/Witness.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAI/D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAI1D,OAAO,EAAE,oBAAoB,EAA4F,MAAM,UAAU,CAAA;AAEzI,OAAO,EACL,OAAO,EAIP,aAAa,EAKd,MAAM,WAAW,CAAA;AAElB,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAC9C,oBAAoB,EACpB;IACE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CACF,CAAA;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,oBAAoB,GAAG,oBAAoB,CAAE,SAAQ,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC;IAC/I,OAAgB,aAAa,WAA+B;IAE5D,IAAI,MAAM,uBAET;IAED,IAAI,WAAW,uBAEd;IAED,IAAI,OAAO,uBAEV;IAED,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM;cA6BT,cAAc,CAAC,UAAU,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAgC/E,OAAO;CAwDtB"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
|
|
20
30
|
// src/index.ts
|
|
@@ -23,13 +33,44 @@ __export(src_exports, {
|
|
|
23
33
|
ApiCallResultSchema: () => ApiCallResultSchema,
|
|
24
34
|
ApiCallSchema: () => ApiCallSchema,
|
|
25
35
|
ApiCallWitness: () => ApiCallWitness,
|
|
26
|
-
ApiCallWitnessConfigSchema: () => ApiCallWitnessConfigSchema
|
|
36
|
+
ApiCallWitnessConfigSchema: () => ApiCallWitnessConfigSchema,
|
|
37
|
+
asApiCall: () => asApiCall,
|
|
38
|
+
asApiCallWitnessConfig: () => asApiCallWitnessConfig,
|
|
39
|
+
asApiUriCall: () => asApiUriCall,
|
|
40
|
+
asApiUriCallWitnessConfig: () => asApiUriCallWitnessConfig,
|
|
41
|
+
asApiUriTemplateCall: () => asApiUriTemplateCall,
|
|
42
|
+
asApiUriTemplateCallWitnessConfig: () => asApiUriTemplateCallWitnessConfig,
|
|
43
|
+
isApiCall: () => isApiCall,
|
|
44
|
+
isApiCallWitnessConfig: () => isApiCallWitnessConfig,
|
|
45
|
+
isApiUriCall: () => isApiUriCall,
|
|
46
|
+
isApiUriCallWitnessConfig: () => isApiUriCallWitnessConfig,
|
|
47
|
+
isApiUriTemplateCall: () => isApiUriTemplateCall,
|
|
48
|
+
isApiUriTemplateCallWitnessConfig: () => isApiUriTemplateCallWitnessConfig
|
|
27
49
|
});
|
|
28
50
|
module.exports = __toCommonJS(src_exports);
|
|
29
51
|
|
|
52
|
+
// src/Config.ts
|
|
53
|
+
var import_object = require("@xyo-network/object");
|
|
54
|
+
var import_payload_model = require("@xyo-network/payload-model");
|
|
55
|
+
var ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
|
|
56
|
+
var isApiCallWitnessConfig = (0, import_payload_model.isPayloadOfSchemaType)(ApiCallWitnessConfigSchema);
|
|
57
|
+
var asApiCallWitnessConfig = import_object.AsObjectFactory.create(isApiCallWitnessConfig);
|
|
58
|
+
var isApiUriCallWitnessConfig = (payload) => isApiCallWitnessConfig(payload) && !!payload.uri;
|
|
59
|
+
var asApiUriCallWitnessConfig = import_object.AsObjectFactory.create(isApiUriCallWitnessConfig);
|
|
60
|
+
var isApiUriTemplateCallWitnessConfig = (payload) => isApiCallWitnessConfig(payload) && !!payload.uriTemplate;
|
|
61
|
+
var asApiUriTemplateCallWitnessConfig = import_object.AsObjectFactory.create(isApiUriTemplateCallWitnessConfig);
|
|
62
|
+
|
|
30
63
|
// src/Payload.ts
|
|
64
|
+
var import_object2 = require("@xyo-network/object");
|
|
65
|
+
var import_payload_model2 = require("@xyo-network/payload-model");
|
|
31
66
|
var ApiCallSchema = "network.xyo.api.call";
|
|
32
67
|
var ApiCallResultSchema = "network.xyo.api.call.result";
|
|
68
|
+
var isApiCall = (0, import_payload_model2.isPayloadOfSchemaType)(ApiCallSchema);
|
|
69
|
+
var asApiCall = import_object2.AsObjectFactory.create(isApiCall);
|
|
70
|
+
var isApiUriCall = (payload) => isApiCall(payload) && !!payload.uri;
|
|
71
|
+
var asApiUriCall = import_object2.AsObjectFactory.create(isApiUriCall);
|
|
72
|
+
var isApiUriTemplateCall = (payload) => isApiCall(payload) && !!(payload.uriTemplate || payload.params);
|
|
73
|
+
var asApiUriTemplateCall = import_object2.AsObjectFactory.create(isApiUriTemplateCall);
|
|
33
74
|
|
|
34
75
|
// src/Witness.ts
|
|
35
76
|
var import_assert2 = require("@xylabs/assert");
|
|
@@ -37,11 +78,13 @@ var import_axios = require("@xylabs/axios");
|
|
|
37
78
|
var import_buffer = require("@xylabs/buffer");
|
|
38
79
|
var import_abstract_witness = require("@xyo-network/abstract-witness");
|
|
39
80
|
var import_hash = require("@xyo-network/hash");
|
|
40
|
-
var
|
|
81
|
+
var import_payload_model3 = require("@xyo-network/payload-model");
|
|
41
82
|
var import_base64_js = require("base64-js");
|
|
83
|
+
var import_es6_template_strings = __toESM(require("es6-template-strings"), 1);
|
|
42
84
|
|
|
43
85
|
// src/lib/checkIpfsUrl.ts
|
|
44
86
|
var import_assert = require("@xylabs/assert");
|
|
87
|
+
var allowIpfsIoRepair = true;
|
|
45
88
|
var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
|
|
46
89
|
try {
|
|
47
90
|
const url = new URL(urlToCheck);
|
|
@@ -55,33 +98,68 @@ var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
|
|
|
55
98
|
path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
56
99
|
const root = `${protocol}//${host}/${path}`;
|
|
57
100
|
return query?.length > 0 ? `${root}?${query}` : root;
|
|
101
|
+
} else if (allowIpfsIoRepair && protocol === "https" && host === "ipfs.io") {
|
|
102
|
+
protocol = "https:";
|
|
103
|
+
host = (0, import_assert.assertEx)(ipfsGateway, "No ipfsGateway provided");
|
|
104
|
+
const pathParts = path.split("/");
|
|
105
|
+
if (pathParts[0] === "ipfs") {
|
|
106
|
+
pathParts.shift();
|
|
107
|
+
}
|
|
108
|
+
path = pathParts.join("/");
|
|
109
|
+
const root = `${protocol}//${host}/${path}`;
|
|
110
|
+
return query?.length > 0 ? `${root}?${query}` : root;
|
|
58
111
|
} else {
|
|
59
112
|
return urlToCheck;
|
|
60
113
|
}
|
|
61
114
|
} catch (ex) {
|
|
62
|
-
|
|
63
|
-
console.error(`${error.name}:${error.message} [${urlToCheck}]`);
|
|
64
|
-
console.log(error.stack);
|
|
65
|
-
return void 0;
|
|
115
|
+
return urlToCheck;
|
|
66
116
|
}
|
|
67
117
|
};
|
|
68
118
|
|
|
69
119
|
// src/Witness.ts
|
|
70
|
-
var ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
|
|
71
120
|
var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
|
|
72
121
|
static configSchemas = [ApiCallWitnessConfigSchema];
|
|
73
122
|
get accept() {
|
|
74
|
-
return this.config.accept;
|
|
123
|
+
return this.config.accept ?? "application/json";
|
|
75
124
|
}
|
|
76
125
|
get ipfsGateway() {
|
|
77
126
|
return this.params.ipfsGateway;
|
|
78
127
|
}
|
|
128
|
+
get timeout() {
|
|
129
|
+
return this.config.timeout;
|
|
130
|
+
}
|
|
131
|
+
getFullUri(call) {
|
|
132
|
+
const { uri: callUri } = asApiUriCall(call) ?? {};
|
|
133
|
+
const { uriTemplate: callUriTemplate, params: callParams, queries: callQueries } = asApiUriTemplateCall(call) ?? {};
|
|
134
|
+
const { uri: configUri } = asApiUriCallWitnessConfig(this.config) ?? {};
|
|
135
|
+
const { uriTemplate: configUriTemplate, params: configParams, queries: configQueries } = asApiUriTemplateCallWitnessConfig(this.config) ?? {};
|
|
136
|
+
const params = { ...configParams, ...callParams };
|
|
137
|
+
let url = void 0;
|
|
138
|
+
if (callUri) {
|
|
139
|
+
url = new URL(callUri);
|
|
140
|
+
} else if (callUriTemplate) {
|
|
141
|
+
url = new URL((0, import_es6_template_strings.default)(callUriTemplate, params));
|
|
142
|
+
} else if (configUri) {
|
|
143
|
+
url = new URL(configUri);
|
|
144
|
+
} else if (configUriTemplate) {
|
|
145
|
+
url = new URL((0, import_es6_template_strings.default)(configUriTemplate, params));
|
|
146
|
+
}
|
|
147
|
+
if (url) {
|
|
148
|
+
const queries = Object.entries({ ...configQueries, ...callQueries });
|
|
149
|
+
queries.map(([key, value]) => url?.searchParams.set(key, value));
|
|
150
|
+
return url.href;
|
|
151
|
+
}
|
|
152
|
+
throw Error("Unable to determine uri. No uri/uriTemplate specified in either the call or config.");
|
|
153
|
+
}
|
|
79
154
|
async observeHandler(inPayloads = []) {
|
|
80
155
|
await this.started("throw");
|
|
81
156
|
try {
|
|
82
157
|
const observations = await Promise.all(
|
|
83
|
-
inPayloads.filter((0,
|
|
84
|
-
const {
|
|
158
|
+
inPayloads.filter((0, import_payload_model3.isPayloadOfSchemaType)(ApiCallSchema)).map(async (call) => {
|
|
159
|
+
const { verb: callVerb } = call;
|
|
160
|
+
const { verb: configVerb } = this.config;
|
|
161
|
+
const verb = callVerb ?? configVerb ?? "get";
|
|
162
|
+
const uri = this.getFullUri(call);
|
|
85
163
|
const validatedUri = (0, import_assert2.assertEx)(checkIpfsUrl(uri, this.ipfsGateway), "Invalid URI");
|
|
86
164
|
if (verb === "get") {
|
|
87
165
|
return this.httpGet(validatedUri, uri);
|
|
@@ -96,7 +174,8 @@ var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
|
|
|
96
174
|
return observations;
|
|
97
175
|
} catch (ex) {
|
|
98
176
|
const error = ex;
|
|
99
|
-
console.
|
|
177
|
+
console.error(`Error [${this.config.name}]: ${error.message}`);
|
|
178
|
+
console.log(error.stack);
|
|
100
179
|
throw error;
|
|
101
180
|
}
|
|
102
181
|
}
|
|
@@ -108,7 +187,7 @@ var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
|
|
|
108
187
|
try {
|
|
109
188
|
switch (this.accept) {
|
|
110
189
|
case "application/json": {
|
|
111
|
-
const axios = new import_axios.AxiosJson();
|
|
190
|
+
const axios = new import_axios.AxiosJson({ headers: this.params.headers, timeout: this.timeout });
|
|
112
191
|
const response = await axios.get(url);
|
|
113
192
|
if (response.status >= 200 && response.status < 300) {
|
|
114
193
|
const jsonResult = result;
|
|
@@ -123,7 +202,7 @@ var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
|
|
|
123
202
|
break;
|
|
124
203
|
}
|
|
125
204
|
default: {
|
|
126
|
-
const axios = new import_axios.Axios({ responseType: "arraybuffer" });
|
|
205
|
+
const axios = new import_axios.Axios({ headers: this.params.headers, responseType: "arraybuffer", timeout: this.timeout });
|
|
127
206
|
const response = await axios.get(url);
|
|
128
207
|
if (response.status >= 200 && response.status < 300) {
|
|
129
208
|
const jsonResult = result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Payload.ts","../../src/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["export * from './Payload'\nexport * from './Witness'\n","import { Hash } from '@xyo-network/hash'\nimport { 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'\n\nexport type ApiCall = Payload<\n {\n uri: string\n verb?: Verb\n },\n ApiCallSchema\n>\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","import { assertEx } from '@xylabs/assert'\nimport { Axios, AxiosError, AxiosJson } from '@xylabs/axios'\nimport { Buffer } from '@xylabs/buffer'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { Hash, PayloadHasher } from '@xyo-network/hash'\nimport { JsonArray, JsonObject } from '@xyo-network/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessConfig, WitnessParams } from '@xyo-network/witness-model'\nimport { fromByteArray } from 'base64-js'\n\nimport { checkIpfsUrl } from './lib'\nimport {\n ApiCall,\n ApiCallBase64Result,\n ApiCallErrorResult,\n ApiCallJsonResult,\n ApiCallResult,\n ApiCallResultSchema,\n ApiCallSchema,\n Verb,\n} from './Payload'\n\nexport const ApiCallWitnessConfigSchema = 'network.xyo.api.call.witness.config'\nexport type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema\n\nexport type ApiCallWitnessConfig = WitnessConfig<{\n accept: 'application/json'\n schema: ApiCallWitnessConfigSchema\n verb?: Verb\n}>\n\nexport type ApiCallWitnessParams = WitnessParams<ApiCallWitnessConfig, { ipfsGateway?: string }>\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\n }\n\n get ipfsGateway() {\n return this.params.ipfsGateway\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 { uri, verb } = 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.log(`Error [${this.config.name}]: ${error.message}`)\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()\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({ responseType: 'arraybuffer' })\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\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) => {\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 {\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 undefined\n }\n}\n"],"mappings":"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","names":["import_assert"]}
|
|
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 '@xyo-network/hash'\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 { Buffer } from '@xylabs/buffer'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { Hash, 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"]}
|
package/dist/browser/index.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
package/dist/browser/index.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA"}
|
package/dist/browser/index.js
CHANGED
|
@@ -1,6 +1,25 @@
|
|
|
1
|
+
// src/Config.ts
|
|
2
|
+
import { AsObjectFactory } from "@xyo-network/object";
|
|
3
|
+
import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
4
|
+
var ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
|
|
5
|
+
var isApiCallWitnessConfig = isPayloadOfSchemaType(ApiCallWitnessConfigSchema);
|
|
6
|
+
var asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig);
|
|
7
|
+
var isApiUriCallWitnessConfig = (payload) => isApiCallWitnessConfig(payload) && !!payload.uri;
|
|
8
|
+
var asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig);
|
|
9
|
+
var isApiUriTemplateCallWitnessConfig = (payload) => isApiCallWitnessConfig(payload) && !!payload.uriTemplate;
|
|
10
|
+
var asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig);
|
|
11
|
+
|
|
1
12
|
// src/Payload.ts
|
|
13
|
+
import { AsObjectFactory as AsObjectFactory2 } from "@xyo-network/object";
|
|
14
|
+
import { isPayloadOfSchemaType as isPayloadOfSchemaType2 } from "@xyo-network/payload-model";
|
|
2
15
|
var ApiCallSchema = "network.xyo.api.call";
|
|
3
16
|
var ApiCallResultSchema = "network.xyo.api.call.result";
|
|
17
|
+
var isApiCall = isPayloadOfSchemaType2(ApiCallSchema);
|
|
18
|
+
var asApiCall = AsObjectFactory2.create(isApiCall);
|
|
19
|
+
var isApiUriCall = (payload) => isApiCall(payload) && !!payload.uri;
|
|
20
|
+
var asApiUriCall = AsObjectFactory2.create(isApiUriCall);
|
|
21
|
+
var isApiUriTemplateCall = (payload) => isApiCall(payload) && !!(payload.uriTemplate || payload.params);
|
|
22
|
+
var asApiUriTemplateCall = AsObjectFactory2.create(isApiUriTemplateCall);
|
|
4
23
|
|
|
5
24
|
// src/Witness.ts
|
|
6
25
|
import { assertEx as assertEx2 } from "@xylabs/assert";
|
|
@@ -8,11 +27,13 @@ import { Axios, AxiosJson } from "@xylabs/axios";
|
|
|
8
27
|
import { Buffer } from "@xylabs/buffer";
|
|
9
28
|
import { AbstractWitness } from "@xyo-network/abstract-witness";
|
|
10
29
|
import { PayloadHasher } from "@xyo-network/hash";
|
|
11
|
-
import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
|
|
30
|
+
import { isPayloadOfSchemaType as isPayloadOfSchemaType3 } from "@xyo-network/payload-model";
|
|
12
31
|
import { fromByteArray } from "base64-js";
|
|
32
|
+
import template from "es6-template-strings";
|
|
13
33
|
|
|
14
34
|
// src/lib/checkIpfsUrl.ts
|
|
15
35
|
import { assertEx } from "@xylabs/assert";
|
|
36
|
+
var allowIpfsIoRepair = true;
|
|
16
37
|
var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
|
|
17
38
|
try {
|
|
18
39
|
const url = new URL(urlToCheck);
|
|
@@ -26,33 +47,68 @@ var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
|
|
|
26
47
|
path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
|
|
27
48
|
const root = `${protocol}//${host}/${path}`;
|
|
28
49
|
return query?.length > 0 ? `${root}?${query}` : root;
|
|
50
|
+
} else if (allowIpfsIoRepair && protocol === "https" && host === "ipfs.io") {
|
|
51
|
+
protocol = "https:";
|
|
52
|
+
host = assertEx(ipfsGateway, "No ipfsGateway provided");
|
|
53
|
+
const pathParts = path.split("/");
|
|
54
|
+
if (pathParts[0] === "ipfs") {
|
|
55
|
+
pathParts.shift();
|
|
56
|
+
}
|
|
57
|
+
path = pathParts.join("/");
|
|
58
|
+
const root = `${protocol}//${host}/${path}`;
|
|
59
|
+
return query?.length > 0 ? `${root}?${query}` : root;
|
|
29
60
|
} else {
|
|
30
61
|
return urlToCheck;
|
|
31
62
|
}
|
|
32
63
|
} catch (ex) {
|
|
33
|
-
|
|
34
|
-
console.error(`${error.name}:${error.message} [${urlToCheck}]`);
|
|
35
|
-
console.log(error.stack);
|
|
36
|
-
return void 0;
|
|
64
|
+
return urlToCheck;
|
|
37
65
|
}
|
|
38
66
|
};
|
|
39
67
|
|
|
40
68
|
// src/Witness.ts
|
|
41
|
-
var ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
|
|
42
69
|
var ApiCallWitness = class extends AbstractWitness {
|
|
43
70
|
static configSchemas = [ApiCallWitnessConfigSchema];
|
|
44
71
|
get accept() {
|
|
45
|
-
return this.config.accept;
|
|
72
|
+
return this.config.accept ?? "application/json";
|
|
46
73
|
}
|
|
47
74
|
get ipfsGateway() {
|
|
48
75
|
return this.params.ipfsGateway;
|
|
49
76
|
}
|
|
77
|
+
get timeout() {
|
|
78
|
+
return this.config.timeout;
|
|
79
|
+
}
|
|
80
|
+
getFullUri(call) {
|
|
81
|
+
const { uri: callUri } = asApiUriCall(call) ?? {};
|
|
82
|
+
const { uriTemplate: callUriTemplate, params: callParams, queries: callQueries } = asApiUriTemplateCall(call) ?? {};
|
|
83
|
+
const { uri: configUri } = asApiUriCallWitnessConfig(this.config) ?? {};
|
|
84
|
+
const { uriTemplate: configUriTemplate, params: configParams, queries: configQueries } = asApiUriTemplateCallWitnessConfig(this.config) ?? {};
|
|
85
|
+
const params = { ...configParams, ...callParams };
|
|
86
|
+
let url = void 0;
|
|
87
|
+
if (callUri) {
|
|
88
|
+
url = new URL(callUri);
|
|
89
|
+
} else if (callUriTemplate) {
|
|
90
|
+
url = new URL(template(callUriTemplate, params));
|
|
91
|
+
} else if (configUri) {
|
|
92
|
+
url = new URL(configUri);
|
|
93
|
+
} else if (configUriTemplate) {
|
|
94
|
+
url = new URL(template(configUriTemplate, params));
|
|
95
|
+
}
|
|
96
|
+
if (url) {
|
|
97
|
+
const queries = Object.entries({ ...configQueries, ...callQueries });
|
|
98
|
+
queries.map(([key, value]) => url?.searchParams.set(key, value));
|
|
99
|
+
return url.href;
|
|
100
|
+
}
|
|
101
|
+
throw Error("Unable to determine uri. No uri/uriTemplate specified in either the call or config.");
|
|
102
|
+
}
|
|
50
103
|
async observeHandler(inPayloads = []) {
|
|
51
104
|
await this.started("throw");
|
|
52
105
|
try {
|
|
53
106
|
const observations = await Promise.all(
|
|
54
|
-
inPayloads.filter(
|
|
55
|
-
const {
|
|
107
|
+
inPayloads.filter(isPayloadOfSchemaType3(ApiCallSchema)).map(async (call) => {
|
|
108
|
+
const { verb: callVerb } = call;
|
|
109
|
+
const { verb: configVerb } = this.config;
|
|
110
|
+
const verb = callVerb ?? configVerb ?? "get";
|
|
111
|
+
const uri = this.getFullUri(call);
|
|
56
112
|
const validatedUri = assertEx2(checkIpfsUrl(uri, this.ipfsGateway), "Invalid URI");
|
|
57
113
|
if (verb === "get") {
|
|
58
114
|
return this.httpGet(validatedUri, uri);
|
|
@@ -67,7 +123,8 @@ var ApiCallWitness = class extends AbstractWitness {
|
|
|
67
123
|
return observations;
|
|
68
124
|
} catch (ex) {
|
|
69
125
|
const error = ex;
|
|
70
|
-
console.
|
|
126
|
+
console.error(`Error [${this.config.name}]: ${error.message}`);
|
|
127
|
+
console.log(error.stack);
|
|
71
128
|
throw error;
|
|
72
129
|
}
|
|
73
130
|
}
|
|
@@ -79,7 +136,7 @@ var ApiCallWitness = class extends AbstractWitness {
|
|
|
79
136
|
try {
|
|
80
137
|
switch (this.accept) {
|
|
81
138
|
case "application/json": {
|
|
82
|
-
const axios = new AxiosJson();
|
|
139
|
+
const axios = new AxiosJson({ headers: this.params.headers, timeout: this.timeout });
|
|
83
140
|
const response = await axios.get(url);
|
|
84
141
|
if (response.status >= 200 && response.status < 300) {
|
|
85
142
|
const jsonResult = result;
|
|
@@ -94,7 +151,7 @@ var ApiCallWitness = class extends AbstractWitness {
|
|
|
94
151
|
break;
|
|
95
152
|
}
|
|
96
153
|
default: {
|
|
97
|
-
const axios = new Axios({ responseType: "arraybuffer" });
|
|
154
|
+
const axios = new Axios({ headers: this.params.headers, responseType: "arraybuffer", timeout: this.timeout });
|
|
98
155
|
const response = await axios.get(url);
|
|
99
156
|
if (response.status >= 200 && response.status < 300) {
|
|
100
157
|
const jsonResult = result;
|
|
@@ -132,6 +189,18 @@ export {
|
|
|
132
189
|
ApiCallResultSchema,
|
|
133
190
|
ApiCallSchema,
|
|
134
191
|
ApiCallWitness,
|
|
135
|
-
ApiCallWitnessConfigSchema
|
|
192
|
+
ApiCallWitnessConfigSchema,
|
|
193
|
+
asApiCall,
|
|
194
|
+
asApiCallWitnessConfig,
|
|
195
|
+
asApiUriCall,
|
|
196
|
+
asApiUriCallWitnessConfig,
|
|
197
|
+
asApiUriTemplateCall,
|
|
198
|
+
asApiUriTemplateCallWitnessConfig,
|
|
199
|
+
isApiCall,
|
|
200
|
+
isApiCallWitnessConfig,
|
|
201
|
+
isApiUriCall,
|
|
202
|
+
isApiUriCallWitnessConfig,
|
|
203
|
+
isApiUriTemplateCall,
|
|
204
|
+
isApiUriTemplateCallWitnessConfig
|
|
136
205
|
};
|
|
137
206
|
//# sourceMappingURL=index.js.map
|