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