@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,153 @@
1
+ /**
2
+ * Who asked for a background job, and from where (#631).
3
+ *
4
+ * A job runs after its request has returned, so nothing about the request
5
+ * survives unless it is carried deliberately. `BackgroundJobManager.enqueue()`
6
+ * took a job id and nothing else, so the identity of whoever pressed the button
7
+ * was discarded at the call site — `WikiRoutes` logged
8
+ * `Page reindex requested by: jim` on one line and threw the name away on the
9
+ * next. The audit log, which #1148/#1149/#1150/#1156/#1158/#1138 exist to make
10
+ * trustworthy, could not say who reindexed anything.
11
+ *
12
+ * __Identity and provenance travel; authority does not.__ This carries who
13
+ * asked, from what origin, and whether a delegated token was involved. It
14
+ * deliberately does NOT carry resolved roles. A reindex enqueued at 09:00 and
15
+ * running at 09:12 must not authorise against 09:00's roles — demote or delete
16
+ * the user in between and the job would keep rights they no longer hold. That
17
+ * is the same reasoning `app.ts` gives for agent tokens: *"roles are resolved
18
+ * live per request — a token never carries a snapshot."*
19
+ *
20
+ * So a job that needs to make a permission decision asks for the permission at
21
+ * the moment of the decision, from `username`, via {@link toPermissionSubject}.
22
+ * The question is always a permission (P2); roles are lists policy refers to,
23
+ * carried by nothing and gating nothing.
24
+ *
25
+ * __This is a deliberate reduction, which is the thing #1164 punished.__ The
26
+ * difference is that there it was accidental: `AttachmentManager` rebuilt a
27
+ * subject from three fields and silently dropped `viaToken` while believing it
28
+ * forwarded everything. Here the reduction happens in exactly one place, losing
29
+ * roles is the point, and __`viaToken` must survive it__ — otherwise a job
30
+ * enqueued by a token-bearing request escapes the agent-token ceiling simply by
31
+ * becoming asynchronous.
32
+ */
33
+ import type { JobSubject, AgentTokenGrant, ProxyClaim } from '../managers/UserManager.js';
34
+ import type { ShareGrant } from '../types/Share.js';
35
+ /**
36
+ * Where the work came from.
37
+ *
38
+ * Every origin is a caller; none of them is "a person" as far as this type is
39
+ * concerned. `request` acts for an identity the session authenticated — which
40
+ * may itself be an agent token acting under a delegation. The rest are the
41
+ * server acting for itself, and they are named for that reason rather than
42
+ * defaulting to anonymous: `schedule` and `boot` run as the system principal
43
+ * (#631, env-owned identity, authority resolved through policy like any other
44
+ * caller), and `operator` is a command line.
45
+ */
46
+ export type JobOrigin = 'request' | 'schedule' | 'boot' | 'operator';
47
+ /** The identity a background job runs under. Flat, and serialisable by construction. */
48
+ export interface JobContext {
49
+ /** Who asked. The system principal for the origins where the server acts for itself. */
50
+ username: string;
51
+ /** From what context the work was requested. */
52
+ origin: JobOrigin;
53
+ /**
54
+ * The agent token the requesting call arrived with, when it did.
55
+ *
56
+ * Carried so a job cannot outrun the ceiling that capped the request. Whether
57
+ * a token-triggered job may run at all is #1173's decision — this makes the
58
+ * question answerable rather than invisible.
59
+ */
60
+ viaToken?: AgentTokenGrant;
61
+ /** The share the requesting call presented, when it did (#1222). Carried for the same reason. */
62
+ viaShare?: ShareGrant;
63
+ /** The proxy grant the requesting call acted under, when it did (#1762). Carried for the same reason: a job never runs as the represented person unbounded. */
64
+ viaProxy?: ProxyClaim;
65
+ /** The address the requesting call came from (#1179), when there was one. Provenance for the record. */
66
+ ipAddress?: string;
67
+ /** ISO 8601. When the work was requested, not when it ran. */
68
+ requestedAt: string;
69
+ /** Why, for origins with no person to ask. Free text, for the audit record. */
70
+ reason?: string;
71
+ }
72
+ /** The shape a request-bound context exposes; both WikiContext and ApiContext satisfy it. */
73
+ export interface RequestIdentity {
74
+ username?: string | null;
75
+ viaToken?: AgentTokenGrant;
76
+ viaShare?: ShareGrant;
77
+ viaProxy?: ProxyClaim;
78
+ ipAddress?: string;
79
+ }
80
+ /**
81
+ * The username a request-origin job carries when the request had no identity.
82
+ *
83
+ * Anonymous, and deliberately NOT the system principal. This used to default
84
+ * to `'System'`, which was harmless while `'System'` named nobody. Under #631
85
+ * the principal is a configured name that resolves to the `admin` role, so a
86
+ * route that enqueued work without a `userContext` would have run that work
87
+ * as the system principal — a bypass reached by forgetting an argument. A
88
+ * missing identity is a visitor; nothing more.
89
+ */
90
+ export declare const ANONYMOUS_USERNAME = "Anonymous";
91
+ /**
92
+ * Derive a job context from the request that triggered the work.
93
+ *
94
+ * Takes the identity a route already holds — `req.userContext`, an
95
+ * `ApiContext`, or a `WikiContext`'s `userContext` — rather than a username
96
+ * string, so `viaToken` comes along instead of being dropped.
97
+ */
98
+ export declare function jobContextFromRequest(identity: RequestIdentity | null | undefined, now?: Date): JobContext;
99
+ /**
100
+ * A request-origin context that also says why (#1179).
101
+ *
102
+ * For an act inside a request that has no subject of its own yet, or acts for
103
+ * someone other than the caller: self-registration (the new account is the
104
+ * identity, the reason says so), an identity provider provisioning an account
105
+ * (the system principal is the identity, the reason names the provider), a
106
+ * sign-in refreshing login statistics. The reason is mandatory for the same
107
+ * cause as in `jobContextFromSystem`: an act that cannot say why is the one an
108
+ * assessor asks about.
109
+ */
110
+ export declare function jobContextFromRequestWithReason(identity: RequestIdentity | null | undefined, reason: string, now?: Date): JobContext;
111
+ /**
112
+ * An operator acting from the command line (#1179) — `scripts/restart-audit-chain.ts`
113
+ * and its kind. There is a person, named on the command, and no request; the
114
+ * origin says so, and the reason is the command's own.
115
+ */
116
+ export declare function jobContextFromOperator(username: string, reason: string, now?: Date): JobContext;
117
+ /**
118
+ * A job with no person behind it — boot, a schedule, a retention pass.
119
+ *
120
+ * `systemPrincipal` is the name configured in `.env` as `NGDPBASE_SYSTEM_USER`
121
+ * (#631), read through `PolicyInformationPoint.systemPrincipalName()`. It is a mandatory
122
+ * positional argument rather than a constant here because this module is flat
123
+ * and engine-free by design, and a hardcoded `'System'` would be a second
124
+ * source of truth for a value the environment owns — one that silently names
125
+ * nobody the moment an operator picks a different name.
126
+ *
127
+ * `reason` is required rather than optional. An ownerless action that cannot
128
+ * say why it happened is the thing an assessor asks about, and a default would
129
+ * be filled in by nobody. This is the constructor #1173 needs in order to
130
+ * delete the `hasPermission` string overload: once it exists, every caller has
131
+ * a context to pass, including code that runs with no request at all.
132
+ */
133
+ export declare function jobContextFromSystem(systemPrincipal: string, reason: string, now?: Date): JobContext;
134
+ /** As {@link jobContextFromSystem}, for work started by a timer rather than at boot. */
135
+ export declare function jobContextFromSchedule(systemPrincipal: string, reason: string, now?: Date): JobContext;
136
+ /**
137
+ * The subject for a permission check made *by* this job.
138
+ *
139
+ * `roles` is deliberately absent for EVERY origin, and the PDP (`permits`)
140
+ * resolves them from the username at decision time — which is what makes the
141
+ * answer current rather than a replay of enqueue time. For a request-origin
142
+ * job that is the requester's current roles. For a boot or schedule job the
143
+ * username is the system principal named in `.env` (#631), and it resolves to
144
+ * the roles `ngdpbase.system.roles` declares for it — `admin` by default —
145
+ * through the same policy door as everyone else (P2). No roles ride along in
146
+ * the context, so there is nothing here for a caller to widen.
147
+ *
148
+ * `viaToken` IS carried, so a job triggered through a delegated token is still
149
+ * held to that token's scopes.
150
+ */
151
+ export declare function toPermissionSubject(ctx: JobContext): JobSubject;
152
+ /** One line for a log or an audit record: who, from where, and how. */
153
+ export declare function describeJobContext(ctx: JobContext): string;
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Who asked for a background job, and from where (#631).
3
+ *
4
+ * A job runs after its request has returned, so nothing about the request
5
+ * survives unless it is carried deliberately. `BackgroundJobManager.enqueue()`
6
+ * took a job id and nothing else, so the identity of whoever pressed the button
7
+ * was discarded at the call site — `WikiRoutes` logged
8
+ * `Page reindex requested by: jim` on one line and threw the name away on the
9
+ * next. The audit log, which #1148/#1149/#1150/#1156/#1158/#1138 exist to make
10
+ * trustworthy, could not say who reindexed anything.
11
+ *
12
+ * __Identity and provenance travel; authority does not.__ This carries who
13
+ * asked, from what origin, and whether a delegated token was involved. It
14
+ * deliberately does NOT carry resolved roles. A reindex enqueued at 09:00 and
15
+ * running at 09:12 must not authorise against 09:00's roles — demote or delete
16
+ * the user in between and the job would keep rights they no longer hold. That
17
+ * is the same reasoning `app.ts` gives for agent tokens: *"roles are resolved
18
+ * live per request — a token never carries a snapshot."*
19
+ *
20
+ * So a job that needs to make a permission decision asks for the permission at
21
+ * the moment of the decision, from `username`, via {@link toPermissionSubject}.
22
+ * The question is always a permission (P2); roles are lists policy refers to,
23
+ * carried by nothing and gating nothing.
24
+ *
25
+ * __This is a deliberate reduction, which is the thing #1164 punished.__ The
26
+ * difference is that there it was accidental: `AttachmentManager` rebuilt a
27
+ * subject from three fields and silently dropped `viaToken` while believing it
28
+ * forwarded everything. Here the reduction happens in exactly one place, losing
29
+ * roles is the point, and __`viaToken` must survive it__ — otherwise a job
30
+ * enqueued by a token-bearing request escapes the agent-token ceiling simply by
31
+ * becoming asynchronous.
32
+ */
33
+ /**
34
+ * The username a request-origin job carries when the request had no identity.
35
+ *
36
+ * Anonymous, and deliberately NOT the system principal. This used to default
37
+ * to `'System'`, which was harmless while `'System'` named nobody. Under #631
38
+ * the principal is a configured name that resolves to the `admin` role, so a
39
+ * route that enqueued work without a `userContext` would have run that work
40
+ * as the system principal — a bypass reached by forgetting an argument. A
41
+ * missing identity is a visitor; nothing more.
42
+ */
43
+ export const ANONYMOUS_USERNAME = 'Anonymous';
44
+ /**
45
+ * Derive a job context from the request that triggered the work.
46
+ *
47
+ * Takes the identity a route already holds — `req.userContext`, an
48
+ * `ApiContext`, or a `WikiContext`'s `userContext` — rather than a username
49
+ * string, so `viaToken` comes along instead of being dropped.
50
+ */
51
+ export function jobContextFromRequest(identity, now = new Date()) {
52
+ return {
53
+ username: identity?.username ?? ANONYMOUS_USERNAME,
54
+ origin: 'request',
55
+ ...(identity?.viaToken ? { viaToken: identity.viaToken } : {}),
56
+ ...(identity?.viaShare ? { viaShare: identity.viaShare } : {}),
57
+ ...(identity?.viaProxy ? { viaProxy: identity.viaProxy } : {}),
58
+ ...(identity?.ipAddress ? { ipAddress: identity.ipAddress } : {}),
59
+ requestedAt: now.toISOString()
60
+ };
61
+ }
62
+ /**
63
+ * A request-origin context that also says why (#1179).
64
+ *
65
+ * For an act inside a request that has no subject of its own yet, or acts for
66
+ * someone other than the caller: self-registration (the new account is the
67
+ * identity, the reason says so), an identity provider provisioning an account
68
+ * (the system principal is the identity, the reason names the provider), a
69
+ * sign-in refreshing login statistics. The reason is mandatory for the same
70
+ * cause as in `jobContextFromSystem`: an act that cannot say why is the one an
71
+ * assessor asks about.
72
+ */
73
+ export function jobContextFromRequestWithReason(identity, reason, now = new Date()) {
74
+ return { ...jobContextFromRequest(identity, now), reason };
75
+ }
76
+ /**
77
+ * An operator acting from the command line (#1179) — `scripts/restart-audit-chain.ts`
78
+ * and its kind. There is a person, named on the command, and no request; the
79
+ * origin says so, and the reason is the command's own.
80
+ */
81
+ export function jobContextFromOperator(username, reason, now = new Date()) {
82
+ return { username, origin: 'operator', reason, requestedAt: now.toISOString() };
83
+ }
84
+ /**
85
+ * A job with no person behind it — boot, a schedule, a retention pass.
86
+ *
87
+ * `systemPrincipal` is the name configured in `.env` as `NGDPBASE_SYSTEM_USER`
88
+ * (#631), read through `PolicyInformationPoint.systemPrincipalName()`. It is a mandatory
89
+ * positional argument rather than a constant here because this module is flat
90
+ * and engine-free by design, and a hardcoded `'System'` would be a second
91
+ * source of truth for a value the environment owns — one that silently names
92
+ * nobody the moment an operator picks a different name.
93
+ *
94
+ * `reason` is required rather than optional. An ownerless action that cannot
95
+ * say why it happened is the thing an assessor asks about, and a default would
96
+ * be filled in by nobody. This is the constructor #1173 needs in order to
97
+ * delete the `hasPermission` string overload: once it exists, every caller has
98
+ * a context to pass, including code that runs with no request at all.
99
+ */
100
+ export function jobContextFromSystem(systemPrincipal, reason, now = new Date()) {
101
+ return {
102
+ username: systemPrincipal,
103
+ origin: 'boot',
104
+ requestedAt: now.toISOString(),
105
+ reason
106
+ };
107
+ }
108
+ /** As {@link jobContextFromSystem}, for work started by a timer rather than at boot. */
109
+ export function jobContextFromSchedule(systemPrincipal, reason, now = new Date()) {
110
+ return { ...jobContextFromSystem(systemPrincipal, reason, now), origin: 'schedule' };
111
+ }
112
+ /**
113
+ * The subject for a permission check made *by* this job.
114
+ *
115
+ * `roles` is deliberately absent for EVERY origin, and the PDP (`permits`)
116
+ * resolves them from the username at decision time — which is what makes the
117
+ * answer current rather than a replay of enqueue time. For a request-origin
118
+ * job that is the requester's current roles. For a boot or schedule job the
119
+ * username is the system principal named in `.env` (#631), and it resolves to
120
+ * the roles `ngdpbase.system.roles` declares for it — `admin` by default —
121
+ * through the same policy door as everyone else (P2). No roles ride along in
122
+ * the context, so there is nothing here for a caller to widen.
123
+ *
124
+ * `viaToken` IS carried, so a job triggered through a delegated token is still
125
+ * held to that token's scopes.
126
+ */
127
+ export function toPermissionSubject(ctx) {
128
+ return {
129
+ username: ctx.username,
130
+ isAuthenticated: true,
131
+ // #1212: said on purpose. "Roles absent" used to be the signal, and the
132
+ // type could not tell that from a caller that forgot them.
133
+ resolveRolesNow: true,
134
+ ...(ctx.viaToken ? { viaToken: ctx.viaToken } : {}),
135
+ ...(ctx.viaShare ? { viaShare: ctx.viaShare } : {}),
136
+ ...(ctx.viaProxy ? { viaProxy: ctx.viaProxy } : {})
137
+ };
138
+ }
139
+ /** One line for a log or an audit record: who, from where, and how. */
140
+ export function describeJobContext(ctx) {
141
+ const via = ctx.viaToken ? ` via token ${ctx.viaToken.id} ("${ctx.viaToken.name}")` : '';
142
+ const why = ctx.reason ? ` — ${ctx.reason}` : '';
143
+ return `${ctx.username} (${ctx.origin})${via}${why}`;
144
+ }