[GH-ISSUE #159] Add device management (list/get/register/update) #41

Closed
opened 2026-02-26 21:32:57 +03:00 by kerem · 1 comment
Owner

Originally created by @rudrankriyam on GitHub (Jan 25, 2026).
Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/159

Summary

Add device management support via App Store Connect API devices endpoints. Provide CLI commands to list, get, register, and update devices. No delete support (API does not provide DELETE).

Background / Docs

API Details (from OpenAPI)

Endpoints:

  • GET /v1/devices -> DevicesResponse
  • POST /v1/devices -> DeviceResponse (201)
  • GET /v1/devices/{id} -> DeviceResponse
  • PATCH /v1/devices/{id} -> DeviceResponse
  • No DELETE /v1/devices (confirmed in OpenAPI)

Query params for list (GET /v1/devices):

  • filter[name] (string[])
  • filter[platform] (enum IOS, MAC_OS)
  • filter[status] (enum ENABLED, DISABLED)
  • filter[udid] (string[])
  • filter[id] (string[])
  • sort (enum id, -id, name, -name, platform, -platform, status, -status, udid, -udid)
  • fields[devices] (enum addedDate, deviceClass, model, name, platform, status, udid)
  • limit (1-200)

Query params for get (GET /v1/devices/{id}):

  • fields[devices]

Schemas:

  • Device attributes: name, platform, udid, deviceClass, status, model, addedDate
  • DeviceCreateRequest attributes: name, udid, platform
  • DeviceUpdateRequest attributes: name, status

Proposed CLI

Top-level command: asc devices (explicit flags, JSON default, no interactive prompts)

Subcommands:

  • asc devices list

    • Filters: --name, --platform, --status, --udid, --id (comma-separated)
    • --sort (values above)
    • --fields (comma-separated fields[devices])
    • --limit, --next, --paginate
    • --output, --pretty
  • asc devices get --id DEVICE_ID

    • Optional: --fields
    • --output, --pretty
  • asc devices register --name NAME --udid UDID --platform IOS|MAC_OS

    • --output, --pretty
  • asc devices update --id DEVICE_ID [--name NAME] [--status ENABLED|DISABLED]

    • Require at least one update flag
    • --output, --pretty

Notes:

  • Follow repo conventions: explicit flags, no interactive prompts, JSON-first.
  • deviceClass is read-only attribute (enum: APPLE_WATCH, IPAD, IPHONE, IPOD, APPLE_TV, MAC).

Implementation Tasks

  • cmd/devices.go: CLI + flag validation + help text/examples
  • cmd/root.go: register DevicesCommand()
  • internal/asc/devices.go: types, query/options, client methods
  • internal/asc/devices_output.go: table/markdown output
  • internal/asc/client_options.go: device list options
  • internal/asc/client_queries.go: query builder for device list + optional fields
  • internal/asc/client_pagination.go: include DevicesResponse in pagination support
  • internal/asc/output_core.go: add DevicesResponse + DeviceResponse to PrintTable/PrintMarkdown
  • internal/asc/client_types.go: add ResourceTypeDevices

Tests

  • CLI validation tests in cmd/commands_test.go:
    • Missing --id for get/update
    • Update with no fields
    • Register missing required flags
    • List limit bounds
  • Client HTTP/query tests in internal/asc/client_http_test.go and/or internal/asc/client_test.go
  • Output tests in internal/asc/output_test.go (table + markdown)

Acceptance Criteria

  • asc devices list/get/register/update work end-to-end with JSON/table/markdown output
  • Pagination works with --paginate
  • Proper validation for required flags and allowed enums
  • No delete command or DELETE client method

Out of Scope

  • Deleting devices (no API endpoint)
  • Device class listing endpoint (not a separate resource)
Originally created by @rudrankriyam on GitHub (Jan 25, 2026). Original GitHub issue: https://github.com/rudrankriyam/App-Store-Connect-CLI/issues/159 ## Summary Add device management support via App Store Connect API `devices` endpoints. Provide CLI commands to list, get, register, and update devices. No delete support (API does not provide DELETE). ## Background / Docs - List devices: https://sosumi.ai/documentation/appstoreconnectapi/get-v1-devices - Get device: https://sosumi.ai/documentation/appstoreconnectapi/get-v1-devices-_id_ - Register device: https://sosumi.ai/documentation/appstoreconnectapi/post-v1-devices - Update device: https://sosumi.ai/documentation/appstoreconnectapi/patch-v1-devices-_id_ - OpenAPI spec: https://raw.githubusercontent.com/keith/app-store-connect-openapi-diff/main/app_store_connect_api_openapi.json ## API Details (from OpenAPI) Endpoints: - `GET /v1/devices` -> `DevicesResponse` - `POST /v1/devices` -> `DeviceResponse` (201) - `GET /v1/devices/{id}` -> `DeviceResponse` - `PATCH /v1/devices/{id}` -> `DeviceResponse` - **No `DELETE /v1/devices`** (confirmed in OpenAPI) Query params for list (`GET /v1/devices`): - `filter[name]` (string[]) - `filter[platform]` (enum `IOS`, `MAC_OS`) - `filter[status]` (enum `ENABLED`, `DISABLED`) - `filter[udid]` (string[]) - `filter[id]` (string[]) - `sort` (enum `id`, `-id`, `name`, `-name`, `platform`, `-platform`, `status`, `-status`, `udid`, `-udid`) - `fields[devices]` (enum `addedDate`, `deviceClass`, `model`, `name`, `platform`, `status`, `udid`) - `limit` (1-200) Query params for get (`GET /v1/devices/{id}`): - `fields[devices]` Schemas: - `Device` attributes: `name`, `platform`, `udid`, `deviceClass`, `status`, `model`, `addedDate` - `DeviceCreateRequest` attributes: `name`, `udid`, `platform` - `DeviceUpdateRequest` attributes: `name`, `status` ## Proposed CLI Top-level command: `asc devices` (explicit flags, JSON default, no interactive prompts) Subcommands: - `asc devices list` - Filters: `--name`, `--platform`, `--status`, `--udid`, `--id` (comma-separated) - `--sort` (values above) - `--fields` (comma-separated fields[devices]) - `--limit`, `--next`, `--paginate` - `--output`, `--pretty` - `asc devices get --id DEVICE_ID` - Optional: `--fields` - `--output`, `--pretty` - `asc devices register --name NAME --udid UDID --platform IOS|MAC_OS` - `--output`, `--pretty` - `asc devices update --id DEVICE_ID [--name NAME] [--status ENABLED|DISABLED]` - Require at least one update flag - `--output`, `--pretty` Notes: - Follow repo conventions: explicit flags, no interactive prompts, JSON-first. - `deviceClass` is **read-only** attribute (enum: `APPLE_WATCH`, `IPAD`, `IPHONE`, `IPOD`, `APPLE_TV`, `MAC`). ## Implementation Tasks - `cmd/devices.go`: CLI + flag validation + help text/examples - `cmd/root.go`: register `DevicesCommand()` - `internal/asc/devices.go`: types, query/options, client methods - `internal/asc/devices_output.go`: table/markdown output - `internal/asc/client_options.go`: device list options - `internal/asc/client_queries.go`: query builder for device list + optional fields - `internal/asc/client_pagination.go`: include `DevicesResponse` in pagination support - `internal/asc/output_core.go`: add `DevicesResponse` + `DeviceResponse` to PrintTable/PrintMarkdown - `internal/asc/client_types.go`: add `ResourceTypeDevices` ## Tests - CLI validation tests in `cmd/commands_test.go`: - Missing `--id` for get/update - Update with no fields - Register missing required flags - List limit bounds - Client HTTP/query tests in `internal/asc/client_http_test.go` and/or `internal/asc/client_test.go` - Output tests in `internal/asc/output_test.go` (table + markdown) ## Acceptance Criteria - `asc devices list/get/register/update` work end-to-end with JSON/table/markdown output - Pagination works with `--paginate` - Proper validation for required flags and allowed enums - No delete command or DELETE client method ## Out of Scope - Deleting devices (no API endpoint) - Device class listing endpoint (not a separate resource)
kerem closed this issue 2026-02-26 21:32:57 +03:00
Author
Owner

@rudrankriyam commented on GitHub (Jan 26, 2026):

Closed by #175. Added devices list/get/register/update commands, API client/query/output support, tests (unit + read-only integration), and docs updates. No delete support because App Store Connect has no DELETE devices endpoint.

<!-- gh-comment-id:3798112171 --> @rudrankriyam commented on GitHub (Jan 26, 2026): Closed by #175. Added devices list/get/register/update commands, API client/query/output support, tests (unit + read-only integration), and docs updates. No delete support because App Store Connect has no DELETE devices endpoint.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/App-Store-Connect-CLI#41
No description provided.