{"id":279870,"date":"2026-03-04T06:15:18","date_gmt":"2026-03-04T06:15:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/liaison-site-prober-viewer\/"},"modified":"2026-03-04T06:14:49","modified_gmt":"2026-03-04T06:14:49","slug":"liaison-site-prober-viewer","status":"publish","type":"plugin","link":"https:\/\/dv.wordpress.org\/plugins\/liaison-site-prober-viewer\/","author":18784765,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Liaison Site Prober Viewer","header_author":"liason","header_description":"Gutenberg Block for viewing logs in posts(out of admin panel)of liaison-site-prober plugin.","assets_banners_color":"","last_updated":"2026-03-04 06:14:49","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/liaisontw\/liaison-site-prober-viewer","header_author_uri":"https:\/\/github.com\/liaisontw\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":213,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"liaison","date":"2026-03-04 06:14:49"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"site-prober\/log-viewer":{"apiVersion":3,"name":"site-prober\/log-viewer","title":"Liaison Site Prober Viewer","category":"widgets","icon":"list-view","editorScript":"file:.\/index.js","style":"file:.\/style-index.css","editorStyle":"file:.\/index.css","description":"Display Site Prober logs in a table.","supports":{"html":false},"attributes":{"selectedPlugin":{"type":"string","default":""}},"start":".\/node_modules\/@wordpress\/scripts\/bin\/wp-scripts.js start --webpack-copy-php"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1220,148076,1955,257046],"plugin_category":[],"plugin_contributors":[200952],"plugin_business_model":[],"class_list":["post-279870","plugin","type-plugin","status-publish","hentry","plugin_tags-block","plugin_tags-gutenberg","plugin_tags-logs","plugin_tags-site-prober","plugin_contributors-liaison","plugin_committers-liaison"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/liaison-site-prober-viewer.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>A dynamic Gutenberg block for Liaison Site Prober that fetches and displays real-time \nsystem logs via the REST API. Engineered for performance and security, \nit provides a seamless way to visualize site activity without compromising page speed.<\/p>\n\n<h3>Architecture<\/h3>\n\n<p>Plugin structure:<\/p>\n\n<p>liaison-site-prober-viewer\/\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 edit.js          # Block editor UI\n\u2502   \u2514\u2500\u2500 editor.scss      # Block editor styles\n\u251c\u2500\u2500 build\/\n\u2502   \u2514\u2500\u2500 index.js         # Compiled block code\n\u251c\u2500\u2500 <strong>tests<\/strong>\/           # Jest unit tests\n\u251c\u2500\u2500 liaison-site-prober-viewer.php  # Plugin bootstrap\n\u2514\u2500\u2500 package.json \/ node_modules   # JS dependencies<\/p>\n\n<p>Architecture Diagram (textual):<\/p>\n\n<p>[Database: liaison-site-prober activity table]\n           |\n           v\n[WordPress REST API endpoint: wp-json\/site-prober\/v1\/logs]\n           |\n           v\n[Gutenberg dynamic block: liaison-site-prober-viewer]\n           |\n           v\n[Editor\/UI: renders logs in a table inside the block]<\/p>\n\n<h3>Data Flow<\/h3>\n\n<ol>\n<li>liaison-site-prober writes activity logs into the database.<\/li>\n<li>The REST API (<code>wp-json\/site-prober\/v1\/logs<\/code>) exposes logs in JSON format.<\/li>\n<li>The dynamic Gutenberg block (<code>Edit<\/code> component) calls <code>apiFetch({ path: '\/site-prober\/v1\/logs' })<\/code>.<\/li>\n<li>The block maintains internal state:\n\n<ul>\n<li><code>loading<\/code> \u2192 shows Spinner<\/li>\n<li><code>error<\/code> \u2192 shows Notice<\/li>\n<li><code>logs<\/code> \u2192 renders table rows<\/li>\n<\/ul><\/li>\n<li>Logs are displayed dynamically in the block editor and frontend (if rendered).<\/li>\n<\/ol>\n\n<h3>Why Dynamic Block<\/h3>\n\n<ul>\n<li>Logs are constantly changing; storing static markup would show stale data.<\/li>\n<li>Dynamic block fetches fresh logs each render.<\/li>\n<li>No need for manual updates in post content.<\/li>\n<li>Leverages REST API + React state for live data.<\/li>\n<\/ul>\n\n<h3>Security Considerations<\/h3>\n\n<ul>\n<li>Permissions:\n\n<ul>\n<li>REST endpoint uses <code>permission_callback<\/code> to restrict access.<\/li>\n<\/ul><\/li>\n<li>Sanitization:\n\n<ul>\n<li>All output in the block uses <code>esc_html()<\/code> to prevent XSS.<\/li>\n<\/ul><\/li>\n<li>Deactivation checks:\n\n<ul>\n<li>Plugin checks that <code>liaison-site-prober<\/code> is installed and meets minimum version.<\/li>\n<\/ul><\/li>\n<li>Avoid exposing sensitive data:\n\n<ul>\n<li>Only logs intended for admin or authorized users are returned.<\/li>\n<\/ul><\/li>\n<li>Use <code>wp_die()<\/code> for activation errors, preventing unsafe state.<\/li>\n<\/ul>\n\n<h3>Trade-offs \/ Limitations<\/h3>\n\n<ul>\n<li><p>Pros:<\/p>\n\n<ul>\n<li>Easy to use in Gutenberg editor.<\/li>\n<li>Always shows live logs.<\/li>\n<li>Minimal custom PHP; relies on WordPress REST API.<\/li>\n<\/ul><\/li>\n<li><p>Cons:<\/p>\n\n<ul>\n<li>Slightly slower in editor due to API fetch.<\/li>\n<li>Unit testing does not hit real database (mocked).<\/li>\n<li>Requires liaison-site-prober to be installed.<\/li>\n<li>Not fully decoupled from REST API; block depends on API stability.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h3>Testing<\/h3>\n\n<ul>\n<li>Run JS unit tests:\n  `bash\nnpm ci\nnpm test<\/li>\n<\/ul>\n\n<p>Block uses Jest with @wordpress\/scripts preset.<\/p>\n\n<p>REST API calls are mocked; tests cover loading, empty, and error states.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install <code>liaison-site-prober<\/code> plugin (v1.2.0+ required).<\/li>\n<li>Upload <code>liaison-site-prober-viewer<\/code> to <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate plugin in WordPress admin.<\/li>\n<li>Add \"Liaison Site Prober Viewer\" block to a post\/page.<\/li>\n<li>Logs will automatically load in the block editor.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<p>Initial release: dynamic Gutenberg block for viewing liaison-site-prober logs.<\/p>","raw_excerpt":"High-performance Gutenberg block to visualize Liaison Site Prober logs via REST API. Secure, dynamic, and optimized for speed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/279870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=279870"}],"author":[{"embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/liaison"}],"wp:attachment":[{"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=279870"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=279870"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=279870"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=279870"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=279870"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/dv.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=279870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}