@xyo-network/xns-record-payload-plugins 2.89.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.
Files changed (207) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/browser/Address/Payload.d.cts +22 -0
  4. package/dist/browser/Address/Payload.d.cts.map +1 -0
  5. package/dist/browser/Address/Payload.d.mts +22 -0
  6. package/dist/browser/Address/Payload.d.mts.map +1 -0
  7. package/dist/browser/Address/Payload.d.ts +22 -0
  8. package/dist/browser/Address/Payload.d.ts.map +1 -0
  9. package/dist/browser/Address/index.d.cts +2 -0
  10. package/dist/browser/Address/index.d.cts.map +1 -0
  11. package/dist/browser/Address/index.d.mts +2 -0
  12. package/dist/browser/Address/index.d.mts.map +1 -0
  13. package/dist/browser/Address/index.d.ts +2 -0
  14. package/dist/browser/Address/index.d.ts.map +1 -0
  15. package/dist/browser/Domain/Domain.d.cts +14 -0
  16. package/dist/browser/Domain/Domain.d.cts.map +1 -0
  17. package/dist/browser/Domain/Domain.d.mts +14 -0
  18. package/dist/browser/Domain/Domain.d.mts.map +1 -0
  19. package/dist/browser/Domain/Domain.d.ts +14 -0
  20. package/dist/browser/Domain/Domain.d.ts.map +1 -0
  21. package/dist/browser/Domain/DomainLease.d.cts +15 -0
  22. package/dist/browser/Domain/DomainLease.d.cts.map +1 -0
  23. package/dist/browser/Domain/DomainLease.d.mts +15 -0
  24. package/dist/browser/Domain/DomainLease.d.mts.map +1 -0
  25. package/dist/browser/Domain/DomainLease.d.ts +15 -0
  26. package/dist/browser/Domain/DomainLease.d.ts.map +1 -0
  27. package/dist/browser/Domain/index.d.cts +3 -0
  28. package/dist/browser/Domain/index.d.cts.map +1 -0
  29. package/dist/browser/Domain/index.d.mts +3 -0
  30. package/dist/browser/Domain/index.d.mts.map +1 -0
  31. package/dist/browser/Domain/index.d.ts +3 -0
  32. package/dist/browser/Domain/index.d.ts.map +1 -0
  33. package/dist/browser/DomainRegistration/Payload.d.cts +20 -0
  34. package/dist/browser/DomainRegistration/Payload.d.cts.map +1 -0
  35. package/dist/browser/DomainRegistration/Payload.d.mts +20 -0
  36. package/dist/browser/DomainRegistration/Payload.d.mts.map +1 -0
  37. package/dist/browser/DomainRegistration/Payload.d.ts +20 -0
  38. package/dist/browser/DomainRegistration/Payload.d.ts.map +1 -0
  39. package/dist/browser/DomainRegistration/index.d.cts +2 -0
  40. package/dist/browser/DomainRegistration/index.d.cts.map +1 -0
  41. package/dist/browser/DomainRegistration/index.d.mts +2 -0
  42. package/dist/browser/DomainRegistration/index.d.mts.map +1 -0
  43. package/dist/browser/DomainRegistration/index.d.ts +2 -0
  44. package/dist/browser/DomainRegistration/index.d.ts.map +1 -0
  45. package/dist/browser/Duration/Duration.d.cts +11 -0
  46. package/dist/browser/Duration/Duration.d.cts.map +1 -0
  47. package/dist/browser/Duration/Duration.d.mts +11 -0
  48. package/dist/browser/Duration/Duration.d.mts.map +1 -0
  49. package/dist/browser/Duration/Duration.d.ts +11 -0
  50. package/dist/browser/Duration/Duration.d.ts.map +1 -0
  51. package/dist/browser/Duration/index.d.cts +3 -0
  52. package/dist/browser/Duration/index.d.cts.map +1 -0
  53. package/dist/browser/Duration/index.d.mts +3 -0
  54. package/dist/browser/Duration/index.d.mts.map +1 -0
  55. package/dist/browser/Duration/index.d.ts +3 -0
  56. package/dist/browser/Duration/index.d.ts.map +1 -0
  57. package/dist/browser/Duration/validation/index.d.cts +3 -0
  58. package/dist/browser/Duration/validation/index.d.cts.map +1 -0
  59. package/dist/browser/Duration/validation/index.d.mts +3 -0
  60. package/dist/browser/Duration/validation/index.d.mts.map +1 -0
  61. package/dist/browser/Duration/validation/index.d.ts +3 -0
  62. package/dist/browser/Duration/validation/index.d.ts.map +1 -0
  63. package/dist/browser/Duration/validation/validateBoundWitness.d.cts +3 -0
  64. package/dist/browser/Duration/validation/validateBoundWitness.d.cts.map +1 -0
  65. package/dist/browser/Duration/validation/validateBoundWitness.d.mts +3 -0
  66. package/dist/browser/Duration/validation/validateBoundWitness.d.mts.map +1 -0
  67. package/dist/browser/Duration/validation/validateBoundWitness.d.ts +3 -0
  68. package/dist/browser/Duration/validation/validateBoundWitness.d.ts.map +1 -0
  69. package/dist/browser/Duration/validation/validateBoundWitnessAndDuration.d.cts +5 -0
  70. package/dist/browser/Duration/validation/validateBoundWitnessAndDuration.d.cts.map +1 -0
  71. package/dist/browser/Duration/validation/validateBoundWitnessAndDuration.d.mts +5 -0
  72. package/dist/browser/Duration/validation/validateBoundWitnessAndDuration.d.mts.map +1 -0
  73. package/dist/browser/Duration/validation/validateBoundWitnessAndDuration.d.ts +5 -0
  74. package/dist/browser/Duration/validation/validateBoundWitnessAndDuration.d.ts.map +1 -0
  75. package/dist/browser/Duration/validation/validateBoundWitnessWithDuration.d.cts +5 -0
  76. package/dist/browser/Duration/validation/validateBoundWitnessWithDuration.d.cts.map +1 -0
  77. package/dist/browser/Duration/validation/validateBoundWitnessWithDuration.d.mts +5 -0
  78. package/dist/browser/Duration/validation/validateBoundWitnessWithDuration.d.mts.map +1 -0
  79. package/dist/browser/Duration/validation/validateBoundWitnessWithDuration.d.ts +5 -0
  80. package/dist/browser/Duration/validation/validateBoundWitnessWithDuration.d.ts.map +1 -0
  81. package/dist/browser/Duration/validation/validateDuration.d.cts +4 -0
  82. package/dist/browser/Duration/validation/validateDuration.d.cts.map +1 -0
  83. package/dist/browser/Duration/validation/validateDuration.d.mts +4 -0
  84. package/dist/browser/Duration/validation/validateDuration.d.mts.map +1 -0
  85. package/dist/browser/Duration/validation/validateDuration.d.ts +4 -0
  86. package/dist/browser/Duration/validation/validateDuration.d.ts.map +1 -0
  87. package/dist/browser/index.cjs +98 -0
  88. package/dist/browser/index.cjs.map +1 -0
  89. package/dist/browser/index.d.cts +5 -0
  90. package/dist/browser/index.d.cts.map +1 -0
  91. package/dist/browser/index.d.mts +5 -0
  92. package/dist/browser/index.d.mts.map +1 -0
  93. package/dist/browser/index.d.ts +5 -0
  94. package/dist/browser/index.d.ts.map +1 -0
  95. package/dist/browser/index.js +75 -0
  96. package/dist/browser/index.js.map +1 -0
  97. package/dist/node/Address/Payload.d.cts +22 -0
  98. package/dist/node/Address/Payload.d.cts.map +1 -0
  99. package/dist/node/Address/Payload.d.mts +22 -0
  100. package/dist/node/Address/Payload.d.mts.map +1 -0
  101. package/dist/node/Address/Payload.d.ts +22 -0
  102. package/dist/node/Address/Payload.d.ts.map +1 -0
  103. package/dist/node/Address/index.d.cts +2 -0
  104. package/dist/node/Address/index.d.cts.map +1 -0
  105. package/dist/node/Address/index.d.mts +2 -0
  106. package/dist/node/Address/index.d.mts.map +1 -0
  107. package/dist/node/Address/index.d.ts +2 -0
  108. package/dist/node/Address/index.d.ts.map +1 -0
  109. package/dist/node/Domain/Domain.d.cts +14 -0
  110. package/dist/node/Domain/Domain.d.cts.map +1 -0
  111. package/dist/node/Domain/Domain.d.mts +14 -0
  112. package/dist/node/Domain/Domain.d.mts.map +1 -0
  113. package/dist/node/Domain/Domain.d.ts +14 -0
  114. package/dist/node/Domain/Domain.d.ts.map +1 -0
  115. package/dist/node/Domain/DomainLease.d.cts +15 -0
  116. package/dist/node/Domain/DomainLease.d.cts.map +1 -0
  117. package/dist/node/Domain/DomainLease.d.mts +15 -0
  118. package/dist/node/Domain/DomainLease.d.mts.map +1 -0
  119. package/dist/node/Domain/DomainLease.d.ts +15 -0
  120. package/dist/node/Domain/DomainLease.d.ts.map +1 -0
  121. package/dist/node/Domain/index.d.cts +3 -0
  122. package/dist/node/Domain/index.d.cts.map +1 -0
  123. package/dist/node/Domain/index.d.mts +3 -0
  124. package/dist/node/Domain/index.d.mts.map +1 -0
  125. package/dist/node/Domain/index.d.ts +3 -0
  126. package/dist/node/Domain/index.d.ts.map +1 -0
  127. package/dist/node/DomainRegistration/Payload.d.cts +20 -0
  128. package/dist/node/DomainRegistration/Payload.d.cts.map +1 -0
  129. package/dist/node/DomainRegistration/Payload.d.mts +20 -0
  130. package/dist/node/DomainRegistration/Payload.d.mts.map +1 -0
  131. package/dist/node/DomainRegistration/Payload.d.ts +20 -0
  132. package/dist/node/DomainRegistration/Payload.d.ts.map +1 -0
  133. package/dist/node/DomainRegistration/index.d.cts +2 -0
  134. package/dist/node/DomainRegistration/index.d.cts.map +1 -0
  135. package/dist/node/DomainRegistration/index.d.mts +2 -0
  136. package/dist/node/DomainRegistration/index.d.mts.map +1 -0
  137. package/dist/node/DomainRegistration/index.d.ts +2 -0
  138. package/dist/node/DomainRegistration/index.d.ts.map +1 -0
  139. package/dist/node/Duration/Duration.d.cts +11 -0
  140. package/dist/node/Duration/Duration.d.cts.map +1 -0
  141. package/dist/node/Duration/Duration.d.mts +11 -0
  142. package/dist/node/Duration/Duration.d.mts.map +1 -0
  143. package/dist/node/Duration/Duration.d.ts +11 -0
  144. package/dist/node/Duration/Duration.d.ts.map +1 -0
  145. package/dist/node/Duration/index.d.cts +3 -0
  146. package/dist/node/Duration/index.d.cts.map +1 -0
  147. package/dist/node/Duration/index.d.mts +3 -0
  148. package/dist/node/Duration/index.d.mts.map +1 -0
  149. package/dist/node/Duration/index.d.ts +3 -0
  150. package/dist/node/Duration/index.d.ts.map +1 -0
  151. package/dist/node/Duration/validation/index.d.cts +3 -0
  152. package/dist/node/Duration/validation/index.d.cts.map +1 -0
  153. package/dist/node/Duration/validation/index.d.mts +3 -0
  154. package/dist/node/Duration/validation/index.d.mts.map +1 -0
  155. package/dist/node/Duration/validation/index.d.ts +3 -0
  156. package/dist/node/Duration/validation/index.d.ts.map +1 -0
  157. package/dist/node/Duration/validation/validateBoundWitness.d.cts +3 -0
  158. package/dist/node/Duration/validation/validateBoundWitness.d.cts.map +1 -0
  159. package/dist/node/Duration/validation/validateBoundWitness.d.mts +3 -0
  160. package/dist/node/Duration/validation/validateBoundWitness.d.mts.map +1 -0
  161. package/dist/node/Duration/validation/validateBoundWitness.d.ts +3 -0
  162. package/dist/node/Duration/validation/validateBoundWitness.d.ts.map +1 -0
  163. package/dist/node/Duration/validation/validateBoundWitnessAndDuration.d.cts +5 -0
  164. package/dist/node/Duration/validation/validateBoundWitnessAndDuration.d.cts.map +1 -0
  165. package/dist/node/Duration/validation/validateBoundWitnessAndDuration.d.mts +5 -0
  166. package/dist/node/Duration/validation/validateBoundWitnessAndDuration.d.mts.map +1 -0
  167. package/dist/node/Duration/validation/validateBoundWitnessAndDuration.d.ts +5 -0
  168. package/dist/node/Duration/validation/validateBoundWitnessAndDuration.d.ts.map +1 -0
  169. package/dist/node/Duration/validation/validateBoundWitnessWithDuration.d.cts +5 -0
  170. package/dist/node/Duration/validation/validateBoundWitnessWithDuration.d.cts.map +1 -0
  171. package/dist/node/Duration/validation/validateBoundWitnessWithDuration.d.mts +5 -0
  172. package/dist/node/Duration/validation/validateBoundWitnessWithDuration.d.mts.map +1 -0
  173. package/dist/node/Duration/validation/validateBoundWitnessWithDuration.d.ts +5 -0
  174. package/dist/node/Duration/validation/validateBoundWitnessWithDuration.d.ts.map +1 -0
  175. package/dist/node/Duration/validation/validateDuration.d.cts +4 -0
  176. package/dist/node/Duration/validation/validateDuration.d.cts.map +1 -0
  177. package/dist/node/Duration/validation/validateDuration.d.mts +4 -0
  178. package/dist/node/Duration/validation/validateDuration.d.mts.map +1 -0
  179. package/dist/node/Duration/validation/validateDuration.d.ts +4 -0
  180. package/dist/node/Duration/validation/validateDuration.d.ts.map +1 -0
  181. package/dist/node/index.cjs +109 -0
  182. package/dist/node/index.cjs.map +1 -0
  183. package/dist/node/index.d.cts +5 -0
  184. package/dist/node/index.d.cts.map +1 -0
  185. package/dist/node/index.d.mts +5 -0
  186. package/dist/node/index.d.mts.map +1 -0
  187. package/dist/node/index.d.ts +5 -0
  188. package/dist/node/index.d.ts.map +1 -0
  189. package/dist/node/index.js +75 -0
  190. package/dist/node/index.js.map +1 -0
  191. package/package.json +67 -0
  192. package/src/Address/Payload.ts +22 -0
  193. package/src/Address/index.ts +1 -0
  194. package/src/Domain/Domain.ts +16 -0
  195. package/src/Domain/DomainLease.ts +17 -0
  196. package/src/Domain/index.ts +2 -0
  197. package/src/DomainRegistration/Payload.ts +23 -0
  198. package/src/DomainRegistration/index.ts +1 -0
  199. package/src/Duration/Duration.ts +11 -0
  200. package/src/Duration/index.ts +2 -0
  201. package/src/Duration/validation/index.ts +2 -0
  202. package/src/Duration/validation/validateBoundWitness.ts +12 -0
  203. package/src/Duration/validation/validateBoundWitnessAndDuration.ts +23 -0
  204. package/src/Duration/validation/validateBoundWitnessWithDuration.ts +17 -0
  205. package/src/Duration/validation/validateDuration.ts +20 -0
  206. package/src/index.ts +4 -0
  207. package/typedoc.json +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/Address/Payload.ts","../../src/Domain/Domain.ts","../../src/Domain/DomainLease.ts","../../src/DomainRegistration/Payload.ts","../../src/Duration/validation/validateBoundWitness.ts","../../src/Duration/validation/validateBoundWitnessAndDuration.ts","../../src/Duration/validation/validateDuration.ts","../../src/Duration/validation/validateBoundWitnessWithDuration.ts"],"sourcesContent":["import { Address } from '@xylabs/hex'\nimport { isPayloadOfSchemaType, Payload, WithMeta } from '@xyo-network/payload-model'\n\nimport { DomainFields } from '../Domain'\n\nexport type AddressRecordSchema = 'network.xyo.ns.record.address'\nexport const AddressRecordSchema: AddressRecordSchema = 'network.xyo.ns.record.address'\n\nexport interface AddressRecordFields extends DomainFields {\n /**\n * The address the record points to\n */\n address: Address[]\n}\n\n/**\n * An address record points a domain to an address\n */\nexport type AddressRecord = Payload<AddressRecordFields, AddressRecordSchema>\n\nexport const isAddressRecord = isPayloadOfSchemaType<AddressRecord>(AddressRecordSchema)\nexport const isAddressRecordWithMeta = isPayloadOfSchemaType<WithMeta<AddressRecord>>(AddressRecordSchema)\n","import { Payload } from '@xyo-network/payload-model'\n\nexport type DomainSchema = 'network.xyo.ns.domain'\nexport const DomainSchema: DomainSchema = 'network.xyo.ns.domain'\n\nexport interface DomainFields {\n /**\n * The XNS domain of the record\n */\n domain: string\n}\n\n/**\n * A domain record is a record of a domain\n */\nexport type Domain = Payload<DomainFields, DomainSchema>\n","import { Payload } from '@xyo-network/payload-model'\n\nimport { DurationFields } from '../Duration'\nimport { DomainFields } from './Domain'\n\nexport type DomainLeaseSchema = 'network.xyo.ns.domain.lease'\nexport const DomainLeaseSchema: DomainLeaseSchema = 'network.xyo.ns.domain.lease'\n\n/**\n * A domain is leased for a duration\n */\nexport interface DomainLeaseFields extends DomainFields, DurationFields {}\n\n/**\n * A domain lease is a record of a domain and the duration it is leased for\n */\nexport type DomainLease = Payload<DomainLeaseFields, DomainLeaseSchema>\n","import { Address } from '@xylabs/hex'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { DomainLeaseFields, DomainSchema } from '../Domain'\n\nexport const DomainRegistrationSchema = `${DomainSchema}.registration` as const\nexport type DomainRegistrationSchema = typeof DomainRegistrationSchema\n\nexport interface DomainRegistrationFields extends DomainLeaseFields {\n /**\n * The registrant of the domain\n */\n registrant: Address[]\n /**\n * The registrar of the domain\n */\n registrar: Address[]\n}\n\n/**\n * A WHOIS record is a record of a domain identifying its registrant, registrar and nameservers\n */\nexport type DomainRegistration = Payload<DomainRegistrationFields, DomainRegistrationSchema>\n","import { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\n\n// BW Validations\nexport const validateBoundWitness = async (recordBw: BoundWitness, requiredSchemas: string[] = []): Promise<boolean> => {\n // If the BW does not include all of the required schemas\n if (!requiredSchemas.every((requiredSchema) => recordBw.payload_schemas.includes(requiredSchema))) return false\n // If the BW is valid (does not include any errors)\n const validator = new BoundWitnessValidator(recordBw)\n const errors = await validator.validate()\n return errors.length === 0\n}\n","import { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { DurationFields } from '../Duration'\n\n// BW & Record Validations\nexport const validateBoundWitnessAndDuration = async (recordBw: BoundWitness, recordPayload: Payload<DurationFields>): Promise<boolean> => {\n if (!(await recordIsInBoundWitness(recordBw, recordPayload))) return false\n if (!recordIsTemporallyValidToBoundWitness(recordBw, recordPayload)) return false\n return true\n}\n\nconst recordIsInBoundWitness = async (recordBw: BoundWitness, recordPayload: Payload): Promise<boolean> => {\n const hash = await PayloadBuilder.dataHash(recordPayload)\n return recordBw.payload_hashes.includes(hash)\n}\n\nconst recordIsTemporallyValidToBoundWitness = (recordBw: BoundWitness, recordPayload: Payload<DurationFields>): boolean => {\n const { timestamp } = recordBw\n const { exp } = recordPayload\n return exp > timestamp\n}\n","// import { isAddress } from '@xylabs/hex'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { DurationFields } from '../Duration'\n\n// Record Validations\nexport const validateDuration = (recordPayload: Payload<DurationFields>): boolean => {\n // if (!isValidAddress(recordPayload)) return false\n if (!isWithinDelegatedTimeframe(recordPayload)) return false\n return true\n}\n\n// const isValidAddress = (recordPayload: Payload<DomainLeaseFields>): boolean => {\n// return isAddress(recordPayload.nameserver, { prefix: false })\n// }\n\nconst isWithinDelegatedTimeframe = (recordPayload: Payload<DurationFields>, now = Date.now()): boolean => {\n // nbf < now < exp\n return recordPayload.nbf < now && now < recordPayload.exp\n}\n","import { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { DurationFields } from '../Duration'\nimport { validateBoundWitness } from './validateBoundWitness'\nimport { validateBoundWitnessAndDuration } from './validateBoundWitnessAndDuration'\nimport { validateDuration } from './validateDuration'\n\nexport const validateBoundWitnessWithDuration = async (recordBw: BoundWitness, recordPayload: Payload<DurationFields>): Promise<boolean> => {\n // Validate the BW\n if (!(await validateBoundWitness(recordBw, [recordPayload.schema]))) return false\n // Validate the record\n if (!validateDuration(recordPayload)) return false\n // Validate the record relative to the BW\n if (!(await validateBoundWitnessAndDuration(recordBw, recordPayload))) return false\n return true\n}\n"],"mappings":";AACA,SAAS,6BAAgD;AAKlD,IAAM,sBAA2C;AAcjD,IAAM,kBAAkB,sBAAqC,mBAAmB;AAChF,IAAM,0BAA0B,sBAA+C,mBAAmB;;;AClBlG,IAAM,eAA6B;;;ACGnC,IAAM,oBAAuC;;;ACD7C,IAAM,2BAA2B,GAAG,YAAY;;;ACJvD,SAAS,6BAA6B;AAG/B,IAAM,uBAAuB,OAAO,UAAwB,kBAA4B,CAAC,MAAwB;AAEtH,MAAI,CAAC,gBAAgB,MAAM,CAAC,mBAAmB,SAAS,gBAAgB,SAAS,cAAc,CAAC;AAAG,WAAO;AAE1G,QAAM,YAAY,IAAI,sBAAsB,QAAQ;AACpD,QAAM,SAAS,MAAM,UAAU,SAAS;AACxC,SAAO,OAAO,WAAW;AAC3B;;;ACVA,SAAS,sBAAsB;AAMxB,IAAM,kCAAkC,OAAO,UAAwB,kBAA6D;AACzI,MAAI,CAAE,MAAM,uBAAuB,UAAU,aAAa;AAAI,WAAO;AACrE,MAAI,CAAC,sCAAsC,UAAU,aAAa;AAAG,WAAO;AAC5E,SAAO;AACT;AAEA,IAAM,yBAAyB,OAAO,UAAwB,kBAA6C;AACzG,QAAM,OAAO,MAAM,eAAe,SAAS,aAAa;AACxD,SAAO,SAAS,eAAe,SAAS,IAAI;AAC9C;AAEA,IAAM,wCAAwC,CAAC,UAAwB,kBAAoD;AACzH,QAAM,EAAE,UAAU,IAAI;AACtB,QAAM,EAAE,IAAI,IAAI;AAChB,SAAO,MAAM;AACf;;;AChBO,IAAM,mBAAmB,CAAC,kBAAoD;AAEnF,MAAI,CAAC,2BAA2B,aAAa;AAAG,WAAO;AACvD,SAAO;AACT;AAMA,IAAM,6BAA6B,CAAC,eAAwC,MAAM,KAAK,IAAI,MAAe;AAExG,SAAO,cAAc,MAAM,OAAO,MAAM,cAAc;AACxD;;;ACXO,IAAM,mCAAmC,OAAO,UAAwB,kBAA6D;AAE1I,MAAI,CAAE,MAAM,qBAAqB,UAAU,CAAC,cAAc,MAAM,CAAC;AAAI,WAAO;AAE5E,MAAI,CAAC,iBAAiB,aAAa;AAAG,WAAO;AAE7C,MAAI,CAAE,MAAM,gCAAgC,UAAU,aAAa;AAAI,WAAO;AAC9E,SAAO;AACT;","names":[]}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@xyo-network/xns-record-payload-plugins",
3
+ "author": {
4
+ "email": "support@xyo.network",
5
+ "name": "XYO Development Team",
6
+ "url": "https://xyo.network"
7
+ },
8
+ "bugs": {
9
+ "email": "support@xyo.network",
10
+ "url": "https://github.com/XYOracleNetwork/plugins/issues"
11
+ },
12
+ "dependencies": {
13
+ "@xylabs/hex": "^3.0.15",
14
+ "@xyo-network/boundwitness-model": "^2.92.8",
15
+ "@xyo-network/boundwitness-validator": "^2.92.8",
16
+ "@xyo-network/payload-builder": "^2.92.8",
17
+ "@xyo-network/payload-model": "^2.92.8"
18
+ },
19
+ "devDependencies": {
20
+ "@xylabs/ts-scripts-yarn3": "^3.5.2",
21
+ "@xylabs/tsconfig": "^3.5.2",
22
+ "@xyo-network/account": "^2.92.8",
23
+ "@xyo-network/boundwitness-builder": "^2.92.8",
24
+ "typescript": "^5.4.2"
25
+ },
26
+ "description": "Typescript/Javascript Plugins for XYO Platform",
27
+ "exports": {
28
+ ".": {
29
+ "browser": {
30
+ "require": {
31
+ "types": "./dist/browser/index.d.cts",
32
+ "default": "./dist/browser/index.cjs"
33
+ },
34
+ "import": {
35
+ "types": "./dist/browser/index.d.mts",
36
+ "default": "./dist/browser/index.js"
37
+ }
38
+ },
39
+ "node": {
40
+ "require": {
41
+ "types": "./dist/node/index.d.cts",
42
+ "default": "./dist/node/index.cjs"
43
+ },
44
+ "import": {
45
+ "types": "./dist/node/index.d.mts",
46
+ "default": "./dist/node/index.js"
47
+ }
48
+ }
49
+ },
50
+ "./package.json": "./package.json"
51
+ },
52
+ "main": "dist/node/index.cjs",
53
+ "module": "dist/node/index.js",
54
+ "types": "dist/node/index.d.ts",
55
+ "homepage": "https://xyo.network",
56
+ "license": "LGPL-3.0-only",
57
+ "publishConfig": {
58
+ "access": "public"
59
+ },
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "https://github.com/XYOracleNetwork/plugins.git"
63
+ },
64
+ "sideEffects": false,
65
+ "version": "2.89.1",
66
+ "type": "module"
67
+ }
@@ -0,0 +1,22 @@
1
+ import { Address } from '@xylabs/hex'
2
+ import { isPayloadOfSchemaType, Payload, WithMeta } from '@xyo-network/payload-model'
3
+
4
+ import { DomainFields } from '../Domain'
5
+
6
+ export type AddressRecordSchema = 'network.xyo.ns.record.address'
7
+ export const AddressRecordSchema: AddressRecordSchema = 'network.xyo.ns.record.address'
8
+
9
+ export interface AddressRecordFields extends DomainFields {
10
+ /**
11
+ * The address the record points to
12
+ */
13
+ address: Address[]
14
+ }
15
+
16
+ /**
17
+ * An address record points a domain to an address
18
+ */
19
+ export type AddressRecord = Payload<AddressRecordFields, AddressRecordSchema>
20
+
21
+ export const isAddressRecord = isPayloadOfSchemaType<AddressRecord>(AddressRecordSchema)
22
+ export const isAddressRecordWithMeta = isPayloadOfSchemaType<WithMeta<AddressRecord>>(AddressRecordSchema)
@@ -0,0 +1 @@
1
+ export * from './Payload'
@@ -0,0 +1,16 @@
1
+ import { Payload } from '@xyo-network/payload-model'
2
+
3
+ export type DomainSchema = 'network.xyo.ns.domain'
4
+ export const DomainSchema: DomainSchema = 'network.xyo.ns.domain'
5
+
6
+ export interface DomainFields {
7
+ /**
8
+ * The XNS domain of the record
9
+ */
10
+ domain: string
11
+ }
12
+
13
+ /**
14
+ * A domain record is a record of a domain
15
+ */
16
+ export type Domain = Payload<DomainFields, DomainSchema>
@@ -0,0 +1,17 @@
1
+ import { Payload } from '@xyo-network/payload-model'
2
+
3
+ import { DurationFields } from '../Duration'
4
+ import { DomainFields } from './Domain'
5
+
6
+ export type DomainLeaseSchema = 'network.xyo.ns.domain.lease'
7
+ export const DomainLeaseSchema: DomainLeaseSchema = 'network.xyo.ns.domain.lease'
8
+
9
+ /**
10
+ * A domain is leased for a duration
11
+ */
12
+ export interface DomainLeaseFields extends DomainFields, DurationFields {}
13
+
14
+ /**
15
+ * A domain lease is a record of a domain and the duration it is leased for
16
+ */
17
+ export type DomainLease = Payload<DomainLeaseFields, DomainLeaseSchema>
@@ -0,0 +1,2 @@
1
+ export * from './Domain'
2
+ export * from './DomainLease'
@@ -0,0 +1,23 @@
1
+ import { Address } from '@xylabs/hex'
2
+ import { Payload } from '@xyo-network/payload-model'
3
+
4
+ import { DomainLeaseFields, DomainSchema } from '../Domain'
5
+
6
+ export const DomainRegistrationSchema = `${DomainSchema}.registration` as const
7
+ export type DomainRegistrationSchema = typeof DomainRegistrationSchema
8
+
9
+ export interface DomainRegistrationFields extends DomainLeaseFields {
10
+ /**
11
+ * The registrant of the domain
12
+ */
13
+ registrant: Address[]
14
+ /**
15
+ * The registrar of the domain
16
+ */
17
+ registrar: Address[]
18
+ }
19
+
20
+ /**
21
+ * A WHOIS record is a record of a domain identifying its registrant, registrar and nameservers
22
+ */
23
+ export type DomainRegistration = Payload<DomainRegistrationFields, DomainRegistrationSchema>
@@ -0,0 +1 @@
1
+ export * from './Payload'
@@ -0,0 +1,11 @@
1
+ export interface DurationFields {
2
+ /**
3
+ * A timestamp that indicates the expiration time of the record
4
+ */
5
+ exp: number
6
+
7
+ /**
8
+ * A timestamp that indicates the time before which the record is not valid
9
+ */
10
+ nbf: number
11
+ }
@@ -0,0 +1,2 @@
1
+ export * from './Duration'
2
+ export * from './validation'
@@ -0,0 +1,2 @@
1
+ export * from './validateBoundWitnessWithDuration'
2
+ export * from './validateDuration'
@@ -0,0 +1,12 @@
1
+ import { BoundWitness } from '@xyo-network/boundwitness-model'
2
+ import { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'
3
+
4
+ // BW Validations
5
+ export const validateBoundWitness = async (recordBw: BoundWitness, requiredSchemas: string[] = []): Promise<boolean> => {
6
+ // If the BW does not include all of the required schemas
7
+ if (!requiredSchemas.every((requiredSchema) => recordBw.payload_schemas.includes(requiredSchema))) return false
8
+ // If the BW is valid (does not include any errors)
9
+ const validator = new BoundWitnessValidator(recordBw)
10
+ const errors = await validator.validate()
11
+ return errors.length === 0
12
+ }
@@ -0,0 +1,23 @@
1
+ import { BoundWitness } from '@xyo-network/boundwitness-model'
2
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
3
+ import { Payload } from '@xyo-network/payload-model'
4
+
5
+ import { DurationFields } from '../Duration'
6
+
7
+ // BW & Record Validations
8
+ export const validateBoundWitnessAndDuration = async (recordBw: BoundWitness, recordPayload: Payload<DurationFields>): Promise<boolean> => {
9
+ if (!(await recordIsInBoundWitness(recordBw, recordPayload))) return false
10
+ if (!recordIsTemporallyValidToBoundWitness(recordBw, recordPayload)) return false
11
+ return true
12
+ }
13
+
14
+ const recordIsInBoundWitness = async (recordBw: BoundWitness, recordPayload: Payload): Promise<boolean> => {
15
+ const hash = await PayloadBuilder.dataHash(recordPayload)
16
+ return recordBw.payload_hashes.includes(hash)
17
+ }
18
+
19
+ const recordIsTemporallyValidToBoundWitness = (recordBw: BoundWitness, recordPayload: Payload<DurationFields>): boolean => {
20
+ const { timestamp } = recordBw
21
+ const { exp } = recordPayload
22
+ return exp > timestamp
23
+ }
@@ -0,0 +1,17 @@
1
+ import { BoundWitness } from '@xyo-network/boundwitness-model'
2
+ import { Payload } from '@xyo-network/payload-model'
3
+
4
+ import { DurationFields } from '../Duration'
5
+ import { validateBoundWitness } from './validateBoundWitness'
6
+ import { validateBoundWitnessAndDuration } from './validateBoundWitnessAndDuration'
7
+ import { validateDuration } from './validateDuration'
8
+
9
+ export const validateBoundWitnessWithDuration = async (recordBw: BoundWitness, recordPayload: Payload<DurationFields>): Promise<boolean> => {
10
+ // Validate the BW
11
+ if (!(await validateBoundWitness(recordBw, [recordPayload.schema]))) return false
12
+ // Validate the record
13
+ if (!validateDuration(recordPayload)) return false
14
+ // Validate the record relative to the BW
15
+ if (!(await validateBoundWitnessAndDuration(recordBw, recordPayload))) return false
16
+ return true
17
+ }
@@ -0,0 +1,20 @@
1
+ // import { isAddress } from '@xylabs/hex'
2
+ import { Payload } from '@xyo-network/payload-model'
3
+
4
+ import { DurationFields } from '../Duration'
5
+
6
+ // Record Validations
7
+ export const validateDuration = (recordPayload: Payload<DurationFields>): boolean => {
8
+ // if (!isValidAddress(recordPayload)) return false
9
+ if (!isWithinDelegatedTimeframe(recordPayload)) return false
10
+ return true
11
+ }
12
+
13
+ // const isValidAddress = (recordPayload: Payload<DomainLeaseFields>): boolean => {
14
+ // return isAddress(recordPayload.nameserver, { prefix: false })
15
+ // }
16
+
17
+ const isWithinDelegatedTimeframe = (recordPayload: Payload<DurationFields>, now = Date.now()): boolean => {
18
+ // nbf < now < exp
19
+ return recordPayload.nbf < now && now < recordPayload.exp
20
+ }
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './Address'
2
+ export * from './Domain'
3
+ export * from './DomainRegistration'
4
+ export * from './Duration'
package/typedoc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://typedoc.org/schema.json",
3
+ "entryPoints": ["./src/index.ts"],
4
+ "tsconfig": "./tsconfig.typedoc.json"
5
+ }