@xyo-network/huri 5.3.30 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -38,269 +38,6 @@ bun add {{name}}
38
38
 
39
39
  See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
40
40
 
41
- ## Reference
42
-
43
- ### packages
44
-
45
- ### protocol
46
-
47
- ### packages
48
-
49
- ### payload
50
-
51
- ### packages
52
-
53
- ### huri
54
-
55
- ### .temp-typedoc
56
-
57
- ### classes
58
-
59
- ### <a id="Huri"></a>Huri
60
-
61
- [**@xyo-network/huri**](#../README)
62
-
63
- ***
64
-
65
- ## Type Parameters
66
-
67
- ### T
68
-
69
- `T` *extends* `Payload` = `Payload`
70
-
71
- ## Constructors
72
-
73
- ### Constructor
74
-
75
- ```ts
76
- new Huri<T>(huri, __namedParameters?): Huri<T>;
77
- ```
78
-
79
- ### Parameters
80
-
81
- #### huri
82
-
83
- `string` \| `Huri`\<`Payload`\> \| `BrandedHash`
84
-
85
- #### \_\_namedParameters?
86
-
87
- [`HuriOptions`](#../interfaces/HuriOptions) = `{}`
88
-
89
- ### Returns
90
-
91
- `Huri`\<`T`\>
92
-
93
- ## Properties
94
-
95
- ### archive?
96
-
97
- ```ts
98
- optional archive?: string;
99
- ```
100
-
101
- ***
102
-
103
- ### archivist?
104
-
105
- ```ts
106
- optional archivist?: string | BrandedAddress;
107
- ```
108
-
109
- ***
110
-
111
- ### hash
112
-
113
- ```ts
114
- hash: BrandedHash;
115
- ```
116
-
117
- ***
118
-
119
- ### originalHref
120
-
121
- ```ts
122
- originalHref: string;
123
- ```
124
-
125
- ***
126
-
127
- ### protocol?
128
-
129
- ```ts
130
- optional protocol?: string;
131
- ```
132
-
133
- ***
134
-
135
- ### token?
136
-
137
- ```ts
138
- optional token?: string;
139
- ```
140
-
141
- ## Accessors
142
-
143
- ### href
144
-
145
- ### Get Signature
146
-
147
- ```ts
148
- get href(): string;
149
- ```
150
-
151
- #### Returns
152
-
153
- `string`
154
-
155
- ## Methods
156
-
157
- ### fetch()
158
-
159
- ```ts
160
- static fetch<T>(huri): Promise<T | undefined>;
161
- ```
162
-
163
- ### Type Parameters
164
-
165
- #### T
166
-
167
- `T` *extends* `Payload` = `Payload`
168
-
169
- ### Parameters
170
-
171
- #### huri
172
-
173
- `Huri`
174
-
175
- ### Returns
176
-
177
- `Promise`\<`T` \| `undefined`\>
178
-
179
- ***
180
-
181
- ### isHuri()
182
-
183
- ```ts
184
- static isHuri(value): Huri<Payload> | undefined;
185
- ```
186
-
187
- ### Parameters
188
-
189
- #### value
190
-
191
- `unknown`
192
-
193
- ### Returns
194
-
195
- `Huri`\<`Payload`\> \| `undefined`
196
-
197
- ***
198
-
199
- ### fetch()
200
-
201
- ```ts
202
- fetch(): Promise<T | undefined>;
203
- ```
204
-
205
- ### Returns
206
-
207
- `Promise`\<`T` \| `undefined`\>
208
-
209
- ***
210
-
211
- ### toString()
212
-
213
- ```ts
214
- toString(): string;
215
- ```
216
-
217
- ### Returns
218
-
219
- `string`
220
-
221
- ### interfaces
222
-
223
- ### <a id="FetchedPayload"></a>FetchedPayload
224
-
225
- [**@xyo-network/huri**](#../README)
226
-
227
- ***
228
-
229
- ## Type Parameters
230
-
231
- ### T
232
-
233
- `T` *extends* `Payload` = `Payload`
234
-
235
- ## Properties
236
-
237
- ### huri?
238
-
239
- ```ts
240
- optional huri?: Huri<Payload>;
241
- ```
242
-
243
- ***
244
-
245
- ### payload
246
-
247
- ```ts
248
- payload: T;
249
- ```
250
-
251
- ### <a id="HuriOptions"></a>HuriOptions
252
-
253
- [**@xyo-network/huri**](#../README)
254
-
255
- ***
256
-
257
- ## Properties
258
-
259
- ### archivistUri?
260
-
261
- ```ts
262
- optional archivistUri?: string;
263
- ```
264
-
265
- ***
266
-
267
- ### token?
268
-
269
- ```ts
270
- optional token?: string;
271
- ```
272
-
273
- ### type-aliases
274
-
275
- ### <a id="HuriFetchFunction"></a>HuriFetchFunction
276
-
277
- [**@xyo-network/huri**](#../README)
278
-
279
- ***
280
-
281
- ```ts
282
- type HuriFetchFunction = (huri) => Promise<Payload | undefined>;
283
- ```
284
-
285
- ## Parameters
286
-
287
- ### huri
288
-
289
- [`Huri`](#../classes/Huri)
290
-
291
- ## Returns
292
-
293
- `Promise`\<`Payload` \| `undefined`\>
294
-
295
- ### <a id="ObjectCategory"></a>ObjectCategory
296
-
297
- [**@xyo-network/huri**](#../README)
298
-
299
- ***
300
-
301
- ```ts
302
- type ObjectCategory = "block" | "payload";
303
- ```
304
41
 
305
42
 
306
43
  [logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
@@ -1 +1 @@
1
- {"version":3,"file":"Huri.d.ts","sourceRoot":"","sources":["../../src/Huri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAA;AAEhD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAY5E,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IACzD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,EAAE,CAAC,CAAA;CACX;AAED,qBAAa,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,OAAO,CAAC,MAAM,CAAO;gBAET,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAE,WAAgB;IAiCjF,IAAI,IAAI,WAaP;WAEY,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKnF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;IAM5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAWxB,OAAO,CAAC,MAAM,CAAC,aAAa;IAYtB,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIrC,QAAQ;IAIR,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"Huri.d.ts","sourceRoot":"","sources":["../../src/Huri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAA;AAEhD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAY5E,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IACzD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,EAAE,CAAC,CAAA;CACX;AAED,qBAAa,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,OAAO,CAAC,MAAM,CAAO;gBAET,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAE,WAAgB;IAiCjF,IAAI,IAAI,WAaP;WAEY,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAMnF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;IAM5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAWxB,OAAO,CAAC,MAAM,CAAC,aAAa;IAYtB,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIrC,QAAQ;IAIR,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,aAAa;CAUtB"}
@@ -1,7 +1,7 @@
1
1
  // src/Huri.ts
2
2
  import {
3
3
  assertEx,
4
- axiosJson,
4
+ fetchJson,
5
5
  isDefined,
6
6
  isHash,
7
7
  isString
@@ -49,8 +49,9 @@ var Huri = class _Huri {
49
49
  return parts.join("/");
50
50
  }
51
51
  static async fetch(huri) {
52
- const AuthHeader = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : void 0;
53
- return (await axiosJson.get(huri.href, { headers: AuthHeader })).data;
52
+ const headers = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : void 0;
53
+ const response = await fetchJson(huri.href, { headers });
54
+ return response.data ?? void 0;
54
55
  }
55
56
  static isHuri(value) {
56
57
  if (typeof value === "object") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Huri.ts"],"sourcesContent":["import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n axiosJson,\n isDefined, isHash, isString,\n} from '@xylabs/sdk-js'\nimport { AddressValue } from '@xyo-network/account'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport type ObjectCategory = 'block' | 'payload'\n\nexport type HuriFetchFunction = (huri: Huri) => Promise<Payload | undefined>\n\n/*\n Valid Huri:\n\n [<protocol>://][<archivist>/[<archive>/]]<hash>\n\n defaults:\n protocol: https\n archivist: api.archivist.xyo.network\n*/\n\nexport interface HuriOptions {\n archivistUri?: string\n token?: string\n}\n\nexport interface FetchedPayload<T extends Payload = Payload> {\n huri?: Huri\n payload: T\n}\n\nexport class Huri<T extends Payload = Payload> {\n archive?: string\n archivist?: Address | string\n hash: Hash\n originalHref: string\n protocol?: string\n token?: string\n\n private isHuri = true\n\n constructor(huri: Hash | Huri | string, { archivistUri, token }: HuriOptions = {}) {\n const huriString\n = Huri.isHuri(huri)?.href\n ?? (typeof huri === 'string'\n ? (huri as string)\n : huri instanceof ArrayBuffer\n ? new AddressValue(huri).hex\n : huri.href)\n this.originalHref = huriString\n\n const protocol = Huri.parseProtocol(huriString)\n this.protocol = protocol ?? 'https'\n\n const path = assertEx(Huri.parsePath(huriString), () => 'Missing path')\n this.hash = assertEx(this.parsePath(path, protocol !== undefined), () => 'Missing hash') as Hash\n\n assertEx(isHash(this.hash), () => `Invalid hash [${this.hash}]`)\n\n // if archivistUri sent, overwrite protocol and archivist\n if (isString(archivistUri)) {\n const archivistUriParts = archivistUri.split('://')\n this.protocol = archivistUriParts[0]\n this.archivist = archivistUriParts[1]\n }\n\n this.token = token\n\n this.validateParse()\n }\n\n /*\n The full href or the hash\n */\n get href() {\n const parts: string[] = []\n if (isDefined(this.protocol)) {\n parts.push(`${this.protocol}:/`)\n }\n if (isDefined(this.archive)) {\n parts.push(`${this.archive}`)\n }\n if (isDefined(this.archivist)) {\n parts.push(`${this.archivist}`)\n }\n parts.push(this.hash)\n return parts.join('/')\n }\n\n static async fetch<T extends Payload = Payload>(huri: Huri): Promise<T | undefined> {\n const AuthHeader = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : undefined\n return (await axiosJson.get<T>(huri.href, { headers: AuthHeader })).data\n }\n\n static isHuri(value: unknown) {\n if (typeof value === 'object') {\n return (value as Huri).isHuri ? (value as Huri) : undefined\n }\n }\n\n private static parsePath(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid format [${huri}]`)\n if (protocolSplit.length === 1) {\n return huri\n }\n if (protocolSplit.length === 2) {\n return protocolSplit[1]\n }\n }\n\n private static parseProtocol(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid second protocol [${protocolSplit[2]}]`)\n const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined\n if (isString(rawProtocol)) {\n const protocolParts = rawProtocol?.split(':')\n assertEx(protocolParts.length === 2, () => `Invalid protocol format [${rawProtocol}]`)\n assertEx(protocolParts[1].length === 0, () => `Invalid protocol format (post :) [${rawProtocol}]`)\n return protocolParts.shift()\n }\n }\n\n async fetch(): Promise<T | undefined> {\n return await Huri.fetch<T>(this)\n }\n\n toString() {\n return this.href\n }\n\n private parsePath(path: string, hasProtocol: boolean) {\n const pathParts = path.split('/')\n\n // if the protocol was found, then there is not allowed to be a leading /\n assertEx(!(hasProtocol && pathParts[0].length === 0), () => 'Invalid protocol separator')\n\n // remove leading '/' if needed\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n pathParts[0].length === 0 ? pathParts.shift() : null\n\n // hash is assumed to be the last part\n const hash = assertEx(pathParts.pop(), () => 'No hash specified')\n\n // archivist is assumed to be the first part\n this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network'\n\n // the archive is whatever is left\n this.archive = pathParts.pop()\n\n // after we pull off all the path parts, there should be nothing left\n assertEx(pathParts.length === 0, () => 'Too many path parts')\n\n return hash\n }\n\n private validateParse() {\n // the archivist should not be zero length\n assertEx(this.archivist?.length !== 0, () => 'Invalid archivist length')\n\n // the archivist should not be zero length (can be undefined)\n assertEx(this.archive?.length !== 0, () => 'Invalid archive length')\n\n // the archive should not be set if the archivist is not set\n assertEx(!(isString(this.archive) && !isString(this.archivist)), () => 'If specifying archive, archivist is also required')\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Huri.ts"],"sourcesContent":["import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n fetchJson,\n isDefined, isHash, isString,\n} from '@xylabs/sdk-js'\nimport { AddressValue } from '@xyo-network/account'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport type ObjectCategory = 'block' | 'payload'\n\nexport type HuriFetchFunction = (huri: Huri) => Promise<Payload | undefined>\n\n/*\n Valid Huri:\n\n [<protocol>://][<archivist>/[<archive>/]]<hash>\n\n defaults:\n protocol: https\n archivist: api.archivist.xyo.network\n*/\n\nexport interface HuriOptions {\n archivistUri?: string\n token?: string\n}\n\nexport interface FetchedPayload<T extends Payload = Payload> {\n huri?: Huri\n payload: T\n}\n\nexport class Huri<T extends Payload = Payload> {\n archive?: string\n archivist?: Address | string\n hash: Hash\n originalHref: string\n protocol?: string\n token?: string\n\n private isHuri = true\n\n constructor(huri: Hash | Huri | string, { archivistUri, token }: HuriOptions = {}) {\n const huriString\n = Huri.isHuri(huri)?.href\n ?? (typeof huri === 'string'\n ? (huri as string)\n : huri instanceof ArrayBuffer\n ? new AddressValue(huri).hex\n : huri.href)\n this.originalHref = huriString\n\n const protocol = Huri.parseProtocol(huriString)\n this.protocol = protocol ?? 'https'\n\n const path = assertEx(Huri.parsePath(huriString), () => 'Missing path')\n this.hash = assertEx(this.parsePath(path, protocol !== undefined), () => 'Missing hash') as Hash\n\n assertEx(isHash(this.hash), () => `Invalid hash [${this.hash}]`)\n\n // if archivistUri sent, overwrite protocol and archivist\n if (isString(archivistUri)) {\n const archivistUriParts = archivistUri.split('://')\n this.protocol = archivistUriParts[0]\n this.archivist = archivistUriParts[1]\n }\n\n this.token = token\n\n this.validateParse()\n }\n\n /*\n The full href or the hash\n */\n get href() {\n const parts: string[] = []\n if (isDefined(this.protocol)) {\n parts.push(`${this.protocol}:/`)\n }\n if (isDefined(this.archive)) {\n parts.push(`${this.archive}`)\n }\n if (isDefined(this.archivist)) {\n parts.push(`${this.archivist}`)\n }\n parts.push(this.hash)\n return parts.join('/')\n }\n\n static async fetch<T extends Payload = Payload>(huri: Huri): Promise<T | undefined> {\n const headers = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : undefined\n const response = await fetchJson<T>(huri.href, { headers })\n return response.data ?? undefined\n }\n\n static isHuri(value: unknown) {\n if (typeof value === 'object') {\n return (value as Huri).isHuri ? (value as Huri) : undefined\n }\n }\n\n private static parsePath(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid format [${huri}]`)\n if (protocolSplit.length === 1) {\n return huri\n }\n if (protocolSplit.length === 2) {\n return protocolSplit[1]\n }\n }\n\n private static parseProtocol(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid second protocol [${protocolSplit[2]}]`)\n const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined\n if (isString(rawProtocol)) {\n const protocolParts = rawProtocol?.split(':')\n assertEx(protocolParts.length === 2, () => `Invalid protocol format [${rawProtocol}]`)\n assertEx(protocolParts[1].length === 0, () => `Invalid protocol format (post :) [${rawProtocol}]`)\n return protocolParts.shift()\n }\n }\n\n async fetch(): Promise<T | undefined> {\n return await Huri.fetch<T>(this)\n }\n\n toString() {\n return this.href\n }\n\n private parsePath(path: string, hasProtocol: boolean) {\n const pathParts = path.split('/')\n\n // if the protocol was found, then there is not allowed to be a leading /\n assertEx(!(hasProtocol && pathParts[0].length === 0), () => 'Invalid protocol separator')\n\n // remove leading '/' if needed\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n pathParts[0].length === 0 ? pathParts.shift() : null\n\n // hash is assumed to be the last part\n const hash = assertEx(pathParts.pop(), () => 'No hash specified')\n\n // archivist is assumed to be the first part\n this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network'\n\n // the archive is whatever is left\n this.archive = pathParts.pop()\n\n // after we pull off all the path parts, there should be nothing left\n assertEx(pathParts.length === 0, () => 'Too many path parts')\n\n return hash\n }\n\n private validateParse() {\n // the archivist should not be zero length\n assertEx(this.archivist?.length !== 0, () => 'Invalid archivist length')\n\n // the archivist should not be zero length (can be undefined)\n assertEx(this.archive?.length !== 0, () => 'Invalid archive length')\n\n // the archive should not be set if the archivist is not set\n assertEx(!(isString(this.archive) && !isString(this.archivist)), () => 'If specifying archive, archivist is also required')\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Huri.d.ts","sourceRoot":"","sources":["../../src/Huri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAA;AAEhD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAY5E,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IACzD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,EAAE,CAAC,CAAA;CACX;AAED,qBAAa,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,OAAO,CAAC,MAAM,CAAO;gBAET,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAE,WAAgB;IAiCjF,IAAI,IAAI,WAaP;WAEY,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKnF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;IAM5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAWxB,OAAO,CAAC,MAAM,CAAC,aAAa;IAYtB,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIrC,QAAQ;IAIR,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"Huri.d.ts","sourceRoot":"","sources":["../../src/Huri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAA;AAEhD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAY5E,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IACzD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,EAAE,CAAC,CAAA;CACX;AAED,qBAAa,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,OAAO,CAAC,MAAM,CAAO;gBAET,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAE,WAAgB;IAiCjF,IAAI,IAAI,WAaP;WAEY,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAMnF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;IAM5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAWxB,OAAO,CAAC,MAAM,CAAC,aAAa;IAYtB,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIrC,QAAQ;IAIR,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,aAAa;CAUtB"}
@@ -1,7 +1,7 @@
1
1
  // src/Huri.ts
2
2
  import {
3
3
  assertEx,
4
- axiosJson,
4
+ fetchJson,
5
5
  isDefined,
6
6
  isHash,
7
7
  isString
@@ -49,8 +49,9 @@ var Huri = class _Huri {
49
49
  return parts.join("/");
50
50
  }
51
51
  static async fetch(huri) {
52
- const AuthHeader = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : void 0;
53
- return (await axiosJson.get(huri.href, { headers: AuthHeader })).data;
52
+ const headers = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : void 0;
53
+ const response = await fetchJson(huri.href, { headers });
54
+ return response.data ?? void 0;
54
55
  }
55
56
  static isHuri(value) {
56
57
  if (typeof value === "object") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Huri.ts"],"sourcesContent":["import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n axiosJson,\n isDefined, isHash, isString,\n} from '@xylabs/sdk-js'\nimport { AddressValue } from '@xyo-network/account'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport type ObjectCategory = 'block' | 'payload'\n\nexport type HuriFetchFunction = (huri: Huri) => Promise<Payload | undefined>\n\n/*\n Valid Huri:\n\n [<protocol>://][<archivist>/[<archive>/]]<hash>\n\n defaults:\n protocol: https\n archivist: api.archivist.xyo.network\n*/\n\nexport interface HuriOptions {\n archivistUri?: string\n token?: string\n}\n\nexport interface FetchedPayload<T extends Payload = Payload> {\n huri?: Huri\n payload: T\n}\n\nexport class Huri<T extends Payload = Payload> {\n archive?: string\n archivist?: Address | string\n hash: Hash\n originalHref: string\n protocol?: string\n token?: string\n\n private isHuri = true\n\n constructor(huri: Hash | Huri | string, { archivistUri, token }: HuriOptions = {}) {\n const huriString\n = Huri.isHuri(huri)?.href\n ?? (typeof huri === 'string'\n ? (huri as string)\n : huri instanceof ArrayBuffer\n ? new AddressValue(huri).hex\n : huri.href)\n this.originalHref = huriString\n\n const protocol = Huri.parseProtocol(huriString)\n this.protocol = protocol ?? 'https'\n\n const path = assertEx(Huri.parsePath(huriString), () => 'Missing path')\n this.hash = assertEx(this.parsePath(path, protocol !== undefined), () => 'Missing hash') as Hash\n\n assertEx(isHash(this.hash), () => `Invalid hash [${this.hash}]`)\n\n // if archivistUri sent, overwrite protocol and archivist\n if (isString(archivistUri)) {\n const archivistUriParts = archivistUri.split('://')\n this.protocol = archivistUriParts[0]\n this.archivist = archivistUriParts[1]\n }\n\n this.token = token\n\n this.validateParse()\n }\n\n /*\n The full href or the hash\n */\n get href() {\n const parts: string[] = []\n if (isDefined(this.protocol)) {\n parts.push(`${this.protocol}:/`)\n }\n if (isDefined(this.archive)) {\n parts.push(`${this.archive}`)\n }\n if (isDefined(this.archivist)) {\n parts.push(`${this.archivist}`)\n }\n parts.push(this.hash)\n return parts.join('/')\n }\n\n static async fetch<T extends Payload = Payload>(huri: Huri): Promise<T | undefined> {\n const AuthHeader = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : undefined\n return (await axiosJson.get<T>(huri.href, { headers: AuthHeader })).data\n }\n\n static isHuri(value: unknown) {\n if (typeof value === 'object') {\n return (value as Huri).isHuri ? (value as Huri) : undefined\n }\n }\n\n private static parsePath(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid format [${huri}]`)\n if (protocolSplit.length === 1) {\n return huri\n }\n if (protocolSplit.length === 2) {\n return protocolSplit[1]\n }\n }\n\n private static parseProtocol(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid second protocol [${protocolSplit[2]}]`)\n const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined\n if (isString(rawProtocol)) {\n const protocolParts = rawProtocol?.split(':')\n assertEx(protocolParts.length === 2, () => `Invalid protocol format [${rawProtocol}]`)\n assertEx(protocolParts[1].length === 0, () => `Invalid protocol format (post :) [${rawProtocol}]`)\n return protocolParts.shift()\n }\n }\n\n async fetch(): Promise<T | undefined> {\n return await Huri.fetch<T>(this)\n }\n\n toString() {\n return this.href\n }\n\n private parsePath(path: string, hasProtocol: boolean) {\n const pathParts = path.split('/')\n\n // if the protocol was found, then there is not allowed to be a leading /\n assertEx(!(hasProtocol && pathParts[0].length === 0), () => 'Invalid protocol separator')\n\n // remove leading '/' if needed\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n pathParts[0].length === 0 ? pathParts.shift() : null\n\n // hash is assumed to be the last part\n const hash = assertEx(pathParts.pop(), () => 'No hash specified')\n\n // archivist is assumed to be the first part\n this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network'\n\n // the archive is whatever is left\n this.archive = pathParts.pop()\n\n // after we pull off all the path parts, there should be nothing left\n assertEx(pathParts.length === 0, () => 'Too many path parts')\n\n return hash\n }\n\n private validateParse() {\n // the archivist should not be zero length\n assertEx(this.archivist?.length !== 0, () => 'Invalid archivist length')\n\n // the archivist should not be zero length (can be undefined)\n assertEx(this.archive?.length !== 0, () => 'Invalid archive length')\n\n // the archive should not be set if the archivist is not set\n assertEx(!(isString(this.archive) && !isString(this.archivist)), () => 'If specifying archive, archivist is also required')\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Huri.ts"],"sourcesContent":["import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n fetchJson,\n isDefined, isHash, isString,\n} from '@xylabs/sdk-js'\nimport { AddressValue } from '@xyo-network/account'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport type ObjectCategory = 'block' | 'payload'\n\nexport type HuriFetchFunction = (huri: Huri) => Promise<Payload | undefined>\n\n/*\n Valid Huri:\n\n [<protocol>://][<archivist>/[<archive>/]]<hash>\n\n defaults:\n protocol: https\n archivist: api.archivist.xyo.network\n*/\n\nexport interface HuriOptions {\n archivistUri?: string\n token?: string\n}\n\nexport interface FetchedPayload<T extends Payload = Payload> {\n huri?: Huri\n payload: T\n}\n\nexport class Huri<T extends Payload = Payload> {\n archive?: string\n archivist?: Address | string\n hash: Hash\n originalHref: string\n protocol?: string\n token?: string\n\n private isHuri = true\n\n constructor(huri: Hash | Huri | string, { archivistUri, token }: HuriOptions = {}) {\n const huriString\n = Huri.isHuri(huri)?.href\n ?? (typeof huri === 'string'\n ? (huri as string)\n : huri instanceof ArrayBuffer\n ? new AddressValue(huri).hex\n : huri.href)\n this.originalHref = huriString\n\n const protocol = Huri.parseProtocol(huriString)\n this.protocol = protocol ?? 'https'\n\n const path = assertEx(Huri.parsePath(huriString), () => 'Missing path')\n this.hash = assertEx(this.parsePath(path, protocol !== undefined), () => 'Missing hash') as Hash\n\n assertEx(isHash(this.hash), () => `Invalid hash [${this.hash}]`)\n\n // if archivistUri sent, overwrite protocol and archivist\n if (isString(archivistUri)) {\n const archivistUriParts = archivistUri.split('://')\n this.protocol = archivistUriParts[0]\n this.archivist = archivistUriParts[1]\n }\n\n this.token = token\n\n this.validateParse()\n }\n\n /*\n The full href or the hash\n */\n get href() {\n const parts: string[] = []\n if (isDefined(this.protocol)) {\n parts.push(`${this.protocol}:/`)\n }\n if (isDefined(this.archive)) {\n parts.push(`${this.archive}`)\n }\n if (isDefined(this.archivist)) {\n parts.push(`${this.archivist}`)\n }\n parts.push(this.hash)\n return parts.join('/')\n }\n\n static async fetch<T extends Payload = Payload>(huri: Huri): Promise<T | undefined> {\n const headers = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : undefined\n const response = await fetchJson<T>(huri.href, { headers })\n return response.data ?? undefined\n }\n\n static isHuri(value: unknown) {\n if (typeof value === 'object') {\n return (value as Huri).isHuri ? (value as Huri) : undefined\n }\n }\n\n private static parsePath(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid format [${huri}]`)\n if (protocolSplit.length === 1) {\n return huri\n }\n if (protocolSplit.length === 2) {\n return protocolSplit[1]\n }\n }\n\n private static parseProtocol(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid second protocol [${protocolSplit[2]}]`)\n const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined\n if (isString(rawProtocol)) {\n const protocolParts = rawProtocol?.split(':')\n assertEx(protocolParts.length === 2, () => `Invalid protocol format [${rawProtocol}]`)\n assertEx(protocolParts[1].length === 0, () => `Invalid protocol format (post :) [${rawProtocol}]`)\n return protocolParts.shift()\n }\n }\n\n async fetch(): Promise<T | undefined> {\n return await Huri.fetch<T>(this)\n }\n\n toString() {\n return this.href\n }\n\n private parsePath(path: string, hasProtocol: boolean) {\n const pathParts = path.split('/')\n\n // if the protocol was found, then there is not allowed to be a leading /\n assertEx(!(hasProtocol && pathParts[0].length === 0), () => 'Invalid protocol separator')\n\n // remove leading '/' if needed\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n pathParts[0].length === 0 ? pathParts.shift() : null\n\n // hash is assumed to be the last part\n const hash = assertEx(pathParts.pop(), () => 'No hash specified')\n\n // archivist is assumed to be the first part\n this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network'\n\n // the archive is whatever is left\n this.archive = pathParts.pop()\n\n // after we pull off all the path parts, there should be nothing left\n assertEx(pathParts.length === 0, () => 'Too many path parts')\n\n return hash\n }\n\n private validateParse() {\n // the archivist should not be zero length\n assertEx(this.archivist?.length !== 0, () => 'Invalid archivist length')\n\n // the archivist should not be zero length (can be undefined)\n assertEx(this.archive?.length !== 0, () => 'Invalid archive length')\n\n // the archive should not be set if the archivist is not set\n assertEx(!(isString(this.archive) && !isString(this.archivist)), () => 'If specifying archive, archivist is also required')\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Huri.d.ts","sourceRoot":"","sources":["../../src/Huri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAA;AAEhD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAY5E,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IACzD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,EAAE,CAAC,CAAA;CACX;AAED,qBAAa,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,OAAO,CAAC,MAAM,CAAO;gBAET,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAE,WAAgB;IAiCjF,IAAI,IAAI,WAaP;WAEY,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKnF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;IAM5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAWxB,OAAO,CAAC,MAAM,CAAC,aAAa;IAYtB,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIrC,QAAQ;IAIR,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"Huri.d.ts","sourceRoot":"","sources":["../../src/Huri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAA;AAEhD,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;AAY5E,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IACzD,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,EAAE,CAAC,CAAA;CACX;AAED,qBAAa,IAAI,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAC5B,IAAI,EAAE,IAAI,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,OAAO,CAAC,MAAM,CAAO;gBAET,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,GAAE,WAAgB;IAiCjF,IAAI,IAAI,WAaP;WAEY,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAMnF,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;IAM5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAWxB,OAAO,CAAC,MAAM,CAAC,aAAa;IAYtB,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIrC,QAAQ;IAIR,OAAO,CAAC,SAAS;IAyBjB,OAAO,CAAC,aAAa;CAUtB"}
@@ -1,7 +1,7 @@
1
1
  // src/Huri.ts
2
2
  import {
3
3
  assertEx,
4
- axiosJson,
4
+ fetchJson,
5
5
  isDefined,
6
6
  isHash,
7
7
  isString
@@ -49,8 +49,9 @@ var Huri = class _Huri {
49
49
  return parts.join("/");
50
50
  }
51
51
  static async fetch(huri) {
52
- const AuthHeader = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : void 0;
53
- return (await axiosJson.get(huri.href, { headers: AuthHeader })).data;
52
+ const headers = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : void 0;
53
+ const response = await fetchJson(huri.href, { headers });
54
+ return response.data ?? void 0;
54
55
  }
55
56
  static isHuri(value) {
56
57
  if (typeof value === "object") {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Huri.ts"],"sourcesContent":["import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n axiosJson,\n isDefined, isHash, isString,\n} from '@xylabs/sdk-js'\nimport { AddressValue } from '@xyo-network/account'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport type ObjectCategory = 'block' | 'payload'\n\nexport type HuriFetchFunction = (huri: Huri) => Promise<Payload | undefined>\n\n/*\n Valid Huri:\n\n [<protocol>://][<archivist>/[<archive>/]]<hash>\n\n defaults:\n protocol: https\n archivist: api.archivist.xyo.network\n*/\n\nexport interface HuriOptions {\n archivistUri?: string\n token?: string\n}\n\nexport interface FetchedPayload<T extends Payload = Payload> {\n huri?: Huri\n payload: T\n}\n\nexport class Huri<T extends Payload = Payload> {\n archive?: string\n archivist?: Address | string\n hash: Hash\n originalHref: string\n protocol?: string\n token?: string\n\n private isHuri = true\n\n constructor(huri: Hash | Huri | string, { archivistUri, token }: HuriOptions = {}) {\n const huriString\n = Huri.isHuri(huri)?.href\n ?? (typeof huri === 'string'\n ? (huri as string)\n : huri instanceof ArrayBuffer\n ? new AddressValue(huri).hex\n : huri.href)\n this.originalHref = huriString\n\n const protocol = Huri.parseProtocol(huriString)\n this.protocol = protocol ?? 'https'\n\n const path = assertEx(Huri.parsePath(huriString), () => 'Missing path')\n this.hash = assertEx(this.parsePath(path, protocol !== undefined), () => 'Missing hash') as Hash\n\n assertEx(isHash(this.hash), () => `Invalid hash [${this.hash}]`)\n\n // if archivistUri sent, overwrite protocol and archivist\n if (isString(archivistUri)) {\n const archivistUriParts = archivistUri.split('://')\n this.protocol = archivistUriParts[0]\n this.archivist = archivistUriParts[1]\n }\n\n this.token = token\n\n this.validateParse()\n }\n\n /*\n The full href or the hash\n */\n get href() {\n const parts: string[] = []\n if (isDefined(this.protocol)) {\n parts.push(`${this.protocol}:/`)\n }\n if (isDefined(this.archive)) {\n parts.push(`${this.archive}`)\n }\n if (isDefined(this.archivist)) {\n parts.push(`${this.archivist}`)\n }\n parts.push(this.hash)\n return parts.join('/')\n }\n\n static async fetch<T extends Payload = Payload>(huri: Huri): Promise<T | undefined> {\n const AuthHeader = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : undefined\n return (await axiosJson.get<T>(huri.href, { headers: AuthHeader })).data\n }\n\n static isHuri(value: unknown) {\n if (typeof value === 'object') {\n return (value as Huri).isHuri ? (value as Huri) : undefined\n }\n }\n\n private static parsePath(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid format [${huri}]`)\n if (protocolSplit.length === 1) {\n return huri\n }\n if (protocolSplit.length === 2) {\n return protocolSplit[1]\n }\n }\n\n private static parseProtocol(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid second protocol [${protocolSplit[2]}]`)\n const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined\n if (isString(rawProtocol)) {\n const protocolParts = rawProtocol?.split(':')\n assertEx(protocolParts.length === 2, () => `Invalid protocol format [${rawProtocol}]`)\n assertEx(protocolParts[1].length === 0, () => `Invalid protocol format (post :) [${rawProtocol}]`)\n return protocolParts.shift()\n }\n }\n\n async fetch(): Promise<T | undefined> {\n return await Huri.fetch<T>(this)\n }\n\n toString() {\n return this.href\n }\n\n private parsePath(path: string, hasProtocol: boolean) {\n const pathParts = path.split('/')\n\n // if the protocol was found, then there is not allowed to be a leading /\n assertEx(!(hasProtocol && pathParts[0].length === 0), () => 'Invalid protocol separator')\n\n // remove leading '/' if needed\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n pathParts[0].length === 0 ? pathParts.shift() : null\n\n // hash is assumed to be the last part\n const hash = assertEx(pathParts.pop(), () => 'No hash specified')\n\n // archivist is assumed to be the first part\n this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network'\n\n // the archive is whatever is left\n this.archive = pathParts.pop()\n\n // after we pull off all the path parts, there should be nothing left\n assertEx(pathParts.length === 0, () => 'Too many path parts')\n\n return hash\n }\n\n private validateParse() {\n // the archivist should not be zero length\n assertEx(this.archivist?.length !== 0, () => 'Invalid archivist length')\n\n // the archivist should not be zero length (can be undefined)\n assertEx(this.archive?.length !== 0, () => 'Invalid archive length')\n\n // the archive should not be set if the archivist is not set\n assertEx(!(isString(this.archive) && !isString(this.archivist)), () => 'If specifying archive, archivist is also required')\n }\n}\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAAW;AAAA,EAAQ;AAAA,OACd;AACP,SAAS,oBAAoB;AA2BtB,IAAM,OAAN,MAAM,MAAkC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEQ,SAAS;AAAA,EAEjB,YAAY,MAA4B,EAAE,cAAc,MAAM,IAAiB,CAAC,GAAG;AACjF,UAAM,aACF,MAAK,OAAO,IAAI,GAAG,SACf,OAAO,SAAS,WACf,OACD,gBAAgB,cACd,IAAI,aAAa,IAAI,EAAE,MACvB,KAAK;AACf,SAAK,eAAe;AAEpB,UAAM,WAAW,MAAK,cAAc,UAAU;AAC9C,SAAK,WAAW,YAAY;AAE5B,UAAM,OAAO,SAAS,MAAK,UAAU,UAAU,GAAG,MAAM,cAAc;AACtE,SAAK,OAAO,SAAS,KAAK,UAAU,MAAM,aAAa,MAAS,GAAG,MAAM,cAAc;AAEvF,aAAS,OAAO,KAAK,IAAI,GAAG,MAAM,iBAAiB,KAAK,IAAI,GAAG;AAG/D,QAAI,SAAS,YAAY,GAAG;AAC1B,YAAM,oBAAoB,aAAa,MAAM,KAAK;AAClD,WAAK,WAAW,kBAAkB,CAAC;AACnC,WAAK,YAAY,kBAAkB,CAAC;AAAA,IACtC;AAEA,SAAK,QAAQ;AAEb,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAO;AACT,UAAM,QAAkB,CAAC;AACzB,QAAI,UAAU,KAAK,QAAQ,GAAG;AAC5B,YAAM,KAAK,GAAG,KAAK,QAAQ,IAAI;AAAA,IACjC;AACA,QAAI,UAAU,KAAK,OAAO,GAAG;AAC3B,YAAM,KAAK,GAAG,KAAK,OAAO,EAAE;AAAA,IAC9B;AACA,QAAI,UAAU,KAAK,SAAS,GAAG;AAC7B,YAAM,KAAK,GAAG,KAAK,SAAS,EAAE;AAAA,IAChC;AACA,UAAM,KAAK,KAAK,IAAI;AACpB,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AAAA,EAEA,aAAa,MAAmC,MAAoC;AAClF,UAAM,aAAa,UAAU,KAAK,KAAK,IAAI,EAAE,eAAe,UAAU,KAAK,KAAK,GAAG,IAAI;AACvF,YAAQ,MAAM,UAAU,IAAO,KAAK,MAAM,EAAE,SAAS,WAAW,CAAC,GAAG;AAAA,EACtE;AAAA,EAEA,OAAO,OAAO,OAAgB;AAC5B,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAQ,MAAe,SAAU,QAAiB;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,OAAe,UAAU,MAAc;AACrC,UAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,aAAS,cAAc,UAAU,GAAG,MAAM,mBAAmB,IAAI,GAAG;AACpE,QAAI,cAAc,WAAW,GAAG;AAC9B,aAAO;AAAA,IACT;AACA,QAAI,cAAc,WAAW,GAAG;AAC9B,aAAO,cAAc,CAAC;AAAA,IACxB;AAAA,EACF;AAAA,EAEA,OAAe,cAAc,MAAc;AACzC,UAAM,gBAAgB,KAAK,MAAM,IAAI;AACrC,aAAS,cAAc,UAAU,GAAG,MAAM,4BAA4B,cAAc,CAAC,CAAC,GAAG;AACzF,UAAM,cAAc,cAAc,WAAW,IAAI,cAAc,MAAM,IAAI;AACzE,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,gBAAgB,aAAa,MAAM,GAAG;AAC5C,eAAS,cAAc,WAAW,GAAG,MAAM,4BAA4B,WAAW,GAAG;AACrF,eAAS,cAAc,CAAC,EAAE,WAAW,GAAG,MAAM,qCAAqC,WAAW,GAAG;AACjG,aAAO,cAAc,MAAM;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAM,QAAgC;AACpC,WAAO,MAAM,MAAK,MAAS,IAAI;AAAA,EACjC;AAAA,EAEA,WAAW;AACT,WAAO,KAAK;AAAA,EACd;AAAA,EAEQ,UAAU,MAAc,aAAsB;AACpD,UAAM,YAAY,KAAK,MAAM,GAAG;AAGhC,aAAS,EAAE,eAAe,UAAU,CAAC,EAAE,WAAW,IAAI,MAAM,4BAA4B;AAIxF,cAAU,CAAC,EAAE,WAAW,IAAI,UAAU,MAAM,IAAI;AAGhD,UAAM,OAAO,SAAS,UAAU,IAAI,GAAG,MAAM,mBAAmB;AAGhE,SAAK,YAAY,UAAU,MAAM,KAAK;AAGtC,SAAK,UAAU,UAAU,IAAI;AAG7B,aAAS,UAAU,WAAW,GAAG,MAAM,qBAAqB;AAE5D,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAgB;AAEtB,aAAS,KAAK,WAAW,WAAW,GAAG,MAAM,0BAA0B;AAGvE,aAAS,KAAK,SAAS,WAAW,GAAG,MAAM,wBAAwB;AAGnE,aAAS,EAAE,SAAS,KAAK,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,mDAAmD;AAAA,EAC5H;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/Huri.ts"],"sourcesContent":["import type { Address, Hash } from '@xylabs/sdk-js'\nimport {\n assertEx,\n fetchJson,\n isDefined, isHash, isString,\n} from '@xylabs/sdk-js'\nimport { AddressValue } from '@xyo-network/account'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport type ObjectCategory = 'block' | 'payload'\n\nexport type HuriFetchFunction = (huri: Huri) => Promise<Payload | undefined>\n\n/*\n Valid Huri:\n\n [<protocol>://][<archivist>/[<archive>/]]<hash>\n\n defaults:\n protocol: https\n archivist: api.archivist.xyo.network\n*/\n\nexport interface HuriOptions {\n archivistUri?: string\n token?: string\n}\n\nexport interface FetchedPayload<T extends Payload = Payload> {\n huri?: Huri\n payload: T\n}\n\nexport class Huri<T extends Payload = Payload> {\n archive?: string\n archivist?: Address | string\n hash: Hash\n originalHref: string\n protocol?: string\n token?: string\n\n private isHuri = true\n\n constructor(huri: Hash | Huri | string, { archivistUri, token }: HuriOptions = {}) {\n const huriString\n = Huri.isHuri(huri)?.href\n ?? (typeof huri === 'string'\n ? (huri as string)\n : huri instanceof ArrayBuffer\n ? new AddressValue(huri).hex\n : huri.href)\n this.originalHref = huriString\n\n const protocol = Huri.parseProtocol(huriString)\n this.protocol = protocol ?? 'https'\n\n const path = assertEx(Huri.parsePath(huriString), () => 'Missing path')\n this.hash = assertEx(this.parsePath(path, protocol !== undefined), () => 'Missing hash') as Hash\n\n assertEx(isHash(this.hash), () => `Invalid hash [${this.hash}]`)\n\n // if archivistUri sent, overwrite protocol and archivist\n if (isString(archivistUri)) {\n const archivistUriParts = archivistUri.split('://')\n this.protocol = archivistUriParts[0]\n this.archivist = archivistUriParts[1]\n }\n\n this.token = token\n\n this.validateParse()\n }\n\n /*\n The full href or the hash\n */\n get href() {\n const parts: string[] = []\n if (isDefined(this.protocol)) {\n parts.push(`${this.protocol}:/`)\n }\n if (isDefined(this.archive)) {\n parts.push(`${this.archive}`)\n }\n if (isDefined(this.archivist)) {\n parts.push(`${this.archivist}`)\n }\n parts.push(this.hash)\n return parts.join('/')\n }\n\n static async fetch<T extends Payload = Payload>(huri: Huri): Promise<T | undefined> {\n const headers = isDefined(huri.token) ? { Authorization: `Bearer ${huri.token}` } : undefined\n const response = await fetchJson<T>(huri.href, { headers })\n return response.data ?? undefined\n }\n\n static isHuri(value: unknown) {\n if (typeof value === 'object') {\n return (value as Huri).isHuri ? (value as Huri) : undefined\n }\n }\n\n private static parsePath(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid format [${huri}]`)\n if (protocolSplit.length === 1) {\n return huri\n }\n if (protocolSplit.length === 2) {\n return protocolSplit[1]\n }\n }\n\n private static parseProtocol(huri: string) {\n const protocolSplit = huri.split('//')\n assertEx(protocolSplit.length <= 2, () => `Invalid second protocol [${protocolSplit[2]}]`)\n const rawProtocol = protocolSplit.length === 2 ? protocolSplit.shift() : undefined\n if (isString(rawProtocol)) {\n const protocolParts = rawProtocol?.split(':')\n assertEx(protocolParts.length === 2, () => `Invalid protocol format [${rawProtocol}]`)\n assertEx(protocolParts[1].length === 0, () => `Invalid protocol format (post :) [${rawProtocol}]`)\n return protocolParts.shift()\n }\n }\n\n async fetch(): Promise<T | undefined> {\n return await Huri.fetch<T>(this)\n }\n\n toString() {\n return this.href\n }\n\n private parsePath(path: string, hasProtocol: boolean) {\n const pathParts = path.split('/')\n\n // if the protocol was found, then there is not allowed to be a leading /\n assertEx(!(hasProtocol && pathParts[0].length === 0), () => 'Invalid protocol separator')\n\n // remove leading '/' if needed\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n pathParts[0].length === 0 ? pathParts.shift() : null\n\n // hash is assumed to be the last part\n const hash = assertEx(pathParts.pop(), () => 'No hash specified')\n\n // archivist is assumed to be the first part\n this.archivist = pathParts.shift() ?? 'api.archivist.xyo.network'\n\n // the archive is whatever is left\n this.archive = pathParts.pop()\n\n // after we pull off all the path parts, there should be nothing left\n assertEx(pathParts.length === 0, () => 'Too many path parts')\n\n return hash\n }\n\n private validateParse() {\n // the archivist should not be zero length\n assertEx(this.archivist?.length !== 0, () => 'Invalid archivist length')\n\n // the archivist should not be zero length (can be undefined)\n assertEx(this.archive?.length !== 0, () => 'Invalid archive length')\n\n // the archive should not be set if the archivist is not set\n assertEx(!(isString(this.archive) && !isString(this.archivist)), () => 'If specifying archive, archivist is also required')\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/huri",
3
- "version": "5.3.30",
3
+ "version": "5.4.0",
4
4
  "description": "Primary SDK for using XYO Protocol 2.0",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -22,12 +22,10 @@
22
22
  "exports": {
23
23
  ".": {
24
24
  "types": "./dist/neutral/index.d.ts",
25
- "import": "./dist/neutral/index.mjs",
26
25
  "default": "./dist/neutral/index.mjs"
27
26
  },
28
27
  "./package.json": "./package.json"
29
28
  },
30
- "types": "dist/neutral/index.d.ts",
31
29
  "files": [
32
30
  "dist",
33
31
  "!**/*.bench.*",
@@ -36,38 +34,36 @@
36
34
  "README.md"
37
35
  ],
38
36
  "dependencies": {
39
- "@xyo-network/account": "~5.3.30",
40
- "@xyo-network/payload-model": "~5.3.30"
37
+ "@xyo-network/account": "~5.4.0",
38
+ "@xyo-network/payload-model": "~5.4.0"
41
39
  },
42
40
  "devDependencies": {
43
41
  "@opentelemetry/api": "^1.9.1",
44
- "@types/node": "^25.5.2",
45
- "@xylabs/sdk-js": "^5.0.95",
46
- "@xylabs/ts-scripts-common": "~7.8.7",
47
- "@xylabs/ts-scripts-pnpm": "~7.8.7",
48
- "@xylabs/tsconfig": "~7.8.7",
49
- "@xylabs/vitest-extended": "~5.0.95",
50
- "@xylabs/vitest-matchers": "~5.0.95",
51
- "axios": "^1.14.0",
42
+ "@types/node": "^25.6.0",
43
+ "@xylabs/sdk-js": "^5.0.97",
44
+ "@xylabs/toolchain": "~7.10.8",
45
+ "@xylabs/tsconfig": "~7.10.8",
46
+ "@xylabs/vitest-extended": "~5.0.97",
47
+ "@xylabs/vitest-matchers": "~5.0.97",
52
48
  "esbuild": "^0.28.0",
53
49
  "ethers": "^6.16.0",
54
50
  "pako": "~2.1.0",
55
51
  "typescript": "~5.9.3",
56
- "vite": "^8.0.5",
57
- "vitest": "~4.1.2",
52
+ "vite": "^8.0.8",
53
+ "vitest": "~4.1.4",
58
54
  "zod": "^4.3.6",
59
- "@xyo-network/account-model": "~5.3.30",
60
- "@xyo-network/data": "~5.3.30",
61
- "@xyo-network/elliptic": "~5.3.30",
62
- "@xyo-network/wasm": "~5.3.30",
63
- "@xyo-network/previous-hash-store-model": "~5.3.30"
55
+ "@xyo-network/account-model": "~5.4.0",
56
+ "@xyo-network/data": "~5.4.0",
57
+ "@xyo-network/previous-hash-store-model": "~5.4.0",
58
+ "@xyo-network/elliptic": "~5.4.0",
59
+ "@xyo-network/wasm": "~5.4.0"
64
60
  },
65
61
  "peerDependencies": {
66
- "@xylabs/sdk-js": "^5",
67
- "@xyo-network/account-model": "~5.3.30",
68
- "@xyo-network/data": "~5.3.30",
69
- "@xyo-network/elliptic": "~5.3.30",
70
- "@xyo-network/previous-hash-store-model": "~5.3.30"
62
+ "@xylabs/sdk-js": "^5.0.97",
63
+ "@xyo-network/account-model": "~5.4",
64
+ "@xyo-network/data": "~5.4",
65
+ "@xyo-network/elliptic": "~5.4",
66
+ "@xyo-network/previous-hash-store-model": "~5.4"
71
67
  },
72
68
  "publishConfig": {
73
69
  "access": "public"