@nzelajs/ports
v0.1.0
Published
Nzela hexagonal port contracts (persistence, tenancy, runners, authz, node handlers). Vendor-free.
Maintainers
Readme
@nzelajs/ports
English below · Version francaise plus bas.
The hexagonal port contracts of the Nzela engine: persistence, tenant isolation, clock, outbox,
guard/effect runners, approver resolution, authorization, identity, and the NodeHandler seam. No
vendor here (the port is a sas, not a hiding place). The authorization seam is agnostic: it carries
an attempt, never a permission grammar.
English
Install
npm add @nzelajs/portsWhat it provides
- Tenancy (security first):
TenantContextPort,UnitOfWork.withTenant(tenant-scoped transaction, Postgres RLS enforced) so a query can never cross tenants. - Persistence:
RepositoryRegistry(instances, events, timers, external waits, dependencies, blueprints, outbox; optional approvalTasks/authz), all ORM-agnostic.BlueprintInstallStoreis versioned + immutable + pinned (editing never breaks a running instance). - Runners:
GuardRunner(deny-by-default predicates),EffectRunner(named side-effects). - Authorization:
AuthorizerandAuthorizationAttempt(an agnostic seam: the engine describes WHAT an actor attempts - actor, instance, action, transition/task level - and invents NO permission string; an adapter maps the attempt to its own model, be it permissions, roles or a policy engine).RelationResolver,GrantandOrgRelationare reused from@kengela/contractsfor adapters that need them (not redeclared). - NodeHandler: the extensibility seam that lets the core dispatch node behavior without a
hardcoded switch. Generic apps register
state/auto; approval apps addapproval/wait/subprocess. - Engine surface:
WorkflowEngine(dispatch,advanceCase,decideTask,resumeFromExternal). - Org-chart companions (optional):
DeskRuleStore(desk queue auto-assignment rules, wildcard"*"type, decreasing-specificity lookup),TenantSettingsStore(per-stepreturnRoutingoverride of the N-1 return rule),OrgStore(deprovisioning + unit lookups) andDirectoryStore(display names for the chain preview). All four are OPTIONAL members ofRepositoryRegistry(deskRules,tenantSettings,org,directory): a generic app never provides them.
Francais
Installation
npm add @nzelajs/portsCe que ca fournit
- Multi-tenant (securite d'abord) :
TenantContextPort,UnitOfWork.withTenant(transaction scopee tenant, RLS Postgres) - une requete ne peut jamais franchir un tenant. - Persistance :
RepositoryRegistry(instances, evenements, timers, attentes externes, dependances, blueprints, outbox ; approvalTasks/authz optionnels), agnostique de l'ORM.BlueprintInstallStoreversionne + immuable + epingle (l'edition ne casse pas un dossier en cours). - Runners :
GuardRunner(predicats deny-by-default),EffectRunner(side-effects nommes). - Autorisation :
AuthorizeretAuthorizationAttempt(une couture agnostique : le moteur decrit CE QUE tente un acteur - acteur, instance, action, niveau transition/tache - et n'invente AUCUNE chaine de permission ; un adapter mappe la tentative vers son propre modele, permissions, roles ou moteur de politique).RelationResolver,GrantetOrgRelationsont reutilises depuis@kengela/contractspour les adapters qui en ont besoin (non redeclares). - NodeHandler : la couture d'extensibilite qui laisse le coeur dispatcher le comportement d'un
noeud sans switch code en dur. Apps generiques :
state/auto; apps d'approbation : +approval. - Surface moteur :
WorkflowEngine(dispatch,advanceCase,decideTask,resumeFromExternal). - Compagnons organigramme (optionnels) :
DeskRuleStore(regles d'auto-affectation des files de bureau, joker"*", resolution par specificite decroissante),TenantSettingsStore(overridereturnRoutingpar etape de la regle de renvoi N-1),OrgStore(deprovisionnement + unites) etDirectoryStore(noms affiches pour l'apercu du parcours). Les quatre sont des membres OPTIONNELS deRepositoryRegistry(deskRules,tenantSettings,org,directory) : une app generique ne les fournit jamais.
License
Apache-2.0.
