Changelog
All notable changes to the Wenex Platform are documented on this page. The format follows Keep a Changelog, and the project adheres to Semantic Versioning.
Unreleased
1.6.11 - 2026-07-20
Added
- plain secret support to generate TOTP code. @vhidvz
1.6.10 - 2026-07-14
Fixed
- fix:
TransferService.take()uses one atomic Lua lock script with bounded backoff instead of a 10s busy-wait. @vhidvz - fix:
TransactionsService.initno longer holds a Mongo transaction open across the essential-service RPC call. @vhidvz - fix: failed
verify()now aborts the saga, closing aSagaService.sessionsmemory leak in essential. @vhidvz - fix:
TransferService.release()now checks lock ownership by txn id before deleting it. @vhidvz - fix:
logger()skips masking when a debug namespace is disabled; trimmed per-message log dumps. @vhidvz - fix: bounded keepalive/backoff/retry channel options on all 14 inter-service gRPC clients. @vhidvz
- fix: transfer lock TTL raised to 6s so it can't expire mid-verify under load and cause concurrent wallet writes. @vhidvz
- fix: saga session/machine discovery uses non-blocking Redis SCAN instead of O(N) KEYS on the verify hot path. @vhidvz
1.6.9 - 2026-06-29
Fixed
- fix: guard
RedisService.delagainst empty key lists to avoidERR wrong number of arguments for 'del'. @vhidvz
1.6.8 - 2026-06-28
Changed
- libs: set MongoDB
readConcern: majority+writeConcern.journal: truefor financial durability. @vhidvz
1.6.7 - 2026-06-25
Added
- docs: add a Realtime Data (MQTT) reference — architecture, topics, message schema, the mqtt client, and EMQX authn/authz. @vhidvz
Fixed
- fix: re-subscribe Kafka consumers to topics created after startup so new
mongo.*source topics get consumed. @vhidvz
1.6.6 - 2026-06-17
Added
- refactor: add
\\[OID\\]pattern support in thepreserverauthorization @vhidvz - docs: add a canonical Request Headers reference (
/api/headers) covering every header the gateway actually reads. @vhidvz
Changed
- refactor: improvements in the
preserverauthorization logic @vhidvz - docs: regroup the sidebar/nav so Concepts, Services, and Workers are top-level groups, flattening navigation. @vhidvz
- docs: de-duplicate the ABAC ownership model; the authorization page links to the canonical Access Control page. @vhidvz
- docs: slim the authentication headers table to a pointer to the canonical Request Headers page. @vhidvz
Fixed
- security: escape redis pattern issue @vhidvz
- docs: correct the domain service count to 14 (was 15) in README, getting-started, and ecosystem index. @vhidvz
- docs: PostgreSQL is used by workers (
logger/dispatcher), not theessentialservice; saga state is in MongoDB. @vhidvz - docs:
cleanerpurges saga stages from MongoDB viaCLEANER_SAGA_STAGES_TTL, not PostgreSQL/CLEANER_SAGAS_TTL. @vhidvz - docs: drop
preserverfrom the Kafka-consumer list — it is an EMQX ExHook gRPC server, not a Kafka consumer. @vhidvz - docs:
thing/metrics.deviceis returned in responses and populatable, not write-only. @vhidvz - docs: CQRS webhooks are delivered by the
dispatcherworker with the{id,op,after,before}payload, notpublisher. @vhidvz - docs: APT create requires only
name;scopesandsubjectsare optional (was marked required). @vhidvz - docs: note
authhas two public routes and that zonegroup/clientare AND-combined; fix GraphQLFilterDtousage. @vhidvz - docs: remove the non-existent
x-domainrequest header from the authentication headers reference. @vhidvz - docs: Metadata
domain/client/userderive from the JWT, notx-domain/x-client-idheaders; user isuid. @vhidvz - docs: SDK multi-tenant usage relies on the
coworkerclaim andzone=client, not anx-domainheader. @vhidvz
1.6.5 - 2026-06-15
Changed
- refactor: MCP doc loader serves single-file docs and drops
?v=version-suffix parsing. @vhidvz - docs: merge each MCP doc's compact and extended versions into one self-contained file per resource. @vhidvz
- docs: drop the
?v=c/?v=eversion suffix and compact/extended machinery from all MCP docs. @vhidvz
Fixed
- fix:
preservergranted permission or fixed @vhidvz - docs:
thing/metrics.deviceis returned and populatable, not write-only in responses. @vhidvz - docs: drop the false
thing/metricsappend-only claim; metrics support update and delete. @vhidvz - docs: replace removed per-router MCP tool names in cross-service-pattern with shared
find/count. @vhidvz - docs: correct MCP scope-splitting to whitespace, comma, semicolon, or pipe delimiters. @vhidvz
- docs: document
essential/saga-stagesas MCP-callable via the shared CRUD tools. @vhidvz - docs: populating
identity/relationsrequires amodelin each populate entry. @vhidvz
1.6.4 - 2026-06-13
Added
- add:
publishernew topics relay onidentity@vhidvz - add: emqx authorization base on regular grants definition @vhidvz
- add:
groupsbase topic generation inpublisherworker @vhidvz - add: wenex logo and favicon to VitePress docs site. @vhidvz
- add:
/changelogdocs route rendering the platform changelog as the last sidebar item. @vhidvz
Changed
- refactor:
onBeforeCreatelogic @vhidvz
1.6.3 - 2026-05-23
Fixed
- fix: use
'$date' in data[key]instead of optional chaining indebezium.utilto avoid false positives @mhalizadeh - fix: replace
isDateStringwith a customisIsoStringregex intools.utilfor stricter ISO 8601 detection @mhalizadeh - fix: make
locationoptional incareer/branchBranchRpcSerializer @mhalizadeh - fix:
libs/module/sagaexception error status code @mhalizadeh - fix:
thing/metricserializerdeviceforgotten property @vhidvz
1.6.2 - 2026-05-16
Added
- add: add send/template endpoint in
touch/smss@fdaei - add: mcp specification and CRUD-style service tools @vhidvz
- refactor: Refactored prompts with structured format (ACTION, TRIGGER, RULES) @alihajqani
- refactor: Introduced shared data dictionary for better field understanding @alihajqani
- refactor: Improved schemas, validation, and type safety across tools @alihajqani
- refactor: Cleaned up codebase with better logging, performance, and readability @alihajqani
Changed
- del: remove unwanted
COMMON_COLLECTIONSconstant from app services @vhidvz
Fixed
- fix: population serializer transformer execution @vhidvz
- fix: make location optional in branch schema @mhalizadeh
1.6.1 - 2026-04-05
Fixed
- fix: population security bug @vhidvz
1.6.0 - 2026-03-26
Added
- support for populating core fields
identity(Mongo ID) andrelations(Mongo ID array) on any resource @vhidvz
1.5.X - 2026-03-26
Added
- refactor(
apts.router): APT input and output schemas for improved validation and clarity @alihajqani - refactor(
grants.router): grant schemas and remove unnecessary code @alihajqani - add(
grants.router):Count Authorization GrantsTool for MCP @alihajqani - add(
grants.router): search functionality for authorization grants @alihajqani - add(
grants.router):Add Multiple Grants (Bulk)Tool for MCP @alihajqani - add: use cookie to get authorization token for authentication @winkcor
- refactor
mcpRegistrationto register core documentation resource @alihajqani - improve date handling in
apt.inspector@alihajqani - add
MCP_CLIENT_APT_TOKENto.env.example@alihajqani - read
Authorizationinmcp-clientfrom.env@alihajqani - feat(
mcp-client): enhance resource handling and add resource reading functionality @alihajqani - add: documentation in
docsdirectory @vhidvz - add:
mcp-clienttest script usingollama@vhidvz - add
general/commentsmodule @fdaei - add elastic
searchtocontent.posts@vhidvz - add
special.statsandthing.metricscleaner @vhidvz - add
thingmicroservice @vhidvz - add
travels/routingwith valhalla service @m-hadi-arefi - add
x-stat-typeandx-stat-additional-propsmetadata @vhidvz - add
auth/aptsservice @vhidvz
Changed
- ci improvements @vhidvz
- update
@wenex/sdkversion to1.3.3@vhidvz - remove unnecessary code from resolvers @vhidvz
- copy build directory from
disttownxfor start script @vhidvz - revert: commit
faddbebced749cb89f1849e9bcdf71cd06c6e0ec@vhidvz - add
sharesto thepaymentmethod offinancial/invoice@vhidvz - indexed
general/comments.type@vhidvz
Fixed
- fix: mcp bug on deployment @mhalizadeh
- fix:
featurein product @fdaei - fix:
CacheInterceptorissue onflush@vhidvz - fix: transfer issue with
doubleandfloatin protos forfinancial@vhidvz - fix:
withdrawreal provider of transfer @vhidvz
1.4.X - 2026-01-26
Added
- add stat for discount and profit @fdaei
- support apt over mqtt emqx
preservermicro @vhidvz - support for mongodb query
$geoIntersectsand$centerSphere@vhidvz - add
stocks,stores,productsandcustomersmodules tocareerservice @vhidvz
Changed
- remove unused temp code @vhidvz
- update
UpdateCoreDtoschema @vhidvz - distinct session for each apt token @vhidvz
- update auth services to support apt token @vhidvz
- update
@wenex/sdkversion @vhidvz - financial transaction some improvements @vhidvz
Fixed
- fix stat collector unknown issue @vhidvz
- fix
UpdateCoreDto@vhidvz - fix
WalletSerializer@vhidvz - improve error message in
financialmodel @fdaei - fix: remove check is not empty in
apts.service.tsforscoreandsubject@yonus-a - fix:
aptdto validation @vhidvz - fix update wallet dto @vhidvz
- some improvements in
financialand bug fix in dto's @vhidvz - remote
scopesandsubjectsfrom index inapt.schema.ts@yonus-a - perform:
jobIdin dispatcher @vhidvz - fix schema type special in mongo @fdaei
- fix Store Dto in fork enum @m-hadi-arefi
1.3.X - 2025-11-16
Added
- add fuzzy search by elasticsearch to
conjoint.messages@vhidvz - add
staandsuggestsubfields for elasticsearch indices @vhidvz - add x-lang header in metadata @fdaei
- improve: cant sent message when channel is not applicable @fdaei
- feat: mcp integration first try @vhidvz
- add
Brotlihelper in core @vhidvz - add
display_namefield toPlacetype oflogistic.locations@vhidvz profitanddiscounttofinancial/invoicesininvoice.items@vhidvz- feat: add file sharing @vhidvz
- added more log to
essential.sagasservice @vhidvz
Changed
- removed: unused code from
userschema @vhidvz - set default value for
identity/users.secretwith random 40 hex chars @vhidvz - change the user dto condition in the
usernamefield must not be an email or phone number @vhidvz - update population of mongo runner in
findOneAndUpdateandfindOneAndDelete@vhidvz - style: health check improvements @vhidvz
- transform
valueto lowercase inidentity/users.email@vhidvz - make
NominatimPlaceAddress.cityoptional @vhidvz - support brotli compression on query string @vhidvz
- replaced
Brotlihelper dependencies package withbrotli-wasm@vhidvz - update kafka connect script to capture
emails,pushesandsmssfrom touch db @vhidvz - refactor: model value in client domain of watcher worker @vhidvz
- create grants for new domain @fdaei
- validate domain before create it @fdaei
- capture full response of webpush in
props@vhidvz - refactor: client domain logic for root grant of each in domain watcher worker @vhidvz
- update mongodb options @vhidvz
- add
KafkaContext.heartbeatto stat model @vhidvz - update mongodb options @vhidvz
- refactor:
essential.sagasexception handling improvements @vhidvz - add
MONGO_LOAD_BALANCEDenv @vhidvz - enable trust proxy for real client IP @fdaei
- update redis health check @vhidvz
- remove kafka health check from
essential@vhidvz - remove
specialmicro from gateway health check @vhidvz - remove
retryWritesandretryReadsfrom mongodb config options @vhidvz - remove
maxInFlightRequestsandidempotentoptions from kafka connection @vhidvz - health check improvements and kafka retry.retries changed to max safe int @vhidvz
- set
autoCommitto false foressential.sagaservice @vhidvz - some improvements for stability in kafka options @vhidvz
- some implement in
sagamodule @vhidvz - refactor and optimize
essentialservice @vhidvz - refactor and some improvements
observerworker @vhidvz
Fixed
- Check
onBeforeCreate; if a user already exists on another client, just updateclientsinstead @fdaei - inactive user creation issue for new client @fdaei
- fix:
wholescope onpreserver@vhidvz - fix content type in header @fdaei
- add cache control public to public files @winkcor
- Add
nullable=Trueto Core serializer for props @fdaei - add cross origin for resources headers
crossOriginResourcePolicy@winkcor - revert: cross origin issue @vhidvz
- cross origin issue @vhidvz
- fix:
bool_resultundefined issue inpreserverworker @vhidvz - fix cursor response header
Content-Type@winkcor - fix: add
profitanddiscountinfinancial/invoicesandinvoice.itemsin protobuf @vhidvz - download file using
tokenin url query string @vhidvz - population
policiesissue base onsubjects@vhidvz loadBalanced is only a valid option in the URIissue @vhidvzsaga session expiredissue @vhidvz- essential scale issues @vhidvz
- fix paymentValue function to give correct amount for init transaction @winkcor
- refactor: essential saga service @vhidvz
- health check redis connection stick issue @vhidvz
1.2.X - 2025-09-29
--- [ Breaking Changes ] !!!
- support population on a field with different models @vhidvz
- name of
identityproperty incontext/configschanged toeid@vhidvz - name of
identityproperty inidentity/profileschanged tonational_code@vhidvz - name of
identityproperty intouch/email.smtpproperty changed tomessage_id@vhidvz - replaced
entitymongo id property fromgeneral/workflowsand replaced withnamestring @vhidvz
Added
- remove OTP_SECRET validation from AuthCheckDto @fdaei
- add
checkrpc method toAuthsService@vhidvz - add
OnModuleInittoAuditLoggerfor test connectivity @vhidvz - remove client from store if client is not meet preconditions in
dispatcherworker @vhidvz - added optional
statefield with default value pending tofinancial/invoices@iranmanesh-dev - feat: add users group watcher worker module @vhidvz
- add property share to
x-file-dataon upload files @winkcor - feat: enhance ownership handling using
user.groupsproperty @vhidvz - feat: enhance authority exploits handling using
user.groupsproperty @vhidvz - feat: add
Stashesmodule and integrate withdispatcherservice @vhidvz - feat: add
dispatcher.stashesmodule and integrate withcleanerservice @vhidvz - feat: add
ProjectionInterceptorand related utilities for handling projections @vhidvz rangelocation field added tocareer/employees@vhidvz- new metadata key
x-file-datato include file data in requests @iranmanesh-dev - new interceptor for handling header data for
special/filesupload @vhidvz - new
Unicodeutility functions for text transformation @iranmanesh-dev attendeesfield population toidentity/profilesingeneral/eventsmap @vhidvzorganizersfield population tocareer/employeesingeneral/eventsmap @iranmanesh-dev- audit log interceptor, decorator, module and worker @vhidvz
- request scope and policy to metadata keys and interceptor @vhidvz
cleanerworker to purge data fromlogger/auditsandessential/saga.stages@vhidvzcodefield tocareer/branches@iranmanesh-devprofilefield tocareer/employees@iranmanesh-dev- optional field
statusadded tocontext/configsinterface @vhidvz - optional field
statusadded tocontext/settingsinterface @vhidvz - schema validation base on client config with
ValidationInterceptorand@Validationdecorator @vhidvz categoriesfield added tocareer/businesses@iranmanesh-devcareermicro and services @vhidvz- new service
career/businesseslibs added @vhidvz nameandtitleas optional field tologistic/locations@vhidvzmessage_timeandmessage_sizeadded totouch/email.smtp@vhidvz- logistic location schema validation added to
properties@vhidvz - new metadata key
x-exclude-soft-delete-queryto ignoreassignSoftDeleteQueryfunctionality @vhidvz scopevalidation support on emqxpreserver@vhidvz
Changed
- some improvements in kafka health check @vhidvz
- health check refinement for kafka consumers @vhidvz
- add
producerOnlyModeto kafka producers @vhidvz - refine health check in all microservices @vhidvz
- make logger kafka producer only mode @vhidvz
- update all microservices health check @vhidvz
- update log level of kafkajs to
INFO@vhidvz - update
KAFKA_CLIENTandCONSUMER_CONFIGto have more stability in consumers @vhidvz - improve concurrency in stats model and observer worker @vhidvz
- update
KAFKA_CLIENTandCONSUMER_CONFIGto have more stability in consumers @vhidvz - update nestjs version from
11.0.4to11.0.21@vhidvz - update
script:kafka-connectto include some collection not all @vhidvz - update consumer/client options to have more stability in consumers @vhidvz
- authority
exclude-soft-delete-querycondition changed @vhidvz - refactor: dispatcher main job removed, simplified @vhidvz
- dispatcher disable job delay changed to
DISPATCHER_BULLMQ_LAST_ATTEMPT_PLUS_ONE@vhidvz - indexed
general/workflows.dataschema @vhidvz - removed on channel creation logic in
conjoint/channelservices @vhidvz - refactor: update
SENSITIVE_PHRASESto include/api[_-]key$/regex @vhidvz - refactor: improve error handling in
fixInputfunction @vhidvz - refactor: enhance authorization logic in checkQueryExploits function @vhidvz
- refactor: enhance hooks to return values from before and after methods @vhidvz
- refactor(profiles): add restore onBeforeBulkUpdate method in
identity/profiles@vhidvz - make 'name' field optional in channel DTOs, interfaces, schemas, and serializers @vhidvz
- removed
projectionandpopulationparams fromfindOneAndUpdateandfindOneAndDeletemethods @vhidvz - fixed proto definition of
organizersandattendeesfields to be repeated @iranmanesh-dev - the
profilefield ofcareer/employeeswas made optional @vhidvz - streamline
collectStatfunction and enhancedochandling @vhidvz - refactor: enhance authorization checks in
onClientAuthorizemethod @vhidvz - replace
withSessionwithwithSagaSessionin service methods for consistency @vhidvz - Grant management during channel creation, deletion, and restoration @fdaei
general/events.organizerfield renamed togeneral/events.organizers@vhidvz- updated
BusinessTypeenum @vhidvz - improved
dispatcher.transfermethod in failure scenario @vhidvz - automatically registers models based base on map population definition @vhidvz
- set
x-saga...,x-can...,x-zone,x-atmetadata header to response header @vhidvz - authorization model: special subject based on token identity to use for grants specification @vhidvz
- mongodb seeds commands refactored @vhidvz
general/artifactsandcontext/settingsindex @vhidvzcategoryfield name ofcareer/serviceschanged tocategories@iranmanesh-dev- resource limitation for
Elasticsearchindocker/docker-compose.elk.yml@iranmanesh-dev identityproperty moved to core schema as optional mongo id string @vhidvz- core schema description index changed to
text@vhidvz - add default permission scope
own,shareon none scoped action incheckQueryExploits@vhidvz - scoped action logic in
setOwnershipofcanSetmethod @vhidvz - removed session scoped grant on
x-can-with-id-policies@vhidvz - hot reload scope on refresh token with
[Scope.None]@vhidvz - more control on constants using env with
INIT_prefix @vhidvz - refine limitation core constants @vhidvz
- GraphQL DTOs name @vhidvz
- GraphQL Serializers name @iranmanesh-dev
Fixed
- health check for kafka server issue @vhidvz
- fix: emqx unique client id issue @vhidvz
SIGTERMsignal handling instart.jsscript to ensure proper shutdown of child processes @vhidvz- fix: stat issue on mongo transaction error @vhidvz
- fix:
script:kafka-connectionscript to loading.envenvironments variables @vhidvz - fix: type issue in
essential/sagas@vhidvz - fix: some circular dependencies and authority query group bug fixed @vhidvz
- fix: bullmq dashboards by updating bullmq packages version @vhidvz
- update workflow schema to allow mixed types for tokens @vhidvz
- escape special characters in topic replacement for authorization checks @vhidvz
- fix career service serializer number type @winkcor
- proto
req.filter.populatetype definition foressential/sagasfile @vhidvz - token needs in auth model to update user details for logger interceptor @vhidvz
- throwing rpc exceptions on
AllExceptionsFilter@vhidvz - command issues @vhidvz
- session
onAfterChangecondition issue @vhidvz - config model validation schema for CQRS value @vhidvz
- businesses
categoriesfield incareerproto @iranmanesh-dev - file size validation changed from
isPositivetoisNumber@vhidvz financial/walletsschema @vhidvz- financial currencies model and schema @vhidvz
- GraphQL enum names to prefixed with service name @vhidvz
- logistic locations
propertiesproperty dto transformer @vhidvz - correct order of
WriteInterceptors@vhidvz - modelPlugin pre save issue @vhidvz
- domain service provider mongoose enum validation check @vhidvz
- Swagger DTOs and Serializers name @vhidvz
- GraphQL
accountoverlap between servicefinancialandconjoint@vhidvz - GraphQL function overlap between service modules with the same name @vhidvz
1.1.X - 2025-07-15
Added
- implement push history
contentand history DTOs, schemas, and serializers @vhidvz - add
$textoperator support toMONGO_OPERATIONfor text search functionality @vhidvz messageadded togeneral/activities@iranmanesh-devstateandtitleadded tospecial/files@iranmanesh-devx-can-with-id-policiesheader to metadata keys @vhidvzvisitedadded totouch/noticesschema @iranmanesh-deveventsmodule added togeneralmicro @vhidvzvisitedandiconprops added totouch/notices@iranmanesh-dev- publisher worker to publish data change log on emqx topics @vhidvz
- conjoint services @vhidvz
Changed
- send push match query @vhidvz
- implement push history
contentand history DTOs, schemas, and serializers @vhidvz - optimize push retrieval query to include
sessionandidentity@vhidvz general/noticesmoved totouch/notices@vhidvz- update payload structure in
publishermethod to include source details @vhidvz - preserver authorization
[ID]and[SE]@vhidvz - Add EVENT type to NoticeType enum @vhidvz
- simplify MongoHelper initialization in multiple services @vhidvz
- MongoHelper.init to improve model registration and population handling @vhidvz
- CI @vhidvz
- update DB_NAME function to use default prefix and adjust related tests @vhidvz
- change collection type in CqrsSourceDto and CqrsSource interface @vhidvz
Fixed
- update import statements to include
toStringutility incontentDTOs @vhidvz blacklistfield fromoptionaltorepeatedintouch/pushes@vhidvz- optional
iconproperty toCreateNoticeActionDto@iranmanesh-dev - correct spelling of
subtiletosubtitleintouch/notices@vhidvz - missing semicolon in
Activitymessage@vhidvz - publish method in publisher worker to include database and collection in message payload @vhidvz
- emqx retain message viewed not found @vhidvz
- emqx service token expiration exceptions @vhidvz
- updateOwnership method to include uid in meta handling for improved user tracking @vhidvz
- streamline grant deletion logic in GrantsService @vhidvz
1.0.X - 2021-01-01
Added
- initial release 🎉🎊.