@xyo-network/chain-api 1.19.7 → 1.19.9
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/node/ApiActor.d.ts +4 -25
- package/dist/node/ApiActor.d.ts.map +1 -1
- package/dist/node/index.mjs +21 -323
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/runApi.d.ts +2 -6
- package/dist/node/runApi.d.ts.map +1 -1
- package/dist/node/server/app.d.ts +2 -2
- package/dist/node/server/app.d.ts.map +1 -1
- package/dist/node/server/index.d.ts +0 -1
- package/dist/node/server/index.d.ts.map +1 -1
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/index.d.ts +0 -1
- package/dist/node/server/routes/index.d.ts.map +1 -1
- package/dist/node/server/server.d.ts +2 -2
- package/dist/node/server/server.d.ts.map +1 -1
- package/package.json +11 -17
- package/src/ApiActor.ts +5 -40
- package/src/runApi.ts +15 -20
- package/src/server/app.ts +2 -2
- package/src/server/index.ts +0 -1
- package/src/server/routes/addRoutes.ts +0 -2
- package/src/server/routes/index.ts +0 -2
- package/src/server/server.ts +5 -4
- package/dist/node/ApiContext.d.ts +0 -6
- package/dist/node/ApiContext.d.ts.map +0 -1
- package/dist/node/server/initApiParams.d.ts +0 -12
- package/dist/node/server/initApiParams.d.ts.map +0 -1
- package/dist/node/server/routes/address/AddressPathParams.d.ts +0 -4
- package/dist/node/server/routes/address/AddressPathParams.d.ts.map +0 -1
- package/dist/node/server/routes/address/addNodeRoutes.d.ts +0 -3
- package/dist/node/server/routes/address/addNodeRoutes.d.ts.map +0 -1
- package/dist/node/server/routes/address/get/get.d.ts +0 -4
- package/dist/node/server/routes/address/get/get.d.ts.map +0 -1
- package/dist/node/server/routes/address/get/index.d.ts +0 -2
- package/dist/node/server/routes/address/get/index.d.ts.map +0 -1
- package/dist/node/server/routes/address/index.d.ts +0 -2
- package/dist/node/server/routes/address/index.d.ts.map +0 -1
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts +0 -6
- package/dist/node/server/routes/address/post/getQueryConfig.d.ts.map +0 -1
- package/dist/node/server/routes/address/post/index.d.ts +0 -2
- package/dist/node/server/routes/address/post/index.d.ts.map +0 -1
- package/dist/node/server/routes/address/post/post.d.ts +0 -8
- package/dist/node/server/routes/address/post/post.d.ts.map +0 -1
- package/src/ApiContext.ts +0 -6
- package/src/server/initApiParams.ts +0 -194
- package/src/server/routes/address/AddressPathParams.ts +0 -3
- package/src/server/routes/address/addNodeRoutes.ts +0 -21
- package/src/server/routes/address/get/get.ts +0 -30
- package/src/server/routes/address/get/index.ts +0 -1
- package/src/server/routes/address/index.ts +0 -1
- package/src/server/routes/address/post/getQueryConfig.ts +0 -23
- package/src/server/routes/address/post/index.ts +0 -1
- package/src/server/routes/address/post/post.ts +0 -77
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { asyncHandler } from '@xylabs/express'
|
|
2
|
-
import { asAddress, isDefined } from '@xylabs/sdk-js'
|
|
3
|
-
import { isModuleName } from '@xyo-network/module-model'
|
|
4
|
-
import type { Payload } from '@xyo-network/payload-model'
|
|
5
|
-
import type { RequestHandler } from 'express'
|
|
6
|
-
import { StatusCodes } from 'http-status-codes'
|
|
7
|
-
|
|
8
|
-
import type { AddressPathParams } from '../AddressPathParams.ts'
|
|
9
|
-
|
|
10
|
-
const handler: RequestHandler<AddressPathParams, Payload[]> = async (req, res, next) => {
|
|
11
|
-
const { address: moduleIdentifier } = req.params
|
|
12
|
-
const { node } = req.app.context
|
|
13
|
-
const address = asAddress(moduleIdentifier)
|
|
14
|
-
if (isDefined(address)) {
|
|
15
|
-
let mod = node.address === address ? node : (await node.resolve(address, { direction: 'down' }))
|
|
16
|
-
if (mod) {
|
|
17
|
-
res.json(await mod.state())
|
|
18
|
-
return
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
if (isModuleName(moduleIdentifier)) {
|
|
22
|
-
const mod = await node.resolve(moduleIdentifier, { direction: 'down' })
|
|
23
|
-
if (mod) {
|
|
24
|
-
res.redirect(StatusCodes.MOVED_TEMPORARILY, `/${mod.address}`)
|
|
25
|
-
return
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
next('route')
|
|
29
|
-
}
|
|
30
|
-
export const getAddress = asyncHandler(handler)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './get.ts'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './addNodeRoutes.ts'
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { BoundWitness, QueryBoundWitness } from '@xyo-network/boundwitness-model'
|
|
2
|
-
import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
|
|
3
|
-
import type { ModuleConfig, ModuleInstance } from '@xyo-network/module-model'
|
|
4
|
-
import { ModuleConfigSchema } from '@xyo-network/module-model'
|
|
5
|
-
import type { Payload } from '@xyo-network/payload-model'
|
|
6
|
-
import type { Request } from 'express'
|
|
7
|
-
|
|
8
|
-
const DEFAULT_DEPTH = 5 as const
|
|
9
|
-
|
|
10
|
-
export const getQueryConfig = (mod: ModuleInstance, req: Request, bw: QueryBoundWitness, payloads?: Payload[]): ModuleConfig | undefined => {
|
|
11
|
-
// TODO: Filter based on query addresses?
|
|
12
|
-
// Recurse through payloads for nested BWs
|
|
13
|
-
const nestedBwAddresses
|
|
14
|
-
= payloads
|
|
15
|
-
?.flat(DEFAULT_DEPTH)
|
|
16
|
-
.filter<BoundWitness>((payload): payload is BoundWitness => payload?.schema === BoundWitnessSchema)
|
|
17
|
-
.map(bw => bw.addresses) ?? []
|
|
18
|
-
// TODO: Do we want to end up with a list of addresses or a list of address lists?
|
|
19
|
-
const addresses = [bw.addresses, ...nestedBwAddresses].filter(address => address.length > 0)
|
|
20
|
-
const allowed = addresses.length > 0 ? Object.fromEntries(mod.queries.map(schema => [schema, addresses])) : {}
|
|
21
|
-
const security = { allowed }
|
|
22
|
-
return { schema: ModuleConfigSchema, security }
|
|
23
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './post.ts'
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { asyncHandler } from '@xylabs/express'
|
|
2
|
-
import type { JsonObject } from '@xylabs/sdk-js'
|
|
3
|
-
import {
|
|
4
|
-
asAddress, assertEx,
|
|
5
|
-
isAddress,
|
|
6
|
-
toAddress,
|
|
7
|
-
} from '@xylabs/sdk-js'
|
|
8
|
-
import { isQueryBoundWitness, type QueryBoundWitness } from '@xyo-network/boundwitness-model'
|
|
9
|
-
import { ModuleErrorBuilder } from '@xyo-network/module-abstract'
|
|
10
|
-
import type { ModuleInstance, ModuleQueryResult } from '@xyo-network/module-model'
|
|
11
|
-
import type { ModuleError, Payload } from '@xyo-network/payload-model'
|
|
12
|
-
import type { RequestHandler } from 'express'
|
|
13
|
-
import { StatusCodes } from 'http-status-codes'
|
|
14
|
-
|
|
15
|
-
import type { AddressPathParams } from '../AddressPathParams.ts'
|
|
16
|
-
import { getQueryConfig } from './getQueryConfig.ts'
|
|
17
|
-
|
|
18
|
-
type PostAddressRequestBody = [QueryBoundWitness, undefined | Payload[]]
|
|
19
|
-
|
|
20
|
-
const handler: RequestHandler<AddressPathParams, ModuleQueryResult | ModuleError, PostAddressRequestBody> = async (req, res, next) => {
|
|
21
|
-
const returnError = (code: number, message = 'An error occurred', details?: JsonObject) => {
|
|
22
|
-
const error = new ModuleErrorBuilder().message(message).details(details).build()
|
|
23
|
-
res.locals.rawResponse = false
|
|
24
|
-
res.status(code).json(error)
|
|
25
|
-
next()
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const { address } = req.params
|
|
29
|
-
const { node } = req.app.context
|
|
30
|
-
const [bw, payloads] = Array.isArray(req.body) ? req.body : []
|
|
31
|
-
if (!isAddress(address)) {
|
|
32
|
-
return returnError(StatusCodes.BAD_REQUEST, 'Missing address')
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (!bw) {
|
|
36
|
-
return returnError(StatusCodes.BAD_REQUEST, 'Missing boundwitness')
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (!isQueryBoundWitness(bw)) {
|
|
40
|
-
return returnError(StatusCodes.BAD_REQUEST, 'Invalid query boundwitness')
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
let modules: ModuleInstance[] = []
|
|
44
|
-
const normalizedAddress = toAddress(address)
|
|
45
|
-
if (node.address === normalizedAddress) modules = [node]
|
|
46
|
-
else {
|
|
47
|
-
const typedAddress = asAddress(address)
|
|
48
|
-
const byAddress = (typedAddress === undefined) ? undefined : await node.resolve(typedAddress, { maxDepth: 10 })
|
|
49
|
-
|
|
50
|
-
if (byAddress) modules = [byAddress]
|
|
51
|
-
else {
|
|
52
|
-
const byName = await node.resolve(address, { direction: 'down' })
|
|
53
|
-
if (byName) {
|
|
54
|
-
const moduleAddress = assertEx(byName?.address, () => 'Error redirecting to module by address')
|
|
55
|
-
res.redirect(StatusCodes.TEMPORARY_REDIRECT, `/${moduleAddress}`)
|
|
56
|
-
return
|
|
57
|
-
} else {
|
|
58
|
-
return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (modules.length > 0) {
|
|
64
|
-
const mod = modules[0]
|
|
65
|
-
const queryConfig = getQueryConfig(mod, req, bw, payloads)
|
|
66
|
-
try {
|
|
67
|
-
const queryResult = await mod.query(bw, payloads, queryConfig)
|
|
68
|
-
res.json(queryResult)
|
|
69
|
-
} catch (ex) {
|
|
70
|
-
return returnError(StatusCodes.INTERNAL_SERVER_ERROR, 'Query Failed', { message: (ex as Error)?.message ?? 'Unknown Error' })
|
|
71
|
-
}
|
|
72
|
-
} else {
|
|
73
|
-
return returnError(StatusCodes.NOT_FOUND, 'Module not found', { address })
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export const postAddress = asyncHandler(handler)
|