add dev mode to smart-contracts, make notifications external accessable, make boot works

This commit is contained in:
Alex Ant
2025-11-07 20:20:17 +05:00
parent 11f23bbd77
commit 2557c35bea
44 changed files with 455 additions and 63 deletions
+61 -1
View File
@@ -637,6 +637,66 @@ export default class Blockchain {
console.log('Новый пользователь: ', params)
}
async addUser(
params: RegistratorContract.Actions.AddUser.IAddUser,
) {
await this.update_pass_instance()
console.dir(params, { depth: null })
await this.api.transact(
{
actions: [
{
account: RegistratorContract.contractName.production,
name: RegistratorContract.Actions.AddUser.actionName,
authorization: [
{
actor: params.coopname,
permission: 'active',
},
],
data: params,
},
],
},
{
blocksBehind: 3,
expireSeconds: 30,
},
)
console.log('Добавлен пользователь: ', params.username)
}
async changeKey(
params: RegistratorContract.Actions.ChangeKey.IChangeKey,
) {
await this.update_pass_instance()
console.dir(params, { depth: null })
await this.api.transact(
{
actions: [
{
account: RegistratorContract.contractName.production,
name: RegistratorContract.Actions.ChangeKey.actionName,
authorization: [
{
actor: params.coopname,
permission: 'active',
},
],
data: params,
},
],
},
{
blocksBehind: 3,
expireSeconds: 30,
},
)
console.log('Изменён ключ для пользователя: ', params.username)
}
async transfer(params: TokenContract.Actions.Transfer.ITransfer) {
await this.update_pass_instance()
console.dir(params, { depth: null })
@@ -968,7 +1028,7 @@ export default class Blockchain {
name: SovietContract.Actions.Boards.CreateBoard.actionName,
authorization: [
{
actor: params.username,
actor: params.coopname,
permission: 'active',
},
],
+3 -3
View File
@@ -135,9 +135,9 @@ export default {
name: 'contributor',
code_permissions_to: ['contributor'],
},
{
name: provider_chairman,
},
// {
// name: provider_chairman,
// },
{
name: provider,
code_permissions_to: ['registrator'],
+23
View File
@@ -335,6 +335,29 @@ export async function installInitialData(blockchain: Blockchain) {
}
catch (e) { console.log('vault is exist') }
console.log('Добавляем пайщика ant')
await blockchain.addUser({
coopname: 'voskhod',
referer: 'voskhod',
username: 'ant',
type: 'individual',
created_at: '2025-01-15T10:00:00',
initial: '100.0000 RUB',
minimum: '200.0000 RUB',
spread_initial: true,
meta: 'Основатель кооператива ВОСХОД',
})
console.log('Устанавливаем дефолтный публичный ключ для ant')
await blockchain.changeKey({
coopname: 'voskhod',
changer: 'voskhod',
username: 'ant',
public_key: config.default_public_key,
})
console.log('Создаём совет')
await blockchain.createBoard({
+15 -3
View File
@@ -3,8 +3,20 @@ project(coopenomics)
include(ExternalProject)
# Распечатываем начальное значение BUILD_TARGET
# Опция для тестового режима
option(IS_TESTNET "Build for testnet" OFF)
# Определяем режим сборки
if(IS_TESTNET)
set(BUILD_MODE "TESTNET")
else()
set(BUILD_MODE "PRODUCTION")
endif()
# Распечатываем информацию о сборке
message(STATUS "=== BUILDING CONTRACTS IN ${BUILD_MODE} MODE ===")
message(STATUS "Initial BUILD_TARGET=${BUILD_TARGET}")
message(STATUS "IS_TESTNET=${IS_TESTNET}")
# Макрос для сборки контрактов с диагностическими сообщениями
macro(add_contract_build name)
@@ -12,12 +24,12 @@ macro(add_contract_build name)
string(STRIP "${name}" NAME_STRIPPED)
if(NOT BUILD_TARGET_STRIPPED OR BUILD_TARGET_STRIPPED STREQUAL NAME_STRIPPED)
message(STATUS "COMPILING ${name} CONTRACT")
message(STATUS "COMPILING ${name} CONTRACT (IS_TESTNET=${IS_TESTNET})")
ExternalProject_Add(
${name}_contract
SOURCE_DIR ${CMAKE_SOURCE_DIR}/cpp/${name}
BINARY_DIR ${CMAKE_BINARY_DIR}/contracts/${name}
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=/cdt/build/lib/cmake/cdt/CDTWasmToolchain.cmake
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=/cdt/build/lib/cmake/cdt/CDTWasmToolchain.cmake -DIS_TESTNET=${IS_TESTNET}
UPDATE_COMMAND ""
PATCH_COMMAND ""
TEST_COMMAND ""
+9 -1
View File
@@ -1,7 +1,15 @@
#!/usr/bin/env bash
mode="${1:-prod}"
if [ "$mode" = "test" ]; then
is_testnet="ON"
else
is_testnet="OFF"
fi
docker run --rm --name cdt \
--volume "$(pwd):/project" \
-w /project \
dicoop/blockchain_v5.1.1:dev \
/bin/bash -c "mkdir -p build && cd build && cmake -DBUILD_TARGET= -DTEST_TARGET= -DVERBOSE=ON -DBUILD_TESTS=OFF .. && make"
/bin/bash -c "mkdir -p build && cd build && cmake -DBUILD_TARGET= -DTEST_TARGET= -DVERBOSE=ON -DBUILD_TESTS=OFF -DIS_TESTNET=$is_testnet .. && make"
+11 -3
View File
@@ -1,15 +1,23 @@
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <contract>"
echo "Usage: $0 <contract> [mode]"
echo " mode: prod (default) or test"
exit 1
fi
contract="$1"
contract="${contract:-$1}"
mode="${mode:-${2:-prod}}"
if [ "$mode" = "test" ]; then
is_testnet="ON"
else
is_testnet="OFF"
fi
docker run --rm --name cdt \
--volume "$(pwd)/:/project" \
-w /project/build \
dicoop/blockchain_v5.1.1:dev \
/bin/bash -c "cmake -DBUILD_TARGET='$contract' -DTEST_TARGET= -DVERBOSE=ON -DBUILD_TESTS=OFF .. && make"
/bin/bash -c "cmake -DBUILD_TARGET='$contract' -DTEST_TARGET= -DVERBOSE=ON -DBUILD_TESTS=OFF -DIS_TESTNET=$is_testnet .. && make"
@@ -7,6 +7,10 @@ find_package(cdt)
# Добавление контракта
add_contract(branch branch branch.cpp)
target_compile_definitions(branch PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(branch PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -7,3 +7,8 @@ find_package(cdt)
# Добавление контракта
add_contract(capital capital capital.cpp)
if(IS_TESTNET)
target_compile_definitions(capital PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
@@ -7,3 +7,8 @@ find_package(cdt)
# Добавление контракта
add_contract(contributor contributor contributor.cpp)
if(IS_TESTNET)
target_compile_definitions(contributor PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
@@ -7,5 +7,9 @@ find_package(cdt)
# Добавление контракта
add_contract(draft draft draft.cpp)
target_compile_definitions(draft PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(draft PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -7,5 +7,10 @@ find_package(cdt)
# Добавление контракта
add_contract(fund fund fund.cpp)
if(IS_TESTNET)
target_compile_definitions(fund PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -7,5 +7,9 @@ find_package(cdt)
# Добавление контракта
add_contract(gateway gateway gateway.cpp)
target_compile_definitions(gateway PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(gateway PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -7,4 +7,8 @@ find_package(cdt)
# Добавление контракта
add_contract(ledger ledger ledger.cpp)
target_compile_definitions(ledger PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(ledger PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
+7
View File
@@ -230,6 +230,13 @@ static constexpr uint64_t _capital_program_id = 4;
static constexpr uint64_t _producers_percent = 900000; // 90%
static constexpr uint64_t _fund_percent = 100000; // 10%
#ifdef IS_TESTNET
static constexpr uint64_t MIN_SOVIET_MEMBERS_COUNT = 1; /*!< минимальное количество членов совета (тест) */
#else
static constexpr uint64_t MIN_SOVIET_MEMBERS_COUNT = 5; /*!< минимальное количество членов совета (прод) */
#endif
/**
* @}
*/
+5 -1
View File
@@ -7,5 +7,9 @@ find_package(cdt)
# Добавление контракта
add_contract(loan loan loan.cpp)
target_compile_definitions(loan PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(loan PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -7,5 +7,9 @@ find_package(cdt)
# Добавление контракта
add_contract(marketplace marketplace marketplace.cpp)
target_compile_definitions(marketplace PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(marketplace PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -7,3 +7,8 @@ find_package(cdt)
# Добавление контракта
add_contract(meet meet meet.cpp)
if(IS_TESTNET)
target_compile_definitions(meet PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
@@ -7,6 +7,10 @@ find_package(cdt)
# Добавление контракта
add_contract(registrator registrator registrator.cpp)
target_compile_definitions(registrator PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(registrator PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -14,7 +14,7 @@
void registrator::changekey(eosio::name coopname, eosio::name changer, eosio::name username,
eosio::public_key public_key)
{
require_auth(changer);
require_auth(coopname);
auto cooperative = get_cooperative_or_fail(coopname);
check_auth_or_fail(_registrator, coopname, changer, "changekey"_n);
@@ -17,16 +17,16 @@
std::vector<eosio::name> storages;
storages.push_back(_provider);
accounts.emplace(_system, [&](auto &n)
{
n.type = "individual"_n;
n.storages = storages;
n.username = _provider_chairman;
n.status = "active"_n;
n.registrator = _system;
n.referer = ""_n;
n.registered_at = eosio::time_point_sec(eosio::current_time_point().sec_since_epoch());
});
// accounts.emplace(_system, [&](auto &n)
// {
// n.type = "individual"_n;
// n.storages = storages;
// n.username = _provider_chairman;
// n.status = "active"_n;
// n.registrator = _system;
// n.referer = ""_n;
// n.registered_at = eosio::time_point_sec(eosio::current_time_point().sec_since_epoch());
// });
accounts.emplace(_system, [&](auto &n)
{
@@ -22,11 +22,12 @@
{
require_auth(coopname);
auto cooperative = get_cooperative_or_fail(coopname);
get_cooperative_or_fail(coopname);
eosio::check(_root_govern_symbol == initial.symbol, "Неверный символ");
eosio::check(_root_govern_symbol == minimum.symbol, "Неверный символ");
eosio::check(created_at.sec_since_epoch() <= eosio::current_time_point().sec_since_epoch(), "Дата created_at должна быть в прошлом" );
eosio::check(cooperative.initial.symbol == initial.symbol, "Неверный символ");
eosio::check(cooperative.initial.symbol == minimum.symbol, "Неверный символ");
authority active_auth;
active_auth.threshold = 1;
@@ -7,6 +7,10 @@ find_package(cdt)
# Добавление контракта
add_contract(soviet soviet soviet.cpp)
target_compile_definitions(soviet PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(soviet PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
@@ -19,7 +19,7 @@ void soviet::createboard(eosio::name coopname, eosio::name username, eosio::name
check_auth_or_fail(_soviet, coopname, username, "createboard"_n);
eosio::name payer = username;
eosio::name payer = coopname;
cooperatives2_index coops(_registrator, _registrator.value);
auto org = coops.find(coopname.value);
@@ -55,6 +55,7 @@ void soviet::createboard(eosio::name coopname, eosio::name username, eosio::name
}
eosio::check(has_chairman, "Председатель кооператива должен быть указан в членах совета");
eosio::check(members.size() >= MIN_SOVIET_MEMBERS_COUNT, "Количество членов совета должно быть не менее " + std::to_string(MIN_SOVIET_MEMBERS_COUNT));
addresses_index addresses(_soviet, coopname.value);
address_data data;
@@ -1,5 +1,9 @@
add_contract(eosio.bios eosio.bios ${CMAKE_CURRENT_SOURCE_DIR}/src/eosio.bios.cpp)
target_compile_definitions(eosio.bios PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(eosio.bios PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
target_include_directories(eosio.bios
PUBLIC
@@ -1,5 +1,9 @@
add_contract(eosio.boot eosio.boot ${CMAKE_CURRENT_SOURCE_DIR}/src/eosio.boot.cpp)
target_compile_definitions(eosio.boot PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(eosio.boot PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
target_include_directories(eosio.boot
PUBLIC
@@ -1,5 +1,9 @@
add_contract(eosio.msig eosio.msig ${CMAKE_CURRENT_SOURCE_DIR}/src/eosio.msig.cpp)
target_compile_definitions(eosio.msig PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(eosio.msig PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
target_include_directories(eosio.msig
PUBLIC
@@ -12,7 +12,11 @@ add_contract(
${CMAKE_CURRENT_SOURCE_DIR}/src/limit_auth_changes.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/block_info.cpp)
target_compile_definitions(eosio.system PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(eosio.system PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
if(SYSTEM_CONFIGURABLE_WASM_LIMITS)
target_compile_definitions(eosio.system PUBLIC SYSTEM_CONFIGURABLE_WASM_LIMITS)
@@ -1,5 +1,9 @@
add_contract(eosio.token eosio.token ${CMAKE_CURRENT_SOURCE_DIR}/src/eosio.token.cpp)
target_compile_definitions(eosio.token PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(eosio.token PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
target_include_directories(eosio.token
PUBLIC
@@ -1,5 +1,9 @@
add_contract(eosio.wrap eosio.wrap ${CMAKE_CURRENT_SOURCE_DIR}/src/eosio.wrap.cpp)
target_compile_definitions(eosio.wrap PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(eosio.wrap PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
target_include_directories(eosio.wrap
PUBLIC
@@ -1,5 +1,9 @@
add_contract(sendinline sendinline ${CMAKE_CURRENT_SOURCE_DIR}/src/sendinline.cpp)
target_compile_definitions(sendinline PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(sendinline PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
target_include_directories(sendinline PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
"$<TARGET_PROPERTY:eosio.system,INTERFACE_INCLUDE_DIRECTORIES>")
+5 -1
View File
@@ -7,6 +7,10 @@ find_package(cdt)
# Добавление контракта
add_contract(test test test.cpp)
target_compile_definitions(test PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(test PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
+2 -18
View File
@@ -1,26 +1,10 @@
#include "test.hpp"
#include "../lib/consts.hpp"
/**
* @brief Инициализирует тестовую запись
*/
void test::init(uint64_t record_id) {
require_auth(get_self());
testrecords_index records(get_self(), get_self().value);
// Проверяем, что записи еще нет
auto existing = records.find(record_id);
eosio::check(existing == records.end(), "Запись уже существует");
// Создаем новую запись
records.emplace(get_self(), [&](auto &r) {
r.id = record_id;
r.counter = 0;
r.value = 100;
r.status = "initialized";
});
print("Инициализирована запись ID: ", record_id, " со значением: 100\n");
print("MIN_SOVIET_MEMBERS_COUNT: ", MIN_SOVIET_MEMBERS_COUNT, "\n");
}
/**
@@ -7,5 +7,9 @@ find_package(cdt)
# Добавление контракта
add_contract(wallet wallet wallet.cpp)
target_compile_definitions(wallet PUBLIC IS_TESTNET=${IS_TESTNET})
if(IS_TESTNET)
target_compile_definitions(wallet PUBLIC IS_TESTNET=1)
else()
# Не определяем IS_TESTNET для продакшн режима
endif()
# target_include_directories( fund PUBLIC ${CMAKE_SOURCE_DIR}/include )
+2
View File
@@ -5,7 +5,9 @@
"type": "module",
"scripts": {
"build:all": "./build-all.sh",
"build:all:test": "./build-all.sh test",
"build:one": "./build.sh $1",
"build:one:test": "contract=$1 mode=test ./build.sh",
"enter": "./boot/scripts/enter.sh",
"testnet": "git checkout testnet && git merge dev && lerna publish prerelease && git push && git checkout dev && git merge testnet",
"production": "git checkout main && git merge -X theirs testnet && lerna publish --conventional-commits --conventional-graduate && git push && git checkout dev && git merge main",
+35
View File
@@ -6209,6 +6209,11 @@ type Mutation {
"""
supplyOnRequest(data: SupplyOnRequestInput!): Transaction!
"""
Запустить воркфлоу уведомлений (только для председателя или server-secret)
"""
triggerNotificationWorkflow(data: TriggerNotificationWorkflowInput!): TriggerNotificationWorkflowResult!
"""Удалить расширение"""
uninstallExtension(data: UninstallExtensionInput!): Boolean!
@@ -6239,6 +6244,11 @@ type Mutation {
voteOnAnnualGeneralMeet(data: VoteOnAnnualGeneralMeetInput!): MeetAggregate!
}
input NotificationWorkflowRecipientInput {
"""Username получателя"""
username: String!
}
input NotifyOnAnnualGeneralMeetInput {
coopname: String!
meet_hash: String!
@@ -8714,6 +8724,31 @@ type Transaction {
transaction: JSON
}
input TriggerNotificationWorkflowInput {
"""Имя воркфлоу для запуска"""
name: String!
"""Данные для шаблона уведомления"""
payload: JSONObject
"""Получатели уведомления"""
to: [NotificationWorkflowRecipientInput!]!
}
type TriggerNotificationWorkflowResult {
"""Статус подтверждения обработки"""
acknowledged: Boolean!
"""Список ошибок (если есть)"""
error: [String!]
"""Статус операции"""
status: String!
"""ID транзакции"""
transactionId: String!
}
input UninstallExtensionInput {
"""Фильтр по имени"""
name: String!
@@ -44,7 +44,7 @@ q-layout(view='lHh LpR fff')
template(v-for='action in rightDrawerActions', :key='action.id')
component(:is='action.component', v-bind='action.props')
q-footer(v-if='!loggedIn && system.info.system_status !== "install"', :class='headerClass', bordered)
q-footer(v-if='!loggedIn && system.info.system_status !== Zeus.SystemStatus.install && system.info.system_status !== Zeus.SystemStatus.initialized', :class='headerClass', bordered)
ContactsFooter(:text='footerText')
q-page-container
@@ -66,6 +66,7 @@ import { useDefaultLayoutLogic } from './useDefaultLayoutLogic';
import { usePWAThemeColor } from 'src/shared/lib/composables/usePWAThemeColor';
import { useRightDrawerReader } from 'src/shared/hooks/useRightDrawer';
import { WindowLoader } from 'src/shared/ui/Loader';
import { Zeus } from '@coopenomics/sdk';
const desktop = useDesktopStore();
const system = useSystemStore();
const { rightDrawerActions } = useRightDrawerReader();
@@ -28,7 +28,8 @@ const logout = async () => {
try {
await logout();
router.push({ name: 'signin' });
window.location.reload();
// window.location.reload();
} catch (e: any) {
FailAlert('Ошибка при выходе: ' + e.message);
}
@@ -3,3 +3,6 @@ export * as CreateWebPushSubscription from './createWebPushSubscription'
/** Деактивировать веб-пуш подписку по ID */
export * as DeactivateWebPushSubscriptionById from './deactivateWebPushSubscriptionById'
/** Запустить воркфлоу уведомлений */
export * as TriggerNotificationWorkflow from './triggerNotificationWorkflow'
@@ -0,0 +1,22 @@
import { rawTriggerNotificationWorkflowResultSelector } from '../../selectors/notification/triggerNotificationWorkflowResultSelector'
import { $, type GraphQLTypes, type InputType, type ModelTypes, Selector } from '../../zeus/index'
export const name = 'triggerNotificationWorkflow'
/**
* Запустить воркфлоу уведомлений
*/
export const mutation = Selector('Mutation')({
[name]: [{ data: $('data', 'TriggerNotificationWorkflowInput!') }, rawTriggerNotificationWorkflowResultSelector],
})
export interface IInput {
/**
* @private
*/
[key: string]: unknown
data: ModelTypes['TriggerNotificationWorkflowInput']
}
export type IOutput = InputType<GraphQLTypes['Mutation'], typeof mutation>
@@ -1,3 +1,4 @@
export * from './createSubscriptionResponseSelector'
export * from './subscriptionStatsSelector'
export * from './triggerNotificationWorkflowResultSelector'
export * from './webPushSubscriptionSelector'
@@ -0,0 +1,17 @@
import type { MakeAllFieldsRequired } from '../../utils/MakeAllFieldsRequired'
import { type ModelTypes, Selector, type ValueTypes } from '../../zeus/index'
// Селектор для TriggerNotificationWorkflowResult
const rawTriggerNotificationWorkflowResultSelector = {
transactionId: true,
acknowledged: true,
status: true,
error: true,
}
// Проверка валидности TriggerNotificationWorkflowResult
const _validate: MakeAllFieldsRequired<ValueTypes['TriggerNotificationWorkflowResult']> = rawTriggerNotificationWorkflowResultSelector
export type triggerNotificationWorkflowResultModel = ModelTypes['TriggerNotificationWorkflowResult']
export const triggerNotificationWorkflowResultSelector = Selector('TriggerNotificationWorkflowResult')(rawTriggerNotificationWorkflowResultSelector)
export { rawTriggerNotificationWorkflowResultSelector }
+17
View File
@@ -951,6 +951,9 @@ export const AllTypesProps: Record<string,any> = {
supplyOnRequest:{
data:"SupplyOnRequestInput"
},
triggerNotificationWorkflow:{
data:"TriggerNotificationWorkflowInput"
},
uninstallExtension:{
data:"UninstallExtensionInput"
},
@@ -978,6 +981,9 @@ export const AllTypesProps: Record<string,any> = {
voteOnAnnualGeneralMeet:{
data:"VoteOnAnnualGeneralMeetInput"
}
},
NotificationWorkflowRecipientInput:{
},
NotifyOnAnnualGeneralMeetInput:{
notification:"AnnualGeneralMeetingNotificationSignedDocumentInput"
@@ -1385,6 +1391,10 @@ export const AllTypesProps: Record<string,any> = {
document:"AssetContributionActSignedDocumentInput"
},
SystemStatus: "enum" as const,
TriggerNotificationWorkflowInput:{
payload:"JSONObject",
to:"NotificationWorkflowRecipientInput"
},
UninstallExtensionInput:{
},
@@ -2737,6 +2747,7 @@ export const ReturnTypes: Record<string,any> = {
startInstall:"StartInstallResult",
startResetKey:"Boolean",
supplyOnRequest:"Transaction",
triggerNotificationWorkflow:"TriggerNotificationWorkflowResult",
uninstallExtension:"Boolean",
unpublishRequest:"Transaction",
updateAccount:"Account",
@@ -3194,6 +3205,12 @@ export const ReturnTypes: Record<string,any> = {
signer:"JSON",
transaction:"JSON"
},
TriggerNotificationWorkflowResult:{
acknowledged:"Boolean",
error:"String",
status:"String",
transactionId:"String"
},
UserAccount:{
meta:"String",
referer:"String",
+99
View File
@@ -5069,6 +5069,7 @@ signBySecretaryOnAnnualGeneralMeet?: [{ data: ValueTypes["SignBySecretaryOnAnnua
startInstall?: [{ data: ValueTypes["StartInstallInput"] | Variable<any, string>},ValueTypes["StartInstallResult"]],
startResetKey?: [{ data: ValueTypes["StartResetKeyInput"] | Variable<any, string>},boolean | `@${string}`],
supplyOnRequest?: [{ data: ValueTypes["SupplyOnRequestInput"] | Variable<any, string>},ValueTypes["Transaction"]],
triggerNotificationWorkflow?: [{ data: ValueTypes["TriggerNotificationWorkflowInput"] | Variable<any, string>},ValueTypes["TriggerNotificationWorkflowResult"]],
uninstallExtension?: [{ data: ValueTypes["UninstallExtensionInput"] | Variable<any, string>},boolean | `@${string}`],
unpublishRequest?: [{ data: ValueTypes["UnpublishRequestInput"] | Variable<any, string>},ValueTypes["Transaction"]],
updateAccount?: [{ data: ValueTypes["UpdateAccountInput"] | Variable<any, string>},ValueTypes["Account"]],
@@ -5080,6 +5081,10 @@ updateSystem?: [{ data: ValueTypes["Update"] | Variable<any, string>},ValueTypes
voteOnAnnualGeneralMeet?: [{ data: ValueTypes["VoteOnAnnualGeneralMeetInput"] | Variable<any, string>},ValueTypes["MeetAggregate"]],
__typename?: boolean | `@${string}`
}>;
["NotificationWorkflowRecipientInput"]: {
/** Username получателя */
username: string | Variable<any, string>
};
["NotifyOnAnnualGeneralMeetInput"]: {
coopname: string | Variable<any, string>,
meet_hash: string | Variable<any, string>,
@@ -6773,6 +6778,25 @@ searchPrivateAccounts?: [{ data: ValueTypes["SearchPrivateAccountsInput"] | Vari
/** Итоговая транзакция */
transaction?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["TriggerNotificationWorkflowInput"]: {
/** Имя воркфлоу для запуска */
name: string | Variable<any, string>,
/** Данные для шаблона уведомления */
payload?: ValueTypes["JSONObject"] | undefined | null | Variable<any, string>,
/** Получатели уведомления */
to: Array<ValueTypes["NotificationWorkflowRecipientInput"]> | Variable<any, string>
};
["TriggerNotificationWorkflowResult"]: AliasType<{
/** Статус подтверждения обработки */
acknowledged?:boolean | `@${string}`,
/** Список ошибок (если есть) */
error?:boolean | `@${string}`,
/** Статус операции */
status?:boolean | `@${string}`,
/** ID транзакции */
transactionId?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["UninstallExtensionInput"]: {
/** Фильтр по имени */
@@ -11262,6 +11286,7 @@ signBySecretaryOnAnnualGeneralMeet?: [{ data: ResolverInputTypes["SignBySecretar
startInstall?: [{ data: ResolverInputTypes["StartInstallInput"]},ResolverInputTypes["StartInstallResult"]],
startResetKey?: [{ data: ResolverInputTypes["StartResetKeyInput"]},boolean | `@${string}`],
supplyOnRequest?: [{ data: ResolverInputTypes["SupplyOnRequestInput"]},ResolverInputTypes["Transaction"]],
triggerNotificationWorkflow?: [{ data: ResolverInputTypes["TriggerNotificationWorkflowInput"]},ResolverInputTypes["TriggerNotificationWorkflowResult"]],
uninstallExtension?: [{ data: ResolverInputTypes["UninstallExtensionInput"]},boolean | `@${string}`],
unpublishRequest?: [{ data: ResolverInputTypes["UnpublishRequestInput"]},ResolverInputTypes["Transaction"]],
updateAccount?: [{ data: ResolverInputTypes["UpdateAccountInput"]},ResolverInputTypes["Account"]],
@@ -11273,6 +11298,10 @@ updateSystem?: [{ data: ResolverInputTypes["Update"]},ResolverInputTypes["System
voteOnAnnualGeneralMeet?: [{ data: ResolverInputTypes["VoteOnAnnualGeneralMeetInput"]},ResolverInputTypes["MeetAggregate"]],
__typename?: boolean | `@${string}`
}>;
["NotificationWorkflowRecipientInput"]: {
/** Username получателя */
username: string
};
["NotifyOnAnnualGeneralMeetInput"]: {
coopname: string,
meet_hash: string,
@@ -12968,6 +12997,25 @@ searchPrivateAccounts?: [{ data: ResolverInputTypes["SearchPrivateAccountsInput"
/** Итоговая транзакция */
transaction?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["TriggerNotificationWorkflowInput"]: {
/** Имя воркфлоу для запуска */
name: string,
/** Данные для шаблона уведомления */
payload?: ResolverInputTypes["JSONObject"] | undefined | null,
/** Получатели уведомления */
to: Array<ResolverInputTypes["NotificationWorkflowRecipientInput"]>
};
["TriggerNotificationWorkflowResult"]: AliasType<{
/** Статус подтверждения обработки */
acknowledged?:boolean | `@${string}`,
/** Список ошибок (если есть) */
error?:boolean | `@${string}`,
/** Статус операции */
status?:boolean | `@${string}`,
/** ID транзакции */
transactionId?:boolean | `@${string}`,
__typename?: boolean | `@${string}`
}>;
["UninstallExtensionInput"]: {
/** Фильтр по имени */
@@ -17503,6 +17551,8 @@ export type ModelTypes = {
startResetKey: boolean,
/** Подтвердить поставку имущества Поставщиком по заявке Заказчика и акту приёма-передачи */
supplyOnRequest: ModelTypes["Transaction"],
/** Запустить воркфлоу уведомлений (только для председателя или server-secret) */
triggerNotificationWorkflow: ModelTypes["TriggerNotificationWorkflowResult"],
/** Удалить расширение */
uninstallExtension: boolean,
/** Снять с публикации заявку */
@@ -17521,6 +17571,10 @@ export type ModelTypes = {
updateSystem: ModelTypes["SystemInfo"],
/** Голосование на общем собрании пайщиков */
voteOnAnnualGeneralMeet: ModelTypes["MeetAggregate"]
};
["NotificationWorkflowRecipientInput"]: {
/** Username получателя */
username: string
};
["NotifyOnAnnualGeneralMeetInput"]: {
coopname: string,
@@ -19190,6 +19244,24 @@ export type ModelTypes = {
signer?: ModelTypes["JSON"] | undefined | null,
/** Итоговая транзакция */
transaction?: ModelTypes["JSON"] | undefined | null
};
["TriggerNotificationWorkflowInput"]: {
/** Имя воркфлоу для запуска */
name: string,
/** Данные для шаблона уведомления */
payload?: ModelTypes["JSONObject"] | undefined | null,
/** Получатели уведомления */
to: Array<ModelTypes["NotificationWorkflowRecipientInput"]>
};
["TriggerNotificationWorkflowResult"]: {
/** Статус подтверждения обработки */
acknowledged: boolean,
/** Список ошибок (если есть) */
error?: Array<string> | undefined | null,
/** Статус операции */
status: string,
/** ID транзакции */
transactionId: string
};
["UninstallExtensionInput"]: {
/** Фильтр по имени */
@@ -23819,6 +23891,8 @@ export type GraphQLTypes = {
startResetKey: boolean,
/** Подтвердить поставку имущества Поставщиком по заявке Заказчика и акту приёма-передачи */
supplyOnRequest: GraphQLTypes["Transaction"],
/** Запустить воркфлоу уведомлений (только для председателя или server-secret) */
triggerNotificationWorkflow: GraphQLTypes["TriggerNotificationWorkflowResult"],
/** Удалить расширение */
uninstallExtension: boolean,
/** Снять с публикации заявку */
@@ -23837,6 +23911,10 @@ export type GraphQLTypes = {
updateSystem: GraphQLTypes["SystemInfo"],
/** Голосование на общем собрании пайщиков */
voteOnAnnualGeneralMeet: GraphQLTypes["MeetAggregate"]
};
["NotificationWorkflowRecipientInput"]: {
/** Username получателя */
username: string
};
["NotifyOnAnnualGeneralMeetInput"]: {
coopname: string,
@@ -25582,6 +25660,25 @@ export type GraphQLTypes = {
signer?: GraphQLTypes["JSON"] | undefined | null,
/** Итоговая транзакция */
transaction?: GraphQLTypes["JSON"] | undefined | null
};
["TriggerNotificationWorkflowInput"]: {
/** Имя воркфлоу для запуска */
name: string,
/** Данные для шаблона уведомления */
payload?: GraphQLTypes["JSONObject"] | undefined | null,
/** Получатели уведомления */
to: Array<GraphQLTypes["NotificationWorkflowRecipientInput"]>
};
["TriggerNotificationWorkflowResult"]: {
__typename: "TriggerNotificationWorkflowResult",
/** Статус подтверждения обработки */
acknowledged: boolean,
/** Список ошибок (если есть) */
error?: Array<string> | undefined | null,
/** Статус операции */
status: string,
/** ID транзакции */
transactionId: string
};
["UninstallExtensionInput"]: {
/** Фильтр по имени */
@@ -26275,6 +26372,7 @@ type ZEUS_VARIABLES = {
["MakeClearanceInput"]: ValueTypes["MakeClearanceInput"];
["MetaDocumentInput"]: ValueTypes["MetaDocumentInput"];
["ModerateRequestInput"]: ValueTypes["ModerateRequestInput"];
["NotificationWorkflowRecipientInput"]: ValueTypes["NotificationWorkflowRecipientInput"];
["NotifyOnAnnualGeneralMeetInput"]: ValueTypes["NotifyOnAnnualGeneralMeetInput"];
["OpenProjectInput"]: ValueTypes["OpenProjectInput"];
["OrganizationDetailsInput"]: ValueTypes["OrganizationDetailsInput"];
@@ -26351,6 +26449,7 @@ type ZEUS_VARIABLES = {
["SubmitVoteInput"]: ValueTypes["SubmitVoteInput"];
["SupplyOnRequestInput"]: ValueTypes["SupplyOnRequestInput"];
["SystemStatus"]: ValueTypes["SystemStatus"];
["TriggerNotificationWorkflowInput"]: ValueTypes["TriggerNotificationWorkflowInput"];
["UninstallExtensionInput"]: ValueTypes["UninstallExtensionInput"];
["UnpublishRequestInput"]: ValueTypes["UnpublishRequestInput"];
["Update"]: ValueTypes["Update"];
+2
View File
@@ -30,6 +30,8 @@
"build:lib": "lerna run build --scope @coopenomics/factory --scope @coopenomics/cooptypes",
"build:contracts:all": "lerna run build:all --scope @coopenomics/contracts",
"build:contract": "lerna run build:one --scope @coopenomics/contracts --",
"build:contracts:all:test": "lerna run build:all:test --scope @coopenomics/contracts",
"build:contract:test": "lerna run build:one:test --scope @coopenomics/contracts --",
"dev:desktop": "lerna run dev --parallel --scope @coopenomics/desktop",
"dev:backend": "lerna run dev --parallel --scope @coopenomics/parser --scope @coopenomics/controller",
"dev:lib": "lerna run dev --parallel --scope @coopenomics/factory --scope cooptypes",