@xyo-network/domain-payload-plugin 7.0.0 → 7.0.3

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 +1 @@
1
- {"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAI7B,eAAO,MAAM,QAAQ;;;iBAKnB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;iBAAiD,CAAA;AACjF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAElE;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;mBAA6C,CAAA;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE9D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAShC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEtE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA0E,CAAA;AACvG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE5D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiC,CAAA;AAC7D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoD,CAAA;AAChF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoD,CAAA"}
1
+ {"version":3,"file":"Payload.d.ts","sourceRoot":"","sources":["../../src/Payload.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAI7B,eAAO,MAAM,QAAQ;;;iBAKnB,CAAA;AACF,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;iBAAiD,CAAA;AACjF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAElE;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;mBAA6C,CAAA;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAS9D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAShC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEtE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA0E,CAAA;AACvG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE5D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiC,CAAA;AAC7D,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoD,CAAA;AAChF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAoD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"DomainSchemaResolver.d.ts","sourceRoot":"","sources":["../../../src/Resolution/DomainSchemaResolver.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAIvE,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAA;AAEtE,OAAO,KAAK,EACV,oBAAoB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,sBAAsB,EAC1F,MAAM,uBAAuB,CAAA;AAM9B,UAAU,cAAc;IACtB,yFAAyF;IACzF,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACrB;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAErF;AAMD;;;;;;GAMG;AACH,qBAAa,oBAAoB;IACzB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBhG,uFAAuF;cACvE,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;cAqBf,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAOrC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOxF,2FAA2F;cAC3E,cAAc,CAC5B,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,yBAAyB,EACpC,OAAO,EAAE,cAAc,EACvB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;cA+BhB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;cA2ChB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAkDjC"}
1
+ {"version":3,"file":"DomainSchemaResolver.d.ts","sourceRoot":"","sources":["../../../src/Resolution/DomainSchemaResolver.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAIvE,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAA;AAEtE,OAAO,KAAK,EACV,oBAAoB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,sBAAsB,EAC1F,MAAM,uBAAuB,CAAA;AAM9B,UAAU,cAAc;IACtB,yFAAyF;IACzF,cAAc,EAAE,OAAO,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACrB;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,sBAAsB,CAAA;CAC/B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAErF;AAMD;;;;;;GAMG;AACH,qBAAa,oBAAoB;IACzB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBhG,uFAAuF;cACvE,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;cAqBf,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,cAAc,EACvB,YAAY,CAAC,EAAE,kBAAkB,GAChC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAOrC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOxF,2FAA2F;cAC3E,cAAc,CAC5B,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,yBAAyB,EACpC,OAAO,EAAE,cAAc,EACvB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;cAgChB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;cA2ChB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;CAmDjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"XyoDnsRecords.d.ts","sourceRoot":"","sources":["../../../src/Resolution/XyoDnsRecords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAU,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yEAAyE;IACzE,YAAY,EAAE,IAAI,EAAE,CAAA;IACpB,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,qBAAqB,EAAE,GAAG,aAAa,CAoCnF"}
1
+ {"version":3,"file":"XyoDnsRecords.d.ts","sourceRoot":"","sources":["../../../src/Resolution/XyoDnsRecords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAU,MAAM,gBAAgB,CAAA;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,yEAAyE;IACzE,YAAY,EAAE,IAAI,EAAE,CAAA;IACpB,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,qBAAqB,EAAE,GAAG,aAAa,CAoCnF"}
@@ -269,10 +269,10 @@ export declare class DomainPayloadWrapper<T extends DomainPayload | DomainConfig
269
269
  $id?: string | undefined;
270
270
  }> | undefined;
271
271
  }> | undefined>;
272
- fetch(networkSlug?: Hash): Promise<void>;
273
- fetchAliases(networkSlug?: Hash): Promise<void>;
274
272
  private fetchAlias;
275
273
  private findArchivistUri;
276
274
  private getNetwork;
275
+ fetch(networkSlug?: Hash): Promise<void>;
276
+ fetchAliases(networkSlug?: Hash): Promise<void>;
277
277
  }
278
278
  //# sourceMappingURL=Wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Wrapper.d.ts","sourceRoot":"","sources":["../../src/Wrapper.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,IAAI,EAAU,MAAM,gBAAgB,CAAA;AAGlD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAA;AAIpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,OAAO,EACL,KAAK,KAAK,EAAE,KAAK,aAAa,EAC/B,MAAM,cAAc,CAAA;AAGrB,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,KAAK,EAAE,KAAK,CAAA;CACb;AAED,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,GAAG,mBAAmB,GAAG,aAAa,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACxH,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkB/B,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAO/C,sBAAsB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAcrC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAA6C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAanG,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":"AAIA,OAAO,EAAE,KAAK,IAAI,EAAU,MAAM,gBAAgB,CAAA;AAGlD,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAA;AAIpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,OAAO,EACL,KAAK,KAAK,EAAE,KAAK,aAAa,EAC/B,MAAM,cAAc,CAAA;AAGrB,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,KAAK,EAAE,KAAK,CAAA;CACb;AAED,qBAAa,oBAAoB,CAAC,CAAC,SAAS,aAAa,GAAG,mBAAmB,GAAG,aAAa,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACxH,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAkB/B,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAO/C,sBAAsB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAcrC,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAA6C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAa3F,UAAU;YAUV,gBAAgB;YAKhB,UAAU;IAIlB,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI;IAIxB,YAAY,CAAC,WAAW,CAAC,EAAE,IAAI;CAetC"}
@@ -33,15 +33,21 @@ var AliasZod = z.object({
33
33
  });
34
34
  var SchemaDefinitionZod = z.looseObject({ $id: z.optional(z.string()) });
35
35
  var SchemaMapEntryZod = z.union([z.string(), SchemaDefinitionZod]);
36
+ var stringZod = z.string();
37
+ var optionalStringArrayZod = z.optional(z.array(stringZod));
38
+ var optionalAliasRecordZod = z.optional(z.record(stringZod, AliasZod));
39
+ var networkPayloadZod = z.custom();
40
+ var optionalNetworkPayloadArrayZod = z.optional(z.array(networkPayloadZod));
41
+ var optionalSchemaMapEntryRecordZod = z.optional(z.record(stringZod, SchemaMapEntryZod));
36
42
  var DomainConfigFieldsZod = z.object({
37
43
  /** Additional config files [huri] [out] */
38
- additional: z.optional(z.array(z.string())),
44
+ additional: optionalStringArrayZod,
39
45
  /** Values associated with this domain [out] */
40
- aliases: z.optional(z.record(z.string(), AliasZod)),
46
+ aliases: optionalAliasRecordZod,
41
47
  /** Known networks [out] */
42
- networks: z.optional(z.array(z.custom())),
48
+ networks: optionalNetworkPayloadArrayZod,
43
49
  /** Official schemas published by this domain, keyed by schema name [out] */
44
- schemas: z.optional(z.record(z.string(), SchemaMapEntryZod))
50
+ schemas: optionalSchemaMapEntryRecordZod
45
51
  });
46
52
  var DomainPayloadZod = z.extend(PayloadZodOfSchema(DomainSchema), DomainConfigFieldsZod.shape);
47
53
  var isDomainPayload = zodIsFactory(DomainPayloadZod);
@@ -122,12 +128,13 @@ var SCHEMA_KEY_PREFIX = "schema.";
122
128
  function normalizeTxtData(data) {
123
129
  const trimmed = data.trim();
124
130
  if (trimmed.includes('"')) {
125
- return [...trimmed.matchAll(/"([^"]*)"/g)].map((match) => match[1]).join("") || trimmed;
131
+ const quotedParts = Array.from(trimmed.matchAll(/"([^"]*)"/g), (match) => match[1]);
132
+ return quotedParts.join("") || trimmed;
126
133
  }
127
134
  return trimmed;
128
135
  }
129
136
  function parseXyoTxtRecords(answers) {
130
- const entries = (answers ?? []).map((answer) => answer.data).filter((data) => typeof data === "string").map(normalizeTxtData).toSorted();
137
+ const entries = (answers ?? []).map((answer) => answer.data).filter((data) => typeof data === "string").map(normalizeTxtData).toSorted((left, right) => left.localeCompare(right));
131
138
  const records = { legacyHashes: [], schemas: {} };
132
139
  for (const entry of entries) {
133
140
  if (isHash(entry)) {
@@ -171,8 +178,8 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
171
178
  }
172
179
  static async discoverDNSEntry(domain) {
173
180
  try {
174
- const answers = (await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT))?.Answer;
175
- const records = parseXyoTxtRecords(answers);
181
+ const { Answer } = await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT) ?? {};
182
+ const records = parseXyoTxtRecords(Answer);
176
183
  const candidates = [records.config, ...records.legacyHashes].filter((element) => isString(element));
177
184
  for (const candidate of candidates) {
178
185
  const huri = new Huri(candidate);
@@ -213,21 +220,6 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
213
220
  console.log(`DomainConfig root file not found using proxy [${domain}] [${status}]`);
214
221
  }
215
222
  }
216
- async fetch(networkSlug) {
217
- await this.fetchAliases(networkSlug);
218
- }
219
- async fetchAliases(networkSlug) {
220
- this.aliases = null;
221
- const archivistUri = await this.findArchivistUri(networkSlug);
222
- if (this.payload.aliases) {
223
- const fetchedAliases = await Promise.all(
224
- Object.entries(this.payload.aliases ?? {}).map(([, alias]) => {
225
- return this.fetchAlias(alias, { archivistUri });
226
- })
227
- );
228
- this.aliases = fetchedAliases.filter(Boolean);
229
- }
230
- }
231
223
  async fetchAlias(alias, huriOptions) {
232
224
  const huri = new Huri(alias.huri, huriOptions);
233
225
  const payload = await huri.fetch();
@@ -238,11 +230,27 @@ var DomainPayloadWrapper = class _DomainPayloadWrapper extends PayloadWrapper {
238
230
  } : null;
239
231
  }
240
232
  async findArchivistUri(hash) {
241
- return (await this.getNetwork(hash))?.nodes?.find((payload) => payload.type === "archivist" ? payload : void 0)?.uri;
233
+ const network = await this.getNetwork(hash);
234
+ return network?.nodes?.find((payload) => payload.type === "archivist" ? payload : void 0)?.uri;
242
235
  }
243
236
  async getNetwork(hash) {
244
237
  return isHash2(hash) ? await PayloadBuilder.findByDataHash(this.payload.networks, hash) : this.payload.networks?.[0];
245
238
  }
239
+ async fetch(networkSlug) {
240
+ await this.fetchAliases(networkSlug);
241
+ }
242
+ async fetchAliases(networkSlug) {
243
+ this.aliases = null;
244
+ const archivistUri = await this.findArchivistUri(networkSlug);
245
+ if (this.payload.aliases) {
246
+ const fetchedAliases = await Promise.all(
247
+ Object.values(this.payload.aliases ?? {}).map((alias) => {
248
+ return this.fetchAlias(alias, { archivistUri });
249
+ })
250
+ );
251
+ this.aliases = fetchedAliases.filter(Boolean);
252
+ }
253
+ }
246
254
  };
247
255
 
248
256
  // src/Plugin.ts
@@ -354,11 +362,12 @@ var DomainSchemaResolver = class {
354
362
  if (isString2(hash)) {
355
363
  const payload = await this.fetchSchemaPayloadByHash(hash, schemaName, context, fields);
356
364
  if (payload) {
365
+ const huri = new Huri2(hash);
357
366
  return {
358
367
  payload,
359
368
  source: {
360
369
  domain,
361
- hash: new Huri2(hash).hash,
370
+ hash: huri.hash,
362
371
  mechanism,
363
372
  url
364
373
  }
@@ -408,11 +417,12 @@ var DomainSchemaResolver = class {
408
417
  if (isString2(schemaHash)) {
409
418
  const payload = await this.fetchSchemaPayloadByHash(schemaHash, schemaName, context);
410
419
  if (payload) {
420
+ const huri = new Huri2(schemaHash);
411
421
  return {
412
422
  payload,
413
423
  source: {
414
424
  domain,
415
- hash: new Huri2(schemaHash).hash,
425
+ hash: huri.hash,
416
426
  mechanism: "dns-schema"
417
427
  }
418
428
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/DomainConfigPayload.ts", "../../src/DomainConfigSchema.ts", "../../src/Payload.ts", "../../src/Schema.ts", "../../src/DomainConfigPlugin.ts", "../../src/DomainConfigTemplate.ts", "../../src/Plugin.ts", "../../src/Template.ts", "../../src/Wrapper.ts", "../../src/Resolution/XyoDnsRecords.ts", "../../src/Resolution/DomainSchemaResolver.ts"],
4
- "sourcesContent": ["import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { PayloadZodOfSchema } from '@xyo-network/payload-model'\nimport * as z from 'zod/mini'\n\nimport { DomainConfigSchema } from './DomainConfigSchema.ts'\nimport { DomainConfigFieldsZod } from './Payload.ts'\n\n/**\n * A domain's xyo config stored as an on-network payload, so it can be referenced from a\n * DNS TXT record by hash (config={hash}). Shares its field set with DomainPayload.\n */\nexport const DomainConfigPayloadZod = z.extend(PayloadZodOfSchema(DomainConfigSchema), DomainConfigFieldsZod.shape)\nexport type DomainConfigPayload = z.infer<typeof DomainConfigPayloadZod>\n\nexport const isDomainConfigPayload = zodIsFactory(DomainConfigPayloadZod)\nexport const asDomainConfigPayload = zodAsFactory(DomainConfigPayloadZod, 'asDomainConfigPayload')\nexport const toDomainConfigPayload = zodToFactory(DomainConfigPayloadZod, 'toDomainConfigPayload')\n", "import { asSchema } from '@xyo-network/payload-model'\n\nexport const DomainConfigSchema = asSchema('network.xyo.domain.config', true)\nexport type DomainConfigSchema = typeof DomainConfigSchema\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { NetworkPayload } from '@xyo-network/network'\nimport { PayloadZodOfSchema } from '@xyo-network/payload-model'\nimport * as z from 'zod/mini'\n\nimport { DomainSchema } from './Schema.ts'\n\nexport const AliasZod = z.object({\n /** huri to the aliased payload */\n huri: z.string(),\n /** canonical name (ex. network.xyo.example) */\n name: z.optional(z.string()),\n})\nexport type Alias = z.infer<typeof AliasZod>\n\n/**\n * An inline JSON Schema (draft-07) definition body. If $id is present it must equal the\n * schemas map key; resolvers overwrite $id from the key (the key is authoritative).\n */\nexport const SchemaDefinitionZod = z.looseObject({ $id: z.optional(z.string()) })\nexport type SchemaDefinition = z.infer<typeof SchemaDefinitionZod>\n\n/**\n * One entry in the schemas map: a string is a hash (or HURI href) of a\n * network.xyo.schema payload; an object is an inline JSON Schema definition.\n */\nexport const SchemaMapEntryZod = z.union([z.string(), SchemaDefinitionZod])\nexport type SchemaMapEntry = z.infer<typeof SchemaMapEntryZod>\n\nexport const DomainConfigFieldsZod = z.object({\n /** Additional config files [huri] [out] */\n additional: z.optional(z.array(z.string())),\n /** Values associated with this domain [out] */\n aliases: z.optional(z.record(z.string(), AliasZod)),\n /** Known networks [out] */\n networks: z.optional(z.array(z.custom<NetworkPayload>())),\n /** Official schemas published by this domain, keyed by schema name [out] */\n schemas: z.optional(z.record(z.string(), SchemaMapEntryZod)),\n})\nexport type DomainConfigFields = z.infer<typeof DomainConfigFieldsZod>\n\nexport const DomainPayloadZod = z.extend(PayloadZodOfSchema(DomainSchema), DomainConfigFieldsZod.shape)\nexport type DomainPayload = z.infer<typeof DomainPayloadZod>\n\nexport const isDomainPayload = zodIsFactory(DomainPayloadZod)\nexport const asDomainPayload = zodAsFactory(DomainPayloadZod, 'asDomainPayload')\nexport const toDomainPayload = zodToFactory(DomainPayloadZod, 'toDomainPayload')\n", "import { asSchema } from '@xyo-network/payload-model'\n\nexport const DomainSchema = asSchema('network.xyo.domain', true)\nexport type DomainSchema = typeof DomainSchema\n", "import { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport type { DomainConfigPayload } from './DomainConfigPayload.ts'\nimport { DomainConfigPayloadZod } from './DomainConfigPayload.ts'\nimport { DomainConfigSchema } from './DomainConfigSchema.ts'\nimport { domainConfigPayloadTemplate } from './DomainConfigTemplate.ts'\n\nexport const DomainConfigPayloadPlugin = () =>\n createPayloadPlugin<DomainConfigPayload>({\n schema: DomainConfigSchema,\n template: domainConfigPayloadTemplate,\n zod: DomainConfigPayloadZod,\n })\n", "import type { DomainConfigPayload } from './DomainConfigPayload.ts'\nimport { DomainConfigSchema } from './DomainConfigSchema.ts'\n\nexport const domainConfigPayloadTemplate = (): DomainConfigPayload => ({\n schema: DomainConfigSchema,\n schemas: {\n 'com.example.inline': {\n properties: { value: { type: 'string' } },\n type: 'object',\n },\n 'com.example.referenced': '',\n },\n})\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 { asSchema } from '@xyo-network/payload-model'\n\nimport 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: asSchema('network.xyo.network.node', true),\n slug: '',\n type: 'archivist',\n uri: '',\n },\n ],\n schema: asSchema('network.xyo.network', true),\n slug: '',\n },\n ],\n schema: DomainSchema,\n})\n", "import {\n Base, FetchClientError, fetchJson, isBrowser,\n isString,\n} from '@xylabs/sdk-js'\nimport { type Hash, isHash } from '@xylabs/sdk-js'\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'\n\nimport type { DomainConfigPayload } from './DomainConfigPayload.ts'\nimport { isDomainConfigPayload } from './DomainConfigPayload.ts'\nimport {\n type Alias, type DomainPayload, isDomainPayload,\n} from './Payload.ts'\nimport { parseXyoTxtRecords } from './Resolution/XyoDnsRecords.ts'\n\nexport interface FetchedAlias extends FetchedPayload {\n alias: Alias\n}\n\nexport class DomainPayloadWrapper<T extends DomainPayload | DomainConfigPayload = 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).toReversed().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 answers = (await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT))?.Answer\n const records = parseXyoTxtRecords(answers)\n // a config={hash} record takes precedence over legacy bare-hash records (SPEC.md \u00A73.3)\n const candidates = [records.config, ...records.legacyHashes].filter(element => isString(element))\n for (const candidate of candidates) {\n const huri = new Huri(candidate)\n const payload = await huri.fetch()\n if (isDomainPayload(payload) || isDomainConfigPayload(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 // direct fetch first (xyo.json publishers are CORS-enabled per SPEC.md \u00A73.1),\n // then the archivist proxy for browsers or when a proxy is explicitly provided\n return (await this.discoverRootFileDirect(domain))\n ?? (isBrowser() || isString(proxy) ? await this.discoverRootFileWithProxy(domain, proxy) : undefined)\n }\n\n static async discoverRootFileDirect(domain: string) {\n const urls = [`https://${domain}/xyo.json`, `https://xyo.${domain}/`, `https://${domain}/xyo-config.json`]\n for (const url of urls) {\n try {\n const response = await fetchJson<DomainPayload>(url)\n if (response.data) {\n return new DomainPayloadWrapper(response.data)\n }\n } catch {\n console.log(`DomainConfig root file not found [${url}]`)\n }\n }\n }\n\n static async discoverRootFileWithProxy(domain: string, proxy = 'https://api.archivist.xyo.network/domain') {\n try {\n const requestUrl = `${proxy}/${domain.split('.').toReversed().join('.')}`\n const response = await fetchJson<ApiEnvelope<DomainPayload>>(requestUrl)\n if (response.data?.data) {\n return new DomainPayloadWrapper(response.data.data)\n }\n } catch (ex) {\n const status = ex instanceof FetchClientError ? ex.response.status : 'unknown'\n console.log(`DomainConfig root file not found using proxy [${domain}] [${status}]`)\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", "import { type Hash, isHash } from '@xylabs/sdk-js'\nimport type { GoogleDnsResultAnswer } from '@xyo-network/dns'\n\n/**\n * The parsed contents of the TXT record set at _xyo.{domain}. See SPEC.md \u00A73.3.\n */\nexport interface XyoDnsRecords {\n /** config={hash-or-huri} \u2014 hash of a network.xyo.domain.config (or legacy domain) payload */\n config?: string\n /** domain={other-domain} \u2014 the named domain is the schema authority for this domain */\n domain?: string\n /** bare 64-hex records \u2014 legacy hashes of network.xyo.domain payloads */\n legacyHashes: Hash[]\n /** schema.{name}={hash-or-huri} \u2014 per-schema hashes of network.xyo.schema payloads */\n schemas: Record<string, string>\n}\n\nconst SCHEMA_KEY_PREFIX = 'schema.'\n\n/**\n * Strip surrounding double quotes and join multi-string TXT data (\"abc\" \"def\" -> abcdef)\n * before grammar matching, per SPEC.md \u00A73.3.\n */\nexport function normalizeTxtData(data: string): string {\n const trimmed = data.trim()\n if (trimmed.includes('\"')) {\n return [...trimmed.matchAll(/\"([^\"]*)\"/g)].map(match => match[1]).join('') || trimmed\n }\n return trimmed\n}\n\n/**\n * Parse the TXT answers from a _xyo.{domain} query into the four record modes. Unknown\n * keys are ignored; duplicates resolve lexicographically-first so results are\n * deterministic regardless of DNS answer order.\n */\nexport function parseXyoTxtRecords(answers?: GoogleDnsResultAnswer[]): XyoDnsRecords {\n const entries = (answers ?? [])\n .map(answer => answer.data)\n .filter((data): data is string => typeof data === 'string')\n .map(normalizeTxtData)\n .toSorted()\n\n const records: XyoDnsRecords = { legacyHashes: [], schemas: {} }\n\n for (const entry of entries) {\n if (isHash(entry)) {\n records.legacyHashes.push(entry)\n } else if (entry.startsWith(SCHEMA_KEY_PREFIX)) {\n const separatorIndex = entry.indexOf('=')\n if (separatorIndex > SCHEMA_KEY_PREFIX.length) {\n const name = entry.slice(SCHEMA_KEY_PREFIX.length, separatorIndex)\n const value = entry.slice(separatorIndex + 1)\n if (name.length > 0 && value.length > 0) {\n records.schemas[name] ??= value\n }\n }\n } else if (entry.startsWith('domain=')) {\n const value = entry.slice('domain='.length)\n if (value.length > 0) {\n records.domain ??= value\n }\n } else if (entry.startsWith('config=')) {\n const value = entry.slice('config='.length)\n if (value.length > 0) {\n records.config ??= value\n }\n }\n // any other key: ignored for forward compatibility\n }\n\n return records\n}\n", "import {\n fetchJson, isBrowser, isString,\n} from '@xylabs/sdk-js'\nimport type { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { Huri } from '@xyo-network/huri'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { SchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport { isSchemaPayload, SchemaSchema } from '@xyo-network/schema-payload-plugin'\n\nimport { isDomainConfigPayload } from '../DomainConfigPayload.ts'\nimport type { DomainConfigFields, DomainPayload } from '../Payload.ts'\nimport { isDomainPayload } from '../Payload.ts'\nimport type {\n ResolveSchemaOptions, SchemaResolution, SchemaResolutionMechanism, SchemaResolutionSource,\n} from './SchemaResolution.ts'\nimport { parseXyoTxtRecords } from './XyoDnsRecords.ts'\n\nconst DEFAULT_MAX_INDIRECTION_DEPTH = 3\nconst DEFAULT_PROXY = 'https://api.archivist.xyo.network/domain'\n\ninterface ResolveContext {\n /** at least one mechanism answered cleanly (NXDOMAIN, 404, config without the schema) */\n anyCleanAnswer: boolean\n archivistUri?: string\n proxy?: string\n visited: Set<string>\n}\n\ninterface Resolved {\n payload: SchemaPayload\n source: SchemaResolutionSource\n}\n\n/**\n * The candidate domains for a schema name, shortest first\n * (com.example.foo -> example.com, foo.example.com). See SPEC.md \u00A75.\n */\nexport function candidateDomains(schemaName: string): string[] {\n const parts = schemaName.split('.')\n const domains: string[] = []\n for (let i = 2; i <= parts.length; i++) {\n domains.push(parts.slice(0, i).toReversed().join('.'))\n }\n return domains\n}\n\n/**\n * Whether a schema name falls inside a domain's reverse-domain namespace: the name's\n * leading levels, reversed, equal the domain or a parent of it. See SPEC.md \u00A72.1.\n */\nexport function isSchemaInDomainNamespace(schemaName: string, domain: string): boolean {\n return candidateDomains(schemaName).some(candidate => candidate === domain || domain.endsWith(`.${candidate}`))\n}\n\nfunction isValidSchemaName(schemaName: string): boolean {\n return schemaName.length > 0 && schemaName === schemaName.toLowerCase() && schemaName.split('.').length >= 3\n}\n\n/**\n * Resolves a schema name to the domain-published authoritative schema definition by\n * walking the publication mechanisms in SPEC.md \u00A75: DNS TXT records at _xyo.{domain}\n * (per-schema, config hash, domain indirection, legacy bare hash), then the xyo.json\n * root file, the xyo. subdomain index, and the legacy xyo-config.json (with the\n * archivist proxy as browser fallback).\n */\nexport class DomainSchemaResolver {\n async resolve(schemaName: string, options: ResolveSchemaOptions = {}): Promise<SchemaResolution> {\n if (!isValidSchemaName(schemaName)) {\n return { status: 'not-published' }\n }\n const context: ResolveContext = {\n anyCleanAnswer: false,\n archivistUri: options.archivistUri,\n proxy: options.proxy,\n visited: new Set<string>(),\n }\n const depth = options.maxIndirectionDepth ?? DEFAULT_MAX_INDIRECTION_DEPTH\n for (const domain of candidateDomains(schemaName)) {\n const resolved = await this.resolveAtDomain(domain, schemaName, depth, context)\n if (resolved) {\n return {\n payload: resolved.payload, source: resolved.source, status: 'resolved',\n }\n }\n }\n return { status: context.anyCleanAnswer ? 'not-published' : 'unreachable' }\n }\n\n /** Fetch a payload by hash (or HURI href) and verify it against the referenced hash */\n protected async fetchPayload(\n hashOrHref: string,\n context: ResolveContext,\n configFields?: DomainConfigFields,\n ): Promise<Payload | undefined> {\n try {\n const archivistUri = context.archivistUri ?? findArchivistUri(configFields)\n const huri = new Huri(hashOrHref, { archivistUri })\n const payload = await huri.fetch()\n if (!payload) {\n context.anyCleanAnswer = true\n return undefined\n }\n // content-addressed integrity: the fetched payload must hash to the referenced hash\n if ((await PayloadBuilder.dataHash(payload)) !== huri.hash && (await PayloadBuilder.hash(payload)) !== huri.hash) {\n console.warn(`DomainSchemaResolver: hash mismatch for [${huri.hash}]`)\n context.anyCleanAnswer = true\n return undefined\n }\n return payload\n } catch {\n return undefined\n }\n }\n\n protected async fetchSchemaPayloadByHash(\n hashOrHref: string,\n schemaName: string,\n context: ResolveContext,\n configFields?: DomainConfigFields,\n ): Promise<SchemaPayload | undefined> {\n const payload = await this.fetchPayload(hashOrHref, context, configFields)\n if (isSchemaPayload(payload) && payload.definition.$id === schemaName) {\n return payload\n }\n }\n\n protected lookupHash(fields: DomainConfigFields, schemaName: string): string | undefined {\n const entry = fields.schemas?.[schemaName]\n if (isString(entry)) return entry\n const alias = fields.aliases?.[schemaName]\n if (isString(alias?.huri) && alias.huri.length > 0) return alias.huri\n }\n\n /** Find the schema in a domain config document (schemas map first, then legacy aliases) */\n protected async lookupInConfig(\n fields: DomainConfigFields | undefined,\n schemaName: string,\n domain: string,\n mechanism: SchemaResolutionMechanism,\n context: ResolveContext,\n url?: string,\n ): Promise<Resolved | undefined> {\n if (!fields) return undefined\n context.anyCleanAnswer = true\n // no namespace check here: the lookup key is the schema name being resolved, which\n // is in-namespace for candidate domains by construction, and a domain= delegation\n // intentionally lets the named authority publish the delegator's namespace\n const entry = fields.schemas?.[schemaName]\n if (entry !== undefined && !isString(entry)) {\n // inline definition: the map key is authoritative for $id\n const payload: SchemaPayload = { definition: { ...entry, $id: schemaName }, schema: SchemaSchema }\n return {\n payload,\n source: {\n domain, mechanism, url,\n },\n }\n }\n const hash = this.lookupHash(fields, schemaName)\n if (isString(hash)) {\n const payload = await this.fetchSchemaPayloadByHash(hash, schemaName, context, fields)\n if (payload) {\n return {\n payload,\n source: {\n domain, hash: new Huri(hash).hash, mechanism, url,\n },\n }\n }\n }\n }\n\n protected async resolveAtDomain(\n domain: string,\n schemaName: string,\n depth: number,\n context: ResolveContext,\n ): Promise<Resolved | undefined> {\n if (context.visited.has(domain)) return undefined\n context.visited.add(domain)\n\n // Stage A \u2014 DNS TXT records at _xyo.{domain}\n const dnsResolved = await this.resolveViaDns(domain, schemaName, depth, context)\n if (dnsResolved) return dnsResolved\n\n // Stages B/C/D \u2014 root file, subdomain index, legacy file\n const fileCandidates: [url: string, mechanism: SchemaResolutionMechanism][] = [\n [`https://${domain}/xyo.json`, 'file-root'],\n [`https://xyo.${domain}/`, 'file-subdomain'],\n [`https://${domain}/xyo-config.json`, 'file-legacy'],\n ]\n let anyDirectTransportFailure = false\n for (const [url, mechanism] of fileCandidates) {\n try {\n // fetchJson resolves (data: null) on HTTP error statuses and only throws on\n // transport failures (network down, CORS), so a return is always a clean answer\n const response = await fetchJson<DomainPayload>(url)\n context.anyCleanAnswer = true\n const resolved = await this.lookupInConfig(response.data ?? undefined, schemaName, domain, mechanism, context, url)\n if (resolved) return resolved\n } catch {\n anyDirectTransportFailure = true\n }\n }\n\n // Proxy fallback: always when a proxy is explicitly provided (legacy semantics),\n // or in browsers when direct fetches were blocked (e.g. CORS)\n if (isString(context.proxy) || (isBrowser() && anyDirectTransportFailure)) {\n const url = `${context.proxy ?? DEFAULT_PROXY}/${domain.split('.').toReversed().join('.')}`\n try {\n const response = await fetchJson<ApiEnvelope<DomainPayload>>(url)\n context.anyCleanAnswer = true\n const resolved = await this.lookupInConfig(response.data?.data, schemaName, domain, 'file-proxy', context, url)\n if (resolved) return resolved\n } catch {\n // transport failure: leave anyCleanAnswer untouched\n }\n }\n }\n\n protected async resolveViaDns(\n domain: string,\n schemaName: string,\n depth: number,\n context: ResolveContext,\n ): Promise<Resolved | undefined> {\n try {\n const result = await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT)\n if (!result) return undefined\n context.anyCleanAnswer = true\n const records = parseXyoTxtRecords(result.Answer)\n\n // A1 \u2014 per-schema record\n const schemaHash = records.schemas[schemaName]\n if (isString(schemaHash)) {\n const payload = await this.fetchSchemaPayloadByHash(schemaHash, schemaName, context)\n if (payload) {\n return {\n payload,\n source: {\n domain, hash: new Huri(schemaHash).hash, mechanism: 'dns-schema',\n },\n }\n }\n }\n\n // A2 \u2014 config hash (terminal: the fetched config cannot delegate further)\n if (isString(records.config)) {\n const configPayload = await this.fetchPayload(records.config, context)\n if (isDomainConfigPayload(configPayload) || isDomainPayload(configPayload)) {\n const resolved = await this.lookupInConfig(configPayload, schemaName, domain, 'dns-config', context)\n if (resolved) return resolved\n }\n }\n\n // A3 \u2014 domain indirection\n if (isString(records.domain) && depth > 0 && !context.visited.has(records.domain)) {\n const resolved = await this.resolveAtDomain(records.domain, schemaName, depth - 1, context)\n if (resolved) {\n return { payload: resolved.payload, source: { ...resolved.source, mechanism: 'dns-domain' } }\n }\n }\n\n // A4 \u2014 legacy bare hash of a network.xyo.domain payload\n for (const legacyHash of records.legacyHashes) {\n const legacyPayload = await this.fetchPayload(legacyHash, context)\n if (isDomainPayload(legacyPayload) || isDomainConfigPayload(legacyPayload)) {\n const resolved = await this.lookupInConfig(legacyPayload, schemaName, domain, 'dns-legacy', context)\n if (resolved) return resolved\n }\n }\n } catch {\n // transport error: leave anyCleanAnswer untouched\n }\n }\n}\n\nfunction findArchivistUri(fields?: DomainConfigFields): string | undefined {\n return fields?.networks?.[0]?.nodes?.find(node => node.type === 'archivist')?.uri\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport { PayloadZodOfSchema } from '@xyo-network/payload-model'\nimport * as z from 'zod/mini'\n\nimport { DomainConfigSchema } from './DomainConfigSchema.ts'\nimport { DomainConfigFieldsZod } from './Payload.ts'\n\n/**\n * A domain's xyo config stored as an on-network payload, so it can be referenced from a\n * DNS TXT record by hash (config={hash}). Shares its field set with DomainPayload.\n */\nexport const DomainConfigPayloadZod = z.extend(PayloadZodOfSchema(DomainConfigSchema), DomainConfigFieldsZod.shape)\nexport type DomainConfigPayload = z.infer<typeof DomainConfigPayloadZod>\n\nexport const isDomainConfigPayload = zodIsFactory(DomainConfigPayloadZod)\nexport const asDomainConfigPayload = zodAsFactory(DomainConfigPayloadZod, 'asDomainConfigPayload')\nexport const toDomainConfigPayload = zodToFactory(DomainConfigPayloadZod, 'toDomainConfigPayload')\n", "import { asSchema } from '@xyo-network/payload-model'\n\nexport const DomainConfigSchema = asSchema('network.xyo.domain.config', true)\nexport type DomainConfigSchema = typeof DomainConfigSchema\n", "import {\n zodAsFactory, zodIsFactory, zodToFactory,\n} from '@xylabs/sdk-js'\nimport type { NetworkPayload } from '@xyo-network/network'\nimport { PayloadZodOfSchema } from '@xyo-network/payload-model'\nimport * as z from 'zod/mini'\n\nimport { DomainSchema } from './Schema.ts'\n\nexport const AliasZod = z.object({\n /** huri to the aliased payload */\n huri: z.string(),\n /** canonical name (ex. network.xyo.example) */\n name: z.optional(z.string()),\n})\nexport type Alias = z.infer<typeof AliasZod>\n\n/**\n * An inline JSON Schema (draft-07) definition body. If $id is present it must equal the\n * schemas map key; resolvers overwrite $id from the key (the key is authoritative).\n */\nexport const SchemaDefinitionZod = z.looseObject({ $id: z.optional(z.string()) })\nexport type SchemaDefinition = z.infer<typeof SchemaDefinitionZod>\n\n/**\n * One entry in the schemas map: a string is a hash (or HURI href) of a\n * network.xyo.schema payload; an object is an inline JSON Schema definition.\n */\nexport const SchemaMapEntryZod = z.union([z.string(), SchemaDefinitionZod])\nexport type SchemaMapEntry = z.infer<typeof SchemaMapEntryZod>\n\nconst stringZod = z.string()\nconst optionalStringArrayZod = z.optional(z.array(stringZod))\nconst optionalAliasRecordZod = z.optional(z.record(stringZod, AliasZod))\nconst networkPayloadZod = z.custom<NetworkPayload>()\nconst optionalNetworkPayloadArrayZod = z.optional(z.array(networkPayloadZod))\nconst optionalSchemaMapEntryRecordZod = z.optional(z.record(stringZod, SchemaMapEntryZod))\n\nexport const DomainConfigFieldsZod = z.object({\n /** Additional config files [huri] [out] */\n additional: optionalStringArrayZod,\n /** Values associated with this domain [out] */\n aliases: optionalAliasRecordZod,\n /** Known networks [out] */\n networks: optionalNetworkPayloadArrayZod,\n /** Official schemas published by this domain, keyed by schema name [out] */\n schemas: optionalSchemaMapEntryRecordZod,\n})\nexport type DomainConfigFields = z.infer<typeof DomainConfigFieldsZod>\n\nexport const DomainPayloadZod = z.extend(PayloadZodOfSchema(DomainSchema), DomainConfigFieldsZod.shape)\nexport type DomainPayload = z.infer<typeof DomainPayloadZod>\n\nexport const isDomainPayload = zodIsFactory(DomainPayloadZod)\nexport const asDomainPayload = zodAsFactory(DomainPayloadZod, 'asDomainPayload')\nexport const toDomainPayload = zodToFactory(DomainPayloadZod, 'toDomainPayload')\n", "import { asSchema } from '@xyo-network/payload-model'\n\nexport const DomainSchema = asSchema('network.xyo.domain', true)\nexport type DomainSchema = typeof DomainSchema\n", "import { createPayloadPlugin } from '@xyo-network/payload-plugin'\n\nimport type { DomainConfigPayload } from './DomainConfigPayload.ts'\nimport { DomainConfigPayloadZod } from './DomainConfigPayload.ts'\nimport { DomainConfigSchema } from './DomainConfigSchema.ts'\nimport { domainConfigPayloadTemplate } from './DomainConfigTemplate.ts'\n\nexport const DomainConfigPayloadPlugin = () =>\n createPayloadPlugin<DomainConfigPayload>({\n schema: DomainConfigSchema,\n template: domainConfigPayloadTemplate,\n zod: DomainConfigPayloadZod,\n })\n", "import type { DomainConfigPayload } from './DomainConfigPayload.ts'\nimport { DomainConfigSchema } from './DomainConfigSchema.ts'\n\nexport const domainConfigPayloadTemplate = (): DomainConfigPayload => ({\n schema: DomainConfigSchema,\n schemas: {\n 'com.example.inline': {\n properties: { value: { type: 'string' } },\n type: 'object',\n },\n 'com.example.referenced': '',\n },\n})\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 { asSchema } from '@xyo-network/payload-model'\n\nimport 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: asSchema('network.xyo.network.node', true),\n slug: '',\n type: 'archivist',\n uri: '',\n },\n ],\n schema: asSchema('network.xyo.network', true),\n slug: '',\n },\n ],\n schema: DomainSchema,\n})\n", "import {\n Base, FetchClientError, fetchJson, isBrowser,\n isString,\n} from '@xylabs/sdk-js'\nimport { type Hash, isHash } from '@xylabs/sdk-js'\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'\n\nimport type { DomainConfigPayload } from './DomainConfigPayload.ts'\nimport { isDomainConfigPayload } from './DomainConfigPayload.ts'\nimport {\n type Alias, type DomainPayload, isDomainPayload,\n} from './Payload.ts'\nimport { parseXyoTxtRecords } from './Resolution/XyoDnsRecords.ts'\n\nexport interface FetchedAlias extends FetchedPayload {\n alias: Alias\n}\n\nexport class DomainPayloadWrapper<T extends DomainPayload | DomainConfigPayload = 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).toReversed().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 { Answer } = (await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT)) ?? {}\n const records = parseXyoTxtRecords(Answer)\n // a config={hash} record takes precedence over legacy bare-hash records (SPEC.md \u00A73.3)\n const candidates = [records.config, ...records.legacyHashes].filter(element => isString(element))\n for (const candidate of candidates) {\n const huri = new Huri(candidate)\n const payload = await huri.fetch()\n if (isDomainPayload(payload) || isDomainConfigPayload(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 // direct fetch first (xyo.json publishers are CORS-enabled per SPEC.md \u00A73.1),\n // then the archivist proxy for browsers or when a proxy is explicitly provided\n return (await this.discoverRootFileDirect(domain))\n ?? (isBrowser() || isString(proxy) ? await this.discoverRootFileWithProxy(domain, proxy) : undefined)\n }\n\n static async discoverRootFileDirect(domain: string) {\n const urls = [`https://${domain}/xyo.json`, `https://xyo.${domain}/`, `https://${domain}/xyo-config.json`]\n for (const url of urls) {\n try {\n const response = await fetchJson<DomainPayload>(url)\n if (response.data) {\n return new DomainPayloadWrapper(response.data)\n }\n } catch {\n console.log(`DomainConfig root file not found [${url}]`)\n }\n }\n }\n\n static async discoverRootFileWithProxy(domain: string, proxy = 'https://api.archivist.xyo.network/domain') {\n try {\n const requestUrl = `${proxy}/${domain.split('.').toReversed().join('.')}`\n const response = await fetchJson<ApiEnvelope<DomainPayload>>(requestUrl)\n if (response.data?.data) {\n return new DomainPayloadWrapper(response.data.data)\n }\n } catch (ex) {\n const status = ex instanceof FetchClientError ? ex.response.status : 'unknown'\n console.log(`DomainConfig root file not found using proxy [${domain}] [${status}]`)\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 const network = await this.getNetwork(hash)\n return network?.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 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.values(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", "import { type Hash, isHash } from '@xylabs/sdk-js'\nimport type { GoogleDnsResultAnswer } from '@xyo-network/dns'\n\n/**\n * The parsed contents of the TXT record set at _xyo.{domain}. See SPEC.md \u00A73.3.\n */\nexport interface XyoDnsRecords {\n /** config={hash-or-huri} \u2014 hash of a network.xyo.domain.config (or legacy domain) payload */\n config?: string\n /** domain={other-domain} \u2014 the named domain is the schema authority for this domain */\n domain?: string\n /** bare 64-hex records \u2014 legacy hashes of network.xyo.domain payloads */\n legacyHashes: Hash[]\n /** schema.{name}={hash-or-huri} \u2014 per-schema hashes of network.xyo.schema payloads */\n schemas: Record<string, string>\n}\n\nconst SCHEMA_KEY_PREFIX = 'schema.'\n\n/**\n * Strip surrounding double quotes and join multi-string TXT data (\"abc\" \"def\" -> abcdef)\n * before grammar matching, per SPEC.md \u00A73.3.\n */\nexport function normalizeTxtData(data: string): string {\n const trimmed = data.trim()\n if (trimmed.includes('\"')) {\n const quotedParts = Array.from(trimmed.matchAll(/\"([^\"]*)\"/g), (match: RegExpMatchArray): string => match[1])\n return quotedParts.join('') || trimmed\n }\n return trimmed\n}\n\n/**\n * Parse the TXT answers from a _xyo.{domain} query into the four record modes. Unknown\n * keys are ignored; duplicates resolve lexicographically-first so results are\n * deterministic regardless of DNS answer order.\n */\nexport function parseXyoTxtRecords(answers?: GoogleDnsResultAnswer[]): XyoDnsRecords {\n const entries = (answers ?? [])\n .map(answer => answer.data)\n .filter((data): data is string => typeof data === 'string')\n .map(normalizeTxtData)\n .toSorted((left, right) => left.localeCompare(right))\n\n const records: XyoDnsRecords = { legacyHashes: [], schemas: {} }\n\n for (const entry of entries) {\n if (isHash(entry)) {\n records.legacyHashes.push(entry)\n } else if (entry.startsWith(SCHEMA_KEY_PREFIX)) {\n const separatorIndex = entry.indexOf('=')\n if (separatorIndex > SCHEMA_KEY_PREFIX.length) {\n const name = entry.slice(SCHEMA_KEY_PREFIX.length, separatorIndex)\n const value = entry.slice(separatorIndex + 1)\n if (name.length > 0 && value.length > 0) {\n records.schemas[name] ??= value\n }\n }\n } else if (entry.startsWith('domain=')) {\n const value = entry.slice('domain='.length)\n if (value.length > 0) {\n records.domain ??= value\n }\n } else if (entry.startsWith('config=')) {\n const value = entry.slice('config='.length)\n if (value.length > 0) {\n records.config ??= value\n }\n }\n // any other key: ignored for forward compatibility\n }\n\n return records\n}\n", "import {\n fetchJson, isBrowser, isString,\n} from '@xylabs/sdk-js'\nimport type { ApiEnvelope } from '@xyo-network/api-models'\nimport { DnsRecordType, domainResolve } from '@xyo-network/dns'\nimport { Huri } from '@xyo-network/huri'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport type { SchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport { isSchemaPayload, SchemaSchema } from '@xyo-network/schema-payload-plugin'\n\nimport { isDomainConfigPayload } from '../DomainConfigPayload.ts'\nimport type { DomainConfigFields, DomainPayload } from '../Payload.ts'\nimport { isDomainPayload } from '../Payload.ts'\nimport type {\n ResolveSchemaOptions, SchemaResolution, SchemaResolutionMechanism, SchemaResolutionSource,\n} from './SchemaResolution.ts'\nimport { parseXyoTxtRecords } from './XyoDnsRecords.ts'\n\nconst DEFAULT_MAX_INDIRECTION_DEPTH = 3\nconst DEFAULT_PROXY = 'https://api.archivist.xyo.network/domain'\n\ninterface ResolveContext {\n /** at least one mechanism answered cleanly (NXDOMAIN, 404, config without the schema) */\n anyCleanAnswer: boolean\n archivistUri?: string\n proxy?: string\n visited: Set<string>\n}\n\ninterface Resolved {\n payload: SchemaPayload\n source: SchemaResolutionSource\n}\n\n/**\n * The candidate domains for a schema name, shortest first\n * (com.example.foo -> example.com, foo.example.com). See SPEC.md \u00A75.\n */\nexport function candidateDomains(schemaName: string): string[] {\n const parts = schemaName.split('.')\n const domains: string[] = []\n for (let i = 2; i <= parts.length; i++) {\n domains.push(parts.slice(0, i).toReversed().join('.'))\n }\n return domains\n}\n\n/**\n * Whether a schema name falls inside a domain's reverse-domain namespace: the name's\n * leading levels, reversed, equal the domain or a parent of it. See SPEC.md \u00A72.1.\n */\nexport function isSchemaInDomainNamespace(schemaName: string, domain: string): boolean {\n return candidateDomains(schemaName).some(candidate => candidate === domain || domain.endsWith(`.${candidate}`))\n}\n\nfunction isValidSchemaName(schemaName: string): boolean {\n return schemaName.length > 0 && schemaName === schemaName.toLowerCase() && schemaName.split('.').length >= 3\n}\n\n/**\n * Resolves a schema name to the domain-published authoritative schema definition by\n * walking the publication mechanisms in SPEC.md \u00A75: DNS TXT records at _xyo.{domain}\n * (per-schema, config hash, domain indirection, legacy bare hash), then the xyo.json\n * root file, the xyo. subdomain index, and the legacy xyo-config.json (with the\n * archivist proxy as browser fallback).\n */\nexport class DomainSchemaResolver {\n async resolve(schemaName: string, options: ResolveSchemaOptions = {}): Promise<SchemaResolution> {\n if (!isValidSchemaName(schemaName)) {\n return { status: 'not-published' }\n }\n const context: ResolveContext = {\n anyCleanAnswer: false,\n archivistUri: options.archivistUri,\n proxy: options.proxy,\n visited: new Set<string>(),\n }\n const depth = options.maxIndirectionDepth ?? DEFAULT_MAX_INDIRECTION_DEPTH\n for (const domain of candidateDomains(schemaName)) {\n const resolved = await this.resolveAtDomain(domain, schemaName, depth, context)\n if (resolved) {\n return {\n payload: resolved.payload, source: resolved.source, status: 'resolved',\n }\n }\n }\n return { status: context.anyCleanAnswer ? 'not-published' : 'unreachable' }\n }\n\n /** Fetch a payload by hash (or HURI href) and verify it against the referenced hash */\n protected async fetchPayload(\n hashOrHref: string,\n context: ResolveContext,\n configFields?: DomainConfigFields,\n ): Promise<Payload | undefined> {\n try {\n const archivistUri = context.archivistUri ?? findArchivistUri(configFields)\n const huri = new Huri(hashOrHref, { archivistUri })\n const payload = await huri.fetch()\n if (!payload) {\n context.anyCleanAnswer = true\n return undefined\n }\n // content-addressed integrity: the fetched payload must hash to the referenced hash\n if ((await PayloadBuilder.dataHash(payload)) !== huri.hash && (await PayloadBuilder.hash(payload)) !== huri.hash) {\n console.warn(`DomainSchemaResolver: hash mismatch for [${huri.hash}]`)\n context.anyCleanAnswer = true\n return undefined\n }\n return payload\n } catch {\n return undefined\n }\n }\n\n protected async fetchSchemaPayloadByHash(\n hashOrHref: string,\n schemaName: string,\n context: ResolveContext,\n configFields?: DomainConfigFields,\n ): Promise<SchemaPayload | undefined> {\n const payload = await this.fetchPayload(hashOrHref, context, configFields)\n if (isSchemaPayload(payload) && payload.definition.$id === schemaName) {\n return payload\n }\n }\n\n protected lookupHash(fields: DomainConfigFields, schemaName: string): string | undefined {\n const entry = fields.schemas?.[schemaName]\n if (isString(entry)) return entry\n const alias = fields.aliases?.[schemaName]\n if (isString(alias?.huri) && alias.huri.length > 0) return alias.huri\n }\n\n /** Find the schema in a domain config document (schemas map first, then legacy aliases) */\n protected async lookupInConfig(\n fields: DomainConfigFields | undefined,\n schemaName: string,\n domain: string,\n mechanism: SchemaResolutionMechanism,\n context: ResolveContext,\n url?: string,\n ): Promise<Resolved | undefined> {\n if (!fields) return undefined\n context.anyCleanAnswer = true\n // no namespace check here: the lookup key is the schema name being resolved, which\n // is in-namespace for candidate domains by construction, and a domain= delegation\n // intentionally lets the named authority publish the delegator's namespace\n const entry = fields.schemas?.[schemaName]\n if (entry !== undefined && !isString(entry)) {\n // inline definition: the map key is authoritative for $id\n const payload: SchemaPayload = { definition: { ...entry, $id: schemaName }, schema: SchemaSchema }\n return {\n payload,\n source: {\n domain, mechanism, url,\n },\n }\n }\n const hash = this.lookupHash(fields, schemaName)\n if (isString(hash)) {\n const payload = await this.fetchSchemaPayloadByHash(hash, schemaName, context, fields)\n if (payload) {\n const huri = new Huri(hash)\n return {\n payload,\n source: {\n domain, hash: huri.hash, mechanism, url,\n },\n }\n }\n }\n }\n\n protected async resolveAtDomain(\n domain: string,\n schemaName: string,\n depth: number,\n context: ResolveContext,\n ): Promise<Resolved | undefined> {\n if (context.visited.has(domain)) return undefined\n context.visited.add(domain)\n\n // Stage A \u2014 DNS TXT records at _xyo.{domain}\n const dnsResolved = await this.resolveViaDns(domain, schemaName, depth, context)\n if (dnsResolved) return dnsResolved\n\n // Stages B/C/D \u2014 root file, subdomain index, legacy file\n const fileCandidates: [url: string, mechanism: SchemaResolutionMechanism][] = [\n [`https://${domain}/xyo.json`, 'file-root'],\n [`https://xyo.${domain}/`, 'file-subdomain'],\n [`https://${domain}/xyo-config.json`, 'file-legacy'],\n ]\n let anyDirectTransportFailure = false\n for (const [url, mechanism] of fileCandidates) {\n try {\n // fetchJson resolves (data: null) on HTTP error statuses and only throws on\n // transport failures (network down, CORS), so a return is always a clean answer\n const response = await fetchJson<DomainPayload>(url)\n context.anyCleanAnswer = true\n const resolved = await this.lookupInConfig(response.data ?? undefined, schemaName, domain, mechanism, context, url)\n if (resolved) return resolved\n } catch {\n anyDirectTransportFailure = true\n }\n }\n\n // Proxy fallback: always when a proxy is explicitly provided (legacy semantics),\n // or in browsers when direct fetches were blocked (e.g. CORS)\n if (isString(context.proxy) || (isBrowser() && anyDirectTransportFailure)) {\n const url = `${context.proxy ?? DEFAULT_PROXY}/${domain.split('.').toReversed().join('.')}`\n try {\n const response = await fetchJson<ApiEnvelope<DomainPayload>>(url)\n context.anyCleanAnswer = true\n const resolved = await this.lookupInConfig(response.data?.data, schemaName, domain, 'file-proxy', context, url)\n if (resolved) return resolved\n } catch {\n // transport failure: leave anyCleanAnswer untouched\n }\n }\n }\n\n protected async resolveViaDns(\n domain: string,\n schemaName: string,\n depth: number,\n context: ResolveContext,\n ): Promise<Resolved | undefined> {\n try {\n const result = await domainResolve(`_xyo.${domain}`, DnsRecordType.TXT)\n if (!result) return undefined\n context.anyCleanAnswer = true\n const records = parseXyoTxtRecords(result.Answer)\n\n // A1 \u2014 per-schema record\n const schemaHash = records.schemas[schemaName]\n if (isString(schemaHash)) {\n const payload = await this.fetchSchemaPayloadByHash(schemaHash, schemaName, context)\n if (payload) {\n const huri = new Huri(schemaHash)\n return {\n payload,\n source: {\n domain, hash: huri.hash, mechanism: 'dns-schema',\n },\n }\n }\n }\n\n // A2 \u2014 config hash (terminal: the fetched config cannot delegate further)\n if (isString(records.config)) {\n const configPayload = await this.fetchPayload(records.config, context)\n if (isDomainConfigPayload(configPayload) || isDomainPayload(configPayload)) {\n const resolved = await this.lookupInConfig(configPayload, schemaName, domain, 'dns-config', context)\n if (resolved) return resolved\n }\n }\n\n // A3 \u2014 domain indirection\n if (isString(records.domain) && depth > 0 && !context.visited.has(records.domain)) {\n const resolved = await this.resolveAtDomain(records.domain, schemaName, depth - 1, context)\n if (resolved) {\n return { payload: resolved.payload, source: { ...resolved.source, mechanism: 'dns-domain' } }\n }\n }\n\n // A4 \u2014 legacy bare hash of a network.xyo.domain payload\n for (const legacyHash of records.legacyHashes) {\n const legacyPayload = await this.fetchPayload(legacyHash, context)\n if (isDomainPayload(legacyPayload) || isDomainConfigPayload(legacyPayload)) {\n const resolved = await this.lookupInConfig(legacyPayload, schemaName, domain, 'dns-legacy', context)\n if (resolved) return resolved\n }\n }\n } catch {\n // transport error: leave anyCleanAnswer untouched\n }\n }\n}\n\nfunction findArchivistUri(fields?: DomainConfigFields): string | undefined {\n return fields?.networks?.[0]?.nodes?.find(node => node.type === 'archivist')?.uri\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["zodAsFactory", "zodIsFactory", "zodToFactory", "PayloadZodOfSchema", "z", "asSchema", "PayloadZodOfSchema", "zodIsFactory", "zodAsFactory", "zodToFactory", "createPayloadPlugin", "asSchema", "asSchema", "isHash", "isHash", "createPayloadPlugin", "fetchJson", "isBrowser", "isString", "DnsRecordType", "domainResolve", "Huri", "PayloadBuilder", "Huri", "PayloadBuilder", "isString", "fetchJson", "isBrowser", "domainResolve", "DnsRecordType"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/domain-payload-plugin",
3
- "version": "7.0.0",
3
+ "version": "7.0.3",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -34,36 +34,36 @@
34
34
  "README.md"
35
35
  ],
36
36
  "dependencies": {
37
- "@xyo-network/dns": "~7.0.0",
38
- "@xyo-network/huri": "~7.0.0",
39
- "@xyo-network/payload-builder": "~7.0.0",
40
- "@xyo-network/payload-model": "~7.0.0",
41
- "@xyo-network/payload-plugin": "~7.0.0",
42
- "@xyo-network/payload-wrapper": "~7.0.0",
43
- "@xyo-network/schema-payload-plugin": "~7.0.0"
37
+ "@xyo-network/dns": "~7.0.3",
38
+ "@xyo-network/huri": "~7.0.3",
39
+ "@xyo-network/payload-builder": "~7.0.3",
40
+ "@xyo-network/payload-model": "~7.0.3",
41
+ "@xyo-network/payload-plugin": "~7.0.3",
42
+ "@xyo-network/schema-payload-plugin": "~7.0.3",
43
+ "@xyo-network/payload-wrapper": "~7.0.3"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@bitauth/libauth": "~3.0.0",
47
47
  "@opentelemetry/api": "^1.9.1",
48
48
  "@opentelemetry/sdk-trace-base": "^2.8.0",
49
49
  "@scure/base": "~2.2.0",
50
- "@xylabs/sdk-js": "^6.1.1",
51
- "@xylabs/threads": "^6.1.1",
52
- "@xylabs/toolchain": "~8.1.20",
53
- "@xylabs/tsconfig": "~8.1.20",
54
- "@xylabs/vitest-extended": "^6.1.1",
50
+ "@xylabs/sdk-js": "^6.1.4",
51
+ "@xylabs/threads": "^6.1.4",
52
+ "@xylabs/toolchain": "~8.3.0",
53
+ "@xylabs/tsconfig": "~8.3.0",
54
+ "@xylabs/vitest-extended": "^6.1.4",
55
55
  "async-mutex": "^0.5.0",
56
56
  "debug": "^4.4.3",
57
- "eslint": "^10.4.1",
58
- "ethers": "^6.16.0",
57
+ "eslint": "^10.5.0",
58
+ "ethers": "^6.17.0",
59
59
  "hash-wasm": "~4.12.0",
60
60
  "observable-fns": "^0.6.1",
61
61
  "typescript": "~6.0.3",
62
- "vite": "^8.0.16",
63
- "vitest": "~4.1.8",
62
+ "vite": "^8.1.0",
63
+ "vitest": "~4.1.9",
64
64
  "zod": "^4.4.3",
65
- "@xyo-network/api-models": "~7.0.0",
66
- "@xyo-network/network": "~7.0.0"
65
+ "@xyo-network/api-models": "~7.0.3",
66
+ "@xyo-network/network": "~7.0.3"
67
67
  },
68
68
  "peerDependencies": {
69
69
  "@bitauth/libauth": "~3.0",