DomainService
Class: DomainService<T, E>
Defined in: packages/core/src/services/domainservice.service.ts:315
Domain Service expose all the models as Operations
Model are exposed if they have a Expose decorator
Children models Exposed should be under the first ModelRelated targetting them or the segment endpoint of Expose
Other relations (ModelLinks, ModelParent) should only display their information but not be exposed ModelRelated should be ignored
Webda Modda
Extends
Service<T,E>
Type Parameters
T
T extends DomainServiceParameters = DomainServiceParameters
E
E extends DomainServiceEvents = DomainServiceEvents
Constructors
Constructor
new DomainService<
T,E>(name,params):DomainService<T,E>
Defined in: packages/core/src/services/service.ts:205
Create a new Service instance
Service
Parameters
name
string
The name of the service
params
T
The parameters block define in the configuration file
Returns
DomainService<T, E>
Inherited from
Properties
_compiledCapabilities
protected_compiledCapabilities:Record<string,any> ={}
Defined in: packages/core/src/services/iservice.ts:61
Capabilities detected at compile-time from @WebdaCapability-tagged interfaces.
Populated during Service.resolve by reading the service's entry in
webda.module.json. Each key is a capability name (e.g., "request-filter"),
and the value is an empty object {} by default. Override getCapabilities
to provide capability-specific configuration or to conditionally disable capabilities.
See
getCapabilities
Inherited from
[WEBDA_EVENTS]
[WEBDA_EVENTS]:
E
Defined in: packages/core/src/services/service.ts:179
Set the Webda events here
Inherited from
app
app:
Application
Defined in: packages/core/src/services/domainservice.service.ts:322
Application instance
logger
protectedlogger:Logger
Defined in: packages/core/src/services/service.ts:192
Logger with class context
Inherited from
metrics?
protectedoptionalmetrics?:object
Defined in: packages/core/src/services/service.ts:196
Get metrics
Inherited from
name
readonlyname:string
Defined in: packages/core/src/services/iservice.ts:35
Name
Inherited from
parameters
readonlyparameters:T
Defined in: packages/core/src/services/iservice.ts:39
Parameters
Inherited from
createConfiguration?
staticoptionalcreateConfiguration?: (params) =>any
Defined in: packages/core/src/services/iservice.ts:44
Create configuration set by the application on load
Parameters
params
any
Returns
any
Inherited from
filterConfiguration?
staticoptionalfilterConfiguration?: (params) =>any
Defined in: packages/core/src/services/iservice.ts:49
Create configuration set by the application on load
Parameters
params
any
Returns
any
Inherited from
Parameters
staticParameters: typeofServiceParameters=ServiceParameters
Defined in: packages/core/src/services/service.ts:175
Service parameters
Inherited from
schemas
staticschemas:object
Defined in: packages/core/src/services/domainservice.service.ts:326
Schemas
searchRequest
searchRequest:
object
searchRequest.properties
properties:
object
searchRequest.properties.count
count:
object
searchRequest.properties.count.type
type:
string="boolean"
searchRequest.properties.query
query:
object
searchRequest.properties.query.description
description:
string=QUERY_DESCRIPTION
searchRequest.properties.query.type
type:
string="string"
searchRequest.properties.query.x-webda-sanitize
x-webda-sanitize:
string="none"
searchRequest.type
type:
string="object"
uuidRequest
uuidRequest:
object
uuidRequest.properties
properties:
object
uuidRequest.properties.uuid
uuid:
object
uuidRequest.properties.uuid.type
type:
string="string"
uuidRequest.required
required:
string[]
uuidRequest.type
type:
string="object"
Methods
__clean()
abstract__clean():Promise<void>
Defined in: packages/core/src/services/service.ts:539
Clean the service data, can only be used in test mode
Returns
Promise<void>
Inherited from
actionInput()
protectedactionInput(modelKey,name):any
Defined in: packages/core/src/services/domainservice.service.ts:650
The .input schema of an action, when it describes its parameters
A module built before x-webda-context expanded an OperationContext parameter into the schema: such an
action is treated as taking the context only, as before.
Parameters
modelKey
string
model identifier
name
string
action name
Returns
any
the input schema, undefined when the action takes no input or has an old-style schema
actionRequestSchema()
protectedactionRequestSchema(modelKey,name,input,pkFields?,requireKey?):string
Defined in: packages/core/src/services/domainservice.service.ts:726
Register the input schema of an instance action operation: the primary key and action parameters
The key fields come first in x-webda-arguments: modelAction loads the object with them and passes the rest
to the action method.
Parameters
modelKey
string
model identifier
name
string
action name
input
any
the action .input schema (its parameters)
pkFields?
string[] = ...
implicit primary key fields
requireKey?
boolean = true
whether the caller must supply the parent key (login MFA uses the session)
Returns
string
the registered schema name, <modelKey>.<name>.request
Throws
Error when an action parameter conflicts with a primary key field
addBehaviorOperations()
addBehaviorOperations(
model,Metadata,name):void
Defined in: packages/core/src/services/domainservice.service.ts:1013
Register one operation per declared action on every Behavior attribute of
the model. Operation ids follow the <Model>.<Attribute>.<Action> shape
so transports can discover them with the same lookup logic used for
model-level operations.
The actual dispatch is deferred to modelBehaviorAction. This method
only wires the registry entries — it does not invoke behaviors.
Parameters
model
ModelClass<Model>
the model class owning the behavior attribute
Metadata
any
the model metadata blob (with Relations.behaviors)
name
string
the model's short identifier (e.g. "User")
Returns
void
addListener()
addListener<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:90
Add listener
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void | Promise<void>
the event listener
Returns
this
this for chaining
See
EventEmitter.addListener
Inherited from
addRoute()
protectedaddRoute(url,methods,executer,openapi?,override?):void
Defined in: packages/core/src/services/service.ts:400
Add a route dynamicaly
Parameters
url
string
of the route can contains dynamic part like {uuid}
methods
the HTTP methods
executer
Function
Method to execute for this route
openapi?
the OpenAPI specification
override?
boolean = false
whether to override existing
Returns
void
Inherited from
authorizeClientEvent()
authorizeClientEvent(
_event,_context):boolean
Defined in: packages/core/src/services/service.ts:353
Authorize a public event subscription
Parameters
_event
string
the event name
_context
the execution context
Returns
boolean
true if the condition is met
Inherited from
checkParent()
protectedcheckParent(model,parentId,context):Promise<void>
Defined in: packages/core/src/services/domainservice.service.ts:472
checkModelParent, emitting Store.WebNotFound when the parent is missing or unreadable, like any missing
object
Parameters
model
ModelClass<Model>
the child model class
parentId
any
the parent primary key
context
the caller context
Returns
Promise<void>
checkPermission()
protectedcheckPermission(object,context,action,model?):Promise<void>
Defined in: packages/core/src/services/domainservice.service.ts:395
checkModelPermission, emitting Store.WebNotFound when the refusal looks like a missing object, exactly
like loadModel does for a missing key
Parameters
object
Model
the model instance
context
the caller context
action
string
the action
model?
ModelClass<Model>
the model class (the static canAct asked)
Returns
Promise<void>
checkReparent()
protectedcheckReparent(model,object,input,context):Promise<void>
Defined in: packages/core/src/services/domainservice.service.ts:519
When an update moves an object to another parent, the caller must be able to read the new parent
Parameters
model
ModelClass<Model>
the model class
object
Model
the stored object
input
any
the sanitized input
context
the caller context
Returns
Promise<void>
computeParameters()
computeParameters():
void
Defined in: packages/core/src/services/service.ts:214
Used to compute or derivate input parameter to attribute
Returns
void
Deprecated
Inherited from
emit()
emit<
Key>(event,data):Promise<void>
Defined in: packages/core/src/services/service.ts:520
Emit the event with data and wait for Promise to finish if listener returned a Promise
Type Parameters
Key
Key extends string | number | symbol
Parameters
event
Key
the event name
data
E[Key]
the data to process
Returns
Promise<void>
Inherited from
getCapabilities()
getCapabilities():
Record<string,any>
Defined in: packages/core/src/services/iservice.ts:89
Return the capabilities of this service.
By default returns capabilities detected at compile-time from
Returns
Record<string, any>
the result
Webda Capability-tagged
interfaces in webda.module.json.
Override to disable capabilities based on configuration:
getCapabilities() {
const caps = super.getCapabilities();
if (!this.parameters.enabled) delete caps["request-filter"];
return caps;
}
Inherited from
getClientEvents()
getClientEvents():
string[]
Defined in: packages/core/src/services/service.ts:341
Return the events that an external system can subscribe to
Returns
string[]
the list of results
Inherited from
getMaxListeners()
getMaxListeners():
number
Defined in: packages/core/src/events/asynceventemitter.ts:97
Returns
number
Inherited from
getMetric()
getMetric<
T>(type,configuration):T
Defined in: packages/core/src/services/service.ts:323
Add service name label
Type Parameters
T
T = Gauge<string> | Counter<string> | Histogram<string>
Parameters
type
CustomConstructor<T, [MetricConfiguration<T>]>
the type to look up
configuration
the configuration
Returns
T
the result
Inherited from
getModelInput()
protectedgetModelInput(context):Promise<any>
Defined in: packages/core/src/services/domainservice.service.ts:432
The model input of a create, update or patch: always the full request body
The CRUD methods take no argument: resolveArguments spreads the model schema's properties into positional args, so the first one is only the value of the first property, which may itself be an object or an array (#911).
An empty body (undefined) is accepted as "no fields"; any other body that is not a plain object (array, string, number, boolean or null) is refused.
This is the body callOperation validated against the operation input schema and handed to the authorizers:
HTML-sanitized, except for the attributes the model tags @sanitize none, html or markdown. Do not override
this method to read the raw body (context.getInput({ raw: true })): the model would then receive values that
were never validated. Tag the attributes instead.
Parameters
context
the operation context
Returns
Promise<any>
the request body
Throws
BadRequest when the body is not an object
getName()
getName():
string
Defined in: packages/core/src/services/service.ts:530
Get service name
Returns
string
the result string
Inherited from
getOpenApiReplacements()
getOpenApiReplacements():
any
Defined in: packages/core/src/services/service.ts:429
Return variables for replacement in openapi
Returns
any
the result
Inherited from
Service.getOpenApiReplacements
getOperationId()
getOperationId(
id):string
Defined in: packages/core/src/services/service.ts:387
If undefined is returned it cancel the operation registration
Parameters
id
string
the identifier
Returns
string
the result
Inherited from
getParameters()
getParameters():
T
Defined in: packages/core/src/services/service.ts:222
Get the service parameters
Returns
T
the result
Inherited from
getService()
getService<
T>(name):ServicesMap[T]
Defined in: packages/core/src/services/service.ts:313
Get a service by name
Type Parameters
T
T extends keyof ServicesMap
Parameters
name
T
the name to use
Returns
ServicesMap[T]
the result map
Deprecated
Use useService, might reconsider
Inherited from
getState()
getState():
ServiceStates
Defined in: packages/core/src/services/service.ts:185
Get the current state
Returns
the result
Inherited from
getUrl()
getUrl(
url,_methods):string
Defined in: packages/core/src/services/service.ts:364
Return the full path url based on parameters
Parameters
url
string
relative url to service
_methods
in case we need filtering (like Store)
Returns
string
absolute url or undefined if need to skip the Route
Inherited from
hasActionInput()
protectedhasActionInput(model,action):boolean
Defined in: packages/core/src/services/domainservice.service.ts:637
Whether an action has an input schema, so it receives its parameters rather than the context
Parameters
model
ModelClass<Model>
the model class
action
the action
name
string
the action name
Returns
boolean
true when <model>.<action>.input exists
init()
abstractinit():Promise<DomainService<T,E>>
Defined in: packages/core/src/services/service.ts:510
Will be called after all the Services are created
Returns
Promise<DomainService<T, E>>
Inherited from
initMetrics()
initMetrics():
void
Defined in: packages/core/src/services/service.ts:303
Init the metrics
Returns
void
Inherited from
initOperations()
initOperations():
void
Defined in: packages/core/src/services/domainservice.service.ts:769
Add operations for all exposed models
Returns
void
the result
Overrides
isExposable()
isExposable(
model,identifier):boolean
Defined in: packages/core/src/services/domainservice.service.ts:761
Whether a model may be exposed: models of INTERNAL_MODELS and their subclasses need an explicit listing
in the models parameter
Parameters
model
any
model class
identifier
string
model identifier
Returns
boolean
true when the model may be exposed
listeners()
listeners(
eventName):Function[]
Defined in: packages/core/src/events/asynceventemitter.ts:195
Get all listeners for an event
Parameters
eventName
keyof E
the event name
Returns
Function[]
the list of results
Inherited from
loadCapabilities()
protectedloadCapabilities():void
Defined in: packages/core/src/services/service.ts:283
Load capabilities from webda.module.json metadata into _compiledCapabilities.
Called during resolve after dependency injection. Reads the service's
type name from parameters, looks it up in the application's module metadata
(moddas or beans section), and populates _compiledCapabilities with an
empty object for each declared capability name.
Fails silently if the application is not available (e.g., in unit tests where services are instantiated without a full application context).
Returns
void
Example
// If webda.module.json contains:
// { "moddas": { "MyApp/HawkService": { "capabilities": ["request-filter", "cors-filter"] } } }
// Then after resolve(), this.getCapabilities() returns:
// { "request-filter": {}, "cors-filter": {} }
See
getCapabilities
Inherited from
log()
log(
level, ...args):void
Defined in: packages/core/src/services/service.ts:561
Log operation
Parameters
level
WorkerLogLevel
to log
args
...any[]
additional arguments
Returns
void
Inherited from
modelAction()
modelAction(...
args):Promise<any>
Defined in: packages/core/src/services/domainservice.service.ts:674
Action on a model
An instance action receives the primary key fields first (to load the object), then its parameters; a static action its parameters. Actions without an input schema receive the context.
Parameters
args
...any[]
arguments forwarded to the action method
Returns
Promise<any>
the action result
modelBehaviorAction()
modelBehaviorAction(...
args):Promise<any>
Defined in: packages/core/src/services/domainservice.service.ts:1094
Load the parent by its resolved key, check the dotted behavior permission, and forward the typed arguments. Login MFA keeps its own pending-session lifecycle checks.
Parameters
args
...any[]
parent key fields followed by method parameters in declaration order
Returns
Promise<any>
the behavior method's return value
modelCreate()
modelCreate():
Promise<Model>
Defined in: packages/core/src/services/domainservice.service.ts:446
Create a model operation implementation
The model data is the request body (getModelInput)
Returns
Promise<Model>
the created model instance
modelDelete()
modelDelete(
uuid):Promise<void>
Defined in: packages/core/src/services/domainservice.service.ts:570
Delete a model operation implementation
Parameters
uuid
string
the model primary key
Returns
Promise<void>
modelGet()
modelGet(
uuid):Promise<Model>
Defined in: packages/core/src/services/domainservice.service.ts:558
Get a model operation implementation
Parameters
uuid
string
the model primary key
Returns
Promise<Model>
the model instance
modelPatch()
modelPatch():
Promise<Model>
Defined in: packages/core/src/services/domainservice.service.ts:613
Patch a model
The partial update data is the request body (getModelInput)
Returns
Promise<Model>
the patched model instance
modelQuery()
modelQuery(
query,count?):Promise<any>
Defined in: packages/core/src/services/domainservice.service.ts:588
Query models
With a field list (SELECT title, owner.name WHERE ...) each result only holds the selected fields and the
primary key, see queryModelWithPermissions.
Parameters
query
string
the query string: a WebdaQL filter, optionally with a SELECT field list
count?
boolean
also return the total of the query (total), when the model allows it
Returns
Promise<any>
the query results
modelUpdate()
modelUpdate():
Promise<Model>
Defined in: packages/core/src/services/domainservice.service.ts:534
Update a model operation implementation
The update data is the request body (getModelInput)
Returns
Promise<Model>
the updated model instance
off()
off<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:152
Perform off
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.off
Inherited from
on()
on<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:128
Perform on
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.once
Inherited from
once()
once<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:116
Perform once
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.once
Inherited from
operationSchemaName()
protectedoperationSchemaName(method,side):string
Defined in: packages/core/src/services/service.ts:441
Schema of an operation side: <service name>.<method>.<side> when the application knows it, else the one the
build writes, <class>.<method>.<side>, for the class or its nearest ancestor that has it (a service configured
under another name than its class)
Parameters
method
string
the method name
side
"input" | "output"
input or output
Returns
string
the schema name
Inherited from
removeAllListeners()
removeAllListeners<
Key>(eventName?):this
Defined in: packages/core/src/events/asynceventemitter.ts:162
Remove all listeners
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName?
Key
the event name
Returns
this
this for chaining
See
EventEmitter.removeAllListeners
Inherited from
removeListener()
removeListener<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:140
Remove listener
Type Parameters
Key
Key extends string | number | symbol
Parameters
eventName
Key
the event name
listener
(event) => void
the event listener
Returns
this
this for chaining
See
EventEmitter.removeListener
Inherited from
resolve()
resolve():
this
Defined in: packages/core/src/services/service.ts:249
Resolve parameters and load metadata. @Route-declared routes are scanned
and registered by Router.discoverRoutes(services) from Core.init()
once every service has resolved — nothing to do per-service here.
Returns
this
the result
Inherited from
resolveUpdateKey()
protectedresolveUpdateKey(input,pkFields,params):any
Defined in: packages/core/src/services/domainservice.service.ts:495
Resolve the primary key of an update or patch: the URL parameters win over the body, and a body carrying another key is refused, so an update can never be redirected to another object
Parameters
input
any
the sanitized input, its primary-key fields are removed
pkFields
string[]
the primary-key fields
params
Record<string, any>
the URL parameters
Returns
any
the primary key
Throws
BadRequest when the body key differs from the URL key
setMaxListeners()
setMaxListeners(
n):this
Defined in: packages/core/src/events/asynceventemitter.ts:104
Parameters
n
number
Returns
this
Inherited from
stop()
stop():
Promise<void>
Defined in: packages/core/src/services/service.ts:230
Shutdown the current service if action need to be taken
Returns
Promise<void>
Inherited from
toJSON()
toJSON():
string
Defined in: packages/core/src/services/service.ts:499
Prevent service to be serialized
Returns
string
the result
Inherited from
toString()
toString():
string
Defined in: packages/core/src/services/service.ts:238
Return service representation
Returns
string
the result
Inherited from
transformName()
transformName(
name):string
Defined in: packages/core/src/services/domainservice.service.ts:359
Return the model name for this service
Parameters
name
string
the name to use
Returns
string
the result string
See
https://blog.boot.dev/clean-code/casings-in-coding/#:~:text=%F0%9F%94%97%20Camel%20Case,Go