feat(#5): use auth

This commit is contained in:
Sirttas
2026-06-28 14:18:09 +02:00
parent e7249df23f
commit 61fbc8e16b
11 changed files with 1263 additions and 26 deletions
+350 -3
View File
@@ -325,6 +325,25 @@ paths:
type: array
items:
$ref: "#/components/schemas/ReprocessingResultResponse"
/refresh:
post:
tags:
- auth
summary: Rotate the refresh session and mint a fresh access token
operationId: refresh
responses:
"200":
description: A fresh access token; the refresh cookie is rotated
content:
'*/*':
schema:
$ref: "#/components/schemas/RefreshResponse"
"401":
description: "Missing, expired, or reused refresh token"
content:
'*/*':
schema:
$ref: "#/components/schemas/RefreshResponse"
/market/types/parse:
post:
tags:
@@ -353,6 +372,15 @@ paths:
"400":
description: Returned when a line carries a quantity that is not a positive
whole number
/logout:
post:
tags:
- auth
summary: Revoke the refresh session and clear the refresh cookie
operationId: logout
responses:
"204":
description: The refresh session is revoked and the cookie cleared
/ledgers/main:
post:
tags:
@@ -412,6 +440,18 @@ paths:
"400":
description: "Invalid request (e.g. blank name, a member ledger missing\
\ or already contained)"
/characters/add:
post:
tags:
- auth
summary: Seed the current user in the session so the next SSO links the new
character to them
operationId: addCharacter
responses:
"204":
description: The link is seeded; follow with a full-page nav to /oauth2/authorization/esi
"401":
description: Missing or expired access token
/activity/fetch:
post:
tags:
@@ -462,6 +502,25 @@ paths:
text/plain:
schema:
type: string
/me:
get:
tags:
- auth
summary: Return the authenticated user and the characters they own
operationId: me
responses:
"200":
description: The authenticated user and their characters
content:
'*/*':
schema:
$ref: "#/components/schemas/MeResponse"
"401":
description: Missing or expired access token
content:
'*/*':
schema:
$ref: "#/components/schemas/MeResponse"
/market/{marketTypeId}/scan:
get:
tags:
@@ -923,18 +982,28 @@ components:
schemas:
UpdateRuleBookRequest:
type: object
description: Request to update an existing rule book; replaces its mutable fields.
properties:
name:
type: string
description: Rule book name.
example: Trading rules
usedForAcquisitions:
type: boolean
description: Whether this rule book is used to derive acquisitions.
example: true
ledgerRefs:
type: array
description: Symbolic ledger references the script writes to; each must
be bound to a ledger per character.
items:
type: string
example: sales
pattern: "[a-z][a-zA-Z0-9]*"
script:
type: string
description: The classification script source.
example: transfer.to('sales')
required:
- ledgerRefs
- name
@@ -942,21 +1011,34 @@ components:
- usedForAcquisitions
RuleBookResponse:
type: object
description: "A rule book: a named script that classifies transactions, together\
\ with the ledger references it expects."
properties:
ruleBookId:
type: string
format: uuid
description: Unique rule book identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
name:
type: string
description: Rule book name.
example: Trading rules
usedForAcquisitions:
type: boolean
description: Whether this rule book is used to derive acquisitions.
example: true
ledgerRefs:
type: array
description: Symbolic ledger references the script writes to; each must
be bound to a ledger per character.
items:
type: string
example: sales
pattern: "[a-z][a-zA-Z0-9]*"
script:
type: string
description: The classification script source.
example: transfer.to('sales')
required:
- ledgerRefs
- name
@@ -965,9 +1047,12 @@ components:
- usedForAcquisitions
UpdateMainLedgerRequest:
type: object
description: Request to update an existing main ledger.
properties:
name:
type: string
description: New name for the ledger.
example: Main wallet
required:
- name
MainLedgerResponse:
@@ -978,21 +1063,33 @@ components:
ledgerId:
type: string
format: uuid
description: Unique ledger identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
name:
type: string
description: Ledger name.
example: Main wallet
balance:
type: number
description: Current ISK balance of the ledger.
example: 1500000.0
description: "A main ledger: a standalone ledger with its own balance."
required:
- balance
- ledgerId
- name
UpdateCombinedLedgerRequest:
type: object
description: Request to update an existing combined ledger; replaces its name
and member set.
properties:
name:
type: string
description: New name for the combined ledger.
example: All wallets
memberLedgerIds:
type: array
description: Ids of the ledgers to aggregate.
items:
type: string
format: uuid
@@ -1007,15 +1104,24 @@ components:
ledgerId:
type: string
format: uuid
description: Unique ledger identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
name:
type: string
description: Ledger name.
example: All wallets
balance:
type: number
description: Aggregate ISK balance across all member ledgers.
example: 1500000.0
memberLedgerIds:
type: array
description: Ids of the ledgers aggregated by this combined ledger.
items:
type: string
format: uuid
description: "A combined ledger: an aggregate whose balance is the sum of its\
\ member ledgers."
required:
- balance
- ledgerId
@@ -1023,70 +1129,106 @@ components:
- name
SetCharacterRuleBookRequest:
type: object
description: "Request to assign a rule book to a character, binding each of\
\ its ledger references to a concrete ledger."
properties:
ruleBookId:
type: string
format: uuid
description: Id of the rule book to assign.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
bindings:
type: object
additionalProperties:
type: string
format: uuid
description: Bindings from each ledger reference name to the ledger id it
resolves to for this character.
example:
sales: 5c1e6f2a-1234-4562-b3fc-2c963f66afa6
required:
- bindings
- ruleBookId
CharacterResponse:
type: object
description: An EVE Online character.
properties:
characterId:
type: integer
format: int64
description: EVE character id.
example: 2112625428
name:
type: string
description: Character name.
example: CCP Falcon
required:
- characterId
- name
CharacterRuleBookResponse:
type: object
description: "A rule book assigned to a character, with the ledger bindings\
\ that resolve its references."
properties:
character:
$ref: "#/components/schemas/CharacterResponse"
description: The character the rule book is assigned to.
ruleBook:
$ref: "#/components/schemas/RuleBookSummaryResponse"
description: Summary of the assigned rule book.
bindings:
type: object
additionalProperties:
type: string
format: uuid
description: Bindings from each ledger reference name to the ledger id it
resolves to for this character.
example:
sales: 5c1e6f2a-1234-4562-b3fc-2c963f66afa6
required:
- bindings
- character
- ruleBook
RuleBookSummaryResponse:
type: object
description: "Lightweight reference to a rule book: its id and name only."
properties:
ruleBookId:
type: string
format: uuid
description: Unique rule book identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
name:
type: string
description: Rule book name.
example: Trading rules
required:
- name
- ruleBookId
CreateRuleBookRequest:
type: object
description: Request to create a new rule book.
properties:
name:
type: string
description: Rule book name.
example: Trading rules
usedForAcquisitions:
type: boolean
description: Whether this rule book is used to derive acquisitions.
example: true
ledgerRefs:
type: array
description: Symbolic ledger references the script writes to; each must
be bound to a ledger per character.
items:
type: string
example: sales
pattern: "[a-z][a-zA-Z0-9]*"
script:
type: string
description: The classification script source.
example: transfer.to('sales')
required:
- ledgerRefs
- name
@@ -1094,24 +1236,34 @@ components:
- usedForAcquisitions
MarketTypeStackRequest:
type: object
description: A quantity of a single market type to reprocess.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id to reprocess.
example: 1230
quantity:
type: integer
format: int64
description: Number of units to reprocess.
example: 1000
required:
- marketTypeId
- quantity
ReprocessItemsRequest:
type: object
description: Request to reprocess a set of item stacks on behalf of a character.
properties:
characterId:
type: integer
format: int64
description: EVE character id whose reprocessing skills and facility standings
are applied.
example: 2112625428
items:
type: array
description: Item stacks to reprocess.
items:
$ref: "#/components/schemas/MarketTypeStackRequest"
required:
@@ -1119,20 +1271,31 @@ components:
- items
MarketTypeStackAppraisalResponse:
type: object
description: A market type stack valued at current buy and sell prices.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
quantity:
type: integer
format: int64
description: Number of units in the stack.
example: 1000
buy:
type: number
description: "Total buy value of the stack, in ISK."
example: 5420.0
sell:
type: number
description: "Total sell value of the stack, in ISK."
example: 6100.0
orderCount:
type: integer
format: int64
description: Number of market orders considered for the valuation.
example: 128
required:
- buy
- marketTypeId
@@ -1141,77 +1304,142 @@ components:
- sell
ReprocessingResultResponse:
type: object
description: "Result of reprocessing an item stack: the input stack and the\
\ resulting material outputs, each valued at market prices."
properties:
input:
$ref: "#/components/schemas/MarketTypeStackAppraisalResponse"
description: The input stack that was reprocessed.
output:
type: array
description: Material stacks yielded by reprocessing the input.
items:
$ref: "#/components/schemas/MarketTypeStackAppraisalResponse"
required:
- input
- output
RefreshResponse:
type: object
description: A freshly minted access token.
properties:
accessToken:
type: string
description: Short-lived bearer access token (JWT) for the Authorization
header.
required:
- accessToken
MarketTypeStackResponse:
type: object
description: A quantity of a single market type.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
quantity:
type: integer
format: int64
description: Number of units in the stack.
example: 1000
required:
- marketTypeId
- quantity
CreateMainLedgerRequest:
type: object
description: Request to create a new main ledger.
properties:
name:
type: string
description: Name for the new ledger.
example: Main wallet
required:
- name
CreateCombinedLedgerRequest:
type: object
description: Request to create a new combined ledger aggregating the given member
ledgers.
properties:
name:
type: string
description: Name for the new combined ledger.
example: All wallets
memberLedgerIds:
type: array
description: Ids of the ledgers to aggregate.
items:
type: string
format: uuid
required:
- memberLedgerIds
- name
MeResponse:
type: object
description: The authenticated user and the characters they own.
properties:
userId:
type: string
format: uuid
description: Unique user identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
characters:
type: array
description: Characters owned by the user.
items:
$ref: "#/components/schemas/CharacterResponse"
required:
- characters
- userId
MarketScanResponse:
type: object
description: "Result of a market scan combining current prices, history quartiles\
\ and a computed profitability score for a market type."
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
buy:
type: number
description: "Current best buy price, in ISK."
example: 5.42
sell:
type: number
description: "Current best sell price, in ISK."
example: 6.1
q1:
type: number
description: "First quartile (25th percentile) historical price, in ISK."
example: 4.8
median:
type: number
description: "Median (50th percentile) historical price, in ISK."
example: 5.42
q3:
type: number
description: "Third quartile (75th percentile) historical price, in ISK."
example: 6.05
totalVolume:
type: integer
format: int64
description: Total traded volume over the scanned period.
example: 15000000
trend:
type: string
description: Overall price trend over the scanned period.
enum:
- UP
- DOWN
- FLAT
profit:
type: number
description: "Estimated profit per unit after fees and taxes, in ISK."
example: 0.45
score:
type: number
description: Computed profitability score used to rank scan results.
example: 0.82
required:
- buy
- marketTypeId
@@ -1225,25 +1453,40 @@ components:
- trend
MarketHistoryResponse:
type: object
description: A single day of market history for a market type.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
date:
type: string
format: date
description: Date the history entry covers.
example: 2026-06-22
average:
type: number
description: "Average price for the day, in ISK."
example: 5.42
highest:
type: number
description: "Highest price for the day, in ISK."
example: 6.1
lowest:
type: number
description: "Lowest price for the day, in ISK."
example: 4.8
orderCount:
type: integer
format: int64
description: Number of orders for the day.
example: 320
volume:
type: integer
format: int64
description: Traded volume for the day.
example: 12500000
required:
- average
- date
@@ -1254,21 +1497,33 @@ components:
- volume
HistoryQuartilesResponse:
type: object
description: Quartile statistics computed over a market type's price history.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
q1:
type: number
description: "First quartile (25th percentile) price, in ISK."
example: 4.8
median:
type: number
description: "Median (50th percentile) price, in ISK."
example: 5.42
q3:
type: number
description: "Third quartile (75th percentile) price, in ISK."
example: 6.05
totalVolume:
type: integer
format: int64
description: Total traded volume over the period.
example: 15000000
trend:
type: string
description: Overall price trend over the period.
enum:
- UP
- DOWN
@@ -1282,33 +1537,58 @@ components:
- trend
MarketTypeResponse:
type: object
description: An EVE Online market type (item) and its static attributes.
properties:
id:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
name:
type: string
description: Item name.
example: Tritanium
groupId:
type: integer
format: int64
description: Group id the item belongs to.
example: 18
marketGroupId:
type: integer
format: int64
description: Market group id the item is listed under.
example: 1857
description:
type: string
description: Item description.
example: The main building block in space structures.
published:
type: boolean
description: Whether the item is published and visible in game.
example: true
basePrice:
type: number
type:
- number
- "null"
description: "Base price of the item, in ISK, if defined."
example: 2.99
volume:
type: number
format: double
description: "Packaged volume of a single unit, in m³."
example: 0.01
portionSize:
type: integer
format: int32
description: Number of units produced or reprocessed per portion.
example: 1
iconId:
type: integer
type:
- integer
- "null"
format: int64
description: "Icon id for the item, if defined."
example: 1
required:
- basePrice
- description
@@ -1322,23 +1602,34 @@ components:
- volume
MarketPriceResponse:
type: object
description: Current best buy and sell prices for a market type.
properties:
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
buy:
type: number
description: "Best buy price, in ISK."
example: 5.42
sell:
type: number
description: "Best sell price, in ISK."
example: 6.1
orderCount:
type: integer
format: int64
description: Number of market orders considered.
example: 128
required:
- buy
- marketTypeId
- orderCount
- sell
LedgerResponse:
description: "A ledger, either a standalone main ledger or a combined ledger\
\ aggregating others."
discriminator:
propertyName: type
mapping:
@@ -1360,11 +1651,18 @@ components:
fromLedgerId:
type: string
format: uuid
description: Id of the ledger the ISK is debited from.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
toLedgerId:
type: string
format: uuid
description: Id of the ledger the ISK is credited to.
example: 5c1e6f2a-1234-4562-b3fc-2c963f66afa6
amount:
type: number
description: Amount of ISK transferred.
example: 1500000.0
description: A transfer of ISK from one ledger to another.
required:
- amount
- fromLedgerId
@@ -1377,15 +1675,24 @@ components:
fromLedgerId:
type: string
format: uuid
description: Id of the ledger the items are debited from.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
toLedgerId:
type: string
format: uuid
description: Id of the ledger the items are credited to.
example: 5c1e6f2a-1234-4562-b3fc-2c963f66afa6
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id transferred.
example: 34
quantity:
type: integer
format: int64
description: Number of units transferred.
example: 1000
description: A transfer of an item stack from one ledger to another.
required:
- fromLedgerId
- marketTypeId
@@ -1393,20 +1700,32 @@ components:
- toLedgerId
TransactionResponse:
type: object
description: "A transaction: a dated, described group of transfers between ledgers."
properties:
transactionId:
type: string
format: uuid
description: Unique transaction identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
characterId:
type: integer
type:
- integer
- "null"
format: int64
description: "EVE character id the transaction is attributed to, if any."
example: 2112625428
datetime:
type: string
format: date-time
description: When the transaction occurred.
example: 2026-06-22T14:30:00
description:
type: string
description: Human-readable description of the transaction.
example: Market sale of Tritanium
transfers:
type: array
description: The transfers that make up this transaction.
items:
$ref: "#/components/schemas/TransferResponse"
required:
@@ -1416,6 +1735,7 @@ components:
- transactionId
- transfers
TransferResponse:
description: "A transfer between two ledgers, either of ISK or of an item stack."
discriminator:
propertyName: type
mapping:
@@ -1431,11 +1751,16 @@ components:
- type
BalanceResponse:
type: object
description: "The balance of a ledger: its ISK total plus the quantity of each\
\ item type held."
properties:
iskBalance:
type: number
description: ISK balance of the ledger.
example: 1500000.0
itemBalances:
type: array
description: Per-item-type quantities held in the ledger.
items:
$ref: "#/components/schemas/ItemBalanceResponse"
required:
@@ -1443,44 +1768,66 @@ components:
- itemBalances
ItemBalanceResponse:
type: object
description: Quantity of a single item type held in a ledger.
properties:
typeId:
type: integer
format: int64
description: EVE market type (item) id.
example: 34
quantity:
type: integer
format: int64
description: Number of units held.
example: 1000
required:
- quantity
- typeId
AcquisitionResponse:
type: object
description: "A single acquisition of a market type, tracking the remaining\
\ quantity available in the FIFO cost pool."
properties:
acquisitionId:
type: string
format: uuid
description: Unique acquisition identifier.
example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
characterId:
type: integer
format: int64
description: EVE character id that made the acquisition.
example: 2112625428
marketTypeId:
type: integer
format: int64
description: EVE market type (item) id that was acquired.
example: 34
source:
type: string
description: How the item entered the inventory.
enum:
- BOUGHT
- MANUAL
datetime:
type: string
format: date-time
description: When the acquisition occurred.
example: 2026-06-22T14:30:00
quantity:
type: integer
format: int64
description: Quantity originally acquired.
example: 1000
remaining:
type: integer
format: int64
description: Quantity still remaining in the FIFO cost pool.
example: 250
unitCost:
type: number
description: "Cost per unit at acquisition time, in ISK."
example: 5.42
required:
- acquisitionId
- characterId