@xyo-network/domain-payload-plugin 2.103.9 → 2.104.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.
@@ -152,6 +152,6 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends import_payload_wr
152
152
  var DomainPayloadPlugin = /* @__PURE__ */ __name(() => (0, import_payload_plugin.createPayloadPlugin)({
153
153
  schema: DomainSchema,
154
154
  template: domainConfigTemplate,
155
- wrap: (payload) => DomainPayloadWrapper.wrap(payload)
155
+ wrap: /* @__PURE__ */ __name((payload) => DomainPayloadWrapper.wrap(payload), "wrap")
156
156
  }), "DomainPayloadPlugin");
157
157
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["export * from './Payload'\nexport { DomainPayloadPlugin as default, DomainPayloadPlugin } from './Plugin'\nexport * from './Schema'\nexport * from './Template'\nexport * from './Wrapper'\n","import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["export * from './Payload'\nexport { DomainPayloadPlugin as default, DomainPayloadPlugin } from './Plugin'\nexport * from './Schema'\nexport * from './Template'\nexport * from './Wrapper'\n","import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
@@ -124,7 +124,7 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
124
124
  var DomainPayloadPlugin = /* @__PURE__ */ __name(() => createPayloadPlugin({
125
125
  schema: DomainSchema,
126
126
  template: domainConfigTemplate,
127
- wrap: (payload) => DomainPayloadWrapper.wrap(payload)
127
+ wrap: /* @__PURE__ */ __name((payload) => DomainPayloadWrapper.wrap(payload), "wrap")
128
128
  }), "DomainPayloadPlugin");
129
129
  export {
130
130
  DomainPayloadPlugin,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["createPayloadPlugin","DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","axios","reverse","isBrowser","DnsRecordType","domainResolve","Huri","PayloadBuilder","PayloadWrapper","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["createPayloadPlugin","DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","axios","reverse","isBrowser","DnsRecordType","domainResolve","Huri","PayloadBuilder","PayloadWrapper","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
@@ -152,6 +152,6 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends import_payload_wr
152
152
  var DomainPayloadPlugin = /* @__PURE__ */ __name(() => (0, import_payload_plugin.createPayloadPlugin)({
153
153
  schema: DomainSchema,
154
154
  template: domainConfigTemplate,
155
- wrap: (payload) => DomainPayloadWrapper.wrap(payload)
155
+ wrap: /* @__PURE__ */ __name((payload) => DomainPayloadWrapper.wrap(payload), "wrap")
156
156
  }), "DomainPayloadPlugin");
157
157
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["export * from './Payload'\nexport { DomainPayloadPlugin as default, DomainPayloadPlugin } from './Plugin'\nexport * from './Schema'\nexport * from './Template'\nexport * from './Wrapper'\n","import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["export * from './Payload'\nexport { DomainPayloadPlugin as default, DomainPayloadPlugin } from './Plugin'\nexport * from './Schema'\nexport * from './Template'\nexport * from './Wrapper'\n","import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
@@ -124,7 +124,7 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
124
124
  var DomainPayloadPlugin = /* @__PURE__ */ __name(() => createPayloadPlugin({
125
125
  schema: DomainSchema,
126
126
  template: domainConfigTemplate,
127
- wrap: (payload) => DomainPayloadWrapper.wrap(payload)
127
+ wrap: /* @__PURE__ */ __name((payload) => DomainPayloadWrapper.wrap(payload), "wrap")
128
128
  }), "DomainPayloadPlugin");
129
129
  export {
130
130
  DomainPayloadPlugin,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":";;;;AACA,SAASA,2BAA2B;;;ACA7B,IAAMC,eAA6B;;;ACEnC,IAAMC,uBAAuB,8BAAsB;EACxDC,SAAS;IACP,kBAAkB;MAChBC,MAAM;IACR;EACF;EACAC,UAAU;IACR;MACEC,MAAM;MACNC,OAAO;QACL;UACED,MAAM;UACNE,QAAQ;UACRC,MAAM;UACNC,MAAM;UACNC,KAAK;QACP;;MAEFH,QAAQ;MACRC,MAAM;IACR;;EAEFD,QAAQI;AACV,IAvBoC;;;ACHpC,SAASC,aAAyB;AAElC,SAASC,eAAe;AACxB,SAASC,iBAAiB;AAE1B,SAASC,eAAeC,qBAAqB;AAC7C,SAAyBC,YAAyB;AAElD,SAASC,sBAAsB;AAC/B,SAASC,sBAAsB;AAQxB,IAAMC,uBAAN,MAAMA,8BAAsEC,eAAAA;EAjBnF,OAiBmFA;;;EACjFC;EAEA,aAAaC,SAASC,mBAA2BC,OAAgB;AAC/D,UAAMC,QAAQF,kBAAkBG,MAAM,GAAA;AACtC,aAASC,IAAI,GAAGA,KAAKF,MAAMG,QAAQD,KAAK;AACtC,YAAME,gBAAgBC,QAAQL,MAAMM,OAAO,CAACC,GAAGC,UAAUA,QAAQN,CAAAA,CAAAA,EAAIO,KAAK,GAAA;AAC1E,aAAQ,MAAM,KAAKC,iBAAiBN,aAAAA,KAAoB,MAAM,KAAKO,iBAAiBP,eAAeL,KAAAA;IACrG;EACF;EAEA,aAAaW,iBAAiBE,QAAgB;AAC5C,QAAI;AACF,YAAMC,QAAQ,MAAMC,cAAc,QAAQF,MAAAA,IAAUG,cAAcC,GAAG,IAAIC,SAAS,CAAA,GAAIC;AACtF,UAAIL,MAAM;AACR,cAAMM,OAAO,IAAIC,KAAKP,IAAAA;AACtB,cAAMQ,UAAW,MAAMF,KAAKG,MAAK;AACjC,YAAID,SAAS;AACX,iBAAO,IAAI3B,sBAAqB2B,OAAAA;QAClC;MACF;IACF,QAAQ;AACNE,cAAQC,IAAI,mDAAmDZ,MAAAA,GAAS;IAC1E;EACF;EAEA,aAAaD,iBAAiBC,QAAgBb,OAAgB;AAC5D,WAAO0B,UAAAA,KAAe1B,QAAQ,MAAM,KAAK2B,0BAA0Bd,QAAQb,KAAAA,IAAS,MAAM,KAAK4B,uBAAuBf,MAAAA;EACxH;EAEA,aAAae,uBAAuBf,QAAgB;AAClD,QAAI;AACF,YAAMgB,UAAU,MAAMC,MAAMC,IAAmB,WAAWlB,MAAAA,kBAAwB,GAAGM;AACrF,aAAO,IAAIxB,sBAAqBkC,MAAAA;IAClC,QAAQ;AACNL,cAAQC,IAAI,qCAAqCZ,MAAAA,GAAS;IAC5D;EACF;EAEA,aAAac,0BAA0Bd,QAAgBb,QAAQ,4CAA4C;AACzG,QAAI;AACF,YAAMgC,aAAa,GAAGhC,KAAAA,IAASa,OAAOX,MAAM,GAAA,EAAKI,QAAO,EAAGI,KAAK,GAAA,CAAA;AAChE,YAAMmB,UAAU,MAAMC,MAAMC,IAAgCC,UAAAA,GAAab,KAAKA;AAC9E,aAAO,IAAIxB,sBAAqBkC,MAAAA;IAClC,SAASI,IAAI;AACX,YAAMC,QAAQD;AACdT,cAAQC,IAAI,iDAAiDZ,MAAAA,MAAYqB,MAAMC,IAAI,GAAG;IACxF;EACF;EAEA,MAAMZ,MAAMa,aAAoB;AAC9B,UAAM,KAAKC,aAAaD,WAAAA;EAC1B;EAEA,MAAMC,aAAaD,aAAoB;AAErC,SAAKvC,UAAU;AAEf,UAAMyC,eAAe,MAAM,KAAKC,iBAAiBH,WAAAA;AACjD,QAAI,KAAKd,QAAQzB,SAAS;AACxB,YAAM2C,iBAAiB,MAAMC,QAAQC,IACnCC,OAAOC,QAAQ,KAAKtB,QAAQzB,WAAW,CAAC,CAAA,EAAGgD,IAAI,CAAC,CAAA,EAAGC,KAAAA,MAAM;AACvD,eAAO,KAAKC,WAAWD,OAAO;UAAER;QAAa,CAAA;MAC/C,CAAA,CAAA;AAGF,WAAKzC,UAAU2C,eAAejC,OAAOyC,OAAAA;IACvC;EACF;EAEA,MAAcD,WAAWD,OAAcG,aAAyD;AAC9F,UAAM7B,OAAO,IAAIC,KAAKyB,MAAM1B,MAAM6B,WAAAA;AAClC,UAAM3B,UAAU,MAAMF,KAAKG,MAAK;AAChC,WAAOD,UAAU;MAAEwB;MAAO1B;MAAME;IAAiB,IAAI;EACvD;EAEA,MAAciB,iBAAiBzB,MAA0C;AACvE,YAAQ,MAAM,KAAKoC,WAAWpC,IAAAA,IAAQqC,OAAOC,KAAK,CAAC9B,YAAaA,QAAQ+B,SAAS,cAAc/B,UAAUgC,MAAAA,GAAaC;EACxH;EAEA,MAAcL,WAAWpC,MAAkD;AAEzE,WAAOA,OAAO,MAAM0C,eAAeC,eAAe,KAAKnC,QAAQoC,UAAU5C,IAAAA,IAAQ,KAAKQ,QAAQoC,WAAW,CAAA;EAC3G;AACF;;;AH7FO,IAAMC,sBAAsB,6BACjCC,oBAAmC;EACjCC,QAAQC;EACRC,UAAUC;EACVC,MAAM,CAACC,YAAqBC,qBAAqBF,KAAKC,OAAAA;AACxD,CAAA,GALiC;","names":["createPayloadPlugin","DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","axios","reverse","isBrowser","DnsRecordType","domainResolve","Huri","PayloadBuilder","PayloadWrapper","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["createPayloadPlugin","DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","axios","reverse","isBrowser","DnsRecordType","domainResolve","Huri","PayloadBuilder","PayloadWrapper","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
@@ -154,7 +154,7 @@ var DomainPayloadWrapper = _DomainPayloadWrapper;
154
154
  var DomainPayloadPlugin = /* @__PURE__ */ __name(() => (0, import_payload_plugin.createPayloadPlugin)({
155
155
  schema: DomainSchema,
156
156
  template: domainConfigTemplate,
157
- wrap: (payload) => DomainPayloadWrapper.wrap(payload)
157
+ wrap: /* @__PURE__ */ __name((payload) => DomainPayloadWrapper.wrap(payload), "wrap")
158
158
  }), "DomainPayloadPlugin");
159
159
  // Annotate the CommonJS export names for ESM import in node:
160
160
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["export * from './Payload'\nexport { DomainPayloadPlugin as default, DomainPayloadPlugin } from './Plugin'\nexport * from './Schema'\nexport * from './Template'\nexport * from './Wrapper'\n","import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["export * from './Payload'\nexport { DomainPayloadPlugin as default, DomainPayloadPlugin } from './Plugin'\nexport * from './Schema'\nexport * from './Template'\nexport * from './Wrapper'\n","import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
@@ -126,7 +126,7 @@ var DomainPayloadWrapper = _DomainPayloadWrapper;
126
126
  var DomainPayloadPlugin = /* @__PURE__ */ __name(() => createPayloadPlugin({
127
127
  schema: DomainSchema,
128
128
  template: domainConfigTemplate,
129
- wrap: (payload) => DomainPayloadWrapper.wrap(payload)
129
+ wrap: /* @__PURE__ */ __name((payload) => DomainPayloadWrapper.wrap(payload), "wrap")
130
130
  }), "DomainPayloadPlugin");
131
131
  export {
132
132
  DomainPayloadPlugin,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["createPayloadPlugin","DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","axios","reverse","isBrowser","DnsRecordType","domainResolve","Huri","PayloadBuilder","PayloadWrapper","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
1
+ {"version":3,"sources":["../../src/Plugin.ts","../../src/Schema.ts","../../src/Template.ts","../../src/Wrapper.ts"],"sourcesContent":["import { Payload } from '@xyo-network/payload-model'\nimport { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\nimport { domainConfigTemplate } from './Template'\nimport { DomainPayloadWrapper } from './Wrapper'\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 type DomainSchema = 'network.xyo.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.domain'\n","import { DomainPayload } from './Payload'\nimport { DomainSchema } from './Schema'\n\nexport const domainConfigTemplate = (): DomainPayload => ({\n aliases: {\n 'com.example.id': {\n huri: '',\n },\n },\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, AxiosError } from '@xylabs/axios'\nimport { Hash } from '@xylabs/hex'\nimport { reverse } from '@xylabs/lodash'\nimport { isBrowser } from '@xylabs/platform'\nimport { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { FetchedPayload, Huri, HuriOptions } from '@xyo-network/huri'\nimport { NetworkPayload } from '@xyo-network/network'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { PayloadWrapper } from '@xyo-network/payload-wrapper'\n\nimport { Alias, DomainPayload } from './Payload'\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 = reverse(parts.filter((_, index) => index < i)).join('.')\n return (await this.discoverDNSEntry(domainToCheck)) ?? (await this.discoverRootFile(domainToCheck, proxy))\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 console.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 ? { alias, huri, payload: payload } : 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 // eslint-disable-next-line unicorn/no-array-method-this-argument\n return hash ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0]\n }\n}\n"],"mappings":"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","names":["createPayloadPlugin","DomainSchema","domainConfigTemplate","aliases","huri","networks","name","nodes","schema","slug","type","uri","DomainSchema","axios","reverse","isBrowser","DnsRecordType","domainResolve","Huri","PayloadBuilder","PayloadWrapper","DomainPayloadWrapper","PayloadWrapper","aliases","discover","reverseDomainName","proxy","parts","split","i","length","domainToCheck","reverse","filter","_","index","join","discoverDNSEntry","discoverRootFile","domain","hash","domainResolve","DnsRecordType","TXT","Answer","data","huri","Huri","payload","fetch","console","log","isBrowser","discoverRootFileWithProxy","discoverRootFileDirect","config","axios","get","requestUrl","ex","error","code","networkSlug","fetchAliases","archivistUri","findArchivistUri","fetchedAliases","Promise","all","Object","entries","map","alias","fetchAlias","Boolean","huriOptions","getNetwork","nodes","find","type","undefined","uri","PayloadBuilder","findByDataHash","networks","DomainPayloadPlugin","createPayloadPlugin","schema","DomainSchema","template","domainConfigTemplate","wrap","payload","DomainPayloadWrapper"]}
package/package.json CHANGED
@@ -10,22 +10,22 @@
10
10
  "url": "https://github.com/XYOracleNetwork/plugins/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/axios": "^3.5.0",
14
- "@xylabs/hex": "^3.5.0",
15
- "@xylabs/lodash": "^3.5.0",
16
- "@xylabs/platform": "^3.5.0",
17
- "@xyo-network/api-models": "~2.103.9",
18
- "@xyo-network/dns": "~2.103.9",
19
- "@xyo-network/huri": "~2.103.9",
20
- "@xyo-network/network": "~2.103.9",
21
- "@xyo-network/payload-builder": "~2.103.9",
22
- "@xyo-network/payload-model": "~2.103.9",
23
- "@xyo-network/payload-plugin": "~2.103.9",
24
- "@xyo-network/payload-wrapper": "~2.103.9"
13
+ "@xylabs/axios": "^3.5.1",
14
+ "@xylabs/hex": "^3.5.1",
15
+ "@xylabs/lodash": "^3.5.1",
16
+ "@xylabs/platform": "^3.5.1",
17
+ "@xyo-network/api-models": "~2.104.1",
18
+ "@xyo-network/dns": "~2.104.1",
19
+ "@xyo-network/huri": "~2.104.1",
20
+ "@xyo-network/network": "~2.104.1",
21
+ "@xyo-network/payload-builder": "~2.104.1",
22
+ "@xyo-network/payload-model": "~2.104.1",
23
+ "@xyo-network/payload-plugin": "~2.104.1",
24
+ "@xyo-network/payload-wrapper": "~2.104.1"
25
25
  },
26
26
  "devDependencies": {
27
- "@xylabs/ts-scripts-yarn3": "^3.10.4",
28
- "@xylabs/tsconfig": "^3.10.4",
27
+ "@xylabs/ts-scripts-yarn3": "^3.11.2",
28
+ "@xylabs/tsconfig": "^3.11.2",
29
29
  "typescript": "^5.4.5"
30
30
  },
31
31
  "description": "Typescript/Javascript Plugins for XYO Platform",
@@ -67,6 +67,6 @@
67
67
  "url": "https://github.com/XYOracleNetwork/plugins.git"
68
68
  },
69
69
  "sideEffects": false,
70
- "version": "2.103.9",
70
+ "version": "2.104.1",
71
71
  "type": "module"
72
72
  }