@xyo-network/domain-payload-plugin 3.18.3 → 3.18.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,15 @@
1
- // src/Plugin.ts
2
- import { createPayloadPlugin } from "@xyo-network/payload-plugin";
1
+ // src/Payload.ts
2
+ import { isPayloadOfSchemaType } from "@xyo-network/payload-model";
3
3
 
4
4
  // src/Schema.ts
5
5
  var DomainSchema = "network.xyo.domain";
6
6
 
7
+ // src/Payload.ts
8
+ var isDomainPayload = isPayloadOfSchemaType(DomainSchema);
9
+
10
+ // src/Plugin.ts
11
+ import { createPayloadPlugin } from "@xyo-network/payload-plugin";
12
+
7
13
  // src/Template.ts
8
14
  var domainConfigTemplate = () => ({
9
15
  aliases: { "com.example.id": { huri: "" } },
@@ -29,7 +35,9 @@ var domainConfigTemplate = () => ({
29
35
  // src/Wrapper.ts
30
36
  import { axios } from "@xylabs/axios";
31
37
  import { Base } from "@xylabs/base";
38
+ import { isHash } from "@xylabs/hex";
32
39
  import { isBrowser } from "@xylabs/platform";
40
+ import { isString } from "@xylabs/typeof";
33
41
  import { DnsRecordType, domainResolve } from "@xyo-network/dns";
34
42
  import { Huri } from "@xyo-network/huri";
35
43
  import { PayloadBuilder } from "@xyo-network/payload-builder";
@@ -49,10 +57,10 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
49
57
  static async discoverDNSEntry(domain) {
50
58
  try {
51
59
  const hash = (await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT))?.Answer?.[0]?.data;
52
- if (hash) {
60
+ if (isHash(hash)) {
53
61
  const huri = new Huri(hash);
54
62
  const payload = await huri.fetch();
55
- if (payload) {
63
+ if (isDomainPayload(payload)) {
56
64
  return new _DomainPayloadWrapper(payload);
57
65
  }
58
66
  }
@@ -61,7 +69,7 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
61
69
  }
62
70
  }
63
71
  static async discoverRootFile(domain, proxy) {
64
- return isBrowser() || proxy ? await this.discoverRootFileWithProxy(domain, proxy) : await this.discoverRootFileDirect(domain);
72
+ return isBrowser() || isString(proxy) ? await this.discoverRootFileWithProxy(domain, proxy) : await this.discoverRootFileDirect(domain);
65
73
  }
66
74
  static async discoverRootFileDirect(domain) {
67
75
  try {
@@ -109,7 +117,7 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
109
117
  return (await this.getNetwork(hash))?.nodes?.find((payload) => payload.type === "archivist" ? payload : void 0)?.uri;
110
118
  }
111
119
  async getNetwork(hash) {
112
- return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0];
120
+ return isHash(hash) ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0];
113
121
  }
114
122
  };
115
123
 
@@ -124,6 +132,7 @@ export {
124
132
  DomainPayloadWrapper,
125
133
  DomainSchema,
126
134
  DomainPayloadPlugin as default,
127
- domainConfigTemplate
135
+ domainConfigTemplate,
136
+ isDomainPayload
128
137
  };
129
138
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import type { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport type { DomainPayload } from './Payload.ts'\nimport { DomainSchema } from './Schema.ts'\nimport { domainConfigTemplate } from './Template.ts'\nimport { DomainPayloadWrapper } from './Wrapper.ts'\n\nexport const DomainPayloadPlugin = () =>\n createPayloadPlugin<DomainPayload>({\n schema: DomainSchema,\n template: domainConfigTemplate,\n wrap: (payload: Payload) => DomainPayloadWrapper.wrap(payload as DomainPayload),\n })\n","export const DomainSchema = 'network.xyo.domain' as const\nexport type DomainSchema = typeof DomainSchema\n","import type { DomainPayload } from './Payload.ts'\nimport { DomainSchema } from './Schema.ts'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: { 'com.example.id': { huri: '' } },\n networks: [\n {\n name: '',\n nodes: [\n {\n name: '',\n schema: 'network.xyo.network.node',\n slug: '',\n type: 'archivist',\n uri: '',\n },\n ],\n schema: 'network.xyo.network',\n slug: '',\n },\n ],\n schema: DomainSchema,\n})\n","import { axios } from '@xylabs/axios'\nimport { Base } from '@xylabs/base'\nimport type { Hash } from '@xylabs/hex'\nimport { isBrowser } from '@xylabs/platform'\nimport type { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport type { FetchedPayload, HuriOptions } from '@xyo-network/huri'\nimport { Huri } from '@xyo-network/huri'\nimport type { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport type { AxiosError } from 'axios'\n\nimport type { Alias, DomainPayload } from './Payload.ts'\n\nexport interface FetchedAlias extends FetchedPayload {\n alias: Alias\n}\n\nexport class DomainPayloadWrapper<T extends DomainPayload = DomainPayload> extends PayloadWrapper<T> {\n aliases?: FetchedAlias[] | null\n\n static async discover(reverseDomainName: string, proxy?: string) {\n const parts = reverseDomainName.split('.')\n for (let i = 2; i <= parts.length; i++) {\n const domainToCheck = parts.filter((_, index) => index < i).reverse().join('.')\n const result = (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\n if (result) {\n return result\n }\n }\n }\n\n static async discoverDNSEntry(domain: string) {\n try {\n const hash = (await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT))?.Answer?.[0]?.data\n if (hash) {\n const huri = new Huri(hash)\n const payload = (await huri.fetch()) as DomainPayload\n if (payload) {\n return new DomainPayloadWrapper(payload)\n }\n }\n } catch {\n Base.defaultLogger?.log(`DomainConfig dns reading error entry not found [${domain}]`)\n }\n }\n\n static async discoverRootFile(domain: string, proxy?: string) {\n return isBrowser() || proxy ? await this.discoverRootFileWithProxy(domain, proxy) : await this.discoverRootFileDirect(domain)\n }\n\n static async discoverRootFileDirect(domain: string) {\n try {\n const config = (await axios.get<DomainPayload>(`https://${domain}/xyo-config.json`)).data\n return new DomainPayloadWrapper(config)\n } catch {\n console.log(`DomainConfig root file not found [${domain}]`)\n }\n }\n\n static async discoverRootFileWithProxy(domain: string, proxy = 'https://api.archivist.xyo.network/domain') {\n try {\n const requestUrl = `${proxy}/${domain.split('.').reverse().join('.')}`\n const config = (await axios.get<ApiEnvelope<DomainPayload>>(requestUrl)).data.data\n return new DomainPayloadWrapper(config)\n } catch (ex) {\n const error = ex as AxiosError\n console.log(`DomainConfig root file not found using proxy [${domain}] [${error.code}]`)\n }\n }\n\n async fetch(networkSlug?: Hash) {\n await this.fetchAliases(networkSlug)\n }\n\n async fetchAliases(networkSlug?: Hash) {\n // set it to null to signify fetch ran\n this.aliases = null\n\n const archivistUri = await this.findArchivistUri(networkSlug)\n if (this.payload.aliases) {\n const fetchedAliases = await Promise.all(\n Object.entries(this.payload.aliases ?? {}).map(([, alias]) => {\n return this.fetchAlias(alias, { archivistUri })\n }),\n )\n // cast to FetchedPayload[] after we filter out any null/undefined entries\n this.aliases = fetchedAliases.filter(Boolean) as FetchedAlias[]\n }\n }\n\n private async fetchAlias(alias: Alias, huriOptions?: HuriOptions): Promise<FetchedAlias | null> {\n const huri = new Huri(alias.huri, huriOptions)\n const payload = await huri.fetch()\n return payload\n ? {\n alias, huri, payload: payload,\n }\n : null\n }\n\n private async findArchivistUri(hash?: Hash): Promise<string | undefined> {\n return (await this.getNetwork(hash))?.nodes?.find(payload => (payload.type === 'archivist' ? payload : undefined))?.uri\n }\n\n private async getNetwork(hash?: Hash): Promise<NetworkPayload | undefined> {\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Payload.ts","../../src/Schema.ts","../../src/Plugin.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import type { NetworkPayload } from '@xyo-network/network'\nimport { isPayloadOfSchemaType, type Payload } from '@xyo-network/payload-model'\n\nimport { DomainSchema } from './Schema.ts'\n\nexport interface Alias {\n /** @field huri to the aliased payload */\n huri: string\n /** @field canonical name (ex. network.xyo.example) */\n name?: string\n}\n\nexport type DomainPayload = Payload<{\n /** @field Additional config files [huri] [out] */\n additional?: string[]\n /** @field Values associated with this domain [out] */\n aliases?: Record<string, Alias>\n /** @field Known networks [out] */\n networks?: NetworkPayload[]\n}, DomainSchema>\n\nexport const isDomainPayload = isPayloadOfSchemaType<DomainPayload>(DomainSchema)\n","export const DomainSchema = 'network.xyo.domain' as const\nexport type DomainSchema = typeof DomainSchema\n","import type { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport type { DomainPayload } from './Payload.ts'\nimport { DomainSchema } from './Schema.ts'\nimport { domainConfigTemplate } from './Template.ts'\nimport { DomainPayloadWrapper } from './Wrapper.ts'\n\nexport const DomainPayloadPlugin = () =>\n createPayloadPlugin<DomainPayload>({\n schema: DomainSchema,\n template: domainConfigTemplate,\n wrap: (payload: Payload) => DomainPayloadWrapper.wrap(payload as DomainPayload),\n })\n","import type { DomainPayload } from './Payload.ts'\nimport { DomainSchema } from './Schema.ts'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: { 'com.example.id': { huri: '' } },\n networks: [\n {\n name: '',\n nodes: [\n {\n name: '',\n schema: 'network.xyo.network.node',\n slug: '',\n type: 'archivist',\n uri: '',\n },\n ],\n schema: 'network.xyo.network',\n slug: '',\n },\n ],\n schema: DomainSchema,\n})\n","import { axios } from '@xylabs/axios'\nimport { Base } from '@xylabs/base'\nimport { type Hash, isHash } from '@xylabs/hex'\nimport { isBrowser } from '@xylabs/platform'\nimport { isString } from '@xylabs/typeof'\nimport type { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport type { FetchedPayload, HuriOptions } from '@xyo-network/huri'\nimport { Huri } from '@xyo-network/huri'\nimport type { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\nimport type { AxiosError } from 'axios'\n\nimport {\n type Alias, type DomainPayload, isDomainPayload,\n} from './Payload.ts'\n\nexport interface FetchedAlias extends FetchedPayload {\n alias: Alias\n}\n\nexport class DomainPayloadWrapper<T extends DomainPayload = DomainPayload> extends PayloadWrapper<T> {\n aliases?: FetchedAlias[] | null\n\n static async discover(reverseDomainName: string, proxy?: string) {\n const parts = reverseDomainName.split('.')\n for (let i = 2; i <= parts.length; i++) {\n const domainToCheck = parts.filter((_, index) => index < i).reverse().join('.')\n const result = (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\n if (result) {\n return result\n }\n }\n }\n\n static async discoverDNSEntry(domain: string) {\n try {\n const hash = (await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT))?.Answer?.[0]?.data\n if (isHash(hash)) {\n const huri = new Huri(hash)\n const payload = (await huri.fetch())\n if (isDomainPayload(payload)) {\n return new DomainPayloadWrapper(payload)\n }\n }\n } catch {\n Base.defaultLogger?.log(`DomainConfig dns reading error entry not found [${domain}]`)\n }\n }\n\n static async discoverRootFile(domain: string, proxy?: string) {\n return isBrowser() || isString(proxy) ? await this.discoverRootFileWithProxy(domain, proxy) : await this.discoverRootFileDirect(domain)\n }\n\n static async discoverRootFileDirect(domain: string) {\n try {\n const config = (await axios.get<DomainPayload>(`https://${domain}/xyo-config.json`)).data\n return new DomainPayloadWrapper(config)\n } catch {\n console.log(`DomainConfig root file not found [${domain}]`)\n }\n }\n\n static async discoverRootFileWithProxy(domain: string, proxy = 'https://api.archivist.xyo.network/domain') {\n try {\n const requestUrl = `${proxy}/${domain.split('.').reverse().join('.')}`\n const config = (await axios.get<ApiEnvelope<DomainPayload>>(requestUrl)).data.data\n return new DomainPayloadWrapper(config)\n } catch (ex) {\n const error = ex as AxiosError\n console.log(`DomainConfig root file not found using proxy [${domain}] [${error.code}]`)\n }\n }\n\n async fetch(networkSlug?: Hash) {\n await this.fetchAliases(networkSlug)\n }\n\n async fetchAliases(networkSlug?: Hash) {\n // set it to null to signify fetch ran\n this.aliases = null\n\n const archivistUri = await this.findArchivistUri(networkSlug)\n if (this.payload.aliases) {\n const fetchedAliases = await Promise.all(\n Object.entries(this.payload.aliases ?? {}).map(([, alias]) => {\n return this.fetchAlias(alias, { archivistUri })\n }),\n )\n // cast to FetchedPayload[] after we filter out any null/undefined entries\n this.aliases = fetchedAliases.filter(Boolean) as FetchedAlias[]\n }\n }\n\n private async fetchAlias(alias: Alias, huriOptions?: HuriOptions): Promise<FetchedAlias | null> {\n const huri = new Huri(alias.huri, huriOptions)\n const payload = await huri.fetch()\n return payload\n ? {\n alias, huri, payload: payload,\n }\n : null\n }\n\n private async findArchivistUri(hash?: Hash): Promise<string | undefined> {\n return (await this.getNetwork(hash))?.nodes?.find(payload => (payload.type === 'archivist' ? payload : undefined))?.uri\n }\n\n private async getNetwork(hash?: Hash): Promise<NetworkPayload | undefined> {\n return isHash(hash) ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import type { NetworkPayload } from '@xyo-network/network';
2
- import type { Payload } from '@xyo-network/payload-model';
3
- import type { DomainSchema } from './Schema.ts';
2
+ import { type Payload } from '@xyo-network/payload-model';
3
+ import { DomainSchema } from './Schema.ts';
4
4
  export interface Alias {
5
5
  /** @field huri to the aliased payload */
6
6
  huri: string;
@@ -15,4 +15,5 @@ export type DomainPayload = Payload<{
15
15
  /** @field Known networks [out] */
16
16
  networks?: NetworkPayload[];
17
17
  }, DomainSchema>;
18
+ export declare const isDomainPayload: (x?: unknown | null) => x is DomainPayload;
18
19
  //# sourceMappingURL=Payload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,WAAW,KAAK;IACpB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;IAClC,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC/B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;CAC5B,EAAE,YAAY,CAAC,CAAA"}
1
+ {"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,WAAW,KAAK;IACpB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;IAClC,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC/B,kCAAkC;IAClC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;CAC5B,EAAE,YAAY,CAAC,CAAA;AAEhB,eAAO,MAAM,eAAe,4CAAqD,CAAA"}
@@ -1,7 +1,7 @@
1
- import type { Hash } from '@xylabs/hex';
1
+ import { type Hash } from '@xylabs/hex';
2
2
  import type { FetchedPayload } from '@xyo-network/huri';
3
3
  import { PayloadWrapper } from '@xyo-network/payload-wrapper';
4
- import type { Alias, DomainPayload } from './Payload.ts';
4
+ import { type Alias, type DomainPayload } from './Payload.ts';
5
5
  export interface FetchedAlias extends FetchedPayload {
6
6
  alias: Alias;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Wrapper.d.ts","sourceRoot":"","sources":["../../src/Wrapper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAIvC,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAA;AAIpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAG7D,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAExD,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,KAAK,EAAE,KAAK,CAAA;CACb;AAED,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClG,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;WAElB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;WAWlD,gBAAgB,CAAC,MAAM,EAAE,MAAM;WAe/B,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;WAI/C,sBAAsB,CAAC,MAAM,EAAE,MAAM;WASrC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAA6C;IAWnG,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI;IAIxB,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI;YAgBvB,UAAU;YAUV,gBAAgB;YAIhB,UAAU;CAGzB"}
1
+ {"version":3,"file":"Wrapper.d.ts","sourceRoot":"","sources":["../../src/Wrapper.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAU,MAAM,aAAa,CAAA;AAK/C,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAA;AAIpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAG7D,OAAO,EACL,KAAK,KAAK,EAAE,KAAK,aAAa,EAC/B,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,KAAK,EAAE,KAAK,CAAA;CACb;AAED,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IAClG,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAA;WAElB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;WAWlD,gBAAgB,CAAC,MAAM,EAAE,MAAM;WAe/B,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;WAI/C,sBAAsB,CAAC,MAAM,EAAE,MAAM;WASrC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAA6C;IAWnG,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI;IAIxB,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI;YAgBvB,UAAU;YAUV,gBAAgB;YAIhB,UAAU;CAGzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/domain-payload-plugin",
3
- "version": "3.18.3",
3
+ "version": "3.18.5",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -29,23 +29,24 @@
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/types/index.d.ts",
31
31
  "dependencies": {
32
- "@xylabs/axios": "^4.11.14",
33
- "@xylabs/base": "^4.11.14",
34
- "@xylabs/hex": "^4.11.14",
35
- "@xylabs/platform": "^4.11.14",
36
- "@xyo-network/dns": "^3.18.3",
37
- "@xyo-network/huri": "^3.18.3",
38
- "@xyo-network/network": "^3.18.3",
39
- "@xyo-network/payload-builder": "^3.18.3",
40
- "@xyo-network/payload-model": "^3.18.3",
41
- "@xyo-network/payload-plugin": "^3.18.3",
42
- "@xyo-network/payload-wrapper": "^3.18.3"
32
+ "@xylabs/axios": "^4.11.16",
33
+ "@xylabs/base": "^4.11.16",
34
+ "@xylabs/hex": "^4.11.16",
35
+ "@xylabs/platform": "^4.11.16",
36
+ "@xylabs/typeof": "^4.11.16",
37
+ "@xyo-network/dns": "^3.18.5",
38
+ "@xyo-network/huri": "^3.18.5",
39
+ "@xyo-network/network": "^3.18.5",
40
+ "@xyo-network/payload-builder": "^3.18.5",
41
+ "@xyo-network/payload-model": "^3.18.5",
42
+ "@xyo-network/payload-plugin": "^3.18.5",
43
+ "@xyo-network/payload-wrapper": "^3.18.5"
43
44
  },
44
45
  "devDependencies": {
45
46
  "@xylabs/ts-scripts-yarn3": "^6.5.8",
46
47
  "@xylabs/tsconfig": "^6.5.8",
47
- "@xylabs/vitest-extended": "^4.11.14",
48
- "@xyo-network/api-models": "^3.18.3",
48
+ "@xylabs/vitest-extended": "^4.11.16",
49
+ "@xyo-network/api-models": "^3.18.5",
49
50
  "axios": "^1.9.0",
50
51
  "typescript": "^5.8.3",
51
52
  "vitest": "^3.2.2"
package/src/Payload.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { NetworkPayload } from '@xyo-network/network'
2
- import type { Payload } from '@xyo-network/payload-model'
2
+ import { isPayloadOfSchemaType, type Payload } from '@xyo-network/payload-model'
3
3
 
4
- import type { DomainSchema } from './Schema.ts'
4
+ import { DomainSchema } from './Schema.ts'
5
5
 
6
6
  export interface Alias {
7
7
  /** @field huri to the aliased payload */
@@ -18,3 +18,5 @@ export type DomainPayload = Payload<{
18
18
  /** @field Known networks [out] */
19
19
  networks?: NetworkPayload[]
20
20
  }, DomainSchema>
21
+
22
+ export const isDomainPayload = isPayloadOfSchemaType<DomainPayload>(DomainSchema)
package/src/Wrapper.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import { axios } from '@xylabs/axios'
2
2
  import { Base } from '@xylabs/base'
3
- import type { Hash } from '@xylabs/hex'
3
+ import { type Hash, isHash } from '@xylabs/hex'
4
4
  import { isBrowser } from '@xylabs/platform'
5
+ import { isString } from '@xylabs/typeof'
5
6
  import type { ApiEnvelope } from '@xyo-network/api-models'
6
7
  import { DnsRecordType, domainResolve } from '@xyo-network/dns'
7
8
  import type { FetchedPayload, HuriOptions } from '@xyo-network/huri'
@@ -11,7 +12,9 @@ import { PayloadBuilder } from '@xyo-network/payload-builder'
11
12
  import { PayloadWrapper } from '@xyo-network/payload-wrapper'
12
13
  import type { AxiosError } from 'axios'
13
14
 
14
- import type { Alias, DomainPayload } from './Payload.ts'
15
+ import {
16
+ type Alias, type DomainPayload, isDomainPayload,
17
+ } from './Payload.ts'
15
18
 
16
19
  export interface FetchedAlias extends FetchedPayload {
17
20
  alias: Alias
@@ -34,10 +37,10 @@ export class DomainPayloadWrapper<T extends DomainPayload = DomainPayload> exten
34
37
  static async discoverDNSEntry(domain: string) {
35
38
  try {
36
39
  const hash = (await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT))?.Answer?.[0]?.data
37
- if (hash) {
40
+ if (isHash(hash)) {
38
41
  const huri = new Huri(hash)
39
- const payload = (await huri.fetch()) as DomainPayload
40
- if (payload) {
42
+ const payload = (await huri.fetch())
43
+ if (isDomainPayload(payload)) {
41
44
  return new DomainPayloadWrapper(payload)
42
45
  }
43
46
  }
@@ -47,7 +50,7 @@ export class DomainPayloadWrapper<T extends DomainPayload = DomainPayload> exten
47
50
  }
48
51
 
49
52
  static async discoverRootFile(domain: string, proxy?: string) {
50
- return isBrowser() || proxy ? await this.discoverRootFileWithProxy(domain, proxy) : await this.discoverRootFileDirect(domain)
53
+ return isBrowser() || isString(proxy) ? await this.discoverRootFileWithProxy(domain, proxy) : await this.discoverRootFileDirect(domain)
51
54
  }
52
55
 
53
56
  static async discoverRootFileDirect(domain: string) {
@@ -105,6 +108,6 @@ export class DomainPayloadWrapper<T extends DomainPayload = DomainPayload> exten
105
108
  }
106
109
 
107
110
  private async getNetwork(hash?: Hash): Promise<NetworkPayload | undefined> {
108
- return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]
111
+ return isHash(hash) ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]
109
112
  }
110
113
  }