@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,268 @@
1
+ import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.cts";
2
+ /**
3
+ * @description Configuration for the Airtable service
4
+ * @summary Extends {@link HttpApiServiceConfig} with the Airtable personal
5
+ * access token (sent as a bearer token) and the default `baseId` used when a
6
+ * call does not override it. When omitted, the `io.airtable` environment
7
+ * slice supplies the token (and optional `baseId`, `baseUrl`, `timeout`).
8
+ * @category IO
9
+ * @memberOf module:integrations/io/airtable/service
10
+ */
11
+ export interface AirtableServiceConfig extends HttpApiServiceConfig {
12
+ /**
13
+ * @description Airtable personal access token
14
+ * @summary Sent as `Authorization: Bearer <token>` with every API call.
15
+ */
16
+ token?: string;
17
+ /**
18
+ * @description Default base ID used when a call does not override it
19
+ */
20
+ baseId?: string;
21
+ }
22
+ /**
23
+ * @description Normalized Airtable record descriptor
24
+ * @summary The Airtable record envelope: the record `id`, the `fields` map
25
+ * (column name to value), and the optional `createdTime` timestamp.
26
+ * @category IO
27
+ * @memberOf module:integrations/io/airtable/service
28
+ */
29
+ export interface AirtableRecord {
30
+ id: string;
31
+ fields: Record<string, unknown>;
32
+ createdTime?: string;
33
+ }
34
+ /**
35
+ * @description Options for listing Airtable records
36
+ * @summary Carries the required `table` name plus the view, formula filter,
37
+ * record caps and paging offset, field projection, and first-sort configuration
38
+ * Airtable supports. Only the first sort entry is sent (Airtable's
39
+ * `sort[0][field]`/`sort[0][direction]` query parameters); paging works by
40
+ * passing the previous page's `offset` back as `offset`.
41
+ * @category IO
42
+ * @memberOf module:integrations/io/airtable/service
43
+ */
44
+ export interface AirtableListOptions {
45
+ /**
46
+ * @description Table name or ID to list records from (required)
47
+ */
48
+ table: string;
49
+ /**
50
+ * @description View name or ID to restrict the listing to
51
+ */
52
+ view?: string;
53
+ /**
54
+ * @description Airtable formula restricting the returned records (e.g. `"{Status} = 'Active'"`)
55
+ */
56
+ filterByFormula?: string;
57
+ /**
58
+ * @description Maximum number of records to return in total
59
+ */
60
+ maxRecords?: number;
61
+ /**
62
+ * @description Number of records per page
63
+ */
64
+ pageSize?: number;
65
+ /**
66
+ * @description The `offset` from the previous page's result
67
+ */
68
+ offset?: string;
69
+ /**
70
+ * @description Column names to project
71
+ */
72
+ fields?: string[];
73
+ /**
74
+ * @description First sort entry applied to the listing
75
+ */
76
+ sort?: Array<{
77
+ field: string;
78
+ direction?: "asc" | "desc";
79
+ }>;
80
+ }
81
+ /**
82
+ * @description Result of an Airtable record listing
83
+ * @summary Carries the page of `records` and the `offset` cursor to pass back
84
+ * as `AirtableListOptions.offset` when more pages exist.
85
+ * @category IO
86
+ * @memberOf module:integrations/io/airtable/service
87
+ */
88
+ export interface AirtableListResult {
89
+ records: AirtableRecord[];
90
+ offset?: string;
91
+ }
92
+ /**
93
+ * @description Input for creating or updating an Airtable record
94
+ * @summary Carries the required `table` name, the `fields` map to write, and
95
+ * the `typecast` flag letting Airtable convert values to the column types.
96
+ * `updateRecord` additionally carries the `recordId`.
97
+ * @category IO
98
+ * @memberOf module:integrations/io/airtable/service
99
+ */
100
+ export interface AirtableWriteInput {
101
+ table: string;
102
+ fields: Record<string, unknown>;
103
+ typecast?: boolean;
104
+ }
105
+ /**
106
+ * @description Airtable Web API integration service
107
+ * @summary An undecorated HTTP service for listing records
108
+ * with filtering, sorting, and cursor paging; fetching, creating, updating,
109
+ * and deleting individual records. Base targets resolve per call from the
110
+ * `baseId` argument, falling back to the configured value, and throw
111
+ * `InternalError` when unresolved. Every operation requires a token
112
+ * (`requireToken()`), and transport failures are mapped to decaf errors via
113
+ * {@link httpError}.
114
+ * @class AirtableService
115
+ * @category IO
116
+ * @example
117
+ * ```ts
118
+ * import { AirtableService } from "@decaf-ts/integrations/io/airtable";
119
+ *
120
+ * const airtable = new AirtableService();
121
+ * await airtable.initialize({
122
+ * token: process.env.GRAPH_CREDENTIAL_AIRTABLE_TOKEN,
123
+ * baseId: "appExampleBase",
124
+ * });
125
+ * const created = await airtable.createRecord({
126
+ * table: "Tasks",
127
+ * fields: { Name: "Ship release", Status: "Todo" },
128
+ * });
129
+ * ```
130
+ * @memberOf module:integrations/io/airtable/service
131
+ */
132
+ export declare class AirtableService extends HttpApiService<AirtableServiceConfig> {
133
+ /**
134
+ * @description The provider name used in error messages
135
+ */
136
+ protected readonly serviceName = "Airtable";
137
+ /**
138
+ * @description The Airtable Web API v0 base URL
139
+ * @summary Used when the resolved config carries no `baseUrl`.
140
+ * @returns {string} `"https://api.airtable.com/v0"`.
141
+ */
142
+ protected defaultBaseUrl(): string;
143
+ /**
144
+ * @description Builds the Airtable bearer authorization headers
145
+ * @summary Returns the `Authorization: Bearer <token>` header when the
146
+ * config carries a token, and no headers otherwise.
147
+ * @param {AirtableServiceConfig} config - The resolved service configuration.
148
+ * @returns {Record<string, string>} The authorization headers (empty without a token).
149
+ */
150
+ protected authHeaders(config: AirtableServiceConfig): Record<string, string>;
151
+ /**
152
+ * @description Reads the Airtable credentials and defaults from the environment
153
+ * @summary Reads the `io.airtable` environment slice and returns a partial
154
+ * config when a token is configured, `undefined` otherwise. Values pass
155
+ * through `envString`/`envNumber` to reject unset-leaf proxies.
156
+ * @returns {Partial<AirtableServiceConfig> | undefined} A partial config, or `undefined` when no Airtable token is configured.
157
+ */
158
+ protected configFromEnvironment(): Partial<AirtableServiceConfig> | undefined;
159
+ /**
160
+ * @description Resolves the URL-encoded base path for a call
161
+ * @summary Builds `/<baseId>` from the given base ID, falling back to the
162
+ * configured value, and throws when neither is available.
163
+ * @param {string} [baseId] - The per-call base override.
164
+ * @returns {string} The URL-encoded base API path.
165
+ * @throws {InternalError} When neither the input nor the config yields a base ID.
166
+ */
167
+ protected basePath(baseId?: string): string;
168
+ /**
169
+ * @description Resolves the URL-encoded table path for a call
170
+ * @summary Builds `<basePath>/<table>` with both segments URL-encoded, and
171
+ * throws when the table name is empty (or the base cannot be resolved).
172
+ * @param {string} table - The table name or ID.
173
+ * @param {string} [baseId] - The per-call base override.
174
+ * @returns {string} The URL-encoded table API path.
175
+ * @throws {InternalError} When the table name is empty or the base ID cannot be resolved.
176
+ */
177
+ protected tablePath(table: string, baseId?: string): string;
178
+ /**
179
+ * @description Lists records in an Airtable table with cursor paging
180
+ * @summary `GET`s the table endpoint with the configured view, formula
181
+ * filter, record caps, page size, page offset, field projection, and first
182
+ * sort entry. Return the `offset` cursor as the next call's
183
+ * `AirtableListOptions.offset` to fetch further pages.
184
+ * @param {AirtableListOptions} options - The table and filter/sort/paging options.
185
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
186
+ * @returns {Promise<AirtableListResult>} The page of records and the next offset cursor when more pages exist.
187
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
188
+ * @throws {NotFoundError} When the base or table does not exist (HTTP 404).
189
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
190
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid formula).
191
+ * @example
192
+ * ```ts
193
+ * let offset: string | undefined;
194
+ * do {
195
+ * const page = await airtable.listRecords({
196
+ * table: "Tasks",
197
+ * filterByFormula: "{Status} = 'Active'",
198
+ * pageSize: 100,
199
+ * offset,
200
+ * sort: [{ field: "Name", direction: "asc" }],
201
+ * });
202
+ * console.log(page.records);
203
+ * offset = page.offset;
204
+ * } while (offset);
205
+ * ```
206
+ */
207
+ listRecords(options: AirtableListOptions, baseId?: string): Promise<AirtableListResult>;
208
+ /**
209
+ * @description Fetches a single Airtable record
210
+ * @summary `GET`s the table endpoint with the record ID appended and
211
+ * returns the record envelope.
212
+ * @param {string} table - The table name or ID.
213
+ * @param {string} recordId - The record ID to fetch (e.g. `"rec1234567890"`).
214
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
215
+ * @returns {Promise<AirtableRecord>} The record envelope.
216
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
217
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
218
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
219
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status.
220
+ */
221
+ getRecord(table: string, recordId: string, baseId?: string): Promise<AirtableRecord>;
222
+ /**
223
+ * @description Creates an Airtable record
224
+ * @summary `POST`s the fields map to the table endpoint; `typecast` lets
225
+ * Airtable coerce values into the column types (disabled by default).
226
+ * @param {AirtableWriteInput} input - The table, fields, and typecast option.
227
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
228
+ * @returns {Promise<AirtableRecord>} The created record envelope.
229
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
230
+ * @throws {NotFoundError} When the base or table does not exist (HTTP 404).
231
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
232
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid field values).
233
+ */
234
+ createRecord(input: AirtableWriteInput, baseId?: string): Promise<AirtableRecord>;
235
+ /**
236
+ * @description Updates an Airtable record
237
+ * @summary `PATCH`es the fields map onto the record identified by
238
+ * `recordId`; only the provided fields change. `typecast` lets Airtable
239
+ * coerce values into the column types (disabled by default).
240
+ * @param {AirtableWriteInput & {recordId: string}} input - The table, fields, typecast option, and target record ID.
241
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
242
+ * @returns {Promise<AirtableRecord>} The updated record envelope.
243
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
244
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
245
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
246
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid field values).
247
+ */
248
+ updateRecord(input: AirtableWriteInput & {
249
+ recordId: string;
250
+ }, baseId?: string): Promise<AirtableRecord>;
251
+ /**
252
+ * @description Deletes an Airtable record
253
+ * @summary `DELETE`s the record identified by `recordId` and returns the
254
+ * Airtable deletion confirmation.
255
+ * @param {string} table - The table name or ID.
256
+ * @param {string} recordId - The record ID to delete.
257
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
258
+ * @returns {Promise<{id: string, deleted: boolean}>} The deleted record's ID and Airtable's `deleted` confirmation.
259
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
260
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
261
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
262
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status.
263
+ */
264
+ deleteRecord(table: string, recordId: string, baseId?: string): Promise<{
265
+ id: string;
266
+ deleted: boolean;
267
+ }>;
268
+ }
@@ -0,0 +1,268 @@
1
+ import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.mts";
2
+ /**
3
+ * @description Configuration for the Airtable service
4
+ * @summary Extends {@link HttpApiServiceConfig} with the Airtable personal
5
+ * access token (sent as a bearer token) and the default `baseId` used when a
6
+ * call does not override it. When omitted, the `io.airtable` environment
7
+ * slice supplies the token (and optional `baseId`, `baseUrl`, `timeout`).
8
+ * @category IO
9
+ * @memberOf module:integrations/io/airtable/service
10
+ */
11
+ export interface AirtableServiceConfig extends HttpApiServiceConfig {
12
+ /**
13
+ * @description Airtable personal access token
14
+ * @summary Sent as `Authorization: Bearer <token>` with every API call.
15
+ */
16
+ token?: string;
17
+ /**
18
+ * @description Default base ID used when a call does not override it
19
+ */
20
+ baseId?: string;
21
+ }
22
+ /**
23
+ * @description Normalized Airtable record descriptor
24
+ * @summary The Airtable record envelope: the record `id`, the `fields` map
25
+ * (column name to value), and the optional `createdTime` timestamp.
26
+ * @category IO
27
+ * @memberOf module:integrations/io/airtable/service
28
+ */
29
+ export interface AirtableRecord {
30
+ id: string;
31
+ fields: Record<string, unknown>;
32
+ createdTime?: string;
33
+ }
34
+ /**
35
+ * @description Options for listing Airtable records
36
+ * @summary Carries the required `table` name plus the view, formula filter,
37
+ * record caps and paging offset, field projection, and first-sort configuration
38
+ * Airtable supports. Only the first sort entry is sent (Airtable's
39
+ * `sort[0][field]`/`sort[0][direction]` query parameters); paging works by
40
+ * passing the previous page's `offset` back as `offset`.
41
+ * @category IO
42
+ * @memberOf module:integrations/io/airtable/service
43
+ */
44
+ export interface AirtableListOptions {
45
+ /**
46
+ * @description Table name or ID to list records from (required)
47
+ */
48
+ table: string;
49
+ /**
50
+ * @description View name or ID to restrict the listing to
51
+ */
52
+ view?: string;
53
+ /**
54
+ * @description Airtable formula restricting the returned records (e.g. `"{Status} = 'Active'"`)
55
+ */
56
+ filterByFormula?: string;
57
+ /**
58
+ * @description Maximum number of records to return in total
59
+ */
60
+ maxRecords?: number;
61
+ /**
62
+ * @description Number of records per page
63
+ */
64
+ pageSize?: number;
65
+ /**
66
+ * @description The `offset` from the previous page's result
67
+ */
68
+ offset?: string;
69
+ /**
70
+ * @description Column names to project
71
+ */
72
+ fields?: string[];
73
+ /**
74
+ * @description First sort entry applied to the listing
75
+ */
76
+ sort?: Array<{
77
+ field: string;
78
+ direction?: "asc" | "desc";
79
+ }>;
80
+ }
81
+ /**
82
+ * @description Result of an Airtable record listing
83
+ * @summary Carries the page of `records` and the `offset` cursor to pass back
84
+ * as `AirtableListOptions.offset` when more pages exist.
85
+ * @category IO
86
+ * @memberOf module:integrations/io/airtable/service
87
+ */
88
+ export interface AirtableListResult {
89
+ records: AirtableRecord[];
90
+ offset?: string;
91
+ }
92
+ /**
93
+ * @description Input for creating or updating an Airtable record
94
+ * @summary Carries the required `table` name, the `fields` map to write, and
95
+ * the `typecast` flag letting Airtable convert values to the column types.
96
+ * `updateRecord` additionally carries the `recordId`.
97
+ * @category IO
98
+ * @memberOf module:integrations/io/airtable/service
99
+ */
100
+ export interface AirtableWriteInput {
101
+ table: string;
102
+ fields: Record<string, unknown>;
103
+ typecast?: boolean;
104
+ }
105
+ /**
106
+ * @description Airtable Web API integration service
107
+ * @summary An undecorated HTTP service for listing records
108
+ * with filtering, sorting, and cursor paging; fetching, creating, updating,
109
+ * and deleting individual records. Base targets resolve per call from the
110
+ * `baseId` argument, falling back to the configured value, and throw
111
+ * `InternalError` when unresolved. Every operation requires a token
112
+ * (`requireToken()`), and transport failures are mapped to decaf errors via
113
+ * {@link httpError}.
114
+ * @class AirtableService
115
+ * @category IO
116
+ * @example
117
+ * ```ts
118
+ * import { AirtableService } from "@decaf-ts/integrations/io/airtable";
119
+ *
120
+ * const airtable = new AirtableService();
121
+ * await airtable.initialize({
122
+ * token: process.env.GRAPH_CREDENTIAL_AIRTABLE_TOKEN,
123
+ * baseId: "appExampleBase",
124
+ * });
125
+ * const created = await airtable.createRecord({
126
+ * table: "Tasks",
127
+ * fields: { Name: "Ship release", Status: "Todo" },
128
+ * });
129
+ * ```
130
+ * @memberOf module:integrations/io/airtable/service
131
+ */
132
+ export declare class AirtableService extends HttpApiService<AirtableServiceConfig> {
133
+ /**
134
+ * @description The provider name used in error messages
135
+ */
136
+ protected readonly serviceName = "Airtable";
137
+ /**
138
+ * @description The Airtable Web API v0 base URL
139
+ * @summary Used when the resolved config carries no `baseUrl`.
140
+ * @returns {string} `"https://api.airtable.com/v0"`.
141
+ */
142
+ protected defaultBaseUrl(): string;
143
+ /**
144
+ * @description Builds the Airtable bearer authorization headers
145
+ * @summary Returns the `Authorization: Bearer <token>` header when the
146
+ * config carries a token, and no headers otherwise.
147
+ * @param {AirtableServiceConfig} config - The resolved service configuration.
148
+ * @returns {Record<string, string>} The authorization headers (empty without a token).
149
+ */
150
+ protected authHeaders(config: AirtableServiceConfig): Record<string, string>;
151
+ /**
152
+ * @description Reads the Airtable credentials and defaults from the environment
153
+ * @summary Reads the `io.airtable` environment slice and returns a partial
154
+ * config when a token is configured, `undefined` otherwise. Values pass
155
+ * through `envString`/`envNumber` to reject unset-leaf proxies.
156
+ * @returns {Partial<AirtableServiceConfig> | undefined} A partial config, or `undefined` when no Airtable token is configured.
157
+ */
158
+ protected configFromEnvironment(): Partial<AirtableServiceConfig> | undefined;
159
+ /**
160
+ * @description Resolves the URL-encoded base path for a call
161
+ * @summary Builds `/<baseId>` from the given base ID, falling back to the
162
+ * configured value, and throws when neither is available.
163
+ * @param {string} [baseId] - The per-call base override.
164
+ * @returns {string} The URL-encoded base API path.
165
+ * @throws {InternalError} When neither the input nor the config yields a base ID.
166
+ */
167
+ protected basePath(baseId?: string): string;
168
+ /**
169
+ * @description Resolves the URL-encoded table path for a call
170
+ * @summary Builds `<basePath>/<table>` with both segments URL-encoded, and
171
+ * throws when the table name is empty (or the base cannot be resolved).
172
+ * @param {string} table - The table name or ID.
173
+ * @param {string} [baseId] - The per-call base override.
174
+ * @returns {string} The URL-encoded table API path.
175
+ * @throws {InternalError} When the table name is empty or the base ID cannot be resolved.
176
+ */
177
+ protected tablePath(table: string, baseId?: string): string;
178
+ /**
179
+ * @description Lists records in an Airtable table with cursor paging
180
+ * @summary `GET`s the table endpoint with the configured view, formula
181
+ * filter, record caps, page size, page offset, field projection, and first
182
+ * sort entry. Return the `offset` cursor as the next call's
183
+ * `AirtableListOptions.offset` to fetch further pages.
184
+ * @param {AirtableListOptions} options - The table and filter/sort/paging options.
185
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
186
+ * @returns {Promise<AirtableListResult>} The page of records and the next offset cursor when more pages exist.
187
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
188
+ * @throws {NotFoundError} When the base or table does not exist (HTTP 404).
189
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
190
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid formula).
191
+ * @example
192
+ * ```ts
193
+ * let offset: string | undefined;
194
+ * do {
195
+ * const page = await airtable.listRecords({
196
+ * table: "Tasks",
197
+ * filterByFormula: "{Status} = 'Active'",
198
+ * pageSize: 100,
199
+ * offset,
200
+ * sort: [{ field: "Name", direction: "asc" }],
201
+ * });
202
+ * console.log(page.records);
203
+ * offset = page.offset;
204
+ * } while (offset);
205
+ * ```
206
+ */
207
+ listRecords(options: AirtableListOptions, baseId?: string): Promise<AirtableListResult>;
208
+ /**
209
+ * @description Fetches a single Airtable record
210
+ * @summary `GET`s the table endpoint with the record ID appended and
211
+ * returns the record envelope.
212
+ * @param {string} table - The table name or ID.
213
+ * @param {string} recordId - The record ID to fetch (e.g. `"rec1234567890"`).
214
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
215
+ * @returns {Promise<AirtableRecord>} The record envelope.
216
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
217
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
218
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
219
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status.
220
+ */
221
+ getRecord(table: string, recordId: string, baseId?: string): Promise<AirtableRecord>;
222
+ /**
223
+ * @description Creates an Airtable record
224
+ * @summary `POST`s the fields map to the table endpoint; `typecast` lets
225
+ * Airtable coerce values into the column types (disabled by default).
226
+ * @param {AirtableWriteInput} input - The table, fields, and typecast option.
227
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
228
+ * @returns {Promise<AirtableRecord>} The created record envelope.
229
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
230
+ * @throws {NotFoundError} When the base or table does not exist (HTTP 404).
231
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
232
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid field values).
233
+ */
234
+ createRecord(input: AirtableWriteInput, baseId?: string): Promise<AirtableRecord>;
235
+ /**
236
+ * @description Updates an Airtable record
237
+ * @summary `PATCH`es the fields map onto the record identified by
238
+ * `recordId`; only the provided fields change. `typecast` lets Airtable
239
+ * coerce values into the column types (disabled by default).
240
+ * @param {AirtableWriteInput & {recordId: string}} input - The table, fields, typecast option, and target record ID.
241
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
242
+ * @returns {Promise<AirtableRecord>} The updated record envelope.
243
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
244
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
245
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
246
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid field values).
247
+ */
248
+ updateRecord(input: AirtableWriteInput & {
249
+ recordId: string;
250
+ }, baseId?: string): Promise<AirtableRecord>;
251
+ /**
252
+ * @description Deletes an Airtable record
253
+ * @summary `DELETE`s the record identified by `recordId` and returns the
254
+ * Airtable deletion confirmation.
255
+ * @param {string} table - The table name or ID.
256
+ * @param {string} recordId - The record ID to delete.
257
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
258
+ * @returns {Promise<{id: string, deleted: boolean}>} The deleted record's ID and Airtable's `deleted` confirmation.
259
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
260
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
261
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
262
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status.
263
+ */
264
+ deleteRecord(table: string, recordId: string, baseId?: string): Promise<{
265
+ id: string;
266
+ deleted: boolean;
267
+ }>;
268
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @module integrations/io/airtable
3
+ * @summary Airtable Web API service (record CRUD).
4
+ * @description Re-exports the Airtable client-based service and its types.
5
+ */
6
+ export * from "./AirtableService.d.cts";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @module integrations/io/airtable
3
+ * @summary Airtable Web API service (record CRUD).
4
+ * @description Re-exports the Airtable client-based service and its types.
5
+ */
6
+ export * from "./AirtableService.d.mts";
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @module integrations/io/environment
3
+ * @summary Environment contract and accumulated environment for the io integration services.
4
+ * @description Declares the `IoEnvironmentShape` consumed by the Airtable,
5
+ * Google Sheets, and GraphQL services' `configFromEnvironment()`
6
+ * implementations and the `IoEnvironment` singleton created via
7
+ * `LoggedEnvironment.accumulate`. Services read their credentials and
8
+ * defaults from the matching `io.<provider>` slice, using the
9
+ * `envString`/`envNumber` helpers from `shared/environmentValue` to reject
10
+ * unset-leaf proxies.
11
+ */
12
+ /**
13
+ * @description Environment shape for the io integration services
14
+ * @summary Defines the `io` root with one slice per provider (`airtable`,
15
+ * `googleSheets`, `graphql`). Each slice carries the provider's required
16
+ * credentials (`token`, plus `baseId`/`apiKey`/`endpoint` where applicable)
17
+ * plus an optional `baseUrl` override and `timeout`. Fields are typed as
18
+ * required here so `LoggedEnvironment.accumulate` registers them; absent
19
+ * values resolve to proxy placeholders at runtime and must pass through
20
+ * `envString`/`envNumber`.
21
+ * @memberOf module:integrations/io/environment
22
+ */
23
+ export interface IoEnvironmentShape {
24
+ io: {
25
+ airtable: {
26
+ token: string;
27
+ baseUrl: string;
28
+ baseId: string;
29
+ timeout?: number;
30
+ };
31
+ googleSheets: {
32
+ token: string;
33
+ apiKey: string;
34
+ baseUrl: string;
35
+ timeout?: number;
36
+ };
37
+ graphql: {
38
+ endpoint: string;
39
+ token: string;
40
+ timeout?: number;
41
+ };
42
+ };
43
+ }
44
+ /**
45
+ * @description Accumulated io environment singleton
46
+ * @summary The `LoggedEnvironment.accumulate`-registered instance backing the
47
+ * `IoEnvironmentShape` contract. IO services read their provider slice
48
+ * (e.g. `IoEnvironment.io.airtable`) inside `configFromEnvironment()` and
49
+ * translate it into an `HttpApiServiceConfig`-derived config. Credentials
50
+ * come from environment variables; for as-graph node usage those are provided
51
+ * as `GRAPH_CREDENTIAL_*` values (placeholders in this example).
52
+ * @example
53
+ * ```ts
54
+ * import { AirtableService } from "@decaf-ts/integrations/io/airtable";
55
+ *
56
+ * // with io.airtable.token / io.airtable.baseId configured in the environment
57
+ * const airtable = new AirtableService();
58
+ * await airtable.initialize();
59
+ * ```
60
+ * @constant {LoggedEnvironment} IoEnvironment
61
+ * @memberOf module:integrations/io/environment
62
+ */
63
+ export declare const IoEnvironment: import("@decaf-ts/logging").AccumulatedEnvironment<{
64
+ app: string | undefined;
65
+ } & import("@decaf-ts/logging").LoggingConfig<object> & {
66
+ env: any;
67
+ } & IoEnvironmentShape>;