@jwilleke/ngdpbase-types 0.0.0 → 5.18.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.
Files changed (302) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +16 -2
  3. package/lib/packages/ngdpbase-types/index.d.ts +32 -0
  4. package/lib/packages/ngdpbase-types/testing.d.ts +43 -0
  5. package/lib/packages/ngdpbase-types/testing.js +53 -0
  6. package/lib/src/cache/CacheDependencies.d.ts +50 -0
  7. package/lib/src/cache/CacheDependencies.js +50 -0
  8. package/lib/src/cache/ICacheAdapter.d.ts +86 -0
  9. package/lib/src/cache/RegionCache.d.ts +171 -0
  10. package/lib/src/context/ActorContext.d.ts +48 -0
  11. package/lib/src/context/ActorContext.js +33 -0
  12. package/lib/src/context/ApiContext.d.ts +194 -0
  13. package/lib/src/context/ApiContext.js +273 -0
  14. package/lib/src/context/BaseContext.d.ts +110 -0
  15. package/lib/src/context/BaseContext.js +143 -0
  16. package/lib/src/context/JobContext.d.ts +153 -0
  17. package/lib/src/context/JobContext.js +144 -0
  18. package/lib/src/context/WikiContext.d.ts +404 -0
  19. package/lib/src/context/bootActions.d.ts +64 -0
  20. package/lib/src/context/bootActions.js +111 -0
  21. package/lib/src/converters/HtmlConverter.d.ts +70 -0
  22. package/lib/src/converters/IContentConverter.d.ts +94 -0
  23. package/lib/src/converters/JSPWikiConverter.d.ts +117 -0
  24. package/lib/src/converters/conversionWarning.d.ts +15 -0
  25. package/lib/src/converters/ncm/bridge.d.ts +22 -0
  26. package/lib/src/converters/ncm/existing.d.ts +23 -0
  27. package/lib/src/converters/ncm/fix/blocks.d.ts +89 -0
  28. package/lib/src/converters/ncm/fix/bulletMarkers.d.ts +21 -0
  29. package/lib/src/converters/ncm/fix/index.d.ts +36 -0
  30. package/lib/src/converters/ncm/fix/jspwikiBullets.d.ts +20 -0
  31. package/lib/src/converters/ncm/fix/jspwikiCodeMarkers.d.ts +38 -0
  32. package/lib/src/converters/ncm/fix/jspwikiHeadings.d.ts +25 -0
  33. package/lib/src/converters/ncm/fix/jspwikiIndent.d.ts +24 -0
  34. package/lib/src/converters/ncm/fix/jspwikiInsert.d.ts +21 -0
  35. package/lib/src/converters/ncm/fix/jspwikiItalic.d.ts +29 -0
  36. package/lib/src/converters/ncm/fix/jspwikiLinkLeftovers.d.ts +27 -0
  37. package/lib/src/converters/ncm/fix/moreInformationFooter.d.ts +25 -0
  38. package/lib/src/converters/ncm/fix/styleClosers.d.ts +25 -0
  39. package/lib/src/converters/ncm/fix/tightenLists.d.ts +30 -0
  40. package/lib/src/converters/ncm/fix/types.d.ts +33 -0
  41. package/lib/src/converters/ncm/footnotes.d.ts +39 -0
  42. package/lib/src/converters/ncm/images.d.ts +49 -0
  43. package/lib/src/converters/ncm/index.d.ts +20 -0
  44. package/lib/src/converters/ncm/links.d.ts +21 -0
  45. package/lib/src/converters/ncm/normalize.d.ts +39 -0
  46. package/lib/src/converters/ncm/placeholder.d.ts +25 -0
  47. package/lib/src/converters/ncm/tables.d.ts +36 -0
  48. package/lib/src/converters/ncm/types.d.ts +42 -0
  49. package/lib/src/http/egressPolicy.d.ts +52 -0
  50. package/lib/src/http/guardedFetch.d.ts +89 -0
  51. package/lib/src/http/guardedFetch.js +113 -0
  52. package/lib/src/http/guardedLookup.d.ts +48 -0
  53. package/lib/src/http/guardedLookup.js +73 -0
  54. package/lib/src/http/ssrf.d.ts +83 -0
  55. package/lib/src/http/ssrf.js +311 -0
  56. package/lib/src/mail/MailProvider.d.ts +36 -0
  57. package/lib/src/mail/NodemailerMailProvider.d.ts +26 -0
  58. package/lib/src/managers/AddonsManager.d.ts +691 -0
  59. package/lib/src/managers/AgentTokenManager.d.ts +269 -0
  60. package/lib/src/managers/AssetManager.d.ts +116 -0
  61. package/lib/src/managers/AttachmentManager.d.ts +1032 -0
  62. package/lib/src/managers/AuthManager.d.ts +1257 -0
  63. package/lib/src/managers/BackgroundJobManager.d.ts +434 -0
  64. package/lib/src/managers/BaseManager.d.ts +391 -0
  65. package/lib/src/managers/BaseManager.js +415 -0
  66. package/lib/src/managers/CacheManager.d.ts +159 -0
  67. package/lib/src/managers/CatalogManager.d.ts +235 -0
  68. package/lib/src/managers/CommentManager.d.ts +75 -0
  69. package/lib/src/managers/ConfigurationManager.d.ts +747 -0
  70. package/lib/src/managers/DatabaseManager.d.ts +89 -0
  71. package/lib/src/managers/DatabaseManager.js +236 -0
  72. package/lib/src/managers/EmailManager.d.ts +47 -0
  73. package/lib/src/managers/ExportManager.d.ts +129 -0
  74. package/lib/src/managers/ExportManager.js +420 -0
  75. package/lib/src/managers/FootnoteManager.d.ts +118 -0
  76. package/lib/src/managers/MediaManager.d.ts +279 -0
  77. package/lib/src/managers/MetricsManager.d.ts +89 -0
  78. package/lib/src/managers/NotificationManager.d.ts +165 -0
  79. package/lib/src/managers/OidcManager.d.ts +210 -0
  80. package/lib/src/managers/OrganizationManager.d.ts +107 -0
  81. package/lib/src/managers/PageManager.d.ts +1645 -0
  82. package/lib/src/managers/PersonManager.d.ts +48 -0
  83. package/lib/src/managers/PluginManager.d.ts +179 -0
  84. package/lib/src/managers/PluginManager.js +393 -0
  85. package/lib/src/managers/PolicyEvaluator.d.ts +213 -0
  86. package/lib/src/managers/RenderingManager.d.ts +358 -0
  87. package/lib/src/managers/RoleManager.d.ts +134 -0
  88. package/lib/src/managers/SearchManager.d.ts +402 -0
  89. package/lib/src/managers/ShareManager.d.ts +251 -0
  90. package/lib/src/managers/TemplateManager.d.ts +176 -0
  91. package/lib/src/managers/ThemeManager.d.ts +56 -0
  92. package/lib/src/managers/UserManager.d.ts +480 -0
  93. package/lib/src/managers/ValidationManager.d.ts +426 -0
  94. package/lib/src/managers/VariableManager.d.ts +145 -0
  95. package/lib/src/middleware/csrf.d.ts +3 -0
  96. package/lib/src/parsers/LinkParser.d.ts +457 -0
  97. package/lib/src/parsers/MarkupParser.d.ts +769 -0
  98. package/lib/src/parsers/context/ParseContext.d.ts +314 -0
  99. package/lib/src/parsers/data/emoji-map.d.ts +18 -0
  100. package/lib/src/parsers/dom/DOMBuilder.d.ts +210 -0
  101. package/lib/src/parsers/dom/DOMParser.d.ts +252 -0
  102. package/lib/src/parsers/dom/Tokenizer.d.ts +358 -0
  103. package/lib/src/parsers/dom/WikiDocument.d.ts +272 -0
  104. package/lib/src/parsers/dom/handlers/DOMLinkHandler.d.ts +260 -0
  105. package/lib/src/parsers/dom/handlers/DOMPluginHandler.d.ts +212 -0
  106. package/lib/src/parsers/dom/handlers/DOMVariableHandler.d.ts +171 -0
  107. package/lib/src/parsers/filters/BaseFilter.d.ts +269 -0
  108. package/lib/src/parsers/filters/FilterChain.d.ts +320 -0
  109. package/lib/src/parsers/handlers/BaseSyntaxHandler.d.ts +331 -0
  110. package/lib/src/parsers/handlers/HandlerRegistry.d.ts +225 -0
  111. package/lib/src/parsers/handlers/JSPWikiPreprocessor.d.ts +89 -0
  112. package/lib/src/parsers/handlers/LinkParserHandler.d.ts +80 -0
  113. package/lib/src/parsers/handlers/PluginSyntaxHandler.d.ts +78 -0
  114. package/lib/src/parsers/handlers/WikiFormHandler.d.ts +149 -0
  115. package/lib/src/parsers/handlers/WikiTagHandler.d.ts +125 -0
  116. package/lib/src/parsers/jspwikiTableRow.d.ts +39 -0
  117. package/lib/src/parsers/styleBlockSyntax.d.ts +14 -0
  118. package/lib/src/plugins/types.d.ts +79 -0
  119. package/lib/src/providers/AgentTokenAuthProvider.d.ts +40 -0
  120. package/lib/src/providers/AuthentikBearerAuthProvider.d.ts +75 -0
  121. package/lib/src/providers/BaseAttachmentProvider.d.ts +197 -0
  122. package/lib/src/providers/BaseAuthProvider.d.ts +220 -0
  123. package/lib/src/providers/BaseCacheProvider.d.ts +140 -0
  124. package/lib/src/providers/BaseCredentialsProvider.d.ts +84 -0
  125. package/lib/src/providers/BaseDatabaseProvider.d.ts +22 -0
  126. package/lib/src/providers/BaseDatabaseProvider.js +12 -0
  127. package/lib/src/providers/BaseLoggingProvider.d.ts +68 -0
  128. package/lib/src/providers/BaseLoggingProvider.js +37 -0
  129. package/lib/src/providers/BaseMediaProvider.d.ts +308 -0
  130. package/lib/src/providers/BasePageProvider.d.ts +337 -0
  131. package/lib/src/providers/BaseProvider.d.ts +98 -0
  132. package/lib/src/providers/BaseProvider.js +74 -0
  133. package/lib/src/providers/BaseSearchProvider.d.ts +362 -0
  134. package/lib/src/providers/BasicAttachmentProvider.d.ts +599 -0
  135. package/lib/src/providers/CloudflareAccessAuthProvider.d.ts +72 -0
  136. package/lib/src/providers/FileCredentialsProvider.d.ts +33 -0
  137. package/lib/src/providers/FileJobStateProvider.d.ts +58 -0
  138. package/lib/src/providers/FileLoggingProvider.d.ts +43 -0
  139. package/lib/src/providers/FileLoggingProvider.js +120 -0
  140. package/lib/src/providers/FileOidcAdapter.d.ts +25 -0
  141. package/lib/src/providers/FileSystemMediaProvider.d.ts +403 -0
  142. package/lib/src/providers/LunrSearchProvider.d.ts +280 -0
  143. package/lib/src/providers/MagicLinkAuthProvider.d.ts +125 -0
  144. package/lib/src/providers/NullCacheProvider.d.ts +72 -0
  145. package/lib/src/providers/OidcAuthProvider.d.ts +180 -0
  146. package/lib/src/providers/OidcBearerAuthProvider.d.ts +30 -0
  147. package/lib/src/providers/PasskeyAuthProvider.d.ts +58 -0
  148. package/lib/src/providers/PasswordAuthProvider.d.ts +20 -0
  149. package/lib/src/providers/SqliteDatabaseProvider.d.ts +55 -0
  150. package/lib/src/providers/SqliteDatabaseProvider.js +90 -0
  151. package/lib/src/providers/SqliteJobStateProvider.d.ts +41 -0
  152. package/lib/src/providers/databaseMigrations.d.ts +8 -0
  153. package/lib/src/providers/databaseMigrations.js +47 -0
  154. package/lib/src/providers/jobState.d.ts +99 -0
  155. package/lib/src/providers/lunrQueryToMiniSearch.d.ts +32 -0
  156. package/lib/src/providers/mediaFilenameDate.d.ts +22 -0
  157. package/lib/src/providers/sqliteLocation.d.ts +17 -0
  158. package/lib/src/providers/sqliteLocation.js +55 -0
  159. package/lib/src/providers/sqliteMigrations.d.ts +48 -0
  160. package/lib/src/providers/sqliteMigrations.js +72 -0
  161. package/lib/src/rendering/githubAlerts.d.ts +22 -0
  162. package/lib/src/rendering/htmlPolicy.d.ts +76 -0
  163. package/lib/src/rendering/markdownConverter.d.ts +73 -0
  164. package/lib/src/security/PolicyDecisionPoint.d.ts +245 -0
  165. package/lib/src/security/PolicyInformationPoint.d.ts +448 -0
  166. package/lib/src/security/pageActions.d.ts +40 -0
  167. package/lib/src/security/permissions.generated.d.ts +78 -0
  168. package/lib/src/types/Asset.d.ts +414 -0
  169. package/lib/src/types/Catalog.d.ts +61 -0
  170. package/lib/src/types/Comment.d.ts +11 -0
  171. package/lib/src/types/Config.d.ts +388 -0
  172. package/lib/src/types/Organization.d.ts +78 -0
  173. package/lib/src/types/OrganizationProvider.d.ts +38 -0
  174. package/lib/src/types/Page.d.ts +220 -0
  175. package/lib/src/types/Person.d.ts +56 -0
  176. package/lib/src/types/PersonProvider.d.ts +25 -0
  177. package/lib/src/types/Policy.d.ts +139 -0
  178. package/lib/src/types/Policy.js +17 -0
  179. package/lib/src/types/Provider.d.ts +810 -0
  180. package/lib/src/types/Role.d.ts +84 -0
  181. package/lib/src/types/RoleProvider.d.ts +35 -0
  182. package/lib/src/types/Schema.d.ts +425 -0
  183. package/lib/src/types/Share.d.ts +172 -0
  184. package/lib/src/types/Share.js +81 -0
  185. package/lib/src/types/User.d.ts +304 -0
  186. package/lib/src/types/Version.d.ts +189 -0
  187. package/lib/src/types/WikiEngine.d.ts +128 -0
  188. package/lib/src/types/express.d.ts +120 -0
  189. package/lib/src/types/express.js +1 -0
  190. package/lib/src/types/guards.d.ts +78 -0
  191. package/lib/src/types/heic-decode.d.ts +16 -0
  192. package/lib/src/types/index.d.ts +19 -0
  193. package/lib/src/types/linkedom.d.ts +77 -0
  194. package/lib/src/types/markdown-it-plugins.d.ts +21 -0
  195. package/lib/src/utils/DeltaStorage.d.ts +118 -0
  196. package/lib/src/utils/LocaleUtils.d.ts +105 -0
  197. package/lib/src/utils/LocaleUtils.js +294 -0
  198. package/lib/src/utils/PageNameMatcher.d.ts +98 -0
  199. package/lib/src/utils/PathPreflight.d.ts +38 -0
  200. package/lib/src/utils/PathPreflight.js +50 -0
  201. package/lib/src/utils/SectionUtils.d.ts +40 -0
  202. package/lib/src/utils/addonConfigLayer.d.ts +144 -0
  203. package/lib/src/utils/addonConfigLayer.js +382 -0
  204. package/lib/src/utils/addonDatabaseRules.d.ts +25 -0
  205. package/lib/src/utils/addonDatabaseRules.js +57 -0
  206. package/lib/src/utils/addonHost.d.ts +51 -0
  207. package/lib/src/utils/addonHost.js +72 -0
  208. package/lib/src/utils/addonInstaller.d.ts +109 -0
  209. package/lib/src/utils/addonLock.d.ts +37 -0
  210. package/lib/src/utils/addonLock.js +48 -0
  211. package/lib/src/utils/addonPageSync.d.ts +45 -0
  212. package/lib/src/utils/addonProvenance.d.ts +48 -0
  213. package/lib/src/utils/addonTarball.d.ts +41 -0
  214. package/lib/src/utils/addonsPathResolver.d.ts +76 -0
  215. package/lib/src/utils/addonsPathResolver.js +129 -0
  216. package/lib/src/utils/assetMetadataTags.d.ts +66 -0
  217. package/lib/src/utils/atomicWrite.d.ts +28 -0
  218. package/lib/src/utils/auditConfigChange.d.ts +57 -0
  219. package/lib/src/utils/auditEventNames.d.ts +50 -0
  220. package/lib/src/utils/auditEventNames.generated.d.ts +163 -0
  221. package/lib/src/utils/auditEventNames.generated.js +168 -0
  222. package/lib/src/utils/auditEventNames.js +49 -0
  223. package/lib/src/utils/auditEvents.d.ts +265 -0
  224. package/lib/src/utils/auditEvents.js +309 -0
  225. package/lib/src/utils/auditRegistry.d.ts +102 -0
  226. package/lib/src/utils/auditRegistry.js +168 -0
  227. package/lib/src/utils/bip39English.d.ts +2 -0
  228. package/lib/src/utils/configEnvKeys.d.ts +68 -0
  229. package/lib/src/utils/configFiles.d.ts +74 -0
  230. package/lib/src/utils/configFiles.js +150 -0
  231. package/lib/src/utils/delegation.d.ts +48 -0
  232. package/lib/src/utils/deriveUsername.d.ts +21 -0
  233. package/lib/src/utils/explainMediaPath.d.ts +123 -0
  234. package/lib/src/utils/formerTitles.d.ts +69 -0
  235. package/lib/src/utils/frontmatterAccess.d.ts +54 -0
  236. package/lib/src/utils/headlessAdminPassword.d.ts +55 -0
  237. package/lib/src/utils/imageTransform.d.ts +52 -0
  238. package/lib/src/utils/instanceEnvSecret.d.ts +51 -0
  239. package/lib/src/utils/jobSlots.d.ts +43 -0
  240. package/lib/src/utils/keywordNormalizer.d.ts +127 -0
  241. package/lib/src/utils/logger.d.ts +70 -0
  242. package/lib/src/utils/logger.js +106 -0
  243. package/lib/src/utils/magicLinkDeviceState.d.ts +95 -0
  244. package/lib/src/utils/managerUtils.d.ts +40 -0
  245. package/lib/src/utils/migrateLegacyPrivateAttachments.d.ts +15 -0
  246. package/lib/src/utils/orgFilename.d.ts +22 -0
  247. package/lib/src/utils/pageFeature.d.ts +27 -0
  248. package/lib/src/utils/pageFrontmatter.d.ts +21 -0
  249. package/lib/src/utils/pageNotes.d.ts +150 -0
  250. package/lib/src/utils/pageTitleRule.d.ts +37 -0
  251. package/lib/src/utils/pageToArticle.d.ts +59 -0
  252. package/lib/src/utils/pageUrl.d.ts +18 -0
  253. package/lib/src/utils/passwordChange.d.ts +12 -0
  254. package/lib/src/utils/passwordHash.d.ts +60 -0
  255. package/lib/src/utils/permissionCatalog.d.ts +52 -0
  256. package/lib/src/utils/pluginFormatters.d.ts +452 -0
  257. package/lib/src/utils/pluginFormatters.js +714 -0
  258. package/lib/src/utils/privateLinkRewrite.d.ts +42 -0
  259. package/lib/src/utils/privateStoreAccess.d.ts +57 -0
  260. package/lib/src/utils/privateStoreAccess.js +65 -0
  261. package/lib/src/utils/privateStoreCatalogs.d.ts +40 -0
  262. package/lib/src/utils/privateStoreCrypto.d.ts +127 -0
  263. package/lib/src/utils/privateStoreDoor.d.ts +181 -0
  264. package/lib/src/utils/privateStoreExport.d.ts +72 -0
  265. package/lib/src/utils/privateStoreFiles.d.ts +120 -0
  266. package/lib/src/utils/privateStoreMeta.d.ts +64 -0
  267. package/lib/src/utils/privateStoreMigrations.d.ts +37 -0
  268. package/lib/src/utils/privateStorePath.d.ts +259 -0
  269. package/lib/src/utils/privateStorePath.js +436 -0
  270. package/lib/src/utils/privateStoreTakeout.d.ts +76 -0
  271. package/lib/src/utils/privateStoreUnlock.d.ts +175 -0
  272. package/lib/src/utils/proxyClaim.d.ts +59 -0
  273. package/lib/src/utils/proxyClaim.js +30 -0
  274. package/lib/src/utils/redactPrivateNames.d.ts +21 -0
  275. package/lib/src/utils/redactPrivateNames.js +89 -0
  276. package/lib/src/utils/redactSecrets.d.ts +58 -0
  277. package/lib/src/utils/redactSecrets.js +171 -0
  278. package/lib/src/utils/renameLinkRewrite.d.ts +112 -0
  279. package/lib/src/utils/roleGrants.d.ts +35 -0
  280. package/lib/src/utils/safeRedirect.d.ts +32 -0
  281. package/lib/src/utils/schedule.d.ts +54 -0
  282. package/lib/src/utils/secretFileMode.d.ts +17 -0
  283. package/lib/src/utils/seededShippedPages.d.ts +45 -0
  284. package/lib/src/utils/sensitiveValues.d.ts +59 -0
  285. package/lib/src/utils/sensitiveValues.js +106 -0
  286. package/lib/src/utils/sessionEnd.d.ts +12 -0
  287. package/lib/src/utils/sessionGeneration.d.ts +24 -0
  288. package/lib/src/utils/sessionIdle.d.ts +41 -0
  289. package/lib/src/utils/sessionLimits.d.ts +68 -0
  290. package/lib/src/utils/shareLockbox.d.ts +64 -0
  291. package/lib/src/utils/sigstoreTrustedRoot.d.ts +33 -0
  292. package/lib/src/utils/sniffMime.d.ts +21 -0
  293. package/lib/src/utils/storeSearchIndex.d.ts +75 -0
  294. package/lib/src/utils/subjectMayDo.d.ts +21 -0
  295. package/lib/src/utils/systemCategoryRules.d.ts +30 -0
  296. package/lib/src/utils/systemCategoryRules.js +41 -0
  297. package/lib/src/utils/userCreateError.d.ts +62 -0
  298. package/lib/src/utils/username.d.ts +53 -0
  299. package/lib/src/utils/vaultUrlRewrite.d.ts +27 -0
  300. package/lib/src/utils/version.d.ts +84 -0
  301. package/lib/src/utils/videoFrame.d.ts +21 -0
  302. package/package.json +54 -3
@@ -0,0 +1,391 @@
1
+ /**
2
+ * Base Manager class - All managers should extend this
3
+ *
4
+ * Following JSPWiki's modular manager pattern, this abstract base class
5
+ * provides common functionality for all managers including initialization,
6
+ * lifecycle management, and backup/restore operations.
7
+ *
8
+ * @class BaseManager
9
+ * @abstract
10
+ *
11
+ * @property {WikiEngine} engine - Reference to the wiki engine
12
+ * @property {boolean} initialized - Flag indicating initialization status
13
+ * @property {Record<string, unknown>} config - Configuration object passed during initialization
14
+ *
15
+ * @see {@link WikiEngine} for the main engine
16
+ */
17
+ import { type PathPreflightResult, type PathPreflightOptions } from '../utils/PathPreflight.js';
18
+ import type { WikiEngine } from '../types/WikiEngine.js';
19
+ import type { ManagerFetchOptions } from '../utils/managerUtils.js';
20
+ import type { FormOption } from '../utils/pluginFormatters.js';
21
+ /**
22
+ * Backup data structure returned by backup() method
23
+ */
24
+ export interface BackupData {
25
+ /** Name of the manager that created this backup */
26
+ managerName: string;
27
+ /** ISO timestamp when backup was created */
28
+ timestamp: string;
29
+ /** Manager-specific backup data */
30
+ data?: unknown;
31
+ /** Provider class name (for managers with providers) */
32
+ providerClass?: string | null;
33
+ /** Provider-specific backup data */
34
+ providerBackup?: unknown;
35
+ /** Optional note about the backup */
36
+ note?: string;
37
+ /** Allow additional properties */
38
+ [key: string]: unknown;
39
+ }
40
+ /**
41
+ * Base class for all managers
42
+ *
43
+ * Provides common functionality for initialization, lifecycle management,
44
+ * and backup/restore operations.
45
+ */
46
+ /**
47
+ * What a manager is doing, uniformly (#1155).
48
+ *
49
+ * Managers already degraded — `preflightConfiguredPath()` existed and 11 of
50
+ * them called it — but each did so in its own way: a log line, a private flag,
51
+ * an early return. Thirteen could end up degraded and exactly ONE reported it
52
+ * anywhere a person could see. So an operator who mistyped
53
+ * `ngdpbase.backup.directory` got backups that silently never ran, an instance
54
+ * answering 302, a readiness probe saying ok, and a dashboard saying nothing.
55
+ *
56
+ * Four values rather than a boolean, because an operator's response differs:
57
+ *
58
+ * - `ready` — working
59
+ * - `degraded` — configured, wanted, and NOT working. The invisible one
60
+ * - `disabled` — deliberately off; not a problem and must not read as one
61
+ * - `failed` — could not initialise at all
62
+ *
63
+ * `disabled` versus `degraded` is what decides whether the report is worth
64
+ * reading. A report that warns about features somebody switched off is one
65
+ * nobody reads, and then the real warning is missed with it.
66
+ */
67
+ export type ManagerState = 'ready' | 'degraded' | 'disabled' | 'failed';
68
+ /**
69
+ * What a manager holds, in one shape (#1006).
70
+ *
71
+ * Three managers already answered versions of this question in three different
72
+ * shapes — `AddonsManager.getStatus()`, `BackgroundJobManager.getStatus()`,
73
+ * `CatalogManager.getSourceInfo()` — so every admin surface rendered a bespoke
74
+ * view per manager, and a manager added later was invisible until somebody
75
+ * wrote another one. That is the drift #762 found from the other direction:
76
+ * three managers existed for weeks without appearing in any inventory, because
77
+ * nothing forced the question.
78
+ */
79
+ export interface ManagerStats {
80
+ /**
81
+ * How many items this manager holds.
82
+ *
83
+ * __Omitted, not zero__, when the manager holds no countable collection.
84
+ * `RenderingManager` and `VariableManager` hold behaviour and configuration;
85
+ * reporting `0` for them would read as "empty" rather than "not applicable".
86
+ */
87
+ count?: number;
88
+ /** Most recent write, ISO 8601. Omitted when the manager does not track it. */
89
+ lastModified?: string;
90
+ /** Whether the manager considers itself operational. Derived from #1155's state. */
91
+ healthy: boolean;
92
+ /** One short line for an admin row. __Never item contents.__ */
93
+ summary?: string;
94
+ }
95
+ export interface ManagerStatus {
96
+ state: ManagerState;
97
+ /** What is wrong, in one line an operator can act on. Absent when ready. */
98
+ reason?: string;
99
+ /** The config key at fault, when there is one, so the admin UI can link to it. */
100
+ configKey?: string;
101
+ }
102
+ declare abstract class BaseManager {
103
+ /** Reference to the wiki engine */
104
+ protected engine: WikiEngine;
105
+ /** Initialization status flag */
106
+ protected initialized: boolean;
107
+ /** Configuration passed during initialization */
108
+ protected config?: Record<string, unknown>;
109
+ /** What this manager is doing (#1155). Ready until something says otherwise. */
110
+ private status;
111
+ /**
112
+ * Short description of what this manager does.
113
+ * Used by admin UIs, addon registries, and introspection tools.
114
+ * Override in subclasses to provide a human-readable description.
115
+ */
116
+ readonly description?: string;
117
+ /**
118
+ * Creates a new BaseManager instance
119
+ *
120
+ * @param engine - The wiki engine instance
121
+ *
122
+ * @example
123
+ * class MyManager extends BaseManager {
124
+ * constructor(engine: WikiEngine) {
125
+ * super(engine);
126
+ * this.myData = new Map();
127
+ * }
128
+ * }
129
+ */
130
+ constructor(engine: WikiEngine);
131
+ /**
132
+ * Initialize the manager with configuration
133
+ *
134
+ * Override this method in subclasses to perform initialization logic.
135
+ * Always call super.initialize() first in overridden implementations.
136
+ *
137
+ * @param config - Configuration object
138
+ *
139
+ * @example
140
+ * async initialize(config: Record<string, any> = {}): Promise<void> {
141
+ * await super.initialize(config);
142
+ * // Your initialization logic here
143
+ * console.log('MyManager initialized');
144
+ * }
145
+ */
146
+ initialize(config?: Record<string, unknown>): Promise<void>;
147
+ /**
148
+ * Check if manager has been initialized
149
+ *
150
+ * @returns True if manager is initialized
151
+ *
152
+ * @example
153
+ * if (manager.isInitialized()) {
154
+ * // Safe to use manager
155
+ * }
156
+ */
157
+ isInitialized(): boolean;
158
+ /**
159
+ * Get the wiki engine instance
160
+ *
161
+ * @returns The wiki engine instance
162
+ *
163
+ * @example
164
+ * const config = this.getEngine().getConfig();
165
+ */
166
+ getEngine(): WikiEngine;
167
+ /** A page's data changed outside savePage: its cached content goes, and every cached render re-renders (#1751). */
168
+ protected invalidateHandlerCache(pageUuid: string): void;
169
+ /**
170
+ * Preflight a configured filesystem path before any mkdir/write happens.
171
+ *
172
+ * Wraps `checkConfiguredPath()` with a standardized warning log that names
173
+ * the manager (`this.constructor.name`) and the originating config key.
174
+ * Useful for paths that may live on volumes the OS has unmounted (notably
175
+ * macOS `/Volumes/<X>/...`), where `fs.ensureDir` would otherwise crash
176
+ * the engine with an opaque `EACCES`.
177
+ *
178
+ * The caller decides what to do on failure (degrade, fall back to a
179
+ * default, or treat as fatal).
180
+ *
181
+ * @param configKey The config key that supplied this path — included in
182
+ * the warning so operators know what to fix.
183
+ * @param path The resolved path to check.
184
+ * @returns The preflight result. `result.ok === true` means safe
185
+ * to proceed.
186
+ *
187
+ * @example
188
+ * const preflight = this.preflightConfiguredPath(
189
+ * 'ngdpbase.backup.directory',
190
+ * this.backupDirectory
191
+ * );
192
+ * if (!preflight.ok) {
193
+ * // degrade — disable feature, fall back to default, etc.
194
+ * return;
195
+ * }
196
+ */
197
+ protected preflightConfiguredPath(configKey: string, path: string | null | undefined, options?: PathPreflightOptions): PathPreflightResult;
198
+ /**
199
+ * What this manager is doing (#1155).
200
+ *
201
+ * Not `getStatus()`: that name is already taken by `AddonsManager` and
202
+ * `BackgroundJobManager` for entirely different things, and a base-class
203
+ * method silently overridden by two subclasses would be worse than a longer
204
+ * name.
205
+ */
206
+ getManagerStatus(): ManagerStatus;
207
+ /**
208
+ * Record that this manager is configured, wanted, and not working.
209
+ *
210
+ * @returns true when this is a TRANSITION — a state or reason that differs
211
+ * from the current one. Only a transition is an event: a manager that
212
+ * starts degraded and stays degraded must not re-emit on every boot, or
213
+ * the signal is buried in its own noise.
214
+ */
215
+ protected markDegraded(reason: string, configKey?: string): boolean;
216
+ /** Record that this manager is deliberately off. Not a problem (#1155). */
217
+ protected markDisabled(reason: string): boolean;
218
+ /** Record that this manager could not initialise at all (#1155). */
219
+ protected markFailed(reason: string, configKey?: string): boolean;
220
+ /**
221
+ * Record that this manager is working.
222
+ *
223
+ * Clears the reason rather than leaving a stale one behind — a recovered
224
+ * manager still carrying "the directory is not writable" is a worse lie than
225
+ * no reason at all.
226
+ */
227
+ protected markReady(): boolean;
228
+ /**
229
+ * Record that this manager is working again, but only while it is still
230
+ * degraded for `reason` — the one a check set, now cleared by re-running
231
+ * it (#1842). A different fault set since stays reported.
232
+ */
233
+ protected markReadyIfDegradedBy(reason: string): boolean;
234
+ /**
235
+ * Apply a state and audit it if it CHANGED.
236
+ *
237
+ * Only a transition is an event. A manager that starts degraded and stays
238
+ * degraded must not re-emit on every boot, or the signal is buried in its
239
+ * own noise — and the at-boot picture is already carried by #1149's
240
+ * `system-start` record.
241
+ *
242
+ * Emitted from here rather than each manager, per the #1120 rule: a producer
243
+ * that has to remember to call something can be correct, but can never be
244
+ * PROVABLE.
245
+ */
246
+ private transition;
247
+ /**
248
+ * Shutdown the manager and cleanup resources
249
+ *
250
+ * Override this method in subclasses to perform cleanup logic.
251
+ * Always call super.shutdown() at the end of overridden implementations.
252
+ *
253
+ * @example
254
+ * async shutdown(): Promise<void> {
255
+ * // Your cleanup logic here
256
+ * await this.closeConnections();
257
+ * await super.shutdown();
258
+ * }
259
+ */
260
+ shutdown(): Promise<void>;
261
+ /**
262
+ * Backup manager data
263
+ *
264
+ * MUST be overridden by all managers that manage persistent data.
265
+ * Default implementation returns an empty backup object.
266
+ *
267
+ * @returns Backup data object containing all manager state
268
+ * @throws {Error} If backup operation fails
269
+ *
270
+ * @example
271
+ * async backup(): Promise<BackupData> {
272
+ * return {
273
+ * managerName: this.constructor.name,
274
+ * timestamp: new Date().toISOString(),
275
+ * data: {
276
+ * users: Array.from(this.users.values()),
277
+ * settings: this.settings
278
+ * }
279
+ * };
280
+ * }
281
+ */
282
+ backup(): Promise<BackupData>;
283
+ /**
284
+ * Restore manager data from backup
285
+ *
286
+ * MUST be overridden by all managers that manage persistent data.
287
+ * Default implementation only validates that backup data is provided.
288
+ *
289
+ * @param backupData - Backup data object from backup() method
290
+ * @throws {Error} If restore operation fails or backup data is missing
291
+ *
292
+ * @example
293
+ * async restore(backupData: BackupData): Promise<void> {
294
+ * if (!backupData || !backupData.data) {
295
+ * throw new Error('Invalid backup data');
296
+ * }
297
+ * this.users = new Map(backupData.data.users.map(u => [u.id, u]));
298
+ * this.settings = backupData.data.settings;
299
+ * }
300
+ */
301
+ restore(backupData: BackupData): Promise<void>;
302
+ /**
303
+ * Return a plain-text string suitable for use as MarqueePlugin banner text.
304
+ *
305
+ * Override in subclasses to expose live manager data as a scrolling banner:
306
+ *
307
+ * [{MarqueePlugin fetch='PageManager.toMarqueeText()'}]
308
+ * [{MarqueePlugin fetch='PageManager.toMarqueeText(limit=5,sort=date-desc)'}]
309
+ *
310
+ * The default returns '' (no output). Subclasses should return a concise,
311
+ * single-line summary. Common options (limit, sortBy, sortOrder, since, before)
312
+ * are available via ManagerFetchOptions; domain-specific keys are read directly
313
+ * from the raw options object passed by the caller.
314
+ *
315
+ * @param _options Parsed fetch args from the plugin invocation.
316
+ * @param _viewer The viewer's context (#1556): show only what they may see.
317
+ * Page text reaches this method, and only this method, on
318
+ * every render for every viewer.
319
+ * @returns Plain text, or '' if this manager has nothing to display.
320
+ *
321
+ * @example
322
+ * async toMarqueeText(options: ManagerFetchOptions = {}): Promise<string> {
323
+ * const pages = await this.getRecentChanges(options.limit ?? 5);
324
+ * return 'Recent: ' + pages.map(p => p.name).join(' • ');
325
+ * }
326
+ */
327
+ toMarqueeText(_options?: ManagerFetchOptions, _viewer?: unknown): Promise<string>;
328
+ /**
329
+ * Return the choices for a form dropdown, for the forms add-on's
330
+ * `"optionsSource": "fetch:ManagerName.toFormOptions(list=funds)"`.
331
+ *
332
+ * The same convention and the same safety rules as `toMarqueeText()`: it is
333
+ * the one other method page content may reach (`resolveManagerOptions`), it
334
+ * runs on every render for every viewer, and it must have no side effect.
335
+ * Offer only what `_viewer` may see. The forms add-on calls it again when the
336
+ * form is submitted and refuses a value that is not among the choices.
337
+ *
338
+ * @param _options Parsed args from the spec, as raw `{ key: value }` strings.
339
+ * @param _viewer The viewer's context.
340
+ * @returns `{ value, label }` choices (plain strings are accepted too), or `[]`.
341
+ */
342
+ toFormOptions(_options?: Record<string, string>, _viewer?: unknown): Promise<FormOption[]>;
343
+ /**
344
+ * What this manager holds (#1006).
345
+ *
346
+ * __Counts and health only — never item contents.__ That is the whole safety
347
+ * property, and it is why this is not the `getAll()` the question originally
348
+ * asked for. `AgentTokenManager` holds bearer credentials, `UserManager`
349
+ * holds users, `ShareManager` holds capability tokens; a generic enumeration
350
+ * on the base class means the first generic caller — an admin dump panel, a
351
+ * search indexer, a debug route — reaches all of it by default. A count
352
+ * cannot leak what it counts.
353
+ *
354
+ * Optional by override, with a safe default, exactly like `backup()` and
355
+ * `toMarqueeText()` above. A manager holding no countable collection omits
356
+ * `count` rather than reporting `0`, because "nothing to count" and "none"
357
+ * are different answers and an admin row that shows `0` for
358
+ * `RenderingManager` is noise.
359
+ *
360
+ * __Never throws.__ A broken manager reports `healthy: false`; it does not
361
+ * take down the page rendering every other manager. The base wraps nothing,
362
+ * so an override that can fail must catch its own errors — see the note on
363
+ * `safeGetManagerStats()`.
364
+ *
365
+ * __Named `getManagerStats`, not `getStats`.__ Two managers already have a
366
+ * `getStats()` returning their own domain shape — `FilterManager` (pipeline
367
+ * statistics, #615) and `NotificationManager` (`NotificationStats`, read by
368
+ * a live route). Both are correct for what they do, and taking the name from
369
+ * them would either break those callers or leave `getStats()` meaning two
370
+ * different things depending on the manager, which is the exact confusion
371
+ * this contract exists to remove. A generic caller needs a name that means
372
+ * one thing everywhere.
373
+ *
374
+ * @example
375
+ * async getManagerStats(): Promise<ManagerStats> {
376
+ * const active = this.list('').filter((r) => !r.revokedAt);
377
+ * return { ...await super.getManagerStats(), count: active.length };
378
+ * }
379
+ */
380
+ getManagerStats(): Promise<ManagerStats>;
381
+ /**
382
+ * `getManagerStats()` that cannot break the page it is rendered on.
383
+ *
384
+ * The contract says an override must not throw, and saying so does not make
385
+ * it true — an override reads a store, and a store can fail. This is what an
386
+ * admin surface iterating every manager should call: one manager throwing
387
+ * becomes one unhealthy row rather than a 500 for all of them.
388
+ */
389
+ safeGetManagerStats(): Promise<ManagerStats>;
390
+ }
391
+ export default BaseManager;