Add multi-device identity foundation
This commit is contained in:
@@ -15,8 +15,9 @@
|
||||
},
|
||||
{
|
||||
"name": "deviceId",
|
||||
"required": true,
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "Legacy migration fallback. Omit when Authorization: Bearer <deviceAccessToken> is provided.",
|
||||
"schema": {
|
||||
"format": "uuid",
|
||||
"type": "string"
|
||||
@@ -36,11 +37,62 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"assets"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/v1/artwork/{artworkId}/download": {
|
||||
"get": {
|
||||
"operationId": "ArtworkController_download_v1",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "artworkId",
|
||||
"required": true,
|
||||
"in": "path",
|
||||
"schema": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "deviceId",
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "Legacy migration fallback. Omit when Authorization: Bearer <deviceAccessToken> is provided.",
|
||||
"schema": {
|
||||
"format": "uuid",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"content": {
|
||||
"image/*": {
|
||||
"schema": {
|
||||
"type": "string",
|
||||
"format": "binary"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"artwork"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/api/v1/health": {
|
||||
"get": {
|
||||
"operationId": "HealthController_getHealth_v1",
|
||||
@@ -88,6 +140,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"devices"
|
||||
]
|
||||
@@ -119,6 +176,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"devices"
|
||||
]
|
||||
@@ -150,6 +212,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"uploads"
|
||||
]
|
||||
@@ -180,6 +247,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"uploads"
|
||||
]
|
||||
@@ -233,6 +305,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"uploads"
|
||||
]
|
||||
@@ -273,6 +350,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"uploads"
|
||||
]
|
||||
@@ -284,8 +366,9 @@
|
||||
"parameters": [
|
||||
{
|
||||
"name": "deviceId",
|
||||
"required": true,
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "Legacy migration fallback. Omit when Authorization: Bearer <deviceAccessToken> is provided.",
|
||||
"schema": {
|
||||
"format": "uuid",
|
||||
"type": "string"
|
||||
@@ -304,6 +387,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"library"
|
||||
]
|
||||
@@ -312,7 +400,18 @@
|
||||
"/api/v1/sync/bootstrap": {
|
||||
"get": {
|
||||
"operationId": "SyncController_bootstrap_v1",
|
||||
"parameters": [],
|
||||
"parameters": [
|
||||
{
|
||||
"name": "deviceId",
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "Legacy migration fallback. Omit when Authorization: Bearer <deviceAccessToken> is provided.",
|
||||
"schema": {
|
||||
"format": "uuid",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
@@ -325,6 +424,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"sync"
|
||||
]
|
||||
@@ -334,6 +438,16 @@
|
||||
"get": {
|
||||
"operationId": "SyncController_changes_v1",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "deviceId",
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "Legacy migration fallback. Omit when Authorization: Bearer <deviceAccessToken> is provided.",
|
||||
"schema": {
|
||||
"format": "uuid",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "after",
|
||||
"required": false,
|
||||
@@ -356,6 +470,11 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"sync"
|
||||
]
|
||||
@@ -464,6 +583,10 @@
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
},
|
||||
"deviceAccessToken": {
|
||||
"type": "string",
|
||||
"description": "Raw device access token returned only during registration. Store it securely."
|
||||
},
|
||||
"bootstrapToken": {
|
||||
"type": "string"
|
||||
},
|
||||
@@ -474,6 +597,7 @@
|
||||
},
|
||||
"required": [
|
||||
"deviceId",
|
||||
"deviceAccessToken",
|
||||
"bootstrapToken",
|
||||
"serverTime"
|
||||
]
|
||||
@@ -483,7 +607,8 @@
|
||||
"properties": {
|
||||
"deviceId": {
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
"format": "uuid",
|
||||
"description": "Legacy migration fallback. Omit when Authorization: Bearer <deviceAccessToken> is provided."
|
||||
},
|
||||
"appVersion": {
|
||||
"type": "string",
|
||||
@@ -491,7 +616,6 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"deviceId",
|
||||
"appVersion"
|
||||
]
|
||||
},
|
||||
@@ -517,7 +641,8 @@
|
||||
"properties": {
|
||||
"deviceId": {
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
"format": "uuid",
|
||||
"description": "Legacy migration fallback. Omit when Authorization: Bearer <deviceAccessToken> is provided."
|
||||
},
|
||||
"sha256": {
|
||||
"type": "string",
|
||||
@@ -533,7 +658,6 @@
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"deviceId",
|
||||
"sha256",
|
||||
"originalFilename",
|
||||
"sizeBytes"
|
||||
@@ -611,6 +735,39 @@
|
||||
"nextOffset"
|
||||
]
|
||||
},
|
||||
"UploadFinalizeArtworkDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"dataBase64": {
|
||||
"type": "string",
|
||||
"example": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJ..."
|
||||
},
|
||||
"sha256": {
|
||||
"type": "string",
|
||||
"example": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"image/jpeg",
|
||||
"image/png"
|
||||
]
|
||||
},
|
||||
"width": {
|
||||
"type": "number",
|
||||
"example": 512
|
||||
},
|
||||
"height": {
|
||||
"type": "number",
|
||||
"example": 512
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"dataBase64",
|
||||
"sha256",
|
||||
"mimeType"
|
||||
]
|
||||
},
|
||||
"UploadFinalizeRequestDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -629,6 +786,9 @@
|
||||
"durationMs": {
|
||||
"type": "number",
|
||||
"example": 245000
|
||||
},
|
||||
"artwork": {
|
||||
"$ref": "#/components/schemas/UploadFinalizeArtworkDto"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
@@ -653,6 +813,38 @@
|
||||
"assetId"
|
||||
]
|
||||
},
|
||||
"RemoteArtworkDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"artworkId": {
|
||||
"type": "string",
|
||||
"format": "uuid"
|
||||
},
|
||||
"sha256": {
|
||||
"type": "string",
|
||||
"example": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
||||
},
|
||||
"mimeType": {
|
||||
"type": "string",
|
||||
"example": "image/jpeg"
|
||||
},
|
||||
"width": {
|
||||
"type": "object",
|
||||
"example": 512,
|
||||
"nullable": true
|
||||
},
|
||||
"height": {
|
||||
"type": "object",
|
||||
"example": 512,
|
||||
"nullable": true
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"artworkId",
|
||||
"sha256",
|
||||
"mimeType"
|
||||
]
|
||||
},
|
||||
"RemoteLibraryTrackDto": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -687,6 +879,15 @@
|
||||
"updatedAt": {
|
||||
"type": "string",
|
||||
"example": "2026-05-29T08:05:00.000Z"
|
||||
},
|
||||
"artwork": {
|
||||
"nullable": true,
|
||||
"type": "object",
|
||||
"allOf": [
|
||||
{
|
||||
"$ref": "#/components/schemas/RemoteArtworkDto"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
||||
Reference in New Issue
Block a user