@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.
- package/LICENSE +201 -0
- package/README.md +16 -2
- package/lib/packages/ngdpbase-types/index.d.ts +32 -0
- package/lib/packages/ngdpbase-types/testing.d.ts +43 -0
- package/lib/packages/ngdpbase-types/testing.js +53 -0
- package/lib/src/cache/CacheDependencies.d.ts +50 -0
- package/lib/src/cache/CacheDependencies.js +50 -0
- package/lib/src/cache/ICacheAdapter.d.ts +86 -0
- package/lib/src/cache/RegionCache.d.ts +171 -0
- package/lib/src/context/ActorContext.d.ts +48 -0
- package/lib/src/context/ActorContext.js +33 -0
- package/lib/src/context/ApiContext.d.ts +194 -0
- package/lib/src/context/ApiContext.js +273 -0
- package/lib/src/context/BaseContext.d.ts +110 -0
- package/lib/src/context/BaseContext.js +143 -0
- package/lib/src/context/JobContext.d.ts +153 -0
- package/lib/src/context/JobContext.js +144 -0
- package/lib/src/context/WikiContext.d.ts +404 -0
- package/lib/src/context/bootActions.d.ts +64 -0
- package/lib/src/context/bootActions.js +111 -0
- package/lib/src/converters/HtmlConverter.d.ts +70 -0
- package/lib/src/converters/IContentConverter.d.ts +94 -0
- package/lib/src/converters/JSPWikiConverter.d.ts +117 -0
- package/lib/src/converters/conversionWarning.d.ts +15 -0
- package/lib/src/converters/ncm/bridge.d.ts +22 -0
- package/lib/src/converters/ncm/existing.d.ts +23 -0
- package/lib/src/converters/ncm/fix/blocks.d.ts +89 -0
- package/lib/src/converters/ncm/fix/bulletMarkers.d.ts +21 -0
- package/lib/src/converters/ncm/fix/index.d.ts +36 -0
- package/lib/src/converters/ncm/fix/jspwikiBullets.d.ts +20 -0
- package/lib/src/converters/ncm/fix/jspwikiCodeMarkers.d.ts +38 -0
- package/lib/src/converters/ncm/fix/jspwikiHeadings.d.ts +25 -0
- package/lib/src/converters/ncm/fix/jspwikiIndent.d.ts +24 -0
- package/lib/src/converters/ncm/fix/jspwikiInsert.d.ts +21 -0
- package/lib/src/converters/ncm/fix/jspwikiItalic.d.ts +29 -0
- package/lib/src/converters/ncm/fix/jspwikiLinkLeftovers.d.ts +27 -0
- package/lib/src/converters/ncm/fix/moreInformationFooter.d.ts +25 -0
- package/lib/src/converters/ncm/fix/styleClosers.d.ts +25 -0
- package/lib/src/converters/ncm/fix/tightenLists.d.ts +30 -0
- package/lib/src/converters/ncm/fix/types.d.ts +33 -0
- package/lib/src/converters/ncm/footnotes.d.ts +39 -0
- package/lib/src/converters/ncm/images.d.ts +49 -0
- package/lib/src/converters/ncm/index.d.ts +20 -0
- package/lib/src/converters/ncm/links.d.ts +21 -0
- package/lib/src/converters/ncm/normalize.d.ts +39 -0
- package/lib/src/converters/ncm/placeholder.d.ts +25 -0
- package/lib/src/converters/ncm/tables.d.ts +36 -0
- package/lib/src/converters/ncm/types.d.ts +42 -0
- package/lib/src/http/egressPolicy.d.ts +52 -0
- package/lib/src/http/guardedFetch.d.ts +89 -0
- package/lib/src/http/guardedFetch.js +113 -0
- package/lib/src/http/guardedLookup.d.ts +48 -0
- package/lib/src/http/guardedLookup.js +73 -0
- package/lib/src/http/ssrf.d.ts +83 -0
- package/lib/src/http/ssrf.js +311 -0
- package/lib/src/mail/MailProvider.d.ts +36 -0
- package/lib/src/mail/NodemailerMailProvider.d.ts +26 -0
- package/lib/src/managers/AddonsManager.d.ts +691 -0
- package/lib/src/managers/AgentTokenManager.d.ts +269 -0
- package/lib/src/managers/AssetManager.d.ts +116 -0
- package/lib/src/managers/AttachmentManager.d.ts +1032 -0
- package/lib/src/managers/AuthManager.d.ts +1257 -0
- package/lib/src/managers/BackgroundJobManager.d.ts +434 -0
- package/lib/src/managers/BaseManager.d.ts +391 -0
- package/lib/src/managers/BaseManager.js +415 -0
- package/lib/src/managers/CacheManager.d.ts +159 -0
- package/lib/src/managers/CatalogManager.d.ts +235 -0
- package/lib/src/managers/CommentManager.d.ts +75 -0
- package/lib/src/managers/ConfigurationManager.d.ts +747 -0
- package/lib/src/managers/DatabaseManager.d.ts +89 -0
- package/lib/src/managers/DatabaseManager.js +236 -0
- package/lib/src/managers/EmailManager.d.ts +47 -0
- package/lib/src/managers/ExportManager.d.ts +129 -0
- package/lib/src/managers/ExportManager.js +420 -0
- package/lib/src/managers/FootnoteManager.d.ts +118 -0
- package/lib/src/managers/MediaManager.d.ts +279 -0
- package/lib/src/managers/MetricsManager.d.ts +89 -0
- package/lib/src/managers/NotificationManager.d.ts +165 -0
- package/lib/src/managers/OidcManager.d.ts +210 -0
- package/lib/src/managers/OrganizationManager.d.ts +107 -0
- package/lib/src/managers/PageManager.d.ts +1645 -0
- package/lib/src/managers/PersonManager.d.ts +48 -0
- package/lib/src/managers/PluginManager.d.ts +179 -0
- package/lib/src/managers/PluginManager.js +393 -0
- package/lib/src/managers/PolicyEvaluator.d.ts +213 -0
- package/lib/src/managers/RenderingManager.d.ts +358 -0
- package/lib/src/managers/RoleManager.d.ts +134 -0
- package/lib/src/managers/SearchManager.d.ts +402 -0
- package/lib/src/managers/ShareManager.d.ts +251 -0
- package/lib/src/managers/TemplateManager.d.ts +176 -0
- package/lib/src/managers/ThemeManager.d.ts +56 -0
- package/lib/src/managers/UserManager.d.ts +480 -0
- package/lib/src/managers/ValidationManager.d.ts +426 -0
- package/lib/src/managers/VariableManager.d.ts +145 -0
- package/lib/src/middleware/csrf.d.ts +3 -0
- package/lib/src/parsers/LinkParser.d.ts +457 -0
- package/lib/src/parsers/MarkupParser.d.ts +769 -0
- package/lib/src/parsers/context/ParseContext.d.ts +314 -0
- package/lib/src/parsers/data/emoji-map.d.ts +18 -0
- package/lib/src/parsers/dom/DOMBuilder.d.ts +210 -0
- package/lib/src/parsers/dom/DOMParser.d.ts +252 -0
- package/lib/src/parsers/dom/Tokenizer.d.ts +358 -0
- package/lib/src/parsers/dom/WikiDocument.d.ts +272 -0
- package/lib/src/parsers/dom/handlers/DOMLinkHandler.d.ts +260 -0
- package/lib/src/parsers/dom/handlers/DOMPluginHandler.d.ts +212 -0
- package/lib/src/parsers/dom/handlers/DOMVariableHandler.d.ts +171 -0
- package/lib/src/parsers/filters/BaseFilter.d.ts +269 -0
- package/lib/src/parsers/filters/FilterChain.d.ts +320 -0
- package/lib/src/parsers/handlers/BaseSyntaxHandler.d.ts +331 -0
- package/lib/src/parsers/handlers/HandlerRegistry.d.ts +225 -0
- package/lib/src/parsers/handlers/JSPWikiPreprocessor.d.ts +89 -0
- package/lib/src/parsers/handlers/LinkParserHandler.d.ts +80 -0
- package/lib/src/parsers/handlers/PluginSyntaxHandler.d.ts +78 -0
- package/lib/src/parsers/handlers/WikiFormHandler.d.ts +149 -0
- package/lib/src/parsers/handlers/WikiTagHandler.d.ts +125 -0
- package/lib/src/parsers/jspwikiTableRow.d.ts +39 -0
- package/lib/src/parsers/styleBlockSyntax.d.ts +14 -0
- package/lib/src/plugins/types.d.ts +79 -0
- package/lib/src/providers/AgentTokenAuthProvider.d.ts +40 -0
- package/lib/src/providers/AuthentikBearerAuthProvider.d.ts +75 -0
- package/lib/src/providers/BaseAttachmentProvider.d.ts +197 -0
- package/lib/src/providers/BaseAuthProvider.d.ts +220 -0
- package/lib/src/providers/BaseCacheProvider.d.ts +140 -0
- package/lib/src/providers/BaseCredentialsProvider.d.ts +84 -0
- package/lib/src/providers/BaseDatabaseProvider.d.ts +22 -0
- package/lib/src/providers/BaseDatabaseProvider.js +12 -0
- package/lib/src/providers/BaseLoggingProvider.d.ts +68 -0
- package/lib/src/providers/BaseLoggingProvider.js +37 -0
- package/lib/src/providers/BaseMediaProvider.d.ts +308 -0
- package/lib/src/providers/BasePageProvider.d.ts +337 -0
- package/lib/src/providers/BaseProvider.d.ts +98 -0
- package/lib/src/providers/BaseProvider.js +74 -0
- package/lib/src/providers/BaseSearchProvider.d.ts +362 -0
- package/lib/src/providers/BasicAttachmentProvider.d.ts +599 -0
- package/lib/src/providers/CloudflareAccessAuthProvider.d.ts +72 -0
- package/lib/src/providers/FileCredentialsProvider.d.ts +33 -0
- package/lib/src/providers/FileJobStateProvider.d.ts +58 -0
- package/lib/src/providers/FileLoggingProvider.d.ts +43 -0
- package/lib/src/providers/FileLoggingProvider.js +120 -0
- package/lib/src/providers/FileOidcAdapter.d.ts +25 -0
- package/lib/src/providers/FileSystemMediaProvider.d.ts +403 -0
- package/lib/src/providers/LunrSearchProvider.d.ts +280 -0
- package/lib/src/providers/MagicLinkAuthProvider.d.ts +125 -0
- package/lib/src/providers/NullCacheProvider.d.ts +72 -0
- package/lib/src/providers/OidcAuthProvider.d.ts +180 -0
- package/lib/src/providers/OidcBearerAuthProvider.d.ts +30 -0
- package/lib/src/providers/PasskeyAuthProvider.d.ts +58 -0
- package/lib/src/providers/PasswordAuthProvider.d.ts +20 -0
- package/lib/src/providers/SqliteDatabaseProvider.d.ts +55 -0
- package/lib/src/providers/SqliteDatabaseProvider.js +90 -0
- package/lib/src/providers/SqliteJobStateProvider.d.ts +41 -0
- package/lib/src/providers/databaseMigrations.d.ts +8 -0
- package/lib/src/providers/databaseMigrations.js +47 -0
- package/lib/src/providers/jobState.d.ts +99 -0
- package/lib/src/providers/lunrQueryToMiniSearch.d.ts +32 -0
- package/lib/src/providers/mediaFilenameDate.d.ts +22 -0
- package/lib/src/providers/sqliteLocation.d.ts +17 -0
- package/lib/src/providers/sqliteLocation.js +55 -0
- package/lib/src/providers/sqliteMigrations.d.ts +48 -0
- package/lib/src/providers/sqliteMigrations.js +72 -0
- package/lib/src/rendering/githubAlerts.d.ts +22 -0
- package/lib/src/rendering/htmlPolicy.d.ts +76 -0
- package/lib/src/rendering/markdownConverter.d.ts +73 -0
- package/lib/src/security/PolicyDecisionPoint.d.ts +245 -0
- package/lib/src/security/PolicyInformationPoint.d.ts +448 -0
- package/lib/src/security/pageActions.d.ts +40 -0
- package/lib/src/security/permissions.generated.d.ts +78 -0
- package/lib/src/types/Asset.d.ts +414 -0
- package/lib/src/types/Catalog.d.ts +61 -0
- package/lib/src/types/Comment.d.ts +11 -0
- package/lib/src/types/Config.d.ts +388 -0
- package/lib/src/types/Organization.d.ts +78 -0
- package/lib/src/types/OrganizationProvider.d.ts +38 -0
- package/lib/src/types/Page.d.ts +220 -0
- package/lib/src/types/Person.d.ts +56 -0
- package/lib/src/types/PersonProvider.d.ts +25 -0
- package/lib/src/types/Policy.d.ts +139 -0
- package/lib/src/types/Policy.js +17 -0
- package/lib/src/types/Provider.d.ts +810 -0
- package/lib/src/types/Role.d.ts +84 -0
- package/lib/src/types/RoleProvider.d.ts +35 -0
- package/lib/src/types/Schema.d.ts +425 -0
- package/lib/src/types/Share.d.ts +172 -0
- package/lib/src/types/Share.js +81 -0
- package/lib/src/types/User.d.ts +304 -0
- package/lib/src/types/Version.d.ts +189 -0
- package/lib/src/types/WikiEngine.d.ts +128 -0
- package/lib/src/types/express.d.ts +120 -0
- package/lib/src/types/express.js +1 -0
- package/lib/src/types/guards.d.ts +78 -0
- package/lib/src/types/heic-decode.d.ts +16 -0
- package/lib/src/types/index.d.ts +19 -0
- package/lib/src/types/linkedom.d.ts +77 -0
- package/lib/src/types/markdown-it-plugins.d.ts +21 -0
- package/lib/src/utils/DeltaStorage.d.ts +118 -0
- package/lib/src/utils/LocaleUtils.d.ts +105 -0
- package/lib/src/utils/LocaleUtils.js +294 -0
- package/lib/src/utils/PageNameMatcher.d.ts +98 -0
- package/lib/src/utils/PathPreflight.d.ts +38 -0
- package/lib/src/utils/PathPreflight.js +50 -0
- package/lib/src/utils/SectionUtils.d.ts +40 -0
- package/lib/src/utils/addonConfigLayer.d.ts +144 -0
- package/lib/src/utils/addonConfigLayer.js +382 -0
- package/lib/src/utils/addonDatabaseRules.d.ts +25 -0
- package/lib/src/utils/addonDatabaseRules.js +57 -0
- package/lib/src/utils/addonHost.d.ts +51 -0
- package/lib/src/utils/addonHost.js +72 -0
- package/lib/src/utils/addonInstaller.d.ts +109 -0
- package/lib/src/utils/addonLock.d.ts +37 -0
- package/lib/src/utils/addonLock.js +48 -0
- package/lib/src/utils/addonPageSync.d.ts +45 -0
- package/lib/src/utils/addonProvenance.d.ts +48 -0
- package/lib/src/utils/addonTarball.d.ts +41 -0
- package/lib/src/utils/addonsPathResolver.d.ts +76 -0
- package/lib/src/utils/addonsPathResolver.js +129 -0
- package/lib/src/utils/assetMetadataTags.d.ts +66 -0
- package/lib/src/utils/atomicWrite.d.ts +28 -0
- package/lib/src/utils/auditConfigChange.d.ts +57 -0
- package/lib/src/utils/auditEventNames.d.ts +50 -0
- package/lib/src/utils/auditEventNames.generated.d.ts +163 -0
- package/lib/src/utils/auditEventNames.generated.js +168 -0
- package/lib/src/utils/auditEventNames.js +49 -0
- package/lib/src/utils/auditEvents.d.ts +265 -0
- package/lib/src/utils/auditEvents.js +309 -0
- package/lib/src/utils/auditRegistry.d.ts +102 -0
- package/lib/src/utils/auditRegistry.js +168 -0
- package/lib/src/utils/bip39English.d.ts +2 -0
- package/lib/src/utils/configEnvKeys.d.ts +68 -0
- package/lib/src/utils/configFiles.d.ts +74 -0
- package/lib/src/utils/configFiles.js +150 -0
- package/lib/src/utils/delegation.d.ts +48 -0
- package/lib/src/utils/deriveUsername.d.ts +21 -0
- package/lib/src/utils/explainMediaPath.d.ts +123 -0
- package/lib/src/utils/formerTitles.d.ts +69 -0
- package/lib/src/utils/frontmatterAccess.d.ts +54 -0
- package/lib/src/utils/headlessAdminPassword.d.ts +55 -0
- package/lib/src/utils/imageTransform.d.ts +52 -0
- package/lib/src/utils/instanceEnvSecret.d.ts +51 -0
- package/lib/src/utils/jobSlots.d.ts +43 -0
- package/lib/src/utils/keywordNormalizer.d.ts +127 -0
- package/lib/src/utils/logger.d.ts +70 -0
- package/lib/src/utils/logger.js +106 -0
- package/lib/src/utils/magicLinkDeviceState.d.ts +95 -0
- package/lib/src/utils/managerUtils.d.ts +40 -0
- package/lib/src/utils/migrateLegacyPrivateAttachments.d.ts +15 -0
- package/lib/src/utils/orgFilename.d.ts +22 -0
- package/lib/src/utils/pageFeature.d.ts +27 -0
- package/lib/src/utils/pageFrontmatter.d.ts +21 -0
- package/lib/src/utils/pageNotes.d.ts +150 -0
- package/lib/src/utils/pageTitleRule.d.ts +37 -0
- package/lib/src/utils/pageToArticle.d.ts +59 -0
- package/lib/src/utils/pageUrl.d.ts +18 -0
- package/lib/src/utils/passwordChange.d.ts +12 -0
- package/lib/src/utils/passwordHash.d.ts +60 -0
- package/lib/src/utils/permissionCatalog.d.ts +52 -0
- package/lib/src/utils/pluginFormatters.d.ts +452 -0
- package/lib/src/utils/pluginFormatters.js +714 -0
- package/lib/src/utils/privateLinkRewrite.d.ts +42 -0
- package/lib/src/utils/privateStoreAccess.d.ts +57 -0
- package/lib/src/utils/privateStoreAccess.js +65 -0
- package/lib/src/utils/privateStoreCatalogs.d.ts +40 -0
- package/lib/src/utils/privateStoreCrypto.d.ts +127 -0
- package/lib/src/utils/privateStoreDoor.d.ts +181 -0
- package/lib/src/utils/privateStoreExport.d.ts +72 -0
- package/lib/src/utils/privateStoreFiles.d.ts +120 -0
- package/lib/src/utils/privateStoreMeta.d.ts +64 -0
- package/lib/src/utils/privateStoreMigrations.d.ts +37 -0
- package/lib/src/utils/privateStorePath.d.ts +259 -0
- package/lib/src/utils/privateStorePath.js +436 -0
- package/lib/src/utils/privateStoreTakeout.d.ts +76 -0
- package/lib/src/utils/privateStoreUnlock.d.ts +175 -0
- package/lib/src/utils/proxyClaim.d.ts +59 -0
- package/lib/src/utils/proxyClaim.js +30 -0
- package/lib/src/utils/redactPrivateNames.d.ts +21 -0
- package/lib/src/utils/redactPrivateNames.js +89 -0
- package/lib/src/utils/redactSecrets.d.ts +58 -0
- package/lib/src/utils/redactSecrets.js +171 -0
- package/lib/src/utils/renameLinkRewrite.d.ts +112 -0
- package/lib/src/utils/roleGrants.d.ts +35 -0
- package/lib/src/utils/safeRedirect.d.ts +32 -0
- package/lib/src/utils/schedule.d.ts +54 -0
- package/lib/src/utils/secretFileMode.d.ts +17 -0
- package/lib/src/utils/seededShippedPages.d.ts +45 -0
- package/lib/src/utils/sensitiveValues.d.ts +59 -0
- package/lib/src/utils/sensitiveValues.js +106 -0
- package/lib/src/utils/sessionEnd.d.ts +12 -0
- package/lib/src/utils/sessionGeneration.d.ts +24 -0
- package/lib/src/utils/sessionIdle.d.ts +41 -0
- package/lib/src/utils/sessionLimits.d.ts +68 -0
- package/lib/src/utils/shareLockbox.d.ts +64 -0
- package/lib/src/utils/sigstoreTrustedRoot.d.ts +33 -0
- package/lib/src/utils/sniffMime.d.ts +21 -0
- package/lib/src/utils/storeSearchIndex.d.ts +75 -0
- package/lib/src/utils/subjectMayDo.d.ts +21 -0
- package/lib/src/utils/systemCategoryRules.d.ts +30 -0
- package/lib/src/utils/systemCategoryRules.js +41 -0
- package/lib/src/utils/userCreateError.d.ts +62 -0
- package/lib/src/utils/username.d.ts +53 -0
- package/lib/src/utils/vaultUrlRewrite.d.ts +27 -0
- package/lib/src/utils/version.d.ts +84 -0
- package/lib/src/utils/videoFrame.d.ts +21 -0
- 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;
|