@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,171 @@
1
+ import type ICacheAdapter from './ICacheAdapter.js';
2
+ import type { CacheStats } from './ICacheAdapter.js';
3
+ import CacheDependencies, { type VersionLookup } from './CacheDependencies.js';
4
+ /**
5
+ * Cache set options
6
+ */
7
+ export interface CacheSetOptions {
8
+ /** Time to live in seconds */
9
+ ttl?: number;
10
+ }
11
+ /**
12
+ * Region cache statistics
13
+ */
14
+ export interface RegionStats {
15
+ /** Region name */
16
+ region: string;
17
+ /** Number of keys in this region */
18
+ keys: number;
19
+ /** Global cache statistics */
20
+ globalStats: CacheStats;
21
+ }
22
+ /**
23
+ * Factory function type for getOrSet
24
+ */
25
+ export type CacheFactory<T> = () => Promise<T>;
26
+ /** Options for getOrSetVersioned. */
27
+ export interface VersionedSetOptions extends CacheSetOptions {
28
+ /** Told whether the value came from the cache (true) or was computed (false); for hit/miss metrics. */
29
+ onResult?: (hit: boolean) => void;
30
+ }
31
+ /** The two calls the read-through needs from a store. */
32
+ export interface VersionedStore {
33
+ get<T = unknown>(key: string): Promise<T | undefined | null>;
34
+ set(key: string, value: unknown, options?: CacheSetOptions): Promise<unknown>;
35
+ }
36
+ /**
37
+ * Read-through with data versions (#1751), over any store with get and set.
38
+ * Returns the stored value while every topic it was built from still has the
39
+ * version it had then; otherwise computes it again with `factory`, stores it
40
+ * with the versions it read (unless the render marked itself volatile), and
41
+ * returns it. RegionCache.getOrSetVersioned is this over a region.
42
+ */
43
+ export declare function readThroughVersioned<T>(store: VersionedStore, versionOf: VersionLookup, key: string, factory: (deps: CacheDependencies) => Promise<T>, options?: VersionedSetOptions): Promise<T>;
44
+ /**
45
+ * RegionCache - Cache wrapper that provides namespaced access to a cache adapter
46
+ *
47
+ * This class wraps a cache adapter and automatically prefixes all keys with a region name,
48
+ * providing isolation between different cache users (managers, components, etc.)
49
+ */
50
+ declare class RegionCache {
51
+ private readonly adapter;
52
+ private readonly region;
53
+ private readonly prefix;
54
+ private readonly versionOf;
55
+ /**
56
+ * @param versionOf How to read a data topic's current version (CacheManager.version).
57
+ * Without it every topic reads as version 0, so only a
58
+ * volatile render or the TTL ends an entry.
59
+ */
60
+ constructor(adapter: ICacheAdapter, region: string, versionOf?: VersionLookup);
61
+ /**
62
+ * Create a full key by prefixing with the region
63
+ *
64
+ * @param {string} key - The cache key
65
+ * @returns {string} The prefixed key
66
+ */
67
+ private _getFullKey;
68
+ /**
69
+ * Remove region prefix from a key
70
+ *
71
+ * @param {string} fullKey - The prefixed key
72
+ * @returns {string} The key without region prefix
73
+ */
74
+ private _stripPrefix;
75
+ /**
76
+ * Get a value from the cache
77
+ *
78
+ * @param {string} key - The cache key
79
+ * @returns {Promise<T|undefined>} The cached value or undefined if not found
80
+ */
81
+ get<T = unknown>(key: string): Promise<T | undefined>;
82
+ /**
83
+ * Set a value in the cache
84
+ *
85
+ * @param {string} key - The cache key
86
+ * @param {unknown} value - The value to cache
87
+ * @param {CacheSetOptions} [options] - Cache options
88
+ * @returns {Promise<void>}
89
+ */
90
+ set(key: string, value: unknown, options?: CacheSetOptions): Promise<void>;
91
+ /**
92
+ * Delete one or more keys from the cache
93
+ *
94
+ * @param {string|string[]} keys - Single key or array of keys to delete
95
+ * @returns {Promise<void>}
96
+ */
97
+ del(keys: string | string[]): Promise<void>;
98
+ /**
99
+ * Clear all cache entries for this region
100
+ *
101
+ * @param {string} [pattern] - Optional pattern to match keys within the region
102
+ * @returns {Promise<void>}
103
+ */
104
+ clear(pattern?: string): Promise<void>;
105
+ /**
106
+ * Get keys matching a pattern within this region
107
+ *
108
+ * @param {string} [pattern='*'] - Pattern to match
109
+ * @returns {Promise<string[]>} Array of matching keys (without region prefix)
110
+ */
111
+ keys(pattern?: string): Promise<string[]>;
112
+ /**
113
+ * Get cache statistics for this region
114
+ *
115
+ * @returns {Promise<RegionStats>} Cache statistics for this region
116
+ */
117
+ stats(): Promise<RegionStats>;
118
+ /**
119
+ * Check if a key exists in this region
120
+ *
121
+ * @param {string} key - The cache key
122
+ * @returns {Promise<boolean>} True if key exists
123
+ */
124
+ has(key: string): Promise<boolean>;
125
+ /**
126
+ * Get or set a value (cache-aside pattern)
127
+ *
128
+ * @param {string} key - The cache key
129
+ * @param {CacheFactory<T>} factory - Function to generate the value if not cached
130
+ * @param {CacheSetOptions} [options] - Cache options
131
+ * @returns {Promise<T>} The cached or generated value
132
+ */
133
+ getOrSet<T>(key: string, factory: CacheFactory<T>, options?: CacheSetOptions): Promise<T>;
134
+ /**
135
+ * Read-through with data versions (#1751). Returns the stored value while
136
+ * every topic it was built from still has the version it had then;
137
+ * otherwise computes it again with `factory`, stores it with the versions it
138
+ * read (unless the render marked itself volatile), and returns it.
139
+ *
140
+ * The factory declares what it reads: `deps.dependsOn('LedgerManager')`.
141
+ */
142
+ getOrSetVersioned<T>(key: string, factory: (deps: CacheDependencies) => Promise<T>, options?: VersionedSetOptions): Promise<T>;
143
+ /**
144
+ * Get multiple keys at once
145
+ *
146
+ * @param {string[]} keys - Array of cache keys
147
+ * @returns {Promise<Record<string, T|undefined>>} Object with keys as properties and cached values
148
+ */
149
+ mget<T = unknown>(keys: string[]): Promise<Record<string, T | undefined>>;
150
+ /**
151
+ * Set multiple keys at once
152
+ *
153
+ * @param {Record<string, unknown>} keyValuePairs - Object with keys and values to set
154
+ * @param {CacheSetOptions} [options] - Cache options
155
+ * @returns {Promise<void>}
156
+ */
157
+ mset(keyValuePairs: Record<string, unknown>, options?: CacheSetOptions): Promise<void>;
158
+ /**
159
+ * Get the region name
160
+ *
161
+ * @returns {string} The region name
162
+ */
163
+ getRegion(): string;
164
+ /**
165
+ * Get the underlying adapter
166
+ *
167
+ * @returns {ICacheAdapter} The cache adapter
168
+ */
169
+ getAdapter(): ICacheAdapter;
170
+ }
171
+ export default RegionCache;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The context an acting call carries (#1179, security-posture P1).
3
+ *
4
+ * P1: any entry point that decides, records, or acts on someone's behalf
5
+ * takes a context — mandatory and positional. The two contexts that exist for
6
+ * that are the request's subject (`PermissionSubject`, which is what
7
+ * `WikiContext.userContext` and `req.userContext` are) and the job's
8
+ * (`JobContext`, for boot, schedule and queued work). This is the union a
9
+ * manager accepts, so a caller forwards whichever it was given and never
10
+ * rebuilds one from its fields.
11
+ *
12
+ * What travels: who, from where (request / boot / schedule), the delegation
13
+ * the call arrived under, and the address it came from. What does not: roles.
14
+ * Authority is resolved at the moment of each decision, never carried.
15
+ */
16
+ import type { PermissionSubject } from '../managers/UserManager.js';
17
+ import type { JobContext } from './JobContext.js';
18
+ export type ActorContext = PermissionSubject | JobContext;
19
+ /**
20
+ * The fields an audit record takes from a context.
21
+ *
22
+ * An emitter spreads it — `{ eventType, ...who, …, metadata: { ...who.metadata, … } }`
23
+ * — rather than copying `user` and `ipAddress` across one at a time, so a
24
+ * field added here (`actor`, #1762 slice 3) reaches every row without
25
+ * touching every emitter. `scripts/check-audit-attribution.ts` holds every
26
+ * emitter to that.
27
+ */
28
+ export interface ActorAttribution {
29
+ /** The account acted on: under a proxy grant, the person represented. */
30
+ user: string;
31
+ /** Who actually did it, present only when that is not `user` — under a proxy grant (#1762). */
32
+ actor?: string;
33
+ ipAddress: string | undefined;
34
+ /** `origin` always; `reason` / `requestedAt` for a job; `delegated` when the request came through a token, share or proxy grant (with `proxyGrantId` for a proxy). */
35
+ metadata: Record<string, unknown>;
36
+ }
37
+ export declare function isJobContext(ctx: ActorContext): ctx is JobContext;
38
+ /**
39
+ * Who acted, for the record — read from the context, never guessed.
40
+ *
41
+ * A job says its origin and reason; a request says `origin: request`, the
42
+ * address, and whether it acted under a delegation. A token's or share's id
43
+ * is not repeated here: that record already carries it, and a config-change
44
+ * record naming a token id would be a second place to redact. A proxy grant's
45
+ * id is (`proxyGrantId`): it is not a credential, and it is what joins the row
46
+ * to the grant that allowed it (#1762).
47
+ */
48
+ export declare function actorOf(ctx: ActorContext): ActorAttribution;
@@ -0,0 +1,33 @@
1
+ import { attributedTo } from './bootActions.js';
2
+ import { proxyAttribution } from '../utils/proxyClaim.js';
3
+ export function isJobContext(ctx) {
4
+ return 'origin' in ctx && 'requestedAt' in ctx;
5
+ }
6
+ /**
7
+ * Who acted, for the record — read from the context, never guessed.
8
+ *
9
+ * A job says its origin and reason; a request says `origin: request`, the
10
+ * address, and whether it acted under a delegation. A token's or share's id
11
+ * is not repeated here: that record already carries it, and a config-change
12
+ * record naming a token id would be a second place to redact. A proxy grant's
13
+ * id is (`proxyGrantId`): it is not a credential, and it is what joins the row
14
+ * to the grant that allowed it (#1762).
15
+ */
16
+ export function actorOf(ctx) {
17
+ if (isJobContext(ctx)) {
18
+ return attributedTo(ctx);
19
+ }
20
+ // #1762 slice 3: a proxy claim names the person who acted beside the one
21
+ // represented. Never mixed with a token or share — every door refuses that
22
+ // subject — so the token and share kinds keep their precedence here.
23
+ const { metadata: proxyMeta, ...proxy } = proxyAttribution(ctx.viaProxy);
24
+ return {
25
+ user: ctx.username,
26
+ ...proxy,
27
+ ipAddress: ctx.ipAddress,
28
+ metadata: {
29
+ origin: 'request',
30
+ ...(ctx.viaToken ? { delegated: 'token' } : ctx.viaShare ? { delegated: 'share' } : proxyMeta)
31
+ }
32
+ };
33
+ }
@@ -0,0 +1,194 @@
1
+ /**
2
+ * ApiContext — Lightweight request context for API route handlers.
3
+ *
4
+ * Parallel to WikiContext (used for page rendering), ApiContext provides a
5
+ * clean, typed, consistent object for addon and core API routes. It replaces
6
+ * scattered access to `req.userContext`, `req.session`, and engine managers.
7
+ *
8
+ * Usage:
9
+ * import { ApiContext, ApiError, sendApiError } from '../../../dist/src/context/ApiContext.js';
10
+ *
11
+ * router.post('/reservations', async (req, res) => {
12
+ * try {
13
+ * const ctx = ApiContext.from(req, engine);
14
+ * await ctx.requirePermission('page-edit');
15
+ * const username = ctx.actingUsername();
16
+ * // ...
17
+ * } catch (err) {
18
+ * if (err instanceof ApiError) return sendApiError(res, err);
19
+ * res.status(500).json({ error: String(err) });
20
+ * }
21
+ * });
22
+ */
23
+ import type { Request, Response } from 'express';
24
+ import '../types/express.js';
25
+ import { BaseContext } from './BaseContext.js';
26
+ import type { WikiEngine } from '../types/WikiEngine.js';
27
+ import type { AgentTokenGrant, PermissionSubject, ProxyClaim } from '../managers/UserManager.js';
28
+ import type { ShareGrant } from '../types/Share.js';
29
+ import type { ReauthMode } from '../managers/AuthManager.js';
30
+ import { type Decision } from '../types/Policy.js';
31
+ /**
32
+ * Thrown by ApiContext guard methods (requirePermission, actingUsername).
33
+ * Route handlers should catch this and forward `status` to `res.status()`.
34
+ */
35
+ export declare class ApiError extends Error {
36
+ readonly status: number;
37
+ /**
38
+ * For a step-up refusal (#1745): where the person re-authenticates,
39
+ * returning to the page they were on. Send it with the 403 so the page can
40
+ * offer the way forward, as core routes do (`{ error, reauth }`).
41
+ */
42
+ readonly reauth?: string | undefined;
43
+ constructor(status: number, message: string,
44
+ /**
45
+ * For a step-up refusal (#1745): where the person re-authenticates,
46
+ * returning to the page they were on. Send it with the 403 so the page can
47
+ * offer the way forward, as core routes do (`{ error, reauth }`).
48
+ */
49
+ reauth?: string | undefined);
50
+ }
51
+ /**
52
+ * Send a refusal — the one way it reaches the client, from core routes and
53
+ * every add-on route alike (#1749). JSON is `{ success: false, error, reauth? }`;
54
+ * text is the message, then where to sign in again for a step-up refusal.
55
+ * `page` is for a link the person followed in the browser: a step-up refusal
56
+ * redirects to the re-authenticate page, a 401 to sign-in (returning here),
57
+ * anything else is the message as text. A route never writes its own refusal:
58
+ * the step-up `reauth` is easy to drop.
59
+ */
60
+ export declare function sendApiError(res: Response, err: ApiError, mode?: ReauthMode): void;
61
+ export declare class ApiContext extends BaseContext {
62
+ /** Reference to the wiki engine */
63
+ readonly engine: WikiEngine;
64
+ /** Whether the caller has an active authenticated session */
65
+ readonly isAuthenticated: boolean;
66
+ /** Caller's username, or null for anonymous */
67
+ readonly username: string | null;
68
+ /** Caller's display name, or null */
69
+ readonly displayName: string | null;
70
+ /** Caller's email address, or null */
71
+ readonly email: string | null;
72
+ /** Caller's assigned roles (always an array, never undefined) */
73
+ readonly roles: string[];
74
+ /**
75
+ * The agent token this request arrived with, when it did (#1173).
76
+ *
77
+ * Absent before this: `from()` copied five fields off `req.userContext` and
78
+ * `viaToken` was not one of them, so every `ctx.hasPermission()` — including
79
+ * every addon API route using `requirePermission()` — resolved against the
80
+ * token OWNER's live roles with the token's scope ceiling unable to run. The
81
+ * same defect #1164 fixed in route code, reached through a context class
82
+ * instead, and invisible to a check that only scans `src/routes/`.
83
+ */
84
+ readonly viaToken?: AgentTokenGrant;
85
+ /** The share this request presented, when it did (#1222). Carried for the same reason as `viaToken`. */
86
+ readonly viaShare?: ShareGrant;
87
+ /** The proxy grant this request acts under, when it does (#1762). Carried for the same reason as `viaToken`: a job started from this context keeps it. */
88
+ readonly viaProxy?: ProxyClaim;
89
+ /**
90
+ * The request's subject exactly as the middleware wrote it (#1179/#1382).
91
+ *
92
+ * The fields above are a flattened copy for convenience; this is the context
93
+ * itself, to forward to a manager door that takes one — never rebuilt from
94
+ * the fields, which is the #1173 defect. `null` for a request with no subject.
95
+ */
96
+ readonly subject: PermissionSubject | null;
97
+ /**
98
+ * The address the request came from (#1179), read from the subject the
99
+ * middleware wrote — not a copy. Forwarded with the context, so a job or a
100
+ * record an add-on starts from it carries the provenance (#1667).
101
+ */
102
+ get ipAddress(): string | undefined;
103
+ /**
104
+ * Whether the caller is signed in to a test account (#1805), read from the
105
+ * subject the middleware wrote (the account record's flag). An attribute for
106
+ * an add-on to enforce its own rules from; no policy reads it.
107
+ */
108
+ get isTest(): boolean;
109
+ private constructor();
110
+ /** The request this context was built from; the step-up answer needs its return page (#1745). */
111
+ private readonly request;
112
+ /**
113
+ * Build an ApiContext from an Express request and engine reference.
114
+ *
115
+ * Reads `req.userContext` (set by the session middleware in app.ts) and
116
+ * normalises the values into a fully-typed object. Always succeeds — an
117
+ * unauthenticated request produces a context with `isAuthenticated: false`
118
+ * and an empty/anonymous roles array.
119
+ */
120
+ static from(req: Request, engine: WikiEngine): ApiContext;
121
+ /**
122
+ * The username this request acts as, for a feature that belongs to a
123
+ * person (a journal, a reservation). Asked AFTER `requirePermission`: policy
124
+ * decides whether the caller may, this only says whether there is someone
125
+ * to act as (#1430). A permission delegated to anonymous visitors still
126
+ * finds nobody here, so the refusal is a 401, never a crash on a missing
127
+ * name.
128
+ *
129
+ * @example
130
+ * await ctx.requirePermission('page-edit');
131
+ * const username = ctx.actingUsername(); // → 401 if nobody is signed in
132
+ */
133
+ actingUsername(): string;
134
+ /**
135
+ * Returns true if the caller has the given permission.
136
+ *
137
+ * Asks the PDP (`PolicyDecisionPoint.permits`, #1431 step 14) — same canonical
138
+ * `PolicyEvaluator`-backed path that `WikiContext.hasPermission` uses.
139
+ * Honors anonymous/authenticated role expansion, deny policies, resource
140
+ * patterns, and the `'All'`/`'Authenticated'` role semantics. (#630)
141
+ *
142
+ * @example
143
+ * if (await ctx.hasPermission('user-read')) { // include PII fields }
144
+ */
145
+ /**
146
+ * #1399: the door is BaseContext's, which asks UserManager with the subject
147
+ * this context was handed. This method used to rebuild that subject from the
148
+ * flattened fields above — the #1173 defect, in the class where #1173
149
+ * happened. The rebuild listed username, roles, isAuthenticated, viaToken and
150
+ * viaShare, so it dropped `privateStoreHandle` and an addon API route could
151
+ * not see the caller's own sealed pages (#1382).
152
+ *
153
+ * @example
154
+ * if (await ctx.hasPermission('user-read')) { // include PII fields }
155
+ */
156
+ /**
157
+ * Throws unless policy grants the caller this permission.
158
+ *
159
+ * #1399: the refusal classifies itself — 401 for a caller who has not
160
+ * signed in, 403 for one who has. That is the ONE sanctioned use of
161
+ * `isAuthenticated` (security-posture P2): it never decides, it only says
162
+ * which refusal to send after policy has already said no. Before this,
163
+ * every route paired `requireAuthenticated()` with this call to get the 401,
164
+ * which read as though authentication were half the gate.
165
+ *
166
+ * #1745: a refusal for someone who HOLDS the permission is the step-up one
167
+ * (#1635) — their sign-in is not fresh enough. It carries `reauth`, built
168
+ * where core routes build it (AuthManager.askForFreshSignIn, #1758), and the prompt is
169
+ * audited there; a delegated credential gets no `reauth`. The refusal itself
170
+ * is {@link enforceDeny}'s, shared with managers that ask the PDP directly.
171
+ *
172
+ * @example
173
+ * await ctx.requirePermission('search-user'); // → 401 anonymous, 403 signed in
174
+ */
175
+ requirePermission(permission: string): Promise<void>;
176
+ /**
177
+ * Turn a deny into the refusal (#1431) — the one implementation of refusal
178
+ * shaping, shared by {@link requirePermission} and every manager that asks
179
+ * the PDP itself. Always throws:
180
+ *
181
+ * - a step-up deny (`reason` {@link STEP_UP_REASON}) on a request:
182
+ * `AuthManager.askForFreshSignIn` answers and records the reauth prompt —
183
+ * `ApiError(403, …, reauth)`, or no `reauth` for a delegated credential
184
+ * (agent token, share), which cannot give a fresh sign-in;
185
+ * - any other deny (policy, or a token, share or proxy ceiling): `ApiError(401)`
186
+ * for a caller who has not signed in, `ApiError(403)` for one who has;
187
+ * - an allow: a programming error. A refusal never silently passes.
188
+ *
189
+ * @example
190
+ * const d = await pdp.decide(ctx.getActor(), { action: 'ledger-adjust', resource: { type: 'ledger-entry', id } });
191
+ * if (!d.permit) await ctx.enforceDeny('ledger-adjust', d);
192
+ */
193
+ enforceDeny(permission: string, decision: Decision): Promise<never>;
194
+ }