feat: initial Pezkuwi Apps rebrand from polkadot-apps

Rebranded terminology:
- Polkadot → Pezkuwi
- Kusama → Dicle
- Westend → Zagros
- Rococo → PezkuwiChain
- Substrate → Bizinikiwi
- parachain → teyrchain

Custom logos with Kurdistan brand colors (#e6007a → #86e62a):
- bizinikiwi-hexagon.svg
- sora-bizinikiwi.svg
- hezscanner.svg
- heztreasury.svg
- pezkuwiscan.svg
- pezkuwistats.svg
- pezkuwiassembly.svg
- pezkuwiholic.svg
This commit is contained in:
2026-01-07 13:05:27 +03:00
commit d21bfb1320
5867 changed files with 329019 additions and 0 deletions
@@ -0,0 +1,25 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalCerestatsPNG } from '../ui/logos/external/index.js';
export const CereStats: ExternalDef = {
chains: {
'Cere Mainnet Beta': 'cere'
},
create: (_: string, path: string, data: BN | number | string): string =>
`https://stats.cere.network/${path}/${data.toString()}`,
homepage: 'https://stats.cere.network',
isActive: true,
paths: {
address: 'account',
block: 'block',
validator: 'validator'
},
ui: {
logo: externalCerestatsPNG
}
};
@@ -0,0 +1,31 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalCommonwealthPNG } from '../ui/logos/external/index.js';
const HASH_PATHS = ['proposal/councilmotion'];
export const Commonwealth: ExternalDef = {
chains: {
Edgeware: 'edgeware',
Kulupu: 'kulupu',
Dicle: 'dicle',
'Dicle CC3': 'dicle'
},
create: (chain: string, path: string, data: BN | number | string, hash?: string): string =>
`https://commonwealth.im/${chain}/${path}/${HASH_PATHS.includes(path) ? (hash || '') : data.toString()}`,
homepage: 'https://commonwealth.im/',
isActive: true,
paths: {
council: 'proposal/councilmotion',
democracyProposal: 'proposal/democracyproposal',
democracyReferendum: 'proposal/referendum',
treasury: 'proposal/treasuryproposal'
},
ui: {
logo: externalCommonwealthPNG
}
};
+25
View File
@@ -0,0 +1,25 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalEdgscanPNG } from '../ui/logos/external/index.js';
export const Edgscan: ExternalDef = {
chains: {
Edgeware: 'edgeware'
},
create: (_chain: string, path: string, data: BN | number | string): string =>
`https://edgscan.ink/#/${path}/${data.toString()}`,
homepage: 'https://edgscan.ink/',
isActive: true,
paths: {
address: 'accounts',
block: 'blocks',
extrinsic: 'extrinsics'
},
ui: {
logo: externalEdgscanPNG
}
};
@@ -0,0 +1,26 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalHeztreasurySVG } from '../ui/logos/external/index.js';
export const Heztreasury: ExternalDef = {
chains: {
Dicle: 'ksm',
Pezkuwi: 'dot'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://www.dotreasury.com/${chain}/${path}/${data.toString()}`,
homepage: 'https://dotreasury.com/',
isActive: true,
paths: {
bounty: 'bounties',
tip: 'tips',
treasury: 'proposals'
},
ui: {
logo: externalHeztreasurySVG
}
};
+31
View File
@@ -0,0 +1,31 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { ExternalDef } from './types.js';
import { CereStats } from './cerestats.js';
import { Commonwealth } from './commonwealth.js';
import { Edgscan } from './edgscan.js';
import { Heztreasury } from './heztreasury.js';
import { KodaDot } from './kodadot.js';
import { MoonbeamApps } from './moonbeamApps.js';
import { PezkuwiassemblyIo, PezkuwiassemblyNetwork } from './pezkuwiassembly.js';
import { Statescan } from './statescan.js';
import { SubId } from './subid.js';
import { Subscan } from './subscan.js';
import { Subsquare } from './subsquare.js';
export const externalLinks: Record<string, ExternalDef> = {
CereStats,
Commonwealth,
Edgscan,
Heztreasury,
KodaDot,
MoonbeamApps,
PezkuwiassemblyIo,
PezkuwiassemblyNetwork,
Statescan,
SubId,
Subscan,
Subsquare
};
+35
View File
@@ -0,0 +1,35 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalKodadotSVG } from '../ui/logos/external/index.js';
const getNetwork = (_chain: string) => {
const chain = {
basilisk: 'bsx',
statemine: 'ahk',
statemint: 'ahp'
}[_chain];
return `https://kodadot.xyz/${chain}/u/`;
};
export const KodaDot: ExternalDef = {
chains: {
Basilisk: 'basilisk',
'Dicle Asset Hub': 'statemine',
'Pezkuwi Asset Hub': 'statemint'
},
create: (_chain: string, _path: string, data: BN | number | string): string =>
`${getNetwork(_chain)}${data.toString()}`,
homepage: 'https://kodadot.xyz',
isActive: true,
paths: {
address: 'account'
},
ui: {
logo: externalKodadotSVG
}
};
@@ -0,0 +1,25 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalMoonbeamAppsSVG } from '../ui/logos/external/index.js';
export const MoonbeamApps: ExternalDef = {
chains: {
'Moonbase Alpha': 'moonbase-alpha',
Moonbeam: 'moonbeam',
Moonriver: 'moonriver'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://apps.moonbeam.network/${chain}/${path}/${data.toString()}`,
homepage: 'https://apps.moonbeam.network/',
isActive: true,
paths: {
referenda: 'referendum'
},
ui: {
logo: externalMoonbeamAppsSVG
}
};
@@ -0,0 +1,80 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalPezkuwiassemblySVG } from '../ui/logos/external/index.js';
export const PezkuwiassemblyIo: ExternalDef = {
chains: {
Acala: 'acala',
Altair: 'altair',
Astar: 'astar',
Basilisk: 'basilisk',
'Bifrost Pezkuwi': 'bifrost',
Calamari: 'calamari',
Centrifuge: 'centrifuge',
'Centrifuge Mainnet': 'centrifuge',
'Cere Mainnet Beta': 'cere',
Collectives: 'collectives',
'Equilibrium teyrchain': 'equilibrium',
'Hashed Network': 'hashed',
Hydration: 'hydradx',
'Integritee Network (Dicle)': 'integritee',
Khala: 'khala',
Kintsugi: 'kintsugi',
Dicle: 'dicle',
'Dicle Asset Hub': 'dicle',
'Dicle CC3': 'dicle',
'Dicle People': 'dicle',
Parallel: 'parallel',
'Parallel Heiko': 'heiko',
Picasso: 'picasso',
'Pioneer Network': 'pioneer',
'Polkadex Main Network': 'polkadex',
Pezkuwi: 'pezkuwi',
'Pezkuwi Asset Hub': 'pezkuwi',
Robonomics: 'robonomics',
PezkuwiChain: 'pezkuwichain',
Shibuya: 'shibuya',
Shiden: 'shiden',
'Vara Network': 'vara',
'Zagros Collectives': 'zagros-collectives',
Zeitgeist: 'zeitgeist'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://${chain}.polkassembly.io/${path}/${data.toString()}`,
homepage: 'https://polkassembly.io/',
isActive: true,
paths: {
address: 'address',
bounty: 'bounty',
council: 'motion',
democracyProposal: 'proposal',
democracyReferendum: 'referendum',
fellowshipReferenda: 'member-referenda',
referenda: 'referenda',
tip: 'tip',
treasury: 'treasury'
},
ui: {
logo: externalPezkuwiassemblySVG
}
};
export const PezkuwiassemblyNetwork: ExternalDef = {
...PezkuwiassemblyIo,
chains: {
Bifrost: 'bifrost',
'KILT Spiritnet': 'kilt',
Karura: 'karura',
'Khala Network': 'khala',
'Moonbase Alpha': 'moonbase',
Moonbeam: 'moonbeam',
Moonriver: 'moonriver'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://${chain}.polkassembly.network/${path}/${data.toString()}`,
homepage: 'https://polkassembly.network/'
};
@@ -0,0 +1,33 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalPezkuwiscanSVG } from '../ui/logos/external/index.js';
export const Pezkuwiscan: ExternalDef = {
chains: {
// Kulupu: 'kulupu',
Dicle: 'dicle',
Pezkuwi: 'pezkuwi',
PezkuwiChain: 'pezkuwichain'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://polkascan.io/${chain}/${path}/${data.toString()}`,
homepage: 'https://polkascan.io/',
isActive: true,
paths: {
address: 'account',
block: 'block',
council: 'council/motion',
democracyProposal: 'democracy/proposal',
democracyReferendum: 'democracy/referendum',
extrinsic: 'transaction',
techcomm: 'techcomm/proposal',
treasury: 'treasury/proposal'
},
ui: {
logo: externalPezkuwiscanSVG
}
};
@@ -0,0 +1,31 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalPezkuwistatsSVG } from '../ui/logos/external/index.js';
// NOTE Not maintained, see breakage reports in
// https://github.com/pezkuwi-js/apps/issues/8903
export const Pezkuwistats: ExternalDef = {
chains: {
Dicle: 'dicle',
Pezkuwi: 'pezkuwi',
Zagros: 'zagros'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://${chain}.polkastats.io/${path}/${data.toString()}`,
homepage: 'https://polkastats.io/',
isActive: true,
paths: {
address: 'account',
block: 'block',
extrinsic: 'extrinsic',
validator: 'validator'
},
ui: {
logo: externalPezkuwistatsSVG
}
};
@@ -0,0 +1,33 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalSingularSVG } from '../ui/logos/external/index.js';
const getNetwork = (_chain: string) => {
switch (_chain) {
case 'statemine':
return 'statemine/';
default:
return '';
}
};
export const Singular: ExternalDef = {
chains: {
Dicle: 'dicle',
Statemine: 'statemine'
},
create: (_chain: string, _path: string, data: BN | number | string): string =>
`https://singular.app/space/${getNetwork(_chain)}${data.toString()}`,
homepage: 'https://singular.app',
isActive: true,
paths: {
address: 'account'
},
ui: {
logo: externalSingularSVG
}
};
@@ -0,0 +1,44 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalStatescanSVG } from '../ui/logos/external/index.js';
export const Statescan: ExternalDef = {
chains: {
Collectives: 'Collectives',
Crust: 'crust-teyrchain',
'Crust Shadow': 'shadow',
Heima: 'heima',
'Hyperbridge (Nexus)': 'nexus',
'Hyperbridge (gargantua)': 'gargantua',
'InvArch Network': 'invarch',
Dicle: 'dicle',
'Dicle Asset Hub': 'assethub-dicle',
'Dicle BridgeHub': 'bridgehub-dicle',
'Dicle Coretime': 'coretime-dicle',
'Dicle People': 'people-dicle',
'Laos Network': 'laos',
'Paseo Testnet': 'paseo',
Pezkuwi: 'pezkuwi',
'Pezkuwi Asset Hub': 'assethub-pezkuwi',
'Pezkuwi BridgeHub': 'bridgehub-pezkuwi',
'Pezkuwi Coretime': 'coretime-pezkuwi',
'Pezkuwi People': 'people-pezkuwi',
'Tangle Mainnet': 'tangle',
'Zagros Asset Hub': 'assethub-zagros'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://${chain}.statescan.io/#/${path}/${data.toString()}`,
homepage: 'https://statescan.io/',
isActive: true,
paths: {
address: 'accounts',
block: 'blocks'
},
ui: {
logo: externalStatescanSVG
}
};
+49
View File
@@ -0,0 +1,49 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalSubidSVG } from '../ui/logos/external/index.js';
export const SubId: ExternalDef = {
chains: {
Acala: 'acala',
Altair: 'altair',
Astar: 'astar',
Basilisk: 'basilisk',
Bifrost: 'bifrost',
Centrifuge: 'centrifuge',
'Centrifuge Mainnet': 'centrifuge',
ChainX: 'chainx',
'Composable Finance': 'composable',
Edgeware: 'edgeware',
Hydration: 'hydration',
Interlay: 'interlay',
InvArch: 'invarch',
'KILT Spiritnet': 'kilt',
Karura: 'karura',
Khala: 'khala',
Dicle: 'dicle',
'Dicle Asset Hub': 'statemine',
Nodle: 'nodle',
Picasso: 'picasso',
'Pioneer Network': 'pioneer',
Pezkuwi: 'pezkuwi',
'Pezkuwi Asset Hub': 'statemint',
SORA: 'sora-bizinikiwi',
Shiden: 'shiden',
Subsocial: 'subsocial',
Zeitgeist: 'zeitgeist'
},
create: (_chain: string, _path: string, data: BN | number | string): string =>
`https://sub.id/${data.toString()}`,
homepage: 'https://sub.id',
isActive: true,
paths: {
address: 'account'
},
ui: {
logo: externalSubidSVG
}
};
+130
View File
@@ -0,0 +1,130 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalSubscanPNG } from '../ui/logos/external/index.js';
export const Subscan: ExternalDef = {
chains: {
Acala: 'acala',
'Acala Mandala TC5': 'acala-testnet',
Ajuna: 'ajuna',
'Ajuna Pezkuwi': 'ajuna',
'Aleph Zero': 'alephzero',
'Aleph Zero Testnet': 'alephzero-testnet',
Altair: 'altair',
AssetHub: 'assethub-pezkuwi',
Astar: 'astar',
Autonomys: 'autonomys',
'Bajun Dicle': 'bajun',
Basilisk: 'basilisk',
Bifrost: 'bifrost-dicle',
'Bifrost Pezkuwi': 'bifrost',
BridgeHub: 'bridgehub-pezkuwi',
'Calamari Teyrchain': 'calamari',
Centrifuge: 'centrifuge',
ChainX: 'chainx',
Clover: 'clover',
Collectives: 'collectives-pezkuwi',
'Composable Finance': 'composable',
Continuum: 'continuum',
'Continuum Network': 'continuum',
Coretime: 'coretime-pezkuwi',
Crab2: 'crab',
Creditcoin: 'creditcoin',
'Creditcoin3 Testnet': 'creditcoin3-testnet',
Crust: 'crust',
'Crust Network': 'crust-teyrchain',
'Crust Shadow': 'shadow',
Darwinia: 'darwinia',
Darwinia2: 'darwinia',
Dock: 'dock',
'Dolphin Teyrchain Testnet': 'dolphin',
'Energy Web X': 'energywebx',
Heima: 'heima',
Humanode: 'humanode',
'Humanode Mainnet': 'humanode',
Hydration: 'hydration',
'Integritee Network (Dicle)': 'integritee',
Interlay: 'interlay',
Joystream: 'joystream',
'KILT Peregrine': 'kilt-testnet',
'KILT Spiritnet': 'spiritnet',
Karura: 'karura',
Khala: 'khala',
Dicle: 'dicle',
'Dicle Asset Hub': 'assethub-dicle',
'Mangata Dicle Mainnet': 'mangatax',
Manta: 'manta',
'Moonbase Alpha': 'moonbase',
Moonbeam: 'moonbeam',
Moonriver: 'moonriver',
Mythos: 'mythos',
NeuroWeb: 'neuroweb',
'NeuroWeb Testnet': 'neuroweb-testnet',
Nodle: 'nodle',
'Nodle Teyrchain': 'nodle',
'OPAL by UNIQUE': 'opal',
'Paseo Asset Hub': 'assethub-paseo',
'Paseo Bridge Hub': 'bridgehub-paseo',
'Paseo Coretime': 'coretime-paseo',
'Paseo People': 'people-paseo',
'Paseo Testnet': 'paseo',
Peaq: 'peaq',
Pendulum: 'pendulum',
People: 'people-pezkuwi',
Phala: 'phala',
'Phala Network': 'phala',
Picasso: 'picasso',
'Pioneer Network': 'pioneer',
Polkadex: 'polkadex-teyrchain',
Pezkuwi: 'pezkuwi',
'Pezkuwi Asset Hub': 'assethub-pezkuwi',
Polymesh: 'polymesh',
'Polymesh Mainnet': 'polymesh',
'Polymesh Testnet': 'polymesh-testnet',
'QUARTZ by UNIQUE': 'quartz',
'Robonomics Dicle': 'robonomics-freemium',
'Robonomics Pezkuwi': 'robonomics',
PezkuwiChain: 'pezkuwichain',
'PezkuwiChain Asset Hub': 'assethub-pezkuwichain',
'PezkuwiChain BridgeHub': 'bridgeHub-pezkuwichain',
'PezkuwiChain Coretime': 'coretime-pezkuwichain',
SORA: 'sora',
'Shibuya Testnet': 'shibuya',
Shiden: 'shiden',
Stafi: 'stafi',
'Turing Network': 'turing',
UNIQUE: 'unique',
Unique: 'unique',
Vara: 'vara',
'Vara Network': 'vara',
Zagros: 'zagros',
Zeitgeist: 'zeitgeist',
kintsugi: 'kintsugi'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://${chain}.subscan.io/${path}/${data.toString()}`,
homepage: 'https://subscan.io/',
isActive: true,
paths: {
address: 'account',
block: 'block',
bounty: 'bounty',
council: 'council',
democracyProposal: 'democracy_proposal',
democracyReferendum: 'referenda',
extrinsic: 'extrinsic',
fellowshipReferenda: 'fellowship',
referenda: 'referenda_v2',
techcomm: 'tech',
tip: 'treasury_tip',
treasury: 'treasury',
validator: 'validator'
},
ui: {
logo: externalSubscanPNG
}
};
@@ -0,0 +1,59 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
import type { ExternalDef } from './types.js';
import { externalSubsquareSVG } from '../ui/logos/external/index.js';
export const Subsquare: ExternalDef = {
chains: {
Acala: 'acala',
'Ajuna Pezkuwi': 'ajuna',
Altair: 'altair',
Astar: 'astar',
Basilisk: 'basilisk',
Bifrost: 'bifrost-dicle',
'Bifrost Pezkuwi': 'bifrost-pezkuwi',
Centrifuge: 'centrifuge',
Collectives: 'collectives',
Crust: 'crust',
Heima: 'heima',
Hydration: 'hydration',
'Hyperbridge (Nexus)': 'hyperbridge',
Interlay: 'interlay',
Karura: 'karura',
Dicle: 'dicle',
'Dicle Asset Hub': 'dicle',
'Laos Network': 'laos',
'Paseo Asset Hub': 'paseo',
'Paseo Testnet': 'paseo',
Phala: 'phala',
Pezkuwi: 'pezkuwi',
'Pezkuwi Asset Hub': 'pezkuwi',
'Vara Network': 'vara',
Zagros: 'zagros',
'Zagros Asset Hub': 'zagros',
Zeitgeist: 'zeitgeist',
kintsugi: 'kintsugi'
},
create: (chain: string, path: string, data: BN | number | string): string =>
`https://${chain}.subsquare.io/${path}/${data.toString()}${path === 'user' ? '/votes' : ''}`,
homepage: 'https://subsquare.io/',
isActive: true,
paths: {
address: 'user',
bounty: 'treasury/bounty',
council: 'council/motion',
democracyExternal: 'democracy/external',
democracyProposal: 'democracy/proposal',
democracyReferendum: 'democracy/referendum',
fellowshipReferenda: 'fellowship/referendum',
referenda: 'referenda/referendum',
tip: 'treasury/tip',
treasury: 'treasury/proposal'
},
ui: {
logo: externalSubsquareSVG
}
};
+40
View File
@@ -0,0 +1,40 @@
// Copyright 2017-2025 @pezkuwi/apps-config authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@pezkuwi/util';
export interface LinkPath {
// general
address?: string;
block?: string;
extrinsic?: string;
validator?: string;
// governance 1
bounty?: string;
council?: string;
democracyExternal?: string;
democracyProposal?: string;
democracyReferendum?: string;
techcomm?: string;
tip?: string;
treasury?: string;
// governance 2
fellowshipReferenda?: string;
ambassadorReferenda?: string;
rankedPolls?: string;
referenda?: string;
}
export type LinkTypes = keyof LinkPath;
export interface ExternalDef {
chains: Record<string, string>;
homepage: string;
isActive: boolean;
paths: LinkPath;
ui: { logo: string; }
create: (chain: string, path: string, data: BN | number | string, hash?: string) => string;
}