Skip to main content

S3Binary

@webda/aws


Class: S3Binary<T>

Defined in: aws/src/services/s3binary.service.ts:91

S3Binary handles the storage of binary on a S3 bucket

The structure used for now is /{hash}/data /{hash}/{targetStore}_{uuid} The challenge is stored on the metadata of the data object

It takes parameters bucket: "bucketName" accessKeyId: "" secretAccessKey: "" region: ""

See Binary the general interface

We can register on S3 Event to get info when /data is pushed

Webda Modda​

Extends​

  • CloudBinary<T>

Type Parameters​

T​

T extends S3BinaryParameters = S3BinaryParameters

Implements​

Constructors​

Constructor​

new S3Binary<T>(name, params): S3Binary<T>

Defined in: core/lib/services/service.d.ts:72

Service

Parameters​

name​

string

The name of the service

params​

T

The parameters block define in the configuration file

Returns​

S3Binary<T>

Inherited from​

CloudBinary<T>.constructor

Properties​

_compiledCapabilities​

protected _compiledCapabilities: Record<string, any>

Defined in: core/lib/services/iservice.d.ts:39

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​

CloudBinary._compiledCapabilities


_lowercaseMaps​

_lowercaseMaps: any

Defined in: core/lib/services/binary.service.d.ts:689

Inherited from​

CloudBinary._lowercaseMaps


_s3​

_s3: S3

Defined in: aws/src/services/s3binary.service.ts:95


[WEBDA_EVENTS]​

[WEBDA_EVENTS]: BinaryEvents

Defined in: core/lib/services/service.d.ts:50

Set the Webda events here

Inherited from​

CloudBinary.[WEBDA_EVENTS]


logger​

protected logger: Logger

Defined in: core/lib/services/service.d.ts:59

Logger with class context

Inherited from​

CloudBinary.logger


metrics​

metrics: object

Defined in: core/lib/services/binary.service.d.ts:690

Get metrics

delete​

delete: Counter

download​

download: Counter

metadataUpdate​

metadataUpdate: Counter

upload​

upload: Counter

Inherited from​

CloudBinary.metrics


name​

readonly name: string

Defined in: core/lib/services/iservice.d.ts:19

Inherited from​

CloudBinary.name


parameters​

readonly parameters: T

Defined in: core/lib/services/iservice.d.ts:20

Inherited from​

CloudBinary.parameters


createConfiguration?​

static optional createConfiguration?: (params) => any

Defined in: core/lib/services/iservice.d.ts:24

Create configuration set by the application on load

Parameters​

params​

any

Returns​

any

Inherited from​

CloudBinary.createConfiguration


filterConfiguration?​

static optional filterConfiguration?: (params) => any

Defined in: core/lib/services/iservice.d.ts:28

Create configuration set by the application on load

Parameters​

params​

any

Returns​

any

Inherited from​

CloudBinary.filterConfiguration


Parameters​

static Parameters: typeof ServiceParameters

Defined in: core/lib/services/service.d.ts:46

Service parameters

Inherited from​

CloudBinary.Parameters

Methods​

__clean()​

abstract __clean(): Promise<void>

Defined in: core/lib/services/service.d.ts:215

Clean the service data, can only be used in test mode

Returns​

Promise<void>

Inherited from​

CloudBinary.__clean


_cleanHash()​

_cleanHash(hash): Promise<void>

Defined in: aws/src/services/s3binary.service.ts:292

Delete the binary data and all its markers

Parameters​

hash​

string

the binary hash

Returns​

Promise<void>


_cleanUsage()​

_cleanUsage(hash, uuid, attribute?): Promise<void>

Defined in: aws/src/services/s3binary.service.ts:320

Parameters​

hash​

string

the binary hash

uuid​

string

the object uuid

attribute?​

string

the binary attribute, if undefined clean the whole binary

Returns​

Promise<void>

Overrides​

CloudBinary._cleanUsage


_exists()​

_exists(hash): Promise<boolean>

Defined in: aws/src/services/s3binary.service.ts:337

Check if the binary data exists

Parameters​

hash​

string

the binary hash

Returns​

Promise<boolean>

true if it exists


_get()​

_get(info): Promise<Readable>

Defined in: aws/src/services/s3binary.service.ts:242

Parameters​

info​

BinaryMap

the binary to retrieve

Returns​

Promise<Readable>

the binary content stream

Overrides​

CloudBinary._get


_getKey()​

_getKey(hash, suffix?): string

Defined in: core/lib/services/cloudbinary.d.ts:34

Return the S3 key

Parameters​

hash​

string

the hash value

suffix?​

string

the suffix to append

Returns​

string

the result string

Inherited from​

CloudBinary._getKey


_getS3()​

_getS3(hash): Promise<HeadObjectCommandOutput>

Defined in: aws/src/services/s3binary.service.ts:357

Get a head object

Parameters​

hash​

string

the binary hash

Returns​

Promise<HeadObjectCommandOutput>

the head result or undefined if not found


addListener()​

addListener<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:80

Type Parameters​

Key​

Key extends keyof BinaryEvents

Parameters​

eventName​

Key

the event name

listener​

(event) => void | Promise<void>

the event listener

Returns​

this

this for chaining

See​

EventEmitter.addListener

Inherited from​

CloudBinary.addListener


addRoute()​

protected addRoute(url, methods, executer, openapi?, override?): void

Defined in: core/lib/services/service.d.ts:177

Add a route dynamicaly

Parameters​

url​

string

of the route can contains dynamic part like {uuid}

methods​

HttpMethodType[]

the HTTP methods

executer​

Function

Method to execute for this route

openapi?​

OpenAPIWebdaDefinition

the OpenAPI specification

override?​

boolean

whether to override existing

Returns​

void

Inherited from​

CloudBinary.addRoute


authorizeClientEvent()​

authorizeClientEvent(_event, _context): boolean

Defined in: core/lib/services/service.d.ts:153

Authorize a public event subscription

Parameters​

_event​

string

the event name

_context​

OperationContext

the execution context

Returns​

boolean

true if the condition is met

Inherited from​

CloudBinary.authorizeClientEvent


cascadeDelete()​

cascadeDelete(info, uuid): Promise<void>

Defined in: core/lib/services/cloudbinary.d.ts:42

Parameters​

info​

BinaryMap

uuid​

string

Returns​

Promise<void>

Inherited from​

CloudBinary.cascadeDelete


checkMap()​

protected checkMap(object, property): void

Defined in: core/lib/services/binary.service.d.ts:790

Check if a map is defined

Parameters​

object​

Model

the target object

property​

string

the property name

Returns​

void

Inherited from​

CloudBinary.checkMap


computeParameters()​

computeParameters(): void

Defined in: aws/src/services/s3binary.service.ts:101

Create the S3 client

Returns​

void

Overrides​

CloudBinary.computeParameters


delete()​

delete(object, property, index): Promise<void>

Defined in: core/lib/services/cloudbinary.d.ts:38

Parameters​

object​

CoreModelWithBinary

property​

string

index​

number

Returns​

Promise<void>

Inherited from​

CloudBinary.delete


deleteSuccess()​

deleteSuccess(object, property, index?): Promise<void>

Defined in: core/lib/services/binary.service.d.ts:815

Parameters​

object​

CoreModelWithBinary

the target object

property​

string

the property name

index?​

number

the index

Returns​

Promise<void>

the result

Inherited from​

CloudBinary.deleteSuccess


downloadTo()​

downloadTo(info, filename): Promise<void>

Defined in: core/lib/services/binary.service.d.ts:768

Download a binary to a file

Parameters​

info​

BinaryMap

The reference stored in your target object

filename​

any

the filename

Returns​

Promise<void>

Inherited from​

CloudBinary.downloadTo


emit()​

emit<Key>(event, data): Promise<void>

Defined in: core/lib/services/service.d.ts:204

Emit the event with data and wait for Promise to finish if listener returned a Promise

Type Parameters​

Key​

Key extends keyof BinaryEvents

Parameters​

event​

Key

the event name

data​

BinaryEvents[Key]

the data to process

Returns​

Promise<void>

Inherited from​

CloudBinary.emit


exists()​

exists(Key, Bucket?): Promise<HeadObjectCommandOutput>

Defined in: aws/src/services/s3binary.service.ts:257

Check if an object exists on S3

Parameters​

Key​

string

the object key

Bucket?​

string = ...

the bucket, default to the configured one

Returns​

Promise<HeadObjectCommandOutput>

the head result or null if not found


forEachFile()​

forEachFile(Bucket, callback, Prefix?, filter?): Promise<void>

Defined in: aws/src/services/s3binary.service.ts:397

Iterate over the files of a bucket

Parameters​

Bucket​

string

to iterate on

callback​

(Key, page) => Promise<void>

to execute with each key

Prefix?​

string = ""

to use

filter?​

RegExp = undefined

regexp to execute on the key

Returns​

Promise<void>


get()​

get(info): Promise<Readable>

Defined in: core/lib/services/binary.service.d.ts:760

Get a binary

Parameters​

info​

BinaryMap

The reference stored in your target object

Returns​

Promise<Readable>

the result

Emits​

'binaryGet'

Inherited from​

CloudBinary.get


getARNPolicy()​

getARNPolicy(_accountId): object

Defined in: aws/src/services/s3binary.service.ts:478

IAM policy required by the service

Parameters​

_accountId​

string

AWS account id

Returns​

object

the policy statement

Action​

Action: string[]

Effect​

Effect: string = "Allow"

Resource​

Resource: string[]

Sid​

Sid: string


getCapabilities()​

getCapabilities(): Record<string, any>

Defined in: core/lib/services/iservice.d.ts:61

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​

CloudBinary.getCapabilities


getClientEvents()​

getClientEvents(): string[]

Defined in: core/lib/services/service.d.ts:144

Return the events that an external system can subscribe to

Returns​

string[]

the list of results

Inherited from​

CloudBinary.getClientEvents


getCloudFormation()​

getCloudFormation(deployer): object

Defined in: aws/src/services/s3binary.service.ts:512

CloudFormation resources for the bucket

Parameters​

deployer​

CloudFormationDeployerInfo

the deployer requesting the resources

Returns​

object

the resources

Implementation of​

CloudFormationContributor.getCloudFormation


getFile()​

getFile(req): Promise<BinaryFile<{ }>>

Defined in: core/lib/services/binary.service.d.ts:821

Get file either from multipart post or raw

Parameters​

req​

IOperationContext

the request

Returns​

Promise<BinaryFile<{ }>>

the result

Inherited from​

CloudBinary.getFile


getMaxListeners()​

getMaxListeners(): number

Defined in: core/lib/events/asynceventemitter.d.ts:84

Returns​

number

Inherited from​

CloudBinary.getMaxListeners


getMetric()​

getMetric<T>(type, configuration): T

Defined in: core/lib/services/service.d.ts:138

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​

MetricConfiguration<T>

the configuration

Returns​

T

the result

Inherited from​

CloudBinary.getMetric


getName()​

getName(): string

Defined in: core/lib/services/service.d.ts:209

Get service name

Returns​

string

the result string

Inherited from​

CloudBinary.getName


getObject()​

getObject(key, bucket?): Promise<Readable>

Defined in: aws/src/services/s3binary.service.ts:377

Get an object from s3 bucket

Parameters​

key​

string

to get

bucket?​

string

to retrieve from or default bucket

Returns​

Promise<Readable>

the object content stream


getOpenApiReplacements()​

getOpenApiReplacements(): any

Defined in: core/lib/services/service.d.ts:182

Return variables for replacement in openapi

Returns​

any

the result

Inherited from​

CloudBinary.getOpenApiReplacements


getOperationId()​

getOperationId(id): string

Defined in: core/lib/services/service.d.ts:167

If undefined is returned it cancel the operation registration

Parameters​

id​

string

the identifier

Returns​

string

the result

Inherited from​

CloudBinary.getOperationId


getOperationName()​

protected getOperationName(): string

Defined in: core/lib/services/binary.service.d.ts:826

Return the name of the service for OpenAPI

Returns​

string

the result string

Inherited from​

CloudBinary.getOperationName


getParameters()​

getParameters(): T

Defined in: core/lib/services/service.d.ts:82

Get the service parameters

Returns​

T

the result

Inherited from​

CloudBinary.getParameters


getRedirectUrlFromObject()​

getRedirectUrlFromObject(binaryMap, context, expires?): Promise<string>

Defined in: core/lib/services/cloudbinary.d.ts:27

Get a UrlFromObject

Parameters​

binaryMap​

any

the binary map definition

context​

any

the execution context

expires?​

number

the expiration time

Returns​

Promise<string>

the result

Inherited from​

CloudBinary.getRedirectUrlFromObject


getService()​

getService<T>(name): ServicesMap[T]

Defined in: core/lib/services/service.d.ts:131

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​

CloudBinary.getService


getSignedUrl()​

getSignedUrl(key, action?, params?): Promise<string>

Defined in: aws/src/services/s3binary.service.ts:207

Return a signed url to an object

Parameters​

key​

string

to the object

action?​

"getObject" | "putObject"

to perform

params?​

any = {}

additional command parameters

Returns​

Promise<string>

the signed url


getSignedUrlFromMap()​

getSignedUrlFromMap(binaryMap, expire, _context): Promise<string>

Defined in: aws/src/services/s3binary.service.ts:227

Parameters​

binaryMap​

BinaryMap

the binary to download

expire​

number

url validity in seconds

_context​

OperationContext

the operation context

Returns​

Promise<string>

the signed url

Overrides​

CloudBinary.getSignedUrlFromMap


getState()​

getState(): ServiceStates

Defined in: core/lib/services/service.d.ts:55

Get the current state

Returns​

ServiceStates

the result

Inherited from​

CloudBinary.getState


getUrl()​

getUrl(url, _methods): string

Defined in: core/lib/services/service.d.ts:161

Return the full path url based on parameters

Parameters​

url​

string

relative url to service

_methods​

HttpMethodType[]

in case we need filtering (like Store)

Returns​

string

absolute url or undefined if need to skip the Route

Inherited from​

CloudBinary.getUrl


getUsageCount()​

getUsageCount(hash): Promise<number>

Defined in: aws/src/services/s3binary.service.ts:276

Parameters​

hash​

string

the binary hash

Returns​

Promise<number>

the number of objects using the binary

Overrides​

CloudBinary.getUsageCount


handleBinary()​

handleBinary(modelName, attribute): -1 | 0 | 1 | 2

Defined in: core/lib/services/binary.service.d.ts:715

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

Inherited from​

CloudBinary.handleBinary


init()​

abstract init(): Promise<S3Binary<T>>

Defined in: core/lib/services/service.d.ts:198

Will be called after all the Services are created

Returns​

Promise<S3Binary<T>>

Inherited from​

CloudBinary.init


initMetrics()​

initMetrics(): void

Defined in: core/lib/services/binary.service.d.ts:699

Returns​

void

Inherited from​

CloudBinary.initMetrics


initOperations()​

initOperations(): void

Defined in: core/lib/services/service.d.ts:186

Init the operations from

Returns​

void

Operation​

decorators on this service

Inherited from​

CloudBinary.initOperations


listeners()​

listeners(eventName): Function[]

Defined in: core/lib/events/asynceventemitter.d.ts:139

Get all listeners for an event

Parameters​

eventName​

keyof BinaryEvents

the event name

Returns​

Function[]

the list of results

Inherited from​

CloudBinary.listeners


loadCapabilities()​

protected loadCapabilities(): void

Defined in: core/lib/services/service.d.ts:120

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​

CloudBinary.loadCapabilities


log()​

log(level, ...args): void

Defined in: core/lib/services/service.d.ts:226

Parameters​

level​

WorkerLogLevel

to log

args​

...any[]

additional arguments

Returns​

void

Inherited from​

CloudBinary.log


newModel()​

newModel(obj): BinaryMap

Defined in: core/lib/services/binary.service.d.ts:775

Based on the raw Map init a BinaryMap

Parameters​

obj​

any

the target object

Returns​

BinaryMap

the result map

Inherited from​

CloudBinary.newModel


off()​

off<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:116

Type Parameters​

Key​

Key extends keyof BinaryEvents

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.off

Inherited from​

CloudBinary.off


on()​

on<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:102

Type Parameters​

Key​

Key extends keyof BinaryEvents

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.once

Inherited from​

CloudBinary.on


once()​

once<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:95

Type Parameters​

Key​

Key extends keyof BinaryEvents

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.once

Inherited from​

CloudBinary.once


putMarker()​

putMarker(hash, suffix, storeName): Promise<PutObjectCommandOutput>

Defined in: aws/src/services/s3binary.service.ts:188

Put an empty marker object next to the binary data

Parameters​

hash​

string

the binary hash

suffix​

string

the marker name

storeName​

string

the model identifier using the binary

Returns​

Promise<PutObjectCommandOutput>

the putObject result


putObject()​

putObject(key, body, metadatas?, bucket?): Promise<void>

Defined in: aws/src/services/s3binary.service.ts:429

Add an object to S3 bucket

Parameters​

key​

string

to add to

body​

string | Buffer<ArrayBufferLike> | Blob | ReadableStream<any>

content of the object

metadatas?​

to put along the object

bucket?​

string = ...

to use

Returns​

Promise<void>


putRedirectUrl()​

putRedirectUrl(object, property, body?, context?): Promise<{ headers: {[key: string]: string; }; method: string; url: string; }>

Defined in: aws/src/services/s3binary.service.ts:115

Return a signed PUT url if the binary is not yet stored

Parameters​

object​

CoreModel

the model owning the binary

property​

string

the binary attribute

body?​

BinaryFileInfo

the binary information (hash and challenge)

context?​

OperationContext<BinaryFileInfo<{ }>>

the operation context

Returns​

Promise<{ headers: {[key: string]: string; }; method: string; url: string; }>

the url to upload to, or undefined if the binary is already stored

Overrides​

CloudBinary.putRedirectUrl


removeAllListeners()​

removeAllListeners<Key>(eventName?): this

Defined in: core/lib/events/asynceventemitter.d.ts:122

Type Parameters​

Key​

Key extends keyof BinaryEvents

Parameters​

eventName?​

Key

the event name

Returns​

this

this for chaining

See​

EventEmitter.removeAllListeners

Inherited from​

CloudBinary.removeAllListeners


removeListener()​

removeListener<Key>(eventName, listener): this

Defined in: core/lib/events/asynceventemitter.d.ts:109

Type Parameters​

Key​

Key extends keyof BinaryEvents

Parameters​

eventName​

Key

the event name

listener​

(event) => void

the event listener

Returns​

this

this for chaining

See​

EventEmitter.removeListener

Inherited from​

CloudBinary.removeListener


resolve()​

resolve(): this

Defined in: core/lib/services/service.d.ts:98

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​

CloudBinary.resolve


setMaxListeners()​

setMaxListeners(n): this

Defined in: core/lib/events/asynceventemitter.d.ts:88

Parameters​

n​

number

Returns​

this

Inherited from​

CloudBinary.setMaxListeners


stop()​

stop(): Promise<void>

Defined in: core/lib/services/service.d.ts:86

Shutdown the current service if action need to be taken

Returns​

Promise<void>

Inherited from​

CloudBinary.stop


store()​

store(object, property, file): Promise<void>

Defined in: aws/src/services/s3binary.service.ts:450

Parameters​

object​

CoreModel

the model owning the binary

property​

string

the binary attribute

file​

BinaryFile

the binary to store

Returns​

Promise<void>

Overrides​

CloudBinary.store


toJSON()​

toJSON(): string

Defined in: core/lib/services/service.d.ts:191

Prevent service to be serialized

Returns​

string

the result

Inherited from​

CloudBinary.toJSON


toString()​

toString(): string

Defined in: core/lib/services/service.d.ts:91

Return service representation

Returns​

string

the result

Inherited from​

CloudBinary.toString


uploadSuccess()​

uploadSuccess(object, property, fileInfo): Promise<void>

Defined in: core/lib/services/binary.service.d.ts:797

Ensure events are sent correctly after an upload and update the BinaryFileInfo in targetted object

Parameters​

object​

CoreModelWithBinary

the target object

property​

string

the property name

fileInfo​

BinaryFileInfo<{ }> | { toBinaryFileInfo: () => BinaryFileInfo; }

the file information

Returns​

Promise<void>

Inherited from​

CloudBinary.uploadSuccess


verifyMapAndStore()​

protected verifyMapAndStore(ctx): IStore

Defined in: core/lib/services/binary.service.d.ts:832

Based on the request parameter verify it match a known mapping

Parameters​

ctx​

IOperationContext

the operation context

Returns​

IStore

the result

Inherited from​

CloudBinary.verifyMapAndStore


streamToBuffer()​

static streamToBuffer(stream): Promise<Buffer<ArrayBufferLike>>

Defined in: core/lib/services/binary.service.d.ts:782

Read a stream to a buffer

Parameters​

stream​

Readable

the stream

Returns​

Promise<Buffer<ArrayBufferLike>>

the result

Inherited from​

CloudBinary.streamToBuffer