@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,414 @@
1
+ /**
2
+ * Asset type definitions for the unified AssetManager (Epic #405).
3
+ *
4
+ * Phase 1: AssetProvider interface + AssetRecord type.
5
+ * BasicAttachmentProvider and BaseMediaProvider implement AssetProvider
6
+ * while AttachmentManager / MediaManager remain thin wrappers.
7
+ */
8
+ import type { ActorContext } from '../context/ActorContext.js';
9
+ /**
10
+ * Capabilities that an AssetProvider may declare.
11
+ * Used to advertise which optional operations the provider supports.
12
+ */
13
+ export type ProviderCapability = 'upload' | 'search' | 'thumbnail' | 'stream' | 'edit';
14
+ /**
15
+ * Patch of user-editable descriptive metadata for an asset.
16
+ *
17
+ * Field semantics: `undefined` (absent) = leave unchanged; `null` = clear the
18
+ * underlying tag(s). `dateTimeOriginal` accepts "YYYY-MM-DD HH:MM[:SS]" or
19
+ * ISO-8601 "YYYY-MM-DDTHH:MM[:SS]" and is normalized before writing.
20
+ */
21
+ export interface AssetMetadataPatch {
22
+ /** Human-readable title — schema.org/name */
23
+ title?: string | null;
24
+ /** Caption / description — schema.org/description */
25
+ description?: string | null;
26
+ /** Keyword / tag list — schema.org/keywords */
27
+ keywords?: string[] | null;
28
+ /** Capture timestamp override */
29
+ dateTimeOriginal?: string | null;
30
+ }
31
+ /**
32
+ * GPS / geographic location data extracted from EXIF GPS tags.
33
+ */
34
+ export interface AssetGPS {
35
+ /** Decimal degrees latitude, positive = North */
36
+ latitude: number;
37
+ /** Decimal degrees longitude, positive = East */
38
+ longitude: number;
39
+ /** Metres above sea level (EXIF GPSAltitude) */
40
+ altitude?: number;
41
+ }
42
+ /**
43
+ * Camera and capture-settings metadata extracted from EXIF.
44
+ */
45
+ export interface AssetCamera {
46
+ /** Camera manufacturer (EXIF Make) */
47
+ make?: string;
48
+ /** Camera model (EXIF Model) */
49
+ model?: string;
50
+ /** Lens description (EXIF LensModel / Lens) */
51
+ lens?: string;
52
+ /** Focal length string e.g. "50 mm" (EXIF FocalLength) */
53
+ focalLength?: string;
54
+ /** Aperture string e.g. "f/2.8" (EXIF FNumber) */
55
+ aperture?: string;
56
+ /** Shutter speed string e.g. "1/250" (EXIF ExposureTime) */
57
+ shutterSpeed?: string;
58
+ /** ISO sensitivity value (EXIF ISO) */
59
+ iso?: number;
60
+ /** Flash description (EXIF Flash) */
61
+ flash?: string;
62
+ }
63
+ /**
64
+ * Structured metadata bag for AssetRecord.
65
+ *
66
+ * Typed fields cover the most common EXIF / IPTC / XMP values.
67
+ * The index signature allows any provider-specific or custom field
68
+ * to be stored without a type change ("custom field support").
69
+ */
70
+ export interface AssetMetadata {
71
+ /** Camera and capture settings (EXIF) */
72
+ camera?: AssetCamera;
73
+ /** Geographic location (EXIF GPS tags) */
74
+ gps?: AssetGPS;
75
+ /** Colour space e.g. "srgb" (EXIF ColorSpace / sharp metadata) */
76
+ colorSpace?: string;
77
+ /** Copyright notice (EXIF / IPTC Copyright) */
78
+ copyright?: string;
79
+ /** Content creator / photographer (IPTC Creator / XMP Creator) —
80
+ * distinct from schema.org/author which records the uploader */
81
+ creator?: string;
82
+ /** EXIF Orientation value (1–8) */
83
+ orientation?: number;
84
+ /** Provenance of `dateTimeOriginal`: `'exif'` = read from EXIF/QuickTime
85
+ * tags; `'filename'` = parsed from the filename as a conservative fallback
86
+ * (#809). Absent when the item has no capture date at all. Lets consumers
87
+ * treat a filename-derived date as non-authoritative. */
88
+ captureDateSource?: 'exif' | 'filename';
89
+ /** WHICH literal EXIF/QuickTime tag supplied `dateTimeOriginal` when
90
+ * captureDateSource is 'exif' (#864): 'DateTimeOriginal' | 'CreateDate' |
91
+ * 'MediaCreateDate' | 'CreationDate'. Lets the Dawarich adapter apply its
92
+ * strict per-type date policy (photos require DateTimeOriginal proper;
93
+ * the other three are video container-creation fields). Absent on
94
+ * filename-derived or dateless items, and on index entries that predate
95
+ * this field (rescan populates it). */
96
+ captureDateField?: string;
97
+ /** Video/audio codec (ExifTool VideoCodec) — internal compatibility hint */
98
+ videoCodec?: string;
99
+ /** Audio codec (ExifTool AudioFormat / AudioCodec) — internal compatibility hint */
100
+ audioCodec?: string;
101
+ /** Provider-specific or custom metadata fields */
102
+ [key: string]: unknown;
103
+ }
104
+ /**
105
+ * Image / video dimensions.
106
+ */
107
+ export interface AssetDimensions {
108
+ /** Width in pixels */
109
+ width?: number;
110
+ /** Height in pixels */
111
+ height?: number;
112
+ /** Resolution in dots per inch */
113
+ dpi?: number;
114
+ }
115
+ /**
116
+ * Licensing and rights information for an asset.
117
+ */
118
+ export interface AssetUsageRights {
119
+ /** License name or identifier (e.g. "CC BY 4.0", "All Rights Reserved") */
120
+ license?: string;
121
+ /** Free-text restrictions or attribution requirements */
122
+ restrictions?: string;
123
+ /** ISO 8601 date when the license expires */
124
+ expiresAt?: string;
125
+ }
126
+ /**
127
+ * Usage statistics for an asset.
128
+ */
129
+ export interface AssetUsageStats {
130
+ /** Total number of times the asset has been downloaded or served */
131
+ downloadCount?: number;
132
+ /** ISO 8601 timestamp of the most recent download */
133
+ lastDownloadedAt?: string;
134
+ }
135
+ /**
136
+ * Unified asset record returned by all AssetProviders.
137
+ *
138
+ * Field names follow schema.org CreativeWork / MediaObject where a direct
139
+ * equivalent exists. Non-schema fields (providerId, filename, dimensions,
140
+ * isPrivate, metadata, insertSnippet) are kept under their natural names.
141
+ *
142
+ * Schema.org equivalents used:
143
+ * name ← schema.org/name (human-readable title)
144
+ * description ← schema.org/description
145
+ * keywords ← schema.org/keywords
146
+ * encodingFormat ← schema.org/encodingFormat (MIME type)
147
+ * contentSize ← schema.org/contentSize (bytes)
148
+ * url ← schema.org/url
149
+ * thumbnailUrl ← schema.org/thumbnailUrl
150
+ * dateCreated ← schema.org/dateCreated
151
+ * author ← schema.org/author
152
+ * dateModified ← schema.org/dateModified
153
+ * mentions ← schema.org/mentions (pages that reference this asset)
154
+ *
155
+ * Covers all DAM core attribute categories:
156
+ * Identification — id, providerId, filename, name
157
+ * Descriptive — description, keywords
158
+ * Technical — encodingFormat, contentSize, dimensions, url, thumbnailUrl
159
+ * Administrative — dateCreated, author, dateModified
160
+ * Rights & Usage — usageRights, usageStats
161
+ * Linkage — mentions, isPrivate
162
+ * Open metadata — metadata (EXIF, IPTC, custom fields)
163
+ * Editor helper — insertSnippet
164
+ */
165
+ export interface AssetRecord {
166
+ /** Store-internal unique identifier */
167
+ id: string;
168
+ /** Which provider owns this record (e.g. 'local', 'media-library') */
169
+ providerId: string;
170
+ /** Original filename (basename) */
171
+ filename: string;
172
+ /** Human-readable title; distinct from filename (e.g. from EXIF Title or user input) — schema.org/name */
173
+ name?: string;
174
+ /** Detailed description or caption; used for searchability — schema.org/description */
175
+ description?: string;
176
+ /** Controlled-vocabulary keywords / tags for categorisation — schema.org/keywords */
177
+ keywords: string[];
178
+ /**
179
+ * Hierarchical tag paths (#917) read from XMP-lr:HierarchicalSubject and
180
+ * XMP-digiKam:TagsList, each a `/`-joined path of canonical keyword values
181
+ * (e.g. `places/usa/colorado/denver`; leaf = last segment). Present only when
182
+ * the file carries hierarchical tags; the flat `keywords` remain the primary
183
+ * surface. Used to preserve/repair digiKam tag trees on write-back (#918).
184
+ */
185
+ keywordPaths?: string[];
186
+ /** MIME type (e.g. "image/jpeg") — schema.org/encodingFormat */
187
+ encodingFormat: string;
188
+ /** File size in bytes — schema.org/contentSize */
189
+ contentSize?: number;
190
+ /** Image or video dimensions */
191
+ dimensions?: AssetDimensions;
192
+ /** Browsable / embeddable URL — schema.org/url */
193
+ url: string;
194
+ /** Thumbnail URL — schema.org/thumbnailUrl */
195
+ thumbnailUrl?: string;
196
+ /**
197
+ * Playback duration for video/audio as ISO 8601 duration string,
198
+ * e.g. "PT1M30S" for 1 minute 30 seconds — schema.org/duration.
199
+ * Populated from ExifTool MediaDuration / Duration tags.
200
+ */
201
+ duration?: string;
202
+ /** Average bitrate in bits/second for video/audio — schema.org/bitrate. */
203
+ bitrate?: number;
204
+ /** ISO 8601 timestamp when the asset was first ingested / uploaded — schema.org/dateCreated */
205
+ dateCreated?: string;
206
+ /** Username of the uploader or content creator / owner — schema.org/author */
207
+ author?: string;
208
+ /** ISO 8601 timestamp of the last metadata or file modification — schema.org/dateModified */
209
+ dateModified?: string;
210
+ /** Licensing and rights information */
211
+ usageRights?: AssetUsageRights;
212
+ /** Download counts and access statistics */
213
+ usageStats?: AssetUsageStats;
214
+ /** Wiki pages this asset appears on — schema.org/mentions */
215
+ mentions: string[];
216
+ /** Whether the asset is gated by a private wiki page */
217
+ isPrivate?: boolean;
218
+ /** Structured metadata bag (EXIF, IPTC, XMP, custom fields) — see AssetMetadata */
219
+ metadata: AssetMetadata;
220
+ /** Wiki markup snippet ready to paste into the editor */
221
+ insertSnippet: string;
222
+ }
223
+ /**
224
+ * Query parameters for AssetProvider.search().
225
+ */
226
+ export interface AssetQuery {
227
+ /** Free-text query — case-insensitive substring / keyword match */
228
+ query?: string;
229
+ /** Filter media results to a specific year */
230
+ year?: number;
231
+ /** Filter results to a MIME category (#720) */
232
+ mimeCategory?: 'image' | 'video' | 'audio' | 'document' | 'other';
233
+ /** Number of results per page (default 48) */
234
+ pageSize?: number;
235
+ /** Zero-based offset into the full result set (default 0) */
236
+ offset?: number;
237
+ /** Sort field */
238
+ sort?: 'date' | 'caption';
239
+ /** Sort direction */
240
+ order?: 'asc' | 'desc';
241
+ /**
242
+ * Authenticated user's roles — passed from the request context so providers
243
+ * can apply principal-based filtering (e.g. sist2 path access control).
244
+ * Providers that don't use roles simply ignore this field.
245
+ */
246
+ userRoles?: string[];
247
+ /**
248
+ * Authenticated username — passed alongside userRoles so providers can apply
249
+ * per-user path access rules (consistent with the audience/access principal model).
250
+ */
251
+ username?: string;
252
+ /** ISO 8601 start date for date range filtering (#518) */
253
+ dateFrom?: string;
254
+ /** ISO 8601 end date for date range filtering (#518) */
255
+ dateTo?: string;
256
+ /** Date field to filter on: 'mtime' (file-modified, default) or 'exif_datetime' (EXIF capture date) (#518) */
257
+ dateField?: 'mtime' | 'exif_datetime';
258
+ /** When true, include results from hidden/backup paths (default: false) (#519) */
259
+ includeHidden?: boolean;
260
+ /** Restrict results to a specific path prefix, e.g. "jims/photos" (#519) */
261
+ pathPrefix?: string;
262
+ /** Filter by exact MIME type, e.g. from a facet click (#520) */
263
+ mime?: string;
264
+ /** Filter by file extension, e.g. from a facet click (#520) */
265
+ extension?: string;
266
+ }
267
+ /**
268
+ * A single aggregation bucket returned alongside search results.
269
+ */
270
+ export interface AssetFacet {
271
+ /** Bucket key (e.g. "image/jpeg", "2024", "jims/photos") */
272
+ key: string;
273
+ /** Number of matching items in this bucket */
274
+ count: number;
275
+ }
276
+ /**
277
+ * Faceted aggregation data returned alongside AssetPage results.
278
+ * Only populated by providers that support server-side aggregations (e.g. Sist2AssetProvider).
279
+ */
280
+ export interface AssetAggregations {
281
+ /** Distribution by MIME type */
282
+ byMime?: AssetFacet[];
283
+ /** Distribution by year (from mtime) */
284
+ byYear?: AssetFacet[];
285
+ /** Distribution by top-level folder */
286
+ byFolder?: AssetFacet[];
287
+ /** Distribution by file extension */
288
+ byExtension?: AssetFacet[];
289
+ }
290
+ /**
291
+ * Paginated result returned by AssetProvider.search().
292
+ */
293
+ export interface AssetPage {
294
+ /** Current page of results */
295
+ results: AssetRecord[];
296
+ /** Total number of matching items */
297
+ total: number;
298
+ /** True when there are more results beyond this page */
299
+ hasMore: boolean;
300
+ /** Faceted aggregation data (populated by providers that support it) */
301
+ aggregations?: AssetAggregations;
302
+ }
303
+ /**
304
+ * Input descriptor for AssetProvider.store().
305
+ */
306
+ export interface AssetInput {
307
+ /** Original filename */
308
+ originalName: string;
309
+ /** MIME type */
310
+ mimeType: string;
311
+ /** File size in bytes */
312
+ size: number;
313
+ /** Wiki page to link the asset to (optional) */
314
+ pageName?: string;
315
+ /** Human-readable description */
316
+ description?: string;
317
+ }
318
+ /**
319
+ * Health status of a registered AssetProvider as last reported by healthCheck().
320
+ *
321
+ * - 'healthy' — healthCheck() returned true (or provider has no healthCheck)
322
+ * - 'degraded' — healthCheck() returned false or threw (storage unreachable)
323
+ * - 'unknown' — healthCheck() has not been run yet
324
+ */
325
+ export type ProviderHealthStatus = 'healthy' | 'degraded' | 'unknown';
326
+ /**
327
+ * Snapshot of a single provider's health, returned by AssetManager.getProviderHealth().
328
+ */
329
+ export interface ProviderHealthReport {
330
+ /** Provider identifier */
331
+ providerId: string;
332
+ /** Human-readable provider name */
333
+ displayName: string;
334
+ /** Current health status */
335
+ status: ProviderHealthStatus;
336
+ /** ISO 8601 timestamp of the last health check, or undefined if never checked */
337
+ checkedAt?: string;
338
+ /** Last error message when status is 'degraded' */
339
+ error?: string;
340
+ }
341
+ /**
342
+ * AssetProvider — the single interface that all asset backends implement.
343
+ *
344
+ * Required methods: search, getById.
345
+ * Optional (capability-gated) methods: store, delete, getThumbnail, stream, healthCheck.
346
+ *
347
+ * @see BasicAttachmentProvider implements 'upload' | 'search' | 'stream'
348
+ * @see BaseMediaProvider implements 'search' | 'thumbnail'
349
+ */
350
+ export interface AssetProvider {
351
+ /** Stable provider identifier (e.g. 'local', 'media-library', 's3') */
352
+ readonly id: string;
353
+ /** Human-readable display name */
354
+ readonly displayName: string;
355
+ /** Capabilities this provider supports */
356
+ readonly capabilities: ProviderCapability[];
357
+ /**
358
+ * Search assets with optional filtering and pagination.
359
+ * All providers must implement this.
360
+ */
361
+ search(query: AssetQuery): Promise<AssetPage>;
362
+ /**
363
+ * Retrieve a single asset by its provider-internal ID.
364
+ * Returns null if not found.
365
+ */
366
+ getById(id: string): Promise<AssetRecord | null>;
367
+ /**
368
+ * Store a new asset. Only available when 'upload' is in capabilities.
369
+ * Goes through the asset-upload door (AttachmentManager.uploadAttachment,
370
+ * #1629), so it carries the acting context like every other upload.
371
+ * @param buffer - Raw file data
372
+ * @param info - File information and linkage hints
373
+ * @param ctx - Who is acting (request subject or JobContext)
374
+ */
375
+ store?(buffer: Buffer, info: AssetInput, ctx: ActorContext): Promise<AssetRecord>;
376
+ /**
377
+ * Delete an asset by its provider-internal ID.
378
+ * Returns true if deleted, false if not found.
379
+ */
380
+ delete?(id: string): Promise<boolean>;
381
+ /**
382
+ * Generate (or retrieve cached) thumbnail data.
383
+ * Only available when 'thumbnail' is in capabilities.
384
+ * @param id - Asset identifier
385
+ * @param size - Requested size string (e.g. "300x300")
386
+ */
387
+ getThumbnail?(id: string, size: string): Promise<Buffer | null>;
388
+ /**
389
+ * Stream the asset file contents.
390
+ * Only available when 'stream' is in capabilities.
391
+ */
392
+ stream?(id: string): Promise<NodeJS.ReadableStream | null>;
393
+ /**
394
+ * Update user-editable descriptive metadata on an asset.
395
+ * Only available when 'edit' is in capabilities.
396
+ *
397
+ * Writes the patch into the source file's embedded metadata (EXIF/IPTC/XMP)
398
+ * and refreshes the provider's index entry. Returns the refreshed record,
399
+ * or null if the asset was not found.
400
+ */
401
+ updateMetadata?(id: string, patch: AssetMetadataPatch): Promise<AssetRecord | null>;
402
+ /**
403
+ * Optional liveness check for the underlying storage backend.
404
+ *
405
+ * Return true when the provider can serve requests normally.
406
+ * Return false (or throw) when storage is unreachable — e.g. a NAS volume
407
+ * that has been unmounted, an SMB share that dropped, or expired cloud
408
+ * credentials. AssetManager calls this during initialize() and on demand
409
+ * (admin health-check endpoint) and skips degraded providers in fan-out.
410
+ *
411
+ * Providers without this method are always considered healthy.
412
+ */
413
+ healthCheck?(): Promise<boolean>;
414
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Catalog type definitions for CatalogManager (#424).
3
+ *
4
+ * CatalogTerm — a single controlled-vocabulary entry with optional Linked-Data URI.
5
+ * CatalogProvider — interface implemented by DefaultCatalogProvider, addon providers,
6
+ * and the AICatalogProvider stub.
7
+ */
8
+ /**
9
+ * A single term in the controlled vocabulary.
10
+ */
11
+ export interface CatalogTerm {
12
+ /** Canonical machine-readable key (e.g. 'geology', 'draft') */
13
+ term: string;
14
+ /** Human-readable display label */
15
+ label: string;
16
+ /** Optional Linked-Data URI — e.g. https://www.wikidata.org/wiki/Q1069 */
17
+ uri?: string;
18
+ /** Provenance — 'config' | 'wikidata' | 'lcsh' | 'getty-aat' | 'usgs' etc. */
19
+ source?: string;
20
+ /** Human-readable description (#894 — SKOS skos:definition candidate) */
21
+ description?: string;
22
+ /** Semantic category of the term */
23
+ category?: 'content-type' | 'workflow-status' | 'subject' | 'access' | 'general' | 'status' | 'provenance';
24
+ /** True if this is the default term for its category */
25
+ default?: boolean;
26
+ /** False to hide the term from pickers without deleting it from config */
27
+ enabled?: boolean;
28
+ }
29
+ /**
30
+ * Interface for all catalog providers — both built-in and addon-contributed.
31
+ *
32
+ * Addon registration pattern:
33
+ * ```ts
34
+ * const catalog = engine.getManager<CatalogManager>('CatalogManager');
35
+ * if (catalog) catalog.registerProvider(new MyDomainCatalogProvider());
36
+ * ```
37
+ */
38
+ export interface CatalogProvider {
39
+ /** Unique identifier for the provider */
40
+ id: string;
41
+ /** Human-readable name shown in admin UIs */
42
+ displayName: string;
43
+ /**
44
+ * Optional domain scope — e.g. 'geoscience', 'medicine'.
45
+ * When set, CatalogManager.getTerms(domain) will only include this provider
46
+ * when the requested domain matches.
47
+ */
48
+ domain?: string;
49
+ /** Return the terms this provider owns or manages */
50
+ getTerms(): Promise<CatalogTerm[]>;
51
+ /**
52
+ * Resolve a term string to a canonical Linked-Data URI.
53
+ * Return null if this provider does not know the term.
54
+ */
55
+ resolveUri?(term: string): Promise<string | null>;
56
+ /**
57
+ * Suggest terms from the controlled vocabulary for the given page content.
58
+ * Only meaningful for AI/ML providers — static providers return [].
59
+ */
60
+ suggestTerms?(content: string, title: string): Promise<CatalogTerm[]>;
61
+ }
@@ -0,0 +1,11 @@
1
+ export interface PageComment {
2
+ id: string;
3
+ pageUuid: string;
4
+ author: string;
5
+ authorDisplayName: string;
6
+ content: string;
7
+ createdAt: string;
8
+ deleted?: boolean;
9
+ deletedBy?: string;
10
+ deletedAt?: string;
11
+ }