@decaf-ts/integrations 0.11.0 → 0.12.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 (496) 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/comms/email/EmailService.cjs +376 -0
  19. package/lib/cjs/comms/email/EmailService.cjs.map +1 -0
  20. package/lib/cjs/comms/email/index.cjs +29 -0
  21. package/lib/cjs/comms/email/index.cjs.map +1 -0
  22. package/lib/cjs/comms/email/mime.cjs +225 -0
  23. package/lib/cjs/comms/email/mime.cjs.map +1 -0
  24. package/lib/cjs/comms/email/smtp.cjs +204 -0
  25. package/lib/cjs/comms/email/smtp.cjs.map +1 -0
  26. package/lib/cjs/comms/environment.cjs +63 -0
  27. package/lib/cjs/comms/environment.cjs.map +1 -0
  28. package/lib/cjs/comms/gmail/GmailService.cjs +235 -0
  29. package/lib/cjs/comms/gmail/GmailService.cjs.map +1 -0
  30. package/lib/cjs/comms/gmail/index.cjs +24 -0
  31. package/lib/cjs/comms/gmail/index.cjs.map +1 -0
  32. package/lib/cjs/comms/index.cjs +31 -0
  33. package/lib/cjs/comms/index.cjs.map +1 -0
  34. package/lib/cjs/comms/slack/SlackService.cjs +264 -0
  35. package/lib/cjs/comms/slack/SlackService.cjs.map +1 -0
  36. package/lib/cjs/comms/slack/index.cjs +24 -0
  37. package/lib/cjs/comms/slack/index.cjs.map +1 -0
  38. package/lib/cjs/comms/teams/TeamsService.cjs +212 -0
  39. package/lib/cjs/comms/teams/TeamsService.cjs.map +1 -0
  40. package/lib/cjs/comms/teams/index.cjs +24 -0
  41. package/lib/cjs/comms/teams/index.cjs.map +1 -0
  42. package/lib/cjs/comms/telegram/TelegramService.cjs +196 -0
  43. package/lib/cjs/comms/telegram/TelegramService.cjs.map +1 -0
  44. package/lib/cjs/comms/telegram/index.cjs +24 -0
  45. package/lib/cjs/comms/telegram/index.cjs.map +1 -0
  46. package/lib/cjs/devops/environment.cjs +43 -0
  47. package/lib/cjs/devops/environment.cjs.map +1 -0
  48. package/lib/cjs/devops/github/GithubService.cjs +302 -0
  49. package/lib/cjs/devops/github/GithubService.cjs.map +1 -0
  50. package/lib/cjs/devops/github/index.cjs +24 -0
  51. package/lib/cjs/devops/github/index.cjs.map +1 -0
  52. package/lib/cjs/devops/gitlab/GitlabService.cjs +282 -0
  53. package/lib/cjs/devops/gitlab/GitlabService.cjs.map +1 -0
  54. package/lib/cjs/devops/gitlab/index.cjs +24 -0
  55. package/lib/cjs/devops/gitlab/index.cjs.map +1 -0
  56. package/lib/cjs/devops/index.cjs +28 -0
  57. package/lib/cjs/devops/index.cjs.map +1 -0
  58. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -0
  59. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +1 -1
  60. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -0
  61. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +1 -1
  62. package/lib/cjs/index.cjs +3 -3
  63. package/lib/cjs/io/airtable/AirtableService.cjs +266 -0
  64. package/lib/cjs/io/airtable/AirtableService.cjs.map +1 -0
  65. package/lib/cjs/io/airtable/index.cjs +24 -0
  66. package/lib/cjs/io/airtable/index.cjs.map +1 -0
  67. package/lib/cjs/io/environment.cjs +46 -0
  68. package/lib/cjs/io/environment.cjs.map +1 -0
  69. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +288 -0
  70. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +1 -0
  71. package/lib/cjs/io/google-sheets/index.cjs +24 -0
  72. package/lib/cjs/io/google-sheets/index.cjs.map +1 -0
  73. package/lib/cjs/io/graphql/GraphqlService.cjs +143 -0
  74. package/lib/cjs/io/graphql/GraphqlService.cjs.map +1 -0
  75. package/lib/cjs/io/graphql/index.cjs +24 -0
  76. package/lib/cjs/io/graphql/index.cjs.map +1 -0
  77. package/lib/cjs/io/index.cjs +30 -0
  78. package/lib/cjs/io/index.cjs.map +1 -0
  79. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +205 -0
  80. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +1 -0
  81. package/lib/cjs/io/spreadsheet/index.cjs +25 -0
  82. package/lib/cjs/io/spreadsheet/index.cjs.map +1 -0
  83. package/lib/cjs/namespaces/index.cjs +1 -0
  84. package/lib/cjs/namespaces/index.cjs.map +1 -1
  85. package/lib/cjs/namespaces/models/credential.model.cjs +115 -0
  86. package/lib/cjs/namespaces/models/credential.model.cjs.map +1 -0
  87. package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -0
  88. package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +1 -1
  89. package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -0
  90. package/lib/cjs/namespaces/models/group-membership.model.cjs.map +1 -1
  91. package/lib/cjs/namespaces/models/group.model.cjs +2 -0
  92. package/lib/cjs/namespaces/models/group.model.cjs.map +1 -1
  93. package/lib/cjs/namespaces/models/index.cjs +1 -0
  94. package/lib/cjs/namespaces/models/index.cjs.map +1 -1
  95. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -0
  96. package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +1 -1
  97. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -0
  98. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +1 -1
  99. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -0
  100. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +1 -1
  101. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -0
  102. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +1 -1
  103. package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -0
  104. package/lib/cjs/namespaces/models/org-unit.model.cjs.map +1 -1
  105. package/lib/cjs/namespaces/models/permission.model.cjs +2 -0
  106. package/lib/cjs/namespaces/models/permission.model.cjs.map +1 -1
  107. package/lib/cjs/namespaces/models/principal.model.cjs +2 -0
  108. package/lib/cjs/namespaces/models/principal.model.cjs.map +1 -1
  109. package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -0
  110. package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +1 -1
  111. package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -0
  112. package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +1 -1
  113. package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -0
  114. package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +1 -1
  115. package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -0
  116. package/lib/cjs/namespaces/models/role-permission.model.cjs.map +1 -1
  117. package/lib/cjs/namespaces/models/role.model.cjs +2 -0
  118. package/lib/cjs/namespaces/models/role.model.cjs.map +1 -1
  119. package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -0
  120. package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +1 -1
  121. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -0
  122. package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +1 -1
  123. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -0
  124. package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +1 -1
  125. package/lib/cjs/namespaces/models/tenant.model.cjs +2 -0
  126. package/lib/cjs/namespaces/models/tenant.model.cjs.map +1 -1
  127. package/lib/cjs/namespaces/models/user.model.cjs +2 -0
  128. package/lib/cjs/namespaces/models/user.model.cjs.map +1 -1
  129. package/lib/cjs/namespaces/rls/index.cjs +28 -0
  130. package/lib/cjs/namespaces/rls/index.cjs.map +1 -0
  131. package/lib/cjs/namespaces/rls/principal-resolver.cjs +66 -0
  132. package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +1 -0
  133. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +269 -0
  134. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +1 -0
  135. package/lib/cjs/namespaces/rls/rls.constants.cjs +79 -0
  136. package/lib/cjs/namespaces/rls/rls.constants.cjs.map +1 -0
  137. package/lib/cjs/namespaces/rls/rls.template.cjs +719 -0
  138. package/lib/cjs/namespaces/rls/rls.template.cjs.map +1 -0
  139. package/lib/cjs/namespaces/rls/rls.types.cjs +4 -0
  140. package/lib/cjs/namespaces/rls/rls.types.cjs.map +1 -0
  141. package/lib/cjs/namespaces/rls/session-binding.cjs +70 -0
  142. package/lib/cjs/namespaces/rls/session-binding.cjs.map +1 -0
  143. package/lib/cjs/namespaces/services/credential.service.cjs +327 -0
  144. package/lib/cjs/namespaces/services/credential.service.cjs.map +1 -0
  145. package/lib/cjs/namespaces/services/index.cjs +1 -0
  146. package/lib/cjs/namespaces/services/index.cjs.map +1 -1
  147. package/lib/cjs/namespaces/types.cjs +6 -1
  148. package/lib/cjs/namespaces/types.cjs.map +1 -1
  149. package/lib/cjs/redis/adapter.cjs +7 -1
  150. package/lib/cjs/redis/adapter.cjs.map +1 -1
  151. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +80 -0
  152. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +1 -0
  153. package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -15
  154. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +1 -1
  155. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -16
  156. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +1 -1
  157. package/lib/cjs/secrets/core/SecretReference.cjs +1 -0
  158. package/lib/cjs/secrets/core/SecretReference.cjs.map +1 -1
  159. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +28 -0
  160. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +1 -0
  161. package/lib/cjs/secrets/fs/FsSecretService.cjs +420 -0
  162. package/lib/cjs/secrets/fs/FsSecretService.cjs.map +1 -0
  163. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +25 -0
  164. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +1 -0
  165. package/lib/cjs/secrets/fs/index.cjs +27 -0
  166. package/lib/cjs/secrets/fs/index.cjs.map +1 -0
  167. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -16
  168. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +1 -1
  169. package/lib/cjs/secrets/index.cjs +2 -0
  170. package/lib/cjs/secrets/index.cjs.map +1 -1
  171. package/lib/cjs/secrets/model/ModelSecretService.cjs +335 -43
  172. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +1 -1
  173. package/lib/cjs/secrets/model/Secret.cjs +83 -5
  174. package/lib/cjs/secrets/model/Secret.cjs.map +1 -1
  175. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -16
  176. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +1 -1
  177. package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -16
  178. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +1 -1
  179. package/lib/cjs/shared/environmentValue.cjs +24 -0
  180. package/lib/cjs/shared/environmentValue.cjs.map +1 -1
  181. package/lib/cjs/shared/http/HttpApiService.cjs +190 -0
  182. package/lib/cjs/shared/http/HttpApiService.cjs.map +1 -0
  183. package/lib/cjs/shared/http/hermeticBoot.cjs +150 -0
  184. package/lib/cjs/shared/http/hermeticBoot.cjs.map +1 -0
  185. package/lib/cjs/shared/http/index.cjs +28 -0
  186. package/lib/cjs/shared/http/index.cjs.map +1 -0
  187. package/lib/esm/blob/azure/AzureBlobStoreService.js +13 -21
  188. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +1 -1
  189. package/lib/esm/blob/core/BlobStoreService.js +26 -25
  190. package/lib/esm/blob/core/BlobStoreService.js.map +1 -1
  191. package/lib/esm/blob/gcp/GcsBlobStoreService.js +13 -21
  192. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +1 -1
  193. package/lib/esm/blob/s3/S3BlobStoreService.js +12 -14
  194. package/lib/esm/blob/s3/S3BlobStoreService.js.map +1 -1
  195. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +14 -16
  196. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +1 -1
  197. package/lib/esm/comms/email/EmailService.js +338 -0
  198. package/lib/esm/comms/email/EmailService.js.map +1 -0
  199. package/lib/esm/comms/email/index.js +12 -0
  200. package/lib/esm/comms/email/index.js.map +1 -0
  201. package/lib/esm/comms/email/mime.js +218 -0
  202. package/lib/esm/comms/email/mime.js.map +1 -0
  203. package/lib/esm/comms/email/smtp.js +166 -0
  204. package/lib/esm/comms/email/smtp.js.map +1 -0
  205. package/lib/esm/comms/environment.js +59 -0
  206. package/lib/esm/comms/environment.js.map +1 -0
  207. package/lib/esm/comms/gmail/GmailService.js +230 -0
  208. package/lib/esm/comms/gmail/GmailService.js.map +1 -0
  209. package/lib/esm/comms/gmail/index.js +7 -0
  210. package/lib/esm/comms/gmail/index.js.map +1 -0
  211. package/lib/esm/comms/index.js +14 -0
  212. package/lib/esm/comms/index.js.map +1 -0
  213. package/lib/esm/comms/slack/SlackService.js +259 -0
  214. package/lib/esm/comms/slack/SlackService.js.map +1 -0
  215. package/lib/esm/comms/slack/index.js +7 -0
  216. package/lib/esm/comms/slack/index.js.map +1 -0
  217. package/lib/esm/comms/teams/TeamsService.js +204 -0
  218. package/lib/esm/comms/teams/TeamsService.js.map +1 -0
  219. package/lib/esm/comms/teams/index.js +7 -0
  220. package/lib/esm/comms/teams/index.js.map +1 -0
  221. package/lib/esm/comms/telegram/TelegramService.js +191 -0
  222. package/lib/esm/comms/telegram/TelegramService.js.map +1 -0
  223. package/lib/esm/comms/telegram/index.js +7 -0
  224. package/lib/esm/comms/telegram/index.js.map +1 -0
  225. package/lib/esm/devops/environment.js +39 -0
  226. package/lib/esm/devops/environment.js.map +1 -0
  227. package/lib/esm/devops/github/GithubService.js +297 -0
  228. package/lib/esm/devops/github/GithubService.js.map +1 -0
  229. package/lib/esm/devops/github/index.js +7 -0
  230. package/lib/esm/devops/github/index.js.map +1 -0
  231. package/lib/esm/devops/gitlab/GitlabService.js +277 -0
  232. package/lib/esm/devops/gitlab/GitlabService.js.map +1 -0
  233. package/lib/esm/devops/gitlab/index.js +7 -0
  234. package/lib/esm/devops/gitlab/index.js.map +1 -0
  235. package/lib/esm/devops/index.js +11 -0
  236. package/lib/esm/devops/index.js.map +1 -0
  237. package/lib/esm/feature-flags/models/FeatureFlag.model.js +2 -0
  238. package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +1 -1
  239. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +2 -0
  240. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +1 -1
  241. package/lib/esm/index.js +3 -3
  242. package/lib/esm/io/airtable/AirtableService.js +261 -0
  243. package/lib/esm/io/airtable/AirtableService.js.map +1 -0
  244. package/lib/esm/io/airtable/index.js +7 -0
  245. package/lib/esm/io/airtable/index.js.map +1 -0
  246. package/lib/esm/io/environment.js +42 -0
  247. package/lib/esm/io/environment.js.map +1 -0
  248. package/lib/esm/io/google-sheets/GoogleSheetsService.js +283 -0
  249. package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +1 -0
  250. package/lib/esm/io/google-sheets/index.js +7 -0
  251. package/lib/esm/io/google-sheets/index.js.map +1 -0
  252. package/lib/esm/io/graphql/GraphqlService.js +138 -0
  253. package/lib/esm/io/graphql/GraphqlService.js.map +1 -0
  254. package/lib/esm/io/graphql/index.js +7 -0
  255. package/lib/esm/io/graphql/index.js.map +1 -0
  256. package/lib/esm/io/index.js +13 -0
  257. package/lib/esm/io/index.js.map +1 -0
  258. package/lib/esm/io/spreadsheet/SpreadsheetService.js +200 -0
  259. package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +1 -0
  260. package/lib/esm/io/spreadsheet/index.js +8 -0
  261. package/lib/esm/io/spreadsheet/index.js.map +1 -0
  262. package/lib/esm/namespaces/index.js +1 -0
  263. package/lib/esm/namespaces/index.js.map +1 -1
  264. package/lib/esm/namespaces/models/credential.model.js +106 -0
  265. package/lib/esm/namespaces/models/credential.model.js.map +1 -0
  266. package/lib/esm/namespaces/models/effective-permission.model.js +2 -0
  267. package/lib/esm/namespaces/models/effective-permission.model.js.map +1 -1
  268. package/lib/esm/namespaces/models/group-membership.model.js +2 -0
  269. package/lib/esm/namespaces/models/group-membership.model.js.map +1 -1
  270. package/lib/esm/namespaces/models/group.model.js +2 -0
  271. package/lib/esm/namespaces/models/group.model.js.map +1 -1
  272. package/lib/esm/namespaces/models/index.js +1 -0
  273. package/lib/esm/namespaces/models/index.js.map +1 -1
  274. package/lib/esm/namespaces/models/inheritance-block.model.js +2 -0
  275. package/lib/esm/namespaces/models/inheritance-block.model.js.map +1 -1
  276. package/lib/esm/namespaces/models/org-unit-closure.model.js +2 -0
  277. package/lib/esm/namespaces/models/org-unit-closure.model.js.map +1 -1
  278. package/lib/esm/namespaces/models/org-unit-membership.model.js +2 -0
  279. package/lib/esm/namespaces/models/org-unit-membership.model.js.map +1 -1
  280. package/lib/esm/namespaces/models/org-unit-profile.model.js +2 -0
  281. package/lib/esm/namespaces/models/org-unit-profile.model.js.map +1 -1
  282. package/lib/esm/namespaces/models/org-unit.model.js +2 -0
  283. package/lib/esm/namespaces/models/org-unit.model.js.map +1 -1
  284. package/lib/esm/namespaces/models/permission.model.js +2 -0
  285. package/lib/esm/namespaces/models/permission.model.js.map +1 -1
  286. package/lib/esm/namespaces/models/principal.model.js +2 -0
  287. package/lib/esm/namespaces/models/principal.model.js.map +1 -1
  288. package/lib/esm/namespaces/models/protected-resource.model.js +2 -0
  289. package/lib/esm/namespaces/models/protected-resource.model.js.map +1 -1
  290. package/lib/esm/namespaces/models/resource-grant.model.js +2 -0
  291. package/lib/esm/namespaces/models/resource-grant.model.js.map +1 -1
  292. package/lib/esm/namespaces/models/role-assignment.model.js +2 -0
  293. package/lib/esm/namespaces/models/role-assignment.model.js.map +1 -1
  294. package/lib/esm/namespaces/models/role-permission.model.js +2 -0
  295. package/lib/esm/namespaces/models/role-permission.model.js.map +1 -1
  296. package/lib/esm/namespaces/models/role.model.js +2 -0
  297. package/lib/esm/namespaces/models/role.model.js.map +1 -1
  298. package/lib/esm/namespaces/models/storage-binding.model.js +2 -0
  299. package/lib/esm/namespaces/models/storage-binding.model.js.map +1 -1
  300. package/lib/esm/namespaces/models/tenant-membership.model.js +2 -0
  301. package/lib/esm/namespaces/models/tenant-membership.model.js.map +1 -1
  302. package/lib/esm/namespaces/models/tenant-profile.model.js +2 -0
  303. package/lib/esm/namespaces/models/tenant-profile.model.js.map +1 -1
  304. package/lib/esm/namespaces/models/tenant.model.js +2 -0
  305. package/lib/esm/namespaces/models/tenant.model.js.map +1 -1
  306. package/lib/esm/namespaces/models/user.model.js +2 -0
  307. package/lib/esm/namespaces/models/user.model.js.map +1 -1
  308. package/lib/esm/namespaces/rls/index.js +11 -0
  309. package/lib/esm/namespaces/rls/index.js.map +1 -0
  310. package/lib/esm/namespaces/rls/principal-resolver.js +61 -0
  311. package/lib/esm/namespaces/rls/principal-resolver.js.map +1 -0
  312. package/lib/esm/namespaces/rls/rls-bootstrap.service.js +261 -0
  313. package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +1 -0
  314. package/lib/esm/namespaces/rls/rls.constants.js +75 -0
  315. package/lib/esm/namespaces/rls/rls.constants.js.map +1 -0
  316. package/lib/esm/namespaces/rls/rls.template.js +711 -0
  317. package/lib/esm/namespaces/rls/rls.template.js.map +1 -0
  318. package/lib/esm/namespaces/rls/rls.types.js +9 -0
  319. package/lib/esm/namespaces/rls/rls.types.js.map +1 -0
  320. package/lib/esm/namespaces/rls/session-binding.js +65 -0
  321. package/lib/esm/namespaces/rls/session-binding.js.map +1 -0
  322. package/lib/esm/namespaces/services/credential.service.js +322 -0
  323. package/lib/esm/namespaces/services/credential.service.js.map +1 -0
  324. package/lib/esm/namespaces/services/index.js +1 -0
  325. package/lib/esm/namespaces/services/index.js.map +1 -1
  326. package/lib/esm/namespaces/types.js +6 -0
  327. package/lib/esm/namespaces/types.js.map +1 -1
  328. package/lib/esm/redis/adapter.js +7 -1
  329. package/lib/esm/redis/adapter.js.map +1 -1
  330. package/lib/esm/secrets/InfraCredentialBootstrap.js +74 -0
  331. package/lib/esm/secrets/InfraCredentialBootstrap.js.map +1 -0
  332. package/lib/esm/secrets/aws/AwsSecretService.js +3 -13
  333. package/lib/esm/secrets/aws/AwsSecretService.js.map +1 -1
  334. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +2 -13
  335. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +1 -1
  336. package/lib/esm/secrets/core/SecretReference.js +1 -0
  337. package/lib/esm/secrets/core/SecretReference.js.map +1 -1
  338. package/lib/esm/secrets/fs/FsSecretEnvironment.js +24 -0
  339. package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +1 -0
  340. package/lib/esm/secrets/fs/FsSecretService.js +412 -0
  341. package/lib/esm/secrets/fs/FsSecretService.js.map +1 -0
  342. package/lib/esm/secrets/fs/FsSecretServiceConfig.js +21 -0
  343. package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +1 -0
  344. package/lib/esm/secrets/fs/index.js +10 -0
  345. package/lib/esm/secrets/fs/index.js.map +1 -0
  346. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +2 -13
  347. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +1 -1
  348. package/lib/esm/secrets/index.js +2 -0
  349. package/lib/esm/secrets/index.js.map +1 -1
  350. package/lib/esm/secrets/model/ModelSecretService.js +337 -42
  351. package/lib/esm/secrets/model/ModelSecretService.js.map +1 -1
  352. package/lib/esm/secrets/model/Secret.js +86 -7
  353. package/lib/esm/secrets/model/Secret.js.map +1 -1
  354. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +2 -13
  355. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +1 -1
  356. package/lib/esm/secrets/vault/VaultSecretService.js +2 -13
  357. package/lib/esm/secrets/vault/VaultSecretService.js.map +1 -1
  358. package/lib/esm/shared/environmentValue.js +24 -0
  359. package/lib/esm/shared/environmentValue.js.map +1 -1
  360. package/lib/esm/shared/http/HttpApiService.js +181 -0
  361. package/lib/esm/shared/http/HttpApiService.js.map +1 -0
  362. package/lib/esm/shared/http/hermeticBoot.js +146 -0
  363. package/lib/esm/shared/http/hermeticBoot.js.map +1 -0
  364. package/lib/esm/shared/http/index.js +11 -0
  365. package/lib/esm/shared/http/index.js.map +1 -0
  366. package/lib/types/blob/azure/AzureBlobStoreService.d.cts +7 -7
  367. package/lib/types/blob/azure/AzureBlobStoreService.d.mts +7 -7
  368. package/lib/types/blob/core/BlobStoreService.d.cts +28 -27
  369. package/lib/types/blob/core/BlobStoreService.d.mts +28 -27
  370. package/lib/types/blob/gcp/GcsBlobStoreService.d.cts +7 -7
  371. package/lib/types/blob/gcp/GcsBlobStoreService.d.mts +7 -7
  372. package/lib/types/blob/s3/S3BlobStoreService.d.cts +9 -1
  373. package/lib/types/blob/s3/S3BlobStoreService.d.mts +9 -1
  374. package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.cts +11 -15
  375. package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.mts +11 -15
  376. package/lib/types/comms/email/EmailService.d.cts +184 -0
  377. package/lib/types/comms/email/EmailService.d.mts +184 -0
  378. package/lib/types/comms/email/index.d.cts +11 -0
  379. package/lib/types/comms/email/index.d.mts +11 -0
  380. package/lib/types/comms/email/mime.d.cts +84 -0
  381. package/lib/types/comms/email/mime.d.mts +84 -0
  382. package/lib/types/comms/email/smtp.d.cts +107 -0
  383. package/lib/types/comms/email/smtp.d.mts +107 -0
  384. package/lib/types/comms/environment.d.cts +84 -0
  385. package/lib/types/comms/environment.d.mts +84 -0
  386. package/lib/types/comms/gmail/GmailService.d.cts +190 -0
  387. package/lib/types/comms/gmail/GmailService.d.mts +190 -0
  388. package/lib/types/comms/gmail/index.d.cts +6 -0
  389. package/lib/types/comms/gmail/index.d.mts +6 -0
  390. package/lib/types/comms/index.d.cts +13 -0
  391. package/lib/types/comms/index.d.mts +13 -0
  392. package/lib/types/comms/slack/SlackService.d.cts +259 -0
  393. package/lib/types/comms/slack/SlackService.d.mts +259 -0
  394. package/lib/types/comms/slack/index.d.cts +6 -0
  395. package/lib/types/comms/slack/index.d.mts +6 -0
  396. package/lib/types/comms/teams/TeamsService.d.cts +172 -0
  397. package/lib/types/comms/teams/TeamsService.d.mts +172 -0
  398. package/lib/types/comms/teams/index.d.cts +6 -0
  399. package/lib/types/comms/teams/index.d.mts +6 -0
  400. package/lib/types/comms/telegram/TelegramService.d.cts +202 -0
  401. package/lib/types/comms/telegram/TelegramService.d.mts +202 -0
  402. package/lib/types/comms/telegram/index.d.cts +6 -0
  403. package/lib/types/comms/telegram/index.d.mts +6 -0
  404. package/lib/types/devops/environment.d.cts +62 -0
  405. package/lib/types/devops/environment.d.mts +62 -0
  406. package/lib/types/devops/github/GithubService.d.cts +287 -0
  407. package/lib/types/devops/github/GithubService.d.mts +287 -0
  408. package/lib/types/devops/github/index.d.cts +6 -0
  409. package/lib/types/devops/github/index.d.mts +6 -0
  410. package/lib/types/devops/gitlab/GitlabService.d.cts +277 -0
  411. package/lib/types/devops/gitlab/GitlabService.d.mts +277 -0
  412. package/lib/types/devops/gitlab/index.d.cts +6 -0
  413. package/lib/types/devops/gitlab/index.d.mts +6 -0
  414. package/lib/types/devops/index.d.cts +10 -0
  415. package/lib/types/devops/index.d.mts +10 -0
  416. package/lib/types/index.d.cts +2 -2
  417. package/lib/types/index.d.mts +2 -2
  418. package/lib/types/io/airtable/AirtableService.d.cts +268 -0
  419. package/lib/types/io/airtable/AirtableService.d.mts +268 -0
  420. package/lib/types/io/airtable/index.d.cts +6 -0
  421. package/lib/types/io/airtable/index.d.mts +6 -0
  422. package/lib/types/io/environment.d.cts +67 -0
  423. package/lib/types/io/environment.d.mts +67 -0
  424. package/lib/types/io/google-sheets/GoogleSheetsService.d.cts +204 -0
  425. package/lib/types/io/google-sheets/GoogleSheetsService.d.mts +204 -0
  426. package/lib/types/io/google-sheets/index.d.cts +6 -0
  427. package/lib/types/io/google-sheets/index.d.mts +6 -0
  428. package/lib/types/io/graphql/GraphqlService.d.cts +173 -0
  429. package/lib/types/io/graphql/GraphqlService.d.mts +173 -0
  430. package/lib/types/io/graphql/index.d.cts +6 -0
  431. package/lib/types/io/graphql/index.d.mts +6 -0
  432. package/lib/types/io/index.d.cts +12 -0
  433. package/lib/types/io/index.d.mts +12 -0
  434. package/lib/types/io/spreadsheet/SpreadsheetService.d.cts +144 -0
  435. package/lib/types/io/spreadsheet/SpreadsheetService.d.mts +144 -0
  436. package/lib/types/io/spreadsheet/index.d.cts +7 -0
  437. package/lib/types/io/spreadsheet/index.d.mts +7 -0
  438. package/lib/types/namespaces/index.d.cts +1 -0
  439. package/lib/types/namespaces/index.d.mts +1 -0
  440. package/lib/types/namespaces/models/credential.model.d.cts +23 -0
  441. package/lib/types/namespaces/models/credential.model.d.mts +23 -0
  442. package/lib/types/namespaces/models/index.d.cts +1 -0
  443. package/lib/types/namespaces/models/index.d.mts +1 -0
  444. package/lib/types/namespaces/rls/index.d.cts +10 -0
  445. package/lib/types/namespaces/rls/index.d.mts +10 -0
  446. package/lib/types/namespaces/rls/principal-resolver.d.cts +47 -0
  447. package/lib/types/namespaces/rls/principal-resolver.d.mts +47 -0
  448. package/lib/types/namespaces/rls/rls-bootstrap.service.d.cts +157 -0
  449. package/lib/types/namespaces/rls/rls-bootstrap.service.d.mts +157 -0
  450. package/lib/types/namespaces/rls/rls.constants.d.cts +52 -0
  451. package/lib/types/namespaces/rls/rls.constants.d.mts +52 -0
  452. package/lib/types/namespaces/rls/rls.template.d.cts +42 -0
  453. package/lib/types/namespaces/rls/rls.template.d.mts +42 -0
  454. package/lib/types/namespaces/rls/rls.types.d.cts +77 -0
  455. package/lib/types/namespaces/rls/rls.types.d.mts +77 -0
  456. package/lib/types/namespaces/rls/session-binding.d.cts +87 -0
  457. package/lib/types/namespaces/rls/session-binding.d.mts +87 -0
  458. package/lib/types/namespaces/services/credential.service.d.cts +175 -0
  459. package/lib/types/namespaces/services/credential.service.d.mts +175 -0
  460. package/lib/types/namespaces/services/index.d.cts +1 -0
  461. package/lib/types/namespaces/services/index.d.mts +1 -0
  462. package/lib/types/namespaces/types.d.cts +37 -0
  463. package/lib/types/namespaces/types.d.mts +37 -0
  464. package/lib/types/redis/adapter.d.cts +2 -0
  465. package/lib/types/redis/adapter.d.mts +2 -0
  466. package/lib/types/redis/types.d.cts +27 -2
  467. package/lib/types/redis/types.d.mts +27 -2
  468. package/lib/types/secrets/InfraCredentialBootstrap.d.cts +100 -0
  469. package/lib/types/secrets/InfraCredentialBootstrap.d.mts +100 -0
  470. package/lib/types/secrets/core/SecretTypes.d.cts +15 -1
  471. package/lib/types/secrets/core/SecretTypes.d.mts +15 -1
  472. package/lib/types/secrets/fs/FsSecretEnvironment.d.cts +42 -0
  473. package/lib/types/secrets/fs/FsSecretEnvironment.d.mts +42 -0
  474. package/lib/types/secrets/fs/FsSecretService.d.cts +207 -0
  475. package/lib/types/secrets/fs/FsSecretService.d.mts +207 -0
  476. package/lib/types/secrets/fs/FsSecretServiceConfig.d.cts +37 -0
  477. package/lib/types/secrets/fs/FsSecretServiceConfig.d.mts +37 -0
  478. package/lib/types/secrets/fs/index.d.cts +9 -0
  479. package/lib/types/secrets/fs/index.d.mts +9 -0
  480. package/lib/types/secrets/index.d.cts +2 -0
  481. package/lib/types/secrets/index.d.mts +2 -0
  482. package/lib/types/secrets/model/ModelSecretService.d.cts +190 -1
  483. package/lib/types/secrets/model/ModelSecretService.d.mts +190 -1
  484. package/lib/types/secrets/model/Secret.d.cts +44 -3
  485. package/lib/types/secrets/model/Secret.d.mts +44 -3
  486. package/lib/types/shared/environmentValue.d.cts +24 -0
  487. package/lib/types/shared/environmentValue.d.mts +24 -0
  488. package/lib/types/shared/http/HttpApiService.d.cts +193 -0
  489. package/lib/types/shared/http/HttpApiService.d.mts +193 -0
  490. package/lib/types/shared/http/hermeticBoot.d.cts +84 -0
  491. package/lib/types/shared/http/hermeticBoot.d.mts +84 -0
  492. package/lib/types/shared/http/index.d.cts +10 -0
  493. package/lib/types/shared/http/index.d.mts +10 -0
  494. package/package.json +180 -3
  495. package/sql/002_rls.sql +660 -15
  496. package/sql/004_credentials.sql +46 -0
@@ -3,10 +3,9 @@
3
3
  * @summary S3-compatible blob store base implementation.
4
4
  * @description Shared CRUD implementation backed by the AWS SDK v3 S3Client, used by
5
5
  * the S3, MinIO, and Cloudflare R2 provider services. Deliberately left undecorated:
6
- * `@service(...)` on a class whose parent is itself `@service(...)`-decorated breaks
7
- * that subclass's inherited field initializers (e.g. `Context` ends up `undefined`).
8
- * Each concrete provider below extends this class directly and carries its own
9
- * `@service("blob-<provider>")` decorator instead of stacking on top of one another.
6
+ * concrete providers are plain classes that consumers construct and boot
7
+ * explicitly (no injectable registration, no `Service.boot` auto-boot), and
8
+ * each extends this base directly instead of stacking on top of one another.
10
9
  */
11
10
  import { S3Client } from "@aws-sdk/client-s3";
12
11
  import { type ContextualArgs, type MaybeContextualArg } from "@decaf-ts/core";
@@ -16,12 +15,9 @@ import type { BlobGetOptions, BlobGetResult, BlobKey, BlobListOptions, BlobListR
16
15
  * @description Base implementation for S3-compatible blob stores
17
16
  * @summary Implements the full blob CRUD API on top of the AWS SDK v3
18
17
  * `S3Client` and is shared by the S3, MinIO, and Cloudflare R2 provider
19
- * services. Deliberately left undecorated: `@service(...)` on a class whose
20
- * parent is itself `@service(...)`-decorated breaks that subclass's inherited
21
- * field initializers (e.g. `Context` ends up `undefined`). Each concrete
22
- * provider extends this class directly and carries its own
23
- * `@service("blob-<provider>")` decorator instead of stacking on top of one
24
- * another.
18
+ * services. Deliberately left undecorated: concrete providers are plain
19
+ * classes that consumers construct and boot explicitly, so no injectable
20
+ * registration or `Service.boot` auto-boot applies here.
25
21
  * @class S3CompatibleBlobStoreService
26
22
  * @memberOf module:integrations/blob/s3/base-service
27
23
  */
@@ -29,11 +25,11 @@ export declare abstract class S3CompatibleBlobStoreService extends BlobStoreServ
29
25
  /**
30
26
  * @description Initializes the S3 client from config or environment
31
27
  * @summary Resolves the config via `getConfigFromArgs` (explicit config,
32
- * then the provider's environment slice). When no config resolves during a
33
- * context-bearing auto-boot of an unconfigured provider (e.g. an optional
34
- * `blob-minio`/`blob-r2` registered alongside `blob-s3`), returns
35
- * `skipInitialization()` so `Service.boot` does not throw; an explicit
36
- * `initialize()` with no resolvable config still throws a
28
+ * then the provider's environment slice). When no config resolves and the
29
+ * arguments carry a decaf `Context` (e.g. an unconfigured optional
30
+ * `blob-minio`/`blob-r2` provider next to `blob-s3`), returns
31
+ * `skipInitialization()` so the context-bearing boot does not throw; an
32
+ * explicit `initialize()` with no resolvable config still throws a
37
33
  * `ValidationError`. Requires a `bucket`, builds the `S3Client` (with
38
34
  * optional static credentials), stores config and client, and optionally
39
35
  * creates the bucket when `autoCreateBucket` is set.
@@ -3,10 +3,9 @@
3
3
  * @summary S3-compatible blob store base implementation.
4
4
  * @description Shared CRUD implementation backed by the AWS SDK v3 S3Client, used by
5
5
  * the S3, MinIO, and Cloudflare R2 provider services. Deliberately left undecorated:
6
- * `@service(...)` on a class whose parent is itself `@service(...)`-decorated breaks
7
- * that subclass's inherited field initializers (e.g. `Context` ends up `undefined`).
8
- * Each concrete provider below extends this class directly and carries its own
9
- * `@service("blob-<provider>")` decorator instead of stacking on top of one another.
6
+ * concrete providers are plain classes that consumers construct and boot
7
+ * explicitly (no injectable registration, no `Service.boot` auto-boot), and
8
+ * each extends this base directly instead of stacking on top of one another.
10
9
  */
11
10
  import { S3Client } from "@aws-sdk/client-s3";
12
11
  import { type ContextualArgs, type MaybeContextualArg } from "@decaf-ts/core";
@@ -16,12 +15,9 @@ import type { BlobGetOptions, BlobGetResult, BlobKey, BlobListOptions, BlobListR
16
15
  * @description Base implementation for S3-compatible blob stores
17
16
  * @summary Implements the full blob CRUD API on top of the AWS SDK v3
18
17
  * `S3Client` and is shared by the S3, MinIO, and Cloudflare R2 provider
19
- * services. Deliberately left undecorated: `@service(...)` on a class whose
20
- * parent is itself `@service(...)`-decorated breaks that subclass's inherited
21
- * field initializers (e.g. `Context` ends up `undefined`). Each concrete
22
- * provider extends this class directly and carries its own
23
- * `@service("blob-<provider>")` decorator instead of stacking on top of one
24
- * another.
18
+ * services. Deliberately left undecorated: concrete providers are plain
19
+ * classes that consumers construct and boot explicitly, so no injectable
20
+ * registration or `Service.boot` auto-boot applies here.
25
21
  * @class S3CompatibleBlobStoreService
26
22
  * @memberOf module:integrations/blob/s3/base-service
27
23
  */
@@ -29,11 +25,11 @@ export declare abstract class S3CompatibleBlobStoreService extends BlobStoreServ
29
25
  /**
30
26
  * @description Initializes the S3 client from config or environment
31
27
  * @summary Resolves the config via `getConfigFromArgs` (explicit config,
32
- * then the provider's environment slice). When no config resolves during a
33
- * context-bearing auto-boot of an unconfigured provider (e.g. an optional
34
- * `blob-minio`/`blob-r2` registered alongside `blob-s3`), returns
35
- * `skipInitialization()` so `Service.boot` does not throw; an explicit
36
- * `initialize()` with no resolvable config still throws a
28
+ * then the provider's environment slice). When no config resolves and the
29
+ * arguments carry a decaf `Context` (e.g. an unconfigured optional
30
+ * `blob-minio`/`blob-r2` provider next to `blob-s3`), returns
31
+ * `skipInitialization()` so the context-bearing boot does not throw; an
32
+ * explicit `initialize()` with no resolvable config still throws a
37
33
  * `ValidationError`. Requires a `bucket`, builds the `S3Client` (with
38
34
  * optional static credentials), stores config and client, and optionally
39
35
  * creates the bucket when `autoCreateBucket` is set.
@@ -0,0 +1,184 @@
1
+ import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.cts";
2
+ import { type EmailMessageInput } from "./mime.d.cts";
3
+ /**
4
+ * @description Delivery provider selected for a send
5
+ * @summary `smtp` delivers through the built-in raw-MIME client; `graph`
6
+ * posts to the Microsoft Graph `sendMail` endpoint.
7
+ * @category Comms
8
+ * @memberOf module:integrations/comms/email/service
9
+ */
10
+ export type EmailProvider = "smtp" | "graph";
11
+ /**
12
+ * @description Configuration for the Email service
13
+ * @summary Extends {@link HttpApiServiceConfig} with the SMTP connection
14
+ * settings and the Microsoft Graph token/base URL. Every field falls back to
15
+ * the `comms.email` environment slice when omitted. A `host` selects the SMTP
16
+ * provider; a `token` (without `host`) selects Graph.
17
+ * @category Comms
18
+ * @memberOf module:integrations/comms/email/service
19
+ */
20
+ export interface EmailServiceConfig extends HttpApiServiceConfig {
21
+ provider?: EmailProvider;
22
+ host?: string;
23
+ port?: number;
24
+ secure?: boolean;
25
+ username?: string;
26
+ password?: string;
27
+ /**
28
+ * Explicitly allow SMTP `AUTH LOGIN` over a plaintext session. Defaults to
29
+ * `false`: credentials are only sent after implicit TLS or a STARTTLS upgrade.
30
+ */
31
+ allowPlaintextAuth?: boolean;
32
+ from?: string;
33
+ graphBaseUrl?: string;
34
+ token?: string;
35
+ }
36
+ /**
37
+ * @description Result of a successful email send
38
+ * @summary Carries the generated RFC 5322 `Message-ID`, the resolved sender,
39
+ * the flattened recipient list, and the provider that delivered it.
40
+ * @category Comms
41
+ * @memberOf module:integrations/comms/email/service
42
+ */
43
+ export interface EmailSendResult {
44
+ /** @description Generated `Message-ID` (also present in the raw MIME headers) */
45
+ messageId: string;
46
+ /** @description Sender address used for delivery */
47
+ from: string;
48
+ /** @description All To/Cc/Bcc recipients, in that order */
49
+ recipients: string[];
50
+ /** @description Provider that performed the delivery */
51
+ provider: EmailProvider;
52
+ }
53
+ /**
54
+ * @description Filter for inbox reads
55
+ * @summary Applies to both {@link EmailService.listInbox} (Graph) and
56
+ * {@link EmailService.listImapMessages} (IMAP): mailbox path, page size, a
57
+ * lower received-date bound, and a subject filter.
58
+ * @category Comms
59
+ * @memberOf module:integrations/comms/email/service
60
+ */
61
+ export interface EmailInboxQuery {
62
+ /** @description Mailbox path to read (default `me` on Graph, `INBOX` on IMAP) */
63
+ mailbox?: string;
64
+ /** @description Maximum messages returned (default 25) */
65
+ limit?: number;
66
+ /** @description Only messages received after this date (Graph `$filter`); must be an ISO 8601 date or timestamp */
67
+ since?: string;
68
+ /** @description Subject `contains` filter (Graph only) */
69
+ subject?: string;
70
+ }
71
+ /**
72
+ * @description Multi-provider email send/inbox service
73
+ * @summary Resolves the delivery provider from config (`provider`, or inferred
74
+ * from the presence of `host` vs `token`), builds RFC 5322 MIME with
75
+ * UTF-8-encoded headers via {@link buildEmail}, then delivers through SMTP or
76
+ * posts to Graph. Inbox reads go through Graph `messages` (with `$top`,
77
+ * `$filter`, `$orderby`) or the optional `imapflow` package.
78
+ * @category Comms
79
+ * @memberOf module:integrations/comms/email/service
80
+ */
81
+ export declare class EmailService extends HttpApiService<EmailServiceConfig> {
82
+ protected readonly serviceName = "Email";
83
+ /**
84
+ * @description Default Microsoft Graph base URL used when no override is configured
85
+ * @returns The Graph v1.0 endpoint URL
86
+ */
87
+ protected defaultBaseUrl(): string;
88
+ /**
89
+ * @description Authorization headers for Graph requests
90
+ * @param config - Resolved service config
91
+ * @returns A bearer-token `Authorization` header map, empty when no `token` is configured
92
+ */
93
+ protected authHeaders(config: EmailServiceConfig): Record<string, string>;
94
+ /**
95
+ * @description Pins the SMTP plaintext-AUTH default on top of the base initialization
96
+ * @summary Runs the {@link HttpApiService} initialization (explicit config
97
+ * merged over the `comms.email` environment slice) and then defaults an
98
+ * unresolved `allowPlaintextAuth` to `false`, so credentials are only sent
99
+ * over a TLS-protected session unless the config explicitly opts in. This
100
+ * closes the F1 residual where an environment-only `allowPlaintextAuth`
101
+ * opt-in would otherwise reach a boot whose explicit config omits the key
102
+ * (defense in depth on top of {@link bootWithoutEnvironment}, which disables
103
+ * the environment slice entirely on the node path).
104
+ * @param {...any[]} args - An optional `Partial<EmailServiceConfig>`, optionally followed by a decaf `Context`.
105
+ * @returns {Promise<{config: EmailServiceConfig, client: AxiosInstance}>} The merged configuration, with `allowPlaintextAuth` defaulted to `false` when unset, and the configured Axios instance.
106
+ */
107
+ initialize(...args: any[]): Promise<{
108
+ config: EmailServiceConfig;
109
+ client: import("axios").AxiosInstance;
110
+ }>;
111
+ /**
112
+ * @description Builds service config from the `comms.email` environment slice
113
+ * @returns A partial config when either an SMTP `host` or a Graph `token` is present, otherwise `undefined`
114
+ */
115
+ protected configFromEnvironment(): Partial<EmailServiceConfig> | undefined;
116
+ /**
117
+ * @description Selects the delivery provider
118
+ * @summary Prefers an explicit `provider`, then infers `smtp` from a
119
+ * configured `host` and `graph` from a configured `token`.
120
+ * @param config - Resolved service config
121
+ * @returns The resolved provider
122
+ * @throws {InternalError} when neither an SMTP host nor a Graph token is configured
123
+ */
124
+ protected resolveProvider(config: EmailServiceConfig): EmailProvider;
125
+ /**
126
+ * @description Resolves the fallback sender address
127
+ * @summary Uses `from`, then `username`, then the `From` header override.
128
+ * @param config - Resolved service config
129
+ * @returns The resolved sender address
130
+ * @throws {InternalError} when no sender address can be resolved
131
+ */
132
+ protected resolveFrom(config: EmailServiceConfig): string;
133
+ /**
134
+ * @description Sends an email through the resolved provider
135
+ * @summary Builds the raw MIME message (honouring `input.from`, else the
136
+ * resolved config sender), then delivers via SMTP or Graph. SMTP config
137
+ * passes `allowPlaintextAuth` through unchanged, so the plaintext-AUTH
138
+ * opt-out is inherited from the service config.
139
+ * @param input - Message input (recipients, subject, text/html body, attachments)
140
+ * @returns The send result with the generated `Message-ID` and provider
141
+ * @throws {BadRequestError} when an address, attachment filename, or content type fails validation (via {@link buildEmail})
142
+ * @throws {InternalError} when the provider cannot be resolved, the SMTP host is missing, plaintext AUTH is refused, or SMTP delivery fails
143
+ */
144
+ send(input: EmailMessageInput): Promise<EmailSendResult>;
145
+ /**
146
+ * @description Posts a raw MIME message to the Microsoft Graph `sendMail` endpoint
147
+ * @summary Sends the base64-encoded raw message to
148
+ * `/users/<from>/sendMail` (or `/me/sendMail` when no sender is resolved)
149
+ * with the configured `graphBaseUrl`/`baseUrl`.
150
+ * @param raw - Raw RFC 5322 message text
151
+ * @param from - Sender mailbox (UPN) for the Graph path
152
+ * @throws {Error} Graph error mapped through {@link httpError}
153
+ */
154
+ protected sendViaGraph(raw: string, from: string): Promise<void>;
155
+ /**
156
+ * @description Lists messages from a Graph mailbox
157
+ * @summary Queries `<mailbox>/messages` with `$top`, an optional
158
+ * subject/since `$filter`, and `receivedDateTime desc` ordering. The mailbox
159
+ * is URL-encoded as a single path segment, quotes in the subject are escaped
160
+ * for the OData string literal, and `since` must be an ISO 8601 date.
161
+ * @param query - Inbox filter (mailbox, limit, since, subject)
162
+ * @returns The raw Graph message records
163
+ * @throws {BadRequestError} when `since` is not an ISO 8601 date
164
+ * @throws {InternalError} when no `token` is configured; Graph errors mapped through {@link httpError}
165
+ */
166
+ listInbox(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
167
+ /**
168
+ * @description Lists messages directly over IMAP
169
+ * @summary Dynamically imports the optional `imapflow` package, connects to
170
+ * `host` (default port 993, implicit TLS), and fetches the newest messages
171
+ * from `INBOX`.
172
+ *
173
+ * R2 direct-library-wrap justification: IMAP is a stateful protocol
174
+ * (mailbox locks, sequence/UID state, IDLE) whose correct implementation is
175
+ * large and security-sensitive. `imapflow` is the maintained n8n-vetted
176
+ * client for exactly this surface, so wrapping it is deliberate; a local
177
+ * reimplementation would add risk without changing the node contract. The
178
+ * package stays optional so SMTP/Graph-only consumers do not install it.
179
+ * @param query - Inbox filter (limit only is honoured by IMAP)
180
+ * @returns The fetched IMAP message records
181
+ * @throws {InternalError} when `imapflow` is not installed, no `host` is configured, or the IMAP session fails
182
+ */
183
+ listImapMessages(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
184
+ }
@@ -0,0 +1,184 @@
1
+ import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.mts";
2
+ import { type EmailMessageInput } from "./mime.d.mts";
3
+ /**
4
+ * @description Delivery provider selected for a send
5
+ * @summary `smtp` delivers through the built-in raw-MIME client; `graph`
6
+ * posts to the Microsoft Graph `sendMail` endpoint.
7
+ * @category Comms
8
+ * @memberOf module:integrations/comms/email/service
9
+ */
10
+ export type EmailProvider = "smtp" | "graph";
11
+ /**
12
+ * @description Configuration for the Email service
13
+ * @summary Extends {@link HttpApiServiceConfig} with the SMTP connection
14
+ * settings and the Microsoft Graph token/base URL. Every field falls back to
15
+ * the `comms.email` environment slice when omitted. A `host` selects the SMTP
16
+ * provider; a `token` (without `host`) selects Graph.
17
+ * @category Comms
18
+ * @memberOf module:integrations/comms/email/service
19
+ */
20
+ export interface EmailServiceConfig extends HttpApiServiceConfig {
21
+ provider?: EmailProvider;
22
+ host?: string;
23
+ port?: number;
24
+ secure?: boolean;
25
+ username?: string;
26
+ password?: string;
27
+ /**
28
+ * Explicitly allow SMTP `AUTH LOGIN` over a plaintext session. Defaults to
29
+ * `false`: credentials are only sent after implicit TLS or a STARTTLS upgrade.
30
+ */
31
+ allowPlaintextAuth?: boolean;
32
+ from?: string;
33
+ graphBaseUrl?: string;
34
+ token?: string;
35
+ }
36
+ /**
37
+ * @description Result of a successful email send
38
+ * @summary Carries the generated RFC 5322 `Message-ID`, the resolved sender,
39
+ * the flattened recipient list, and the provider that delivered it.
40
+ * @category Comms
41
+ * @memberOf module:integrations/comms/email/service
42
+ */
43
+ export interface EmailSendResult {
44
+ /** @description Generated `Message-ID` (also present in the raw MIME headers) */
45
+ messageId: string;
46
+ /** @description Sender address used for delivery */
47
+ from: string;
48
+ /** @description All To/Cc/Bcc recipients, in that order */
49
+ recipients: string[];
50
+ /** @description Provider that performed the delivery */
51
+ provider: EmailProvider;
52
+ }
53
+ /**
54
+ * @description Filter for inbox reads
55
+ * @summary Applies to both {@link EmailService.listInbox} (Graph) and
56
+ * {@link EmailService.listImapMessages} (IMAP): mailbox path, page size, a
57
+ * lower received-date bound, and a subject filter.
58
+ * @category Comms
59
+ * @memberOf module:integrations/comms/email/service
60
+ */
61
+ export interface EmailInboxQuery {
62
+ /** @description Mailbox path to read (default `me` on Graph, `INBOX` on IMAP) */
63
+ mailbox?: string;
64
+ /** @description Maximum messages returned (default 25) */
65
+ limit?: number;
66
+ /** @description Only messages received after this date (Graph `$filter`); must be an ISO 8601 date or timestamp */
67
+ since?: string;
68
+ /** @description Subject `contains` filter (Graph only) */
69
+ subject?: string;
70
+ }
71
+ /**
72
+ * @description Multi-provider email send/inbox service
73
+ * @summary Resolves the delivery provider from config (`provider`, or inferred
74
+ * from the presence of `host` vs `token`), builds RFC 5322 MIME with
75
+ * UTF-8-encoded headers via {@link buildEmail}, then delivers through SMTP or
76
+ * posts to Graph. Inbox reads go through Graph `messages` (with `$top`,
77
+ * `$filter`, `$orderby`) or the optional `imapflow` package.
78
+ * @category Comms
79
+ * @memberOf module:integrations/comms/email/service
80
+ */
81
+ export declare class EmailService extends HttpApiService<EmailServiceConfig> {
82
+ protected readonly serviceName = "Email";
83
+ /**
84
+ * @description Default Microsoft Graph base URL used when no override is configured
85
+ * @returns The Graph v1.0 endpoint URL
86
+ */
87
+ protected defaultBaseUrl(): string;
88
+ /**
89
+ * @description Authorization headers for Graph requests
90
+ * @param config - Resolved service config
91
+ * @returns A bearer-token `Authorization` header map, empty when no `token` is configured
92
+ */
93
+ protected authHeaders(config: EmailServiceConfig): Record<string, string>;
94
+ /**
95
+ * @description Pins the SMTP plaintext-AUTH default on top of the base initialization
96
+ * @summary Runs the {@link HttpApiService} initialization (explicit config
97
+ * merged over the `comms.email` environment slice) and then defaults an
98
+ * unresolved `allowPlaintextAuth` to `false`, so credentials are only sent
99
+ * over a TLS-protected session unless the config explicitly opts in. This
100
+ * closes the F1 residual where an environment-only `allowPlaintextAuth`
101
+ * opt-in would otherwise reach a boot whose explicit config omits the key
102
+ * (defense in depth on top of {@link bootWithoutEnvironment}, which disables
103
+ * the environment slice entirely on the node path).
104
+ * @param {...any[]} args - An optional `Partial<EmailServiceConfig>`, optionally followed by a decaf `Context`.
105
+ * @returns {Promise<{config: EmailServiceConfig, client: AxiosInstance}>} The merged configuration, with `allowPlaintextAuth` defaulted to `false` when unset, and the configured Axios instance.
106
+ */
107
+ initialize(...args: any[]): Promise<{
108
+ config: EmailServiceConfig;
109
+ client: import("axios").AxiosInstance;
110
+ }>;
111
+ /**
112
+ * @description Builds service config from the `comms.email` environment slice
113
+ * @returns A partial config when either an SMTP `host` or a Graph `token` is present, otherwise `undefined`
114
+ */
115
+ protected configFromEnvironment(): Partial<EmailServiceConfig> | undefined;
116
+ /**
117
+ * @description Selects the delivery provider
118
+ * @summary Prefers an explicit `provider`, then infers `smtp` from a
119
+ * configured `host` and `graph` from a configured `token`.
120
+ * @param config - Resolved service config
121
+ * @returns The resolved provider
122
+ * @throws {InternalError} when neither an SMTP host nor a Graph token is configured
123
+ */
124
+ protected resolveProvider(config: EmailServiceConfig): EmailProvider;
125
+ /**
126
+ * @description Resolves the fallback sender address
127
+ * @summary Uses `from`, then `username`, then the `From` header override.
128
+ * @param config - Resolved service config
129
+ * @returns The resolved sender address
130
+ * @throws {InternalError} when no sender address can be resolved
131
+ */
132
+ protected resolveFrom(config: EmailServiceConfig): string;
133
+ /**
134
+ * @description Sends an email through the resolved provider
135
+ * @summary Builds the raw MIME message (honouring `input.from`, else the
136
+ * resolved config sender), then delivers via SMTP or Graph. SMTP config
137
+ * passes `allowPlaintextAuth` through unchanged, so the plaintext-AUTH
138
+ * opt-out is inherited from the service config.
139
+ * @param input - Message input (recipients, subject, text/html body, attachments)
140
+ * @returns The send result with the generated `Message-ID` and provider
141
+ * @throws {BadRequestError} when an address, attachment filename, or content type fails validation (via {@link buildEmail})
142
+ * @throws {InternalError} when the provider cannot be resolved, the SMTP host is missing, plaintext AUTH is refused, or SMTP delivery fails
143
+ */
144
+ send(input: EmailMessageInput): Promise<EmailSendResult>;
145
+ /**
146
+ * @description Posts a raw MIME message to the Microsoft Graph `sendMail` endpoint
147
+ * @summary Sends the base64-encoded raw message to
148
+ * `/users/<from>/sendMail` (or `/me/sendMail` when no sender is resolved)
149
+ * with the configured `graphBaseUrl`/`baseUrl`.
150
+ * @param raw - Raw RFC 5322 message text
151
+ * @param from - Sender mailbox (UPN) for the Graph path
152
+ * @throws {Error} Graph error mapped through {@link httpError}
153
+ */
154
+ protected sendViaGraph(raw: string, from: string): Promise<void>;
155
+ /**
156
+ * @description Lists messages from a Graph mailbox
157
+ * @summary Queries `<mailbox>/messages` with `$top`, an optional
158
+ * subject/since `$filter`, and `receivedDateTime desc` ordering. The mailbox
159
+ * is URL-encoded as a single path segment, quotes in the subject are escaped
160
+ * for the OData string literal, and `since` must be an ISO 8601 date.
161
+ * @param query - Inbox filter (mailbox, limit, since, subject)
162
+ * @returns The raw Graph message records
163
+ * @throws {BadRequestError} when `since` is not an ISO 8601 date
164
+ * @throws {InternalError} when no `token` is configured; Graph errors mapped through {@link httpError}
165
+ */
166
+ listInbox(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
167
+ /**
168
+ * @description Lists messages directly over IMAP
169
+ * @summary Dynamically imports the optional `imapflow` package, connects to
170
+ * `host` (default port 993, implicit TLS), and fetches the newest messages
171
+ * from `INBOX`.
172
+ *
173
+ * R2 direct-library-wrap justification: IMAP is a stateful protocol
174
+ * (mailbox locks, sequence/UID state, IDLE) whose correct implementation is
175
+ * large and security-sensitive. `imapflow` is the maintained n8n-vetted
176
+ * client for exactly this surface, so wrapping it is deliberate; a local
177
+ * reimplementation would add risk without changing the node contract. The
178
+ * package stays optional so SMTP/Graph-only consumers do not install it.
179
+ * @param query - Inbox filter (limit only is honoured by IMAP)
180
+ * @returns The fetched IMAP message records
181
+ * @throws {InternalError} when `imapflow` is not installed, no `host` is configured, or the IMAP session fails
182
+ */
183
+ listImapMessages(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
184
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @module integrations/comms/email
3
+ * @summary Email service (SMTP + Microsoft Graph send, Graph/IMAP inbox reads).
4
+ * @description Re-exports the {@link EmailService} and its config/result
5
+ * types, the raw MIME builder, and the nodemailer-backed {@link SmtpClient}
6
+ * with its {@link SmtpConfig}
7
+ * (also available directly from the `./smtp` subpath).
8
+ */
9
+ export * from "./EmailService.d.cts";
10
+ export * from "./mime.d.cts";
11
+ export * from "./smtp.d.cts";
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @module integrations/comms/email
3
+ * @summary Email service (SMTP + Microsoft Graph send, Graph/IMAP inbox reads).
4
+ * @description Re-exports the {@link EmailService} and its config/result
5
+ * types, the raw MIME builder, and the nodemailer-backed {@link SmtpClient}
6
+ * with its {@link SmtpConfig}
7
+ * (also available directly from the `./smtp` subpath).
8
+ */
9
+ export * from "./EmailService.d.mts";
10
+ export * from "./mime.d.mts";
11
+ export * from "./smtp.d.mts";
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @description A message attachment
3
+ * @summary Content is base64 text by default; with `encoding: "utf8"` the
4
+ * builder base64-encodes the UTF-8 content itself.
5
+ * @category Comms
6
+ * @memberOf module:integrations/comms/email/mime
7
+ */
8
+ export interface EmailAttachment {
9
+ filename: string;
10
+ content: string;
11
+ encoding?: "base64" | "utf8";
12
+ contentType?: string;
13
+ }
14
+ /**
15
+ * @description Input for building a raw MIME message
16
+ * @summary Carries the sender, recipients (single address, comma-separated
17
+ * string, or array), subject, optional text and HTML bodies, `Reply-To`, and
18
+ * attachments.
19
+ * @category Comms
20
+ * @memberOf module:integrations/comms/email/mime
21
+ */
22
+ export interface EmailMessageInput {
23
+ from: string;
24
+ to: string | string[];
25
+ cc?: string | string[];
26
+ bcc?: string | string[];
27
+ subject: string;
28
+ text?: string;
29
+ html?: string;
30
+ replyTo?: string;
31
+ attachments?: EmailAttachment[];
32
+ }
33
+ /**
34
+ * @description The built MIME message ready for delivery
35
+ * @summary Carries the raw RFC 5322 text, the resolved sender, the flattened
36
+ * recipient list (To/Cc/Bcc), and the generated `Message-ID`.
37
+ * @category Comms
38
+ * @memberOf module:integrations/comms/email/mime
39
+ */
40
+ export interface BuiltEmail {
41
+ raw: string;
42
+ from: string;
43
+ recipients: string[];
44
+ messageId: string;
45
+ }
46
+ /**
47
+ * Validates a mailbox address against the allowlist and returns it trimmed.
48
+ *
49
+ * @param value - Candidate address.
50
+ * @param field - Human-readable field name used in the error message.
51
+ * @returns The trimmed, validated mailbox address.
52
+ * @throws {BadRequestError} when the address contains control characters or is not a bare mailbox.
53
+ */
54
+ export declare function assertEmailAddress(value: string, field?: string): string;
55
+ /**
56
+ * @description Encodes a MIME header value safely
57
+ * @summary Pure-ASCII values pass through; anything else becomes an RFC 2047
58
+ * `=?UTF-8?B?...?=` encoded word.
59
+ * @param value - Raw header value
60
+ * @returns The header value safe for raw message transport
61
+ */
62
+ export declare function encodeHeader(value: string): string;
63
+ /**
64
+ * @description Normalizes a recipient input into an allowlisted address list
65
+ * @summary Splits comma-separated strings, trims entries, drops empties, and
66
+ * validates every remaining entry as a bare mailbox address. Values carrying
67
+ * CR/LF, NUL, or other control characters are rejected outright so workflow
68
+ * input can never inject MIME headers or SMTP envelope commands.
69
+ * @param value - Single address, comma-separated string, array, or `undefined`
70
+ * @returns The trimmed, validated list of addresses
71
+ * @throws {BadRequestError} when an entry is not a valid mailbox address
72
+ */
73
+ export declare function parseAddressList(value: string | string[] | undefined): string[];
74
+ /**
75
+ * @description Builds the complete raw MIME message
76
+ * @summary Generates the `Message-ID`, resolves recipients (throwing when
77
+ * none remain), emits the standard headers, and assembles the body entity
78
+ * (alternative text/HTML parts, plus attachments when present).
79
+ * @param input - Message input
80
+ * @returns The built message with raw text, sender, recipients, and `Message-ID`
81
+ * @throws {BadRequestError} when the message has no recipient or any address,
82
+ * attachment filename, or content type fails validation
83
+ */
84
+ export declare function buildEmail(input: EmailMessageInput): BuiltEmail;
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @description A message attachment
3
+ * @summary Content is base64 text by default; with `encoding: "utf8"` the
4
+ * builder base64-encodes the UTF-8 content itself.
5
+ * @category Comms
6
+ * @memberOf module:integrations/comms/email/mime
7
+ */
8
+ export interface EmailAttachment {
9
+ filename: string;
10
+ content: string;
11
+ encoding?: "base64" | "utf8";
12
+ contentType?: string;
13
+ }
14
+ /**
15
+ * @description Input for building a raw MIME message
16
+ * @summary Carries the sender, recipients (single address, comma-separated
17
+ * string, or array), subject, optional text and HTML bodies, `Reply-To`, and
18
+ * attachments.
19
+ * @category Comms
20
+ * @memberOf module:integrations/comms/email/mime
21
+ */
22
+ export interface EmailMessageInput {
23
+ from: string;
24
+ to: string | string[];
25
+ cc?: string | string[];
26
+ bcc?: string | string[];
27
+ subject: string;
28
+ text?: string;
29
+ html?: string;
30
+ replyTo?: string;
31
+ attachments?: EmailAttachment[];
32
+ }
33
+ /**
34
+ * @description The built MIME message ready for delivery
35
+ * @summary Carries the raw RFC 5322 text, the resolved sender, the flattened
36
+ * recipient list (To/Cc/Bcc), and the generated `Message-ID`.
37
+ * @category Comms
38
+ * @memberOf module:integrations/comms/email/mime
39
+ */
40
+ export interface BuiltEmail {
41
+ raw: string;
42
+ from: string;
43
+ recipients: string[];
44
+ messageId: string;
45
+ }
46
+ /**
47
+ * Validates a mailbox address against the allowlist and returns it trimmed.
48
+ *
49
+ * @param value - Candidate address.
50
+ * @param field - Human-readable field name used in the error message.
51
+ * @returns The trimmed, validated mailbox address.
52
+ * @throws {BadRequestError} when the address contains control characters or is not a bare mailbox.
53
+ */
54
+ export declare function assertEmailAddress(value: string, field?: string): string;
55
+ /**
56
+ * @description Encodes a MIME header value safely
57
+ * @summary Pure-ASCII values pass through; anything else becomes an RFC 2047
58
+ * `=?UTF-8?B?...?=` encoded word.
59
+ * @param value - Raw header value
60
+ * @returns The header value safe for raw message transport
61
+ */
62
+ export declare function encodeHeader(value: string): string;
63
+ /**
64
+ * @description Normalizes a recipient input into an allowlisted address list
65
+ * @summary Splits comma-separated strings, trims entries, drops empties, and
66
+ * validates every remaining entry as a bare mailbox address. Values carrying
67
+ * CR/LF, NUL, or other control characters are rejected outright so workflow
68
+ * input can never inject MIME headers or SMTP envelope commands.
69
+ * @param value - Single address, comma-separated string, array, or `undefined`
70
+ * @returns The trimmed, validated list of addresses
71
+ * @throws {BadRequestError} when an entry is not a valid mailbox address
72
+ */
73
+ export declare function parseAddressList(value: string | string[] | undefined): string[];
74
+ /**
75
+ * @description Builds the complete raw MIME message
76
+ * @summary Generates the `Message-ID`, resolves recipients (throwing when
77
+ * none remain), emits the standard headers, and assembles the body entity
78
+ * (alternative text/HTML parts, plus attachments when present).
79
+ * @param input - Message input
80
+ * @returns The built message with raw text, sender, recipients, and `Message-ID`
81
+ * @throws {BadRequestError} when the message has no recipient or any address,
82
+ * attachment filename, or content type fails validation
83
+ */
84
+ export declare function buildEmail(input: EmailMessageInput): BuiltEmail;