feat(marketplace): expose w.mkt.order as 4th wallet in marketplaceMemberWallet DTO + regen
DTO `MarketplaceMemberWallet.wallets` теперь возвращает массив из 4 USER_SHARED-кошельков пайщика для Стола заказов: 1. w.wal.share — Паевой | Цифровой Кошелёк 2. w.wal.member — Членский | Цифровой Кошелёк 3. w.mkt.member — Членский | Стол Заказов (свободные средства программы) 4. w.mkt.order — Резерв | Стол Заказов (под конкретный Order; новый, 2026-05-28) Поле `blocked` остаётся в DTO для wallet/withdraw flow и legacy данных, но для marketplace-кошельков (w.mkt.member, w.mkt.order) всегда `0` после миграции с BLOCK/UNBLOCK на пары TRANSFER — резерв выражается через `.available` отдельного кошелька w.mkt.order. Обновлены description'ы @Field и @Query на бизнес-словаре (без story-ссылок). Regen: - cooptypes/ledger2/wallets.generated.ts: wallets=16, mapping=8 (из C++). - controller/schema.gql, controller/zeus/index.ts, sdk/zeus/index.ts: только description-only diff в MarketplaceMemberWallet/Entry, никаких breaking changes в типах GraphQL/zeus. Unit-тесты marketplace-member-wallet-resolver.test.ts обновлены под 4-й кошелёк (4/4 passed, runInBand). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -8137,7 +8137,7 @@ type MarketplaceMemberWallet {
|
||||
username: String!
|
||||
|
||||
"""
|
||||
Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member
|
||||
Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order
|
||||
"""
|
||||
wallets: [MarketplaceWalletEntry!]!
|
||||
}
|
||||
@@ -9254,7 +9254,9 @@ type MarketplaceWalletEntry {
|
||||
"""Доступный остаток (`userwallets.available`)"""
|
||||
available: String!
|
||||
|
||||
"""Заблокированный остаток (`userwallets.blocked`)"""
|
||||
"""
|
||||
Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных.
|
||||
"""
|
||||
blocked: String!
|
||||
|
||||
"""Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY)"""
|
||||
@@ -9268,7 +9270,9 @@ type MarketplaceWalletEntry {
|
||||
"""
|
||||
label: String!
|
||||
|
||||
"""eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member)"""
|
||||
"""
|
||||
eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order)
|
||||
"""
|
||||
name: String!
|
||||
|
||||
"""program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов"""
|
||||
@@ -13286,7 +13290,7 @@ type Query {
|
||||
marketplaceListWriteoffProposals(data: MarketplaceListWriteoffProposalsInput!, options: PaginationInput): PaginatedMarketplaceWriteoffProposals!
|
||||
|
||||
"""
|
||||
Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member
|
||||
Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order
|
||||
"""
|
||||
marketplaceMemberWallet: MarketplaceMemberWallet!
|
||||
|
||||
|
||||
+17
-7
@@ -1,23 +1,30 @@
|
||||
import { Field, Int, ObjectType } from '@nestjs/graphql';
|
||||
|
||||
/**
|
||||
* Story 1.5: кошельки пайщика на Столе заказов.
|
||||
* Кошельки пайщика на Столе заказов.
|
||||
*
|
||||
* По стандарту контракта marketplace (см. `marketplace/p.mkt.supply.standard.yaml`,
|
||||
* раздел «wallets») в процессах ЦПП «Стол Заказов» у пайщика участвуют три
|
||||
* раздел «wallets») в процессах ЦПП «Стол Заказов» у пайщика участвуют четыре
|
||||
* USER_SHARED-кошелька:
|
||||
*
|
||||
* 1. `w.wal.share` — ЦПП «Цифровой Кошелёк», паевые взносы деньгами (program_id=1).
|
||||
* 2. `w.wal.member` — Универсальный членский кошелёк (program_id=1), играет роль
|
||||
* транзитного: средства идут share → member → mkt.member.
|
||||
* 3. `w.mkt.member` — Программный членский кошелёк ЦПП «Стол Заказов»
|
||||
* (program_id=2), формируется при первом orderoffer/createorder.
|
||||
* (program_id=2), .available — свободные средства программы.
|
||||
* 4. `w.mkt.order` — Резерв средств пайщика под конкретный Order (program_id=2).
|
||||
* Сюда движутся средства на createorder (TRANSFER из
|
||||
* w.mkt.member), обратно — на cancel/decline/expire.
|
||||
* Сжигается BURN'ом на signiss2 (выдача имущества).
|
||||
*
|
||||
* Источник балансов — core `UserWalletRepository.findByUsername` (PG-кеш
|
||||
* `ledger2::userwallets`); RPC к chain не выполняется (ADR-011). Каждый
|
||||
* кошелёк отдаётся «как есть» — `available` и `blocked` напрямую из L3,
|
||||
* без сворачивания/переименования. Если L3-записи ещё нет (пайщик не
|
||||
* двигал средства через данный кошелёк) — возвращаем `0/0`.
|
||||
* двигал средства через данный кошелёк) — возвращаем `0/0`. Поле `blocked`
|
||||
* для marketplace-кошельков всегда `0` после миграции с BLOCK/UNBLOCK на
|
||||
* пары TRANSFER (2026-05-28) — резерв выражается через .available
|
||||
* отдельного кошелька w.mkt.order.
|
||||
*
|
||||
* Платформенный кошелёк `w.mkt.payout` (COOPERATIVE, не per-user) сюда не
|
||||
* включается — это кошелёк выплат поставщикам, отображается в admin-вьюхе
|
||||
@@ -25,7 +32,7 @@ import { Field, Int, ObjectType } from '@nestjs/graphql';
|
||||
*/
|
||||
@ObjectType('MarketplaceWalletEntry')
|
||||
export class MarketplaceWalletEntryDTO {
|
||||
@Field(() => String, { description: 'eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member)' })
|
||||
@Field(() => String, { description: 'eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order)' })
|
||||
public readonly name!: string;
|
||||
|
||||
@Field(() => String, { description: 'Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY)' })
|
||||
@@ -46,7 +53,10 @@ export class MarketplaceWalletEntryDTO {
|
||||
@Field(() => String, { description: 'Доступный остаток (`userwallets.available`)' })
|
||||
public readonly available!: string;
|
||||
|
||||
@Field(() => String, { description: 'Заблокированный остаток (`userwallets.blocked`)' })
|
||||
@Field(() => String, {
|
||||
description:
|
||||
'Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных.',
|
||||
})
|
||||
public readonly blocked!: string;
|
||||
|
||||
constructor(init: {
|
||||
@@ -77,7 +87,7 @@ export class MarketplaceMemberWalletDTO {
|
||||
public readonly coopname!: string;
|
||||
|
||||
@Field(() => [MarketplaceWalletEntryDTO], {
|
||||
description: 'Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member',
|
||||
description: 'Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order',
|
||||
})
|
||||
public readonly wallets!: MarketplaceWalletEntryDTO[];
|
||||
|
||||
|
||||
+6
-5
@@ -22,11 +22,11 @@ import { MarketplaceMembershipGuard } from '../guards/marketplace-membership.gua
|
||||
* (`marketplace/p.mkt.supply.standard.yaml`, секция «wallets»). Порядок
|
||||
* соответствует pipeline средств в orderoffer/createorder:
|
||||
* `w.wal.share` (деньги) → `w.wal.member` (универсальный членский) →
|
||||
* `w.mkt.member` (программный членский ЦПП).
|
||||
* `w.mkt.member` (программный членский ЦПП) → `w.mkt.order` (резерв под Order).
|
||||
*
|
||||
* `label` — UX-метка в формате `<тип взноса> | <программа>` (review
|
||||
* @dacom-dark-sun PR #380 line 34). Не та же что `human_name` из
|
||||
* cooptypes (там длинное юр.описание); этот label короткий, для panel/list.
|
||||
* `label` — UX-метка в формате `<тип взноса> | <программа>`. Не та же что
|
||||
* `human_name` из cooptypes (там длинное юр.описание); этот label короткий,
|
||||
* для panel/list.
|
||||
*/
|
||||
const MARKETPLACE_RELEVANT_WALLETS: ReadonlyArray<{
|
||||
name: string;
|
||||
@@ -36,6 +36,7 @@ const MARKETPLACE_RELEVANT_WALLETS: ReadonlyArray<{
|
||||
{ name: 'w.wal.share', program_id: 1, label: 'Паевой | Цифровой Кошелёк' },
|
||||
{ name: 'w.wal.member', program_id: 1, label: 'Членский | Цифровой Кошелёк' },
|
||||
{ name: 'w.mkt.member', program_id: 2, label: 'Членский | Стол Заказов' },
|
||||
{ name: 'w.mkt.order', program_id: 2, label: 'Резерв | Стол Заказов' },
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -65,7 +66,7 @@ export class MarketplaceMemberWalletResolver {
|
||||
@Query(() => MarketplaceMemberWalletDTO, {
|
||||
name: 'marketplaceMemberWallet',
|
||||
description:
|
||||
'Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member',
|
||||
'Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order',
|
||||
})
|
||||
@UseGuards(GqlJwtAuthGuard, MarketplaceMembershipGuard)
|
||||
async marketplaceMemberWallet(
|
||||
|
||||
+33
-16
@@ -1,16 +1,19 @@
|
||||
/**
|
||||
* Unit-тесты MarketplaceMemberWalletResolver (Story 1.5, review-fix 2026-05-14).
|
||||
* Unit-тесты MarketplaceMemberWalletResolver.
|
||||
*
|
||||
* После review @dacom-dark-sun (PR #380) resolver перепиcан:
|
||||
* - Возвращает массив всех 3 USER_SHARED-кошельков стандарта marketplace
|
||||
* (`w.wal.share`, `w.wal.member`, `w.mkt.member`) — каждый со своим
|
||||
* `name`/`human_name`/`available`/`blocked`, без сворачивания и без
|
||||
* старой нотации `membership_contribution`.
|
||||
* - Источник — core `UserWalletRepository.findByUsername` (PG-кеш
|
||||
* `ledger2::userwallets`), не свёрнутый `WalletService.getProgramWallet`.
|
||||
* - Пайщик без L3-записи по конкретному кошельку → `0/0` (рабочее состояние,
|
||||
* а не ошибка) — например, `w.mkt.member` появляется только после
|
||||
* первого `orderoffer`/`createorder`.
|
||||
* Resolver возвращает массив 4-х USER_SHARED-кошельков стандарта marketplace:
|
||||
* - `w.wal.share` — паевые взносы деньгами (program_id=1).
|
||||
* - `w.wal.member` — универсальный членский (program_id=1).
|
||||
* - `w.mkt.member` — программный членский Стола Заказов (program_id=2).
|
||||
* - `w.mkt.order` — резерв под Order (program_id=2). Введён 2026-05-28
|
||||
* взамен механики .blocked на w.mkt.member.
|
||||
*
|
||||
* Каждый кошелёк со своим `name`/`human_name`/`available`/`blocked`, без
|
||||
* сворачивания. Источник — core `UserWalletRepository.findByUsername`
|
||||
* (PG-кеш `ledger2::userwallets`). Пайщик без L3-записи по конкретному
|
||||
* кошельку → `0/0` (рабочее состояние, а не ошибка) — например,
|
||||
* `w.mkt.member` появляется только после первого `orderoffer`/`createorder`,
|
||||
* а `w.mkt.order` — только после первого `createorder`.
|
||||
*/
|
||||
|
||||
jest.mock('~/config/config', () => ({
|
||||
@@ -33,10 +36,11 @@ const member = {
|
||||
};
|
||||
|
||||
describe('MarketplaceMemberWalletResolver', () => {
|
||||
it('пайщик с записями share + mkt.member → массив из 3 кошельков, w.wal.member нулевой', async () => {
|
||||
it('пайщик с записями share + mkt.member + mkt.order → массив из 4 кошельков', async () => {
|
||||
const repo = makeRepo([
|
||||
{ wallet_name: 'w.wal.share', available: '125.0000 RUB', blocked: '5.0000 RUB' },
|
||||
{ wallet_name: 'w.mkt.member', available: '300.0000 RUB', blocked: '0.0000 RUB' },
|
||||
{ wallet_name: 'w.mkt.order', available: '80.0000 RUB', blocked: '0.0000 RUB' },
|
||||
// нерелевантные стол-заказам кошельки не должны попасть в выдачу
|
||||
{ wallet_name: 'w.cap.blago', available: '999.0000 RUB', blocked: '0.0000 RUB' },
|
||||
]);
|
||||
@@ -48,7 +52,7 @@ describe('MarketplaceMemberWalletResolver', () => {
|
||||
expect(dto.username).toBe('alice');
|
||||
expect(dto.coopname).toBe('voskhod');
|
||||
|
||||
expect(dto.wallets).toHaveLength(3);
|
||||
expect(dto.wallets).toHaveLength(4);
|
||||
expect(dto.wallets[0]).toMatchObject({
|
||||
name: 'w.wal.share',
|
||||
program_id: 1,
|
||||
@@ -71,20 +75,32 @@ describe('MarketplaceMemberWalletResolver', () => {
|
||||
available: '300.0000 RUB',
|
||||
blocked: '0.0000 RUB',
|
||||
});
|
||||
expect(dto.wallets[3]).toMatchObject({
|
||||
name: 'w.mkt.order',
|
||||
program_id: 2,
|
||||
label: 'Резерв | Стол Заказов',
|
||||
available: '80.0000 RUB',
|
||||
blocked: '0.0000 RUB',
|
||||
});
|
||||
});
|
||||
|
||||
it('пайщик без L3-записей вообще → 3 кошелька с 0/0 (а не NotFoundException)', async () => {
|
||||
it('пайщик без L3-записей вообще → 4 кошелька с 0/0 (а не NotFoundException)', async () => {
|
||||
const repo = makeRepo([]);
|
||||
const resolver = new MarketplaceMemberWalletResolver(repo);
|
||||
|
||||
const dto = await resolver.marketplaceMemberWallet(member as any);
|
||||
|
||||
expect(dto.wallets).toHaveLength(3);
|
||||
expect(dto.wallets).toHaveLength(4);
|
||||
for (const w of dto.wallets) {
|
||||
expect(w.available).toBe('0');
|
||||
expect(w.blocked).toBe('0');
|
||||
}
|
||||
expect(dto.wallets.map((w) => w.name)).toEqual(['w.wal.share', 'w.wal.member', 'w.mkt.member']);
|
||||
expect(dto.wallets.map((w) => w.name)).toEqual([
|
||||
'w.wal.share',
|
||||
'w.wal.member',
|
||||
'w.mkt.member',
|
||||
'w.mkt.order',
|
||||
]);
|
||||
});
|
||||
|
||||
it('human_name подтягивается из cooptypes LEDGER2_WALLET_REGISTRY', async () => {
|
||||
@@ -96,6 +112,7 @@ describe('MarketplaceMemberWalletResolver', () => {
|
||||
expect(dto.wallets[0].human_name).toBe('Паевой взнос пайщика');
|
||||
expect(dto.wallets[1].human_name).toBe('ЦК — членская часть пайщика');
|
||||
expect(dto.wallets[2].human_name).toBe('ЦПП «Стол Заказов» — программный членский у пайщика');
|
||||
expect(dto.wallets[3].human_name).toBe('ЦПП «Стол Заказов» — резерв под заказ у пайщика');
|
||||
});
|
||||
|
||||
it('w.mkt.payout (COOPERATIVE) не попадает в выдачу — это кооперативный кошелёк, не пайщика', async () => {
|
||||
|
||||
@@ -6911,7 +6911,7 @@ export type ValueTypes = {
|
||||
["MarketplaceMemberWallet"]: AliasType<{
|
||||
coopname?:boolean | `@${string}`,
|
||||
username?:boolean | `@${string}`,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets?:ValueTypes["MarketplaceWalletEntry"],
|
||||
__typename?: boolean | `@${string}`,
|
||||
['...on MarketplaceMemberWallet']?: Omit<ValueTypes["MarketplaceMemberWallet"], "...on MarketplaceMemberWallet">
|
||||
@@ -7691,7 +7691,7 @@ export type ValueTypes = {
|
||||
["MarketplaceWalletEntry"]: AliasType<{
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available?:boolean | `@${string}`,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked?:boolean | `@${string}`,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name?:boolean | `@${string}`,
|
||||
@@ -7699,7 +7699,7 @@ export type ValueTypes = {
|
||||
kind?:boolean | `@${string}`,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label?:boolean | `@${string}`,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name?:boolean | `@${string}`,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id?:boolean | `@${string}`,
|
||||
@@ -9614,7 +9614,7 @@ marketplaceListSupplierOrders?: [{ input?: ValueTypes["MarketplaceListOrdersInpu
|
||||
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
|
||||
marketplaceListWhitelist?:ValueTypes["MarketplaceWhitelistEntry"],
|
||||
marketplaceListWriteoffProposals?: [{ data: ValueTypes["MarketplaceListWriteoffProposalsInput"] | Variable<any, string>, options?: ValueTypes["PaginationInput"] | undefined | null | Variable<any, string>},ValueTypes["PaginatedMarketplaceWriteoffProposals"]],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet?:ValueTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState?:ValueTypes["MarketplaceOnboardingState"],
|
||||
@@ -16873,7 +16873,7 @@ export type ResolverInputTypes = {
|
||||
["MarketplaceMemberWallet"]: AliasType<{
|
||||
coopname?:boolean | `@${string}`,
|
||||
username?:boolean | `@${string}`,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets?:ResolverInputTypes["MarketplaceWalletEntry"],
|
||||
__typename?: boolean | `@${string}`
|
||||
}>;
|
||||
@@ -17627,7 +17627,7 @@ export type ResolverInputTypes = {
|
||||
["MarketplaceWalletEntry"]: AliasType<{
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available?:boolean | `@${string}`,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked?:boolean | `@${string}`,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name?:boolean | `@${string}`,
|
||||
@@ -17635,7 +17635,7 @@ export type ResolverInputTypes = {
|
||||
kind?:boolean | `@${string}`,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label?:boolean | `@${string}`,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name?:boolean | `@${string}`,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id?:boolean | `@${string}`,
|
||||
@@ -19479,7 +19479,7 @@ marketplaceListSupplierOrders?: [{ input?: ResolverInputTypes["MarketplaceListOr
|
||||
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
|
||||
marketplaceListWhitelist?:ResolverInputTypes["MarketplaceWhitelistEntry"],
|
||||
marketplaceListWriteoffProposals?: [{ data: ResolverInputTypes["MarketplaceListWriteoffProposalsInput"], options?: ResolverInputTypes["PaginationInput"] | undefined | null},ResolverInputTypes["PaginatedMarketplaceWriteoffProposals"]],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet?:ResolverInputTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState?:ResolverInputTypes["MarketplaceOnboardingState"],
|
||||
@@ -26514,7 +26514,7 @@ export type ModelTypes = {
|
||||
["MarketplaceMemberWallet"]: {
|
||||
coopname: string,
|
||||
username: string,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets: Array<ModelTypes["MarketplaceWalletEntry"]>
|
||||
};
|
||||
["MarketplaceModerationLogEntry"]: {
|
||||
@@ -27233,7 +27233,7 @@ export type ModelTypes = {
|
||||
["MarketplaceWalletEntry"]: {
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available: string,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked: string,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name: string,
|
||||
@@ -27241,7 +27241,7 @@ export type ModelTypes = {
|
||||
kind: string,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label: string,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name: string,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id: number
|
||||
@@ -29741,7 +29741,7 @@ export type ModelTypes = {
|
||||
marketplaceListWhitelist: Array<ModelTypes["MarketplaceWhitelistEntry"]>,
|
||||
/** Лента всех проектов списания кооператива с фильтром по статусу. */
|
||||
marketplaceListWriteoffProposals: ModelTypes["PaginatedMarketplaceWriteoffProposals"],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet: ModelTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState: ModelTypes["MarketplaceOnboardingState"],
|
||||
@@ -37072,7 +37072,7 @@ export type GraphQLTypes = {
|
||||
__typename: "MarketplaceMemberWallet",
|
||||
coopname: string,
|
||||
username: string,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets: Array<GraphQLTypes["MarketplaceWalletEntry"]>,
|
||||
['...on MarketplaceMemberWallet']: Omit<GraphQLTypes["MarketplaceMemberWallet"], "...on MarketplaceMemberWallet">
|
||||
};
|
||||
@@ -37852,7 +37852,7 @@ export type GraphQLTypes = {
|
||||
__typename: "MarketplaceWalletEntry",
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available: string,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked: string,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name: string,
|
||||
@@ -37860,7 +37860,7 @@ export type GraphQLTypes = {
|
||||
kind: string,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label: string,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name: string,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id: number,
|
||||
@@ -40524,7 +40524,7 @@ export type GraphQLTypes = {
|
||||
marketplaceListWhitelist: Array<GraphQLTypes["MarketplaceWhitelistEntry"]>,
|
||||
/** Лента всех проектов списания кооператива с фильтром по статусу. */
|
||||
marketplaceListWriteoffProposals: GraphQLTypes["PaginatedMarketplaceWriteoffProposals"],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet: GraphQLTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState: GraphQLTypes["MarketplaceOnboardingState"],
|
||||
|
||||
@@ -25,6 +25,7 @@ export const LEDGER2_WALLET_REGISTRY: readonly WalletMeta[] = [
|
||||
{ name: "w.cap.blago", human_name: "ЦПП «Благорост» — единый кошелёк программы у пайщика", kind: "USER_SHARED" },
|
||||
{ name: "w.cap.preimp", human_name: "Первичный учёт РИД-взносов до перехода на электронный учёт", kind: "USER_SHARED" },
|
||||
{ name: "w.mkt.member", human_name: "ЦПП «Стол Заказов» — программный членский у пайщика", kind: "USER_SHARED" },
|
||||
{ name: "w.mkt.order", human_name: "ЦПП «Стол Заказов» — резерв под заказ у пайщика", kind: "USER_SHARED" },
|
||||
{ name: "w.cap.gen", human_name: "ЦПП «Генератор» — единый кошелёк программы", kind: "COOPERATIVE" },
|
||||
{ name: "w.reg.entry", human_name: "Вступительные взносы", kind: "COOPERATIVE" },
|
||||
{ name: "w.wal.wthdrw", human_name: "Возвраты паевых взносов пайщикам (deprecated, не используется в новых операциях)", kind: "COOPERATIVE" },
|
||||
@@ -57,4 +58,5 @@ export const LEDGER2_USER_SHARED_PROGRAM_MAPPING: readonly ProgramWalletMapping[
|
||||
{ wallet_name: "w.cap.gen", required_program_id: 3, program_label: "Генератор" },
|
||||
{ wallet_name: "w.cap.preimp", required_program_id: 0, program_label: null },
|
||||
{ wallet_name: "w.mkt.member", required_program_id: 2, program_label: "Marketplace" },
|
||||
{ wallet_name: "w.mkt.order", required_program_id: 2, program_label: "Marketplace" },
|
||||
] as const
|
||||
|
||||
@@ -6911,7 +6911,7 @@ export type ValueTypes = {
|
||||
["MarketplaceMemberWallet"]: AliasType<{
|
||||
coopname?:boolean | `@${string}`,
|
||||
username?:boolean | `@${string}`,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets?:ValueTypes["MarketplaceWalletEntry"],
|
||||
__typename?: boolean | `@${string}`,
|
||||
['...on MarketplaceMemberWallet']?: Omit<ValueTypes["MarketplaceMemberWallet"], "...on MarketplaceMemberWallet">
|
||||
@@ -7691,7 +7691,7 @@ export type ValueTypes = {
|
||||
["MarketplaceWalletEntry"]: AliasType<{
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available?:boolean | `@${string}`,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked?:boolean | `@${string}`,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name?:boolean | `@${string}`,
|
||||
@@ -7699,7 +7699,7 @@ export type ValueTypes = {
|
||||
kind?:boolean | `@${string}`,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label?:boolean | `@${string}`,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name?:boolean | `@${string}`,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id?:boolean | `@${string}`,
|
||||
@@ -9614,7 +9614,7 @@ marketplaceListSupplierOrders?: [{ input?: ValueTypes["MarketplaceListOrdersInpu
|
||||
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
|
||||
marketplaceListWhitelist?:ValueTypes["MarketplaceWhitelistEntry"],
|
||||
marketplaceListWriteoffProposals?: [{ data: ValueTypes["MarketplaceListWriteoffProposalsInput"] | Variable<any, string>, options?: ValueTypes["PaginationInput"] | undefined | null | Variable<any, string>},ValueTypes["PaginatedMarketplaceWriteoffProposals"]],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet?:ValueTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState?:ValueTypes["MarketplaceOnboardingState"],
|
||||
@@ -16873,7 +16873,7 @@ export type ResolverInputTypes = {
|
||||
["MarketplaceMemberWallet"]: AliasType<{
|
||||
coopname?:boolean | `@${string}`,
|
||||
username?:boolean | `@${string}`,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets?:ResolverInputTypes["MarketplaceWalletEntry"],
|
||||
__typename?: boolean | `@${string}`
|
||||
}>;
|
||||
@@ -17627,7 +17627,7 @@ export type ResolverInputTypes = {
|
||||
["MarketplaceWalletEntry"]: AliasType<{
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available?:boolean | `@${string}`,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked?:boolean | `@${string}`,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name?:boolean | `@${string}`,
|
||||
@@ -17635,7 +17635,7 @@ export type ResolverInputTypes = {
|
||||
kind?:boolean | `@${string}`,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label?:boolean | `@${string}`,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name?:boolean | `@${string}`,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id?:boolean | `@${string}`,
|
||||
@@ -19479,7 +19479,7 @@ marketplaceListSupplierOrders?: [{ input?: ResolverInputTypes["MarketplaceListOr
|
||||
/** Список пайщиков-поставщиков, допущенных к публикации оферт */
|
||||
marketplaceListWhitelist?:ResolverInputTypes["MarketplaceWhitelistEntry"],
|
||||
marketplaceListWriteoffProposals?: [{ data: ResolverInputTypes["MarketplaceListWriteoffProposalsInput"], options?: ResolverInputTypes["PaginationInput"] | undefined | null},ResolverInputTypes["PaginatedMarketplaceWriteoffProposals"]],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet?:ResolverInputTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState?:ResolverInputTypes["MarketplaceOnboardingState"],
|
||||
@@ -26514,7 +26514,7 @@ export type ModelTypes = {
|
||||
["MarketplaceMemberWallet"]: {
|
||||
coopname: string,
|
||||
username: string,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets: Array<ModelTypes["MarketplaceWalletEntry"]>
|
||||
};
|
||||
["MarketplaceModerationLogEntry"]: {
|
||||
@@ -27233,7 +27233,7 @@ export type ModelTypes = {
|
||||
["MarketplaceWalletEntry"]: {
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available: string,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked: string,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name: string,
|
||||
@@ -27241,7 +27241,7 @@ export type ModelTypes = {
|
||||
kind: string,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label: string,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name: string,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id: number
|
||||
@@ -29741,7 +29741,7 @@ export type ModelTypes = {
|
||||
marketplaceListWhitelist: Array<ModelTypes["MarketplaceWhitelistEntry"]>,
|
||||
/** Лента всех проектов списания кооператива с фильтром по статусу. */
|
||||
marketplaceListWriteoffProposals: ModelTypes["PaginatedMarketplaceWriteoffProposals"],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet: ModelTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState: ModelTypes["MarketplaceOnboardingState"],
|
||||
@@ -37072,7 +37072,7 @@ export type GraphQLTypes = {
|
||||
__typename: "MarketplaceMemberWallet",
|
||||
coopname: string,
|
||||
username: string,
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member */
|
||||
/** Релевантные стол-заказам USER_SHARED-кошельки пайщика; порядок: share → member → mkt.member → mkt.order */
|
||||
wallets: Array<GraphQLTypes["MarketplaceWalletEntry"]>,
|
||||
['...on MarketplaceMemberWallet']: Omit<GraphQLTypes["MarketplaceMemberWallet"], "...on MarketplaceMemberWallet">
|
||||
};
|
||||
@@ -37852,7 +37852,7 @@ export type GraphQLTypes = {
|
||||
__typename: "MarketplaceWalletEntry",
|
||||
/** Доступный остаток (`userwallets.available`) */
|
||||
available: string,
|
||||
/** Заблокированный остаток (`userwallets.blocked`) */
|
||||
/** Заблокированный остаток (`userwallets.blocked`). Для marketplace-кошельков всегда `0` — резерв выражается через `.available` кошелька w.mkt.order. Поле остаётся для wallet/withdraw flow и legacy данных. */
|
||||
blocked: string,
|
||||
/** Человекочитаемое название (из cooptypes LEDGER2_WALLET_REGISTRY) */
|
||||
human_name: string,
|
||||
@@ -37860,7 +37860,7 @@ export type GraphQLTypes = {
|
||||
kind: string,
|
||||
/** UX-метка кошелька в формате `<тип взноса> | <программа>` (например «Паевой | Цифровой Кошелёк», «Членский | Стол Заказов») */
|
||||
label: string,
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member) */
|
||||
/** eosio::name кошелька (w.wal.share / w.wal.member / w.mkt.member / w.mkt.order) */
|
||||
name: string,
|
||||
/** program_id: 1 — Цифровой Кошелёк, 2 — Стол Заказов */
|
||||
program_id: number,
|
||||
@@ -40524,7 +40524,7 @@ export type GraphQLTypes = {
|
||||
marketplaceListWhitelist: Array<GraphQLTypes["MarketplaceWhitelistEntry"]>,
|
||||
/** Лента всех проектов списания кооператива с фильтром по статусу. */
|
||||
marketplaceListWriteoffProposals: GraphQLTypes["PaginatedMarketplaceWriteoffProposals"],
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member */
|
||||
/** Кошельки пайщика, релевантные столу заказов: w.wal.share, w.wal.member, w.mkt.member, w.mkt.order */
|
||||
marketplaceMemberWallet: GraphQLTypes["MarketplaceMemberWallet"],
|
||||
/** Состояние онбординга пайщика в Столе заказов: показывать ли gate или пропускать на стол */
|
||||
marketplaceOnboardingState: GraphQLTypes["MarketplaceOnboardingState"],
|
||||
|
||||
Reference in New Issue
Block a user