BinaryService
Abstract Class: BinaryService<T, E>
Defined in: packages/core/src/services/binary.service.ts:1316
This is an abstract service to represent a storage of files The binary allow you to expose this service as HTTP
It supports two modes:
- attached to a CoreModel (attach, detach, reattach)
- pure storage with no managed id (read, write, delete)
As we have deduplication builtin you can get some stats
- getUsageCount(hash)
- getUsageCountForRaw()
- getUsageCountForMap()
The Binary storage should store only once a binary and reference every object that are used by this binary, so it can be cleaned.
See
- FileBinary
- S3Binary
Exports
Webda Modda
Binary
Extends
Service<T,E>
Extended by
Type Parameters
T
T extends BinaryParameters = BinaryParameters
E
E extends BinaryEvents = BinaryEvents
Implements
Constructors
Constructor
new BinaryService<
T,E>(name,params):BinaryService<T,E>
Defined in: packages/core/src/services/service.ts:191
Service
Parameters
name
string
The name of the service
params
T
The parameters block define in the configuration file
Returns
BinaryService<T, E>
Inherited from
Properties
_compiledCapabilities
protected_compiledCapabilities:Record<string,any> ={}
Defined in: packages/core/src/services/iservice.ts:49
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
_lowercaseMaps
_lowercaseMaps:
any
Defined in: packages/core/src/services/binary.service.ts:1323
[WEBDA_EVENTS]
[WEBDA_EVENTS]:
E
Defined in: packages/core/src/services/service.ts:165
Set the Webda events here
Inherited from
hookedModels
protectedhookedModels:Set<string>
Defined in: packages/core/src/services/binary.service.ts:1528
Identifiers of the models whose deletion is already followed, so a second init() does not cascade twice
logger
protectedlogger:Logger
Defined in: packages/core/src/services/service.ts:178
Logger with class context
Inherited from
metrics
metrics:
object
Defined in: packages/core/src/services/binary.service.ts:1325
Get metrics
delete
delete:
Counter
download
download:
Counter
metadataUpdate
metadataUpdate:
Counter
upload
upload:
Counter
Overrides
name
readonlyname:string
Defined in: packages/core/src/services/iservice.ts:26
Inherited from
parameters
readonlyparameters:T
Defined in: packages/core/src/services/iservice.ts:27
Inherited from
pendingDeletes
protectedpendingDeletes:Map<string, {infos:object[];model:string;uuid:string; }>
Defined in: packages/core/src/services/binary.service.ts:1519
Binaries of a deleted object, kept between the Delete (before) and Deleted (after) events of its repository
createConfiguration?
staticoptionalcreateConfiguration?: (params) =>any
Defined in: packages/core/src/services/iservice.ts:32
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:37
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:161
Service parameters
Inherited from
Methods
__clean()
abstract__clean():Promise<void>
Defined in: packages/core/src/services/service.ts:494
Clean the service data, can only be used in test mode
Returns
Promise<void>
Inherited from
_get()
abstract_get(info):Promise<Readable>
Defined in: packages/core/src/services/binary.service.ts:1493
Parameters
info
Returns
Promise<Readable>
addListener()
addListener<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:83
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:386
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:339
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
cascadeDelete()
abstractcascadeDelete(info,uuid,attribute,model):Promise<void>
Defined in: packages/core/src/services/binary.service.ts:1820
Cascade the deletion of an object to one of its binaries: only the usage of (model, attribute, uuid) is removed, never the usage of another object sharing the deduplicated data
Parameters
info
of the map
uuid
string
of the object
attribute
string
the binary attribute holding the map
model
string
the model identifier of the object
Returns
Promise<void>
checkMap()
protectedcheckMap(object,property):void
Defined in: packages/core/src/services/binary.service.ts:1666
Check if a map is defined
Parameters
object
Model
the target object
property
string
the property name
Returns
void
completeUpload()
completeUpload(
object,property,hash):Promise<void>
Defined in: packages/core/src/services/binary.service.ts:1912
Attach a direct upload once the client declares it finished, after verifying the uploaded object
By default no pending upload is managed so throws 404
Parameters
object
the model owning the binary
property
string
the binary attribute
hash
string
the hash announced in the challenge
Returns
Promise<void>
computeParameters()
computeParameters():
void
Defined in: packages/core/src/services/service.ts:200
Used to compute or derivate input parameter to attribute
Returns
void
Deprecated
Inherited from
delete()
abstractdelete(object,property,index?):Promise<void>
Defined in: packages/core/src/services/binary.service.ts:1442
Delete a binary
Parameters
object
Storable
The object uuid to get from the store
property
string
The object property to add the file to
index?
number
The index of the file to change in the property
Returns
Promise<void>
Emits
'binaryDelete'
deleteSuccess()
deleteSuccess(
object,property,index?):Promise<void>
Defined in: packages/core/src/services/binary.service.ts:1830
Parameters
object
the target object
property
string
the property name
index?
number
the index
Returns
Promise<void>
the result
downloadTo()
downloadTo(
info,filename):Promise<void>
Defined in: packages/core/src/services/binary.service.ts:1467
Download a binary to a file
Parameters
info
The reference stored in your target object
filename
any
the filename
Returns
Promise<void>
emit()
emit<
Key>(event,data):Promise<void>
Defined in: packages/core/src/services/service.ts:475
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
get()
get(
info):Promise<Readable>
Defined in: packages/core/src/services/binary.service.ts:1451
Get a binary
Parameters
info
The reference stored in your target object
Returns
Promise<Readable>
the result
Emits
'binaryGet'
getCapabilities()
getCapabilities():
Record<string,any>
Defined in: packages/core/src/services/iservice.ts:77
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:327
Return the events that an external system can subscribe to
Returns
string[]
the list of results
Inherited from
getFile()
getFile(
req):Promise<BinaryFile<{ }>>
Defined in: packages/core/src/services/binary.service.ts:1861
Get file either from multipart post or raw
Parameters
req
the request
Returns
Promise<BinaryFile<{ }>>
the result
getMaxListeners()
getMaxListeners():
number
Defined in: packages/core/src/events/asynceventemitter.ts:90
Returns
number
Inherited from
getMetric()
getMetric<
T>(type,configuration):T
Defined in: packages/core/src/services/service.ts:309
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
getName()
getName():
string
Defined in: packages/core/src/services/service.ts:485
Get service name
Returns
string
the result string
Inherited from
getOpenApiReplacements()
getOpenApiReplacements():
any
Defined in: packages/core/src/services/service.ts:415
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:373
If undefined is returned it cancel the operation registration
Parameters
id
string
the identifier
Returns
string
the result
Inherited from
getOperationName()
protectedgetOperationName():string
Defined in: packages/core/src/services/binary.service.ts:1885
Return the name of the service for OpenAPI
Returns
string
the result string
getParameters()
getParameters():
T
Defined in: packages/core/src/services/service.ts:208
Get the service parameters
Returns
T
the result
Inherited from
getRedirectUrlFromObject()
getRedirectUrlFromObject(
binaryMap,_context,_expires?):Promise<string>
Defined in: packages/core/src/services/binary.service.ts:1363
Get a UrlFromObject
Parameters
binaryMap
the binary map definition
_context
the execution context
_expires?
number = 30
the expiration time
Returns
Promise<string>
the result
getRepository()
protectedgetRepository(model):any
Defined in: packages/core/src/services/binary.service.ts:1587
Get the event emitting repository of a model
Parameters
model
any
the model class
Returns
any
the repository
getService()
getService<
T>(name):ServicesMap[T]
Defined in: packages/core/src/services/service.ts:299
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:171
Get the current state
Returns
the result
Inherited from
getStoredValue()
protectedgetStoredValue(object,property):Promise<any>
Defined in: packages/core/src/services/binary.service.ts:1739
The attribute value as stored: the object is re-loaded from its repository so a link made by a concurrent request (another instance of the same object) is seen. Objects without a stored copy keep their own value.
Parameters
object
the target object
property
string
the property name
Returns
Promise<any>
the attribute value
getUrl()
getUrl(
url,_methods):string
Defined in: packages/core/src/services/service.ts:350
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
getUsageCount()
abstractgetUsageCount(hash):Promise<number>
Defined in: packages/core/src/services/binary.service.ts:1432
The store can retrieve how many time a binary has been used
Parameters
hash
string
Returns
Promise<number>
handleBinary()
handleBinary(
modelName,attribute):-1|0|1|2
Defined in: packages/core/src/services/binary.service.ts:1377
Define if binary is managed by the store
Parameters
modelName
string
the model name
attribute
string
the attribute name
Returns
-1 | 0 | 1 | 2
-1 if not managed, 0 if managed but by default, 1 if managed and in the map, 2 if explicit with attribute and model
hookDelete()
protectedhookDelete(model,attributes):void
Defined in: packages/core/src/services/binary.service.ts:1599
Cascade the deletion of a model to its binaries
Delete runs before the repository deletion: the object is loaded and its binaries are kept aside. Deleted
only fires once the deletion succeeded, so a failed delete leaves the binaries untouched.
Parameters
model
any
the model class
attributes
string[]
the candidate behavior attributes
Returns
void
init()
init():
Promise<BinaryService<T,E>>
Defined in: packages/core/src/services/binary.service.ts:1537
Listen to the deletion of every model owning a binary attribute that this service stores
Exactly one service owns an attribute: the one getBinaryStore resolves, so several binary services never
cascade the same attribute twice.
Returns
Promise<BinaryService<T, E>>
this
Overrides
initMetrics()
initMetrics():
void
Defined in: packages/core/src/services/binary.service.ts:1335
Returns
void
Overrides
initOperations()
initOperations():
void
Defined in: packages/core/src/services/service.ts:422
Init the operations from
Returns
void
Operation
decorators on this service
Inherited from
isCollection()
protectedisCollection(object,property):boolean
Defined in: packages/core/src/services/binary.service.ts:1685
Whether the binary attribute is a collection (BinariesImpl or a subclass) rather than a single Binary
Models are hydrated by the compiled __hydrateBehaviors (store deserialization, load, patch), which always
instantiates the behavior class, even for an unset attribute: instanceof BinariesImpl therefore covers
subclasses. The relation id comparison is the fallback for objects that were never hydrated.
Parameters
object
the target object
property
string
the property name
Returns
boolean
true if the attribute holds several binaries
isLinked()
protectedisLinked(object,property,hash,value?):boolean
Defined in: packages/core/src/services/binary.service.ts:1720
Whether the hash is already linked to the object attribute (a collection item or the single binary)
Parameters
object
the target object
property
string
the property name
hash
string
the binary hash
value?
any = ...
the attribute value to check, default to the object's
Returns
boolean
true if linked
listeners()
listeners(
eventName):Function[]
Defined in: packages/core/src/events/asynceventemitter.ts:183
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:269
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:515
Parameters
level
WorkerLogLevel
to log
args
...any[]
additional arguments
Returns
void
Inherited from
newModel()
newModel(
obj):BinaryMap
Defined in: packages/core/src/services/binary.service.ts:1500
Based on the raw Map init a BinaryMap
Parameters
obj
any
the target object
Returns
the result map
Implementation of
off()
off<
Key>(eventName,listener):this
Defined in: packages/core/src/events/asynceventemitter.ts:141
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:119
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:108
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
ownsAttribute()
protectedownsAttribute(model,attribute):boolean
Defined in: packages/core/src/services/binary.service.ts:1569
Whether this service is the one storing the binaries of a model attribute
Parameters
model
any
the model class
attribute
string
the attribute name
Returns
boolean
true if owned
putRedirectUrl()
putRedirectUrl(...
args):Promise<{headers?: {[key:string]:string; };method?:string;url:string; }>
Defined in: packages/core/src/services/binary.service.ts:1921
By default no challenge is managed so throws 404
Parameters
args
...any
additional arguments
Returns
Promise<{ headers?: {[key: string]: string; }; method?: string; url: string; }>
removeAllListeners()
removeAllListeners<
Key>(eventName?):this
Defined in: packages/core/src/events/asynceventemitter.ts:150
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:130
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:235
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
setMaxListeners()
setMaxListeners(
n):this
Defined in: packages/core/src/events/asynceventemitter.ts:97
Parameters
n
number
Returns
this
Inherited from
stop()
stop():
Promise<void>
Defined in: packages/core/src/services/service.ts:216
Shutdown the current service if action need to be taken
Returns
Promise<void>
Inherited from
store()
abstractstore(object,property,file,metadata?):Promise<void>
Defined in: packages/core/src/services/binary.service.ts:1427
When you store a binary to be able to retrieve it you need to store the information into another object
If you have a User object define like this : User = {'name': 'Remi', 'uuid': 'Loopingz'}
You will call the store(userStore, 'Loopingz', 'images', filedata, {'type':'profile'})
After a successful call the object will look like
User = {
'name': 'Remi',
'uuid': 'Loopingz',
'images': [
{'type':'profile','hash':'a12545...','size':1245,'mime':'application/octet'}
]
}
Parameters
object
Storable
The object uuid to get from the store
property
string
The object property to add the file to
file
The file by itself
metadata?
any
to add to the binary object
Returns
Promise<void>
Emits
'binaryCreate'
toJSON()
toJSON():
string
Defined in: packages/core/src/services/service.ts:454
Prevent service to be serialized
Returns
string
the result
Inherited from
toString()
toString():
string
Defined in: packages/core/src/services/service.ts:224
Return service representation
Returns
string
the result
Inherited from
uploadSuccess()
uploadSuccess(
object,property,fileInfo):Promise<void>
Defined in: packages/core/src/services/binary.service.ts:1760
Ensure events are sent correctly after an upload and update the BinaryFileInfo in targetted object
Parameters
object
the target object
property
string
the property name
fileInfo
BinaryFileInfo<{ }> | { toBinaryFileInfo: () => BinaryFileInfo; }
the file information
Returns
Promise<void>
verifiedHashes()
protectedverifiedHashes(file):Promise<{challenge:string;hash:string; }>
Defined in: packages/core/src/services/binary.service.ts:1702
Hashes of a file to store, computed from its bytes: a hash or challenge set on the file is never trusted
A preset hash that differs from the content is rejected; the file then carries the computed values
Parameters
file
the file to store
Returns
Promise<{ challenge: string; hash: string; }>
the computed hash and challenge
verifyMapAndStore()
protectedverifyMapAndStore(ctx):IStore
Defined in: packages/core/src/services/binary.service.ts:1894
Based on the request parameter verify it match a known mapping
Parameters
ctx
the operation context
Returns
the result
streamToBuffer()
staticstreamToBuffer(stream):Promise<Buffer<ArrayBufferLike>>
Defined in: packages/core/src/services/binary.service.ts:1510
Read a stream to a buffer
Parameters
stream
Readable
the stream
Returns
Promise<Buffer<ArrayBufferLike>>
the result