@xyo-network/api-call-witness 2.97.0 → 2.97.1

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.
@@ -1,2 +1,344 @@
1
- "use strict";var rt=Object.create;var A=Object.defineProperty;var ot=Object.getOwnPropertyDescriptor;var lt=Object.getOwnPropertyNames;var pt=Object.getPrototypeOf,nt=Object.prototype.hasOwnProperty;var mt=(t,a)=>{for(var o in a)A(t,o,{get:a[o],enumerable:!0})},v=(t,a,o,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let s of lt(a))!nt.call(t,s)&&s!==o&&A(t,s,{get:()=>a[s],enumerable:!(r=ot(a,s))||r.enumerable});return t};var ct=(t,a,o)=>(o=t!=null?rt(pt(t)):{},v(a||!t||!t.__esModule?A(o,"default",{value:t,enumerable:!0}):o,t)),ft=t=>v(A({},"__esModule",{value:!0}),t);var xt={};mt(xt,{ApiCallResultSchema:()=>p,ApiCallSchema:()=>f,ApiCallWitness:()=>j,ApiCallWitnessConfigSchema:()=>u,asApiCall:()=>ut,asApiCallBase64Result:()=>Ct,asApiCallJsonResult:()=>yt,asApiCallResult:()=>At,asApiCallWitnessConfig:()=>dt,asApiCallXmlResult:()=>ht,asApiUriCall:()=>T,asApiUriCallWitnessConfig:()=>w,asApiUriTemplateCall:()=>S,asApiUriTemplateCallWitnessConfig:()=>W,isApiCall:()=>m,isApiCallBase64Result:()=>y,isApiCallErrorResult:()=>gt,isApiCallJsonResult:()=>Q,isApiCallResult:()=>d,isApiCallWitnessConfig:()=>g,isApiCallXmlResult:()=>R,isApiUriCall:()=>x,isApiUriCallWitnessConfig:()=>z,isApiUriTemplateCall:()=>U,isApiUriTemplateCallWitnessConfig:()=>D});module.exports=ft(xt);var $=require("@xylabs/object");var E=require("@xyo-network/payload-model");var f="network.xyo.api.call",p=`${f}.result`;var m=(0,E.isPayloadOfSchemaType)(f);var ut=$.AsObjectFactory.create(m);var k=require("@xylabs/object");var B=require("@xyo-network/payload-model");var y=t=>(0,B.isPayloadOfSchemaType)(p)(t)&&typeof t?.data=="string";var Ct=k.AsObjectFactory.create(y);var H=require("@xylabs/object");var F=require("@xyo-network/payload-model");var d=(0,F.isPayloadOfSchemaType)(p);var At=H.AsObjectFactory.create(d);var q=require("@xylabs/object");var X=require("@xyo-network/payload-model");var R=t=>(0,X.isPayloadOfSchemaType)(p)(t)&&typeof t?.data=="string";var ht=q.AsObjectFactory.create(R);var G=require("@xylabs/object");var x=t=>m(t)&&!!t.uri;var T=G.AsObjectFactory.create(x);var I=require("@xylabs/object");var U=t=>m(t)&&!!(t.uriTemplate||t.params);var S=I.AsObjectFactory.create(U);var L=require("@xyo-network/payload-model");var gt=t=>!!(0,L.isPayloadOfSchemaType)(p)&&(t.http?.status??200)>=400;var M=require("@xylabs/object"),N=require("@xyo-network/payload-model");var Q=t=>(0,N.isPayloadOfSchemaType)(p)(t)&&t?.contentType==="application/json",yt=M.AsObjectFactory.create(Q);var h=require("@xylabs/object"),V=require("@xyo-network/payload-model");var u="network.xyo.api.call.witness.config";var g=(0,V.isPayloadOfSchemaType)(u),dt=h.AsObjectFactory.create(g),z=t=>g(t)&&!!t.uri,w=h.AsObjectFactory.create(z),D=t=>g(t)&&!!t.uriTemplate,W=h.AsObjectFactory.create(D);var Y=require("@xylabs/assert"),C=require("@xylabs/axios"),Z=require("@xyo-network/abstract-witness"),_=require("@xyo-network/hash"),tt=require("@xyo-network/payload-builder"),et=require("@xyo-network/payload-model"),st=require("base64-js"),P=ct(require("es6-dynamic-template"),1);var b=require("@xylabs/assert"),Rt=!0,K=(t,a)=>{try{let o=new URL(t),r=o.protocol,s=o.host,l=o.pathname,e=o.search;if(r==="ipfs:"){r="https:",s=(0,b.assertEx)(a,()=>"No ipfsGateway provided"),l=o.host==="ipfs"?`ipfs${l}`:`ipfs/${o.host}${l}`;let i=`${r}//${s}/${l}`;return e?.length>0?`${i}?${e}`:i}else if(Rt&&r==="https"&&s==="ipfs.io"){r="https:",s=(0,b.assertEx)(a,()=>"No ipfsGateway provided");let i=l.split("/");i[0]==="ipfs"&&i.shift(),l=i.join("/");let c=`${r}//${s}/${l}`;return e?.length>0?`${c}?${e}`:c}else return t}catch{return t}};var j=class extends Z.AbstractWitness{static configSchemas=[...super.configSchemas,u];static defaultConfigSchema=u;get accept(){return this.config.accept??"application/json"}get ipfsGateway(){return this.params.ipfsGateway}get timeout(){return this.config.timeout}getFullUri(a){let{uri:o}=T(a)??{},{uriTemplate:r,params:s,queries:l}=S(a)??{},{uri:e}=w(this.config)??{},{uriTemplate:i,params:c,queries:J}=W(this.config)??{},O={...c,...s},n;if(o?n=new URL(o):r?n=new URL((0,P.default)(r,O)):e?n=new URL(e):i&&(n=new URL((0,P.default)(i,O))),n)return Object.entries({...J,...l}).map(([it,at])=>n?.searchParams.set(it,at)),n.href;throw new Error("Unable to determine uri. No uri/uriTemplate specified in either the call or config.")}getHeaders(a){return{...this.params.headers,...this.config.headers,...a}}async observeHandler(a=[]){await this.started("throw");try{return await Promise.all(a.filter((0,et.isPayloadOfSchemaType)(f)).map(async r=>{let{verb:s}=r,{verb:l}=this.config,e=s??l??"get",i=this.getFullUri(r),c=(0,Y.assertEx)(K(i,this.ipfsGateway),()=>"Invalid URI");return e==="get"?this.httpGet(c,(await tt.PayloadBuilder.build(r)).$hash):{call:await _.PayloadHasher.hash(r),schema:p}}))}catch(o){let r=o;throw console.error(`Error [${this.config.name}]: ${r.message}`),console.log(r.stack),r}}async httpGet(a,o,r){let s={call:o,schema:p};try{switch(this.accept){case"application/json":{let e=await new C.AxiosJson({headers:{...this.getHeaders(r),Accept:"application/json"},timeout:this.timeout}).get(a);if(e.status>=200&&e.status<300){let i=s;i.data=e.data,i.contentType="application/json"}else{let i=s;i.http={status:e.status}}break}case"application/xml":case"text/xml":{let e=await new C.Axios({headers:{...this.getHeaders(r),Accept:this.accept},responseType:"arraybuffer",timeout:this.timeout}).get(a);if(e.status>=200&&e.status<300){let i=s;i.data=Buffer.from(e.data,"binary").toString("utf8"),i.contentType=e.headers["content-type"]?.toString()??"application/xml"}else{let i=s;i.http={status:e.status}}break}default:{let e=await new C.Axios({headers:this.params.headers,responseType:"arraybuffer",timeout:this.timeout}).get(a);if(e.status>=200&&e.status<300){let i=s;i.data=(0,st.fromByteArray)(Buffer.from(e.data,"binary")),i.contentType=e.headers["content-type"]?.toString()??"application/octet-stream"}else{let i=s;i.http={status:e.status}}break}}}catch(l){let e=l;if(e.isAxiosError)return e?.response?.status!==void 0&&(s.http=s.http??{},s.http.status=e?.response?.status),e?.code!==void 0&&(s.http=s.http??{},s.http.code=e?.code),s;throw l}return s}};
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
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
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var src_exports = {};
32
+ __export(src_exports, {
33
+ ApiCallResultSchema: () => ApiCallResultSchema,
34
+ ApiCallSchema: () => ApiCallSchema,
35
+ ApiCallWitness: () => ApiCallWitness,
36
+ ApiCallWitnessConfigSchema: () => ApiCallWitnessConfigSchema,
37
+ asApiCall: () => asApiCall,
38
+ asApiCallBase64Result: () => asApiCallBase64Result,
39
+ asApiCallJsonResult: () => asApiCallJsonResult,
40
+ asApiCallResult: () => asApiCallResult,
41
+ asApiCallWitnessConfig: () => asApiCallWitnessConfig,
42
+ asApiCallXmlResult: () => asApiCallXmlResult,
43
+ asApiUriCall: () => asApiUriCall,
44
+ asApiUriCallWitnessConfig: () => asApiUriCallWitnessConfig,
45
+ asApiUriTemplateCall: () => asApiUriTemplateCall,
46
+ asApiUriTemplateCallWitnessConfig: () => asApiUriTemplateCallWitnessConfig,
47
+ isApiCall: () => isApiCall,
48
+ isApiCallBase64Result: () => isApiCallBase64Result,
49
+ isApiCallErrorResult: () => isApiCallErrorResult,
50
+ isApiCallJsonResult: () => isApiCallJsonResult,
51
+ isApiCallResult: () => isApiCallResult,
52
+ isApiCallWitnessConfig: () => isApiCallWitnessConfig,
53
+ isApiCallXmlResult: () => isApiCallXmlResult,
54
+ isApiUriCall: () => isApiUriCall,
55
+ isApiUriCallWitnessConfig: () => isApiUriCallWitnessConfig,
56
+ isApiUriTemplateCall: () => isApiUriTemplateCall,
57
+ isApiUriTemplateCallWitnessConfig: () => isApiUriTemplateCallWitnessConfig
58
+ });
59
+ module.exports = __toCommonJS(src_exports);
60
+
61
+ // src/Payload/identity/asApiCall.ts
62
+ var import_object = require("@xylabs/object");
63
+
64
+ // src/Payload/identity/isApiCall.ts
65
+ var import_payload_model = require("@xyo-network/payload-model");
66
+
67
+ // src/Payload/Schema.ts
68
+ var ApiCallSchema = "network.xyo.api.call";
69
+ var ApiCallResultSchema = `${ApiCallSchema}.result`;
70
+
71
+ // src/Payload/identity/isApiCall.ts
72
+ var isApiCall = (0, import_payload_model.isPayloadOfSchemaType)(ApiCallSchema);
73
+
74
+ // src/Payload/identity/asApiCall.ts
75
+ var asApiCall = import_object.AsObjectFactory.create(isApiCall);
76
+
77
+ // src/Payload/identity/asApiCallBase64Result.ts
78
+ var import_object2 = require("@xylabs/object");
79
+
80
+ // src/Payload/identity/isApiCallBase64Result.ts
81
+ var import_payload_model2 = require("@xyo-network/payload-model");
82
+ var isApiCallBase64Result = (x) => {
83
+ return (0, import_payload_model2.isPayloadOfSchemaType)(ApiCallResultSchema)(x) && typeof x?.data === "string";
84
+ };
85
+
86
+ // src/Payload/identity/asApiCallBase64Result.ts
87
+ var asApiCallBase64Result = import_object2.AsObjectFactory.create(isApiCallBase64Result);
88
+
89
+ // src/Payload/identity/asApiCallResult.ts
90
+ var import_object3 = require("@xylabs/object");
91
+
92
+ // src/Payload/identity/isApiCallResult.ts
93
+ var import_payload_model3 = require("@xyo-network/payload-model");
94
+ var isApiCallResult = (0, import_payload_model3.isPayloadOfSchemaType)(ApiCallResultSchema);
95
+
96
+ // src/Payload/identity/asApiCallResult.ts
97
+ var asApiCallResult = import_object3.AsObjectFactory.create(isApiCallResult);
98
+
99
+ // src/Payload/identity/asApiCallXmlResult.ts
100
+ var import_object4 = require("@xylabs/object");
101
+
102
+ // src/Payload/identity/isApiCallXmlResult.ts
103
+ var import_payload_model4 = require("@xyo-network/payload-model");
104
+ var isApiCallXmlResult = (x) => {
105
+ return (0, import_payload_model4.isPayloadOfSchemaType)(ApiCallResultSchema)(x) && typeof x?.data === "string";
106
+ };
107
+
108
+ // src/Payload/identity/asApiCallXmlResult.ts
109
+ var asApiCallXmlResult = import_object4.AsObjectFactory.create(isApiCallXmlResult);
110
+
111
+ // src/Payload/identity/asApiUriCall.ts
112
+ var import_object5 = require("@xylabs/object");
113
+
114
+ // src/Payload/identity/isApiUriCall.ts
115
+ var isApiUriCall = (value) => isApiCall(value) && !!value.uri;
116
+
117
+ // src/Payload/identity/asApiUriCall.ts
118
+ var asApiUriCall = import_object5.AsObjectFactory.create(isApiUriCall);
119
+
120
+ // src/Payload/identity/asApiUriTemplateCall.ts
121
+ var import_object6 = require("@xylabs/object");
122
+
123
+ // src/Payload/identity/isApiUriTemplateCall.ts
124
+ var isApiUriTemplateCall = (value) => isApiCall(value) && !!(value.uriTemplate || value.params);
125
+
126
+ // src/Payload/identity/asApiUriTemplateCall.ts
127
+ var asApiUriTemplateCall = import_object6.AsObjectFactory.create(isApiUriTemplateCall);
128
+
129
+ // src/Payload/identity/isApiCallErrorResult.ts
130
+ var import_payload_model5 = require("@xyo-network/payload-model");
131
+ var isApiCallErrorResult = (value) => !!(0, import_payload_model5.isPayloadOfSchemaType)(ApiCallResultSchema) && (value.http?.status ?? 200) >= 400;
132
+
133
+ // src/Payload/types/ApiCallJsonResult.ts
134
+ var import_object7 = require("@xylabs/object");
135
+ var import_payload_model6 = require("@xyo-network/payload-model");
136
+ var isApiCallJsonResult = (x) => {
137
+ return (0, import_payload_model6.isPayloadOfSchemaType)(ApiCallResultSchema)(x) && x?.contentType === "application/json";
138
+ };
139
+ var asApiCallJsonResult = import_object7.AsObjectFactory.create(isApiCallJsonResult);
140
+
141
+ // src/Witness/Config.ts
142
+ var import_object8 = require("@xylabs/object");
143
+ var import_payload_model7 = require("@xyo-network/payload-model");
144
+
145
+ // src/Witness/Schema.ts
146
+ var ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
147
+
148
+ // src/Witness/Config.ts
149
+ var isApiCallWitnessConfig = (0, import_payload_model7.isPayloadOfSchemaType)(ApiCallWitnessConfigSchema);
150
+ var asApiCallWitnessConfig = import_object8.AsObjectFactory.create(isApiCallWitnessConfig);
151
+ var isApiUriCallWitnessConfig = (value) => isApiCallWitnessConfig(value) && !!value.uri;
152
+ var asApiUriCallWitnessConfig = import_object8.AsObjectFactory.create(isApiUriCallWitnessConfig);
153
+ var isApiUriTemplateCallWitnessConfig = (value) => isApiCallWitnessConfig(value) && !!value.uriTemplate;
154
+ var asApiUriTemplateCallWitnessConfig = import_object8.AsObjectFactory.create(isApiUriTemplateCallWitnessConfig);
155
+
156
+ // src/Witness/Witness.ts
157
+ var import_assert2 = require("@xylabs/assert");
158
+ var import_axios = require("@xylabs/axios");
159
+ var import_abstract_witness = require("@xyo-network/abstract-witness");
160
+ var import_hash = require("@xyo-network/hash");
161
+ var import_payload_builder = require("@xyo-network/payload-builder");
162
+ var import_payload_model8 = require("@xyo-network/payload-model");
163
+ var import_base64_js = require("base64-js");
164
+ var import_es6_dynamic_template = __toESM(require("es6-dynamic-template"), 1);
165
+
166
+ // src/lib/checkIpfsUrl.ts
167
+ var import_assert = require("@xylabs/assert");
168
+ var allowIpfsIoRepair = true;
169
+ var checkIpfsUrl = (urlToCheck, ipfsGateway) => {
170
+ try {
171
+ const url = new URL(urlToCheck);
172
+ let protocol = url.protocol;
173
+ let host = url.host;
174
+ let path = url.pathname;
175
+ const query = url.search;
176
+ if (protocol === "ipfs:") {
177
+ protocol = "https:";
178
+ host = (0, import_assert.assertEx)(ipfsGateway, () => "No ipfsGateway provided");
179
+ path = url.host === "ipfs" ? `ipfs${path}` : `ipfs/${url.host}${path}`;
180
+ const root = `${protocol}//${host}/${path}`;
181
+ return query?.length > 0 ? `${root}?${query}` : root;
182
+ } else if (allowIpfsIoRepair && protocol === "https" && host === "ipfs.io") {
183
+ protocol = "https:";
184
+ host = (0, import_assert.assertEx)(ipfsGateway, () => "No ipfsGateway provided");
185
+ const pathParts = path.split("/");
186
+ if (pathParts[0] === "ipfs") {
187
+ pathParts.shift();
188
+ }
189
+ path = pathParts.join("/");
190
+ const root = `${protocol}//${host}/${path}`;
191
+ return query?.length > 0 ? `${root}?${query}` : root;
192
+ } else {
193
+ return urlToCheck;
194
+ }
195
+ } catch {
196
+ return urlToCheck;
197
+ }
198
+ };
199
+
200
+ // src/Witness/Witness.ts
201
+ var ApiCallWitness = class extends import_abstract_witness.AbstractWitness {
202
+ static configSchemas = [...super.configSchemas, ApiCallWitnessConfigSchema];
203
+ static defaultConfigSchema = ApiCallWitnessConfigSchema;
204
+ get accept() {
205
+ return this.config.accept ?? "application/json";
206
+ }
207
+ get ipfsGateway() {
208
+ return this.params.ipfsGateway;
209
+ }
210
+ get timeout() {
211
+ return this.config.timeout;
212
+ }
213
+ getFullUri(call) {
214
+ const { uri: callUri } = asApiUriCall(call) ?? {};
215
+ const { uriTemplate: callUriTemplate, params: callParams, queries: callQueries } = asApiUriTemplateCall(call) ?? {};
216
+ const { uri: configUri } = asApiUriCallWitnessConfig(this.config) ?? {};
217
+ const { uriTemplate: configUriTemplate, params: configParams, queries: configQueries } = asApiUriTemplateCallWitnessConfig(this.config) ?? {};
218
+ const params = { ...configParams, ...callParams };
219
+ let url = void 0;
220
+ if (callUri) {
221
+ url = new URL(callUri);
222
+ } else if (callUriTemplate) {
223
+ url = new URL((0, import_es6_dynamic_template.default)(callUriTemplate, params));
224
+ } else if (configUri) {
225
+ url = new URL(configUri);
226
+ } else if (configUriTemplate) {
227
+ url = new URL((0, import_es6_dynamic_template.default)(configUriTemplate, params));
228
+ }
229
+ if (url) {
230
+ const queries = Object.entries({ ...configQueries, ...callQueries });
231
+ queries.map(([key, value]) => url?.searchParams.set(key, value));
232
+ return url.href;
233
+ }
234
+ throw new Error("Unable to determine uri. No uri/uriTemplate specified in either the call or config.");
235
+ }
236
+ getHeaders(headers) {
237
+ return { ...this.params.headers, ...this.config.headers, ...headers };
238
+ }
239
+ async observeHandler(inPayloads = []) {
240
+ await this.started("throw");
241
+ try {
242
+ const observations = await Promise.all(
243
+ inPayloads.filter((0, import_payload_model8.isPayloadOfSchemaType)(ApiCallSchema)).map(async (call) => {
244
+ const { verb: callVerb } = call;
245
+ const { verb: configVerb } = this.config;
246
+ const verb = callVerb ?? configVerb ?? "get";
247
+ const uri = this.getFullUri(call);
248
+ const validatedUri = (0, import_assert2.assertEx)(checkIpfsUrl(uri, this.ipfsGateway), () => "Invalid URI");
249
+ if (verb === "get") {
250
+ return this.httpGet(validatedUri, (await import_payload_builder.PayloadBuilder.build(call)).$hash);
251
+ }
252
+ const observation = {
253
+ call: await import_hash.PayloadHasher.hash(call),
254
+ schema: ApiCallResultSchema
255
+ };
256
+ return observation;
257
+ })
258
+ );
259
+ return observations;
260
+ } catch (ex) {
261
+ const error = ex;
262
+ console.error(`Error [${this.config.name}]: ${error.message}`);
263
+ console.log(error.stack);
264
+ throw error;
265
+ }
266
+ }
267
+ async httpGet(url, call, headers) {
268
+ const result = {
269
+ call,
270
+ schema: ApiCallResultSchema
271
+ };
272
+ try {
273
+ switch (this.accept) {
274
+ case "application/json": {
275
+ const axios = new import_axios.AxiosJson({ headers: { ...this.getHeaders(headers), Accept: "application/json" }, timeout: this.timeout });
276
+ const response = await axios.get(url);
277
+ if (response.status >= 200 && response.status < 300) {
278
+ const jsonResult = result;
279
+ jsonResult.data = response.data;
280
+ jsonResult.contentType = "application/json";
281
+ } else {
282
+ const errorResult = result;
283
+ errorResult.http = {
284
+ status: response.status
285
+ };
286
+ }
287
+ break;
288
+ }
289
+ case "application/xml":
290
+ case "text/xml": {
291
+ const axios = new import_axios.Axios({
292
+ headers: { ...this.getHeaders(headers), Accept: this.accept },
293
+ responseType: "arraybuffer",
294
+ timeout: this.timeout
295
+ });
296
+ const response = await axios.get(url);
297
+ if (response.status >= 200 && response.status < 300) {
298
+ const xmlResult = result;
299
+ xmlResult.data = Buffer.from(response.data, "binary").toString("utf8");
300
+ xmlResult.contentType = response.headers["content-type"]?.toString() ?? "application/xml";
301
+ } else {
302
+ const errorResult = result;
303
+ errorResult.http = {
304
+ status: response.status
305
+ };
306
+ }
307
+ break;
308
+ }
309
+ default: {
310
+ const axios = new import_axios.Axios({ headers: this.params.headers, responseType: "arraybuffer", timeout: this.timeout });
311
+ const response = await axios.get(url);
312
+ if (response.status >= 200 && response.status < 300) {
313
+ const jsonResult = result;
314
+ jsonResult.data = (0, import_base64_js.fromByteArray)(Buffer.from(response.data, "binary"));
315
+ jsonResult.contentType = response.headers["content-type"]?.toString() ?? "application/octet-stream";
316
+ } else {
317
+ const errorResult = result;
318
+ errorResult.http = {
319
+ status: response.status
320
+ };
321
+ }
322
+ break;
323
+ }
324
+ }
325
+ } catch (ex) {
326
+ const axiosError = ex;
327
+ if (axiosError.isAxiosError) {
328
+ if (axiosError?.response?.status !== void 0) {
329
+ result.http = result.http ?? {};
330
+ result.http.status = axiosError?.response?.status;
331
+ }
332
+ if (axiosError?.code !== void 0) {
333
+ result.http = result.http ?? {};
334
+ result.http.code = axiosError?.code;
335
+ }
336
+ return result;
337
+ } else {
338
+ throw ex;
339
+ }
340
+ }
341
+ return result;
342
+ }
343
+ };
2
344
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Payload/identity/asApiCall.ts","../../src/Payload/identity/isApiCall.ts","../../src/Payload/Schema.ts","../../src/Payload/identity/asApiCallBase64Result.ts","../../src/Payload/identity/isApiCallBase64Result.ts","../../src/Payload/identity/asApiCallResult.ts","../../src/Payload/identity/isApiCallResult.ts","../../src/Payload/identity/asApiCallXmlResult.ts","../../src/Payload/identity/isApiCallXmlResult.ts","../../src/Payload/identity/asApiUriCall.ts","../../src/Payload/identity/isApiUriCall.ts","../../src/Payload/identity/asApiUriTemplateCall.ts","../../src/Payload/identity/isApiUriTemplateCall.ts","../../src/Payload/identity/isApiCallErrorResult.ts","../../src/Payload/types/ApiCallJsonResult.ts","../../src/Witness/Config.ts","../../src/Witness/Schema.ts","../../src/Witness/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["export * from './Payload'\nexport * from './Witness'\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCall } from './isApiCall'\n\nexport const asApiCall = AsObjectFactory.create(isApiCall)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallSchema } from '../Schema'\nimport { ApiCall } from '../types'\n\nexport const isApiCall = isPayloadOfSchemaType<ApiCall>(ApiCallSchema)\n","export const ApiCallSchema = 'network.xyo.api.call'\nexport type ApiCallSchema = typeof ApiCallSchema\n\nexport const ApiCallResultSchema = `${ApiCallSchema}.result`\nexport type ApiCallResultSchema = typeof ApiCallResultSchema\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCallBase64Result } from './isApiCallBase64Result'\n\nexport const asApiCallBase64Result = AsObjectFactory.create(isApiCallBase64Result)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallBase64Result } from '../types'\n\nexport const isApiCallBase64Result = (x?: unknown | null): x is ApiCallBase64Result => {\n return isPayloadOfSchemaType(ApiCallResultSchema)(x) && typeof (x as ApiCallBase64Result)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCallResult } from './isApiCallResult'\n\nexport const asApiCallResult = AsObjectFactory.create(isApiCallResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallResult } from '../types'\n\nexport const isApiCallResult = isPayloadOfSchemaType<ApiCallResult>(ApiCallResultSchema)\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCallXmlResult } from './isApiCallXmlResult'\n\nexport const asApiCallXmlResult = AsObjectFactory.create(isApiCallXmlResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallXmlResult } from '../types'\n\nexport const isApiCallXmlResult = (x?: unknown | null): x is ApiCallXmlResult => {\n return isPayloadOfSchemaType(ApiCallResultSchema)(x) && typeof (x as ApiCallXmlResult)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiUriCall } from './isApiUriCall'\n\nexport const asApiUriCall = AsObjectFactory.create(isApiUriCall)\n","import { ApiUriCall } from '../types'\nimport { isApiCall } from './isApiCall'\n\nexport const isApiUriCall = (value?: unknown): value is ApiUriCall => isApiCall(value) && !!(value as ApiUriCall).uri\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiUriTemplateCall } from './isApiUriTemplateCall'\n\nexport const asApiUriTemplateCall = AsObjectFactory.create(isApiUriTemplateCall)\n","import { ApiUriTemplateCall } from '../types'\nimport { isApiCall } from './isApiCall'\n\nexport const isApiUriTemplateCall = (value?: unknown): value is ApiUriTemplateCall =>\n isApiCall(value) && !!((value as ApiUriTemplateCall).uriTemplate || (value as ApiUriTemplateCall).params)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallErrorResult, ApiCallResult } from '../types'\n\nexport const isApiCallErrorResult = (value: unknown): value is ApiCallErrorResult =>\n !!isPayloadOfSchemaType<ApiCallResult>(ApiCallResultSchema) && ((value as ApiCallErrorResult).http?.status ?? 200) >= 400\n","import { Hash } from '@xylabs/hex'\nimport { AsObjectFactory, JsonArray, JsonObject } from '@xylabs/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\n\nexport type ApiCallJsonResultType = JsonArray | JsonObject\n\nexport type ApiCallJsonResult<T extends ApiCallJsonResultType = ApiCallJsonResultType> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n ApiCallResultSchema\n>\n\nexport const isApiCallJsonResult = <T extends ApiCallJsonResultType = ApiCallJsonResultType>(x?: unknown | null): x is ApiCallJsonResult<T> => {\n return isPayloadOfSchemaType(ApiCallResultSchema)(x) && (x as ApiCallJsonResult)?.contentType === 'application/json'\n}\nexport const asApiCallJsonResult = AsObjectFactory.create(isApiCallJsonResult)\n","import { AsObjectFactory } from '@xylabs/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessConfig } from '@xyo-network/witness-model'\n\nimport { ApiCall, ApiUriCall, ApiUriTemplateCall, MimeTypes } from '../Payload'\nimport { ApiCallWitnessConfigSchema } from './Schema'\n\nexport type ApiCallWitnessConfigBase = WitnessConfig<{\n accept?: MimeTypes\n headers?: Record<string, string | undefined>\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, string>\n uriTemplate: ApiUriTemplateCall['uriTemplate']\n }\n>\n\nexport type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase\n\nexport const isApiCallWitnessConfig = isPayloadOfSchemaType<ApiCallWitnessConfig>(ApiCallWitnessConfigSchema)\nexport const asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig)\n\nexport const isApiUriCallWitnessConfig = (value?: unknown): value is ApiUriCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriCallWitnessConfig).uri\nexport const asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig)\n\nexport const isApiUriTemplateCallWitnessConfig = (value?: unknown): value is ApiUriTemplateCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriTemplateCallWitnessConfig).uriTemplate\nexport const asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig)\n","export const ApiCallWitnessConfigSchema = 'network.xyo.api.call.witness.config'\nexport type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { Axios, AxiosError, AxiosJson } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { fromByteArray } from 'base64-js'\nimport fillTemplate from 'es6-dynamic-template'\n\nimport { checkIpfsUrl } from '../lib'\nimport {\n ApiCall,\n ApiCallBase64Result,\n ApiCallErrorResult,\n ApiCallJsonResult,\n ApiCallJsonResultType,\n ApiCallResult,\n ApiCallResultSchema,\n ApiCallSchema,\n ApiCallXmlResult,\n asApiUriCall,\n asApiUriTemplateCall,\n MimeTypes,\n} from '../Payload'\nimport { asApiUriCallWitnessConfig, asApiUriTemplateCallWitnessConfig } from './Config'\nimport { ApiCallWitnessParams } from './Params'\nimport { ApiCallWitnessConfigSchema } from './Schema'\n\nexport class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ApiCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = ApiCallWitnessConfigSchema\n\n get accept(): MimeTypes {\n return this.config.accept ?? 'application/json'\n }\n\n get ipfsGateway() {\n return this.params.ipfsGateway\n }\n\n get timeout() {\n return this.config.timeout\n }\n\n getFullUri(call?: 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(fillTemplate(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(fillTemplate(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n queries.map(([key, value]) => url?.searchParams.set(key, value))\n return url.href\n }\n\n throw new Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n getHeaders(headers?: Record<string, string | undefined>): Record<string, string | undefined> {\n return { ...this.params.headers, ...this.config.headers, ...headers }\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, (await PayloadBuilder.build(call)).$hash)\n }\n\n const observation: ApiCallResult = {\n call: await PayloadHasher.hash(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, headers?: Record<string, string | undefined>): 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.getHeaders(headers), Accept: 'application/json' }, timeout: this.timeout })\n const response = await axios.get<ApiCallJsonResultType>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n case 'application/xml':\n case 'text/xml': {\n const axios = new Axios({\n headers: { ...this.getHeaders(headers), Accept: this.accept },\n responseType: 'arraybuffer',\n timeout: this.timeout,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const xmlResult = result as ApiCallXmlResult\n xmlResult.data = Buffer.from(response.data, 'binary').toString('utf8')\n xmlResult.contentType = response.headers['content-type']?.toString() ?? 'application/xml'\n } else {\n const errorResult = result as 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 {\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":["src_exports","__export","ApiCallResultSchema","ApiCallSchema","ApiCallWitness","ApiCallWitnessConfigSchema","asApiCall","asApiCallBase64Result","asApiCallJsonResult","asApiCallResult","asApiCallWitnessConfig","asApiCallXmlResult","asApiUriCall","asApiUriCallWitnessConfig","asApiUriTemplateCall","asApiUriTemplateCallWitnessConfig","isApiCall","isApiCallBase64Result","isApiCallErrorResult","isApiCallJsonResult","isApiCallResult","isApiCallWitnessConfig","isApiCallXmlResult","isApiUriCall","isApiUriCallWitnessConfig","isApiUriTemplateCall","isApiUriTemplateCallWitnessConfig","__toCommonJS","import_object","import_payload_model","ApiCallSchema","ApiCallResultSchema","isApiCall","ApiCallSchema","asApiCall","isApiCall","import_object","import_payload_model","isApiCallBase64Result","x","ApiCallResultSchema","asApiCallBase64Result","isApiCallBase64Result","import_object","import_payload_model","isApiCallResult","ApiCallResultSchema","asApiCallResult","isApiCallResult","import_object","import_payload_model","isApiCallXmlResult","x","ApiCallResultSchema","asApiCallXmlResult","isApiCallXmlResult","import_object","isApiUriCall","value","isApiCall","asApiUriCall","isApiUriCall","import_object","isApiUriTemplateCall","value","isApiCall","asApiUriTemplateCall","isApiUriTemplateCall","import_payload_model","isApiCallErrorResult","value","ApiCallResultSchema","import_object","import_payload_model","isApiCallJsonResult","x","ApiCallResultSchema","asApiCallJsonResult","import_object","import_payload_model","ApiCallWitnessConfigSchema","isApiCallWitnessConfig","ApiCallWitnessConfigSchema","asApiCallWitnessConfig","isApiUriCallWitnessConfig","value","asApiUriCallWitnessConfig","isApiUriTemplateCallWitnessConfig","asApiUriTemplateCallWitnessConfig","import_assert","import_axios","import_abstract_witness","import_hash","import_payload_builder","import_payload_model","import_base64_js","import_es6_dynamic_template","import_assert","allowIpfsIoRepair","checkIpfsUrl","urlToCheck","ipfsGateway","url","protocol","host","path","query","root","pathParts","ApiCallWitness","ApiCallWitnessConfigSchema","call","callUri","asApiUriCall","callUriTemplate","callParams","callQueries","asApiUriTemplateCall","configUri","asApiUriCallWitnessConfig","configUriTemplate","configParams","configQueries","asApiUriTemplateCallWitnessConfig","params","url","fillTemplate","key","value","headers","inPayloads","ApiCallSchema","callVerb","configVerb","verb","uri","validatedUri","checkIpfsUrl","ApiCallResultSchema","ex","error","result","response","jsonResult","errorResult","xmlResult","axiosError"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Payload/identity/asApiCall.ts","../../src/Payload/identity/isApiCall.ts","../../src/Payload/Schema.ts","../../src/Payload/identity/asApiCallBase64Result.ts","../../src/Payload/identity/isApiCallBase64Result.ts","../../src/Payload/identity/asApiCallResult.ts","../../src/Payload/identity/isApiCallResult.ts","../../src/Payload/identity/asApiCallXmlResult.ts","../../src/Payload/identity/isApiCallXmlResult.ts","../../src/Payload/identity/asApiUriCall.ts","../../src/Payload/identity/isApiUriCall.ts","../../src/Payload/identity/asApiUriTemplateCall.ts","../../src/Payload/identity/isApiUriTemplateCall.ts","../../src/Payload/identity/isApiCallErrorResult.ts","../../src/Payload/types/ApiCallJsonResult.ts","../../src/Witness/Config.ts","../../src/Witness/Schema.ts","../../src/Witness/Witness.ts","../../src/lib/checkIpfsUrl.ts"],"sourcesContent":["export * from './Payload'\nexport * from './Witness'\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCall } from './isApiCall'\n\nexport const asApiCall = AsObjectFactory.create(isApiCall)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallSchema } from '../Schema'\nimport { ApiCall } from '../types'\n\nexport const isApiCall = isPayloadOfSchemaType<ApiCall>(ApiCallSchema)\n","export const ApiCallSchema = 'network.xyo.api.call'\nexport type ApiCallSchema = typeof ApiCallSchema\n\nexport const ApiCallResultSchema = `${ApiCallSchema}.result`\nexport type ApiCallResultSchema = typeof ApiCallResultSchema\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCallBase64Result } from './isApiCallBase64Result'\n\nexport const asApiCallBase64Result = AsObjectFactory.create(isApiCallBase64Result)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallBase64Result } from '../types'\n\nexport const isApiCallBase64Result = (x?: unknown | null): x is ApiCallBase64Result => {\n return isPayloadOfSchemaType(ApiCallResultSchema)(x) && typeof (x as ApiCallBase64Result)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCallResult } from './isApiCallResult'\n\nexport const asApiCallResult = AsObjectFactory.create(isApiCallResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallResult } from '../types'\n\nexport const isApiCallResult = isPayloadOfSchemaType<ApiCallResult>(ApiCallResultSchema)\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiCallXmlResult } from './isApiCallXmlResult'\n\nexport const asApiCallXmlResult = AsObjectFactory.create(isApiCallXmlResult)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallXmlResult } from '../types'\n\nexport const isApiCallXmlResult = (x?: unknown | null): x is ApiCallXmlResult => {\n return isPayloadOfSchemaType(ApiCallResultSchema)(x) && typeof (x as ApiCallXmlResult)?.data === 'string'\n}\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiUriCall } from './isApiUriCall'\n\nexport const asApiUriCall = AsObjectFactory.create(isApiUriCall)\n","import { ApiUriCall } from '../types'\nimport { isApiCall } from './isApiCall'\n\nexport const isApiUriCall = (value?: unknown): value is ApiUriCall => isApiCall(value) && !!(value as ApiUriCall).uri\n","import { AsObjectFactory } from '@xylabs/object'\n\nimport { isApiUriTemplateCall } from './isApiUriTemplateCall'\n\nexport const asApiUriTemplateCall = AsObjectFactory.create(isApiUriTemplateCall)\n","import { ApiUriTemplateCall } from '../types'\nimport { isApiCall } from './isApiCall'\n\nexport const isApiUriTemplateCall = (value?: unknown): value is ApiUriTemplateCall =>\n isApiCall(value) && !!((value as ApiUriTemplateCall).uriTemplate || (value as ApiUriTemplateCall).params)\n","import { isPayloadOfSchemaType } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\nimport { ApiCallErrorResult, ApiCallResult } from '../types'\n\nexport const isApiCallErrorResult = (value: unknown): value is ApiCallErrorResult =>\n !!isPayloadOfSchemaType<ApiCallResult>(ApiCallResultSchema) && ((value as ApiCallErrorResult).http?.status ?? 200) >= 400\n","import { Hash } from '@xylabs/hex'\nimport { AsObjectFactory, JsonArray, JsonObject } from '@xylabs/object'\nimport { isPayloadOfSchemaType, Payload } from '@xyo-network/payload-model'\n\nimport { ApiCallResultSchema } from '../Schema'\n\nexport type ApiCallJsonResultType = JsonArray | JsonObject\n\nexport type ApiCallJsonResult<T extends ApiCallJsonResultType = ApiCallJsonResultType> = Payload<\n {\n call: Hash\n contentType: 'application/json'\n data: T\n },\n ApiCallResultSchema\n>\n\nexport const isApiCallJsonResult = <T extends ApiCallJsonResultType = ApiCallJsonResultType>(x?: unknown | null): x is ApiCallJsonResult<T> => {\n return isPayloadOfSchemaType(ApiCallResultSchema)(x) && (x as ApiCallJsonResult)?.contentType === 'application/json'\n}\nexport const asApiCallJsonResult = AsObjectFactory.create(isApiCallJsonResult)\n","import { AsObjectFactory } from '@xylabs/object'\nimport { isPayloadOfSchemaType } from '@xyo-network/payload-model'\nimport { WitnessConfig } from '@xyo-network/witness-model'\n\nimport { ApiCall, ApiUriCall, ApiUriTemplateCall, MimeTypes } from '../Payload'\nimport { ApiCallWitnessConfigSchema } from './Schema'\n\nexport type ApiCallWitnessConfigBase = WitnessConfig<{\n accept?: MimeTypes\n headers?: Record<string, string | undefined>\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, string>\n uriTemplate: ApiUriTemplateCall['uriTemplate']\n }\n>\n\nexport type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase\n\nexport const isApiCallWitnessConfig = isPayloadOfSchemaType<ApiCallWitnessConfig>(ApiCallWitnessConfigSchema)\nexport const asApiCallWitnessConfig = AsObjectFactory.create(isApiCallWitnessConfig)\n\nexport const isApiUriCallWitnessConfig = (value?: unknown): value is ApiUriCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriCallWitnessConfig).uri\nexport const asApiUriCallWitnessConfig = AsObjectFactory.create(isApiUriCallWitnessConfig)\n\nexport const isApiUriTemplateCallWitnessConfig = (value?: unknown): value is ApiUriTemplateCallWitnessConfig =>\n isApiCallWitnessConfig(value) && !!(value as ApiUriTemplateCallWitnessConfig).uriTemplate\nexport const asApiUriTemplateCallWitnessConfig = AsObjectFactory.create(isApiUriTemplateCallWitnessConfig)\n","export const ApiCallWitnessConfigSchema = 'network.xyo.api.call.witness.config'\nexport type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema\n","/* eslint-disable max-statements */\nimport { assertEx } from '@xylabs/assert'\nimport { Axios, AxiosError, AxiosJson } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { AbstractWitness } from '@xyo-network/abstract-witness'\nimport { PayloadHasher } from '@xyo-network/hash'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { isPayloadOfSchemaType, Schema } from '@xyo-network/payload-model'\nimport { fromByteArray } from 'base64-js'\nimport fillTemplate from 'es6-dynamic-template'\n\nimport { checkIpfsUrl } from '../lib'\nimport {\n ApiCall,\n ApiCallBase64Result,\n ApiCallErrorResult,\n ApiCallJsonResult,\n ApiCallJsonResultType,\n ApiCallResult,\n ApiCallResultSchema,\n ApiCallSchema,\n ApiCallXmlResult,\n asApiUriCall,\n asApiUriTemplateCall,\n MimeTypes,\n} from '../Payload'\nimport { asApiUriCallWitnessConfig, asApiUriTemplateCallWitnessConfig } from './Config'\nimport { ApiCallWitnessParams } from './Params'\nimport { ApiCallWitnessConfigSchema } from './Schema'\n\nexport class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCall, ApiCallResult> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, ApiCallWitnessConfigSchema]\n static override readonly defaultConfigSchema: Schema = ApiCallWitnessConfigSchema\n\n get accept(): MimeTypes {\n return this.config.accept ?? 'application/json'\n }\n\n get ipfsGateway() {\n return this.params.ipfsGateway\n }\n\n get timeout() {\n return this.config.timeout\n }\n\n getFullUri(call?: 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(fillTemplate(callUriTemplate, params))\n } else if (configUri) {\n url = new URL(configUri)\n } else if (configUriTemplate) {\n url = new URL(fillTemplate(configUriTemplate, params))\n }\n\n if (url) {\n const queries = Object.entries({ ...configQueries, ...callQueries })\n queries.map(([key, value]) => url?.searchParams.set(key, value))\n return url.href\n }\n\n throw new Error('Unable to determine uri. No uri/uriTemplate specified in either the call or config.')\n }\n\n getHeaders(headers?: Record<string, string | undefined>): Record<string, string | undefined> {\n return { ...this.params.headers, ...this.config.headers, ...headers }\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, (await PayloadBuilder.build(call)).$hash)\n }\n\n const observation: ApiCallResult = {\n call: await PayloadHasher.hash(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, headers?: Record<string, string | undefined>): 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.getHeaders(headers), Accept: 'application/json' }, timeout: this.timeout })\n const response = await axios.get<ApiCallJsonResultType>(url)\n if (response.status >= 200 && response.status < 300) {\n const jsonResult = result as ApiCallJsonResult\n jsonResult.data = response.data\n jsonResult.contentType = 'application/json'\n } else {\n const errorResult = result as ApiCallErrorResult\n errorResult.http = {\n status: response.status,\n }\n }\n break\n }\n case 'application/xml':\n case 'text/xml': {\n const axios = new Axios({\n headers: { ...this.getHeaders(headers), Accept: this.accept },\n responseType: 'arraybuffer',\n timeout: this.timeout,\n })\n const response = await axios.get(url)\n if (response.status >= 200 && response.status < 300) {\n const xmlResult = result as ApiCallXmlResult\n xmlResult.data = Buffer.from(response.data, 'binary').toString('utf8')\n xmlResult.contentType = response.headers['content-type']?.toString() ?? 'application/xml'\n } else {\n const errorResult = result as 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 {\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_object","import_payload_model","import_object","import_payload_model","import_object","import_object","import_payload_model","import_object","import_payload_model","import_object","import_payload_model","import_assert","import_payload_model","fillTemplate"]}