@xyo-network/api 2.37.6 → 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.
- package/dist/cjs/Archivist/Account/Api.d.ts +2 -2
- package/dist/cjs/Archivist/Account/Api.d.ts.map +1 -1
- package/dist/cjs/Archivist/Addresses/Address/Api.d.ts +8 -0
- package/dist/cjs/Archivist/Addresses/Address/Api.d.ts.map +1 -0
- package/dist/cjs/Archivist/Addresses/Address/Api.js +11 -0
- package/dist/cjs/Archivist/Addresses/Address/Api.js.map +1 -0
- package/dist/cjs/Archivist/Addresses/Address/index.d.ts +2 -0
- package/dist/cjs/Archivist/Addresses/Address/index.d.ts.map +1 -0
- package/dist/cjs/Archivist/Addresses/Address/index.js +5 -0
- package/dist/cjs/Archivist/Addresses/Address/index.js.map +1 -0
- package/dist/cjs/Archivist/Addresses/Api.d.ts +8 -0
- package/dist/cjs/Archivist/Addresses/Api.d.ts.map +1 -0
- package/dist/cjs/Archivist/Addresses/Api.js +12 -0
- package/dist/cjs/Archivist/Addresses/Api.js.map +1 -0
- package/dist/cjs/Archivist/Addresses/ModuleDescription.d.ts +5 -0
- package/dist/cjs/Archivist/Addresses/ModuleDescription.d.ts.map +1 -0
- package/dist/cjs/Archivist/Addresses/ModuleDescription.js +3 -0
- package/dist/cjs/Archivist/Addresses/ModuleDescription.js.map +1 -0
- package/dist/cjs/Archivist/Addresses/NodeModuleDescription.d.ts +5 -0
- package/dist/cjs/Archivist/Addresses/NodeModuleDescription.d.ts.map +1 -0
- package/dist/cjs/Archivist/Addresses/NodeModuleDescription.js +3 -0
- package/dist/cjs/Archivist/Addresses/NodeModuleDescription.js.map +1 -0
- package/dist/cjs/Archivist/Addresses/index.d.ts +4 -0
- package/dist/cjs/Archivist/Addresses/index.d.ts.map +1 -0
- package/dist/cjs/Archivist/Addresses/index.js +7 -0
- package/dist/cjs/Archivist/Addresses/index.js.map +1 -0
- package/dist/cjs/Archivist/Api.d.ts +5 -2
- package/dist/cjs/Archivist/Api.d.ts.map +1 -1
- package/dist/cjs/Archivist/Api.js +7 -0
- package/dist/cjs/Archivist/Api.js.map +1 -1
- package/dist/cjs/Archivist/Archive/Settings/Key/Api.d.ts +1 -1
- package/dist/cjs/Archivist/Payload/Api.d.ts +1 -2
- package/dist/cjs/Archivist/Payload/Api.d.ts.map +1 -1
- package/dist/cjs/Archivist/Payload/Api.js.map +1 -1
- package/dist/cjs/Archivist/Payload/Schema/Api.d.ts +1 -1
- package/dist/cjs/Archivist/Payload/Schema/Api.d.ts.map +1 -1
- package/dist/cjs/Archivist/XyoRemoteArchivist.d.ts +2 -2
- package/dist/cjs/Archivist/XyoRemoteArchivist.d.ts.map +1 -1
- package/dist/cjs/Archivist/XyoRemoteArchivist.js.map +1 -1
- package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts +12 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts.map +1 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js +7 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js.map +1 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts +12 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts.map +1 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js +52 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js.map +1 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/index.d.ts +3 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/index.d.ts.map +1 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/index.js +6 -0
- package/dist/cjs/Diviner/AddressHistoryDiviner/index.js.map +1 -0
- package/dist/cjs/Diviner/RemoteDivinerError.d.ts +6 -0
- package/dist/cjs/Diviner/RemoteDivinerError.d.ts.map +1 -0
- package/dist/cjs/Diviner/RemoteDivinerError.js +14 -0
- package/dist/cjs/Diviner/RemoteDivinerError.js.map +1 -0
- package/dist/cjs/Diviner/XyoRemoteDivinerConfig.d.ts +10 -0
- package/dist/cjs/Diviner/XyoRemoteDivinerConfig.d.ts.map +1 -0
- package/dist/cjs/Diviner/XyoRemoteDivinerConfig.js +5 -0
- package/dist/cjs/Diviner/XyoRemoteDivinerConfig.js.map +1 -0
- package/dist/cjs/Diviner/index.d.ts +1 -0
- package/dist/cjs/Diviner/index.d.ts.map +1 -1
- package/dist/cjs/Diviner/index.js +1 -0
- package/dist/cjs/Diviner/index.js.map +1 -1
- package/dist/cjs/Simple.d.ts +1 -2
- package/dist/cjs/Simple.d.ts.map +1 -1
- package/dist/cjs/Simple.js.map +1 -1
- package/dist/cjs/User/Api.d.ts +2 -2
- package/dist/cjs/User/Api.d.ts.map +1 -1
- package/dist/docs.json +10378 -6974
- package/dist/esm/Archivist/Account/Api.d.ts +2 -2
- package/dist/esm/Archivist/Account/Api.d.ts.map +1 -1
- package/dist/esm/Archivist/Addresses/Address/Api.d.ts +8 -0
- package/dist/esm/Archivist/Addresses/Address/Api.d.ts.map +1 -0
- package/dist/esm/Archivist/Addresses/Address/Api.js +10 -0
- package/dist/esm/Archivist/Addresses/Address/Api.js.map +1 -0
- package/dist/esm/Archivist/Addresses/Address/index.d.ts +2 -0
- package/dist/esm/Archivist/Addresses/Address/index.d.ts.map +1 -0
- package/dist/esm/Archivist/Addresses/Address/index.js +2 -0
- package/dist/esm/Archivist/Addresses/Address/index.js.map +1 -0
- package/dist/esm/Archivist/Addresses/Api.d.ts +8 -0
- package/dist/esm/Archivist/Addresses/Api.d.ts.map +1 -0
- package/dist/esm/Archivist/Addresses/Api.js +11 -0
- package/dist/esm/Archivist/Addresses/Api.js.map +1 -0
- package/dist/esm/Archivist/Addresses/ModuleDescription.d.ts +5 -0
- package/dist/esm/Archivist/Addresses/ModuleDescription.d.ts.map +1 -0
- package/dist/esm/Archivist/Addresses/ModuleDescription.js +2 -0
- package/dist/esm/Archivist/Addresses/ModuleDescription.js.map +1 -0
- package/dist/esm/Archivist/Addresses/NodeModuleDescription.d.ts +5 -0
- package/dist/esm/Archivist/Addresses/NodeModuleDescription.d.ts.map +1 -0
- package/dist/esm/Archivist/Addresses/NodeModuleDescription.js +2 -0
- package/dist/esm/Archivist/Addresses/NodeModuleDescription.js.map +1 -0
- package/dist/esm/Archivist/Addresses/index.d.ts +4 -0
- package/dist/esm/Archivist/Addresses/index.d.ts.map +1 -0
- package/dist/esm/Archivist/Addresses/index.js +4 -0
- package/dist/esm/Archivist/Addresses/index.js.map +1 -0
- package/dist/esm/Archivist/Api.d.ts +5 -2
- package/dist/esm/Archivist/Api.d.ts.map +1 -1
- package/dist/esm/Archivist/Api.js +11 -0
- package/dist/esm/Archivist/Api.js.map +1 -1
- package/dist/esm/Archivist/Archive/Settings/Key/Api.d.ts +1 -1
- package/dist/esm/Archivist/Payload/Api.d.ts +1 -2
- package/dist/esm/Archivist/Payload/Api.d.ts.map +1 -1
- package/dist/esm/Archivist/Payload/Api.js.map +1 -1
- package/dist/esm/Archivist/Payload/Schema/Api.d.ts +1 -1
- package/dist/esm/Archivist/Payload/Schema/Api.d.ts.map +1 -1
- package/dist/esm/Archivist/XyoRemoteArchivist.d.ts +2 -2
- package/dist/esm/Archivist/XyoRemoteArchivist.d.ts.map +1 -1
- package/dist/esm/Archivist/XyoRemoteArchivist.js.map +1 -1
- package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts +12 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.d.ts.map +1 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js +3 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.js.map +1 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts +12 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.d.ts.map +1 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js +43 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.js.map +1 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/index.d.ts +3 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/index.d.ts.map +1 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/index.js +3 -0
- package/dist/esm/Diviner/AddressHistoryDiviner/index.js.map +1 -0
- package/dist/esm/Diviner/RemoteDivinerError.d.ts +6 -0
- package/dist/esm/Diviner/RemoteDivinerError.d.ts.map +1 -0
- package/dist/esm/Diviner/RemoteDivinerError.js +10 -0
- package/dist/esm/Diviner/RemoteDivinerError.js.map +1 -0
- package/dist/esm/Diviner/XyoRemoteDivinerConfig.d.ts +10 -0
- package/dist/esm/Diviner/XyoRemoteDivinerConfig.d.ts.map +1 -0
- package/dist/esm/Diviner/XyoRemoteDivinerConfig.js +2 -0
- package/dist/esm/Diviner/XyoRemoteDivinerConfig.js.map +1 -0
- package/dist/esm/Diviner/index.d.ts +1 -0
- package/dist/esm/Diviner/index.d.ts.map +1 -1
- package/dist/esm/Diviner/index.js +1 -0
- package/dist/esm/Diviner/index.js.map +1 -1
- package/dist/esm/Simple.d.ts +1 -2
- package/dist/esm/Simple.d.ts.map +1 -1
- package/dist/esm/Simple.js.map +1 -1
- package/dist/esm/User/Api.d.ts +2 -2
- package/dist/esm/User/Api.d.ts.map +1 -1
- package/package.json +9 -7
- package/src/Archivist/Addresses/Address/Api.spec.ts +77 -0
- package/src/Archivist/Addresses/Address/Api.ts +14 -0
- package/src/Archivist/Addresses/Address/index.ts +1 -0
- package/src/Archivist/Addresses/Api.spec.ts +45 -0
- package/src/Archivist/Addresses/Api.ts +13 -0
- package/src/Archivist/Addresses/ModuleDescription.ts +4 -0
- package/src/Archivist/Addresses/NodeModuleDescription.ts +5 -0
- package/src/Archivist/Addresses/index.ts +3 -0
- package/src/Archivist/Api.ts +12 -0
- package/src/Archivist/Payload/Api.ts +1 -2
- package/src/Archivist/XyoRemoteArchivist.ts +2 -2
- package/src/Diviner/AddressHistoryDiviner/AddressHistoryDiviner.ts +11 -0
- package/src/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.spec.ts +78 -0
- package/src/Diviner/AddressHistoryDiviner/XyoRemoteAddressHistoryDiviner.ts +45 -0
- package/src/Diviner/AddressHistoryDiviner/index.ts +2 -0
- package/src/Diviner/RemoteDivinerError.ts +9 -0
- package/src/Diviner/XyoRemoteDivinerConfig.ts +12 -0
- package/src/Diviner/index.ts +1 -0
- 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.
|
|
15
|
-
"@xyo-network/archivist": "^2.37.
|
|
16
|
-
"@xyo-network/boundwitness": "^2.37.
|
|
17
|
-
"@xyo-network/core": "^2.37.
|
|
18
|
-
"@xyo-network/
|
|
19
|
-
"@xyo-network/
|
|
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.
|
|
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
|
+
}
|
package/src/Archivist/Api.ts
CHANGED
|
@@ -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/
|
|
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
|
|
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,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
|
+
}
|
package/src/Diviner/index.ts
CHANGED
package/src/Simple.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { XyoPayloadFindFilter } from '@xyo-network/
|
|
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'
|