@xyo-network/api 2.37.5 → 2.37.7

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 (157) hide show
  1. package/dist/cjs/Archivist/Account/Api.d.ts +2 -2
  2. package/dist/cjs/Archivist/Account/Api.d.ts.map +1 -1
  3. package/dist/cjs/Archivist/Addresses/Address/Api.d.ts +8 -0
  4. package/dist/cjs/Archivist/Addresses/Address/Api.d.ts.map +1 -0
  5. package/dist/cjs/Archivist/Addresses/Address/Api.js +11 -0
  6. package/dist/cjs/Archivist/Addresses/Address/Api.js.map +1 -0
  7. package/dist/cjs/Archivist/Addresses/Address/index.d.ts +2 -0
  8. package/dist/cjs/Archivist/Addresses/Address/index.d.ts.map +1 -0
  9. package/dist/cjs/Archivist/Addresses/Address/index.js +5 -0
  10. package/dist/cjs/Archivist/Addresses/Address/index.js.map +1 -0
  11. package/dist/cjs/Archivist/Addresses/Api.d.ts +8 -0
  12. package/dist/cjs/Archivist/Addresses/Api.d.ts.map +1 -0
  13. package/dist/cjs/Archivist/Addresses/Api.js +12 -0
  14. package/dist/cjs/Archivist/Addresses/Api.js.map +1 -0
  15. package/dist/cjs/Archivist/Addresses/ModuleDescription.d.ts +5 -0
  16. package/dist/cjs/Archivist/Addresses/ModuleDescription.d.ts.map +1 -0
  17. package/dist/cjs/Archivist/Addresses/ModuleDescription.js +3 -0
  18. package/dist/cjs/Archivist/Addresses/ModuleDescription.js.map +1 -0
  19. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.d.ts +5 -0
  20. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.d.ts.map +1 -0
  21. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.js +3 -0
  22. package/dist/cjs/Archivist/Addresses/NodeModuleDescription.js.map +1 -0
  23. package/dist/cjs/Archivist/Addresses/index.d.ts +4 -0
  24. package/dist/cjs/Archivist/Addresses/index.d.ts.map +1 -0
  25. package/dist/cjs/Archivist/Addresses/index.js +7 -0
  26. package/dist/cjs/Archivist/Addresses/index.js.map +1 -0
  27. package/dist/cjs/Archivist/Api.d.ts +5 -2
  28. package/dist/cjs/Archivist/Api.d.ts.map +1 -1
  29. package/dist/cjs/Archivist/Api.js +7 -0
  30. package/dist/cjs/Archivist/Api.js.map +1 -1
  31. package/dist/cjs/Archivist/Archive/Settings/Key/Api.d.ts +1 -1
  32. package/dist/cjs/Archivist/Payload/Api.d.ts +1 -2
  33. package/dist/cjs/Archivist/Payload/Api.d.ts.map +1 -1
  34. package/dist/cjs/Archivist/Payload/Api.js.map +1 -1
  35. package/dist/cjs/Archivist/Payload/Schema/Api.d.ts +1 -1
  36. package/dist/cjs/Archivist/Payload/Schema/Api.d.ts.map +1 -1
  37. package/dist/cjs/Archivist/XyoRemoteArchivist.d.ts +2 -2
  38. package/dist/cjs/Archivist/XyoRemoteArchivist.d.ts.map +1 -1
  39. package/dist/cjs/Archivist/XyoRemoteArchivist.js.map +1 -1
  40. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts +12 -0
  41. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts.map +1 -0
  42. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js +7 -0
  43. package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js.map +1 -0
  44. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts +12 -0
  45. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts.map +1 -0
  46. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js +52 -0
  47. package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js.map +1 -0
  48. package/dist/cjs/Diviner/AddressHistoryDiviner/index.d.ts +3 -0
  49. package/dist/cjs/Diviner/AddressHistoryDiviner/index.d.ts.map +1 -0
  50. package/dist/cjs/Diviner/AddressHistoryDiviner/index.js +6 -0
  51. package/dist/cjs/Diviner/AddressHistoryDiviner/index.js.map +1 -0
  52. package/dist/cjs/Diviner/RemoteDivinerError.d.ts +6 -0
  53. package/dist/cjs/Diviner/RemoteDivinerError.d.ts.map +1 -0
  54. package/dist/cjs/Diviner/RemoteDivinerError.js +14 -0
  55. package/dist/cjs/Diviner/RemoteDivinerError.js.map +1 -0
  56. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.d.ts +10 -0
  57. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.d.ts.map +1 -0
  58. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.js +5 -0
  59. package/dist/cjs/Diviner/XyoRemoteDivinerConfig.js.map +1 -0
  60. package/dist/cjs/Diviner/index.d.ts +1 -0
  61. package/dist/cjs/Diviner/index.d.ts.map +1 -1
  62. package/dist/cjs/Diviner/index.js +1 -0
  63. package/dist/cjs/Diviner/index.js.map +1 -1
  64. package/dist/cjs/Simple.d.ts +1 -2
  65. package/dist/cjs/Simple.d.ts.map +1 -1
  66. package/dist/cjs/Simple.js.map +1 -1
  67. package/dist/cjs/User/Api.d.ts +2 -2
  68. package/dist/cjs/User/Api.d.ts.map +1 -1
  69. package/dist/docs.json +10378 -6974
  70. package/dist/esm/Archivist/Account/Api.d.ts +2 -2
  71. package/dist/esm/Archivist/Account/Api.d.ts.map +1 -1
  72. package/dist/esm/Archivist/Addresses/Address/Api.d.ts +8 -0
  73. package/dist/esm/Archivist/Addresses/Address/Api.d.ts.map +1 -0
  74. package/dist/esm/Archivist/Addresses/Address/Api.js +10 -0
  75. package/dist/esm/Archivist/Addresses/Address/Api.js.map +1 -0
  76. package/dist/esm/Archivist/Addresses/Address/index.d.ts +2 -0
  77. package/dist/esm/Archivist/Addresses/Address/index.d.ts.map +1 -0
  78. package/dist/esm/Archivist/Addresses/Address/index.js +2 -0
  79. package/dist/esm/Archivist/Addresses/Address/index.js.map +1 -0
  80. package/dist/esm/Archivist/Addresses/Api.d.ts +8 -0
  81. package/dist/esm/Archivist/Addresses/Api.d.ts.map +1 -0
  82. package/dist/esm/Archivist/Addresses/Api.js +11 -0
  83. package/dist/esm/Archivist/Addresses/Api.js.map +1 -0
  84. package/dist/esm/Archivist/Addresses/ModuleDescription.d.ts +5 -0
  85. package/dist/esm/Archivist/Addresses/ModuleDescription.d.ts.map +1 -0
  86. package/dist/esm/Archivist/Addresses/ModuleDescription.js +2 -0
  87. package/dist/esm/Archivist/Addresses/ModuleDescription.js.map +1 -0
  88. package/dist/esm/Archivist/Addresses/NodeModuleDescription.d.ts +5 -0
  89. package/dist/esm/Archivist/Addresses/NodeModuleDescription.d.ts.map +1 -0
  90. package/dist/esm/Archivist/Addresses/NodeModuleDescription.js +2 -0
  91. package/dist/esm/Archivist/Addresses/NodeModuleDescription.js.map +1 -0
  92. package/dist/esm/Archivist/Addresses/index.d.ts +4 -0
  93. package/dist/esm/Archivist/Addresses/index.d.ts.map +1 -0
  94. package/dist/esm/Archivist/Addresses/index.js +4 -0
  95. package/dist/esm/Archivist/Addresses/index.js.map +1 -0
  96. package/dist/esm/Archivist/Api.d.ts +5 -2
  97. package/dist/esm/Archivist/Api.d.ts.map +1 -1
  98. package/dist/esm/Archivist/Api.js +11 -0
  99. package/dist/esm/Archivist/Api.js.map +1 -1
  100. package/dist/esm/Archivist/Archive/Settings/Key/Api.d.ts +1 -1
  101. package/dist/esm/Archivist/Payload/Api.d.ts +1 -2
  102. package/dist/esm/Archivist/Payload/Api.d.ts.map +1 -1
  103. package/dist/esm/Archivist/Payload/Api.js.map +1 -1
  104. package/dist/esm/Archivist/Payload/Schema/Api.d.ts +1 -1
  105. package/dist/esm/Archivist/Payload/Schema/Api.d.ts.map +1 -1
  106. package/dist/esm/Archivist/XyoRemoteArchivist.d.ts +2 -2
  107. package/dist/esm/Archivist/XyoRemoteArchivist.d.ts.map +1 -1
  108. package/dist/esm/Archivist/XyoRemoteArchivist.js.map +1 -1
  109. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts +12 -0
  110. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts.map +1 -0
  111. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js +3 -0
  112. package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js.map +1 -0
  113. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts +12 -0
  114. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts.map +1 -0
  115. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js +43 -0
  116. package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js.map +1 -0
  117. package/dist/esm/Diviner/AddressHistoryDiviner/index.d.ts +3 -0
  118. package/dist/esm/Diviner/AddressHistoryDiviner/index.d.ts.map +1 -0
  119. package/dist/esm/Diviner/AddressHistoryDiviner/index.js +3 -0
  120. package/dist/esm/Diviner/AddressHistoryDiviner/index.js.map +1 -0
  121. package/dist/esm/Diviner/RemoteDivinerError.d.ts +6 -0
  122. package/dist/esm/Diviner/RemoteDivinerError.d.ts.map +1 -0
  123. package/dist/esm/Diviner/RemoteDivinerError.js +10 -0
  124. package/dist/esm/Diviner/RemoteDivinerError.js.map +1 -0
  125. package/dist/esm/Diviner/XyoRemoteDivinerConfig.d.ts +10 -0
  126. package/dist/esm/Diviner/XyoRemoteDivinerConfig.d.ts.map +1 -0
  127. package/dist/esm/Diviner/XyoRemoteDivinerConfig.js +2 -0
  128. package/dist/esm/Diviner/XyoRemoteDivinerConfig.js.map +1 -0
  129. package/dist/esm/Diviner/index.d.ts +1 -0
  130. package/dist/esm/Diviner/index.d.ts.map +1 -1
  131. package/dist/esm/Diviner/index.js +1 -0
  132. package/dist/esm/Diviner/index.js.map +1 -1
  133. package/dist/esm/Simple.d.ts +1 -2
  134. package/dist/esm/Simple.d.ts.map +1 -1
  135. package/dist/esm/Simple.js.map +1 -1
  136. package/dist/esm/User/Api.d.ts +2 -2
  137. package/dist/esm/User/Api.d.ts.map +1 -1
  138. package/package.json +9 -7
  139. package/src/Archivist/Addresses/Address/Api.spec.ts +77 -0
  140. package/src/Archivist/Addresses/Address/Api.ts +14 -0
  141. package/src/Archivist/Addresses/Address/index.ts +1 -0
  142. package/src/Archivist/Addresses/Api.spec.ts +45 -0
  143. package/src/Archivist/Addresses/Api.ts +13 -0
  144. package/src/Archivist/Addresses/ModuleDescription.ts +4 -0
  145. package/src/Archivist/Addresses/NodeModuleDescription.ts +5 -0
  146. package/src/Archivist/Addresses/index.ts +3 -0
  147. package/src/Archivist/Api.ts +12 -0
  148. package/src/Archivist/Payload/Api.ts +1 -2
  149. package/src/Archivist/XyoRemoteArchivist.ts +2 -2
  150. package/src/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.ts +11 -0
  151. package/src/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.spec.ts +78 -0
  152. package/src/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.ts +45 -0
  153. package/src/Diviner/AddressHistoryDiviner/index.ts +2 -0
  154. package/src/Diviner/RemoteDivinerError.ts +9 -0
  155. package/src/Diviner/XyoRemoteDivinerConfig.ts +12 -0
  156. package/src/Diviner/index.ts +1 -0
  157. package/src/Simple.ts +1 -2
package/package.json CHANGED
@@ -11,12 +11,14 @@
11
11
  "dependencies": {
12
12
  "@xylabs/assert": "^2.6.9",
13
13
  "@xylabs/delay": "^2.6.9",
14
- "@xyo-network/account": "^2.37.5",
15
- "@xyo-network/archivist": "^2.37.5",
16
- "@xyo-network/boundwitness": "^2.37.5",
17
- "@xyo-network/core": "^2.37.5",
18
- "@xyo-network/payload": "^2.37.5",
19
- "@xyo-network/schema-payload-plugin": "^2.37.5",
14
+ "@xyo-network/account": "^2.37.7",
15
+ "@xyo-network/archivist": "^2.37.7",
16
+ "@xyo-network/boundwitness": "^2.37.7",
17
+ "@xyo-network/core": "^2.37.7",
18
+ "@xyo-network/diviner": "^2.37.7",
19
+ "@xyo-network/module": "^2.37.7",
20
+ "@xyo-network/payload": "^2.37.7",
21
+ "@xyo-network/schema-payload-plugin": "^2.37.7",
20
22
  "axios": "^0.27.2",
21
23
  "pako": "^2.0.4",
22
24
  "tslib": "^2.4.0"
@@ -58,5 +60,5 @@
58
60
  },
59
61
  "sideEffects": false,
60
62
  "types": "dist/esm/index.d.ts",
61
- "version": "2.37.5"
63
+ "version": "2.37.7"
62
64
  }
@@ -0,0 +1,77 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { XyoAccount } from '@xyo-network/account'
3
+ import { BoundWitnessWrapper, XyoBoundWitness } from '@xyo-network/boundwitness'
4
+
5
+ import { XyoApiConfig, XyoApiResponseBody } from '../../../models'
6
+ import { XyoApiSimple } from '../../../Simple'
7
+ import { XyoArchivistApi } from '../../Api'
8
+ import { XyoAddressesApi } from '../Api'
9
+ import { ModuleDescription } from '../ModuleDescription'
10
+ import { XyoAddressApi } from './Api'
11
+
12
+ const config: XyoApiConfig = {
13
+ apiDomain: process.env.API_DOMAIN || 'http://localhost:8080',
14
+ }
15
+
16
+ describe('XyoAddressApi', () => {
17
+ describe('get', () => {
18
+ let api: XyoAddressApi
19
+ let result: XyoApiResponseBody<ModuleDescription>
20
+ beforeAll(async () => {
21
+ const address = assertEx((await new XyoAddressesApi(config).get())?.pop()?.address)
22
+ api = new XyoArchivistApi(config).addresses.address(address)
23
+ result = await api.get()
24
+ expect(result).toBeObject()
25
+ })
26
+ it('method exists', () => {
27
+ expect(api).toBeDefined()
28
+ expect(api.get).toBeFunction()
29
+ })
30
+ describe('returns module', () => {
31
+ it('address', () => {
32
+ expect(result?.address).toBeString()
33
+ })
34
+ it('supported queries', () => {
35
+ const queries = result?.queries
36
+ expect(queries).toBeArray()
37
+ expect(queries?.length).toBeGreaterThan(0)
38
+ queries?.map((query) => {
39
+ expect(query).toBeString()
40
+ })
41
+ })
42
+ })
43
+ })
44
+ describe('boundWitness', () => {
45
+ let address: string
46
+ let api: XyoApiSimple<XyoBoundWitness[]>
47
+ let history: XyoBoundWitness[]
48
+ beforeAll(async () => {
49
+ address = new XyoAccount({ phrase: 'test' }).addressValue.hex
50
+ api = new XyoArchivistApi(config).addresses.address(address).boundWitnesses
51
+ const result = await api.get()
52
+ expect(result).toBeArray()
53
+ expect(result?.length).toBeGreaterThan(0)
54
+ history = assertEx(result)
55
+ })
56
+ it('method exists', () => {
57
+ expect(api).toBeDefined()
58
+ expect(api.get).toBeFunction()
59
+ })
60
+ describe('return BoundWitnesses', () => {
61
+ it('from the address specified', () => {
62
+ history?.map((block) => expect(block.addresses).toContain(address))
63
+ })
64
+ it('in sequential order', () => {
65
+ verifyBlockChainHistory(history)
66
+ })
67
+ })
68
+ })
69
+ })
70
+
71
+ const verifyBlockChainHistory = (history: XyoBoundWitness[]) => {
72
+ for (let i = 1; i < history.length; i++) {
73
+ const current = history[i - 1]
74
+ const previous = history[i]
75
+ expect(current.previous_hashes).toContain(new BoundWitnessWrapper(previous).hash)
76
+ }
77
+ }
@@ -0,0 +1,14 @@
1
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
2
+
3
+ import { XyoApiConfig } from '../../../models'
4
+ import { XyoApiSimple } from '../../../Simple'
5
+ import { ModuleDescription } from '../ModuleDescription'
6
+
7
+ export class XyoAddressApi<C extends XyoApiConfig = XyoApiConfig> extends XyoApiSimple<ModuleDescription, C> {
8
+ public get boundWitnesses(): XyoApiSimple<XyoBoundWitness[]> {
9
+ return new XyoApiSimple({
10
+ ...this.config,
11
+ root: `${this.root}boundwitness/`,
12
+ })
13
+ }
14
+ }
@@ -0,0 +1 @@
1
+ export * from './Api'
@@ -0,0 +1,45 @@
1
+ import { XyoApiConfig, XyoApiResponseBody } from '../../models'
2
+ import { XyoAddressesApi } from './Api'
3
+ import { NodeModuleDescription } from './NodeModuleDescription'
4
+
5
+ const config: XyoApiConfig = {
6
+ apiDomain: process.env.API_DOMAIN || 'http://localhost:8080',
7
+ }
8
+
9
+ describe('XyoAddressesApi', () => {
10
+ describe('get', () => {
11
+ it('method exists', () => {
12
+ const api = new XyoAddressesApi(config)
13
+ expect(api).toBeDefined()
14
+ expect(api.get).toBeFunction()
15
+ })
16
+ describe('returns modules in use on the node with their', () => {
17
+ let api: XyoAddressesApi
18
+ let result: XyoApiResponseBody<NodeModuleDescription[]>
19
+ beforeAll(async () => {
20
+ api = new XyoAddressesApi(config)
21
+ result = await api.get()
22
+ expect(result).toBeArray()
23
+ expect(result?.length).toBeGreaterThan(0)
24
+ })
25
+ it('address', () => {
26
+ result?.map((module) => {
27
+ expect(module.address).toBeString()
28
+ })
29
+ })
30
+ it('supported queries', () => {
31
+ result?.map((module) => {
32
+ expect(module.queries.length).toBeGreaterThan(0)
33
+ module.queries.map((query) => {
34
+ expect(query).toBeString()
35
+ })
36
+ })
37
+ })
38
+ it('mount point', () => {
39
+ result?.map((module) => {
40
+ expect(module.url).toBeString
41
+ })
42
+ })
43
+ })
44
+ })
45
+ })
@@ -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 =
@@ -1,6 +1,5 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
- import { XyoPayloadFindFilter } from '@xyo-network/archivist'
3
- import { XyoPayload } from '@xyo-network/payload'
2
+ import { XyoPayload, XyoPayloadFindFilter } from '@xyo-network/payload'
4
3
 
5
4
  import { XyoApiConfig } from '../../models'
6
5
  import { XyoApiSimple } from '../../Simple'
@@ -1,7 +1,7 @@
1
1
  import { assertEx } from '@xylabs/assert'
2
- import { XyoArchivist, XyoArchivistFindQuerySchema, XyoPayloadFindFilter } from '@xyo-network/archivist'
2
+ import { XyoArchivist, XyoArchivistFindQuerySchema } from '@xyo-network/archivist'
3
3
  import { XyoBoundWitness, XyoBoundWitnessSchema } from '@xyo-network/boundwitness'
4
- import { PayloadWrapper, XyoPayload } from '@xyo-network/payload'
4
+ import { PayloadWrapper, XyoPayload, XyoPayloadFindFilter } from '@xyo-network/payload'
5
5
 
6
6
  import { RemoteArchivistError } from './RemoteArchivistError'
7
7
  import { XyoRemoteArchivistConfig } from './XyoRemoteArchivistConfig'
@@ -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,78 @@
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 { 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
+ const diviner = new XyoRemoteAddressHistoryDiviner({ api, schema: XyoRemoteDivinerConfigSchema })
23
+
24
+ describe('with valid address returns', () => {
25
+ let result: XyoBoundWitness[]
26
+ beforeAll(async () => {
27
+ const source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address }).build()
28
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
29
+ expect(result.length).toBeGreaterThan(0)
30
+ })
31
+ it('array of Bound Witnesses', () => {
32
+ result.map((bw) => {
33
+ expect(bw.schema).toBe(XyoBoundWitnessSchema)
34
+ })
35
+ })
36
+ it('from address', () => {
37
+ expect(result.length).toBeGreaterThan(0)
38
+ result.map((bw) => {
39
+ expect(bw.addresses).toContain(address)
40
+ })
41
+ })
42
+ })
43
+ describe('with hash offset returns', () => {
44
+ let result: XyoBoundWitness[]
45
+ let hash: string
46
+ beforeAll(async () => {
47
+ let source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address }).build()
48
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
49
+ expect(result.length).toBeGreaterThan(0)
50
+ hash = new BoundWitnessWrapper(result?.[0]).hash
51
+ source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address, offset: hash }).build()
52
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
53
+ expect(result.length).toBeGreaterThan(0)
54
+ })
55
+ it('results starting at hash', () => {
56
+ expect(new BoundWitnessWrapper(result?.[0]).hash).toBe(hash)
57
+ })
58
+ })
59
+ describe('with limit returns', () => {
60
+ const limit = 1
61
+ let result: XyoBoundWitness[]
62
+ beforeAll(async () => {
63
+ const source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address, limit }).build()
64
+ result = (await new XyoDivinerWrapper(diviner).divine([source])) as XyoBoundWitness[]
65
+ expect(result.length).toBeGreaterThan(0)
66
+ })
67
+ it('number of results specified by the limit', () => {
68
+ expect(result.length).toBe(limit)
69
+ })
70
+ })
71
+ describe('with non-existent address', () => {
72
+ it('returns empty array', async () => {
73
+ const source = new XyoPayloadBuilder({ schema: AddressHistoryQuerySchema }).fields({ address: 'foo' }).build()
74
+ const result = await new XyoDivinerWrapper(diviner).divine([source])
75
+ expect(result.length).toBe(0)
76
+ })
77
+ })
78
+ })
@@ -0,0 +1,45 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { XyoBoundWitness } from '@xyo-network/boundwitness'
3
+ import { XyoDiviner, XyoDivinerDivineQuerySchema } from '@xyo-network/diviner'
4
+ import { XyoPayloads } from '@xyo-network/payload'
5
+
6
+ import { RemoteDivinerError } from '../RemoteDivinerError'
7
+ import { XyoRemoteDivinerConfig } from '../XyoRemoteDivinerConfig'
8
+ import { AddressHistoryDiviner, isAddressHistoryQueryPayload } from './AddressHistoryDiviner'
9
+
10
+ /** @description Diviner Context that connects to a remote Diviner using the API */
11
+ export class XyoRemoteAddressHistoryDiviner extends XyoDiviner<XyoRemoteDivinerConfig> implements AddressHistoryDiviner {
12
+ public get api() {
13
+ return assertEx(this.config?.api, 'API not defined')
14
+ }
15
+
16
+ public override queries() {
17
+ return [XyoDivinerDivineQuerySchema, ...super.queries()]
18
+ }
19
+
20
+ public override async divine(payloads?: XyoPayloads): Promise<XyoBoundWitness[]> {
21
+ if (!payloads) return []
22
+ try {
23
+ const query = payloads.find(isAddressHistoryQueryPayload)
24
+ if (!query) return []
25
+ const { address, limit, offset } = query
26
+ const find: { limit?: number; offset?: string } = {}
27
+ if (limit) find.limit = limit
28
+ if (offset) find.offset = `${offset}`
29
+ const [data, body, response] =
30
+ Object.keys(find).length > 0
31
+ ? await this.api.addresses.address(address).boundWitnesses.find(find, 'tuple')
32
+ : await this.api.addresses.address(address).boundWitnesses.get('tuple')
33
+ if (response?.status >= 400) {
34
+ throw new RemoteDivinerError('divine', `${response.statusText} [${response.status}]`)
35
+ }
36
+ if (body?.error?.length) {
37
+ throw new RemoteDivinerError('divine', body?.error)
38
+ }
39
+ return data || []
40
+ } catch (ex) {
41
+ console.error(ex)
42
+ throw ex
43
+ }
44
+ }
45
+ }
@@ -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'
package/src/Simple.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { XyoPayloadFindFilter } from '@xyo-network/archivist'
2
- import { XyoPayload } from '@xyo-network/payload'
1
+ import { XyoPayload, XyoPayloadFindFilter } from '@xyo-network/payload'
3
2
 
4
3
  import { XyoApiBase } from './Base'
5
4
  import { XyoApiConfig, XyoApiResponseBody, XyoApiResponseTuple, XyoApiResponseTupleOrBody, XyoApiResponseType } from './models'