Skip to content

Releases: ylabonte/procon-ip

v2.1.4

Choose a tag to compare

@procon-ip-release procon-ip-release released this 23 Aug 01:17

Patch Changes

  • c5a0476: Fix relay/DMX writes being silently dropped by the controller (they returned 200 "done" but never applied). Root cause: the ProCon.IP's legacy HTTP/1.0 firmware is case-sensitive on header names and reads a POST body only when the length header is spelled Content-Length. undici (and the global fetch) lowercase the header names they generate, so every write went out with content-length — the firmware ignored the body and no-op'd the write. This is the same class of bug as the Authorization casing fixed in 2.1.3, but on a header the HTTP client generates and won't let us re-case.

    The HTTP transport is now Node's built-in http/https (new src/http-transport.ts), which preserves the exact casing of every header we set and adds only a capitalised Host. undici is removed — the package is now zero runtime dependencies. Verified end-to-end against a real ProCon.IP V.1.7.6: a DmxService write followed by a GetDmxService read-back now echoes the written value (previously it stayed unchanged). A real-wire regression test asserts the outgoing Content-Length (and Authorization) name reaches the wire capitalised.

v2.1.3

Choose a tag to compare

@procon-ip-release procon-ip-release released this 23 Aug 00:14

Patch Changes

  • 5e37d9f: Fix authenticated relay/DMX writes returning 401 against the ProCon.IP controller. AbstractService.request() built its headers through the WHATWG Headers API, which lowercases every header name, so undici sent authorization: … on the wire. The controller's legacy firmware is case-sensitive on the header name and rejects a write carrying authorization, accepting only Authorization (verified end-to-end against a real ProCon.IP V.1.7.6: lowercase → 401, capitalised → 200 done). Reads were unaffected because their endpoints ignore auth. Request headers are now assembled as a plain object so their exact casing reaches the wire; a real-wire regression test asserts the outgoing Authorization name is capitalised.

v2.1.2

Choose a tag to compare

@ylabonte ylabonte released this 22 Aug 23:33

Patch: isDmxEnabled() reads bit 2 (mask 4); add isDmxExtensionEnabled().

v2.1.1

Choose a tag to compare

@procon-ip-release procon-ip-release released this 22 Aug 14:10

Patch Changes

  • d42a13d: Fix relay switching (UsrcfgCgiService) and DMX writes (DmxService), which were silently failing against real controllers since the 2.x rewrite. Two root causes, both now fixed:

    1. Browser headers from fetch(). AbstractService.request() used the global fetch(), whose WHATWG implementation injects browser-only request headers (sec-fetch-mode, accept-language, accept, user-agent). The controller's legacy firmware accepts such a write with 200 "done" but silently ignores it (reads were unaffected). Those headers are on the fetch "forbidden header" list and cannot be stripped via the API, so the HTTP layer now uses undici.request() (new runtime dependency), which sends only the headers we set. This is what axios (pre-2.x) and other working clients did.

      Side effects of the HTTP-client switch: request() no longer follows 3xx redirects (they surface as BadStatusCodeError), and statusText on BadStatusCodeError / the returned Response is now the numeric status. No caller relies on either.

    2. Percent-encoded comma. The /usrcfg.cgi POST body was serialised with URLSearchParams, encoding the literal comma in ENA=<on>,<auto> (and the DMX CH1_8/CH9_16 channel lists) to %2C, which the controller cannot parse. The body is now built with literal commas.

    Both were confirmed against a real ProCon.IP V.1.7.6 (relay physically toggles again). A new wire-level regression test asserts the outgoing request carries neither the browser headers nor a percent-encoded comma.

v2.1.0

Choose a tag to compare

@procon-ip-release procon-ip-release released this 17 May 23:03

Minor Changes

  • 0779ff3: Drop Node 20 support. Minimum supported runtime is now Node 22 LTS.

    • engines.node raised from >=20.0.0 to >=22.0.0.
    • CI matrix bumped from Node 20/22 to Node 22/24.
    • tsup compilation target raised from node20 to node22.

    The library's runtime API is unchanged; consumers on Node 22+ are unaffected. Consumers on Node 20 should bump their runtime to Node 22 LTS or newer.

v2.0.0

Choose a tag to compare

@ylabonte ylabonte released this 12 May 01:16
5474552

Major Changes

  • 4993dbd: procon-ip 2.0.0 — toolchain modernisation, native fetch, DMX512 support.

    Breaking changes:

    • Drop Node ≤ 18 (engines.node: ">=20.0.0").
    • Replace axios with native fetch. Errors are now BadCredentialsError,
      BadStatusCodeError, RequestTimeoutError, InvalidPayloadError (all
      exported from 'procon-ip'). AxiosError is no longer leaked.
    • Drop deep imports — only import { X } from 'procon-ip' works. The
      procon-ip/lib/... and procon-ip/module/... paths are removed.
    • Build outputs move to dist/ (was lib/ + module/). The package
      exports map preserves the public import surface.
    • mock-state is no longer a public export.
    • UsrcfgCgiService.setOn / setOff / setAuto now return Promise<void>.
      The opaque numeric response code returned in 1.x is dropped; failures
      throw the new typed error classes instead.

    New:

    • DMX512 support via GetDmxService, DmxService, GetDmxData,
      DmxChannelData. Read-mutate-write idiom mirroring proconip-pypi.

    Internal:

    • pnpm 9 + tsup + Vitest + ESLint 9 flat + TypeDoc with strict validation.
    • ≥80% coverage gate in CI; project targets 100% on parsers/interpreters/
      error paths/DMX (currently 96.3% overall, 100% on parsers/interpreters/
      errors/DMX).
    • Releases publish via npm Trusted Publishing (OIDC + provenance) inside
      the release GitHub environment. No long-lived NPM_TOKEN in CI.
    • Docs are built and deployed to Pages from Actions; the previously
      committed docs/ HTML is removed.

All notable changes to this project are documented here.
Format: Keep a Changelog.
Versioning: Semantic Versioning.

Release v1.8.0

Choose a tag to compare

@ylabonte ylabonte released this 18 Aug 17:07
e2111dd
  • Dependency updates.
  • Breaking backward compatibility for Node versions <18.18.x
  • Update eslint to v9.x (enforcing new config format)

What's Changed

  • Bump typedoc from 0.25.9 to 0.25.10 by @dependabot in #381
  • Bump the dev-dependencies group with 1 update by @dependabot in #385
  • Bump the production group with 1 update by @dependabot in #390
  • Bump the dev-dependencies group with 3 updates by @dependabot in #391
  • Bump the dev-dependencies group with 1 update by @dependabot in #392
  • Bump the dev-dependencies group with 2 updates by @dependabot in #393
  • Bump the dev-dependencies group with 2 updates by @dependabot in #394
  • Bump typescript from 5.4.3 to 5.4.4 in the dev-dependencies group by @dependabot in #395
  • Bump eslint-plugin-n from 17.4.0 to 17.5.1 in the dev-dependencies group by @dependabot in #406
  • Bump eslint-plugin-n from 17.5.1 to 17.6.0 in the dev-dependencies group by @dependabot in #407
  • Bump the dev-dependencies group with 4 updates by @dependabot in #408
  • Bump the dev-dependencies group with 2 updates by @dependabot in #409
  • Bump axios from 1.6.8 to 1.7.1 in the production group by @dependabot in #410
  • Bump the dev-dependencies group with 3 updates by @dependabot in #411
  • Bump axios from 1.7.1 to 1.7.2 in the production group by @dependabot in #412
  • Bump eslint-plugin-promise from 6.1.1 to 6.2.0 in the dev-dependencies group by @dependabot in #413
  • Bump the dev-dependencies group with 3 updates by @dependabot in #414
  • Bump the dev-dependencies group with 3 updates by @dependabot in #415
  • Bump the dev-dependencies group with 3 updates by @dependabot in #416
  • Bump the dev-dependencies group with 2 updates by @dependabot in #417
  • Bump eslint-plugin-n from 17.8.0 to 17.8.1 in the dev-dependencies group by @dependabot in #418
  • Bump the dev-dependencies group with 4 updates by @dependabot in #419
  • Bump braces from 3.0.2 to 3.0.3 by @dependabot in #420
  • Bump eslint-plugin-n from 17.8.1 to 17.9.0 in the dev-dependencies group by @dependabot in #421
  • Bump the dev-dependencies group with 2 updates by @dependabot in #422
  • Bump the dev-dependencies group with 3 updates by @dependabot in #423
  • Bump typescript from 5.4.5 to 5.5.2 in the dev-dependencies group by @dependabot in #424
  • Bump typedoc from 0.26.1 to 0.26.2 in the dev-dependencies group by @dependabot in #425
  • Bump the dev-dependencies group with 3 updates by @dependabot in #426
  • Bump typedoc from 0.26.2 to 0.26.3 in the dev-dependencies group by @dependabot in #427
  • Bump the dev-dependencies group with 3 updates by @dependabot in #428
  • Bump the dev-dependencies group with 4 updates by @dependabot in #429
  • Bump the dev-dependencies group with 3 updates by @dependabot in #430
  • Bump typedoc from 0.26.3 to 0.26.4 in the dev-dependencies group by @dependabot in #431
  • Bump the dev-dependencies group with 3 updates by @dependabot in #432
  • Bump the dev-dependencies group with 3 updates by @dependabot in #433
  • Bump eslint-plugin-prettier from 5.1.3 to 5.2.1 in the dev-dependencies group by @dependabot in #434
  • Bump the dev-dependencies group with 2 updates by @dependabot in #435
  • Bump the dev-dependencies group with 4 updates by @dependabot in #436
  • Bump eslint-plugin-promise from 6.6.0 to 7.0.0 in the dev-dependencies group by @dependabot in #437
  • Bump eslint-plugin-n from 17.9.0 to 17.10.1 in the dev-dependencies group by @dependabot in #438
  • Bump the dev-dependencies group with 2 updates by @dependabot in #439
  • Bump the dev-dependencies group with 3 updates by @dependabot in #440
  • Bump axios from 1.7.2 to 1.7.3 in the production group by @dependabot in #442
  • Bump axios from 1.7.3 to 1.7.4 in the production group by @dependabot in #447
  • Bump axios from 1.6.8 to 1.7.4 in /examples by @dependabot in #448
  • Bump the dev-dependencies group across 1 directory with 7 updates by @dependabot in #446

Full Changelog: v1.7.6...v1.8.0

Release v1.7.6

Choose a tag to compare

@ylabonte ylabonte released this 27 Feb 15:20
4e567a7

Dependency updates.

Full Changelog: v1.7.5...v1.7.6

Release v1.7.5

Choose a tag to compare

@ylabonte ylabonte released this 12 Feb 23:54
bdfac18

Dependency updates.

Release v1.7.4

Choose a tag to compare

@ylabonte ylabonte released this 15 Jan 17:48
d3f171f

Dependency updates.