PluginProbe
404 Solution / 4.3.0
404 Solution v4.3.0
4.3.5 4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.2.0 4.1.19 4.1.18 4.1.17 4.1.16 4.1.15 4.1.13 4.1.12 4.1.11 4.1.10 4.1.9 4.1.8 4.1.7 4.1.6 4.1.5 4.1.4 4.1.3 trunk 2.30.0 All 109 releases
404-solution / contracts / contracts.json

contracts.json in 404 Solution 4.3.0, at contracts/contracts.json

677 lines 22.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 {
2 "$schema": "~/.claude/templates/quality-gates/shared/contracts.schema.json",
3 "contracts": [
4 {
5 "id": "error-report",
6 "description": "Plugin error report with diagnostic context including debug log",
7 "schema": "schemas/report.schema.json",
8 "direction": "client-to-server",
9 "producer": {
10 "file": "includes/FeedbackTransport.php",
11 "test": [
12 "tests/FeedbackTransportPayloadTest.php",
13 "tests/FeedbackPayloadSchemaContractTest.php"
14 ]
15 },
16 "consumer": {
17 "file": "src/routes/reports.js",
18 "test": "tests/FeedbackPayloadSchemaContractTest.php"
19 },
20 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
21 "fixtures": {
22 "valid": [
23 "fixtures/error-report.valid.json"
24 ],
25 "invalid": [
26 "fixtures/error-report.invalid-missing-debug-log.json"
27 ]
28 }
29 },
30 {
31 "id": "heartbeat",
32 "description": "Periodic health check from plugin to server",
33 "schema": "schemas/report.schema.json",
34 "direction": "client-to-server",
35 "producer": {
36 "file": "includes/FeedbackTransport.php",
37 "test": "tests/FeedbackPayloadSchemaContractTest.php"
38 },
39 "consumer": {
40 "file": "src/routes/reports.js",
41 "test": "tests/FeedbackPayloadSchemaContractTest.php"
42 },
43 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
44 "fixtures": {
45 "valid": [
46 "fixtures/heartbeat.valid.json"
47 ],
48 "invalid": [
49 "fixtures/heartbeat.invalid-missing-version.json"
50 ]
51 }
52 },
53 {
54 "id": "uninstall-report",
55 "description": "Plugin uninstall feedback with reason and optional contact email",
56 "schema": "schemas/report.schema.json",
57 "direction": "client-to-server",
58 "producer": {
59 "file": "includes/FeedbackTransport.php",
60 "test": "tests/FeedbackPayloadSchemaContractTest.php"
61 },
62 "consumer": {
63 "file": "src/routes/reports.js",
64 "test": "tests/FeedbackPayloadSchemaContractTest.php"
65 },
66 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
67 "fixtures": {
68 "valid": [
69 "fixtures/uninstall-report.valid.json"
70 ],
71 "invalid": [
72 "fixtures/uninstall-report.invalid-missing-version.json"
73 ]
74 }
75 },
76 {
77 "id": "support-request",
78 "description": "User support request with message, reply email, and debug log excerpt",
79 "schema": "schemas/report.schema.json",
80 "direction": "client-to-server",
81 "producer": {
82 "file": "includes/ajax/Ajax_SupportRequest.php",
83 "test": [
84 "tests/FeedbackTransportSupportRequestPayloadTest.php",
85 "tests/FeedbackPayloadSchemaContractTest.php"
86 ]
87 },
88 "consumer": {
89 "file": "src/routes/reports.js",
90 "test": "tests/FeedbackPayloadSchemaContractTest.php"
91 },
92 "parityTest": "tests/FeedbackTransportE2ERoundTripTest.php",
93 "fixtures": {
94 "valid": [
95 "fixtures/support-request.valid.json"
96 ],
97 "invalid": [
98 "fixtures/support-request.invalid-missing-user-message.json"
99 ]
100 }
101 },
102 {
103 "id": "ajax-update-pagination",
104 "description": "Admin table pagination AJAX request",
105 "schema": "schemas/ajax-update-pagination.schema.json",
106 "direction": "client-to-server",
107 "producer": {
108 "file": "includes/ajax/view_updater_pagination.js",
109 "test": "tests-js/ajax-response-validation.test.js"
110 },
111 "consumer": {
112 "file": "includes/ajax/ViewUpdater.php",
113 "test": "tests-js/ajax-response-validation.test.js"
114 },
115 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
116 "fixtures": {
117 "valid": [
118 "fixtures/ajax-update-pagination.valid.json"
119 ],
120 "invalid": [
121 "fixtures/ajax-update-pagination.invalid-missing-subpage.json"
122 ]
123 }
124 },
125 {
126 "id": "ajax-refresh-stats-dashboard",
127 "description": "Dashboard stats refresh AJAX request",
128 "schema": "schemas/ajax-refresh-stats-dashboard.schema.json",
129 "direction": "client-to-server",
130 "producer": {
131 "file": "includes/ajax/view_updater_stats.js",
132 "test": "tests-js/ajax-response-validation.test.js"
133 },
134 "consumer": {
135 "file": "includes/ajax/ViewUpdater.php",
136 "test": "tests-js/ajax-response-validation.test.js"
137 },
138 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
139 "fixtures": {
140 "valid": [
141 "fixtures/ajax-refresh-stats.valid.json"
142 ],
143 "invalid": [
144 "fixtures/ajax-refresh-stats.invalid-missing-nonce.json"
145 ]
146 }
147 },
148 {
149 "id": "ajax-refresh-health-bar",
150 "description": "Health bar refresh AJAX request",
151 "schema": "schemas/ajax-refresh-health-bar.schema.json",
152 "direction": "client-to-server",
153 "producer": {
154 "file": "includes/ajax/view_updater_stats.js",
155 "test": "tests-js/ajax-response-validation.test.js"
156 },
157 "consumer": {
158 "file": "includes/ajax/ViewUpdater.php",
159 "test": "tests-js/ajax-response-validation.test.js"
160 },
161 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
162 "fixtures": {
163 "valid": [
164 "fixtures/ajax-refresh-health-bar.valid.json"
165 ],
166 "invalid": [
167 "fixtures/ajax-refresh-health-bar.invalid-missing-nonce.json"
168 ]
169 }
170 },
171 {
172 "id": "ajax-run-lazy-backfill",
173 "description": "Admin table page-load lazy denorm and sort-key backfill request",
174 "schema": "schemas/ajax-run-lazy-backfill.schema.json",
175 "direction": "client-to-server",
176 "producer": {
177 "file": "includes/ajax/view_updater_lazy_backfill.js",
178 "test": [
179 "tests/HealthBarAjaxDecouplingTest.php",
180 "tests-js/lazy-backfill-polling.test.js"
181 ]
182 },
183 "consumer": {
184 "file": "includes/ajax/Ajax_RunLazyBackfill.php",
185 "test": [
186 "tests/RedirectsDenormBackfillIntegrationTest.php",
187 "tests/AjaxRuntimeContractValidationTest.php"
188 ]
189 },
190 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
191 "fixtures": {
192 "valid": [
193 "fixtures/ajax-run-lazy-backfill.valid.json"
194 ],
195 "invalid": [
196 "fixtures/ajax-run-lazy-backfill.invalid-missing-nonce.json"
197 ]
198 }
199 },
200 {
201 "id": "ajax-support-request",
202 "description": "Support request FormData AJAX from admin modal",
203 "schema": "schemas/ajax-support-request.schema.json",
204 "direction": "client-to-server",
205 "producer": {
206 "file": "includes/ajax/SupportRequest.js",
207 "test": "tests-js/support-request-button.test.js"
208 },
209 "consumer": {
210 "file": "includes/ajax/Ajax_SupportRequest.php",
211 "test": "tests-js/support-request-button.test.js"
212 },
213 "parityTest": "tests-js/support-request-button.test.js",
214 "fixtures": {
215 "valid": [
216 "fixtures/ajax-support-request.valid.json"
217 ],
218 "invalid": [
219 "fixtures/ajax-support-request.invalid-bad-trigger.json"
220 ]
221 }
222 },
223 {
224 "id": "ajax-support-request-preview",
225 "description": "Support request preview read-only AJAX",
226 "schema": "schemas/ajax-support-request-preview.schema.json",
227 "direction": "client-to-server",
228 "producer": {
229 "file": "includes/ajax/SupportRequest.js",
230 "test": "tests-js/support-request-button.test.js"
231 },
232 "consumer": {
233 "file": "includes/ajax/Ajax_SupportRequestPreview.php",
234 "test": "tests-js/support-request-button.test.js"
235 },
236 "parityTest": "tests-js/support-request-button.test.js",
237 "fixtures": {
238 "valid": [
239 "fixtures/ajax-support-request-preview.valid.json"
240 ],
241 "invalid": [
242 "fixtures/ajax-support-request-preview.invalid-missing-trigger.json"
243 ]
244 }
245 },
246 {
247 "id": "ajax-cross-plugin-preview",
248 "description": "Cross-Plugin Importer preview AJAX from admin stats page",
249 "schema": "schemas/ajax-cross-plugin-preview.schema.json",
250 "direction": "client-to-server",
251 "producer": {
252 "file": "includes/ViewTrait_Stats.php",
253 "test": "tests/AjaxCrossPluginImporterContractTest.php"
254 },
255 "consumer": {
256 "file": "includes/ajax/Ajax_CrossPluginImporter.php",
257 "test": "tests/AjaxCrossPluginImporterContractTest.php"
258 },
259 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
260 "fixtures": {
261 "valid": [
262 "fixtures/ajax-cross-plugin-preview.valid.json"
263 ],
264 "invalid": [
265 "fixtures/ajax-cross-plugin-preview.invalid-bad-source.json"
266 ]
267 }
268 },
269 {
270 "id": "ajax-engine-profiles",
271 "description": "Engine Profile CRUD AJAX from admin engine profiles page",
272 "schema": "schemas/ajax-engine-profiles.schema.json",
273 "direction": "client-to-server",
274 "producer": {
275 "file": "includes/ajax/ajax-engine-profiles.js",
276 "test": "tests/AjaxEngineProfilesContractTest.php"
277 },
278 "consumer": {
279 "file": "includes/ajax/Ajax_EngineProfiles.php",
280 "test": "tests/AjaxEngineProfilesContractTest.php"
281 },
282 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
283 "fixtures": {
284 "valid": [
285 "fixtures/ajax-engine-profiles.valid.json"
286 ],
287 "invalid": [
288 "fixtures/ajax-engine-profiles.invalid-missing-nonce.json"
289 ]
290 }
291 },
292 {
293 "id": "ajax-update-options",
294 "description": "Plugin options update AJAX from admin settings page",
295 "schema": "schemas/ajax-update-options.schema.json",
296 "direction": "client-to-server",
297 "producer": {
298 "file": "includes/js/general.js",
299 "test": "tests/AjaxUpdateOptionsContractTest.php"
300 },
301 "consumer": {
302 "file": "includes/ajax/Ajax_Php.php",
303 "test": "tests/AjaxUpdateOptionsContractTest.php"
304 },
305 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
306 "fixtures": {
307 "valid": [
308 "fixtures/ajax-update-options.valid.json"
309 ],
310 "invalid": [
311 "fixtures/ajax-update-options.invalid-missing-nonce.json"
312 ]
313 }
314 },
315 {
316 "id": "ajax-restore-defaults",
317 "description": "Restore plugin settings to defaults AJAX from admin settings page",
318 "schema": "schemas/ajax-restore-defaults.schema.json",
319 "direction": "client-to-server",
320 "producer": {
321 "file": "includes/ajax/RestoreDefaults.js",
322 "test": "tests/SettingsRestoreDefaultsActionTest.php"
323 },
324 "consumer": {
325 "file": "includes/ajax/Ajax_RestoreDefaults.php",
326 "test": "tests/SettingsRestoreDefaultsActionTest.php"
327 },
328 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
329 "fixtures": {
330 "valid": [
331 "fixtures/ajax-restore-defaults.valid.json"
332 ],
333 "invalid": [
334 "fixtures/ajax-restore-defaults.invalid-missing-nonce.json"
335 ]
336 }
337 },
338 {
339 "id": "ajax-settings-mode-toggle",
340 "description": "Simple/Advanced settings mode toggle AJAX",
341 "schema": "schemas/ajax-settings-mode-toggle.schema.json",
342 "direction": "client-to-server",
343 "producer": {
344 "file": "includes/ajax/SettingsModeToggle.js",
345 "test": "tests/AjaxSettingsModeToggleTest.php"
346 },
347 "consumer": {
348 "file": "includes/ajax/Ajax_SettingsModeToggle.php",
349 "test": "tests/AjaxSettingsModeToggleTest.php"
350 },
351 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
352 "fixtures": {
353 "valid": [
354 "fixtures/ajax-settings-mode-toggle.valid.json"
355 ],
356 "invalid": [
357 "fixtures/ajax-settings-mode-toggle.invalid-bad-mode.json"
358 ]
359 }
360 },
361 {
362 "id": "ajax-suggestion-compute",
363 "description": "Background suggestion computation triggered server-side via wp_remote_post",
364 "schema": "schemas/ajax-suggestion-compute.schema.json",
365 "direction": "client-to-server",
366 "producer": {
367 "file": "includes/SpellChecker.php",
368 "test": "tests/AjaxSuggestionComputeContractTest.php"
369 },
370 "consumer": {
371 "file": "includes/ajax/Ajax_SuggestionCompute.php",
372 "test": "tests/AjaxSuggestionComputeContractTest.php"
373 },
374 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
375 "fixtures": {
376 "valid": [
377 "fixtures/ajax-suggestion-compute.valid.json"
378 ],
379 "invalid": [
380 "fixtures/ajax-suggestion-compute.invalid-missing-token.json"
381 ]
382 }
383 },
384 {
385 "id": "ajax-suggestion-polling",
386 "description": "Public-facing 404 page suggestion polling AJAX",
387 "schema": "schemas/ajax-suggestion-polling.schema.json",
388 "direction": "client-to-server",
389 "producer": {
390 "file": "includes/ajax/SuggestionPolling.js",
391 "test": "tests/AjaxSuggestionPollingJsonContractTest.php"
392 },
393 "consumer": {
394 "file": "includes/ajax/Ajax_SuggestionPolling.php",
395 "test": "tests/AjaxSuggestionPollingJsonContractTest.php"
396 },
397 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
398 "fixtures": {
399 "valid": [
400 "fixtures/ajax-suggestion-polling.valid.json"
401 ],
402 "invalid": [
403 "fixtures/ajax-suggestion-polling.invalid-missing-url.json"
404 ]
405 }
406 },
407 {
408 "id": "ajax-trash-link",
409 "description": "Trash/restore redirect AJAX from admin redirects table",
410 "schema": "schemas/ajax-trash-link.schema.json",
411 "direction": "client-to-server",
412 "producer": {
413 "file": "includes/ajax/trash_link_ajax.js",
414 "test": "tests/AjaxTrashLinkContractTest.php"
415 },
416 "consumer": {
417 "file": "includes/ajax/Ajax_TrashLink.php",
418 "test": "tests/AjaxTrashLinkContractTest.php"
419 },
420 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
421 "fixtures": {
422 "valid": [
423 "fixtures/ajax-trash-link.valid.json"
424 ],
425 "invalid": [
426 "fixtures/ajax-trash-link.invalid-missing-id.json"
427 ]
428 }
429 },
430 {
431 "id": "ajax-trend-data",
432 "description": "Trend analytics chart data AJAX from admin stats page",
433 "schema": "schemas/ajax-trend-data.schema.json",
434 "direction": "client-to-server",
435 "producer": {
436 "file": "includes/ViewTrait_Stats.php",
437 "test": "tests/AjaxTrendDataContractTest.php"
438 },
439 "consumer": {
440 "file": "includes/ajax/Ajax_TrendData.php",
441 "test": "tests/AjaxTrendDataContractTest.php"
442 },
443 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
444 "fixtures": {
445 "valid": [
446 "fixtures/ajax-trend-data.valid.json"
447 ],
448 "invalid": [
449 "fixtures/ajax-trend-data.invalid-missing-nonce.json"
450 ]
451 }
452 },
453 {
454 "id": "ajax-admin-endpoint-support-helper",
455 "description": "Shared admin AJAX response envelope emitted by Ajax_AdminEndpointSupport for every admin endpoint",
456 "schema": "schemas/ajax-admin-endpoint-support-helper.schema.json",
457 "direction": "server-to-client",
458 "consumer": {
459 "file": "includes/ajax/Ajax_AdminEndpointSupport.php",
460 "test": "tests/ViewQueryFailureDiagnosticsTest.php"
461 },
462 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
463 "fixtures": {
464 "valid": [
465 "fixtures/ajax-admin-endpoint-support-helper.valid.json"
466 ],
467 "invalid": [
468 "fixtures/ajax-admin-endpoint-support-helper.invalid-missing-success.json"
469 ]
470 }
471 },
472 {
473 "id": "ajax-get-pagination-links-handler",
474 "description": "Extracted PHP handler for admin table pagination AJAX",
475 "schema": "schemas/ajax-update-pagination.schema.json",
476 "direction": "client-to-server",
477 "producer": {
478 "file": "includes/ajax/view_updater_pagination.js",
479 "test": "tests-js/ajax-response-validation.test.js"
480 },
481 "consumer": {
482 "file": "includes/ajax/Ajax_GetPaginationLinks.php",
483 "test": "tests/ViewUpdaterAjaxFetchRenderContractTest.php"
484 },
485 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
486 "fixtures": {
487 "valid": [
488 "fixtures/ajax-update-pagination.valid.json"
489 ],
490 "invalid": [
491 "fixtures/ajax-update-pagination.invalid-missing-subpage.json"
492 ]
493 }
494 },
495 {
496 "id": "ajax-refresh-admin-nonces-handler",
497 "description": "Extracted PHP handler for refreshing admin AJAX nonces",
498 "schema": "schemas/ajax-refresh-admin-nonces.schema.json",
499 "direction": "server-to-client",
500 "consumer": {
501 "file": "includes/ajax/Ajax_RefreshAdminNonces.php",
502 "test": "tests/AjaxRefreshAdminNoncesTest.php"
503 },
504 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
505 "fixtures": {
506 "valid": [
507 "fixtures/ajax-refresh-admin-nonces.valid.json"
508 ],
509 "invalid": [
510 "fixtures/ajax-refresh-admin-nonces.invalid-missing-data.json"
511 ]
512 }
513 },
514 {
515 "id": "ajax-refresh-health-bar-handler",
516 "description": "Extracted PHP handler for health bar refresh AJAX",
517 "schema": "schemas/ajax-refresh-health-bar.schema.json",
518 "direction": "client-to-server",
519 "producer": {
520 "file": "includes/ajax/view_updater_stats.js",
521 "test": "tests-js/ajax-response-validation.test.js"
522 },
523 "consumer": {
524 "file": "includes/ajax/Ajax_RefreshHealthBar.php",
525 "test": "tests/HealthBarAjaxDecouplingTest.php"
526 },
527 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
528 "fixtures": {
529 "valid": [
530 "fixtures/ajax-refresh-health-bar.valid.json"
531 ],
532 "invalid": [
533 "fixtures/ajax-refresh-health-bar.invalid-missing-nonce.json"
534 ]
535 }
536 },
537 {
538 "id": "ajax-refresh-stats-dashboard-handler",
539 "description": "Extracted PHP handler for dashboard stats refresh AJAX",
540 "schema": "schemas/ajax-refresh-stats-dashboard.schema.json",
541 "direction": "client-to-server",
542 "producer": {
543 "file": "includes/ajax/view_updater_stats.js",
544 "test": "tests-js/ajax-response-validation.test.js"
545 },
546 "consumer": {
547 "file": "includes/ajax/Ajax_RefreshStatsDashboard.php",
548 "test": "tests/ViewUpdaterAjaxRefreshStatsDashboardContractTest.php"
549 },
550 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
551 "fixtures": {
552 "valid": [
553 "fixtures/ajax-refresh-stats.valid.json"
554 ],
555 "invalid": [
556 "fixtures/ajax-refresh-stats.invalid-missing-nonce.json"
557 ]
558 }
559 },
560 {
561 "id": "ajax-uninstall-prefs-handler",
562 "description": "Extracted PHP handler for uninstall/deactivation preference AJAX",
563 "schema": "schemas/ajax-uninstall-prefs.schema.json",
564 "direction": "client-to-server",
565 "producer": {
566 "file": "includes/js/uninstall-modal.js",
567 "test": "tests-js/ajax-response-validation.test.js"
568 },
569 "consumer": {
570 "file": "includes/ajax/Ajax_UninstallPrefs.php",
571 "test": "tests/UninstallPreferencesMultisiteTest.php"
572 },
573 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
574 "fixtures": {
575 "valid": [
576 "fixtures/ajax-uninstall-prefs.valid.json"
577 ],
578 "invalid": [
579 "fixtures/ajax-uninstall-prefs.invalid-missing-nonce.json"
580 ]
581 }
582 },
583 {
584 "id": "ajax-load-gsc-section",
585 "description": "Deferred Google Search Console admin section AJAX. Loaded on demand from the Options page so the GSC OAuth + remote-fetch cost does not block initial admin render.",
586 "schema": "schemas/ajax-load-gsc-section.schema.json",
587 "direction": "client-to-server",
588 "producer": {
589 "file": "includes/js/settingsDeferred.js",
590 "test": "tests/AjaxNullParamsAdversarialTest.php"
591 },
592 "consumer": {
593 "file": "includes/ajax/Ajax_LoadGscSection.php",
594 "test": "tests/AjaxNullParamsAdversarialTest.php"
595 },
596 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
597 "fixtures": {
598 "valid": [
599 "fixtures/ajax-load-gsc-section.valid.json"
600 ],
601 "invalid": [
602 "fixtures/ajax-load-gsc-section.invalid-missing-nonce.json"
603 ]
604 }
605 },
606 {
607 "id": "ajax-redirect-destination-autocomplete",
608 "description": "Autocomplete suggestions for the redirect-destination dropdown in the redirect edit modal.",
609 "schema": "schemas/ajax-redirect-destination-autocomplete.schema.json",
610 "direction": "client-to-server",
611 "producer": {
612 "file": "includes/ajax/redirect_to_ajax.js",
613 "test": "tests/AjaxNullParamsAdversarialTest.php"
614 },
615 "consumer": {
616 "file": "includes/ajax/Ajax_RedirectDestinationAutocomplete.php",
617 "test": "tests/AjaxNullParamsAdversarialTest.php"
618 },
619 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
620 "fixtures": {
621 "valid": [
622 "fixtures/ajax-redirect-destination-autocomplete.valid.json"
623 ],
624 "invalid": [
625 "fixtures/ajax-redirect-destination-autocomplete.invalid-bad-include-flag.json"
626 ]
627 }
628 },
629 {
630 "id": "ajax-update-options-handler",
631 "description": "Admin-page options update AJAX (extracted from Ajax_Php for parity with other Ajax_*.php handlers).",
632 "schema": "schemas/ajax-update-options.schema.json",
633 "direction": "client-to-server",
634 "producer": {
635 "file": "includes/js/general.js",
636 "test": "tests/AjaxNullParamsAdversarialTest.php"
637 },
638 "consumer": {
639 "file": "includes/ajax/Ajax_UpdateOptions.php",
640 "test": "tests/AjaxNullParamsAdversarialTest.php"
641 },
642 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
643 "fixtures": {
644 "valid": [
645 "fixtures/ajax-update-options.valid.json"
646 ],
647 "invalid": [
648 "fixtures/ajax-update-options.invalid-missing-nonce.json"
649 ]
650 }
651 },
652 {
653 "id": "ajax-view-logs",
654 "description": "Per-redirect log view AJAX. Returns the formatted hit log for a specific redirect ID for the admin logs modal.",
655 "schema": "schemas/ajax-view-logs.schema.json",
656 "direction": "client-to-server",
657 "producer": {
658 "file": "includes/ajax/search_logs_ajax.js",
659 "test": "tests/AjaxNullParamsAdversarialTest.php"
660 },
661 "consumer": {
662 "file": "includes/ajax/Ajax_ViewLogs.php",
663 "test": "tests/AjaxNullParamsAdversarialTest.php"
664 },
665 "parityTest": "tests/AjaxRuntimeContractValidationTest.php",
666 "fixtures": {
667 "valid": [
668 "fixtures/ajax-view-logs.valid.json"
669 ],
670 "invalid": [
671 "fixtures/ajax-view-logs.invalid-missing-nonce.json"
672 ]
673 }
674 }
675 ]
676 }
677