{"master":{"name":"NeoWiki","version":"0.0.0-alpha","author":["[https:\/\/Professional.Wiki\/ Professional Wiki]","[https:\/\/www.EntropyWins.wtf\/mediawiki Jeroen De Dauw]"],"url":"https:\/\/github.com\/ProfessionalWiki\/NeoWiki","license-name":"GPL-2.0-or-later","descriptionmsg":"neowiki-description","requires":{"MediaWiki":">= 1.43.0"},"callback":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::onExtensionRegistration","Hooks":{"MediaWikiServices":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onMediaWikiServices","LoadExtensionSchemaUpdates":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onLoadExtensionSchemaUpdates","ParserOptionsRegister":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onParserOptionsRegister","PageRenderingHash":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onPageRenderingHash","ParserFirstCallInit":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onParserFirstCallInit","RevisionFromEditComplete":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onRevisionFromEditComplete","SearchIndexFields":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onSearchIndexFields","SearchDataForIndex2":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onSearchDataForIndex2","PageDeleteComplete":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onPageDeleteComplete","PageUndeleteComplete":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onPageUndeleteComplete","AfterImportPage":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onAfterImportPage","ArticleRevisionVisibilitySet":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onArticleRevisionVisibilitySet","BlockIpComplete":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onBlockIpComplete","UnblockUserComplete":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onUnblockUserComplete","CodeEditorGetPageLanguage":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onCodeEditorGetPageLanguage","BeforePageDisplay":["ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onBeforePageDisplay","ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onConfigPageBeforePageDisplay"],"SpecialPage_initList":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onSpecialPageInitList","ContentModelCanBeUsedOn":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onContentModelCanBeUsedOn","ContentHandlerDefaultModelFor":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onContentHandlerDefaultModelFor","EditFilter":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onEditFilter","AlternateEdit":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onAlternateEdit","EditFormPreloadText":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onEditFormPreloadText","SidebarBeforeOutput":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onSidebarBeforeOutput","SkinTemplateNavigation::Universal":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onSkinTemplateNavigationUniversal","ScribuntoExternalLibraries":"ProfessionalWiki\\NeoWiki\\EntryPoints\\NeoWikiHooks::onScribuntoExternalLibraries"},"JobClasses":{"neowikiGraphRebuild":{"class":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Jobs\\GraphRebuildJob","needsPage":false},"neowikiRebuildLastEditorPages":{"class":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Jobs\\RebuildLastEditorPagesJob","needsPage":false}},"ContentHandlers":{"NeoWikiSubject":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Content\\SubjectContentHandler","NeoWikiSchema":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Content\\SchemaContentHandler","NeoWikiLayout":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Content\\LayoutContentHandler","NeoWikiMapping":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Content\\MappingContentHandler"},"SearchMappings":{"SearchMySQL":{"class":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Search\\SearchMySQLWithSubjects"},"SearchSqlite":{"class":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Search\\SearchSqliteWithSubjects"},"MediaWiki\\Search\\SearchMySQL":{"class":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Search\\SearchMySQLWithSubjects"},"MediaWiki\\Search\\SearchSqlite":{"class":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Search\\SearchSqliteWithSubjects"}},"namespaces":[{"id":7474,"constant":"NS_NEOWIKI_SCHEMA","name":"Schema","defaultcontentmodel":"NeoWikiSchema","subpages":false,"content":false,"movable":false,"protection":"neowiki-schema-edit"},{"id":7475,"constant":"NS_NEOWIKI_SCHEMA_TALK","name":"Schema_talk"},{"id":7476,"constant":"NS_NEOWIKI_LAYOUT","name":"Layout","defaultcontentmodel":"NeoWikiLayout","subpages":false,"content":false,"movable":false,"protection":"neowiki-layout-edit"},{"id":7477,"constant":"NS_NEOWIKI_LAYOUT_TALK","name":"Layout_talk"},{"id":7478,"constant":"NS_NEOWIKI_MAPPING","name":"Mapping","defaultcontentmodel":"NeoWikiMapping","subpages":false,"content":false,"movable":false,"protection":"neowiki-mapping-edit"},{"id":7479,"constant":"NS_NEOWIKI_MAPPING_TALK","name":"Mapping_talk"}],"AvailableRights":["neowiki-schema-edit","neowiki-layout-edit","neowiki-mapping-edit","neowiki-query","neowiki-admin"],"GroupPermissions":{"*":{"neowiki-query":true},"user":{"neowiki-schema-edit":true,"neowiki-layout-edit":true,"neowiki-mapping-edit":true},"sysop":{"neowiki-admin":true}},"GrantPermissions":{"basic":{"neowiki-query":true},"editpage":{"neowiki-schema-edit":true,"neowiki-layout-edit":true,"neowiki-mapping-edit":true}},"RateLimits":{"neowiki-query":{"anon":[10,60],"user":[60,60],"bot":[1000,60]}},"SpecialPages":{"NeoJson":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialNeoJson","Schemas":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialSchemas","Layouts":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialLayouts","Mappings":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialMappings","GraphStores":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialGraphStores","CreateSubject":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialCreateSubject","Subject":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialSubject","NeoWiki":"ProfessionalWiki\\NeoWiki\\EntryPoints\\SpecialPages\\SpecialNeoWiki"},"Actions":{"subjects":"ProfessionalWiki\\NeoWiki\\EntryPoints\\Actions\\SubjectsAction"},"config":{"NeoWikiEnableDevelopmentUI":{"description":"Whether development UIs should be enabled","value":false},"NeoWikiEnableInWikiConfig":{"description":"Whether NeoWiki settings may also be set on the MediaWiki:NeoWiki JSON configuration page, which requires the editinterface and editsitejson rights to edit. When false, that page is never given the JSON content model, validated, or read, so only LocalSettings.php applies. The page exposes NeoWikiDereferenceSubjectsToHostingPage and NeoWikiAutoRenderMainSubject; its values take precedence over LocalSettings.php.","value":true},"NeoWikiEnableLua":{"description":"Whether NeoWiki registers its Lua library (mw.neowiki) with Scribunto. When false, requiring the library fails like any missing module. The parser functions are unaffected.","value":true},"NeoWikiEnforceValidation":{"description":"Whether write endpoints reject edits that introduce new error-severity violations. Warnings never block. When false, violations are surfaced in responses but writes always persist.","value":false},"NeoWikiAutoRenderMainSubject":{"description":"Whether a page's Main Subject is automatically rendered (as an infobox) on content pages.","value":true},"NeoWikiValidationDebounceMs":{"description":"Debounce delay in milliseconds before the subject editor sends a server-side dry-run validation request. 0 disables the timer, so validation only runs on blur or pre-save.","value":300},"NeoWikiQueryLimits":{"description":"Per-tier per-query resource caps. Keys: 'default' (users without apihighlimits) and 'expensive' (users with apihighlimits). Each value: { timeoutSeconds, maxRows }.","value":{"default":{"timeoutSeconds":30,"maxRows":5000},"expensive":{"timeoutSeconds":300,"maxRows":50000}}},"NeoWikiNeo4jInternalWriteUrl":{"description":"Bolt URL NeoWiki uses to write the graph projection to Neo4j.","value":null},"NeoWikiNeo4jInternalReadUrl":{"description":"Bolt URL NeoWiki uses for read and query traffic against Neo4j; should use a least-privilege Neo4j user.","value":null},"NeoWikiRdfBaseUri":{"description":"Base URI under which the RDF export mints all NeoWiki IRIs (entity, property, schema, page, etc.). When null, defaults to the wiki's canonical URL ($wgCanonicalServer). Wiki-level on purpose, so sibling projections describe the same entities with identical IRIs.","value":null},"NeoWikiDereferenceSubjectsToHostingPage":{"description":"Whether a browser dereferencing a Subject's concept URI (Accept: text\/html) is sent to the plain page the Subject is stored on. False by default, which sends it to Special:Subject, the view of that one Subject.","value":false},"NeoWikiAutoRebuildOnMappingChange":{"description":"Whether saving, deleting or restoring a Mapping page automatically rebuilds, in the background, every configured graph store that holds that Mapping's projection. False by default: such a rebuild reprojects every page on the wiki into that store, which on a large wiki is substantial work an administrator should choose to take on. While it is false, Special:GraphStores reports such a store as stale and offers the rebuild.","value":false},"NeoWikiSparqlStores":{"description":"SPARQL 1.1 graph stores to keep in sync with page changes and to query, in addition to any Neo4j backend. A list of objects, each with: 'updateUrl' (required, the store's SPARQL 1.1 Update endpoint, e.g. a QLever instance); 'queryUrl' (optional, the store's SPARQL 1.1 Query endpoint the read surfaces use; defaults to 'updateUrl', which is correct for QLever where the two are the same); 'accessToken' (optional, sent as an HTTP Bearer token on both update and query requests, e.g. for a QLever access token or a read-protected endpoint); 'projection' (optional, the RDF vocabulary written to the store: 'native' by default, or any configured Mapping target); and 'name' (optional, what to call this store when rebuilding it, defaulting to the projection, and unique across entries). The query surfaces (the {{#sparql_raw}} parser function, nw.sparqlQuery() in Lua, and POST \/neowiki\/v0\/query\/sparql) target the first configured store. Works with QLever and any SPARQL 1.1 store. Empty by default.","value":[]}},"ExtensionMessagesFiles":{"NeoWikiAliases":"i18n\/_Aliases.php","NeoWikiNamespaces":"i18n\/_Namespaces.php","NeoWikiMagic":"i18n\/_Magic.php"},"RestRoutes":[{"path":"\/neowiki\/v0\/page\/{pageId}\/mainSubject","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newCreateMainSubjectApi"},{"path":"\/neowiki\/v0\/page\/{pageId}\/subjects","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newCreateOtherSubjectApi"},{"path":"\/neowiki\/v0\/page\/{pageId}\/subjects","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetPageSubjectsApi"},{"path":"\/neowiki\/v0\/page\/{pageId}\/editNotices","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetSubjectEditNoticesApi"},{"path":"\/neowiki\/v0\/page\/{pageId}\/rdf","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newExportPageRdfApi"},{"path":"\/neowiki\/v0\/page\/{pageId}\/mainSubject","method":["PUT"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newSetMainSubjectApi"},{"path":"\/neowiki\/v0\/page\/{pageId}\/subjectsOrdering","method":["PUT"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newSetSubjectsOrderingApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetSubjectApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}","method":["PUT"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newReplaceSubjectApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}","method":["DELETE"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newDeleteSubjectApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}\/move","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newMoveSubjectApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}\/statements\/{propertyName}","method":["PUT"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newSetStatementApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}\/statements\/{propertyName}","method":["DELETE"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newRemoveStatementApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}\/rdf","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newExportSubjectRdfApi"},{"path":"\/neowiki\/v0\/entity\/{subjectId}","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newResolveSubjectIriApi"},{"path":"\/neowiki\/v0\/schema\/{schemaName}","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetSchemaApi"},{"path":"\/neowiki\/v0\/layout\/{layoutName}","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetLayoutApi"},{"path":"\/neowiki\/v0\/layouts","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetLayoutSummariesApi"},{"path":"\/neowiki\/v0\/schema-names\/{search}","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetSchemaNamesApi"},{"path":"\/neowiki\/v0\/subject-labels","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetSubjectLabelsApi"},{"path":"\/neowiki\/v0\/schemas","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetSchemaSummariesApi"},{"path":"\/neowiki\/v0\/mappings","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetMappingSummariesApi"},{"path":"\/neowiki\/v0\/subject-ids","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newMintSubjectIdsApi"},{"path":"\/neowiki\/v0\/subjects","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newCreateSubjectPageApi"},{"path":"\/neowiki\/v0\/subject\/validate","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newValidateSubjectApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}\/validate","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newValidateSubjectUpdateApi"},{"path":"\/neowiki\/v0\/graph-stores","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetGraphStoresApi"},{"path":"\/neowiki\/v0\/graph-stores\/{name}\/rebuild","method":["POST"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newStartGraphStoreRebuildApi"},{"path":"\/neowiki\/v0\/graph-stores\/{name}\/rebuild","method":["DELETE"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newCancelGraphStoreRebuildApi"},{"path":"\/neowiki\/v0\/subject\/{subjectId}\/referencingSubjects","method":["GET"],"factory":"ProfessionalWiki\\NeoWiki\\NeoWikiExtension::newGetReferencingSubjectsApi"}],"repository":"https:\/\/github.com\/ProfessionalWiki\/NeoWiki.git"}}