@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
@@ -0,0 +1,193 @@
1
+ import { type AxiosInstance } from "axios";
2
+ import { ClientBasedService, MaybeContextualArg } from "@decaf-ts/core";
3
+ /**
4
+ * @module integrations/shared/http/base-service
5
+ * @summary Shared HTTP base service, config contract, and error mapping for the HTTP-backed integration services.
6
+ * @description Provides the `HttpApiServiceConfig` shape consumed by every Stage 3b HTTP-backed
7
+ * integration service (Slack, Telegram, Teams, Gmail, GitHub, GitLab, Google Sheets, Airtable, and
8
+ * GraphQL), the abstract `HttpApiService` client-based service that turns a config into a
9
+ * configured Axios instance, and the `httpError` mapper that converts transport failures into
10
+ * decaf `BadRequestError`/`ConflictError`/`NotFoundError`/`InternalError` errors. Concrete
11
+ * services extend `HttpApiService` and only supply their base URL, auth headers, and environment
12
+ * slice, inheriting initialization and error mapping.
13
+ */
14
+ /**
15
+ * @description Base configuration shared by every HTTP-backed integration service
16
+ * @summary Carries the optional `baseUrl` override (falling back to the service's
17
+ * `defaultBaseUrl()`), credentials (`token`, or `username`/`password` for basic-auth
18
+ * style APIs), an Axios `timeout` in milliseconds (defaults to `30000`), and any
19
+ * extra default `headers` merged after the service's own `authHeaders`. Concrete
20
+ * services extend this interface with their provider-specific fields.
21
+ * @category Shared
22
+ * @memberOf module:integrations/shared/http/base-service
23
+ */
24
+ export interface HttpApiServiceConfig {
25
+ /**
26
+ * @description Base URL override for the service client
27
+ * @summary When omitted, the concrete service's `defaultBaseUrl()` is used.
28
+ */
29
+ baseUrl?: string;
30
+ /**
31
+ * @description Bearer or provider token used for authentication
32
+ * @summary How the token is sent (header name, scheme, or query parameter) is
33
+ * decided by each concrete service's `authHeaders()` implementation.
34
+ */
35
+ token?: string;
36
+ /**
37
+ * @description Optional username for basic-auth style APIs
38
+ * @summary Used together with {@link HttpApiServiceConfig.password} by services
39
+ * that authenticate with HTTP basic credentials.
40
+ */
41
+ username?: string;
42
+ /**
43
+ * @description Optional password for basic-auth style APIs
44
+ * @summary Used together with {@link HttpApiServiceConfig.username}.
45
+ */
46
+ password?: string;
47
+ /**
48
+ * @description Request timeout in milliseconds
49
+ * @summary Applied to the Axios instance created by
50
+ * {@link HttpApiService.initialize}; defaults to `30000` when omitted.
51
+ */
52
+ timeout?: number;
53
+ /**
54
+ * @description Extra default headers merged into every request
55
+ * @summary Merged after the service's own `authHeaders()`, so explicit
56
+ * `headers` entries take precedence over generated auth headers.
57
+ */
58
+ headers?: Record<string, string>;
59
+ }
60
+ /**
61
+ * @description Maps a transport or provider failure to a decaf error
62
+ * @summary Normalizes `unknown` caught errors into the decaf error hierarchy.
63
+ * Already-mapped decaf errors are returned unchanged; errors carrying an HTTP
64
+ * response are mapped by status (`404` to `NotFoundError`, `409` to
65
+ * `ConflictError`, everything else to `BadRequestError` with the response body
66
+ * as detail); any other failure becomes an `InternalError` carrying the
67
+ * original message. Concrete services wrap their API calls with this mapper so
68
+ * callers only ever observe decaf errors.
69
+ * @param {string} serviceName - Human-readable provider name used to prefix the error message (e.g. `"Slack"`).
70
+ * @param {string} action - Short description of the failing operation (e.g. `"API chat.postMessage"`).
71
+ * @param {unknown} error - The caught error: a decaf error, an Axios-style error with an HTTP `response`, or anything else.
72
+ * @returns {Error} The corresponding decaf error: the input unchanged when already a decaf error, a status-mapped `NotFoundError`/`ConflictError`/`BadRequestError` when an HTTP response is present, or an `InternalError` otherwise.
73
+ * @category Shared
74
+ * @memberOf module:integrations/shared/http/base-service
75
+ */
76
+ export declare function httpError(serviceName: string, action: string, error: unknown): Error;
77
+ /**
78
+ * @description Abstract base service for HTTP-backed provider integrations
79
+ * @summary Implements the shared `ClientBasedService` lifecycle for REST-style
80
+ * providers: `initialize()` merges an explicitly provided config with the
81
+ * concrete service's environment slice, resolves the effective base URL
82
+ * (explicit `baseUrl`, then `defaultBaseUrl()`), and builds an `AxiosInstance`
83
+ * with the JSON content type, the service's `authHeaders()`, and any extra
84
+ * config `headers`. Subclasses declare their `serviceName`, supply a
85
+ * `defaultBaseUrl()`, optionally override `authHeaders()` and
86
+ * `configFromEnvironment()`, and use `requireToken()` in operations that
87
+ * mandate a token. Callers always pass a concrete config object (or rely on
88
+ * the environment slice) and receive typed decaf errors through
89
+ * {@link httpError}.
90
+ * @class HttpApiService
91
+ * @category Shared
92
+ * @mermaid
93
+ * sequenceDiagram
94
+ * autonumber
95
+ * participant Caller
96
+ * participant Service as HttpApiService
97
+ * participant Env as Environment slice
98
+ * participant Axios as Axios
99
+ * Caller->>Service: initialize(providedConfig?)
100
+ * activate Service
101
+ * Service->>Env: configFromEnvironment()
102
+ * activate Env
103
+ * Env-->>Service: partial config (or undefined)
104
+ * deactivate Env
105
+ * Service->>Service: merge { ...environment, ...provided }
106
+ * alt baseUrl configured
107
+ * Service->>Service: baseUrl = config.baseUrl
108
+ * else baseUrl missing
109
+ * Service->>Service: baseUrl = defaultBaseUrl()
110
+ * alt still missing
111
+ * Service--xCaller: InternalError (requires a base URL)
112
+ * end
113
+ * end
114
+ * Service->>Axios: create({ baseURL, timeout, headers })
115
+ * activate Axios
116
+ * Axios-->>Service: AxiosInstance
117
+ * deactivate Axios
118
+ * Service-->>Caller: { config, client }
119
+ * deactivate Service
120
+ * @example
121
+ * ```ts
122
+ * import { SlackService } from "@decaf-ts/integrations/comms/slack";
123
+ *
124
+ * const slack = new SlackService();
125
+ * // explicit config; when omitted, initialize() falls back to the
126
+ * // service's environment slice (e.g. GRAPH_CREDENTIAL_SLACK_TOKEN)
127
+ * await slack.initialize({ token: process.env.GRAPH_CREDENTIAL_SLACK_TOKEN });
128
+ * ```
129
+ * @memberOf module:integrations/shared/http/base-service
130
+ */
131
+ export declare abstract class HttpApiService<CONF extends HttpApiServiceConfig> extends ClientBasedService<AxiosInstance, CONF> {
132
+ constructor();
133
+ /**
134
+ * @description Human-readable provider name used in error messages
135
+ * @summary Subclasses must declare this (e.g. `"Slack"`, `"GitHub"`); it
136
+ * prefixes messages thrown for missing base URLs, tokens, and mapped errors.
137
+ */
138
+ protected abstract readonly serviceName: string;
139
+ /**
140
+ * @description The provider's default API base URL
141
+ * @summary Used by {@link HttpApiService.initialize} when the resolved
142
+ * config carries no `baseUrl`.
143
+ * @returns {string} The provider's default base URL (e.g. `"https://api.github.com"`).
144
+ */
145
+ protected abstract defaultBaseUrl(): string;
146
+ /**
147
+ * @description Builds the default authentication headers for a config
148
+ * @summary Invoked by {@link HttpApiService.initialize} when creating the
149
+ * Axios instance. The base implementation returns no headers; subclasses
150
+ * override it to translate `config.token`/`username`/`password` into
151
+ * provider-specific headers (e.g. `Authorization: Bearer ...`).
152
+ * @param {CONF} config - The resolved service configuration.
153
+ * @returns {Record<string, string>} The headers to send with every request; empty when the config carries no credentials.
154
+ */
155
+ protected authHeaders(_config: CONF): Record<string, string>;
156
+ /**
157
+ * @description Reads the service's credentials and defaults from the environment
158
+ * @summary Invoked by {@link HttpApiService.initialize} and merged under the
159
+ * explicitly provided config (explicit values win). Subclasses override this
160
+ * to read their `LoggedEnvironment` slice with the
161
+ * `envString`/`envNumber`/`envBoolean` helpers and return `undefined` when
162
+ * the slice is not configured at all.
163
+ * @returns {Partial<CONF> | undefined} A partial config from the environment, or `undefined` when the environment carries no usable credentials.
164
+ */
165
+ protected configFromEnvironment(): Partial<CONF> | undefined;
166
+ /**
167
+ * @description Resolves the config and builds the Axios client
168
+ * @summary Merges the explicitly provided config (first argument, when
169
+ * present) over the environment slice from `configFromEnvironment()`,
170
+ * resolves the effective base URL (explicit `baseUrl`, then
171
+ * `defaultBaseUrl()`), and creates an Axios instance with the resolved
172
+ * `timeout` (default `30000`), JSON content type, `authHeaders(config)`,
173
+ * and any extra config `headers`. The resolved config and client are also
174
+ * stored on the service for subsequent operations.
175
+ * @param {...MaybeContextualArg<any>} args - An optional `Partial<CONF>`, optionally followed by a decaf `Context`.
176
+ * @returns {Promise<{config: CONF, client: AxiosInstance}>} The merged configuration and the configured Axios instance.
177
+ * @throws {InternalError} When neither the config nor `defaultBaseUrl()` yields a base URL.
178
+ */
179
+ initialize(...args: MaybeContextualArg<any>): Promise<{
180
+ config: CONF;
181
+ client: AxiosInstance;
182
+ }>;
183
+ /**
184
+ * @description Asserts that the service was configured with a token
185
+ * @summary Reads the resolved config and throws when no `token` is present;
186
+ * operations that require authenticated access call this before issuing
187
+ * requests.
188
+ * @param {CONF} [config] - The config to validate; defaults to the service's resolved config.
189
+ * @returns {string} The configured token.
190
+ * @throws {InternalError} When the config carries no `token`.
191
+ */
192
+ protected requireToken(config?: CONF): string;
193
+ }
@@ -0,0 +1,193 @@
1
+ import { type AxiosInstance } from "axios";
2
+ import { ClientBasedService, MaybeContextualArg } from "@decaf-ts/core";
3
+ /**
4
+ * @module integrations/shared/http/base-service
5
+ * @summary Shared HTTP base service, config contract, and error mapping for the HTTP-backed integration services.
6
+ * @description Provides the `HttpApiServiceConfig` shape consumed by every Stage 3b HTTP-backed
7
+ * integration service (Slack, Telegram, Teams, Gmail, GitHub, GitLab, Google Sheets, Airtable, and
8
+ * GraphQL), the abstract `HttpApiService` client-based service that turns a config into a
9
+ * configured Axios instance, and the `httpError` mapper that converts transport failures into
10
+ * decaf `BadRequestError`/`ConflictError`/`NotFoundError`/`InternalError` errors. Concrete
11
+ * services extend `HttpApiService` and only supply their base URL, auth headers, and environment
12
+ * slice, inheriting initialization and error mapping.
13
+ */
14
+ /**
15
+ * @description Base configuration shared by every HTTP-backed integration service
16
+ * @summary Carries the optional `baseUrl` override (falling back to the service's
17
+ * `defaultBaseUrl()`), credentials (`token`, or `username`/`password` for basic-auth
18
+ * style APIs), an Axios `timeout` in milliseconds (defaults to `30000`), and any
19
+ * extra default `headers` merged after the service's own `authHeaders`. Concrete
20
+ * services extend this interface with their provider-specific fields.
21
+ * @category Shared
22
+ * @memberOf module:integrations/shared/http/base-service
23
+ */
24
+ export interface HttpApiServiceConfig {
25
+ /**
26
+ * @description Base URL override for the service client
27
+ * @summary When omitted, the concrete service's `defaultBaseUrl()` is used.
28
+ */
29
+ baseUrl?: string;
30
+ /**
31
+ * @description Bearer or provider token used for authentication
32
+ * @summary How the token is sent (header name, scheme, or query parameter) is
33
+ * decided by each concrete service's `authHeaders()` implementation.
34
+ */
35
+ token?: string;
36
+ /**
37
+ * @description Optional username for basic-auth style APIs
38
+ * @summary Used together with {@link HttpApiServiceConfig.password} by services
39
+ * that authenticate with HTTP basic credentials.
40
+ */
41
+ username?: string;
42
+ /**
43
+ * @description Optional password for basic-auth style APIs
44
+ * @summary Used together with {@link HttpApiServiceConfig.username}.
45
+ */
46
+ password?: string;
47
+ /**
48
+ * @description Request timeout in milliseconds
49
+ * @summary Applied to the Axios instance created by
50
+ * {@link HttpApiService.initialize}; defaults to `30000` when omitted.
51
+ */
52
+ timeout?: number;
53
+ /**
54
+ * @description Extra default headers merged into every request
55
+ * @summary Merged after the service's own `authHeaders()`, so explicit
56
+ * `headers` entries take precedence over generated auth headers.
57
+ */
58
+ headers?: Record<string, string>;
59
+ }
60
+ /**
61
+ * @description Maps a transport or provider failure to a decaf error
62
+ * @summary Normalizes `unknown` caught errors into the decaf error hierarchy.
63
+ * Already-mapped decaf errors are returned unchanged; errors carrying an HTTP
64
+ * response are mapped by status (`404` to `NotFoundError`, `409` to
65
+ * `ConflictError`, everything else to `BadRequestError` with the response body
66
+ * as detail); any other failure becomes an `InternalError` carrying the
67
+ * original message. Concrete services wrap their API calls with this mapper so
68
+ * callers only ever observe decaf errors.
69
+ * @param {string} serviceName - Human-readable provider name used to prefix the error message (e.g. `"Slack"`).
70
+ * @param {string} action - Short description of the failing operation (e.g. `"API chat.postMessage"`).
71
+ * @param {unknown} error - The caught error: a decaf error, an Axios-style error with an HTTP `response`, or anything else.
72
+ * @returns {Error} The corresponding decaf error: the input unchanged when already a decaf error, a status-mapped `NotFoundError`/`ConflictError`/`BadRequestError` when an HTTP response is present, or an `InternalError` otherwise.
73
+ * @category Shared
74
+ * @memberOf module:integrations/shared/http/base-service
75
+ */
76
+ export declare function httpError(serviceName: string, action: string, error: unknown): Error;
77
+ /**
78
+ * @description Abstract base service for HTTP-backed provider integrations
79
+ * @summary Implements the shared `ClientBasedService` lifecycle for REST-style
80
+ * providers: `initialize()` merges an explicitly provided config with the
81
+ * concrete service's environment slice, resolves the effective base URL
82
+ * (explicit `baseUrl`, then `defaultBaseUrl()`), and builds an `AxiosInstance`
83
+ * with the JSON content type, the service's `authHeaders()`, and any extra
84
+ * config `headers`. Subclasses declare their `serviceName`, supply a
85
+ * `defaultBaseUrl()`, optionally override `authHeaders()` and
86
+ * `configFromEnvironment()`, and use `requireToken()` in operations that
87
+ * mandate a token. Callers always pass a concrete config object (or rely on
88
+ * the environment slice) and receive typed decaf errors through
89
+ * {@link httpError}.
90
+ * @class HttpApiService
91
+ * @category Shared
92
+ * @mermaid
93
+ * sequenceDiagram
94
+ * autonumber
95
+ * participant Caller
96
+ * participant Service as HttpApiService
97
+ * participant Env as Environment slice
98
+ * participant Axios as Axios
99
+ * Caller->>Service: initialize(providedConfig?)
100
+ * activate Service
101
+ * Service->>Env: configFromEnvironment()
102
+ * activate Env
103
+ * Env-->>Service: partial config (or undefined)
104
+ * deactivate Env
105
+ * Service->>Service: merge { ...environment, ...provided }
106
+ * alt baseUrl configured
107
+ * Service->>Service: baseUrl = config.baseUrl
108
+ * else baseUrl missing
109
+ * Service->>Service: baseUrl = defaultBaseUrl()
110
+ * alt still missing
111
+ * Service--xCaller: InternalError (requires a base URL)
112
+ * end
113
+ * end
114
+ * Service->>Axios: create({ baseURL, timeout, headers })
115
+ * activate Axios
116
+ * Axios-->>Service: AxiosInstance
117
+ * deactivate Axios
118
+ * Service-->>Caller: { config, client }
119
+ * deactivate Service
120
+ * @example
121
+ * ```ts
122
+ * import { SlackService } from "@decaf-ts/integrations/comms/slack";
123
+ *
124
+ * const slack = new SlackService();
125
+ * // explicit config; when omitted, initialize() falls back to the
126
+ * // service's environment slice (e.g. GRAPH_CREDENTIAL_SLACK_TOKEN)
127
+ * await slack.initialize({ token: process.env.GRAPH_CREDENTIAL_SLACK_TOKEN });
128
+ * ```
129
+ * @memberOf module:integrations/shared/http/base-service
130
+ */
131
+ export declare abstract class HttpApiService<CONF extends HttpApiServiceConfig> extends ClientBasedService<AxiosInstance, CONF> {
132
+ constructor();
133
+ /**
134
+ * @description Human-readable provider name used in error messages
135
+ * @summary Subclasses must declare this (e.g. `"Slack"`, `"GitHub"`); it
136
+ * prefixes messages thrown for missing base URLs, tokens, and mapped errors.
137
+ */
138
+ protected abstract readonly serviceName: string;
139
+ /**
140
+ * @description The provider's default API base URL
141
+ * @summary Used by {@link HttpApiService.initialize} when the resolved
142
+ * config carries no `baseUrl`.
143
+ * @returns {string} The provider's default base URL (e.g. `"https://api.github.com"`).
144
+ */
145
+ protected abstract defaultBaseUrl(): string;
146
+ /**
147
+ * @description Builds the default authentication headers for a config
148
+ * @summary Invoked by {@link HttpApiService.initialize} when creating the
149
+ * Axios instance. The base implementation returns no headers; subclasses
150
+ * override it to translate `config.token`/`username`/`password` into
151
+ * provider-specific headers (e.g. `Authorization: Bearer ...`).
152
+ * @param {CONF} config - The resolved service configuration.
153
+ * @returns {Record<string, string>} The headers to send with every request; empty when the config carries no credentials.
154
+ */
155
+ protected authHeaders(_config: CONF): Record<string, string>;
156
+ /**
157
+ * @description Reads the service's credentials and defaults from the environment
158
+ * @summary Invoked by {@link HttpApiService.initialize} and merged under the
159
+ * explicitly provided config (explicit values win). Subclasses override this
160
+ * to read their `LoggedEnvironment` slice with the
161
+ * `envString`/`envNumber`/`envBoolean` helpers and return `undefined` when
162
+ * the slice is not configured at all.
163
+ * @returns {Partial<CONF> | undefined} A partial config from the environment, or `undefined` when the environment carries no usable credentials.
164
+ */
165
+ protected configFromEnvironment(): Partial<CONF> | undefined;
166
+ /**
167
+ * @description Resolves the config and builds the Axios client
168
+ * @summary Merges the explicitly provided config (first argument, when
169
+ * present) over the environment slice from `configFromEnvironment()`,
170
+ * resolves the effective base URL (explicit `baseUrl`, then
171
+ * `defaultBaseUrl()`), and creates an Axios instance with the resolved
172
+ * `timeout` (default `30000`), JSON content type, `authHeaders(config)`,
173
+ * and any extra config `headers`. The resolved config and client are also
174
+ * stored on the service for subsequent operations.
175
+ * @param {...MaybeContextualArg<any>} args - An optional `Partial<CONF>`, optionally followed by a decaf `Context`.
176
+ * @returns {Promise<{config: CONF, client: AxiosInstance}>} The merged configuration and the configured Axios instance.
177
+ * @throws {InternalError} When neither the config nor `defaultBaseUrl()` yields a base URL.
178
+ */
179
+ initialize(...args: MaybeContextualArg<any>): Promise<{
180
+ config: CONF;
181
+ client: AxiosInstance;
182
+ }>;
183
+ /**
184
+ * @description Asserts that the service was configured with a token
185
+ * @summary Reads the resolved config and throws when no `token` is present;
186
+ * operations that require authenticated access call this before issuing
187
+ * requests.
188
+ * @param {CONF} [config] - The config to validate; defaults to the service's resolved config.
189
+ * @returns {string} The configured token.
190
+ * @throws {InternalError} When the config carries no `token`.
191
+ */
192
+ protected requireToken(config?: CONF): string;
193
+ }
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @description Minimal boot contract required by the hermetic boot helper
3
+ * @summary Any client-based service exposing the core `boot(...)` shape; kept
4
+ * structural so the helper does not depend on the core service types.
5
+ */
6
+ interface HermeticBootableService {
7
+ boot(...args: unknown[]): Promise<unknown>;
8
+ }
9
+ /**
10
+ * @description Boots a service with Environment-derived configuration disabled
11
+ * @summary Node-side replacement for the removed `nonEnvironmentService`
12
+ * wrappers (SAA-1293): the service's own `configFromEnvironment()` property
13
+ * descriptor is shadowed with `() => undefined` for the duration of the
14
+ * `boot()` call and restored (or removed, when the service had no own
15
+ * descriptor) in `finally`, so configuration keys absent from
16
+ * the explicit config cannot inherit the service's Environment slice. The
17
+ * shadowing is per-instance (the prototype is never touched): a module-level
18
+ * `WeakMap` (`shadowScopes`) tracks each service's original
19
+ * `configFromEnvironment` descriptor together with a call depth, so
20
+ * overlapping or nested `bootWithoutEnvironment` calls on the same instance
21
+ * share a single shadow; a nested call only increments that depth and never
22
+ * restores the descriptor early, and the original descriptor is restored (or
23
+ * deleted) only when the outermost call completes. The helper fails closed:
24
+ * an explicit config object is mandatory, so a node boot can never silently
25
+ * fall back to Environment configuration. The SAA-1293 undecorated-service
26
+ * contract stands — no decoration, no wrapper classes, no `Injectables`
27
+ * registration.
28
+ * @template CONF The explicit configuration object type passed to `boot()`.
29
+ * @template S The undecorated service type being booted.
30
+ * @param {S} service - The undecorated service instance to boot.
31
+ * @param {CONF} config - Explicit configuration object for the boot; Environment-derived config is disabled for this call.
32
+ * @param {...unknown} rest - Remaining `boot()` arguments (e.g. a decaf `Context`), forwarded unchanged.
33
+ * @returns {Promise<S>} The same service instance, booted with only the explicit configuration.
34
+ * @throws {ValidationError} When `config` is missing or not an object.
35
+ * @example
36
+ * ```ts
37
+ * import { EmailService } from "@decaf-ts/integrations/comms/email";
38
+ * import { bootWithoutEnvironment } from "@decaf-ts/integrations/shared/http";
39
+ *
40
+ * const service = new EmailService();
41
+ * // The comms.email environment slice is ignored even when configured:
42
+ * // allowPlaintextAuth stays false unless the explicit config sets it.
43
+ * await bootWithoutEnvironment(service, {
44
+ * provider: "smtp",
45
+ * host: "smtp.example",
46
+ * port: 587,
47
+ * username: "user@example.com",
48
+ * password: "secret",
49
+ * });
50
+ * ```
51
+ * @category Shared
52
+ * @memberOf module:integrations/shared/http/hermetic-boot
53
+ * @mermaid
54
+ * sequenceDiagram
55
+ * autonumber
56
+ * participant Caller
57
+ * participant Helper as bootWithoutEnvironment
58
+ * participant Service as service
59
+ * Caller->>Helper: bootWithoutEnvironment(service, config, ...rest)
60
+ * activate Helper
61
+ * alt config missing or not an object
62
+ * Helper-->>Caller: ValidationError
63
+ * else explicit config present
64
+ * alt instance not yet shadowed
65
+ * Helper->>Service: capture own configFromEnvironment descriptor
66
+ * Helper->>Service: shadow own configFromEnvironment with () => undefined
67
+ * else re-entrant call on the same instance
68
+ * Helper->>Helper: increment shared scope depth
69
+ * end
70
+ * Helper->>Service: boot(config, ...rest)
71
+ * activate Service
72
+ * Service-->>Helper: boot completes
73
+ * deactivate Service
74
+ * alt outermost call (depth reaches 0)
75
+ * Helper->>Service: restore or remove own configFromEnvironment descriptor
76
+ * else nested call
77
+ * Note over Helper,Service: shared shadow stays in place
78
+ * end
79
+ * Helper-->>Caller: service
80
+ * end
81
+ * deactivate Helper
82
+ */
83
+ export declare function bootWithoutEnvironment<CONF extends object, S extends HermeticBootableService>(service: S, config: CONF, ...rest: unknown[]): Promise<S>;
84
+ export {};
@@ -0,0 +1,84 @@
1
+ /**
2
+ * @description Minimal boot contract required by the hermetic boot helper
3
+ * @summary Any client-based service exposing the core `boot(...)` shape; kept
4
+ * structural so the helper does not depend on the core service types.
5
+ */
6
+ interface HermeticBootableService {
7
+ boot(...args: unknown[]): Promise<unknown>;
8
+ }
9
+ /**
10
+ * @description Boots a service with Environment-derived configuration disabled
11
+ * @summary Node-side replacement for the removed `nonEnvironmentService`
12
+ * wrappers (SAA-1293): the service's own `configFromEnvironment()` property
13
+ * descriptor is shadowed with `() => undefined` for the duration of the
14
+ * `boot()` call and restored (or removed, when the service had no own
15
+ * descriptor) in `finally`, so configuration keys absent from
16
+ * the explicit config cannot inherit the service's Environment slice. The
17
+ * shadowing is per-instance (the prototype is never touched): a module-level
18
+ * `WeakMap` (`shadowScopes`) tracks each service's original
19
+ * `configFromEnvironment` descriptor together with a call depth, so
20
+ * overlapping or nested `bootWithoutEnvironment` calls on the same instance
21
+ * share a single shadow; a nested call only increments that depth and never
22
+ * restores the descriptor early, and the original descriptor is restored (or
23
+ * deleted) only when the outermost call completes. The helper fails closed:
24
+ * an explicit config object is mandatory, so a node boot can never silently
25
+ * fall back to Environment configuration. The SAA-1293 undecorated-service
26
+ * contract stands — no decoration, no wrapper classes, no `Injectables`
27
+ * registration.
28
+ * @template CONF The explicit configuration object type passed to `boot()`.
29
+ * @template S The undecorated service type being booted.
30
+ * @param {S} service - The undecorated service instance to boot.
31
+ * @param {CONF} config - Explicit configuration object for the boot; Environment-derived config is disabled for this call.
32
+ * @param {...unknown} rest - Remaining `boot()` arguments (e.g. a decaf `Context`), forwarded unchanged.
33
+ * @returns {Promise<S>} The same service instance, booted with only the explicit configuration.
34
+ * @throws {ValidationError} When `config` is missing or not an object.
35
+ * @example
36
+ * ```ts
37
+ * import { EmailService } from "@decaf-ts/integrations/comms/email";
38
+ * import { bootWithoutEnvironment } from "@decaf-ts/integrations/shared/http";
39
+ *
40
+ * const service = new EmailService();
41
+ * // The comms.email environment slice is ignored even when configured:
42
+ * // allowPlaintextAuth stays false unless the explicit config sets it.
43
+ * await bootWithoutEnvironment(service, {
44
+ * provider: "smtp",
45
+ * host: "smtp.example",
46
+ * port: 587,
47
+ * username: "user@example.com",
48
+ * password: "secret",
49
+ * });
50
+ * ```
51
+ * @category Shared
52
+ * @memberOf module:integrations/shared/http/hermetic-boot
53
+ * @mermaid
54
+ * sequenceDiagram
55
+ * autonumber
56
+ * participant Caller
57
+ * participant Helper as bootWithoutEnvironment
58
+ * participant Service as service
59
+ * Caller->>Helper: bootWithoutEnvironment(service, config, ...rest)
60
+ * activate Helper
61
+ * alt config missing or not an object
62
+ * Helper-->>Caller: ValidationError
63
+ * else explicit config present
64
+ * alt instance not yet shadowed
65
+ * Helper->>Service: capture own configFromEnvironment descriptor
66
+ * Helper->>Service: shadow own configFromEnvironment with () => undefined
67
+ * else re-entrant call on the same instance
68
+ * Helper->>Helper: increment shared scope depth
69
+ * end
70
+ * Helper->>Service: boot(config, ...rest)
71
+ * activate Service
72
+ * Service-->>Helper: boot completes
73
+ * deactivate Service
74
+ * alt outermost call (depth reaches 0)
75
+ * Helper->>Service: restore or remove own configFromEnvironment descriptor
76
+ * else nested call
77
+ * Note over Helper,Service: shared shadow stays in place
78
+ * end
79
+ * Helper-->>Caller: service
80
+ * end
81
+ * deactivate Helper
82
+ */
83
+ export declare function bootWithoutEnvironment<CONF extends object, S extends HermeticBootableService>(service: S, config: CONF, ...rest: unknown[]): Promise<S>;
84
+ export {};
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @module integrations/shared/http
3
+ * @summary Shared HTTP plumbing for client-based API services.
4
+ * @description Re-exports {@link HttpApiService} (Axios-backed base class with
5
+ * environment-driven config), {@link httpError} (the failure-to-decaf-error
6
+ * mapper used by every API service), and {@link bootWithoutEnvironment} (the
7
+ * Environment-hermetic boot path used by as-graph node consumers).
8
+ */
9
+ export * from "./HttpApiService.d.cts";
10
+ export * from "./hermeticBoot.d.cts";
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @module integrations/shared/http
3
+ * @summary Shared HTTP plumbing for client-based API services.
4
+ * @description Re-exports {@link HttpApiService} (Axios-backed base class with
5
+ * environment-driven config), {@link httpError} (the failure-to-decaf-error
6
+ * mapper used by every API service), and {@link bootWithoutEnvironment} (the
7
+ * Environment-hermetic boot path used by as-graph node consumers).
8
+ */
9
+ export * from "./HttpApiService.d.mts";
10
+ export * from "./hermeticBoot.d.mts";