Skip to content

Releases: ArsNovaSingers/ars-nova-ops

v1.3.0 — read-only /site/inspect

Choose a tag to compare

@ArsNovaSingers ArsNovaSingers released this 26 Aug 16:38

Adds a read-only REST route for inspecting plugin settings that WordPress core REST does not expose.

GET /wp-json/ans-ops/v1/site/inspect — returns allow-listed options. Pass ?name=<option> for one, omit for all. Requires manage_options.

Motivation: Tickera and its Mailchimp add-on store everything in a single serialized option, so there was no way to check what address or settings they hold without wp-admin.

Design notes:

  • The inspect allow-list is separate from the one used by /site/options. That list is shared with the option writer, so anything added there would become writable. Inspect is read-only by construction.
  • Values whose key matches key|secret|token|password|salt|auth|credential|private are returned as ***redacted***, at every level of a nested settings array. Empty values stay empty rather than implying a secret is set.
  • Recursion is depth-capped at 8.

Initial allow-list: tc_general_setting, tc_general_settings, tc_mailchimp_settings, the five woocommerce_email_* fields, woocommerce_store_address, admin_email, siteurl, home. Extend via the ans_ops_inspectable_options filter.

v1.2.1 - fix: overwrite was discarded for wordpress.org slug installs

Choose a tag to compare

@ArsNovaSingers ArsNovaSingers released this 21 Aug 14:04

The bug

ans_ops_route_install() called:

ans_ops_run_install( $package, ( '' !== $slug ) ? false : $overwrite );

That threw away the caller's overwrite flag whenever the source was a
WordPress.org slug - including when /plugin/update had just set it to
true.

Consequence:

Source Already installed? Before 1.2.1
slug (wordpress.org) no works
slug yes always HTTP 500
url / zip_b64 / drive_file_id + overwrite yes works

So new installs worked, our own GitHub-released plugins updated fine, and
updating any already-installed wordpress.org plugin (WooCommerce, Yoast,
Kadence, Tickera add-ons) was impossible. That mix is why the failure read as
intermittent rather than total.

1.2.1 honours $overwrite for every source.

This retires gotcha 17 in the Plugin Build Registry - the
deactivate/delete/reinstall workaround is no longer needed, and it was only
ever safe for plugins holding no options.

Also: failures now say why

A failed install returned { ok:false, error, messages } with HTTP 500. The
MCP connector's error mapper reads only the WordPress WP_Error shape
(code / message), so it matched neither field and reported a bare
WordPress API returned HTTP 500. - discarding a reason the server had
already spelled out.

Failure responses now carry code and message as well as error and
messages, so the existing connector surfaces the real cause with no
redeploy.

v1.2.0 - Google Drive install source + core site options

Choose a tag to compare

@ArsNovaSingers ArsNovaSingers released this 15 Aug 03:17

Adds drive_file_id as an install source: plugin zips are fetched from Google Drive AUTHENTICATED, via ars-nova-google-connector's service account, so the Drive folder stays private. This replaces zip_path, which stopped working when the WordPress connectors moved to Cloud Run. Drive share links do NOT work as a url source - Drive serves servers differently than browsers - so the fetch verifies the PK zip header before unpacking and reports a permissions error as a permissions error. Also lands GET/POST ans-ops/v1/site/options for the core options WordPress REST omits (timezone_string, gmt_offset, blog_public), behind a strict allow-list.

v1.0.0

Choose a tag to compare

@ArsNovaSingers ArsNovaSingers released this 23 Jul 06:18

Initial import. Canonical source == DEV 1.0.0. Installable zip attached (top folder ars-nova-ops/).