normalize attr fields

This commit is contained in:
Space Admiral 2022-12-07 08:24:07 -08:00
parent 9995cb9dcf
commit 6e395d7551
8 changed files with 119 additions and 400 deletions

View File

@ -1,190 +0,0 @@
# Alpha Preview Guide
Hello everyone and welcome to the SpaceTraders v2.0.0-alpha preview! We are excited to share progress with our supporters and hope you enjoy the new changes to the game.
We've re-thought some elements of the API using lessons learned from the v1 release. We hope you will enjoy some of the fleshed out ship mechanics, larger universe to explore, and various new ideas that are still in the works.
Our goal continues to be to create a fun and beginner friendly API that developers can reliably build on top of. We appreciate all of the positive comments and feedback, and look forward to a second year of building SpaceTraders!
## Overview
The alpha release will be a period of about a month where we fix any critical bugs and make any significant changes to API endpoints. The alpha phase will be shared mostly with our supporters and some close members of the community, so please don't advertise the release too broadly. Having said that, the alpha won't be a secret, so there is no harm if you want to share it directly with friends.
Following the alpha will be a public beta release, at which point it should be relatively safe to build an SDK on top of the API. We'll continue to add new features, but we will be hesitant to make any significant breaking changes to existing endpoints. We expect the beta to be a few weeks as we confirm the API is scaling well and performance issues are addressed.
Then we will finally update all of the documentation and website to point to the new 2.0 release.
### Alpha Goals
Our goals for the early alpha are to gather feedback so we can guarantee API stability for those that want to start building SDKs. Once we go into a beta release, we will be much less likely to change any specific endpoint, and after a full release we will strive to only make backwards-compatible changes.
### Feedback
We're genuinely happy to just have people play the game and try the API. Sharing your feedback or progress will be super motivating for us as we continue to work in our free time.
If you want to help in a specific way, we're looking for the following feedback from the alpha release:
- Find and report bugs or exploits in the game
- Look for typos or errors in the game data, symbols, etc.
- Let us know if performance is an issue for any of the endpoints
- Tell us which endpoints are painful to use or game mechanics that are tedious / uninteresting / not fun
- Anything you think will be difficult for us to add later without breaking how the API works
Again the goal is to catch significant changes that need to be made before the beta release. We appreciate any time you can dedicate to test out the new API endpoints.
### New Terminology
The 2.0 version of the API has been significantly reworked and introduces some new terminology. Before reviewing the new endpoints in the next section, it's worth reading through some of the new terms and what they mean.
- **Account** - you can register an account (not required) with your email address and discord handle and it will persist across resets. We will eventually add registration to the website, but for now you can do it via API calls. You will also be able to register your patreon contribution for special in-game recognition.
- **Agent** - when you start a new game, you register as an agent and choose a symbol (4-8 characters) as your call sign. All of your ships, credits, etc. exist under your agent entity, and you can only have one agent at a time under your account. You will be able to start a new game by retiring your agent and creating a new one.
- **Sector** - a slice of the universe filled with systems of different types such as star systems, black holes, or nebulae.
- **System** - a collection of waypoints orbiting around a central feature such as a star. Systems contain an array of waypoints on an x, y plane.
- **Waypoint** - a location within a system that you can travel to and interact with. Some common types of waypoints include planets, asteroid fields and jump gates.
- **Ship** - your ships can navigate between waypoints and jump across systems. A ship consists of a frame, reactor, engine, modules and mounts.
- **Ship Frame** - the structure of a ship which determines the number of modules and mounts that can be installed.
- **Ship Reactor** - the power module of the ship and limits the types of power-intensive modules and mounts that can be installed.
- **Ship Engine** - the engine of your ship and determines how fast your ship travels when navigating at slower-than-light speeds.
- **Ship Module** - an internal module that can be added or removed from your ship. Common modules include cargo bays, passenger cabins, and jump drives.
- **Ship Mount** - an external mount that can be added or removed from your ship. Common mounts include mining lasers and sensor arrays.
- **Ship Fuel** - a resource that is consumed by your ship when navigating. You can refuel your ship, and one unit of the FUEL trade good adds 100 units to your fuel to your ship's tank.
- **Ship Crew** - the staff that run your ship and keep it operating at peek performance. Crew can be recruited throughout the universe and will eventually be subject to changes in morale, which will impact how your ship performs. Ships which are understaffed will perform poorly such as longer cooldowns, slower navigation, and more damage to the ship while navigating.
- **Drone** - drone ships are the simplest type of ship to automate. They don't require fuel or crew, but are slower, wear down quickly, and are incapable of jumping between systems without access to a jump gate.
- **Navigate** - slower-than-light travel between waypoints. A ship will depart from a waypoint and arrive at a destination after a duration has passed.
- **Orbit** - when your ship arrives at a waypoint, it will be in orbit. Your ship must be in orbit to execute certain actions such as a scan or extraction. You can transition your ship from docked to orbit.
- **Dock** - you can dock your ship at a waypoint after navigating to it. You will be able to execute market trades, and other planet-side actions once you've docked at a waypoint.
- **Jump** - faster-than-light travel between systems. Jumping requires a jump drive or access to a jump gate. Jumps are instantaneous but subject to a cooldown between jumps.
- **Extraction** - mines ore at an asteroid field or siphons gases at various waypoint types and deposits cargo into your ship. Surveying can be used to target specific yield types from a waypoint.
- **Survey** - analyze a waypoint for specific yields such as ore or hydrocarbons. The resulting surveys are time-sensitive and will eventually expire as they move out of reach of your ship.
- **Scan** - analyze a waypoint, route or system for more details. We currently support scanning approaching or departing ships at a waypoint, and will later support more modes of scanning.
- **Chart** - most systems and waypoints are unexplored and will need to be charted by an agent before others will be able to query that location.
- **Cooldown** - actions such as jumping, scanning and extracting will put your ship on a cooldown for that action. You should wait until the number of seconds have passed on the cooldown before attempting the action again.
- **Contract** - contracts are generated through factions, and might request your agent to procure goods of a certain type, or transport goods to a location by a certain time, in return for payment.
- **Delivery** - transfers goods from your ship's cargo bay into a contract.
- **Jettison** - ejects cargo from your ship's hold
- **Trade** - all goods in the universe have a unique trade symbol (in all caps), such as `IRON_ORE`, `NANOBOTS` or `REACTOR_FISSION_I`.
- **Market** - most populated waypoints have a market where you can buy and sell goods. Each market will have a list of imports, exports and commodities that you can trade in. Markets evolve with player activity - prices will rise and fall with trades, and new imports or exports will be added as the market grows.
- **Tariff** - a flat tax added to each unit of a good traded at a market
- **Shipyards** - where agents can purchase ships, perform maintenance, or install new modules and mounts.
### New API Endpoints
Here is a list of the new endpoints for the terms above. For this alpha-preview, some of the parameters for an endpoint are not fully implemented, but we've included them here to give an indication of what will be supported.
Each endpoint also has an example response you can retrieve by sending `stub=true` as a query parameter or in your POST body. You can also view a stubbed response for an error code by sending `errorCode={code}` with the stub parameter.
All routes that are prefixed with `/my` will require an agent access token to be passed as an `Authorization: Bearer {token}` header in the request.
When registering your account, you will be given a different type of token called an Account Token, which allows you to create a new Agent or update your account details such as email address, discord handle or patreon code.
All routes targeting a specific ship, such as `/my/ships/COBRA-00AF/survey` will put a lock on your ship until the request is resolved. This means you can only take a single action at a time for your ship. Sending two simultaneous actions for a single ship will throw a 409 conflict response code.
All routes with the prefix `/systems` will return limited data until an agent submits the chart for that system or you have a ship present in the system.
All actions are typically sent as a POST request and return a 201 status code. All query endpoints are sent as a GET request and will return a 200. Errors are detailed in the response body of a failed request, with a message and unique error code.
Static game data can be queried and should be cached using the `/game/data` endpoint. Most objects returned in the response of a request will include only the symbols for static data, which you will want to map to the objects from the game data endpoint.
```bash
# view agent details
/my/agent
# view account details
/my/account
# view all ships
/my/ships
# view ship details
/my/ships/EMBER-01
# jump to a target system
/my/ships/EMBER-01/jump destination=X1-OE
# navigate between waypoints (modes coming soon)
/my/ships/EMBER-01/navigate mode=CRUISE destination=OE-PM00A
# dock at a waypoint if permitted
/my/ships/EMBER-01/dock mode=STEALTH
# put your ship into orbit around a waypoint
/my/ships/EMBER-01/orbit mode=BLOCKADE,SPY,PATROL
# acquire specific yield signatures in an asteroid field for extraction
/my/ships/EMBER-01/survey
# extract raw materials from a waypoint such as an asteroid field or gas cloud
# send the full survey object as the payload to target a specific signature
/my/ships/EMBER-01/extract survey='{signature: "...", deposits: "...", expiration: "..."}'
# purchase cargo and load it into your ship
/my/ships/EMBER-01/purchase tradeSymbol=HEAVY_MACHINERY units=99999
# sell cargo and unload it from your ship
/my/ships/EMBER-01/sell tradeSymbol=HEAVY_MACHINERY units=99999
# jettison cargo from your ship
/my/ships/EMBER-01/jettison tradeSymbol=HEAVY_MACHINERY units=99999
# view all systems
/systems
# view system details
/systems/X1-OE
# view waypoint details
/systems/X1-OE/waypoints/X1-OE-001A
# view all shipyards in a system
/systems/X1-OE/shipyards
# view all ships for sale at a shipyard
/systems/X1-OE/shipyards/X1-OE-001A/ships
# view all markets in a system
/systems/X1-OE/markets
# view all trades at a given market
/systems/X1-OE/markets/X1-OE-001A
```
## Quick Start
If you are ready to dive in, just hit the endpoint to register as a new agent. Don't worry too much about account creation right now - temporary accounts will be setup when creating a new agent. We will likely still be doing hard resets during the alpha.
```json http
{
"method": "POST",
"url": "https://v2-0-0.alpha.spacetraders.io/agents",
"headers": {
"Content-Type": "application/json"
},
"body": {
"symbol": "YOUR_SYMBOL_HERE",
"faction": "COMMERCE_REPUBLIC"
}
}
```
When starting a new game, you'll have a command ship to fly around and a contract with the Commerce Republic that you can accept for some credits. Try completing the contract, or just fly around and begin trading and exploring. You can also purchase some low-upkeep drones to begin automating trade routes.
## Roadmap
We're still hard at work completing items we have envisioned for the alpha release. We're working on full API documentation in Spotlight Studio, seeding new types of ships and balancing stats, and so much more.
Here is a list of what we are working on behind the scenes:
- Full API documentation
- Seeding shipyards across the sector
- Command Points that are expended to control your ships
- A ship logs endpoint that keeps track of all your ship's actions and events that occur
- Markets evolving and systems growing / collapsing with agent activity
- Seeding unique factions across the universe and new contracts
- Ability to scavenge, salvage and run planet-side expeditions to discover hidden ruins and valuable relics
- Bi-weekly seasons with leaderboards for various achievements
- New documentation website with guides and explanation of game mechanics
- Tweaking API throttling
- Faction licenses to patrol and trade
- Ability to interdict ships as a patrol or pirate
- Shuttle populations around to grow new systems
- Constructing goods with the micro-fabricator / micro-refinery modules

View File

@ -1,73 +0,0 @@
# Markets
This document is an overview of how markets will work in the game. Not all of these details are currently implemented, but we wanted to share some of what SpaceTraders will offer when the game is released.
Markets and trade are core concepts in the game and the primary credit-earning mechanism in SpaceTraders. Markets are dynamic and evolve over time as they are influenced by player activity.
- Prices will fluctuate with trade and the natural production / consumption of goods.
- Trading drives the growth of a system, but a sudden drop in trade could also cause the system to fall into turmoil, instability and piracy.
- Agents can earn credits from markets through arbitrage - connect a trade route between the export of one market to the import of another and collect the difference in trade price.
- Markets evolve every day and agents who capitalize on these developing opportunities will be rewarded.
- Early markets can be dominated by a single player, but several players will have to work together to grow and maintain more mature markets.
- Agents can gain advanced notice of market events and shifts by leveraging their faction reputation or by spying on local comms.
## Mechanics
Markets have hidden mechanics that influence the price of goods, the trade volume of those goods, and market events that can occur with agent activity. Here is a quick overview of the basic mechanics of how markets function:
- Markets are always in flux - prices are changing with the supply or consumption of goods. Sudden events can also disrupt or enhance trade.
- Every trade good has a production rate (exports) and consumption rate (imports) which naturally drive price changes over time.
- As agents purchase more and more of a exported trade good, the production of that good will increase until it catches up with demand
- As agents supply more and more of an imported trade good, the consumption of that good will increase and may trigger new exports or settlement growth
- A sudden drop in the trade of a good can quickly throw the market into instability - prices will hit extremes and eventually the settlement may fall into turmoil.
- If you are investing long-term in a market or faction, you will want to trade consistently to keep prices stable.
## Market Stages
All markets can be categorized into three stages: early, developing, and mature. There will be higher profits in mature markets, but they will be difficult to find and maintain. The best way to trade in a mature market is to trade in an early or developing market until it evolves.
### Early Markets
Early stage markets trade in low volume and high price volatility but with better margins.
- Early settlements often demand commodities such as food, clothing and medicine.
- Supplying these settlements with their needs will provide high reputation rewards for early supporters, which can trigger the market to grow.
- Early markets evolve into developing markets after a period of sustained trade and stability.
### Developing Markets
Middle stage markets rely on a steady supply of imports and regular transport of exports to continue to grow. Trade failures at this stage can quickly send the system into turmoil and piracy.
- Settlements will eventually develop a primary export and may develop related imports
- Developing markets will grow in trade volume and develop price stability with player activity
- These markets are at the highest risk of collapse - a sudden drop in trade volume can throw the whole settlement into turmoil
- Some markets will expand horizontally into related exports or develop brand new exports
### Mature Markets
Late stage markets export much rarer and higher-priced trade goods. These markets are often only accessible to agents with high reputation.
- Export high-tech and luxury goods that are in high demand at most other settlements
- Mature market goods are primarily sold through negotiation
- Ships transporting high value goods will be likely targets for pirates and hostile factions
### Black Markets
Some goods will be prohibited by factions but can still be traded through negotiation. Although these trades can be lucrative, they can also destabilize the settlement and throw it into turmoil or piracy. Agents may want to prevent others from trading in black market goods by offering to patrol waypoints on behalf of the local faction.
- Trading in black market goods can cause a significant drop in reputation if you're caught.
- Ship modules such as hidden cargo holds, higher-tier envoys, and stealth tech can improve attempts at black market trade.
- Ships can be scanned for black market goods which will be seized by patrols.
- Agents can help factions patrol for black market cargo to prevent damage to the overall market by other agents or competing factions.
## Exchanges
Exchanges are markets with many types of goods listed and the prices remain fairly stable over time. These markets don't have a natural production or consumption rate, but slowly trend toward a medium price over time. Exchanges are a good way to exchange goods between agents or other ships.
## Negotiation
Not all opportunities are listed in the markets. Every settlement has the potential to buy or sell any trade good in the game. You can send an envoy to a settlement and attempt to negotiate the purchase or selling of a good - however the trade is not guaranteed. This can often be a more lucrative way of unloading cargo rather than jettisoning it into space.
- Regular trade via these negotiations can sometimes trigger the development of a new import or export in the market.
- High-tech and luxury goods are primarily sold through negotiation - these can net agents a great sum of credits.
- Reputation with the local faction can have a significant impact on the types, prices and quantities of goods offered through negotiation.

108
docs/quickstart.md Normal file
View File

@ -0,0 +1,108 @@
# What you do
- you will register as a new agent and receive an API token
- you will gain a command ship and 100,000 credits in a starter system
- you will use the API to explore the universe and make money
- you will buy a mining ship, navigate to a neary asteroid field, and mine for resources
- you will find a nearby market to sell your resources
- you will explore new markets to find new goods to trade, better ships to buy, and upgrades for your ships
- you will scavenge derelict ships for parts and sell them for a profit
- you will send envoys to other factions to gain access to their markets
- you will send envoys to make trade deals not listed in the public markets
- you will search for lost artifacts and sell them for a profit or use them to upgrade your ships
- you will recruit crew members to help you run your ships
- you will chart new systems, discovering new factions and markets along the way
# Game Restrictions
- the API has a limit of 60 requests per minute
- you can only have one active agent per account
- account email must be verified to purchase ships
- you can only have 10 ships in your fleet at a time (including your command ship)
- each ship is limited to a single action at a time (don't send two requests for the same ship concurrently)
- your fleet must stay in range of your command ship (about 100 lightyears)
- you must maintain the condition of your ships or they will slow down considerably
- you must maintain crew morale or your ship will suffer from reduced performance and your crew may abandon your ship
- crew wages are due hourly and paid whenever your ship docks at a civilized waypoint
- you must maintain your ship's fuel or it may end up stranded without an ability to navigate
- ships can take damage when docking planet-side, orbiting dangerous waypoints, or when extracting resources from asteroids
- several factors will determine your ship's travel time including ship condition, engine stats, speed setting, crew morale, etc.
- more fuel is expended when traveling at higher speeds or when trying to leave a planet with atmospheric drag or high gravity
- uncharted systems will not have all details available until it has been charted by an agent
- most market data will only be available if you have a ship present at the given waypoint
- jump gates are typically restricted to other jump gates within the same faction
- most actions will result in a reactor cooldown, which will prevent your ship from taking other actions until the cooldown has expired
# Factions and Reputation
- faction contracts often provide better prices than public markets but may be more difficult to fulfill
- contracts grant some amount of payment upon accepting a contract, and the rest upon completing it
- you can send an envoy to generate new contracts with a faction
- failing to accept a generated contract will result in a minor loss of faction reputation
- failing to complete an accepted contract will result in a loss of faction reputation
- fulfilling a contract will result in a gain of faction reputation
- trading with a faction will marginally increase your reputation with that faction
- some markets are restricted until you have reached a certain threshold of reputation with a faction
# Markets
- a market lists imports and exports, recent transactions, and the current price of goods
- exports are typically listed at a lower purchasing price and imports listed at a higher selling price
- all other goods are considered "exchange" and are mostly driven by agent activity
- prices are driven by supply and demand, and typically change over time
- the listed imports and exports of a market also evolve over time, and some goods may become unavailable
- shipyard listings are also dynamically priced based on player activity
- you can send envoys to attempt to purchase or sell goods not listed in the public market
- off-market goods are typically traded in very low volumes and prices are typically volatile
# Universe
- the universe is procedurally generated with a few starter systems and factions
- the universe consists of systems, and systems are filled with waypoints, such as planets or asteroid fields
- each waypoint has an x, y coordinate, type and traits, and any orbitals that may be present
- a waypoint and it's orbitals share the same x, y coordinate
# Navigation
- jump gates are a type of waypoint that connects systems together, allowing your ship to jump to a new system instantly
- navigating between waypoints involves choosing a destination and waiting for your ship to arrive
- ships are either docked or in-orbit at a waypoint, which may limit what actions you can take
# Generate an SDK from the API definition
You can generate an SDK from the API definition using [OpenAPI Generator](https://openapi-generator.tech/).
```bash
openapi-generator generate \
-i reference/SpaceTraders.json \
-o spacetraders-sdk \
-g typescript-axios \
--skip-validate-spec \
--additional-properties=supportsES6=true
```
# Install HTTpie
You can install [HTTpie](https://httpie.io/) using [Homebrew](https://brew.sh/).
```bash
brew install httpie
```
# Register a temporary Account
You can register a temporary account using the [Register](https://api-server-2-0-0-rc-2-vxxwq5xqdq-uc.a.run.app/register) endpoint.
```json http
{
"method": "POST",
"url": "https://api-server-2-0-0-rc-2-vxxwq5xqdq-uc.a.run.app/register",
"headers": {
"Content-Type": "application/json"
},
"body": {
"symbol": "YOUR_AGENT_SYMBOL",
"faction": "ASA"
}
}
```

View File

@ -2,15 +2,15 @@
"type": "object",
"description": "The ship's crew service and maintain the ship's systems and equipment.",
"properties": {
"count": {
"current": {
"type": "integer",
"description": "The total number of crew members on the ship."
"description": "The current number of crew members on the ship."
},
"min": {
"required": {
"type": "integer",
"description": "The minimum number of crew members required to maintain the ship."
},
"max": {
"capacity": {
"type": "integer",
"description": "The maximum number of crew members the ship can support."
},
@ -31,14 +31,14 @@
},
"wages": {
"type": "integer",
"description": "The amount of credits per crew member paid per minute of time travelled between waypoints. Wages are paid when a ship departs from a waypoint.",
"description": "The amount of credits per crew member paid per hour. Wages are paid when a ship docks at a civilized waypoint.",
"minimum": 0
}
},
"required": [
"count",
"min",
"max",
"current",
"required",
"capacity",
"rotation",
"morale",
"wages"

View File

@ -2,9 +2,9 @@
"type": "object",
"description": "Details of the ship's fuel tanks including how much fuel was consumed during the last transit or action.",
"properties": {
"amount": {
"current": {
"type": "integer",
"description": "The amount of fuel in the ship's tanks.",
"description": "The current amount of fuel in the ship's tanks.",
"minimum": 0
},
"capacity": {
@ -33,7 +33,7 @@
}
},
"required": [
"amount",
"current",
"capacity"
]
}

View File

@ -71,20 +71,6 @@
"NOVEL_LIFEFORMS",
"BOTANICAL_SPECIMENS",
"CULTURAL_ARTIFACTS",
"FRAME_PROBE",
"FRAME_DRONE",
"FRAME_INTERCEPTOR",
"FRAME_RACER",
"FRAME_FIGHTER",
"FRAME_FRIGATE",
"FRAME_SHUTTLE",
"FRAME_EXPLORER",
"FRAME_LIGHT_FREIGHTER",
"FRAME_HEAVY_FREIGHTER",
"FRAME_TRANSPORT",
"FRAME_DESTROYER",
"FRAME_CRUISER",
"FRAME_CARRIER",
"REACTOR_SOLAR_I",
"REACTOR_FUSION_I",
"REACTOR_FISSION_I",

View File

@ -1,44 +0,0 @@
{
"get": {
"summary": "My Agent Details",
"tags": [
"agents"
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "../../models/Agent.yaml"
}
}
},
"examples": {
"Agent": {
"value": {
"data": {
"accountId": "cl0hok34m0003ks0jjql5q8f2",
"symbol": "EMBER",
"headquarters": "X1-OE-PM",
"credits": 0
}
}
}
}
}
}
}
},
"operationId": "get-my-agent",
"security": [
{
"AgentToken": []
}
],
"description": "Fetch your agent's details."
}
}

View File

@ -1,68 +0,0 @@
{
"post": {
"operationId": "register-agent",
"summary": "Register New Agent",
"description": "Creates a new agent and ties it to a temporary Account. Use `COMMERCE_REPUBLIC` as your starting faction if you don't know any other factions to choose from.\n\nThe agent symbol is a 4-8 character string that will represent your agent. This symbol will prefix the symbol of every ship you own. Agent symbols will be cast to all uppercase characters.\n\nA new agent will be granted an authorization token, a contract with their starting faction, a command ship with a jump drive, and one hundred thousand credits.\n\n> #### Keep your token safe and secure\n>\n> Save your token during the alpha phase. There is no way to regenerate this token without starting a new agent. In the future you will be able to generate and manage your tokens from the SpaceTraders website.\n\nYou can accept your contract using the `/my/contracts/{contractId}/accept` endpoint. You will want to navigate your command ship to a nearby asteroid field waypoint, and execute the `/my/ships/{shipSymbol}/accept` endpoint to mine various types of ores and minerals.\n\nReturn to the contract destination and execute the `/my/ships/{shipSymbol}/deliver` endpoint to deposit goods into the contract.\n\nWhen your contract is fulfilled, you can call `/my/contracts/{contractId}/fulfill` to retrieve payment.",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "How other agents will see your ships and information.",
"minLength": 4,
"maxLength": 8,
"example": "BADGER"
},
"faction": {
"type": "string",
"default": "COMMERCE_REPUBLIC",
"description": "The faction you choose determines your headquarters."
}
}
}
}
},
"description": ""
},
"responses": {
"201": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"token": {
"type": "string"
},
"agent": {
"$ref": "../../models/Agent.yaml"
},
"faction": {
"$ref": "../../models/Faction.yaml"
},
"contract": {
"$ref": "../../models/Contract.yaml"
},
"ship": {
"$ref": "../../models/Ship.json"
}
}
}
}
}
}
}
}
},
"tags": [
"agents"
]
}
}