@lacneu/wix-openclaw 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,183 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ## [0.5.0] - 2026-08-29
11
+
12
+ Six accessibility tools, off by default behind **their own** switch. The 0.4
13
+ line could correct a site's SEO tags and say nothing about whether the site
14
+ could be used with a screen reader; Wix runs an accessibility scan of its own,
15
+ and this release reads it.
16
+
17
+ Nothing in this family writes to the site, so there are no tokens and no
18
+ refusals here. The discipline moved instead to what an answer is allowed to
19
+ CLAIM — see below.
20
+
21
+ ### Added — Accessibility: Wix runs the scan, this reads the result
22
+
23
+ > Developer Preview, and **off by default behind its own switch**,
24
+ > `enableAccessibilityTools`. Nothing in this family writes to the site.
25
+
26
+ Six tools: `wix_a11y_list_page_collections`, `wix_a11y_run_scan`,
27
+ `wix_a11y_get_scan`, `wix_a11y_get_latest_scan`,
28
+ `wix_a11y_list_page_summaries` and `wix_a11y_list_findings`.
29
+
30
+ ### The discipline moves, because the danger moved
31
+
32
+ The SEO writes needed tokens because they destroyed the previous value of what
33
+ they wrote. Nothing here destroys anything — so the way this family hurts a user
34
+ is different, and Wix names it: **a page is clear only when it has no findings,
35
+ its page status is completed, and its coverage confirms the relevant checks
36
+ ran**. A page that failed to scan reports zero findings too, because nothing was
37
+ read.
38
+
39
+ So no answer here can be skimmed into a clean one. Page summaries carry `clear`,
40
+ valued `true`, `false` or `"unknown"`, instead of a bare count — and a `true`
41
+ comes with `clearFor`, naming the checks it is true for, because coverage says
42
+ which checks ran, not that the right ones did. The `"unknown"` pages are
43
+ counted for you. A scan reports `resultIsWhole`;
44
+ `PARTIALLY_COMPLETED` never collapses into success, a running scan says its
45
+ numbers are progress rather than a result, and a failed scan refuses to be a
46
+ result at all. An unfiltered empty findings list says that an absent finding is
47
+ not a rule that passed.
48
+
49
+ ### `attempt` is what tells a retry apart from a new scan
50
+
51
+ Wix takes a caller-generated idempotency key so a lost response cannot create
52
+ duplicate work, and requires a **new** key for a genuinely new scan — verifying
53
+ a fix is a new scan, not a retry. The key is derived from the site, the target
54
+ and the `attempt` label the caller passes. A random key per call would satisfy
55
+ the schema and make the guarantee inert against a 5-per-minute limit; deriving
56
+ it from the target alone would turn every verification into a retry that hands
57
+ back the stale result.
58
+
59
+ ### Recovery paths that would otherwise be unreachable
60
+
61
+ `SCAN_ALREADY_IN_PROGRESS` and `SCAN_STATE_UNKNOWN` carry a scan id the caller
62
+ is meant to poll. Left inside a thrown message, the only move an agent has left
63
+ is to start a duplicate — so those errors return the id and the instruction not
64
+ to. `SCAN_SIZE_LIMIT_EXCEEDED` returns with an explicit ban on describing the
65
+ site as fully scanned.
66
+
67
+ ### The SDK view is not the wire view
68
+
69
+ The Wix SDK renames three keys coming back from REST — `id` → `_id`,
70
+ `createdDate` → `_createdDate`, `updatedDate` → `_updatedDate`. This plugin
71
+ speaks REST directly, so the wire says `id`. Every field name here was taken
72
+ from the SDK typings, which made that rename the one place the typings are not
73
+ the contract: reading `_id` returned `undefined` on every real call, so a
74
+ started scan handed back no id and the polling flow had nothing to poll. The
75
+ tests agreed, because the fixtures had been shaped from the same typings.
76
+
77
+ Query encoding came from the same source and had the same shape of trap: Wix's
78
+ serialiser flattens nested objects to dotted keys (`filter.severity`) but emits
79
+ a repeated field as a **repeated key** (`filter.categories=A&filter.categories=B`).
80
+ An indexed `filter.categories.0` is a different parameter, and a filter the API
81
+ ignores returns unfiltered findings that the tool would then label filtered.
82
+
83
+ ### Fixed
84
+
85
+ - **A raw NUL byte had been written into a source file.** It was a legitimate
86
+ HMAC separator written the wrong way, and its effect was not on the running
87
+ code: `grep` treats a file containing NUL as binary and answers **nothing**,
88
+ silently, so searches reported symbols absent that were present. Written as
89
+ an escape now, and a guard rejects any raw control character in `src/` and
90
+ `test/` — the same class as a stray U+2028 that once landed in a test regex.
91
+ - Stale counts in the SEO opt-in comments in `src/config.ts` and the manifest
92
+ test, still saying four tools write irreversibly when eleven do.
93
+
94
+ ## [0.4.0] - 2026-08-29
95
+
96
+ Ten more `wix_seo_*` tools, still **off by default**, close the other half of
97
+ the SEO gap: 0.3.x could audit a site's tags and never correct them. Writing
98
+ them is a different destructiveness from deleting a redirect — a tag write
99
+ replaces **the previous value of what it writes** — so the guard is different
100
+ too, and most of this entry is about that.
101
+
102
+ ### Added — SEO: writing tags, and the patterns behind them
103
+
104
+ > Same warning as the audit tools: these endpoints are in Developer Preview,
105
+ > Wix states they should not be used on live sites, and **every tool here
106
+ > replaces what it writes**. They register only with `enableSeoTools: true`.
107
+
108
+ Ten tools complete the SEO surface: you could audit tags but not correct them.
109
+
110
+ **Per-item and site-wide tags.** `wix_seo_set_item_tags`,
111
+ `wix_seo_bulk_set_item_tags`, `wix_seo_reset_item_tags` and
112
+ `wix_seo_set_site_tags`.
113
+
114
+ **Patterns.** `wix_seo_list_patterns`, `wix_seo_get_pattern`,
115
+ `wix_seo_list_pattern_variables` (read-only) plus `wix_seo_set_pattern`,
116
+ `wix_seo_create_pattern` and `wix_seo_reset_pattern`.
117
+
118
+ ### The destructiveness is a different shape, so the guard is too
119
+
120
+ A redirect delete destroys another row — it can be listed and named. A tag write
121
+ destroys **the previous value of what it writes**: `tags` replaces the item's set
122
+ in full, so a caller that sets a title wipes the description it never mentioned,
123
+ gets exactly what it asked for, and loses something it never saw. That is this
124
+ half's "redirects do not chain".
125
+
126
+ The pre-flight therefore reports what **disappears** — the tags held today whose
127
+ slot the incoming set does not fill — never an echo of the input. A caller
128
+ reading its own request back learns nothing. Nothing is lost, nothing is
129
+ refused: the ceremony exists for the unannounced loss, not for its own sake.
130
+
131
+ A pattern write earns the heaviest pre-flight in the plugin. It re-renders
132
+ **every page of its type**, it has no revision, and the Wix dashboard writes to
133
+ the same object — last write wins. So the refusal reports the page count
134
+ downstream alongside the templates, and the token is bound to the pattern read
135
+ immediately before — **and to that page count**, because the radius is part of
136
+ what was accepted: a token minted while a type held twelve pages does not
137
+ authorise the same write once it holds four hundred.
138
+
139
+ Every refusal in this family carries the **value** of what it names, not only
140
+ its slot.
141
+ Editing `{{title}}` into `{{title}} — Ataraxis` loses no tag, so a report by
142
+ slot alone read identically before and after — an operator signing a rewrite of
143
+ every page of a type without seeing either version.
144
+
145
+ ### Three contract facts that live in code, not in prose
146
+
147
+ - **`fieldMask` is a comma-separated STRING over REST.** The SDK takes an array,
148
+ which is what a model reaches for. It is built here, never accepted.
149
+ - **`language` is actively dropped.** Tags can only be written for the item's
150
+ primary language, and sending one fails `LANGUAGE_NOT_SUPPORTED` *even when
151
+ the field mask omits it* — so not declaring the field is not enough, TypeBox
152
+ passes undeclared properties through.
153
+ - **Site SEO Tags accepts only `meta`.** Wix rejects `title`, `script` and
154
+ `link` there despite the shared tag shape listing them, and there is no way to
155
+ set site-wide structured data through any Wix API — a per-page `script` tag is
156
+ the route.
157
+
158
+ `BLOG_POST` bulk writes are capped at 20 entries, not 100, and Wix rejects the
159
+ **whole call** past an item type's limit — a 40-post batch would write nothing —
160
+ so the cap is enforced before the request leaves.
161
+
162
+ ### The `publish` split, stated where a model will read it
163
+
164
+ For a static page, `publish: true` updates **only** the published revision. The
165
+ read tools always return the **saved** one, so after such a write they keep
166
+ showing the old values — that is not a failed write, and re-sending will not
167
+ change it. The method's own response is not a read of the published page either.
168
+ A caller following the description literally converges instead of retrying.
169
+
170
+ ## [0.3.1] - 2026-08-28
171
+
172
+ **The version that actually reached npm for the 0.3 line.** `v0.3.0` was
173
+ tagged, failed to compile in the release workflow and was never published, so
174
+ `0.3.1` carries the whole 0.3.0 entry below plus the fix that unblocked it.
175
+
176
+ ### Fixed
177
+
178
+ - **The build imported a type from a subpath that does not exist across the
179
+ supported range.** `openclaw/plugin-sdk/agent-core` only appeared in
180
+ 2026.5.28, while this plugin declares `>=2026.5.0`, so CI failed on the lower
181
+ bound. The shared tool-result type is declared locally instead — verified at
182
+ both ends of the supported range rather than at the version that happened to
183
+ be installed.
184
+
8
185
  ## [0.3.0] - 2026-08-28
9
186
 
10
187
  Nine `wix_seo_*` tools, **off by default**, close the gap that made this plugin
@@ -402,7 +579,7 @@ For instance owners on `@lacneu/wix-openclaw@0.2.2`:
402
579
  3. Verify in the boot log:
403
580
  `wix-openclaw: ready — 50 tool(s) registered`.
404
581
 
405
- Fifty, not fifty-nine: the SEO tools are not registered until you opt in. Nothing
582
+ Fifty, not sixty-nine: the SEO tools are not registered until you opt in. Nothing
406
583
  else changes, and the approval fix applies as soon as the plugin loads — a gated
407
584
  tool that used to fail without asking will now put its prompt to the operator.
408
585
 
@@ -418,7 +595,7 @@ To add the SEO tools:
418
595
  `openclaw config set plugins.entries.wix-openclaw.config.enableSeoTools true`.
419
596
  `update` carries your existing config forward and the new field simply
420
597
  defaults to `false`, so nothing turns on by surprise.
421
- 3. Restart, and expect `59 tool(s) registered`.
598
+ 3. Restart, and expect `69 tool(s) registered`.
422
599
  4. Read the Developer Preview warning at the top of this section before pointing
423
600
  any of the four writing tools at a live site.
424
601
 
package/README.md CHANGED
@@ -15,10 +15,12 @@
15
15
  ## Overview
16
16
 
17
17
  `wix-openclaw` is an OpenClaw plugin that lets your agent operate a Wix site
18
- through the official Wix REST API. It registers ~60 tools split across a dozen
19
- Wix products (Blog, CMS Data, Forms, Bookings, Contacts, Events, Reviews, FAQ,
20
- Multilingual, Sites, Site Media, SEO), plus a `wix_design_brief` helper that
21
- turns loose textual briefs into structured markdown artefacts.
18
+ through the official Wix REST API. It registers **50 tools by default** across a
19
+ dozen Wix products (Blog, CMS Data, Forms, Bookings, Contacts, Events, Reviews,
20
+ FAQ, Multilingual, Sites, Site Media), plus a `wix_design_brief` helper that
21
+ turns loose textual briefs into structured markdown artefacts. Two families are
22
+ opt-in and add to that: SEO (`enableSeoTools`, 19 tools) and accessibility
23
+ (`enableAccessibilityTools`, 6 tools) — **75 with both**.
22
24
 
23
25
  Every tool funnels through a single authenticated HTTP client that:
24
26
 
@@ -176,8 +178,10 @@ Tick these only if the corresponding Wix product is actually in use on
176
178
  the target site:
177
179
 
178
180
  - [ ] **Manage SEO** (`SCOPE.PROMOTE.MANAGE-SEO`) — **only if you set
179
- `enableSeoTools: true`.** In the default configuration the SEO tools are not
180
- registered at all, so granting this scope would hand the key the power to
181
+ `enableSeoTools: true`**, which registers **nineteen** tools of which
182
+ **eleven write irreversibly** (four on redirects, seven on tags and
183
+ patterns; a pattern write re-renders every page of its type). In the default
184
+ configuration the SEO tools are not registered at all, so granting this scope would hand the key the power to
181
185
  delete redirects for tools that cannot run. Wix exposes a **single** SEO
182
186
  scope, not a read/write pair: ticking it grants redirect creation and deletion
183
187
  along with the read-only audit, so there is no such thing as an audit-only SEO
@@ -185,8 +189,20 @@ the target site:
185
189
  *Social Posts* and *Import orders*; its label is currently untranslated and
186
190
  renders literally as `site.scope.SCOPE.PROMOTE.MANAGE-SEO.name`. Since Wix
187
191
  cannot narrow it, the read/write boundary is enforced by this plugin instead —
188
- the four writing tools require an approval naming every redirect they would
189
- destroy.
192
+ each of the eleven writing tools refuses until what it would destroy, be it a
193
+ redirect, a tag or a template, has been named and acknowledged.
194
+
195
+ - [ ] **Manage Accessibility Scans** — **only if you set
196
+ `enableAccessibilityTools: true`**, which registers six tools. None of them
197
+ writes to the site: Wix runs the scan, the plugin reads the result. **The
198
+ scope identifier for this permission is not published in the API reference
199
+ and is NOT recorded here** — the last time this README guessed a Wix
200
+ permission name it invented one that does not exist, so this line stays empty
201
+ until the exact label is read off the Wix permissions page. Note that reading
202
+ page collections or past results does **not** prove the key may start a scan:
203
+ Wix states that starting one needs this permission specifically, and answers
204
+ `403` / `PERMISSION_DENIED` otherwise — which the tools surface as a
205
+ permission problem, never as an empty site.
190
206
 
191
207
  - [ ] **Pricing Plans** — if you sell subscription packages
192
208
  - [ ] **Wix Stores** + **Wix eCommerce** — if you sell physical/digital
@@ -238,7 +254,8 @@ columns and remove the matching tools from your agent's allow-list.
238
254
  | `wix_reviews_*` | Wix Reviews | Reviews moderation |
239
255
  | `wix_faq_*` | Manage FAQ | FAQ tooling |
240
256
  | `wix_multilingual_*` | Multilingual Translation Schema Read | Translation reads |
241
- | `wix_seo_*` (all nine) | Manage SEO (`SCOPE.PROMOTE.MANAGE-SEO`) | SEO audit **and** redirect changes — Wix has no read-only SEO scope, so this one permission covers both |
257
+ | `wix_seo_*` (all nineteen) | Manage SEO (`SCOPE.PROMOTE.MANAGE-SEO`) | SEO audit **and** redirect changes — Wix has no read-only SEO scope, so this one permission covers both |
258
+ | `wix_a11y_*` (all six) | Manage Accessibility Scans (identifier not published — read it off the Wix permissions page) | Starting a scan. Reading collections or stored results does not imply it |
242
259
  | `wix_design_brief` | _(none — no API call)_ | Always |
243
260
 
244
261
  ### Wix app installation requirements
@@ -487,19 +504,22 @@ neither answer has been tested.
487
504
  ### SEO
488
505
 
489
506
  > **Developer Preview, and OFF by default.** Every Wix endpoint behind these
490
- > nine tools is listed in Wix's
507
+ > nineteen tools is listed in Wix's
491
508
  > [Developer Preview](https://dev.wix.com/docs/api-reference/articles/work-with-wix-apis/platform/about-developer-preview)
492
- > — Item SEO Tags, Site SEO Tags and all six Redirects methods. Wix may change
509
+ > — Item SEO Tags, Site SEO Tags, SEO Patterns and all six Redirects methods.
510
+ > Wix may change
493
511
  > them at any time, and states plainly that you **shouldn't use them on live
494
512
  > sites**: they are for testing and feedback. An API stays in preview for at
495
513
  > most six months.
496
514
  >
497
515
  > Nothing here registers unless you set `enableSeoTools: true` in the plugin
498
- > config. Four of the tools write irreversibly to the live site the moment they
499
- > succeed, so opting in is the operator saying they accept both risks.
516
+ > config. Eleven of the tools write irreversibly to the live site the moment
517
+ > they succeed and a pattern write re-renders every page of its type — so
518
+ > opting in is the operator saying they accept both risks.
500
519
  > _Preview status verified against the Wix reference on 2026-08-28._
501
520
 
502
- Auditing a site's SEO, and managing its URL redirects.
521
+ Auditing a site's SEO, correcting its tags, and managing its URL redirects and
522
+ tag patterns.
503
523
 
504
524
  | Tool | What it does | Approval | Validated |
505
525
  |---|---|---|---|
@@ -512,6 +532,16 @@ Auditing a site's SEO, and managing its URL redirects.
512
532
  | `wix_seo_delete_redirect` | Delete one redirect (re-reads it and refuses until its token is acknowledged) | **required** | schema |
513
533
  | `wix_seo_bulk_create_redirects` | Create 1–100 redirects | **required** | schema |
514
534
  | `wix_seo_bulk_delete_redirects` | Delete 1–500 redirects | **required** | schema |
535
+ | `wix_seo_set_item_tags` | Set one item's tags — REPLACES its own set in full; refuses until the tags it would drop are acknowledged | **required** | schema |
536
+ | `wix_seo_bulk_set_item_tags` | Set tags for many items of one type (100 max, 20 for `BLOG_POST`); per-entry results | **required** | schema |
537
+ | `wix_seo_reset_item_tags` | Give an item back the tags it inherits, discarding its own (all or nothing) | **required** | schema |
538
+ | `wix_seo_set_site_tags` | Set the site-wide tags — `meta` only; Wix rejects `title`/`script`/`link` here | **required** | schema |
539
+ | `wix_seo_list_patterns` | The site's tag templates, per page type | — | schema |
540
+ | `wix_seo_get_pattern` | One page type's pattern; read `source` to know whose it is — an owned pattern may hold zero templates, so empty ≠ absent | — | schema |
541
+ | `wix_seo_list_pattern_variables` | The variables a page type's pattern may reference | — | schema |
542
+ | `wix_seo_set_pattern` | Change an existing pattern — re-renders EVERY page of the type | **required** | schema |
543
+ | `wix_seo_create_pattern` | Give a page type its first pattern (same path as the set, `POST` not `PATCH`) | **required** | schema |
544
+ | `wix_seo_reset_pattern` | Return a page type to the Wix default pattern | **required** | schema |
515
545
 
516
546
  **Three things to know before using these.**
517
547
 
@@ -550,6 +580,65 @@ delete it, then create it carrying **every** field over — an omitted field is
550
580
  filled with its default, not its previous value. To find one, list them all and
551
581
  filter client-side.
552
582
 
583
+ ### Accessibility
584
+
585
+ > **Developer Preview, and OFF by default — separately from SEO.** The Wix
586
+ > Accessibility Scans endpoints are in Developer Preview and may change without
587
+ > notice. Nothing here writes to the site, so there is no approval to give and
588
+ > nothing to undo; the switch exists because starting a scan needs its own Wix
589
+ > permission, which the SEO scope does not grant. Set
590
+ > `enableAccessibilityTools: true` to opt in.
591
+ > _Contract read from the public Introduction, Sample Flows and agent Skill
592
+ > pages, and from the published SDK package
593
+ > `@wix/auto_sdk_accessibility_accessibility-scans`, whose own host mapping
594
+ > gives the REST prefix `/accessibility/v1/accessibility-scans` verbatim. The
595
+ > per-method reference pages are listed in the Wix menu but return 404, so no
596
+ > field name here was taken from a rendered page — verified 2026-08-29._
597
+
598
+ Wix runs the scan; these tools start it and read what it found.
599
+
600
+ | Tool | What it does | Approval | Validated |
601
+ |---|---|---|---|
602
+ | `wix_a11y_list_page_collections` | The page collections this site supports right now — pass a `collectionId` back unchanged | — | schema |
603
+ | `wix_a11y_run_scan` | Start a scan of one target: the site, one page, or one collection. Returns a scan id immediately | — | schema |
604
+ | `wix_a11y_get_scan` | Poll target: lifecycle, progress, aggregate totals. No pages, no findings | — | schema |
605
+ | `wix_a11y_get_latest_scan` | The most recent stored scan for a target, without starting a new one | — | schema |
606
+ | `wix_a11y_list_page_summaries` | Every discovered page, including clear ones and ones that failed to scan | — | schema |
607
+ | `wix_a11y_list_findings` | The actionable findings, filterable by page, rule, severity or category | — | schema |
608
+
609
+ **What makes a page clear, and why it takes three conditions.**
610
+
611
+ Wix states it plainly: a page is clear only when it has no findings, **its page
612
+ status is completed**, and **its coverage confirms the relevant checks ran**. A
613
+ page that failed to scan also reports zero findings — because nothing was read,
614
+ not because nothing is wrong. So every page summary carries `clear`, valued
615
+ `true`, `false` or `"unknown"`, rather than a bare count — with `clearFor`
616
+ naming the checks a `true` is true *for* — a scan reports `resultIsWhole`, and
617
+ `PARTIALLY_COMPLETED` never collapses into success. The
618
+ failure mode this family has is not data loss, it is an agent reporting a clean
619
+ site from an incomplete scan.
620
+
621
+ **Scans are asynchronous, and these tools do not wait.** `wix_a11y_run_scan`
622
+ returns a scan id; poll `wix_a11y_get_scan` after `suggestedPollIntervalSeconds`
623
+ (every 5 seconds when absent) until the status is terminal. A tool that blocked
624
+ for the length of a site scan would be the wrong shape for an agent turn.
625
+
626
+ **`attempt` is what tells a retry apart from a new scan.** Wix takes a
627
+ caller-generated idempotency key so a lost response cannot create duplicate
628
+ work, and requires a *new* key for a genuinely new scan. The plugin derives that
629
+ key from the site, the target and the `attempt` label you pass: reuse the label
630
+ to retry, change it to scan again. A random key per call would satisfy the
631
+ schema and make the whole guarantee inert.
632
+
633
+ **Limits worth knowing.** Runs are capped at 5 per minute per site; a multi-page
634
+ scan covers at most 300 pages and answers `SCAN_SIZE_LIMIT_EXCEEDED` beyond that
635
+ — after which the site must never be described as fully scanned. Stored results
636
+ are kept about six months, and `resultsExpirationDate` says exactly when. A
637
+ published site is scanned from its published version, an unpublished one from
638
+ its latest saved version — the opposite way round from the SEO tag reads above.
639
+
640
+ ---
641
+
553
642
  ### Design
554
643
 
555
644
  | Tool | What it does | Approval | Validated |
package/dist/config.js CHANGED
@@ -34,6 +34,15 @@ export const DEFAULT_APPROVAL_REQUIRED = [
34
34
  "wix_seo_delete_redirect",
35
35
  "wix_seo_bulk_create_redirects",
36
36
  "wix_seo_bulk_delete_redirects",
37
+ // Tranche 2 — writing tags. Each REPLACES what it writes: the previous
38
+ // value is gone, and a pattern write re-renders every page of its type.
39
+ "wix_seo_set_item_tags",
40
+ "wix_seo_bulk_set_item_tags",
41
+ "wix_seo_reset_item_tags",
42
+ "wix_seo_set_site_tags",
43
+ "wix_seo_set_pattern",
44
+ "wix_seo_create_pattern",
45
+ "wix_seo_reset_pattern",
37
46
  ];
38
47
  const VALID_LOG_LEVELS = ["debug", "info", "warn", "error"];
39
48
  /**
@@ -60,10 +69,16 @@ export function resolveConfig(cfg = {}) {
60
69
  enabled: cfg.enabled !== false,
61
70
  // OPT-IN, unlike every other tool group. The Wix SEO endpoints are in
62
71
  // Developer Preview: Wix may change them at any time and says they
63
- // "shouldn't be used on live sites". Four of these tools also write
72
+ // "shouldn't be used on live sites". Eleven of these tools also write
64
73
  // irreversibly to a live site the moment they succeed. Defaulting them on
65
74
  // would enable that on every existing install without anyone deciding to.
66
75
  enableSeoTools: cfg.enableSeoTools === true,
76
+ // A SEPARATE SWITCH, not a sub-case of the SEO one. These tools destroy
77
+ // nothing, but starting a scan needs its own Wix permission that the SEO
78
+ // scope does not grant — so an install that turned SEO on has not thereby
79
+ // decided anything about this, and folding the two together would enable a
80
+ // family of calls that would only fail with 403.
81
+ enableAccessibilityTools: cfg.enableAccessibilityTools === true,
67
82
  apiKey,
68
83
  accountId,
69
84
  allowedSiteIds,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;AAQ7D;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAI,KAAQ;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC,CAAiB,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;IACzB,sEAAsE;IACtE,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,6DAA6D;IAC7D,yBAAyB;IACzB,yBAAyB;IACzB,+BAA+B;IAC/B,+BAA+B;CAChC,CAAC;AAEF,MAAM,gBAAgB,GAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB,EAAE;IAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,aAAa,GACjB,eAAe,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;IAE3E,MAAM,QAAQ,GAAgB,gBAAgB,CAAC,QAAQ,CACrD,GAAG,CAAC,QAAuB,CAC5B;QACC,CAAC,CAAE,GAAG,CAAC,QAAwB;QAC/B,CAAC,CAAC,MAAM,CAAC;IAEX,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;QAC9B,sEAAsE;QACtE,mEAAmE;QACnE,oEAAoE;QACpE,0EAA0E;QAC1E,0EAA0E;QAC1E,cAAc,EAAE,GAAG,CAAC,cAAc,KAAK,IAAI;QAC3C,MAAM;QACN,SAAS;QACT,cAAc;QACd,aAAa;QACb,gBAAgB,EAAE,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAC3C,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,6DAA6D;AAQ7D;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAI,KAAQ;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QACvD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC,CAAiB,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,wBAAwB;IACxB,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;IACtB,qBAAqB;IACrB,yBAAyB;IACzB,qBAAqB;IACrB,sBAAsB;IACtB,yBAAyB;IACzB,sEAAsE;IACtE,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,6DAA6D;IAC7D,yBAAyB;IACzB,yBAAyB;IACzB,+BAA+B;IAC/B,+BAA+B;IAC/B,uEAAuE;IACvE,wEAAwE;IACxE,uBAAuB;IACvB,4BAA4B;IAC5B,yBAAyB;IACzB,uBAAuB;IACvB,qBAAqB;IACrB,wBAAwB;IACxB,uBAAuB;CACxB,CAAC;AAEF,MAAM,gBAAgB,GAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE3E;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB,EAAE;IAEzB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,aAAa,GACjB,eAAe,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;IAE3E,MAAM,QAAQ,GAAgB,gBAAgB,CAAC,QAAQ,CACrD,GAAG,CAAC,QAAuB,CAC5B;QACC,CAAC,CAAE,GAAG,CAAC,QAAwB;QAC/B,CAAC,CAAC,MAAM,CAAC;IAEX,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;QAC9B,sEAAsE;QACtE,mEAAmE;QACnE,sEAAsE;QACtE,0EAA0E;QAC1E,0EAA0E;QAC1E,cAAc,EAAE,GAAG,CAAC,cAAc,KAAK,IAAI;QAC3C,wEAAwE;QACxE,yEAAyE;QACzE,0EAA0E;QAC1E,2EAA2E;QAC3E,iDAAiD;QACjD,wBAAwB,EAAE,GAAG,CAAC,wBAAwB,KAAK,IAAI;QAC/D,MAAM;QACN,SAAS;QACT,cAAc;QACd,aAAa;QACb,gBAAgB,EAAE,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAC3C,QAAQ;KACT,CAAC;AACJ,CAAC"}