@decaf-ts/integrations 0.11.0 → 0.14.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 (610) hide show
  1. package/README.md +164 -0
  2. package/dist/integrations.cjs +1 -1
  3. package/dist/integrations.cjs.map +1 -1
  4. package/dist/integrations.js +1 -1
  5. package/dist/integrations.js.map +1 -1
  6. package/docker/mailpit-compose.yml +17 -0
  7. package/docker/postgres-compose.yml +26 -0
  8. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +12 -23
  9. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +1 -1
  10. package/lib/cjs/blob/core/BlobStoreService.cjs +26 -25
  11. package/lib/cjs/blob/core/BlobStoreService.cjs.map +1 -1
  12. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +12 -23
  13. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +1 -1
  14. package/lib/cjs/blob/s3/S3BlobStoreService.cjs +11 -16
  15. package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +1 -1
  16. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs +14 -16
  17. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs.map +1 -1
  18. package/lib/cjs/calendar/environment.cjs +48 -0
  19. package/lib/cjs/calendar/environment.cjs.map +1 -0
  20. package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs +338 -0
  21. package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs.map +1 -0
  22. package/lib/cjs/calendar/google-calendar/index.cjs +20 -0
  23. package/lib/cjs/calendar/google-calendar/index.cjs.map +1 -0
  24. package/lib/cjs/comms/discord/DiscordService.cjs +318 -0
  25. package/lib/cjs/comms/discord/DiscordService.cjs.map +1 -0
  26. package/lib/cjs/comms/discord/index.cjs +19 -0
  27. package/lib/cjs/comms/discord/index.cjs.map +1 -0
  28. package/lib/cjs/comms/email/EmailService.cjs +376 -0
  29. package/lib/cjs/comms/email/EmailService.cjs.map +1 -0
  30. package/lib/cjs/comms/email/index.cjs +29 -0
  31. package/lib/cjs/comms/email/index.cjs.map +1 -0
  32. package/lib/cjs/comms/email/mime.cjs +225 -0
  33. package/lib/cjs/comms/email/mime.cjs.map +1 -0
  34. package/lib/cjs/comms/email/smtp.cjs +204 -0
  35. package/lib/cjs/comms/email/smtp.cjs.map +1 -0
  36. package/lib/cjs/comms/environment.cjs +79 -0
  37. package/lib/cjs/comms/environment.cjs.map +1 -0
  38. package/lib/cjs/comms/gmail/GmailService.cjs +235 -0
  39. package/lib/cjs/comms/gmail/GmailService.cjs.map +1 -0
  40. package/lib/cjs/comms/gmail/index.cjs +24 -0
  41. package/lib/cjs/comms/gmail/index.cjs.map +1 -0
  42. package/lib/cjs/comms/index.cjs +34 -0
  43. package/lib/cjs/comms/index.cjs.map +1 -0
  44. package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs +325 -0
  45. package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs.map +1 -0
  46. package/lib/cjs/comms/outlook/index.cjs +19 -0
  47. package/lib/cjs/comms/outlook/index.cjs.map +1 -0
  48. package/lib/cjs/comms/slack/SlackService.cjs +264 -0
  49. package/lib/cjs/comms/slack/SlackService.cjs.map +1 -0
  50. package/lib/cjs/comms/slack/index.cjs +24 -0
  51. package/lib/cjs/comms/slack/index.cjs.map +1 -0
  52. package/lib/cjs/comms/teams/TeamsService.cjs +212 -0
  53. package/lib/cjs/comms/teams/TeamsService.cjs.map +1 -0
  54. package/lib/cjs/comms/teams/index.cjs +24 -0
  55. package/lib/cjs/comms/teams/index.cjs.map +1 -0
  56. package/lib/cjs/comms/telegram/TelegramService.cjs +196 -0
  57. package/lib/cjs/comms/telegram/TelegramService.cjs.map +1 -0
  58. package/lib/cjs/comms/telegram/index.cjs +24 -0
  59. package/lib/cjs/comms/telegram/index.cjs.map +1 -0
  60. package/lib/cjs/comms/whatsapp/WhatsAppService.cjs +274 -0
  61. package/lib/cjs/comms/whatsapp/WhatsAppService.cjs.map +1 -0
  62. package/lib/cjs/comms/whatsapp/index.cjs +19 -0
  63. package/lib/cjs/comms/whatsapp/index.cjs.map +1 -0
  64. package/lib/cjs/devops/environment.cjs +43 -0
  65. package/lib/cjs/devops/environment.cjs.map +1 -0
  66. package/lib/cjs/devops/github/GithubService.cjs +302 -0
  67. package/lib/cjs/devops/github/GithubService.cjs.map +1 -0
  68. package/lib/cjs/devops/github/index.cjs +24 -0
  69. package/lib/cjs/devops/github/index.cjs.map +1 -0
  70. package/lib/cjs/devops/gitlab/GitlabService.cjs +282 -0
  71. package/lib/cjs/devops/gitlab/GitlabService.cjs.map +1 -0
  72. package/lib/cjs/devops/gitlab/index.cjs +24 -0
  73. package/lib/cjs/devops/gitlab/index.cjs.map +1 -0
  74. package/lib/cjs/devops/index.cjs +28 -0
  75. package/lib/cjs/devops/index.cjs.map +1 -0
  76. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -0
  77. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +1 -1
  78. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -0
  79. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +1 -1
  80. package/lib/cjs/index.cjs +3 -3
  81. package/lib/cjs/io/airtable/AirtableService.cjs +266 -0
  82. package/lib/cjs/io/airtable/AirtableService.cjs.map +1 -0
  83. package/lib/cjs/io/airtable/index.cjs +24 -0
  84. package/lib/cjs/io/airtable/index.cjs.map +1 -0
  85. package/lib/cjs/io/confluence/ConfluenceService.cjs +317 -0
  86. package/lib/cjs/io/confluence/ConfluenceService.cjs.map +1 -0
  87. package/lib/cjs/io/confluence/index.cjs +19 -0
  88. package/lib/cjs/io/confluence/index.cjs.map +1 -0
  89. package/lib/cjs/io/environment.cjs +74 -0
  90. package/lib/cjs/io/environment.cjs.map +1 -0
  91. package/lib/cjs/io/google-docs/GoogleDocsService.cjs +275 -0
  92. package/lib/cjs/io/google-docs/GoogleDocsService.cjs.map +1 -0
  93. package/lib/cjs/io/google-docs/index.cjs +19 -0
  94. package/lib/cjs/io/google-docs/index.cjs.map +1 -0
  95. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +288 -0
  96. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +1 -0
  97. package/lib/cjs/io/google-sheets/index.cjs +24 -0
  98. package/lib/cjs/io/google-sheets/index.cjs.map +1 -0
  99. package/lib/cjs/io/graphql/GraphqlService.cjs +143 -0
  100. package/lib/cjs/io/graphql/GraphqlService.cjs.map +1 -0
  101. package/lib/cjs/io/graphql/index.cjs +24 -0
  102. package/lib/cjs/io/graphql/index.cjs.map +1 -0
  103. package/lib/cjs/io/index.cjs +35 -0
  104. package/lib/cjs/io/index.cjs.map +1 -0
  105. package/lib/cjs/io/jira/JiraService.cjs +354 -0
  106. package/lib/cjs/io/jira/JiraService.cjs.map +1 -0
  107. package/lib/cjs/io/jira/index.cjs +19 -0
  108. package/lib/cjs/io/jira/index.cjs.map +1 -0
  109. package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs +253 -0
  110. package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs.map +1 -0
  111. package/lib/cjs/io/microsoft-excel/index.cjs +19 -0
  112. package/lib/cjs/io/microsoft-excel/index.cjs.map +1 -0
  113. package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs +261 -0
  114. package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs.map +1 -0
  115. package/lib/cjs/io/microsoft-sharepoint/index.cjs +19 -0
  116. package/lib/cjs/io/microsoft-sharepoint/index.cjs.map +1 -0
  117. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +205 -0
  118. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +1 -0
  119. package/lib/cjs/io/spreadsheet/index.cjs +25 -0
  120. package/lib/cjs/io/spreadsheet/index.cjs.map +1 -0
  121. package/lib/cjs/namespaces/index.cjs +1 -0
  122. package/lib/cjs/namespaces/index.cjs.map +1 -1
  123. package/lib/cjs/namespaces/models/credential.model.cjs +115 -0
  124. package/lib/cjs/namespaces/models/credential.model.cjs.map +1 -0
  125. package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -0
  126. package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +1 -1
  127. package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -0
  128. package/lib/cjs/namespaces/models/group-membership.model.cjs.map +1 -1
  129. package/lib/cjs/namespaces/models/group.model.cjs +2 -0
  130. package/lib/cjs/namespaces/models/group.model.cjs.map +1 -1
  131. package/lib/cjs/namespaces/models/index.cjs +1 -0
  132. package/lib/cjs/namespaces/models/index.cjs.map +1 -1
  133. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -0
  134. package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +1 -1
  135. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -0
  136. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +1 -1
  137. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -0
  138. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +1 -1
  139. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -0
  140. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +1 -1
  141. package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -0
  142. package/lib/cjs/namespaces/models/org-unit.model.cjs.map +1 -1
  143. package/lib/cjs/namespaces/models/permission.model.cjs +2 -0
  144. package/lib/cjs/namespaces/models/permission.model.cjs.map +1 -1
  145. package/lib/cjs/namespaces/models/principal.model.cjs +2 -0
  146. package/lib/cjs/namespaces/models/principal.model.cjs.map +1 -1
  147. package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -0
  148. package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +1 -1
  149. package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -0
  150. package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +1 -1
  151. package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -0
  152. package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +1 -1
  153. package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -0
  154. package/lib/cjs/namespaces/models/role-permission.model.cjs.map +1 -1
  155. package/lib/cjs/namespaces/models/role.model.cjs +2 -0
  156. package/lib/cjs/namespaces/models/role.model.cjs.map +1 -1
  157. package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -0
  158. package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +1 -1
  159. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -0
  160. package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +1 -1
  161. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -0
  162. package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +1 -1
  163. package/lib/cjs/namespaces/models/tenant.model.cjs +2 -0
  164. package/lib/cjs/namespaces/models/tenant.model.cjs.map +1 -1
  165. package/lib/cjs/namespaces/models/user.model.cjs +2 -0
  166. package/lib/cjs/namespaces/models/user.model.cjs.map +1 -1
  167. package/lib/cjs/namespaces/rls/index.cjs +28 -0
  168. package/lib/cjs/namespaces/rls/index.cjs.map +1 -0
  169. package/lib/cjs/namespaces/rls/principal-resolver.cjs +66 -0
  170. package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +1 -0
  171. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +269 -0
  172. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +1 -0
  173. package/lib/cjs/namespaces/rls/rls.constants.cjs +79 -0
  174. package/lib/cjs/namespaces/rls/rls.constants.cjs.map +1 -0
  175. package/lib/cjs/namespaces/rls/rls.template.cjs +719 -0
  176. package/lib/cjs/namespaces/rls/rls.template.cjs.map +1 -0
  177. package/lib/cjs/namespaces/rls/rls.types.cjs +4 -0
  178. package/lib/cjs/namespaces/rls/rls.types.cjs.map +1 -0
  179. package/lib/cjs/namespaces/rls/session-binding.cjs +70 -0
  180. package/lib/cjs/namespaces/rls/session-binding.cjs.map +1 -0
  181. package/lib/cjs/namespaces/services/credential.service.cjs +327 -0
  182. package/lib/cjs/namespaces/services/credential.service.cjs.map +1 -0
  183. package/lib/cjs/namespaces/services/index.cjs +1 -0
  184. package/lib/cjs/namespaces/services/index.cjs.map +1 -1
  185. package/lib/cjs/namespaces/types.cjs +6 -1
  186. package/lib/cjs/namespaces/types.cjs.map +1 -1
  187. package/lib/cjs/redis/adapter.cjs +7 -1
  188. package/lib/cjs/redis/adapter.cjs.map +1 -1
  189. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +80 -0
  190. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +1 -0
  191. package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -15
  192. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +1 -1
  193. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -16
  194. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +1 -1
  195. package/lib/cjs/secrets/core/SecretReference.cjs +1 -0
  196. package/lib/cjs/secrets/core/SecretReference.cjs.map +1 -1
  197. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +28 -0
  198. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +1 -0
  199. package/lib/cjs/secrets/fs/FsSecretService.cjs +420 -0
  200. package/lib/cjs/secrets/fs/FsSecretService.cjs.map +1 -0
  201. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +25 -0
  202. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +1 -0
  203. package/lib/cjs/secrets/fs/index.cjs +27 -0
  204. package/lib/cjs/secrets/fs/index.cjs.map +1 -0
  205. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -16
  206. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +1 -1
  207. package/lib/cjs/secrets/index.cjs +2 -0
  208. package/lib/cjs/secrets/index.cjs.map +1 -1
  209. package/lib/cjs/secrets/model/ModelSecretService.cjs +335 -43
  210. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +1 -1
  211. package/lib/cjs/secrets/model/Secret.cjs +83 -5
  212. package/lib/cjs/secrets/model/Secret.cjs.map +1 -1
  213. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -16
  214. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +1 -1
  215. package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -16
  216. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +1 -1
  217. package/lib/cjs/shared/environmentValue.cjs +24 -0
  218. package/lib/cjs/shared/environmentValue.cjs.map +1 -1
  219. package/lib/cjs/shared/http/HttpApiService.cjs +190 -0
  220. package/lib/cjs/shared/http/HttpApiService.cjs.map +1 -0
  221. package/lib/cjs/shared/http/hermeticBoot.cjs +150 -0
  222. package/lib/cjs/shared/http/hermeticBoot.cjs.map +1 -0
  223. package/lib/cjs/shared/http/index.cjs +28 -0
  224. package/lib/cjs/shared/http/index.cjs.map +1 -0
  225. package/lib/esm/blob/azure/AzureBlobStoreService.js +13 -21
  226. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +1 -1
  227. package/lib/esm/blob/core/BlobStoreService.js +26 -25
  228. package/lib/esm/blob/core/BlobStoreService.js.map +1 -1
  229. package/lib/esm/blob/gcp/GcsBlobStoreService.js +13 -21
  230. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +1 -1
  231. package/lib/esm/blob/s3/S3BlobStoreService.js +12 -14
  232. package/lib/esm/blob/s3/S3BlobStoreService.js.map +1 -1
  233. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +14 -16
  234. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +1 -1
  235. package/lib/esm/calendar/environment.js +44 -0
  236. package/lib/esm/calendar/environment.js.map +1 -0
  237. package/lib/esm/calendar/google-calendar/GoogleCalendarService.js +333 -0
  238. package/lib/esm/calendar/google-calendar/GoogleCalendarService.js.map +1 -0
  239. package/lib/esm/calendar/google-calendar/index.js +3 -0
  240. package/lib/esm/calendar/google-calendar/index.js.map +1 -0
  241. package/lib/esm/comms/discord/DiscordService.js +313 -0
  242. package/lib/esm/comms/discord/DiscordService.js.map +1 -0
  243. package/lib/esm/comms/discord/index.js +2 -0
  244. package/lib/esm/comms/discord/index.js.map +1 -0
  245. package/lib/esm/comms/email/EmailService.js +338 -0
  246. package/lib/esm/comms/email/EmailService.js.map +1 -0
  247. package/lib/esm/comms/email/index.js +12 -0
  248. package/lib/esm/comms/email/index.js.map +1 -0
  249. package/lib/esm/comms/email/mime.js +218 -0
  250. package/lib/esm/comms/email/mime.js.map +1 -0
  251. package/lib/esm/comms/email/smtp.js +166 -0
  252. package/lib/esm/comms/email/smtp.js.map +1 -0
  253. package/lib/esm/comms/environment.js +75 -0
  254. package/lib/esm/comms/environment.js.map +1 -0
  255. package/lib/esm/comms/gmail/GmailService.js +230 -0
  256. package/lib/esm/comms/gmail/GmailService.js.map +1 -0
  257. package/lib/esm/comms/gmail/index.js +7 -0
  258. package/lib/esm/comms/gmail/index.js.map +1 -0
  259. package/lib/esm/comms/index.js +17 -0
  260. package/lib/esm/comms/index.js.map +1 -0
  261. package/lib/esm/comms/outlook/MicrosoftOutlookService.js +320 -0
  262. package/lib/esm/comms/outlook/MicrosoftOutlookService.js.map +1 -0
  263. package/lib/esm/comms/outlook/index.js +2 -0
  264. package/lib/esm/comms/outlook/index.js.map +1 -0
  265. package/lib/esm/comms/slack/SlackService.js +259 -0
  266. package/lib/esm/comms/slack/SlackService.js.map +1 -0
  267. package/lib/esm/comms/slack/index.js +7 -0
  268. package/lib/esm/comms/slack/index.js.map +1 -0
  269. package/lib/esm/comms/teams/TeamsService.js +204 -0
  270. package/lib/esm/comms/teams/TeamsService.js.map +1 -0
  271. package/lib/esm/comms/teams/index.js +7 -0
  272. package/lib/esm/comms/teams/index.js.map +1 -0
  273. package/lib/esm/comms/telegram/TelegramService.js +191 -0
  274. package/lib/esm/comms/telegram/TelegramService.js.map +1 -0
  275. package/lib/esm/comms/telegram/index.js +7 -0
  276. package/lib/esm/comms/telegram/index.js.map +1 -0
  277. package/lib/esm/comms/whatsapp/WhatsAppService.js +269 -0
  278. package/lib/esm/comms/whatsapp/WhatsAppService.js.map +1 -0
  279. package/lib/esm/comms/whatsapp/index.js +2 -0
  280. package/lib/esm/comms/whatsapp/index.js.map +1 -0
  281. package/lib/esm/devops/environment.js +39 -0
  282. package/lib/esm/devops/environment.js.map +1 -0
  283. package/lib/esm/devops/github/GithubService.js +297 -0
  284. package/lib/esm/devops/github/GithubService.js.map +1 -0
  285. package/lib/esm/devops/github/index.js +7 -0
  286. package/lib/esm/devops/github/index.js.map +1 -0
  287. package/lib/esm/devops/gitlab/GitlabService.js +277 -0
  288. package/lib/esm/devops/gitlab/GitlabService.js.map +1 -0
  289. package/lib/esm/devops/gitlab/index.js +7 -0
  290. package/lib/esm/devops/gitlab/index.js.map +1 -0
  291. package/lib/esm/devops/index.js +11 -0
  292. package/lib/esm/devops/index.js.map +1 -0
  293. package/lib/esm/feature-flags/models/FeatureFlag.model.js +2 -0
  294. package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +1 -1
  295. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +2 -0
  296. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +1 -1
  297. package/lib/esm/index.js +3 -3
  298. package/lib/esm/io/airtable/AirtableService.js +261 -0
  299. package/lib/esm/io/airtable/AirtableService.js.map +1 -0
  300. package/lib/esm/io/airtable/index.js +7 -0
  301. package/lib/esm/io/airtable/index.js.map +1 -0
  302. package/lib/esm/io/confluence/ConfluenceService.js +312 -0
  303. package/lib/esm/io/confluence/ConfluenceService.js.map +1 -0
  304. package/lib/esm/io/confluence/index.js +2 -0
  305. package/lib/esm/io/confluence/index.js.map +1 -0
  306. package/lib/esm/io/environment.js +70 -0
  307. package/lib/esm/io/environment.js.map +1 -0
  308. package/lib/esm/io/google-docs/GoogleDocsService.js +270 -0
  309. package/lib/esm/io/google-docs/GoogleDocsService.js.map +1 -0
  310. package/lib/esm/io/google-docs/index.js +2 -0
  311. package/lib/esm/io/google-docs/index.js.map +1 -0
  312. package/lib/esm/io/google-sheets/GoogleSheetsService.js +283 -0
  313. package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +1 -0
  314. package/lib/esm/io/google-sheets/index.js +7 -0
  315. package/lib/esm/io/google-sheets/index.js.map +1 -0
  316. package/lib/esm/io/graphql/GraphqlService.js +138 -0
  317. package/lib/esm/io/graphql/GraphqlService.js.map +1 -0
  318. package/lib/esm/io/graphql/index.js +7 -0
  319. package/lib/esm/io/graphql/index.js.map +1 -0
  320. package/lib/esm/io/index.js +18 -0
  321. package/lib/esm/io/index.js.map +1 -0
  322. package/lib/esm/io/jira/JiraService.js +349 -0
  323. package/lib/esm/io/jira/JiraService.js.map +1 -0
  324. package/lib/esm/io/jira/index.js +2 -0
  325. package/lib/esm/io/jira/index.js.map +1 -0
  326. package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js +248 -0
  327. package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js.map +1 -0
  328. package/lib/esm/io/microsoft-excel/index.js +2 -0
  329. package/lib/esm/io/microsoft-excel/index.js.map +1 -0
  330. package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js +256 -0
  331. package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js.map +1 -0
  332. package/lib/esm/io/microsoft-sharepoint/index.js +2 -0
  333. package/lib/esm/io/microsoft-sharepoint/index.js.map +1 -0
  334. package/lib/esm/io/spreadsheet/SpreadsheetService.js +200 -0
  335. package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +1 -0
  336. package/lib/esm/io/spreadsheet/index.js +8 -0
  337. package/lib/esm/io/spreadsheet/index.js.map +1 -0
  338. package/lib/esm/namespaces/index.js +1 -0
  339. package/lib/esm/namespaces/index.js.map +1 -1
  340. package/lib/esm/namespaces/models/credential.model.js +106 -0
  341. package/lib/esm/namespaces/models/credential.model.js.map +1 -0
  342. package/lib/esm/namespaces/models/effective-permission.model.js +2 -0
  343. package/lib/esm/namespaces/models/effective-permission.model.js.map +1 -1
  344. package/lib/esm/namespaces/models/group-membership.model.js +2 -0
  345. package/lib/esm/namespaces/models/group-membership.model.js.map +1 -1
  346. package/lib/esm/namespaces/models/group.model.js +2 -0
  347. package/lib/esm/namespaces/models/group.model.js.map +1 -1
  348. package/lib/esm/namespaces/models/index.js +1 -0
  349. package/lib/esm/namespaces/models/index.js.map +1 -1
  350. package/lib/esm/namespaces/models/inheritance-block.model.js +2 -0
  351. package/lib/esm/namespaces/models/inheritance-block.model.js.map +1 -1
  352. package/lib/esm/namespaces/models/org-unit-closure.model.js +2 -0
  353. package/lib/esm/namespaces/models/org-unit-closure.model.js.map +1 -1
  354. package/lib/esm/namespaces/models/org-unit-membership.model.js +2 -0
  355. package/lib/esm/namespaces/models/org-unit-membership.model.js.map +1 -1
  356. package/lib/esm/namespaces/models/org-unit-profile.model.js +2 -0
  357. package/lib/esm/namespaces/models/org-unit-profile.model.js.map +1 -1
  358. package/lib/esm/namespaces/models/org-unit.model.js +2 -0
  359. package/lib/esm/namespaces/models/org-unit.model.js.map +1 -1
  360. package/lib/esm/namespaces/models/permission.model.js +2 -0
  361. package/lib/esm/namespaces/models/permission.model.js.map +1 -1
  362. package/lib/esm/namespaces/models/principal.model.js +2 -0
  363. package/lib/esm/namespaces/models/principal.model.js.map +1 -1
  364. package/lib/esm/namespaces/models/protected-resource.model.js +2 -0
  365. package/lib/esm/namespaces/models/protected-resource.model.js.map +1 -1
  366. package/lib/esm/namespaces/models/resource-grant.model.js +2 -0
  367. package/lib/esm/namespaces/models/resource-grant.model.js.map +1 -1
  368. package/lib/esm/namespaces/models/role-assignment.model.js +2 -0
  369. package/lib/esm/namespaces/models/role-assignment.model.js.map +1 -1
  370. package/lib/esm/namespaces/models/role-permission.model.js +2 -0
  371. package/lib/esm/namespaces/models/role-permission.model.js.map +1 -1
  372. package/lib/esm/namespaces/models/role.model.js +2 -0
  373. package/lib/esm/namespaces/models/role.model.js.map +1 -1
  374. package/lib/esm/namespaces/models/storage-binding.model.js +2 -0
  375. package/lib/esm/namespaces/models/storage-binding.model.js.map +1 -1
  376. package/lib/esm/namespaces/models/tenant-membership.model.js +2 -0
  377. package/lib/esm/namespaces/models/tenant-membership.model.js.map +1 -1
  378. package/lib/esm/namespaces/models/tenant-profile.model.js +2 -0
  379. package/lib/esm/namespaces/models/tenant-profile.model.js.map +1 -1
  380. package/lib/esm/namespaces/models/tenant.model.js +2 -0
  381. package/lib/esm/namespaces/models/tenant.model.js.map +1 -1
  382. package/lib/esm/namespaces/models/user.model.js +2 -0
  383. package/lib/esm/namespaces/models/user.model.js.map +1 -1
  384. package/lib/esm/namespaces/rls/index.js +11 -0
  385. package/lib/esm/namespaces/rls/index.js.map +1 -0
  386. package/lib/esm/namespaces/rls/principal-resolver.js +61 -0
  387. package/lib/esm/namespaces/rls/principal-resolver.js.map +1 -0
  388. package/lib/esm/namespaces/rls/rls-bootstrap.service.js +261 -0
  389. package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +1 -0
  390. package/lib/esm/namespaces/rls/rls.constants.js +75 -0
  391. package/lib/esm/namespaces/rls/rls.constants.js.map +1 -0
  392. package/lib/esm/namespaces/rls/rls.template.js +711 -0
  393. package/lib/esm/namespaces/rls/rls.template.js.map +1 -0
  394. package/lib/esm/namespaces/rls/rls.types.js +9 -0
  395. package/lib/esm/namespaces/rls/rls.types.js.map +1 -0
  396. package/lib/esm/namespaces/rls/session-binding.js +65 -0
  397. package/lib/esm/namespaces/rls/session-binding.js.map +1 -0
  398. package/lib/esm/namespaces/services/credential.service.js +322 -0
  399. package/lib/esm/namespaces/services/credential.service.js.map +1 -0
  400. package/lib/esm/namespaces/services/index.js +1 -0
  401. package/lib/esm/namespaces/services/index.js.map +1 -1
  402. package/lib/esm/namespaces/types.js +6 -0
  403. package/lib/esm/namespaces/types.js.map +1 -1
  404. package/lib/esm/redis/adapter.js +7 -1
  405. package/lib/esm/redis/adapter.js.map +1 -1
  406. package/lib/esm/secrets/InfraCredentialBootstrap.js +74 -0
  407. package/lib/esm/secrets/InfraCredentialBootstrap.js.map +1 -0
  408. package/lib/esm/secrets/aws/AwsSecretService.js +3 -13
  409. package/lib/esm/secrets/aws/AwsSecretService.js.map +1 -1
  410. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +2 -13
  411. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +1 -1
  412. package/lib/esm/secrets/core/SecretReference.js +1 -0
  413. package/lib/esm/secrets/core/SecretReference.js.map +1 -1
  414. package/lib/esm/secrets/fs/FsSecretEnvironment.js +24 -0
  415. package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +1 -0
  416. package/lib/esm/secrets/fs/FsSecretService.js +412 -0
  417. package/lib/esm/secrets/fs/FsSecretService.js.map +1 -0
  418. package/lib/esm/secrets/fs/FsSecretServiceConfig.js +21 -0
  419. package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +1 -0
  420. package/lib/esm/secrets/fs/index.js +10 -0
  421. package/lib/esm/secrets/fs/index.js.map +1 -0
  422. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +2 -13
  423. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +1 -1
  424. package/lib/esm/secrets/index.js +2 -0
  425. package/lib/esm/secrets/index.js.map +1 -1
  426. package/lib/esm/secrets/model/ModelSecretService.js +337 -42
  427. package/lib/esm/secrets/model/ModelSecretService.js.map +1 -1
  428. package/lib/esm/secrets/model/Secret.js +86 -7
  429. package/lib/esm/secrets/model/Secret.js.map +1 -1
  430. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +2 -13
  431. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +1 -1
  432. package/lib/esm/secrets/vault/VaultSecretService.js +2 -13
  433. package/lib/esm/secrets/vault/VaultSecretService.js.map +1 -1
  434. package/lib/esm/shared/environmentValue.js +24 -0
  435. package/lib/esm/shared/environmentValue.js.map +1 -1
  436. package/lib/esm/shared/http/HttpApiService.js +181 -0
  437. package/lib/esm/shared/http/HttpApiService.js.map +1 -0
  438. package/lib/esm/shared/http/hermeticBoot.js +146 -0
  439. package/lib/esm/shared/http/hermeticBoot.js.map +1 -0
  440. package/lib/esm/shared/http/index.js +11 -0
  441. package/lib/esm/shared/http/index.js.map +1 -0
  442. package/lib/types/blob/azure/AzureBlobStoreService.d.cts +7 -7
  443. package/lib/types/blob/azure/AzureBlobStoreService.d.mts +7 -7
  444. package/lib/types/blob/core/BlobStoreService.d.cts +28 -27
  445. package/lib/types/blob/core/BlobStoreService.d.mts +28 -27
  446. package/lib/types/blob/gcp/GcsBlobStoreService.d.cts +7 -7
  447. package/lib/types/blob/gcp/GcsBlobStoreService.d.mts +7 -7
  448. package/lib/types/blob/s3/S3BlobStoreService.d.cts +9 -1
  449. package/lib/types/blob/s3/S3BlobStoreService.d.mts +9 -1
  450. package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.cts +11 -15
  451. package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.mts +11 -15
  452. package/lib/types/calendar/environment.d.cts +48 -0
  453. package/lib/types/calendar/environment.d.mts +48 -0
  454. package/lib/types/calendar/google-calendar/GoogleCalendarService.d.cts +316 -0
  455. package/lib/types/calendar/google-calendar/GoogleCalendarService.d.mts +316 -0
  456. package/lib/types/calendar/google-calendar/index.d.cts +2 -0
  457. package/lib/types/calendar/google-calendar/index.d.mts +2 -0
  458. package/lib/types/comms/discord/DiscordService.d.cts +285 -0
  459. package/lib/types/comms/discord/DiscordService.d.mts +285 -0
  460. package/lib/types/comms/discord/index.d.cts +1 -0
  461. package/lib/types/comms/discord/index.d.mts +1 -0
  462. package/lib/types/comms/email/EmailService.d.cts +184 -0
  463. package/lib/types/comms/email/EmailService.d.mts +184 -0
  464. package/lib/types/comms/email/index.d.cts +11 -0
  465. package/lib/types/comms/email/index.d.mts +11 -0
  466. package/lib/types/comms/email/mime.d.cts +84 -0
  467. package/lib/types/comms/email/mime.d.mts +84 -0
  468. package/lib/types/comms/email/smtp.d.cts +107 -0
  469. package/lib/types/comms/email/smtp.d.mts +107 -0
  470. package/lib/types/comms/environment.d.cts +110 -0
  471. package/lib/types/comms/environment.d.mts +110 -0
  472. package/lib/types/comms/gmail/GmailService.d.cts +190 -0
  473. package/lib/types/comms/gmail/GmailService.d.mts +190 -0
  474. package/lib/types/comms/gmail/index.d.cts +6 -0
  475. package/lib/types/comms/gmail/index.d.mts +6 -0
  476. package/lib/types/comms/index.d.cts +16 -0
  477. package/lib/types/comms/index.d.mts +16 -0
  478. package/lib/types/comms/outlook/MicrosoftOutlookService.d.cts +282 -0
  479. package/lib/types/comms/outlook/MicrosoftOutlookService.d.mts +282 -0
  480. package/lib/types/comms/outlook/index.d.cts +1 -0
  481. package/lib/types/comms/outlook/index.d.mts +1 -0
  482. package/lib/types/comms/slack/SlackService.d.cts +259 -0
  483. package/lib/types/comms/slack/SlackService.d.mts +259 -0
  484. package/lib/types/comms/slack/index.d.cts +6 -0
  485. package/lib/types/comms/slack/index.d.mts +6 -0
  486. package/lib/types/comms/teams/TeamsService.d.cts +172 -0
  487. package/lib/types/comms/teams/TeamsService.d.mts +172 -0
  488. package/lib/types/comms/teams/index.d.cts +6 -0
  489. package/lib/types/comms/teams/index.d.mts +6 -0
  490. package/lib/types/comms/telegram/TelegramService.d.cts +202 -0
  491. package/lib/types/comms/telegram/TelegramService.d.mts +202 -0
  492. package/lib/types/comms/telegram/index.d.cts +6 -0
  493. package/lib/types/comms/telegram/index.d.mts +6 -0
  494. package/lib/types/comms/whatsapp/WhatsAppService.d.cts +258 -0
  495. package/lib/types/comms/whatsapp/WhatsAppService.d.mts +258 -0
  496. package/lib/types/comms/whatsapp/index.d.cts +1 -0
  497. package/lib/types/comms/whatsapp/index.d.mts +1 -0
  498. package/lib/types/devops/environment.d.cts +62 -0
  499. package/lib/types/devops/environment.d.mts +62 -0
  500. package/lib/types/devops/github/GithubService.d.cts +287 -0
  501. package/lib/types/devops/github/GithubService.d.mts +287 -0
  502. package/lib/types/devops/github/index.d.cts +6 -0
  503. package/lib/types/devops/github/index.d.mts +6 -0
  504. package/lib/types/devops/gitlab/GitlabService.d.cts +277 -0
  505. package/lib/types/devops/gitlab/GitlabService.d.mts +277 -0
  506. package/lib/types/devops/gitlab/index.d.cts +6 -0
  507. package/lib/types/devops/gitlab/index.d.mts +6 -0
  508. package/lib/types/devops/index.d.cts +10 -0
  509. package/lib/types/devops/index.d.mts +10 -0
  510. package/lib/types/index.d.cts +2 -2
  511. package/lib/types/index.d.mts +2 -2
  512. package/lib/types/io/airtable/AirtableService.d.cts +268 -0
  513. package/lib/types/io/airtable/AirtableService.d.mts +268 -0
  514. package/lib/types/io/airtable/index.d.cts +6 -0
  515. package/lib/types/io/airtable/index.d.mts +6 -0
  516. package/lib/types/io/confluence/ConfluenceService.d.cts +250 -0
  517. package/lib/types/io/confluence/ConfluenceService.d.mts +250 -0
  518. package/lib/types/io/confluence/index.d.cts +1 -0
  519. package/lib/types/io/confluence/index.d.mts +1 -0
  520. package/lib/types/io/environment.d.cts +107 -0
  521. package/lib/types/io/environment.d.mts +107 -0
  522. package/lib/types/io/google-docs/GoogleDocsService.d.cts +188 -0
  523. package/lib/types/io/google-docs/GoogleDocsService.d.mts +188 -0
  524. package/lib/types/io/google-docs/index.d.cts +1 -0
  525. package/lib/types/io/google-docs/index.d.mts +1 -0
  526. package/lib/types/io/google-sheets/GoogleSheetsService.d.cts +204 -0
  527. package/lib/types/io/google-sheets/GoogleSheetsService.d.mts +204 -0
  528. package/lib/types/io/google-sheets/index.d.cts +6 -0
  529. package/lib/types/io/google-sheets/index.d.mts +6 -0
  530. package/lib/types/io/graphql/GraphqlService.d.cts +173 -0
  531. package/lib/types/io/graphql/GraphqlService.d.mts +173 -0
  532. package/lib/types/io/graphql/index.d.cts +6 -0
  533. package/lib/types/io/graphql/index.d.mts +6 -0
  534. package/lib/types/io/index.d.cts +17 -0
  535. package/lib/types/io/index.d.mts +17 -0
  536. package/lib/types/io/jira/JiraService.d.cts +300 -0
  537. package/lib/types/io/jira/JiraService.d.mts +300 -0
  538. package/lib/types/io/jira/index.d.cts +1 -0
  539. package/lib/types/io/jira/index.d.mts +1 -0
  540. package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.cts +230 -0
  541. package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.mts +230 -0
  542. package/lib/types/io/microsoft-excel/index.d.cts +1 -0
  543. package/lib/types/io/microsoft-excel/index.d.mts +1 -0
  544. package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.cts +226 -0
  545. package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.mts +226 -0
  546. package/lib/types/io/microsoft-sharepoint/index.d.cts +1 -0
  547. package/lib/types/io/microsoft-sharepoint/index.d.mts +1 -0
  548. package/lib/types/io/spreadsheet/SpreadsheetService.d.cts +144 -0
  549. package/lib/types/io/spreadsheet/SpreadsheetService.d.mts +144 -0
  550. package/lib/types/io/spreadsheet/index.d.cts +7 -0
  551. package/lib/types/io/spreadsheet/index.d.mts +7 -0
  552. package/lib/types/namespaces/index.d.cts +1 -0
  553. package/lib/types/namespaces/index.d.mts +1 -0
  554. package/lib/types/namespaces/models/credential.model.d.cts +23 -0
  555. package/lib/types/namespaces/models/credential.model.d.mts +23 -0
  556. package/lib/types/namespaces/models/index.d.cts +1 -0
  557. package/lib/types/namespaces/models/index.d.mts +1 -0
  558. package/lib/types/namespaces/rls/index.d.cts +10 -0
  559. package/lib/types/namespaces/rls/index.d.mts +10 -0
  560. package/lib/types/namespaces/rls/principal-resolver.d.cts +47 -0
  561. package/lib/types/namespaces/rls/principal-resolver.d.mts +47 -0
  562. package/lib/types/namespaces/rls/rls-bootstrap.service.d.cts +157 -0
  563. package/lib/types/namespaces/rls/rls-bootstrap.service.d.mts +157 -0
  564. package/lib/types/namespaces/rls/rls.constants.d.cts +52 -0
  565. package/lib/types/namespaces/rls/rls.constants.d.mts +52 -0
  566. package/lib/types/namespaces/rls/rls.template.d.cts +42 -0
  567. package/lib/types/namespaces/rls/rls.template.d.mts +42 -0
  568. package/lib/types/namespaces/rls/rls.types.d.cts +77 -0
  569. package/lib/types/namespaces/rls/rls.types.d.mts +77 -0
  570. package/lib/types/namespaces/rls/session-binding.d.cts +87 -0
  571. package/lib/types/namespaces/rls/session-binding.d.mts +87 -0
  572. package/lib/types/namespaces/services/credential.service.d.cts +175 -0
  573. package/lib/types/namespaces/services/credential.service.d.mts +175 -0
  574. package/lib/types/namespaces/services/index.d.cts +1 -0
  575. package/lib/types/namespaces/services/index.d.mts +1 -0
  576. package/lib/types/namespaces/types.d.cts +37 -0
  577. package/lib/types/namespaces/types.d.mts +37 -0
  578. package/lib/types/redis/adapter.d.cts +2 -0
  579. package/lib/types/redis/adapter.d.mts +2 -0
  580. package/lib/types/redis/types.d.cts +27 -2
  581. package/lib/types/redis/types.d.mts +27 -2
  582. package/lib/types/secrets/InfraCredentialBootstrap.d.cts +100 -0
  583. package/lib/types/secrets/InfraCredentialBootstrap.d.mts +100 -0
  584. package/lib/types/secrets/core/SecretTypes.d.cts +15 -1
  585. package/lib/types/secrets/core/SecretTypes.d.mts +15 -1
  586. package/lib/types/secrets/fs/FsSecretEnvironment.d.cts +42 -0
  587. package/lib/types/secrets/fs/FsSecretEnvironment.d.mts +42 -0
  588. package/lib/types/secrets/fs/FsSecretService.d.cts +207 -0
  589. package/lib/types/secrets/fs/FsSecretService.d.mts +207 -0
  590. package/lib/types/secrets/fs/FsSecretServiceConfig.d.cts +37 -0
  591. package/lib/types/secrets/fs/FsSecretServiceConfig.d.mts +37 -0
  592. package/lib/types/secrets/fs/index.d.cts +9 -0
  593. package/lib/types/secrets/fs/index.d.mts +9 -0
  594. package/lib/types/secrets/index.d.cts +2 -0
  595. package/lib/types/secrets/index.d.mts +2 -0
  596. package/lib/types/secrets/model/ModelSecretService.d.cts +190 -1
  597. package/lib/types/secrets/model/ModelSecretService.d.mts +190 -1
  598. package/lib/types/secrets/model/Secret.d.cts +44 -3
  599. package/lib/types/secrets/model/Secret.d.mts +44 -3
  600. package/lib/types/shared/environmentValue.d.cts +24 -0
  601. package/lib/types/shared/environmentValue.d.mts +24 -0
  602. package/lib/types/shared/http/HttpApiService.d.cts +193 -0
  603. package/lib/types/shared/http/HttpApiService.d.mts +193 -0
  604. package/lib/types/shared/http/hermeticBoot.d.cts +84 -0
  605. package/lib/types/shared/http/hermeticBoot.d.mts +84 -0
  606. package/lib/types/shared/http/index.d.cts +10 -0
  607. package/lib/types/shared/http/index.d.mts +10 -0
  608. package/package.json +279 -6
  609. package/sql/002_rls.sql +660 -15
  610. package/sql/004_credentials.sql +46 -0
@@ -0,0 +1,175 @@
1
+ import { Repository } from "@decaf-ts/core";
2
+ import { DeleteSecretOptions, ExistsSecretOptions, RotateSecretOptions, SecretName, SecretPayload, SecretProvider, SecretReference, StoreSecretOptions } from "../../secrets/core/index.d.mts";
3
+ import { CreateCredentialInput, CredentialSummary, RotateCredentialInput } from "../types.d.mts";
4
+ import { BaseModelService } from "../utils.d.mts";
5
+ import { Credential } from "../models/credential.model.d.mts";
6
+ /**
7
+ * @description Minimal secret-store contract required by the credential service
8
+ * @summary Structural subset of the secret service API used for credential
9
+ * values; `rotate` is optional — when absent, rotation falls back to a
10
+ * re-store under the same secret name.
11
+ */
12
+ export interface CredentialSecretStore {
13
+ /** @description Fixed provider discriminator of the backing implementation. */
14
+ readonly provider: SecretProvider;
15
+ /** @description Stores (or overwrites) a named secret payload. */
16
+ store<T extends SecretPayload = SecretPayload>(name: SecretName, value: T, options?: StoreSecretOptions, ...args: any[]): Promise<SecretReference>;
17
+ /** @description Deletes a stored secret. */
18
+ delete(nameOrRef: SecretName | SecretReference, options?: DeleteSecretOptions, ...args: any[]): Promise<void>;
19
+ /** @description Checks whether a secret exists. */
20
+ exists(nameOrRef: SecretName | SecretReference, options?: ExistsSecretOptions, ...args: any[]): Promise<boolean>;
21
+ /** @description Optional in-place rotation of a stored secret value. */
22
+ rotate?(nameOrRef: SecretName | SecretReference, value: SecretPayload, options?: RotateSecretOptions, ...args: any[]): Promise<SecretReference>;
23
+ }
24
+ /**
25
+ * @description Injection configuration for the credential service
26
+ * @summary When `secretService` is omitted, the service lazily boots a
27
+ * `{@link ModelSecretService}` on first use; when `repository` is omitted,
28
+ * the base `BaseModelService` repository for `{@link Credential}` is used.
29
+ */
30
+ export interface CredentialServiceConfig {
31
+ /** @description Secret store for credential values (must have `provider: "model"`). */
32
+ secretService?: CredentialSecretStore;
33
+ /** @description Repository backing the `Credential` metadata rows. */
34
+ repository?: Repository<Credential, any>;
35
+ }
36
+ /**
37
+ * @description Manages namespaced credentials and their encrypted secret values
38
+ * @summary Extends `BaseModelService<Credential>` to create, rotate, read,
39
+ * list, use-mark, and delete credentials. On create, the secret value is
40
+ * stored under a generated name first and the metadata row second; if the
41
+ * row insert fails, the stored secret is force-deleted so no orphaned secret
42
+ * remains. Deletion mirrors that: the row is removed, then the secret value.
43
+ * The secret store must resolve to `provider: "model"` — user/runtime
44
+ * credentials always live in the model-backed secret service.
45
+ * @category Namespaces
46
+ * @example
47
+ * ```ts
48
+ * import { CredentialService } from "@decaf-ts/integrations/namespaces";
49
+ *
50
+ * const credentials = new CredentialService();
51
+ * const credential = await credentials.createCredential({
52
+ * tenantId: "tenant-1",
53
+ * name: "deploy-token",
54
+ * credentialType: "token",
55
+ * secret: { value: "s3cr3t" },
56
+ * });
57
+ * await credentials.rotateCredential({
58
+ * credentialId: credential.id,
59
+ * secret: { value: "n3w-s3cr3t" },
60
+ * });
61
+ * ```
62
+ */
63
+ export declare class CredentialService extends BaseModelService<Credential> {
64
+ private secretServiceInstance?;
65
+ /**
66
+ * @description Creates the credential service
67
+ * @param {CredentialServiceConfig} [config] - Optional secret store and repository overrides.
68
+ */
69
+ constructor(config?: CredentialServiceConfig);
70
+ /**
71
+ * @description Resolves the model-backed secret store, booting one lazily
72
+ * @summary Returns the injected secret service or lazily boots a fresh
73
+ * `{@link ModelSecretService}`; rejects with a {@link ValidationError} when
74
+ * the resolved store's provider is not `"model"`.
75
+ * @returns {Promise<CredentialSecretStore>} The model-backed secret store.
76
+ * @throws {ValidationError} When the injected store is not model-backed.
77
+ */
78
+ protected secretService(): Promise<CredentialSecretStore>;
79
+ /**
80
+ * @description Creates a credential row and stores its secret value
81
+ * @summary Validates the name (trimmed, ≤255 chars, `[A-Za-z0-9][A-Za-z0-9._-]*`),
82
+ * stores the secret under a generated `credential-<uuid>` name scoped to the
83
+ * supplied tenant/org-unit/owner, then inserts the metadata row. If the row
84
+ * insert fails, the just-stored secret is force-deleted before rethrowing.
85
+ * @param {CreateCredentialInput} input - Credential definition (name, type, secret value, scoping, metadata).
86
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the store and repository.
87
+ * @returns {Promise<Credential>} The persisted credential row.
88
+ * @throws {ValidationError} When the name is invalid.
89
+ */
90
+ createCredential(input: CreateCredentialInput, ...args: any[]): Promise<Credential>;
91
+ /**
92
+ * @description Replaces a credential's secret value
93
+ * @summary Uses the backing store's `rotate` when available; otherwise
94
+ * re-stores the value under the existing secret name with the supplied
95
+ * version and the credential's tenant/org-unit/owner scoping. The
96
+ * credential row's `updatedAt` is refreshed afterwards.
97
+ * @param {RotateCredentialInput} input - Credential id, new secret value, and optional version.
98
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the store and repository.
99
+ * @returns {Promise<Credential>} The updated credential row.
100
+ */
101
+ rotateCredential(input: RotateCredentialInput, ...args: any[]): Promise<Credential>;
102
+ /**
103
+ * @description Reads a credential row by id
104
+ * @summary Runs the read inside the explicit `withinTransaction` boundary
105
+ * instead of `@transactional()`: a missing trailing `Context` is synthesized
106
+ * via `logCtx(args, ..., true)`, then the helper reuses an in-flight
107
+ * `ContextLock` or opens a new one (`resolveTransactionLock` + `begin`),
108
+ * rolling back on error and committing when this is the outermost frame. On
109
+ * a TypeORM-backed repository this binds the context's principal to
110
+ * `app.principal_id` for the duration of the transaction so namespace RLS
111
+ * applies to the read.
112
+ * @param {string} credentialId - The credential id.
113
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository.
114
+ * @returns {Promise<Credential>} The credential row.
115
+ */
116
+ getCredential(credentialId: string, ...args: any[]): Promise<Credential>;
117
+ /**
118
+ * @description Lists all credentials as summaries (no secret material)
119
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository.
120
+ * @returns {Promise<CredentialSummary[]>} Summary records for every credential.
121
+ */
122
+ listCredentials(...args: any[]): Promise<CredentialSummary[]>;
123
+ /**
124
+ * @description Stamps a credential's `lastUsedAt` timestamp
125
+ * @summary Runs the read and the update inside one explicit
126
+ * `withinTransaction` boundary instead of `@transactional()`: a missing
127
+ * trailing `Context` is synthesized via `logCtx(args, ..., true)`, then the
128
+ * helper reuses an in-flight `ContextLock` or opens a new one
129
+ * (`resolveTransactionLock` + `begin`), rolling back on error and committing
130
+ * when this is the outermost frame. On a TypeORM-backed repository this
131
+ * binds the context's principal to `app.principal_id` for the duration of
132
+ * the transaction so namespace RLS applies to both statements.
133
+ * @param {string} credentialId - The credential id.
134
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository.
135
+ * @returns {Promise<Credential>} The updated credential row.
136
+ */
137
+ markCredentialUsed(credentialId: string, ...args: any[]): Promise<Credential>;
138
+ /**
139
+ * @description Deletes a credential row and its stored secret value
140
+ * @summary Removes the metadata row first, then force-deletes the
141
+ * referenced secret from the backing store.
142
+ * @param {string} credentialId - The credential id.
143
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository and store.
144
+ * @returns {Promise<void>} Resolves once the row and secret are removed.
145
+ */
146
+ deleteCredential(credentialId: string, ...args: any[]): Promise<void>;
147
+ /**
148
+ * @description Runs an operation inside an explicit adapter transaction boundary
149
+ * @summary Mirrors core's `@transactional()` proxy without the decorator:
150
+ * reuses the `ContextLock` already cached on the context (`transactionLock`)
151
+ * when a transaction is in flight, otherwise resolves a fresh lock via
152
+ * `resolveTransactionLock` and `begin`s it, caching it on the context so
153
+ * nested frames share it. Depth is tracked so nested calls only decrement;
154
+ * the outermost frame commits. On error the frame rolls back — unless an
155
+ * inner frame already ended the transaction — and rethrows the original
156
+ * error. When the repository exposes no adapter `transactionLock` (e.g.
157
+ * non-transactional adapters or repository doubles), the operation runs
158
+ * directly with no transaction. If `ctx` is `undefined`, a standalone
159
+ * context is synthesized via `this.context`.
160
+ * @template R - The operation's result type.
161
+ * @param {Context<any> | undefined} ctx - The caller's decaf `Context`, if one was resolved or synthesized.
162
+ * @param {() => Promise<R>} operation - The repository work to run inside the transaction.
163
+ * @returns {Promise<R>} The operation's result, committed when outermost.
164
+ * @throws {InternalError} When the outermost commit fails.
165
+ */
166
+ private withinTransaction;
167
+ /**
168
+ * @description Maps a credential row to its API summary shape
169
+ * @summary Resolves tenant/org-unit/owner relations to their ids and strips
170
+ * all secret material (the secret value is never exposed).
171
+ * @param {Credential} credential - The credential row.
172
+ * @returns {CredentialSummary} The summary record.
173
+ */
174
+ private toSummary;
175
+ }
@@ -22,3 +22,4 @@ export * from "./storage-binding.service.d.cts";
22
22
  export * from "./bootstrap.service.d.cts";
23
23
  export * from "./system-management.service.d.cts";
24
24
  export * from "./authz.service.d.cts";
25
+ export * from "./credential.service.d.cts";
@@ -22,3 +22,4 @@ export * from "./storage-binding.service.d.mts";
22
22
  export * from "./bootstrap.service.d.mts";
23
23
  export * from "./system-management.service.d.mts";
24
24
  export * from "./authz.service.d.mts";
25
+ export * from "./credential.service.d.mts";
@@ -52,6 +52,10 @@ export declare enum StorageBindingKind {
52
52
  Shared = "shared",
53
53
  Dedicated = "dedicated"
54
54
  }
55
+ export declare enum CredentialProvider {
56
+ Model = "model",
57
+ Filesystem = "filesystem"
58
+ }
55
59
  export declare const IsolationTierOptions: IsolationTier[];
56
60
  export declare const MembershipStatusOptions: MembershipStatus[];
57
61
  export declare const PrincipalKindOptions: PrincipalKind[];
@@ -60,6 +64,7 @@ export declare const PermissionCategoryOptions: PermissionCategory[];
60
64
  export declare const ResourceVisibilityOptions: ResourceVisibility[];
61
65
  export declare const StorageKindOptions: StorageKind[];
62
66
  export declare const StorageBindingKindOptions: StorageBindingKind[];
67
+ export declare const CredentialProviderOptions: CredentialProvider[];
63
68
  export type TxArgs = any[];
64
69
  export interface CreateTenantInput {
65
70
  slug: string;
@@ -162,6 +167,38 @@ export interface CreateStorageBindingInput {
162
167
  region: string;
163
168
  config?: Record<string, unknown>;
164
169
  }
170
+ export interface CreateCredentialInput {
171
+ tenantId: string;
172
+ orgUnitId?: string;
173
+ ownerPrincipalId?: string;
174
+ name: string;
175
+ credentialType: string;
176
+ secret: string | Record<string, unknown> | Uint8Array;
177
+ description?: string;
178
+ metadata?: Record<string, unknown>;
179
+ expiresAt?: Date;
180
+ }
181
+ export interface RotateCredentialInput {
182
+ credentialId: string;
183
+ secret: string | Record<string, unknown> | Uint8Array;
184
+ version?: string;
185
+ }
186
+ export interface CredentialSummary {
187
+ id: string;
188
+ tenantId: string;
189
+ orgUnitId?: string;
190
+ ownerPrincipalId?: string;
191
+ name: string;
192
+ credentialType: string;
193
+ provider: CredentialProvider;
194
+ description?: string;
195
+ enabled: boolean;
196
+ metadata?: Record<string, unknown>;
197
+ expiresAt?: Date;
198
+ lastUsedAt?: Date;
199
+ createdAt?: Date;
200
+ updatedAt?: Date;
201
+ }
165
202
  export interface BootstrapPermission {
166
203
  key: string;
167
204
  category: PermissionCategory;
@@ -52,6 +52,10 @@ export declare enum StorageBindingKind {
52
52
  Shared = "shared",
53
53
  Dedicated = "dedicated"
54
54
  }
55
+ export declare enum CredentialProvider {
56
+ Model = "model",
57
+ Filesystem = "filesystem"
58
+ }
55
59
  export declare const IsolationTierOptions: IsolationTier[];
56
60
  export declare const MembershipStatusOptions: MembershipStatus[];
57
61
  export declare const PrincipalKindOptions: PrincipalKind[];
@@ -60,6 +64,7 @@ export declare const PermissionCategoryOptions: PermissionCategory[];
60
64
  export declare const ResourceVisibilityOptions: ResourceVisibility[];
61
65
  export declare const StorageKindOptions: StorageKind[];
62
66
  export declare const StorageBindingKindOptions: StorageBindingKind[];
67
+ export declare const CredentialProviderOptions: CredentialProvider[];
63
68
  export type TxArgs = any[];
64
69
  export interface CreateTenantInput {
65
70
  slug: string;
@@ -162,6 +167,38 @@ export interface CreateStorageBindingInput {
162
167
  region: string;
163
168
  config?: Record<string, unknown>;
164
169
  }
170
+ export interface CreateCredentialInput {
171
+ tenantId: string;
172
+ orgUnitId?: string;
173
+ ownerPrincipalId?: string;
174
+ name: string;
175
+ credentialType: string;
176
+ secret: string | Record<string, unknown> | Uint8Array;
177
+ description?: string;
178
+ metadata?: Record<string, unknown>;
179
+ expiresAt?: Date;
180
+ }
181
+ export interface RotateCredentialInput {
182
+ credentialId: string;
183
+ secret: string | Record<string, unknown> | Uint8Array;
184
+ version?: string;
185
+ }
186
+ export interface CredentialSummary {
187
+ id: string;
188
+ tenantId: string;
189
+ orgUnitId?: string;
190
+ ownerPrincipalId?: string;
191
+ name: string;
192
+ credentialType: string;
193
+ provider: CredentialProvider;
194
+ description?: string;
195
+ enabled: boolean;
196
+ metadata?: Record<string, unknown>;
197
+ expiresAt?: Date;
198
+ lastUsedAt?: Date;
199
+ createdAt?: Date;
200
+ updatedAt?: Date;
201
+ }
165
202
  export interface BootstrapPermission {
166
203
  key: string;
167
204
  category: PermissionCategory;
@@ -274,6 +274,8 @@ export declare class RedisAdapter extends Adapter<RedisConfig, RedisClientType,
274
274
  * through a `for()` configuration-scoped proxy, whose own `_client` slot would
275
275
  * otherwise be empty and build a fresh unconnected client). Otherwise builds a
276
276
  * node-redis client from the configured URL or discrete host/port/credentials.
277
+ * When `tls` is set, `tls: true` plus any supplied `tls.connect` options are
278
+ * merged into the socket options (a `rediss://` URL is passed through as-is).
277
279
  * The client is created lazily and connected by {@link initialize}.
278
280
  * @return {RedisClientType} The Redis client
279
281
  */
@@ -274,6 +274,8 @@ export declare class RedisAdapter extends Adapter<RedisConfig, RedisClientType,
274
274
  * through a `for()` configuration-scoped proxy, whose own `_client` slot would
275
275
  * otherwise be empty and build a fresh unconnected client). Otherwise builds a
276
276
  * node-redis client from the configured URL or discrete host/port/credentials.
277
+ * When `tls` is set, `tls: true` plus any supplied `tls.connect` options are
278
+ * merged into the socket options (a `rediss://` URL is passed through as-is).
277
279
  * The client is created lazily and connected by {@link initialize}.
278
280
  * @return {RedisClientType} The Redis client
279
281
  */
@@ -1,13 +1,36 @@
1
1
  import { Model } from "@decaf-ts/decorator-validation";
2
2
  import { Constructor } from "@decaf-ts/decoration";
3
3
  import { AdapterFlags, Context } from "@decaf-ts/core";
4
+ /**
5
+ * @description TLS settings accepted by {@link RedisAdapter}
6
+ * @summary `true` enables TLS with Node's default verification (server
7
+ * certificate checked). An object enables TLS and forwards the standard Node
8
+ * `tls.connect` options (`rejectUnauthorized`, `ca`, `cert`, `key`,
9
+ * `servername`); set `rejectUnauthorized: false` only for a known development
10
+ * server with a self-signed certificate.
11
+ * @typedef {boolean | object} RedisTlsConfig
12
+ * @memberOf module:redis
13
+ */
14
+ export type RedisTlsConfig = boolean | {
15
+ rejectUnauthorized?: boolean;
16
+ ca?: string | Buffer;
17
+ cert?: string | Buffer;
18
+ key?: string | Buffer;
19
+ servername?: string;
20
+ [key: string]: unknown;
21
+ };
4
22
  /**
5
23
  * @description Connection configuration accepted by {@link RedisAdapter}
6
24
  * @summary Supports both a full connection URL and the individual host/port/
7
25
  * credential fields. When `url` is provided it takes precedence over the
8
- * discrete fields.
26
+ * discrete fields. Set `tls` (or use a `rediss://` URL) to encrypt the
27
+ * connection.
28
+ *
29
+ * Note on `KEYS`: Redis `KEYS` walks the whole keyspace and blocks the server
30
+ * while it runs. Prefer `SCAN`/`scanIterator` (or a maintained index) in
31
+ * production; the adapter's key listing is intended for small namespaces.
9
32
  * @typedef {object} RedisConfig
10
- * @property {string} [url] Full redis:// connection string
33
+ * @property {string} [url] Full redis:// (or rediss://) connection string
11
34
  * @property {string} [host] Server host (defaults to localhost)
12
35
  * @property {number} [port] Server port (defaults to 6379)
13
36
  * @property {string} [username] ACL username
@@ -15,6 +38,7 @@ import { AdapterFlags, Context } from "@decaf-ts/core";
15
38
  * @property {number} [database] Logical database index
16
39
  * @property {string} [prefix] Key namespace (defaults to decaf:redis)
17
40
  * @property {string} [user] Identity reported on created/updated records
41
+ * @property {RedisTlsConfig} [tls] Enable TLS and optionally supply verification options
18
42
  * @memberOf module:redis
19
43
  */
20
44
  export type RedisConfig = {
@@ -26,6 +50,7 @@ export type RedisConfig = {
26
50
  database?: number;
27
51
  prefix?: string;
28
52
  user?: string;
53
+ tls?: RedisTlsConfig;
29
54
  };
30
55
  /**
31
56
  * @description Adapter flags enriched with the acting user identity
@@ -1,13 +1,36 @@
1
1
  import { Model } from "@decaf-ts/decorator-validation";
2
2
  import { Constructor } from "@decaf-ts/decoration";
3
3
  import { AdapterFlags, Context } from "@decaf-ts/core";
4
+ /**
5
+ * @description TLS settings accepted by {@link RedisAdapter}
6
+ * @summary `true` enables TLS with Node's default verification (server
7
+ * certificate checked). An object enables TLS and forwards the standard Node
8
+ * `tls.connect` options (`rejectUnauthorized`, `ca`, `cert`, `key`,
9
+ * `servername`); set `rejectUnauthorized: false` only for a known development
10
+ * server with a self-signed certificate.
11
+ * @typedef {boolean | object} RedisTlsConfig
12
+ * @memberOf module:redis
13
+ */
14
+ export type RedisTlsConfig = boolean | {
15
+ rejectUnauthorized?: boolean;
16
+ ca?: string | Buffer;
17
+ cert?: string | Buffer;
18
+ key?: string | Buffer;
19
+ servername?: string;
20
+ [key: string]: unknown;
21
+ };
4
22
  /**
5
23
  * @description Connection configuration accepted by {@link RedisAdapter}
6
24
  * @summary Supports both a full connection URL and the individual host/port/
7
25
  * credential fields. When `url` is provided it takes precedence over the
8
- * discrete fields.
26
+ * discrete fields. Set `tls` (or use a `rediss://` URL) to encrypt the
27
+ * connection.
28
+ *
29
+ * Note on `KEYS`: Redis `KEYS` walks the whole keyspace and blocks the server
30
+ * while it runs. Prefer `SCAN`/`scanIterator` (or a maintained index) in
31
+ * production; the adapter's key listing is intended for small namespaces.
9
32
  * @typedef {object} RedisConfig
10
- * @property {string} [url] Full redis:// connection string
33
+ * @property {string} [url] Full redis:// (or rediss://) connection string
11
34
  * @property {string} [host] Server host (defaults to localhost)
12
35
  * @property {number} [port] Server port (defaults to 6379)
13
36
  * @property {string} [username] ACL username
@@ -15,6 +38,7 @@ import { AdapterFlags, Context } from "@decaf-ts/core";
15
38
  * @property {number} [database] Logical database index
16
39
  * @property {string} [prefix] Key namespace (defaults to decaf:redis)
17
40
  * @property {string} [user] Identity reported on created/updated records
41
+ * @property {RedisTlsConfig} [tls] Enable TLS and optionally supply verification options
18
42
  * @memberOf module:redis
19
43
  */
20
44
  export type RedisConfig = {
@@ -26,6 +50,7 @@ export type RedisConfig = {
26
50
  database?: number;
27
51
  prefix?: string;
28
52
  user?: string;
53
+ tls?: RedisTlsConfig;
29
54
  };
30
55
  /**
31
56
  * @description Adapter flags enriched with the acting user identity
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @module integrations/secrets/infra-credential-bootstrap
3
+ * @summary Idempotent seeding of infrastructure credentials into a secret store.
4
+ * @description Provides the minimal {@link InfraSecretStore} contract consumed
5
+ * by {@link InfraCredentialBootstrap}, the {@link InfraCredentialSeed} input
6
+ * shape, and the `createInfraCredentialBootstrap` factory that wires the
7
+ * bootstrap to a booted `{@link FsSecretService}`. Intended for startup
8
+ * routines that must guarantee a known set of credentials (for example the
9
+ * Mailpit SMTP credentials) exists before services boot against them.
10
+ */
11
+ import type { DeleteSecretOptions, ExistsSecretOptions, RetrieveSecretOptions, SecretName, SecretPayload, SecretReference, StoreSecretOptions } from "./core/index.d.cts";
12
+ /**
13
+ * @description Minimal secret-store contract required by the credential bootstrap
14
+ * @summary Structural subset of the secret service API (`store`, `retrieve`,
15
+ * `delete`, `exists`) so any backend — including test doubles — can back the
16
+ * bootstrap without importing the full service hierarchy.
17
+ */
18
+ export interface InfraSecretStore {
19
+ /** @description Stores (or overwrites) a named secret payload. */
20
+ store<T extends SecretPayload = SecretPayload>(name: SecretName, value: T, options?: StoreSecretOptions, ...args: any[]): Promise<SecretReference>;
21
+ /** @description Reads and decrypts a stored secret payload. */
22
+ retrieve<T extends SecretPayload = SecretPayload>(nameOrRef: SecretName | SecretReference, options?: RetrieveSecretOptions, ...args: any[]): Promise<T>;
23
+ /** @description Deletes a stored secret. */
24
+ delete(nameOrRef: SecretName | SecretReference, options?: DeleteSecretOptions, ...args: any[]): Promise<void>;
25
+ /** @description Checks whether a secret exists. */
26
+ exists(nameOrRef: SecretName | SecretReference, options?: ExistsSecretOptions, ...args: any[]): Promise<boolean>;
27
+ }
28
+ /**
29
+ * @description One credential to guarantee existence of in the secret store
30
+ * @summary `overwrite: false` (the default) makes `ensure` skip seeds whose
31
+ * name already exists, keeping stored values stable across restarts.
32
+ */
33
+ export interface InfraCredentialSeed {
34
+ /** @description Secret name to seed (normalized by the backing store). */
35
+ name: SecretName;
36
+ /** @description Payload to store. */
37
+ value: SecretPayload;
38
+ /** @description Optional content type recorded with the secret. */
39
+ contentType?: string;
40
+ /** @description Optional tags recorded with the secret. */
41
+ tags?: Record<string, string>;
42
+ /** @description When `true`, re-store (overwrite) even if the secret already exists. */
43
+ overwrite?: boolean;
44
+ }
45
+ /**
46
+ * @description Idempotent infrastructure credential seeder
47
+ * @summary Wraps an {@link InfraSecretStore} and guarantees a set of named
48
+ * credentials exists: `ensure` stores each missing seed (skipping existing
49
+ * ones unless `overwrite` is set), `retrieve` reads one back. References
50
+ * returned by `ensure` identify the stored secrets for later cleanup.
51
+ * @category Secrets
52
+ * @example
53
+ * ```ts
54
+ * import { createInfraCredentialBootstrap } from "@decaf-ts/integrations/secrets";
55
+ *
56
+ * const bootstrap = await createInfraCredentialBootstrap({
57
+ * keySecret: "master-key",
58
+ * });
59
+ * await bootstrap.ensure([
60
+ * { name: "smtp-user", value: { value: "mailpit" } },
61
+ * ]);
62
+ * ```
63
+ */
64
+ export declare class InfraCredentialBootstrap {
65
+ readonly service: InfraSecretStore;
66
+ /**
67
+ * @description Creates a bootstrap bound to the given secret store
68
+ * @param {InfraSecretStore} service - The backing secret store (typically an `FsSecretService`).
69
+ */
70
+ constructor(service: InfraSecretStore);
71
+ /**
72
+ * @description Ensures every seed exists in the backing store
73
+ * @summary For each seed, skips when the secret already exists and
74
+ * `overwrite` is not set; otherwise stores it and collects the returned
75
+ * references. Existing-but-skipped seeds contribute no reference.
76
+ * @param {readonly InfraCredentialSeed[]} seeds - The credentials to guarantee.
77
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the store.
78
+ * @returns {Promise<SecretReference[]>} References for the seeds actually stored during this call.
79
+ */
80
+ ensure(seeds: readonly InfraCredentialSeed[], ...args: any[]): Promise<SecretReference[]>;
81
+ /**
82
+ * @description Retrieves a previously seeded credential payload
83
+ * @summary Thin wrapper over the backing store's `retrieve`, resolving
84
+ * through the bootstrap's store so callers do not need the service instance.
85
+ * @template T - The expected payload type.
86
+ * @param {SecretName} name - The secret name to read.
87
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the store.
88
+ * @returns {Promise<T>} The decrypted payload.
89
+ */
90
+ retrieve<T extends SecretPayload = SecretPayload>(name: SecretName, ...args: any[]): Promise<T>;
91
+ }
92
+ /**
93
+ * @description Creates a bootstrap wired to a freshly booted filesystem secret service
94
+ * @summary Constructs an `{@link FsSecretService}`, boots it with the supplied
95
+ * arguments (explicit config or the `secrets.fs` Environment slice), and wraps
96
+ * it in an {@link InfraCredentialBootstrap}.
97
+ * @param {any[]} args - `boot()` arguments forwarded to the `FsSecretService` (config and optional `Context`).
98
+ * @returns {Promise<InfraCredentialBootstrap>} The bootstrap backed by the booted service.
99
+ */
100
+ export declare function createInfraCredentialBootstrap(...args: any[]): Promise<InfraCredentialBootstrap>;
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @module integrations/secrets/infra-credential-bootstrap
3
+ * @summary Idempotent seeding of infrastructure credentials into a secret store.
4
+ * @description Provides the minimal {@link InfraSecretStore} contract consumed
5
+ * by {@link InfraCredentialBootstrap}, the {@link InfraCredentialSeed} input
6
+ * shape, and the `createInfraCredentialBootstrap` factory that wires the
7
+ * bootstrap to a booted `{@link FsSecretService}`. Intended for startup
8
+ * routines that must guarantee a known set of credentials (for example the
9
+ * Mailpit SMTP credentials) exists before services boot against them.
10
+ */
11
+ import type { DeleteSecretOptions, ExistsSecretOptions, RetrieveSecretOptions, SecretName, SecretPayload, SecretReference, StoreSecretOptions } from "./core/index.d.mts";
12
+ /**
13
+ * @description Minimal secret-store contract required by the credential bootstrap
14
+ * @summary Structural subset of the secret service API (`store`, `retrieve`,
15
+ * `delete`, `exists`) so any backend — including test doubles — can back the
16
+ * bootstrap without importing the full service hierarchy.
17
+ */
18
+ export interface InfraSecretStore {
19
+ /** @description Stores (or overwrites) a named secret payload. */
20
+ store<T extends SecretPayload = SecretPayload>(name: SecretName, value: T, options?: StoreSecretOptions, ...args: any[]): Promise<SecretReference>;
21
+ /** @description Reads and decrypts a stored secret payload. */
22
+ retrieve<T extends SecretPayload = SecretPayload>(nameOrRef: SecretName | SecretReference, options?: RetrieveSecretOptions, ...args: any[]): Promise<T>;
23
+ /** @description Deletes a stored secret. */
24
+ delete(nameOrRef: SecretName | SecretReference, options?: DeleteSecretOptions, ...args: any[]): Promise<void>;
25
+ /** @description Checks whether a secret exists. */
26
+ exists(nameOrRef: SecretName | SecretReference, options?: ExistsSecretOptions, ...args: any[]): Promise<boolean>;
27
+ }
28
+ /**
29
+ * @description One credential to guarantee existence of in the secret store
30
+ * @summary `overwrite: false` (the default) makes `ensure` skip seeds whose
31
+ * name already exists, keeping stored values stable across restarts.
32
+ */
33
+ export interface InfraCredentialSeed {
34
+ /** @description Secret name to seed (normalized by the backing store). */
35
+ name: SecretName;
36
+ /** @description Payload to store. */
37
+ value: SecretPayload;
38
+ /** @description Optional content type recorded with the secret. */
39
+ contentType?: string;
40
+ /** @description Optional tags recorded with the secret. */
41
+ tags?: Record<string, string>;
42
+ /** @description When `true`, re-store (overwrite) even if the secret already exists. */
43
+ overwrite?: boolean;
44
+ }
45
+ /**
46
+ * @description Idempotent infrastructure credential seeder
47
+ * @summary Wraps an {@link InfraSecretStore} and guarantees a set of named
48
+ * credentials exists: `ensure` stores each missing seed (skipping existing
49
+ * ones unless `overwrite` is set), `retrieve` reads one back. References
50
+ * returned by `ensure` identify the stored secrets for later cleanup.
51
+ * @category Secrets
52
+ * @example
53
+ * ```ts
54
+ * import { createInfraCredentialBootstrap } from "@decaf-ts/integrations/secrets";
55
+ *
56
+ * const bootstrap = await createInfraCredentialBootstrap({
57
+ * keySecret: "master-key",
58
+ * });
59
+ * await bootstrap.ensure([
60
+ * { name: "smtp-user", value: { value: "mailpit" } },
61
+ * ]);
62
+ * ```
63
+ */
64
+ export declare class InfraCredentialBootstrap {
65
+ readonly service: InfraSecretStore;
66
+ /**
67
+ * @description Creates a bootstrap bound to the given secret store
68
+ * @param {InfraSecretStore} service - The backing secret store (typically an `FsSecretService`).
69
+ */
70
+ constructor(service: InfraSecretStore);
71
+ /**
72
+ * @description Ensures every seed exists in the backing store
73
+ * @summary For each seed, skips when the secret already exists and
74
+ * `overwrite` is not set; otherwise stores it and collects the returned
75
+ * references. Existing-but-skipped seeds contribute no reference.
76
+ * @param {readonly InfraCredentialSeed[]} seeds - The credentials to guarantee.
77
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the store.
78
+ * @returns {Promise<SecretReference[]>} References for the seeds actually stored during this call.
79
+ */
80
+ ensure(seeds: readonly InfraCredentialSeed[], ...args: any[]): Promise<SecretReference[]>;
81
+ /**
82
+ * @description Retrieves a previously seeded credential payload
83
+ * @summary Thin wrapper over the backing store's `retrieve`, resolving
84
+ * through the bootstrap's store so callers do not need the service instance.
85
+ * @template T - The expected payload type.
86
+ * @param {SecretName} name - The secret name to read.
87
+ * @param {any[]} args - Optional trailing decaf `Context` forwarded to the store.
88
+ * @returns {Promise<T>} The decrypted payload.
89
+ */
90
+ retrieve<T extends SecretPayload = SecretPayload>(name: SecretName, ...args: any[]): Promise<T>;
91
+ }
92
+ /**
93
+ * @description Creates a bootstrap wired to a freshly booted filesystem secret service
94
+ * @summary Constructs an `{@link FsSecretService}`, boots it with the supplied
95
+ * arguments (explicit config or the `secrets.fs` Environment slice), and wraps
96
+ * it in an {@link InfraCredentialBootstrap}.
97
+ * @param {any[]} args - `boot()` arguments forwarded to the `FsSecretService` (config and optional `Context`).
98
+ * @returns {Promise<InfraCredentialBootstrap>} The bootstrap backed by the booted service.
99
+ */
100
+ export declare function createInfraCredentialBootstrap(...args: any[]): Promise<InfraCredentialBootstrap>;
@@ -3,7 +3,7 @@
3
3
  * @summary Secret core types.
4
4
  * @description Shared payload, metadata, option, and configuration types for secret service implementations.
5
5
  */
6
- export type SecretProvider = "model" | "memory" | "hashicorp-vault" | "aws-secrets-manager" | "azure-key-vault" | "gcp-secret-manager" | "1password";
6
+ export type SecretProvider = "model" | "memory" | "filesystem" | "hashicorp-vault" | "aws-secrets-manager" | "azure-key-vault" | "gcp-secret-manager" | "1password";
7
7
  export type SecretName = string;
8
8
  export type SecretPayload = string | Record<string, unknown> | Uint8Array;
9
9
  export interface SerializedSecretPayload {
@@ -47,6 +47,20 @@ export interface StoreSecretOptions {
47
47
  tags?: Record<string, string>;
48
48
  version?: string;
49
49
  ttl?: number;
50
+ /**
51
+ * @description Namespace tenant that owns the secret.
52
+ * @summary Stamped onto model-backed secrets so the namespace RLS policies
53
+ * can scope reads and writes without joining the credential row.
54
+ */
55
+ tenantId?: string;
56
+ /**
57
+ * @description Organizational unit that owns the secret.
58
+ */
59
+ orgUnitId?: string;
60
+ /**
61
+ * @description Principal that owns the secret.
62
+ */
63
+ ownerPrincipalId?: string;
50
64
  }
51
65
  export interface RetrieveSecretOptions {
52
66
  version?: string;