Skip to main content

Integration API Reference

Everything exported from the root of @vef-framework-react/integration, grouped as in the source: permissions, API hooks, components, script documentation, and types. Page components and their props are covered in Pages.

QueryFunction<TData, TParams> / MutationFunction<TData, TParams> are the framework's keyed function shapes from @vef-framework-react/core; PaginatedQueryParams<TSearch> is the ProTable query shape from @vef-framework-react/components; ApiResult<T> is the standard response envelope.

:::info Unreleased exports The code-map domain (useCodeMapApi, useCodeSetApi, INTEGRATION_PERMISSIONS.codeMap, the CodeMap* / Code*Catalog types, and the codes.* completion entries) was added after v2.12.0 and ships with the next release. Everything else is available in v2.12.0. :::

Permissions

INTEGRATION_PERMISSIONS

const — permission codes for the integration engine management API, mirroring the backend RequiredPermission strings verbatim. Every page defaults its gates to the matching entry and accepts overrides through its permissions prop. See Permissions.

Group.keyCodeGates
contract.queryintegration.contract.queryContract list / directory
contract.createintegration.contract.createCreate contract
contract.updateintegration.contract.updateUpdate contract
contract.deleteintegration.contract.deleteDelete contract(s)
system.queryintegration.system.querySystem list / directory
system.createintegration.system.createCreate system
system.updateintegration.system.updateUpdate system
system.deleteintegration.system.deleteDelete system(s)
adapter.queryintegration.adapter.queryAdapter list
adapter.createintegration.adapter.createCreate adapter
adapter.updateintegration.adapter.updateUpdate adapter
adapter.deleteintegration.adapter.deleteDelete adapter(s)
route.queryintegration.route.queryRoute list
route.createintegration.route.createCreate route
route.updateintegration.route.updateUpdate route
route.deleteintegration.route.deleteDelete route(s)
codeMap.queryintegration.code_map.queryCode map list and the host code-set catalog queries (the catalog exists solely to support the mapping editor)
codeMap.createintegration.code_map.createCreate code map
codeMap.updateintegration.code_map.updateUpdate code map
codeMap.deleteintegration.code_map.deleteDelete code map(s)
log.queryintegration.log.queryInvocation log query (also the console's default stats gate)
ops.dryRunintegration.ops.dry_runOutbound dry run
ops.dryRunInboundintegration.ops.dry_run_inboundInbound dry run
ops.testConnectionintegration.ops.test_connectionConnection probe
ops.diagnoseRoutesintegration.ops.diagnose_routesRouting diagnosis

Type exports: IntegrationPermissions (typeof INTEGRATION_PERMISSIONS) and one alias per group — ContractPermissionCodes, SystemPermissionCodes, AdapterPermissionCodes, RoutePermissionCodes, CodeMapPermissionCodes, LogPermissionCodes, OpsPermissionCodes.

API hooks

Query plumbing

ExportSignatureDescription
API_PATHconst "/api"The framework RPC endpoint every management call posts to.
splitQueryParams<TSearch extends AnyObject>(queryParams: PaginatedQueryParams<TSearch>) => { params: Omit<PaginatedQueryParams<TSearch>, typeof SYMBOL_PAGINATION>; pagination: PaginationParams | undefined }Splits ProTable's symbol-keyed query params into plain search params and the pagination metadata (sent as request meta). The sort symbol stays on params; JSON serialization drops it.

CrudApi and createCrudApi

interface CrudApi<TRow extends { id: string }, TParams, TSearch extends AnyObject> {
findPage: QueryFunction<PaginationResult<TRow>, PaginatedQueryParams<TSearch>>;
create: MutationFunction<ApiResult<unknown>, TParams>;
update: MutationFunction<ApiResult<unknown>, TParams>;
remove: MutationFunction<ApiResult<unknown>, TRow>; // sends { id: row.id } to "delete"
removeMany: MutationFunction<ApiResult<unknown>, TRow[]>; // sends { pks: [...] } to "delete_many"
}

The query and mutation functions for one CRUD resource, shaped to plug straight into CrudPage: findPage is its queryFn, create/update its formMutationFns, and remove/removeMany its delete mutation fns (both receive the row objects, mirroring the framework's CRUD contract — see Crud).

createCrudApi<TRow, TParams, TSearch>(apiClient: ApiClient, resource: string, keyPrefix: string): CrudApi<TRow, TParams, TSearch> builds that set against the app's API client; keyPrefix namespaces the TanStack Query cache keys. Useful for host-defined resources that follow the same wire contract.

Resource CRUD hooks

Each returns a memoized CrudApi bound to its resource:

HookReturnsResource
useContractApiCrudApi<Contract, ContractParams, ContractSearch>integration/contract
useSystemApiCrudApi<System, SystemParams, SystemSearch>integration/system
useAdapterApiCrudApi<Adapter, AdapterParams, AdapterSearch>integration/adapter
useRouteApiCrudApi<Route, RouteParams, RouteSearch>integration/route
useCodeMapApiCrudApi<CodeMap, CodeMapParams, CodeMapSearch>integration/code_map

useLogApi

() => LogApi — read-only query functions for the invocation log. Rows carry the full captures, so the detail view reads from the row rather than a separate fetch.

FunctionTypeOperation
findPageQueryFunction<PaginationResult<InvocationLog>, PaginatedQueryParams<LogSearch>>integration/log.find_page

useOpsApi

() => OpsApi — the operational actions of the integration engine. Each is a mutation because it is triggered imperatively and its calls have real effects.

FunctionTypeOperation
dryRunMutationFunction<DryRunResult, DryRunParams>integration/ops.dry_run
dryRunInboundMutationFunction<InboundDryRunResult, DryRunInboundParams>integration/ops.dry_run_inbound
testConnectionMutationFunction<ConnectionCheck, TestConnectionParams>integration/ops.test_connection
diagnoseRoutesMutationFunction<RouteDiagnostics, void>integration/ops.diagnose_routes

useStatsApi

() => StatsApi — per-node invocation statistics, served by the monitor resource.

FunctionTypeOperation
getStatsQueryFunction<IntegrationStatsResult>sys/monitor.get_integration_stats

useCodeSetApi

() => CodeSetApi — the host canonical code catalog behind the mapping editor. Both queries report supported: false when the host registered no enumerable catalog (mold.CodeSetInspector), and the editor degrades to free-text input. See the code set guide.

FunctionTypeOperation
listCodeSetsQueryFunction<CodeSetCatalog, object>integration/code_set.list_code_sets
listCodesQueryFunction<CodeCatalog, { codeSet: string }>integration/code_set.list_codes

Components

Each component's props interface is exported under the <Component>Props name (AuthParamsFieldsProps, FormSectionProps, JsonViewProps, ParamsEditorProps, ScriptDocLabelProps, TestConnectionDrawerProps) with exactly the fields tabled below.

Directories

Directory<T> — a loaded set of definitions, ready for select options and id→entry lookups:

FieldTypeDescription
itemsT[]The loaded rows (empty while loading).
byIdMap<string, T>Id → entry lookup.
optionsArray<{ label: string; value: string }>Select options labeled 名称(编码), valued by id.
loadingbooleanQuery in flight.
HookSignatureDescription
useSystemDirectory() => Directory<System>All systems (integration/system.find_all).
useContractDirectory(search?: ContractSearch) => Directory<Contract>Contracts (integration/contract.find_all), optionally narrowed by search filters — a business-side picker passes { labels: {...} } to offer only the contracts tagged for its scene. Pass a stable reference (module constant or memoized), not a fresh object literal each render.

Auth parameter editing

AuthParamFieldSpec — one dedicated input of a fixed-parameter auth scheme:

FieldTypeDefaultDescription
namestringThe key written into the auth config's params record.
labelstringThe input label.
placeholderstringConcise format hint shown while the input is empty.
hintstringSecondary line rendered under the input.
sensitivebooleanEncrypted at rest; the management API masks it back as ******. Renders a password input.
rowsnumberRender a textarea with this many rows instead of a single-line input.
spannumber12Grid span out of 24.

AuthParamsSpec — how a scheme's parameters are edited:

type AuthParamsSpec =
| { kind: "none" }
| { kind: "fixed"; fields: AuthParamFieldSpec[] }
| { kind: "pairs"; label: string; hint?: string; namePlaceholder?: string; valuePlaceholder?: string };
ExportSignatureDescription
resolveAuthParamsSpec(direction: Direction, scheme: string) => AuthParamsSpecResolves the parameter shape of a scheme from the built-in spec tables (mirroring the backend's outbound/inbound scheme registries). Custom schemes registered on the backend are unknown here, so they keep the free pair list.
pruneAuthParams(direction: Direction, scheme: string, params: Record<string, string>) => Record<string, string>Collapses a params record to what the selected scheme actually declares: fixed schemes keep only their declared, non-blank fields (dropping keys left over from a previously selected scheme), none submits nothing, pair schemes pass through untouched.
AuthParamsFields(props: AuthParamsFieldsProps) => JSX.Element | nullThe scheme-aware editor: dedicated inputs for fixed schemes (with a footnote when any field is sensitive), the pair list only where names are user-defined, nothing for none.

AuthParamsFieldsProps:

PropTypeDefaultDescription
directionDirectionWhich flow the scheme belongs to; decides the spec vocabulary.
schemestringThe selected scheme name.
valueRecord<string, string> | undefinedThe auth config's params record.
onChange(value: Record<string, string>) => voidEmitted with the next record on every edit.

FormSection

A titled group of form fields. Optional capabilities put their enable switch in extra and render children only while enabled, so the header row alone tells which capabilities a record has.

PropTypeDefaultDescription
titleReactNodeSection name shown in the header.
descriptionReactNodeOne-line explanation of what the section configures, under the title.
extraReactNodeRight slot of the header — typically the switch enabling the section.
childrenReactNodeBody fields (omitted body renders header only).

JsonView

A read-only, pretty-printed JSON view built on the code editor.

PropTypeDefaultDescription
valueJsonValueThe value to render (JSON.stringify(value, null, 2)).
heightnumber160Editor height.

ParamsEditor

A key-value editor over a Record<string, string>, bridging it to the array-shaped EditableTable with synthetic row ids. Resyncs when the parent replaces value externally (form reset, loading a record); rows with an empty key are dropped from the emitted record.

PropTypeDefaultDescription
valueRecord<string, string> | nullThe record to edit.
onChange(value: Record<string, string>) => voidEmitted on every edit.
nameTitlestring"参数名"Column header for the key column.
valueTitlestring"参数值"Column header for the value column.
namePlaceholderstringnameTitlePlaceholder of the key editor.
valuePlaceholderstringvalueTitlePlaceholder of the value editor.

ScriptDocLabel

A script-editor label with a help icon: hovering it opens the surface's full documentation (contract summary, bindings, libraries and functions), rendered from the completion catalog so the two can never drift apart.

PropTypeDefaultDescription
labelReactNodeThe visible label text the help icon follows.
docScriptDocThe script surface's documentation — the same catalog that powers the editor's completions.

TestConnectionDrawer

A drawer that probes a saved system's configured transports (HTTP and database) and shows what each probe found. The HTTP method/path inputs only render when the system actually has a Base URL to probe; probe state resets when the drawer targets a different system.

PropTypeDefaultDescription
openbooleanDrawer visibility.
systemSystem | nullThe system to probe.
onClose() => voidClose handler.

WireTraceTimeline

The captured HTTP exchanges of an invocation, rendered as a timeline: method + URL + status tag + duration per exchange, with error text and highlighted request/response bodies (JSON re-indented, XML verbatim, other text plain). The trace may be null (an invocation that issued no HTTP call serializes to a null slice), which reads as an empty state.

PropTypeDefaultDescription
traceHttpExchange[] | null | undefinedThe captured exchanges.

Status tags

ComponentPropsRenders
DirectionTag{ direction: Direction }The flow direction with distinct hues (outbound blue, inbound purple).
EnabledTag{ enabled: boolean }启用 / 停用 as success/neutral.
FailureKindTag{ failureKind?: FailureKind | "" | null }A success tag when there is no failure, else the classified failure.
FindingKindTag{ kind: RouteFindingKind }A routing-diagnosis finding kind, colored by severity.

Label and color constants

ExportTypeNotes
DIRECTION_LABELSRecord<Direction, string>出站 / 入站.
DIRECTION_OPTIONSArray<{ label: string; value: Direction }>Derived from the labels.
FAILURE_KIND_LABELSRecord<FailureKind, string>One label per failure classification.
ROUTE_FINDING_KIND_LABELSRecord<RouteFindingKind, string>One label per finding kind.
OUTBOUND_AUTH_SCHEME_LABELSRecord<string, string>Labels for the built-in outbound schemes.
INBOUND_AUTH_SCHEME_LABELSRecord<string, string>Labels for the built-in inbound schemes.
DIRECTION_COLORSRecord<Direction, string>antd Tag color tokens (theme-aware).
FAILURE_KIND_COLORSRecord<FailureKind, string>Warning/error scenes by severity (canceled is neutral).
ROUTE_FINDING_SEVERITYRecord<RouteFindingKind, "error" | "warning">Broken routes are errors; gaps are warnings.

Formatters

ExportSignatureDescription
formatTimestamp(value?: string | null) => stringFormats a backend timestamp for display, or a dash when empty.

Script documentation

ScriptDoc — one script surface's documentation: the contract in one line plus the bindings and libraries available to it. entries doubles as the editor's completion catalog, so the doc popover and the autocomplete never drift:

FieldTypeDescription
summarystringWhat the script receives and what its return value means.
entriesCompletionEntry[]The surface's bindings and libraries (the code editor completion shape).

The catalogs mirror the bindings and capability libraries the Go runtime actually installs (internal/integration/exec + internal/integration/auth + the JS engine baseline) and must stay in lockstep with the backend:

ExportSurfaceKey bindings beyond the baseline
adapterScriptDoc(direction: Direction): ScriptDocAdapter scripts, per directionOutbound: input (schema-validated contract input), system, http, sql, codes, errors. Inbound: request (the delivered vendor request), system, dispatch(input) (validate + run the business handler), codes — deliberately no http / sql.
ENVELOPE_REQUEST_SCRIPT_DOCSystem envelope, request siderequest (the adapter's outgoing request; return the rewritten request, omitted fields keep their values), system, errors.
ENVELOPE_RESPONSE_SCRIPT_DOCSystem envelope, response sideresponse (the completed upstream response; the return value replaces the Response object as the call's result), system, errors.
OUTBOUND_AUTH_SCRIPT_DOCOutbound auth script schemerequest (the fully built outbound request, read-only), params (decrypted auth params); return the credential headers to add. Runs in a zero-IO sandbox.
INBOUND_AUTH_SCRIPT_DOCInbound auth script schemerequest (the delivered request), params (decrypted verification params); return truthy to grant. Zero-IO sandbox.

The always-on engine baseline in every catalog: console (framework logging), crypto (md5/sha1/sha256/sha512/sm3, hmac, base64/hex codecs, uuid), cache (in-process TTL cache), dayjs, BigNumber (bignumber.js), fxp (fast-xml-parser), radashi, z (zod), URL, URLSearchParams.

Types

Base and JSON

TypeShapeNotes
CreationAudited{ id: string; createdAt?: string; createdBy?: string }Mirrors orm.CreationAuditedModel.
FullAuditedCreationAudited & { updatedAt?: string; updatedBy?: string }Mirrors orm.FullAuditedModel.
JsonValuestring | number | boolean | null | JsonValue[] | { [key: string]: JsonValue }Type-safe arbitrary payloads.
JsonObjectRecord<string, JsonValue>JSON object value.

Enums and constants

Each mirrors a Go enum verbatim; display labels and colors live with the presentation components, not here.

ExportValuesNotes
DIRECTIONS / Direction"outbound" | "inbound"The two integration flows an adapter can implement.
FAILURE_KINDS / FailureKind"input_invalid" | "output_invalid" | "upstream" | "transport" | "timeout" | "canceled" | "script" | "config" | "auth" | "handler"How a failed invocation is classified, across the log, stats and API errors.
ROUTE_FINDING_KINDS / RouteFindingKind"dangling_adapter" | "wildcard_gap" | "disabled_system" | "disabled_contract" | "uncovered_contract"Routing-diagnosis finding classification.
OUTBOUND_AUTH_SCHEMES / OutboundAuthScheme"none" | "http_basic" | "bearer" | "header" | "query" | "signature" | "script"Built-in outbound auth schemes.
INBOUND_AUTH_SCHEMES / InboundAuthScheme"none" | "ip" | "http_basic" | "bearer" | "header" | "query" | "signature" | "script"Built-in inbound schemes; ip is inbound-only — a source address is verifiable only on receive.
DATA_SOURCE_MODES / DataSourceMode"read_only" | "read_write"How far a system's data source lets adapter scripts go; empty means read-only.
UNMAPPED_POLICIES / UnmappedPolicy"reject" | "passthrough" | "fallback"How a code map answers a lookup no entry matches (reject fails closed and is the default).
MASKED_SECRET"******"The placeholder the management API returns in place of a stored secret. Submitting it back on update keeps the existing value unchanged.

Contract

TypeFieldsNotes
JsonSchemaJsonObjectA self-contained JSON Schema (draft 2020‑12) document.
Contractextends FullAudited + code: string, name: string, description?: string | null, labels?: Record<string, string> | null, inputSchema?: JsonSchema | null, outputSchema?: JsonSchema | null, isEnabled: booleanA standard integration operation. labels are host-owned selection metadata; the engine stores and filters, never interprets.
ContractParamsid?: string, code, name (string), description?: string | null, labels?: Record<string, string>, inputSchema?: JsonSchema | null, outputSchema?: JsonSchema | null, isEnabled: booleanCreate/update payload; id empty on create.
ContractSearchcode?, name? (string), isEnabled?: boolean, labels?: Record<string, string>Label filter is equality: every pair must match (unlabeled contracts never match).

System

DataSourceConfig — a system's direct database connection (vendor views / exchange tables). The password is stored encrypted and masked in management responses:

FieldTypeDescription
kindDbKind (string)Database kind, mirroring the Go config.DBKind; kept broad so the form's option list is the single source of offered values.
modeDataSourceMode?Gates script write access; empty means read-only.
host / user / password / database / schema / pathstring?Connection fields (path for SQLite).
portnumber?Port.
sslModeSslMode (string) ?SSL mode, mirroring config.SSLMode.
sslRootCertstring?PEM root certificate.
TypeFieldsNotes
OutboundAuthConfigscheme: string, params?: Record<string, string>, script?: stringValues named by the scheme's sensitive parameters arrive masked. script carries the custom signing body for the script scheme.
OutboundEnvelopeConfigrequest?: string, response?: stringThe common wire structure most vendor APIs repeat, wrapped once at the system level. Either side may be empty, leaving that direction untouched.
InboundAuthConfigscheme: string, params?: Record<string, string>, script?: stringVerifies vendor-initiated calls.
RetryPolicymaxAttempts: number, initialBackoffMs?: number, maxBackoffMs?: numberDeclarative outbound retry.
Systemextends FullAudited + code: string, name: string, baseUrl?: string, outboundAuth?: OutboundAuthConfig | null, outboundEnvelope?: OutboundEnvelopeConfig | null, inboundAuth?: InboundAuthConfig | null, dataSource?: DataSourceConfig | null, params?: Record<string, string> | null, timeoutMs?: number, retry?: RetryPolicy | null, isEnabled: booleanOne external system instance: where it lives and how to authenticate with it in both directions.
SystemParamssame fields plus id?: stringSensitive values may carry MASKED_SECRET to keep the stored secret unchanged.
SystemSearchcode?, name? (string), isEnabled?: boolean

Adapter

TypeFieldsNotes
Adapterextends FullAudited + systemId: string, contractId: string, direction: Direction, script: string, timeoutMs?: number, isEnabled: booleanOne system-to-contract binding in one flow direction.
AdapterParamsid?: string, systemId, contractId (string), direction?: Direction, script: string, timeoutMs?: number, isEnabled: booleanAn omitted direction is outbound.
AdapterSearchsystemId?, contractId? (string), direction?: Direction, isEnabled?: boolean

Route

TypeFieldsNotes
Routeextends FullAudited + routeKey: string, contractId: string, systemId: string, isEnabled: booleanAn empty contractId scopes the rule to every contract; an empty routeKey is the default route.
RouteParamsid?: string, routeKey?: string, contractId?: string, systemId: string, isEnabled: boolean
RouteSearchrouteKey?, contractId?, systemId? (string), isEnabled?: boolean

Code map and code-set catalog

TypeFieldsNotes
CodeValuestring | number | booleanThe JSON scalar a code map value may hold. Values keep their JSON type end to end (the server stores and emits them verbatim); lookups compare by normalized string form, so 1 and "1" address the same entry.
CodeMapEntrycanonical: CodeValue, external: CodeValue, canonicalAliases?: CodeValue[], externalAliases?: CodeValue[]One bidirectional mapping pair. Lookups match the primary or any alias; translations always emit the opposite side's primary.
CodeMapextends FullAudited + systemId: string, codeSet: string, name: string, entries?: CodeMapEntry[], onUnmapped: UnmappedPolicy, fallbackCanonical?: CodeValue, fallbackExternal?: CodeValue, isEnabled: booleanThe value translation of one code set between the host's canonical codes and one external system's codes.
CodeMapParamssame fields plus id?: string; onUnmapped?: UnmappedPolicyAn omitted policy is reject.
CodeMapSearchsystemId?, codeSet?, name? (string), isEnabled?: boolean
CodeSetInfocodeSet: string, name: stringOne code set the host catalog exposes (mirrors mold.CodeSetInfo).
CodeInfocode: string, label: stringOne code within a host code set.
CodeSetCatalogsupported: boolean, codeSets?: CodeSetInfo[]supported: false when the host registered no enumerable catalog — the mapping editor then falls back to free-text input.
CodeCatalogsupported: boolean, codes?: CodeInfo[]The list_codes reply for one code set.

Log

TypeFieldsNotes
HttpExchangemethod: string, url: string, requestHeaders?: Record<string, string>, requestBody?: string, status?: number, responseHeaders?: Record<string, string>, responseBody?: string, durationMs: number, error?: stringOne wire exchange captured while an adapter script ran, shared by invocation logs and the dry-run trace. Bodies and header values arrive masked and truncated.
InvocationLogextends CreationAudited + systemCode: string, contractCode: string, direction: Direction, failureKind?: FailureKind | "", durationMs: number, input?: JsonValue, output?: JsonValue, httpTrace?: HttpExchange[] | null, error?: string | null, requestId: stringOne recorded invocation: classification, timing, and the masked, size-capped captures. Read-only. failureKind is empty for a successful invocation.
LogSearchsystemCode?, contractCode? (string), direction?: Direction, failureKind?: FailureKind, requestId?: string

Ops

TypeFieldsNotes
DryRunParamssystemCode: string, contractCode: string, script?: string, input?: JsonValueEmpty script falls back to the saved adapter.
DryRunResultoutput: JsonValue, trace: HttpExchange[] | null, failureKind?: FailureKind | "", error?: stringThe trace is populated even when the run failed, so operators see how far the script got.
InboundRequestInputmethod?, path?, body? (string), headers?: Record<string, string>, query?: Record<string, string>The synthetic vendor request of an inbound dry run.
DryRunInboundParamssystemCode: string, contractCode: string, script?: string, request: InboundRequestInput, handlerOutput?: JsonValuehandlerOutput is the stubbed handler's sample.
InboundDryRunResultreply: JsonValue, dispatchedInput: JsonValue, failureKind?: FailureKind | "", error?: stringThe reply the vendor would receive plus what the script dispatched — both translation directions verified at once.
TestConnectionParamssystemCode: string, method?: string, path?: stringConnection probe against a saved system.
HttpProbereachable: boolean, status?: number, statusText?: string, durationMs: number, error?: stringOne probe request against the system base URL.
DatabaseProbereachable: boolean, version?: string, durationMs: number, error?: stringOne throwaway connection against the system data source.
ConnectionCheckhttp?: HttpProbe, database?: DatabaseProbeEach probe is present iff the system configures that transport.

Diagnostics and stats

TypeFieldsNotes
RouteFindingkind: RouteFindingKind, routeId?: string, routeKey: string, contractCode?, contractName?, systemCode?, systemName? (string)routeKey is always meaningful (an empty string is the default route); the code/name pairs identify the involved route, contract, and system so the UI needs no extra lookups.
RouteDiagnosticsfindings: RouteFinding[]The point-in-time report of the routing table's configuration gaps.
InvocationStatssystem: string, contract: string, direction: Direction, calls: number, successes: number, failures?: Partial<Record<FailureKind, number>>, avgDurationMs: number, maxDurationMs: number, lastError?: string, lastErrorAt?: stringPer-node aggregate of one (system, contract, direction) tuple since process start.
IntegrationStatsResultstats: InvocationStats[]The sys/monitor.get_integration_stats response envelope.

Page prop types (IntegrationContractPageProps, IntegrationSystemPageProps, IntegrationAdapterPageProps, IntegrationRoutePageProps, IntegrationCodeMapPageProps, IntegrationConsolePageProps) are exported alongside their components — see Pages for their tables.