five-on-it / apps/api/src/s3 / S3Artifacts
Interface: S3Artifacts
Defined in: apps/api/src/s3.ts:36
Artifacts in an S3 bucket, and how to make sure the bucket is there.
Extends
Methods
close()
close():
void
Defined in: apps/api/src/s3.ts:40
Closes the client's connections.
Returns
void
ensureBucket()
ensureBucket():
Promise<void>
Defined in: apps/api/src/s3.ts:38
Creates the bucket when it is missing (the API calls it at start).
Returns
Promise<void>
get()
get(
hash):Promise<string|undefined>
Defined in: apps/api/src/artifacts.ts:25
An artifact's JSON by its hash, as stored.
Parameters
hash
string
Returns
Promise<string | undefined>
Inherited from
getPreview()
getPreview(
hash):Promise<Uint8Array<ArrayBufferLike> |undefined>
Defined in: apps/api/src/artifacts.ts:29
A preview's bytes by their hash.
Parameters
hash
string
Returns
Promise<Uint8Array<ArrayBufferLike> | undefined>
Inherited from
put()
put(
artifact):Promise<string>
Defined in: apps/api/src/artifacts.ts:23
Stores an artifact; returns its hash.
Parameters
artifact
game
{ blurb?: string; id: string; level: string; missions: object[]; paths: Record<string, { gates: string[]; laps: number; } | { loop: boolean; patrol: string[]; }>; places: Record<string, { name?: string; role?: "players" | "police" | "traffic" | "guards" | "hospital"; tags?: string[]; x: number; y?: number; yaw?: number; z: number; }>; rules: { clock?: { pace: number; start: string; }; dropMissionItems: boolean; fallDamage: boolean; garages?: { respray?: number; store?: number; }; ghostSeconds: number; loadout?: object[]; maxPlayers: number; partyRewards: "split" | "shared"; phone: boolean; playerDamage: "on" | "off" | "rivals"; police: boolean; prices?: Record<string, number>; respawn: "hospital" | "mission"; safeZones: string[]; traffic: number; vehicleFire: boolean; weather?: { changes: boolean; climate?: "none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast"; intensity: number; start?: "clear" | "overcast" | "rain" | "storm" | "fog" | "snow"; }; }; schemaVersion?: number; title: string; zones: Record<string, { kind?: "pickup" | "spawn" | "restricted" | "race_gate" | "safe" | "checkpoint" | "dropoff"; place: string; radius: number; raises?: "alert" | "heat"; role?: "players" | "police" | "traffic" | "guards" | "hospital"; }>; } = GameDoc
game.blurb?
string = ...
game.id
string = ...
game.level
string = ...
game.missions
object[] = ...
game.paths
Record<string, { gates: string[]; laps: number; } | { loop: boolean; patrol: string[]; }> = ...
game.places
Record<string, { name?: string; role?: "players" | "police" | "traffic" | "guards" | "hospital"; tags?: string[]; x: number; y?: number; yaw?: number; z: number; }> = ...
game.rules
{ clock?: { pace: number; start: string; }; dropMissionItems: boolean; fallDamage: boolean; garages?: { respray?: number; store?: number; }; ghostSeconds: number; loadout?: object[]; maxPlayers: number; partyRewards: "split" | "shared"; phone: boolean; playerDamage: "on" | "off" | "rivals"; police: boolean; prices?: Record<string, number>; respawn: "hospital" | "mission"; safeZones: string[]; traffic: number; vehicleFire: boolean; weather?: { changes: boolean; climate?: "none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast"; intensity: number; start?: "clear" | "overcast" | "rain" | "storm" | "fog" | "snow"; }; } = ...
game.rules.clock?
{ pace: number; start: string; } = ...
The room clock (GAME_DESIGN §5.7): the time the room starts at and its pace, game minutes per real second (1 is an hour a minute, a day in 24 minutes; 0 stops it; up to 60 for a day in 24 seconds).
game.rules.clock.pace
number = ...
game.rules.clock.start
string = ...
game.rules.dropMissionItems
boolean = ...
Whether a character that dies drops the items a mission defined that it carried, where it fell (GAME_DESIGN §7.4).
game.rules.fallDamage
boolean = ...
Whether a long fall hurts (from about 4 m) and a very long one kills (from about 12 m).
game.rules.garages?
{ respray?: number; store?: number; } = ...
What every garage of the level charges ($), over the level's own prices (GAME_DESIGN §5.5).
game.rules.garages.respray?
number = ...
game.rules.garages.store?
number = ...
game.rules.ghostSeconds
number = ...
Seconds a player is a ghost after coming back (passing through cars and people, taking no harm).
game.rules.loadout?
object[] = ...
What every player starts with (GAME_DESIGN §7.4): stacks of items by id (weapons and their ammunition are items), each in the slot of the strip it names (1 to 16; the number keys select the first nine, and the slot a key selects is the weapon held) or the first free one. Absent: free roam's arsenal, the fists' slot 1 left empty, the pistol, shotgun, rifle, rocket launcher, grenades and tranquilizer on 2 to 7 and the guns' ammunition from 9 on; an empty list: nothing but the phone.
game.rules.maxPlayers
number = ...
How many players a room of this game takes.
game.rules.partyRewards
"split" | "shared" = ...
How a party's mission reward is paid: each member the whole of it (shared), or the reward divided among them (split).
game.rules.phone
boolean = ...
Whether every character starts with a phone (GAME_DESIGN §7.5); a mission may give one.
game.rules.playerDamage
"on" | "off" | "rivals" = ...
Whether players hurt each other: never, only rivals (players outside one's party), or always.
game.rules.police
boolean = ...
Whether the room has police: crimes raise a Wanted level and police cars come (GAME_DESIGN §12).
game.rules.prices?
Record<string, number> = ...
What the shops charge ($), by item id, over the items' own prices (GAME_DESIGN §14).
game.rules.respawn
"hospital" | "mission" = ...
Where a player who went down comes back: the nearest spawn point (hospital), or where their mission started (mission).
game.rules.safeZones
string[] = ...
The game's zones where players cannot hurt each other and no car is carjacked.
game.rules.traffic
number = ...
Ambient cars driving the level's roads around the players: none unless the game asks (at most 64).
game.rules.vehicleFire
boolean = ...
Whether a car brought low catches fire, burns and blows up, its blast lighting the cars beside it.
game.rules.weather?
{ changes: boolean; climate?: "none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast"; intensity: number; start?: "clear" | "overcast" | "rain" | "storm" | "fog" | "snow"; } = ...
The room's weather (GAME_DESIGN §5.7): its climate (the level's by default: a region's biome, temperate for a town; none is always clear), the weather it opens with (start, at an intensity), and whether it changes on its own from there (a front every half an hour, by the climate's odds) or holds. Missions change it (setWeather).
game.rules.weather.changes
boolean = ...
game.rules.weather.climate?
"none" | "temperate" | "meadow" | "forest" | "alpine" | "farmland" | "steppe" | "desert" | "autumn" | "coast" = ...
game.rules.weather.intensity
number = ...
game.rules.weather.start?
"clear" | "overcast" | "rain" | "storm" | "fog" | "snow" = ...
game.schemaVersion?
number = ...
The document's format (migrate.ts): 1 when absent; a newer one is migrated away before this reads it.
game.title
string = ...
game.zones
Record<string, { kind?: "pickup" | "spawn" | "restricted" | "race_gate" | "safe" | "checkpoint" | "dropoff"; place: string; radius: number; raises?: "alert" | "heat"; role?: "players" | "police" | "traffic" | "guards" | "hospital"; }> = ...
level
{ data: { cameras?: object[]; containers?: object[]; districts?: object[]; doors?: object[]; dummies: object[]; escalators?: object[]; garages?: object[]; groundHalfSize: number; ladders?: object[]; lifts?: object[]; meshes: Record<string, { groups: object[]; indices: number[]; vertices: number[]; }>; nailStrips: object[]; npcs?: object[]; placements: object[]; roads: object[]; schemaVersion?: number; shops?: object[]; sky?: { climate: string; clock?: { pace: number; start: string; }; }; spawners?: object[]; spawns: object[]; water?: object[]; }; name: string; } = ...
level.data
{ cameras?: object[]; containers?: object[]; districts?: object[]; doors?: object[]; dummies: object[]; escalators?: object[]; garages?: object[]; groundHalfSize: number; ladders?: object[]; lifts?: object[]; meshes: Record<string, { groups: object[]; indices: number[]; vertices: number[]; }>; nailStrips: object[]; npcs?: object[]; placements: object[]; roads: object[]; schemaVersion?: number; shops?: object[]; sky?: { climate: string; clock?: { pace: number; start: string; }; }; spawners?: object[]; spawns: object[]; water?: object[]; } = LevelDataSchema
level.data.cameras?
object[] = ...
level.data.containers?
object[] = ...
level.data.districts?
object[] = ...
level.data.doors?
object[] = ...
level.data.dummies
object[] = ...
level.data.escalators?
object[] = ...
level.data.garages?
object[] = ...
level.data.groundHalfSize
number = positive
level.data.ladders?
object[] = ...
level.data.lifts?
object[] = ...
level.data.meshes
Record<string, { groups: object[]; indices: number[]; vertices: number[]; }> = ...
level.data.nailStrips
object[] = ...
level.data.npcs?
object[] = ...
level.data.placements
object[] = ...
level.data.roads
object[] = ...
level.data.schemaVersion?
number = ...
level.data.shops?
object[] = ...
level.data.sky?
{ climate: string; clock?: { pace: number; start: string; }; } = ...
level.data.sky.climate
string = ...
level.data.sky.clock?
{ pace: number; start: string; } = ...
level.data.sky.clock.pace
number = ...
level.data.sky.clock.start
string = ...
level.data.spawners?
object[] = ...
level.data.spawns
object[] = ...
level.data.water?
object[] = ...
level.name
string = ...
manifest?
{ game: number; generator?: { blender?: string; release: string; scripts?: string; }; level: number; protocol: number; release: string; } = ...
manifest.game
number = ...
manifest.generator?
{ blender?: string; release: string; scripts?: string; } = ...
manifest.generator.blender?
string = ...
manifest.generator.release
string = ...
manifest.generator.scripts?
string = ...
manifest.level
number = ...
manifest.protocol
number = ...
manifest.release
string = ...
Returns
Promise<string>
Inherited from
putPreview()
putPreview(
png):Promise<string>
Defined in: apps/api/src/artifacts.ts:27
Stores a preview (a PNG); returns the hash of its bytes.
Parameters
png
Uint8Array
Returns
Promise<string>