Skip to content

forward-sdk 0.1.22

Choose a tag to compare

@captainpacket captainpacket released this 18 Oct 00:35
· 12 commits to main since this release

Added

  • About two hundred operations that Forward's Go SDK covers and this one did not: access
    control, organizations, user tokens and roles, SAML, audit logs, trusted certificates,
    licensing, jobs, backups, banners, collectors and their settings, controller- and
    cloud-managed setups, custom command groups, device discovery, Infoblox, ServiceNow and
    Rapid7, org data files, performance metrics, scorecards, cloud objects, the checks
    reports, snapshot progress, logs and retention, change-set commits and whole-device
    configurations, the NQE schema and assists, and deployment artifacts. All are
    unpublished and described by hand. Some reads were run against a read-only account;
    the rest, and every write and admin route, are from Forward's source and say so.
  • Per-service methods for the hand-written groups among them: snapshots.progress(),
    process_estimate(), processing_queue(), logs(), collection_log(),
    collection_exceptions(), favorite(), set_note(), retention_policy(),
    set_retention_policy() and preview_retention(); change-set handle
    commit_detail(), edit_commit_note(), restore_commit(), restore_commit_as_new(),
    delete_commit(), duplicate() and the four device-configuration calls; ai's NQE
    assists; nqe.schema() and run_metrics(); nqe.repo.source_by_id(); and
    client_software.deployment_artifacts().
  • Six query variants of routes already covered: users with their roles and with their
    two-factor status, the atlas by location, a collector task with its sub-tasks, and the
    CVE index's metadata. Four were read against a read-only account.
  • Fields the Go SDK reads that were missing: who created and last updated a classic
    device, the controllers and managed devices in a connectivity result, and the Azure,
    GCP and AWS cloud-account fields.
  • spec/unpublished.yaml is checked for repeated keys. YAML keeps the last of two equal
    keys, which had silently dropped operations when two drafts described one path.
  • error.endpoint_not_served and error.account_locked on API errors: a 404 for a route
    Forward does not map (not a missing resource), and a 401 for a locked account (not a
    wrong credential).

Fixed

  • A job's cancelLink is put in the path as Forward gave it. Forward hands it out already
    percent-encoded, and encoding it again made Forward answer 400. Found by the Go SDK
    against a live instance; a parameter marked x-forward-pre-encoded is now left as it is.
  • collector_tasks.stop_collector_task() always sent an empty action, which Forward
    refuses; the bare ?action in its route is now the caller's to set.
  • A create is retried after Forward's rate-limit 429 ("Rate limit exceeded"). That limiter
    refuses before the request reaches its handler, so repeating it cannot do the work twice;
    only idempotent requests were retried before, so a create under a lockout failed at once.
    Any other 429 (the one-active-chat refusal is one) and every other retryable status still
    leave a create alone, since they may follow a processed request.
  • A bare key in a dispatch string (?action=duplicate&targetNetworkId) is replaced by the
    caller's value instead of being sent twice.
  • The NQE schema model read a type's deprecated as a string; Forward sends a flag there
    and the advice only on fields.
  • A path parameter of . or .. is refused. Dots are not percent-encoded, and the HTTP
    client collapses such a segment, so a device named .. addressed its parent route (a
    per-device call went to the network). Names that merely contain dots are unaffected.
    Found by comparing with the Go SDK, which fixed the same thing.