mirror of
https://github.com/pezkuwichain/pezkuwi-api.git
synced 2026-10-20 18:56:29 +00:00
* chore(papi): commit the sources behind the four polkadot-api packages papi-utils, bizinikiwi-bindings, metadata-builders and merkleize-metadata held only dist/ builds, and no repository held their source. Every source map in dist/ embeds the TypeScript it was compiled from; that is now committed as src/ (59 files), and it matches upstream polkadot-api (MIT) exactly once @polkadot-api/* imports are renamed: papi-utils @polkadot-api/utils 0.2.0 bizinikiwi-bindings @polkadot-api/substrate-bindings 0.16.6 metadata-builders @polkadot-api/metadata-builders 0.13.0-0.13.2 merkleize-metadata @polkadot-api/merkleize-metadata 1.1.21-1.1.23 scripts/check-papi-sources.mjs, run in the lint job, fails unless the source embedded in dist/ is exactly the committed src/. tsconfig.json excludes these src/ trees; ESLint already skipped the packages. Each README now states the upstream package and version. * chore(papi): keep the upstream sources in upstream-src/ The pezkuwi-dev build treats any package with a src/ directory as its own: it requires our license header on every file and builds it. These are upstream files that must stay byte-identical to the source embedded in dist/, so they live in upstream-src/ instead, which neither the build nor the root tsconfig picks up.
162 lines
4.2 KiB
TypeScript
162 lines
4.2 KiB
TypeScript
import { CodecType } from "scale-ts"
|
|
import { V14Lookup } from "./lookup"
|
|
import { storageMap } from "./pallets"
|
|
import { HexString } from "../scale"
|
|
import { itemDeprecation, variantDeprecation } from "./deprecation"
|
|
import { viewFunction } from "./runtime-api"
|
|
import { V14 } from "./v14"
|
|
import { V16 } from "./v16"
|
|
import { V15 } from "./v15"
|
|
import { Metadata } from "./metadata"
|
|
|
|
type EnumRef<T> =
|
|
| ({
|
|
type: number
|
|
} & (T extends 16
|
|
? { deprecationInfo: CodecType<typeof variantDeprecation> }
|
|
: {}))
|
|
| undefined
|
|
|
|
type DeprecationInfo<T> = T extends 16
|
|
? { deprecationInfo: CodecType<typeof itemDeprecation> }
|
|
: {}
|
|
|
|
export type UnifiedMetadata<T extends 14 | 15 | 16 = 14 | 15 | 16> = {
|
|
version: T
|
|
lookup: V14Lookup
|
|
pallets: Array<
|
|
{
|
|
name: string
|
|
storage:
|
|
| {
|
|
prefix: string
|
|
items: Array<
|
|
{
|
|
name: string
|
|
modifier: number
|
|
type:
|
|
| { tag: "plain"; value: number }
|
|
| { tag: "map"; value: CodecType<typeof storageMap> }
|
|
fallback: HexString
|
|
docs: string[]
|
|
} & DeprecationInfo<T>
|
|
>
|
|
}
|
|
| undefined
|
|
calls: EnumRef<T>
|
|
events: EnumRef<T>
|
|
constants: Array<
|
|
{
|
|
name: string
|
|
type: number
|
|
value: HexString
|
|
docs: string[]
|
|
} & DeprecationInfo<T>
|
|
>
|
|
errors: EnumRef<T>
|
|
associatedTypes: Array<{
|
|
name: string
|
|
type: number
|
|
docs: string[]
|
|
}>
|
|
viewFns: Array<CodecType<typeof viewFunction>>
|
|
index: number
|
|
docs: string[]
|
|
} & DeprecationInfo<T>
|
|
>
|
|
extrinsic: {
|
|
version: number[]
|
|
signedExtensions: Array<{
|
|
identifier: string
|
|
type: number
|
|
additionalSigned: number
|
|
}>
|
|
} & (T extends 14
|
|
? {
|
|
type: number
|
|
}
|
|
: { address: number; call: number; signature: number }) &
|
|
(T extends 16
|
|
? { signedExtensionsByVersion: Array<[number, number[]]> }
|
|
: {})
|
|
apis: Array<
|
|
{
|
|
name: string
|
|
methods: Array<
|
|
{
|
|
name: string
|
|
inputs: Array<{ name: string; type: number }>
|
|
output: number
|
|
docs: string[]
|
|
} & DeprecationInfo<T>
|
|
>
|
|
docs: string[]
|
|
} & (T extends 16 ? { version: number } : {}) &
|
|
DeprecationInfo<T>
|
|
>
|
|
} & (T extends 14
|
|
? {}
|
|
: {
|
|
outerEnums: { call: number; event: number; error: number }
|
|
custom: Array<[string, { type: number; value: HexString }]>
|
|
})
|
|
|
|
export const unifyMetadata = (
|
|
metadata: Metadata | Metadata["metadata"] | V14 | V15 | V16,
|
|
): UnifiedMetadata => {
|
|
// complete metadata
|
|
if ("magicNumber" in metadata) metadata = metadata.metadata
|
|
if ("tag" in metadata) {
|
|
if (
|
|
metadata.tag !== "v14" &&
|
|
metadata.tag !== "v15" &&
|
|
metadata.tag !== "v16"
|
|
)
|
|
throw new Error("Only metadata 14, 15, and 16 are supported")
|
|
metadata = metadata.value
|
|
}
|
|
|
|
// v16
|
|
if ("signedExtensionsByVersion" in metadata.extrinsic) {
|
|
return { version: 16, ...(metadata as V16) }
|
|
}
|
|
// v15
|
|
if ("custom" in metadata) {
|
|
const { lookup, extrinsic, custom, apis, pallets, outerEnums } =
|
|
metadata as V15
|
|
|
|
return {
|
|
version: 15,
|
|
lookup,
|
|
pallets: pallets.map((p): UnifiedMetadata<15>["pallets"][number] => ({
|
|
...p,
|
|
calls: p.calls != null ? { type: p.calls } : undefined,
|
|
events: p.events != null ? { type: p.events } : undefined,
|
|
errors: p.errors != null ? { type: p.errors } : undefined,
|
|
viewFns: [],
|
|
associatedTypes: [],
|
|
})),
|
|
extrinsic: { ...extrinsic, version: [extrinsic.version] },
|
|
apis,
|
|
outerEnums,
|
|
custom,
|
|
}
|
|
}
|
|
// fallback, v14
|
|
const { lookup, extrinsic, pallets } = metadata as V14
|
|
return {
|
|
version: 14,
|
|
lookup,
|
|
pallets: pallets.map((p): UnifiedMetadata<14>["pallets"][number] => ({
|
|
...p,
|
|
calls: p.calls != null ? { type: p.calls } : undefined,
|
|
events: p.events != null ? { type: p.events } : undefined,
|
|
errors: p.errors != null ? { type: p.errors } : undefined,
|
|
viewFns: [],
|
|
associatedTypes: [],
|
|
})),
|
|
extrinsic: { ...extrinsic, version: [extrinsic.version] },
|
|
apis: [],
|
|
}
|
|
}
|