@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"}
|
package/dist/node/Witness.d.cts
CHANGED
|
@@ -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/node/Witness.d.mts
CHANGED
|
@@ -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/node/Witness.d.ts
CHANGED
|
@@ -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/node/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 == null ? void 0 : 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 == null ? void 0 : 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 == null ? void 0 : 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
|
}
|
|
@@ -109,7 +188,7 @@ var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
|
|
|
109
188
|
try {
|
|
110
189
|
switch (this.accept) {
|
|
111
190
|
case "application/json": {
|
|
112
|
-
const axios = new import_axios.AxiosJson();
|
|
191
|
+
const axios = new import_axios.AxiosJson({ headers: this.params.headers, timeout: this.timeout });
|
|
113
192
|
const response = await axios.get(url);
|
|
114
193
|
if (response.status >= 200 && response.status < 300) {
|
|
115
194
|
const jsonResult = result;
|
|
@@ -124,7 +203,7 @@ var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
|
|
|
124
203
|
break;
|
|
125
204
|
}
|
|
126
205
|
default: {
|
|
127
|
-
const axios = new import_axios.Axios({ responseType: "arraybuffer" });
|
|
206
|
+
const axios = new import_axios.Axios({ headers: this.params.headers, responseType: "arraybuffer", timeout: this.timeout });
|
|
128
207
|
const response = await axios.get(url);
|
|
129
208
|
if (response.status >= 200 && response.status < 300) {
|
|
130
209
|
const jsonResult = result;
|
|
@@ -163,6 +242,18 @@ var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
|
|
|
163
242
|
ApiCallResultSchema,
|
|
164
243
|
ApiCallSchema,
|
|
165
244
|
ApiCallWitness,
|
|
166
|
-
ApiCallWitnessConfigSchema
|
|
245
|
+
ApiCallWitnessConfigSchema,
|
|
246
|
+
asApiCall,
|
|
247
|
+
asApiCallWitnessConfig,
|
|
248
|
+
asApiUriCall,
|
|
249
|
+
asApiUriCallWitnessConfig,
|
|
250
|
+
asApiUriTemplateCall,
|
|
251
|
+
asApiUriTemplateCallWitnessConfig,
|
|
252
|
+
isApiCall,
|
|
253
|
+
isApiCallWitnessConfig,
|
|
254
|
+
isApiUriCall,
|
|
255
|
+
isApiUriCallWitnessConfig,
|
|
256
|
+
isApiUriTemplateCall,
|
|
257
|
+
isApiUriTemplateCallWitnessConfig
|
|
167
258
|
});
|
|
168
259
|
//# sourceMappingURL=index.cjs.map
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -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/node/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/node/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/node/index.d.ts
CHANGED
package/dist/node/index.d.ts.map
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/node/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 == null ? void 0 : 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 == null ? void 0 : 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 == null ? void 0 : 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
|
}
|
|
@@ -80,7 +137,7 @@ var ApiCallWitness = class extends AbstractWitness {
|
|
|
80
137
|
try {
|
|
81
138
|
switch (this.accept) {
|
|
82
139
|
case "application/json": {
|
|
83
|
-
const axios = new AxiosJson();
|
|
140
|
+
const axios = new AxiosJson({ headers: this.params.headers, timeout: this.timeout });
|
|
84
141
|
const response = await axios.get(url);
|
|
85
142
|
if (response.status >= 200 && response.status < 300) {
|
|
86
143
|
const jsonResult = result;
|
|
@@ -95,7 +152,7 @@ var ApiCallWitness = class extends AbstractWitness {
|
|
|
95
152
|
break;
|
|
96
153
|
}
|
|
97
154
|
default: {
|
|
98
|
-
const axios = new Axios({ responseType: "arraybuffer" });
|
|
155
|
+
const axios = new Axios({ headers: this.params.headers, responseType: "arraybuffer", timeout: this.timeout });
|
|
99
156
|
const response = await axios.get(url);
|
|
100
157
|
if (response.status >= 200 && response.status < 300) {
|
|
101
158
|
const jsonResult = result;
|
|
@@ -133,6 +190,18 @@ export {
|
|
|
133
190
|
ApiCallResultSchema,
|
|
134
191
|
ApiCallSchema,
|
|
135
192
|
ApiCallWitness,
|
|
136
|
-
ApiCallWitnessConfigSchema
|
|
193
|
+
ApiCallWitnessConfigSchema,
|
|
194
|
+
asApiCall,
|
|
195
|
+
asApiCallWitnessConfig,
|
|
196
|
+
asApiUriCall,
|
|
197
|
+
asApiUriCallWitnessConfig,
|
|
198
|
+
asApiUriTemplateCall,
|
|
199
|
+
asApiUriTemplateCallWitnessConfig,
|
|
200
|
+
isApiCall,
|
|
201
|
+
isApiCallWitnessConfig,
|
|
202
|
+
isApiUriCall,
|
|
203
|
+
isApiUriCallWitnessConfig,
|
|
204
|
+
isApiUriTemplateCall,
|
|
205
|
+
isApiUriTemplateCallWitnessConfig
|
|
137
206
|
};
|
|
138
207
|
//# sourceMappingURL=index.js.map
|