@xyo-network/api 2.38.0-rc.8 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/cjs/Archivist/Addresses/Address/Api.d.ts +8 -0
  2. package/dist/cjs/Archivist/Addresses/Address/Api.d.ts.map +1 -0
  3. package/dist/cjs/Archivist/Addresses/Address/Api.js +11 -0
  4. package/dist/cjs/Archivist/Addresses/Address/Api.js.map +1 -0
  5. package/dist/cjs/Archivist/Addresses/Address/index.d.ts +2 -0
  6. package/dist/cjs/Archivist/Addresses/Address/index.d.ts.map +1 -0
  7. package/dist/cjs/Archivist/Addresses/Address/index.js +5 -0
  8. package/dist/cjs/Archivist/Addresses/Address/index.js.map +1 -0
  9. package/dist/cjs/Archivist/Addresses/Api.d.ts +8 -0
  10. package/dist/cjs/Archivist/Addresses/Api.d.ts.map +1 -0
  11. package/dist/cjs/Archivist/Addresses/Api.js +12 -0
  12. package/dist/cjs/Archivist/Addresses/Api.js.map +1 -0
  13. package/dist/cjs/Archivist/Addresses/ModuleDescription.d.ts +5 -0
  14. package/dist/cjs/Archivist/Addresses/ModuleDescription.d.ts.map +1 -0
  15. package/dist/cjs/Archivist/Addresses/ModuleDescription.js +3 -0
  16. package/dist/cjs/Archivist/Addresses/ModuleDescription.js.map +1 -0
  17. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.d.ts +5 -0
  18. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.d.ts.map +1 -0
  19. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.js +3 -0
  20. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.js.map +1 -0
  21. package/dist/cjs/Archivist/Addresses/index.d.ts +4 -0
  22. package/dist/cjs/Archivist/Addresses/index.d.ts.map +1 -0
  23. package/dist/cjs/Archivist/Addresses/index.js +7 -0
  24. package/dist/cjs/Archivist/Addresses/index.js.map +1 -0
  25. package/dist/cjs/Archivist/Api.d.ts +3 -0
  26. package/dist/cjs/Archivist/Api.d.ts.map +1 -1
  27. package/dist/cjs/Archivist/Api.js +7 -0
  28. package/dist/cjs/Archivist/Api.js.map +1 -1
  29. package/dist/cjs/Archivist/XyoRemoteArchivist.d.ts +1 -1
  30. package/dist/cjs/Archivist/XyoRemoteArchivist.d.ts.map +1 -1
  31. package/dist/cjs/Archivist/XyoRemoteArchivist.js.map +1 -1
  32. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts +12 -0
  33. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts.map +1 -0
  34. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js +7 -0
  35. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js.map +1 -0
  36. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts +14 -0
  37. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts.map +1 -0
  38. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js +59 -0
  39. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js.map +1 -0
  40. package/dist/cjs/Diviner/AddressHistoryDiviner/index.d.ts +3 -0
  41. package/dist/cjs/Diviner/AddressHistoryDiviner/index.d.ts.map +1 -0
  42. package/dist/cjs/Diviner/AddressHistoryDiviner/index.js +6 -0
  43. package/dist/cjs/Diviner/AddressHistoryDiviner/index.js.map +1 -0
  44. package/dist/cjs/Diviner/RemoteDivinerError.d.ts +6 -0
  45. package/dist/cjs/Diviner/RemoteDivinerError.d.ts.map +1 -0
  46. package/dist/cjs/Diviner/RemoteDivinerError.js +14 -0
  47. package/dist/cjs/Diviner/RemoteDivinerError.js.map +1 -0
  48. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.d.ts +10 -0
  49. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.d.ts.map +1 -0
  50. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.js +5 -0
  51. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.js.map +1 -0
  52. package/dist/cjs/Diviner/index.d.ts +1 -0
  53. package/dist/cjs/Diviner/index.d.ts.map +1 -1
  54. package/dist/cjs/Diviner/index.js +1 -0
  55. package/dist/cjs/Diviner/index.js.map +1 -1
  56. package/dist/docs.json +9990 -6285
  57. package/dist/esm/Archivist/Addresses/Address/Api.d.ts +8 -0
  58. package/dist/esm/Archivist/Addresses/Address/Api.d.ts.map +1 -0
  59. package/dist/esm/Archivist/Addresses/Address/Api.js +10 -0
  60. package/dist/esm/Archivist/Addresses/Address/Api.js.map +1 -0
  61. package/dist/esm/Archivist/Addresses/Address/index.d.ts +2 -0
  62. package/dist/esm/Archivist/Addresses/Address/index.d.ts.map +1 -0
  63. package/dist/esm/Archivist/Addresses/Address/index.js +2 -0
  64. package/dist/esm/Archivist/Addresses/Address/index.js.map +1 -0
  65. package/dist/esm/Archivist/Addresses/Api.d.ts +8 -0
  66. package/dist/esm/Archivist/Addresses/Api.d.ts.map +1 -0
  67. package/dist/esm/Archivist/Addresses/Api.js +11 -0
  68. package/dist/esm/Archivist/Addresses/Api.js.map +1 -0
  69. package/dist/esm/Archivist/Addresses/ModuleDescription.d.ts +5 -0
  70. package/dist/esm/Archivist/Addresses/ModuleDescription.d.ts.map +1 -0
  71. package/dist/esm/Archivist/Addresses/ModuleDescription.js +2 -0
  72. package/dist/esm/Archivist/Addresses/ModuleDescription.js.map +1 -0
  73. package/dist/esm/Archivist/Addresses/NodeModuleDescription.d.ts +5 -0
  74. package/dist/esm/Archivist/Addresses/NodeModuleDescription.d.ts.map +1 -0
  75. package/dist/esm/Archivist/Addresses/NodeModuleDescription.js +2 -0
  76. package/dist/esm/Archivist/Addresses/NodeModuleDescription.js.map +1 -0
  77. package/dist/esm/Archivist/Addresses/index.d.ts +4 -0
  78. package/dist/esm/Archivist/Addresses/index.d.ts.map +1 -0
  79. package/dist/esm/Archivist/Addresses/index.js +4 -0
  80. package/dist/esm/Archivist/Addresses/index.js.map +1 -0
  81. package/dist/esm/Archivist/Api.d.ts +3 -0
  82. package/dist/esm/Archivist/Api.d.ts.map +1 -1
  83. package/dist/esm/Archivist/Api.js +11 -0
  84. package/dist/esm/Archivist/Api.js.map +1 -1
  85. package/dist/esm/Archivist/XyoRemoteArchivist.d.ts +1 -1
  86. package/dist/esm/Archivist/XyoRemoteArchivist.d.ts.map +1 -1
  87. package/dist/esm/Archivist/XyoRemoteArchivist.js.map +1 -1
  88. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts +12 -0
  89. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts.map +1 -0
  90. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js +3 -0
  91. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js.map +1 -0
  92. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts +14 -0
  93. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts.map +1 -0
  94. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js +48 -0
  95. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js.map +1 -0
  96. package/dist/esm/Diviner/AddressHistoryDiviner/index.d.ts +3 -0
  97. package/dist/esm/Diviner/AddressHistoryDiviner/index.d.ts.map +1 -0
  98. package/dist/esm/Diviner/AddressHistoryDiviner/index.js +3 -0
  99. package/dist/esm/Diviner/AddressHistoryDiviner/index.js.map +1 -0
  100. package/dist/esm/Diviner/RemoteDivinerError.d.ts +6 -0
  101. package/dist/esm/Diviner/RemoteDivinerError.d.ts.map +1 -0
  102. package/dist/esm/Diviner/RemoteDivinerError.js +10 -0
  103. package/dist/esm/Diviner/RemoteDivinerError.js.map +1 -0
  104. package/dist/esm/Diviner/XyoRemoteDivinerConfig.d.ts +10 -0
  105. package/dist/esm/Diviner/XyoRemoteDivinerConfig.d.ts.map +1 -0
  106. package/dist/esm/Diviner/XyoRemoteDivinerConfig.js +2 -0
  107. package/dist/esm/Diviner/XyoRemoteDivinerConfig.js.map +1 -0
  108. package/dist/esm/Diviner/index.d.ts +1 -0
  109. package/dist/esm/Diviner/index.d.ts.map +1 -1
  110. package/dist/esm/Diviner/index.js +1 -0
  111. package/dist/esm/Diviner/index.js.map +1 -1
  112. package/package.json +9 -9
  113. package/src/Archivist/Addresses/Address/Api.spec.ts +77 -0
  114. package/src/Archivist/Addresses/Address/Api.ts +14 -0
  115. package/src/Archivist/Addresses/Address/index.ts +1 -0
  116. package/src/Archivist/Addresses/Api.spec.ts +45 -0
  117. package/src/Archivist/Addresses/Api.ts +13 -0
  118. package/src/Archivist/Addresses/ModuleDescription.ts +4 -0
  119. package/src/Archivist/Addresses/NodeModuleDescription.ts +5 -0
  120. package/src/Archivist/Addresses/index.ts +3 -0
  121. package/src/Archivist/Api.ts +12 -0
  122. package/src/Archivist/XyoRemoteArchivist.ts +2 -2
  123. package/src/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.ts +11 -0
  124. package/src/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.spec.ts +81 -0
  125. package/src/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.ts +52 -0
  126. package/src/Diviner/AddressHistoryDiviner/index.ts +2 -0
  127. package/src/Diviner/RemoteDivinerError.ts +9 -0
  128. package/src/Diviner/XyoRemoteDivinerConfig.ts +12 -0
  129. package/src/Diviner/index.ts +1 -0
@@ -0,0 +1,13 @@
1
+ import { XyoApiConfig } from '../../models'
2
+ import { XyoApiSimple } from '../../Simple'
3
+ import { XyoAddressApi } from './Address'
4
+ import { NodeModuleDescription } from './NodeModuleDescription'
5
+
6
+ export class XyoAddressesApi<C extends XyoApiConfig = XyoApiConfig> extends XyoApiSimple<NodeModuleDescription[], C> {
7
+ public address(address: string): XyoAddressApi {
8
+ return new XyoAddressApi({
9
+ ...this.config,
10
+ root: `${this.root}${address}/`,
11
+ })
12
+ }
13
+ }
@@ -0,0 +1,4 @@
1
+ export interface ModuleDescription {
2
+ address: string
3
+ queries: string[]
4
+ }
@@ -0,0 +1,5 @@
1
+ import { ModuleDescription } from './ModuleDescription'
2
+
3
+ export interface NodeModuleDescription extends ModuleDescription {
4
+ url: string
5
+ }
@@ -0,0 +1,3 @@
1
+ export * from './Api'
2
+ export * from './ModuleDescription'
3
+ export * from './NodeModuleDescription'
@@ -8,11 +8,23 @@ import { XyoApiResponseBody, XyoApiResponseTuple, XyoApiResponseTupleOrBody, Xyo
8
8
  import { XyoApiSimple } from '../Simple'
9
9
  import { XyoUserApi } from '../User'
10
10
  import { XyoAccountApi } from './Account'
11
+ import { XyoAddressesApi } from './Addresses'
11
12
  import { XyoArchivistArchiveApi } from './Archive'
12
13
  import { XyoArchivistArchivesApi } from './Archives'
13
14
  import { XyoArchivistNodeApi } from './Node'
14
15
 
15
16
  export class XyoArchivistApi extends XyoApiBase {
17
+ private _addresses?: XyoAddressesApi
18
+ public get addresses(): XyoAddressesApi {
19
+ this._addresses =
20
+ this._addresses ??
21
+ new XyoAddressesApi({
22
+ ...this.config,
23
+ root: `${this.root}address/`,
24
+ })
25
+ return this._addresses
26
+ }
27
+
16
28
  private _archives?: XyoArchivistArchivesApi
17
29
  public get archives(): XyoArchivistArchivesApi {
18
30
  this._archives =
@@ -9,8 +9,8 @@ import { XyoRemoteArchivistConfig } from './XyoRemoteArchivistConfig'
9
9
 
10
10
  /** @description Archivist Context that connects to a remote archivist using the API */
11
11
  export class XyoRemoteArchivist extends XyoArchivist<XyoRemoteArchivistConfig> {
12
- static override async create(params?: XyoModuleParams): Promise<XyoRemoteArchivist> {
13
- const module = new XyoRemoteArchivist(params as XyoModuleParams<XyoRemoteArchivistConfig>)
12
+ static override async create(params?: XyoModuleParams<XyoRemoteArchivistConfig>): Promise<XyoRemoteArchivist> {
13
+ const module = new XyoRemoteArchivist(params)
14
14
  await module.start()
15
15
  return module
16
16
  }
@@ -0,0 +1,11 @@
1
+ import { XyoDiviner } from '@xyo-network/diviner'
2
+ import { XyoQuery } from '@xyo-network/module'
3
+ import { XyoPayload, XyoPayloadFindFilter } from '@xyo-network/payload'
4
+
5
+ export type AddressHistoryQuerySchema = 'network.xyo.diviner.address.query'
6
+ export const AddressHistoryQuerySchema: AddressHistoryQuerySchema = 'network.xyo.diviner.address.query'
7
+
8
+ export type AddressHistoryQueryPayload = XyoQuery<{ address: string; schema: AddressHistoryQuerySchema } & XyoPayloadFindFilter>
9
+ export const isAddressHistoryQueryPayload = (x?: XyoPayload | null): x is AddressHistoryQueryPayload => x?.schema === AddressHistoryQuerySchema
10
+
11
+ export type AddressHistoryDiviner = XyoDiviner
@@ -0,0 +1,81 @@
1
+ import { XyoAccount } from '@xyo-network/account'
2
+ import { BoundWitnessWrapper, XyoBoundWitness, XyoBoundWitnessSchema } from '@xyo-network/boundwitness'
3
+ import { XyoDivinerWrapper } from '@xyo-network/diviner'
4
+ import { XyoPayloadBuilder } from '@xyo-network/payload'
5
+
6
+ import { XyoArchivistApi } from '../../Archivist'
7
+ import { XyoApiConfig } from '../../models'
8
+ import { XyoRemoteDivinerConfig, XyoRemoteDivinerConfigSchema } from '../XyoRemoteDivinerConfig'
9
+ import { AddressHistoryQuerySchema } from './AddressHistoryDiviner'
10
+ import { XyoRemoteAddressHistoryDiviner } from './XyoRemoteAddressHistoryDiviner'
11
+
12
+ const configData: XyoApiConfig = {
13
+ apiDomain: process.env.API_DOMAIN || 'https://beta.api.archivist.xyo.network',
14
+ onError: (error) => console.error(`Error: ${JSON.stringify(error)}`),
15
+ onFailure: (response) => response, //console.error(`Failure: ${response.statusText} [${response.status}] [${JSON.stringify(response.data)}]`),
16
+ onSuccess: (response) => response, //console.log(`Success: ${response.statusText} [${response.status}] [${JSON.stringify(response.data)}]`),
17
+ }
18
+
19
+ describe('XyoRemoteAddressHistoryDiviner', () => {
20
+ const address = new XyoAccount({ phrase: 'test' }).addressValue.hex
21
+ const api = new XyoArchivistApi(configData)
22
+ let diviner: XyoRemoteAddressHistoryDiviner
23
+ beforeAll(async () => {
24
+ diviner = await XyoRemoteAddressHistoryDiviner.create({ config: { api, schema: XyoRemoteDivinerConfigSchema } as XyoRemoteDivinerConfig })
25
+ })
26
+
27
+ describe('with valid address returns', () => {
28
+ let result: XyoBoundWitness[]
29
+ beforeAll(async () => {
30
+ const source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address }).build()
31
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
32
+ expect(result.length).toBeGreaterThan(0)
33
+ })
34
+ it('array of Bound Witnesses', () => {
35
+ result.map((bw) => {
36
+ expect(bw.schema).toBe(XyoBoundWitnessSchema)
37
+ })
38
+ })
39
+ it('from address', () => {
40
+ expect(result.length).toBeGreaterThan(0)
41
+ result.map((bw) => {
42
+ expect(bw.addresses).toContain(address)
43
+ })
44
+ })
45
+ })
46
+ describe('with hash offset returns', () => {
47
+ let result: XyoBoundWitness[]
48
+ let hash: string
49
+ beforeAll(async () => {
50
+ let source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address }).build()
51
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
52
+ expect(result.length).toBeGreaterThan(0)
53
+ hash = new BoundWitnessWrapper(result?.[0]).hash
54
+ source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address, offset: hash }).build()
55
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
56
+ expect(result.length).toBeGreaterThan(0)
57
+ })
58
+ it('results starting at hash', () => {
59
+ expect(new BoundWitnessWrapper(result?.[0]).hash).toBe(hash)
60
+ })
61
+ })
62
+ describe('with limit returns', () => {
63
+ const limit = 1
64
+ let result: XyoBoundWitness[]
65
+ beforeAll(async () => {
66
+ const source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address, limit }).build()
67
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
68
+ expect(result.length).toBeGreaterThan(0)
69
+ })
70
+ it('number of results specified by the limit', () => {
71
+ expect(result.length).toBe(limit)
72
+ })
73
+ })
74
+ describe('with non-existent address', () => {
75
+ it('returns empty array', async () => {
76
+ const source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address: 'foo' }).build()
77
+ const result = await new XyoDivinerWrapper(diviner).divine([source])
78
+ expect(result.length).toBe(0)
79
+ })
80
+ })
81
+ })
@@ -0,0 +1,52 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
3
+ import { XyoDiviner, XyoDivinerDivineQuerySchema } from '@xyo-network/diviner'
4
+ import { XyoModuleParams } from '@xyo-network/module'
5
+ import { XyoPayloads } from '@xyo-network/payload'
6
+
7
+ import { RemoteDivinerError } from '../RemoteDivinerError'
8
+ import { XyoRemoteDivinerConfig } from '../XyoRemoteDivinerConfig'
9
+ import { AddressHistoryDiviner, isAddressHistoryQueryPayload } from './AddressHistoryDiviner'
10
+
11
+ /** @description Diviner Context that connects to a remote Diviner using the API */
12
+ export class XyoRemoteAddressHistoryDiviner extends XyoDiviner<XyoRemoteDivinerConfig> implements AddressHistoryDiviner {
13
+ static override async create(params?: XyoModuleParams<XyoRemoteDivinerConfig>): Promise<XyoRemoteAddressHistoryDiviner> {
14
+ const module = new XyoRemoteAddressHistoryDiviner(params)
15
+ await module.start()
16
+ return module
17
+ }
18
+
19
+ public get api() {
20
+ return assertEx(this.config?.api, 'API not defined')
21
+ }
22
+
23
+ public override queries() {
24
+ return [XyoDivinerDivineQuerySchema, ...super.queries()]
25
+ }
26
+
27
+ public override async divine(payloads?: XyoPayloads): Promise<XyoBoundWitness[]> {
28
+ if (!payloads) return []
29
+ try {
30
+ const query = payloads.find(isAddressHistoryQueryPayload)
31
+ if (!query) return []
32
+ const { address, limit, offset } = query
33
+ const find: { limit?: number; offset?: string } = {}
34
+ if (limit) find.limit = limit
35
+ if (offset) find.offset = `${offset}`
36
+ const [data, body, response] =
37
+ Object.keys(find).length > 0
38
+ ? await this.api.addresses.address(address).boundWitnesses.find(find, 'tuple')
39
+ : await this.api.addresses.address(address).boundWitnesses.get('tuple')
40
+ if (response?.status >= 400) {
41
+ throw new RemoteDivinerError('divine', `${response.statusText} [${response.status}]`)
42
+ }
43
+ if (body?.error?.length) {
44
+ throw new RemoteDivinerError('divine', body?.error)
45
+ }
46
+ return data || []
47
+ } catch (ex) {
48
+ console.error(ex)
49
+ throw ex
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,2 @@
1
+ export * from './AddressHistoryDiviner'
2
+ export * from './XyoRemoteAddressHistoryDiviner'
@@ -0,0 +1,9 @@
1
+ export class RemoteDivinerError extends Error {
2
+ constructor(action: string, error: Error['cause'], message?: string) {
3
+ super(`Remote Diviner [${action}] failed${message ? ` (${message})` : ''}`, { cause: error })
4
+ }
5
+ isRemoteDivinerError = true
6
+ static isRemoteDivinerError(error: unknown): RemoteDivinerError | undefined {
7
+ return (error as RemoteDivinerError).isRemoteDivinerError ? (error as RemoteDivinerError) : undefined
8
+ }
9
+ }
@@ -0,0 +1,12 @@
1
+ import { XyoDivinerConfig } from '@xyo-network/diviner'
2
+
3
+ import { XyoArchivistApi } from '../Archivist'
4
+
5
+ export type XyoRemoteDivinerConfigSchema = 'network.xyo.diviner.remote.config'
6
+ export const XyoRemoteDivinerConfigSchema: XyoRemoteDivinerConfigSchema = 'network.xyo.diviner.remote.config'
7
+
8
+ export type XyoRemoteDivinerConfig = XyoDivinerConfig & {
9
+ schema: XyoRemoteDivinerConfigSchema
10
+ api?: XyoArchivistApi
11
+ archive?: string
12
+ }
@@ -1 +1,2 @@
1
+ export * from './AddressHistoryDiviner'
1
2
  export * from './LocationDiviner'