@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,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>;
@@ -0,0 +1,204 @@
1
+ import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.cts";
2
+ /**
3
+ * @description Configuration for the Google Sheets service
4
+ * @summary Extends {@link HttpApiServiceConfig} with either an OAuth token
5
+ * (preferred, sent as a bearer token) or an API key (sent as
6
+ * `X-Goog-Api-Key`; read-only against public spreadsheets). When omitted, the
7
+ * `io.googleSheets` environment slice supplies both (and optional
8
+ * `baseUrl`/`timeout`).
9
+ * @category IO
10
+ * @memberOf module:integrations/io/google-sheets/service
11
+ */
12
+ export interface GoogleSheetsServiceConfig extends HttpApiServiceConfig {
13
+ /**
14
+ * @description Google OAuth access token
15
+ * @summary Sent as `Authorization: Bearer <token>`; takes precedence over the API key.
16
+ */
17
+ token?: string;
18
+ /**
19
+ * @description Google API key
20
+ * @summary Sent as `X-Goog-Api-Key` when no OAuth token is configured.
21
+ */
22
+ apiKey?: string;
23
+ }
24
+ /**
25
+ * @description Result of a Google Sheets values read or write
26
+ * @summary Echoes the target `spreadsheetId` and the A1 `range` Google
27
+ * actually served, the `majorDimension` of the payload, and the grid
28
+ * `values` as an array of rows (arrays of cell strings).
29
+ * @category IO
30
+ * @memberOf module:integrations/io/google-sheets/service
31
+ */
32
+ export interface GoogleSheetsValuesResult {
33
+ spreadsheetId: string;
34
+ range: string;
35
+ majorDimension?: string;
36
+ values: string[][];
37
+ }
38
+ /**
39
+ * @description Input for writing values into a Google Sheets range
40
+ * @summary Carries the target `spreadsheetId` and A1 `range`, the row
41
+ * `values` to write, and the `valueInputOption` controlling how Google
42
+ * interprets the cells (`"RAW"` stores text as-is, `"USER_ENTERED"` applies
43
+ * spreadsheet parsing and formulas; defaults to `"USER_ENTERED"`).
44
+ * @category IO
45
+ * @memberOf module:integrations/io/google-sheets/service
46
+ */
47
+ export interface GoogleSheetsWriteInput {
48
+ spreadsheetId: string;
49
+ range: string;
50
+ values: unknown[][];
51
+ valueInputOption?: "RAW" | "USER_ENTERED";
52
+ }
53
+ /**
54
+ * @description Google Sheets API integration service
55
+ * @summary An undecorated HTTP service for reading,
56
+ * updating, appending, and clearing values in A1 ranges of a spreadsheet, and
57
+ * for creating new spreadsheets. Every operation requires either an OAuth
58
+ * token or an API key (`requireAuth()`); ranges and spreadsheet IDs are
59
+ * URL-encoded, and transport failures are mapped to decaf errors via
60
+ * {@link httpError}.
61
+ * @class GoogleSheetsService
62
+ * @category IO
63
+ * @example
64
+ * ```ts
65
+ * import { GoogleSheetsService } from "@decaf-ts/integrations/io/google-sheets";
66
+ *
67
+ * const sheets = new GoogleSheetsService();
68
+ * await sheets.initialize({
69
+ * token: process.env.GRAPH_CREDENTIAL_GOOGLE_SHEETS_TOKEN,
70
+ * });
71
+ * const created = await sheets.createSpreadsheet("Metrics");
72
+ * await sheets.updateValues({
73
+ * spreadsheetId: created.spreadsheetId,
74
+ * range: "Sheet1!A1:B2",
75
+ * values: [
76
+ * ["date", "count"],
77
+ * ["2026-01-01", "42"],
78
+ * ],
79
+ * });
80
+ * ```
81
+ * @memberOf module:integrations/io/google-sheets/service
82
+ */
83
+ export declare class GoogleSheetsService extends HttpApiService<GoogleSheetsServiceConfig> {
84
+ /**
85
+ * @description The provider name used in error messages
86
+ */
87
+ protected readonly serviceName = "Google Sheets";
88
+ /**
89
+ * @description The Google Sheets v4 values API base URL
90
+ * @summary Used when the resolved config carries no `baseUrl`.
91
+ * @returns {string} `"https://sheets.googleapis.com/v4/spreadsheets"`.
92
+ */
93
+ protected defaultBaseUrl(): string;
94
+ /**
95
+ * @description Builds the Google Sheets authorization headers
96
+ * @summary Returns the `Authorization: Bearer <token>` header when the
97
+ * config carries an OAuth token, otherwise the `X-Goog-Api-Key` header when
98
+ * an API key is configured, and no headers otherwise.
99
+ * @param {GoogleSheetsServiceConfig} config - The resolved service configuration.
100
+ * @returns {Record<string, string>} The authorization headers (empty without a token or API key).
101
+ */
102
+ protected authHeaders(config: GoogleSheetsServiceConfig): Record<string, string>;
103
+ /**
104
+ * @description Reads the Google Sheets credentials and defaults from the environment
105
+ * @summary Reads the `io.googleSheets` environment slice and returns a
106
+ * partial config when a token or API key is configured, `undefined`
107
+ * otherwise. Values pass through `envString`/`envNumber` to reject
108
+ * unset-leaf proxies.
109
+ * @returns {Partial<GoogleSheetsServiceConfig> | undefined} A partial config, or `undefined` when neither token nor API key is configured.
110
+ */
111
+ protected configFromEnvironment(): Partial<GoogleSheetsServiceConfig> | undefined;
112
+ /**
113
+ * @description Asserts that the service was configured with OAuth credentials
114
+ * @summary Throws when the resolved config carries neither a `token` nor an
115
+ * `apiKey`; every operation calls this before issuing requests.
116
+ * @returns {void}
117
+ * @throws {InternalError} When neither an OAuth token nor an API key is configured.
118
+ */
119
+ protected requireAuth(): void;
120
+ /**
121
+ * @description URL-encodes an A1 range for the values API path
122
+ * @summary Ranges such as `Sheet1!A1:B2` contain characters that must be
123
+ * percent-encoded; all operations route the range through this helper.
124
+ * @param {string} range - The A1 notation range to encode.
125
+ * @returns {string} The URL-encoded range.
126
+ */
127
+ protected rangePath(range: string): string;
128
+ /**
129
+ * @description Reads values from an A1 range of a spreadsheet
130
+ * @summary `GET`s the values endpoint for the given `spreadsheetId` and
131
+ * `range` and returns the served range, major dimension, and the grid
132
+ * values (rows of cell strings). Requires credentials and both arguments.
133
+ * @param {string} spreadsheetId - The spreadsheet to read from.
134
+ * @param {string} range - The A1 notation range to read (e.g. `"Sheet1!A1:C10"`).
135
+ * @returns {Promise<GoogleSheetsValuesResult>} The served range and grid values.
136
+ * @throws {InternalError} When credentials are missing or the spreadsheet ID/range is empty.
137
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
138
+ * @throws {ConflictError} When Google answers with HTTP 409.
139
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
140
+ */
141
+ getValues(spreadsheetId: string, range: string): Promise<GoogleSheetsValuesResult>;
142
+ /**
143
+ * @description Overwrites values in an A1 range of a spreadsheet
144
+ * @summary `PUT`s the row values to the values endpoint for the given
145
+ * `spreadsheetId` and `range`. Cells are interpreted according to
146
+ * `valueInputOption` (`"USER_ENTERED"` by default, `"RAW"` to store text
147
+ * verbatim), and the existing range content is replaced.
148
+ * @param {GoogleSheetsWriteInput} input - The target spreadsheet, range, values, and input interpretation.
149
+ * @returns {Promise<GoogleSheetsValuesResult>} The served range and the written values.
150
+ * @throws {InternalError} When credentials are missing.
151
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
152
+ * @throws {ConflictError} When Google answers with HTTP 409.
153
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
154
+ */
155
+ updateValues(input: GoogleSheetsWriteInput): Promise<GoogleSheetsValuesResult>;
156
+ /**
157
+ * @description Appends values after the last row of an A1 range's table
158
+ * @summary `POST`s the row values to the `:append` endpoint for the given
159
+ * `spreadsheetId` and `range`, inserting new rows after existing table data
160
+ * (`insertDataOption: "INSERT_ROWS"`). Cells are interpreted according to
161
+ * `valueInputOption` (`"USER_ENTERED"` by default). Use a single-row or
162
+ * single-column A1 range to anchor the table; Google reports the range the
163
+ * data actually landed in.
164
+ * @param {GoogleSheetsWriteInput} input - The target spreadsheet, anchor range, values, and input interpretation.
165
+ * @returns {Promise<GoogleSheetsValuesResult>} The range the appended rows landed in and the appended values.
166
+ * @throws {InternalError} When credentials are missing.
167
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
168
+ * @throws {ConflictError} When Google answers with HTTP 409.
169
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
170
+ */
171
+ appendValues(input: GoogleSheetsWriteInput): Promise<GoogleSheetsValuesResult>;
172
+ /**
173
+ * @description Clears all values in an A1 range of a spreadsheet
174
+ * @summary `POST`s the `:clear` endpoint for the given `spreadsheetId` and
175
+ * `range`, emptying the cells while preserving formatting, and returns the
176
+ * range Google actually cleared.
177
+ * @param {string} spreadsheetId - The spreadsheet to clear values in.
178
+ * @param {string} range - The A1 notation range to clear.
179
+ * @returns {Promise<{spreadsheetId: string, clearedRange: string}>} The cleared range as reported by Google.
180
+ * @throws {InternalError} When credentials are missing.
181
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
182
+ * @throws {ConflictError} When Google answers with HTTP 409.
183
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
184
+ */
185
+ clearValues(spreadsheetId: string, range: string): Promise<{
186
+ spreadsheetId: string;
187
+ clearedRange: string;
188
+ }>;
189
+ /**
190
+ * @description Creates a new spreadsheet with the given title
191
+ * @summary `POST`s a spreadsheet resource with `properties.title` to the
192
+ * spreadsheets endpoint and returns the new spreadsheet's ID and URL.
193
+ * @param {string} title - The title for the new spreadsheet.
194
+ * @returns {Promise<{spreadsheetId: string, spreadsheetUrl?: string}>} The created spreadsheet's ID and URL.
195
+ * @throws {InternalError} When credentials are missing or the title is empty.
196
+ * @throws {NotFoundError} When Google answers with HTTP 404.
197
+ * @throws {ConflictError} When Google answers with HTTP 409.
198
+ * @throws {BadRequestError} When Google answers with any other HTTP error status.
199
+ */
200
+ createSpreadsheet(title: string): Promise<{
201
+ spreadsheetId: string;
202
+ spreadsheetUrl?: string;
203
+ }>;
204
+ }
@@ -0,0 +1,204 @@
1
+ import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.mts";
2
+ /**
3
+ * @description Configuration for the Google Sheets service
4
+ * @summary Extends {@link HttpApiServiceConfig} with either an OAuth token
5
+ * (preferred, sent as a bearer token) or an API key (sent as
6
+ * `X-Goog-Api-Key`; read-only against public spreadsheets). When omitted, the
7
+ * `io.googleSheets` environment slice supplies both (and optional
8
+ * `baseUrl`/`timeout`).
9
+ * @category IO
10
+ * @memberOf module:integrations/io/google-sheets/service
11
+ */
12
+ export interface GoogleSheetsServiceConfig extends HttpApiServiceConfig {
13
+ /**
14
+ * @description Google OAuth access token
15
+ * @summary Sent as `Authorization: Bearer <token>`; takes precedence over the API key.
16
+ */
17
+ token?: string;
18
+ /**
19
+ * @description Google API key
20
+ * @summary Sent as `X-Goog-Api-Key` when no OAuth token is configured.
21
+ */
22
+ apiKey?: string;
23
+ }
24
+ /**
25
+ * @description Result of a Google Sheets values read or write
26
+ * @summary Echoes the target `spreadsheetId` and the A1 `range` Google
27
+ * actually served, the `majorDimension` of the payload, and the grid
28
+ * `values` as an array of rows (arrays of cell strings).
29
+ * @category IO
30
+ * @memberOf module:integrations/io/google-sheets/service
31
+ */
32
+ export interface GoogleSheetsValuesResult {
33
+ spreadsheetId: string;
34
+ range: string;
35
+ majorDimension?: string;
36
+ values: string[][];
37
+ }
38
+ /**
39
+ * @description Input for writing values into a Google Sheets range
40
+ * @summary Carries the target `spreadsheetId` and A1 `range`, the row
41
+ * `values` to write, and the `valueInputOption` controlling how Google
42
+ * interprets the cells (`"RAW"` stores text as-is, `"USER_ENTERED"` applies
43
+ * spreadsheet parsing and formulas; defaults to `"USER_ENTERED"`).
44
+ * @category IO
45
+ * @memberOf module:integrations/io/google-sheets/service
46
+ */
47
+ export interface GoogleSheetsWriteInput {
48
+ spreadsheetId: string;
49
+ range: string;
50
+ values: unknown[][];
51
+ valueInputOption?: "RAW" | "USER_ENTERED";
52
+ }
53
+ /**
54
+ * @description Google Sheets API integration service
55
+ * @summary An undecorated HTTP service for reading,
56
+ * updating, appending, and clearing values in A1 ranges of a spreadsheet, and
57
+ * for creating new spreadsheets. Every operation requires either an OAuth
58
+ * token or an API key (`requireAuth()`); ranges and spreadsheet IDs are
59
+ * URL-encoded, and transport failures are mapped to decaf errors via
60
+ * {@link httpError}.
61
+ * @class GoogleSheetsService
62
+ * @category IO
63
+ * @example
64
+ * ```ts
65
+ * import { GoogleSheetsService } from "@decaf-ts/integrations/io/google-sheets";
66
+ *
67
+ * const sheets = new GoogleSheetsService();
68
+ * await sheets.initialize({
69
+ * token: process.env.GRAPH_CREDENTIAL_GOOGLE_SHEETS_TOKEN,
70
+ * });
71
+ * const created = await sheets.createSpreadsheet("Metrics");
72
+ * await sheets.updateValues({
73
+ * spreadsheetId: created.spreadsheetId,
74
+ * range: "Sheet1!A1:B2",
75
+ * values: [
76
+ * ["date", "count"],
77
+ * ["2026-01-01", "42"],
78
+ * ],
79
+ * });
80
+ * ```
81
+ * @memberOf module:integrations/io/google-sheets/service
82
+ */
83
+ export declare class GoogleSheetsService extends HttpApiService<GoogleSheetsServiceConfig> {
84
+ /**
85
+ * @description The provider name used in error messages
86
+ */
87
+ protected readonly serviceName = "Google Sheets";
88
+ /**
89
+ * @description The Google Sheets v4 values API base URL
90
+ * @summary Used when the resolved config carries no `baseUrl`.
91
+ * @returns {string} `"https://sheets.googleapis.com/v4/spreadsheets"`.
92
+ */
93
+ protected defaultBaseUrl(): string;
94
+ /**
95
+ * @description Builds the Google Sheets authorization headers
96
+ * @summary Returns the `Authorization: Bearer <token>` header when the
97
+ * config carries an OAuth token, otherwise the `X-Goog-Api-Key` header when
98
+ * an API key is configured, and no headers otherwise.
99
+ * @param {GoogleSheetsServiceConfig} config - The resolved service configuration.
100
+ * @returns {Record<string, string>} The authorization headers (empty without a token or API key).
101
+ */
102
+ protected authHeaders(config: GoogleSheetsServiceConfig): Record<string, string>;
103
+ /**
104
+ * @description Reads the Google Sheets credentials and defaults from the environment
105
+ * @summary Reads the `io.googleSheets` environment slice and returns a
106
+ * partial config when a token or API key is configured, `undefined`
107
+ * otherwise. Values pass through `envString`/`envNumber` to reject
108
+ * unset-leaf proxies.
109
+ * @returns {Partial<GoogleSheetsServiceConfig> | undefined} A partial config, or `undefined` when neither token nor API key is configured.
110
+ */
111
+ protected configFromEnvironment(): Partial<GoogleSheetsServiceConfig> | undefined;
112
+ /**
113
+ * @description Asserts that the service was configured with OAuth credentials
114
+ * @summary Throws when the resolved config carries neither a `token` nor an
115
+ * `apiKey`; every operation calls this before issuing requests.
116
+ * @returns {void}
117
+ * @throws {InternalError} When neither an OAuth token nor an API key is configured.
118
+ */
119
+ protected requireAuth(): void;
120
+ /**
121
+ * @description URL-encodes an A1 range for the values API path
122
+ * @summary Ranges such as `Sheet1!A1:B2` contain characters that must be
123
+ * percent-encoded; all operations route the range through this helper.
124
+ * @param {string} range - The A1 notation range to encode.
125
+ * @returns {string} The URL-encoded range.
126
+ */
127
+ protected rangePath(range: string): string;
128
+ /**
129
+ * @description Reads values from an A1 range of a spreadsheet
130
+ * @summary `GET`s the values endpoint for the given `spreadsheetId` and
131
+ * `range` and returns the served range, major dimension, and the grid
132
+ * values (rows of cell strings). Requires credentials and both arguments.
133
+ * @param {string} spreadsheetId - The spreadsheet to read from.
134
+ * @param {string} range - The A1 notation range to read (e.g. `"Sheet1!A1:C10"`).
135
+ * @returns {Promise<GoogleSheetsValuesResult>} The served range and grid values.
136
+ * @throws {InternalError} When credentials are missing or the spreadsheet ID/range is empty.
137
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
138
+ * @throws {ConflictError} When Google answers with HTTP 409.
139
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
140
+ */
141
+ getValues(spreadsheetId: string, range: string): Promise<GoogleSheetsValuesResult>;
142
+ /**
143
+ * @description Overwrites values in an A1 range of a spreadsheet
144
+ * @summary `PUT`s the row values to the values endpoint for the given
145
+ * `spreadsheetId` and `range`. Cells are interpreted according to
146
+ * `valueInputOption` (`"USER_ENTERED"` by default, `"RAW"` to store text
147
+ * verbatim), and the existing range content is replaced.
148
+ * @param {GoogleSheetsWriteInput} input - The target spreadsheet, range, values, and input interpretation.
149
+ * @returns {Promise<GoogleSheetsValuesResult>} The served range and the written values.
150
+ * @throws {InternalError} When credentials are missing.
151
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
152
+ * @throws {ConflictError} When Google answers with HTTP 409.
153
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
154
+ */
155
+ updateValues(input: GoogleSheetsWriteInput): Promise<GoogleSheetsValuesResult>;
156
+ /**
157
+ * @description Appends values after the last row of an A1 range's table
158
+ * @summary `POST`s the row values to the `:append` endpoint for the given
159
+ * `spreadsheetId` and `range`, inserting new rows after existing table data
160
+ * (`insertDataOption: "INSERT_ROWS"`). Cells are interpreted according to
161
+ * `valueInputOption` (`"USER_ENTERED"` by default). Use a single-row or
162
+ * single-column A1 range to anchor the table; Google reports the range the
163
+ * data actually landed in.
164
+ * @param {GoogleSheetsWriteInput} input - The target spreadsheet, anchor range, values, and input interpretation.
165
+ * @returns {Promise<GoogleSheetsValuesResult>} The range the appended rows landed in and the appended values.
166
+ * @throws {InternalError} When credentials are missing.
167
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
168
+ * @throws {ConflictError} When Google answers with HTTP 409.
169
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
170
+ */
171
+ appendValues(input: GoogleSheetsWriteInput): Promise<GoogleSheetsValuesResult>;
172
+ /**
173
+ * @description Clears all values in an A1 range of a spreadsheet
174
+ * @summary `POST`s the `:clear` endpoint for the given `spreadsheetId` and
175
+ * `range`, emptying the cells while preserving formatting, and returns the
176
+ * range Google actually cleared.
177
+ * @param {string} spreadsheetId - The spreadsheet to clear values in.
178
+ * @param {string} range - The A1 notation range to clear.
179
+ * @returns {Promise<{spreadsheetId: string, clearedRange: string}>} The cleared range as reported by Google.
180
+ * @throws {InternalError} When credentials are missing.
181
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
182
+ * @throws {ConflictError} When Google answers with HTTP 409.
183
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
184
+ */
185
+ clearValues(spreadsheetId: string, range: string): Promise<{
186
+ spreadsheetId: string;
187
+ clearedRange: string;
188
+ }>;
189
+ /**
190
+ * @description Creates a new spreadsheet with the given title
191
+ * @summary `POST`s a spreadsheet resource with `properties.title` to the
192
+ * spreadsheets endpoint and returns the new spreadsheet's ID and URL.
193
+ * @param {string} title - The title for the new spreadsheet.
194
+ * @returns {Promise<{spreadsheetId: string, spreadsheetUrl?: string}>} The created spreadsheet's ID and URL.
195
+ * @throws {InternalError} When credentials are missing or the title is empty.
196
+ * @throws {NotFoundError} When Google answers with HTTP 404.
197
+ * @throws {ConflictError} When Google answers with HTTP 409.
198
+ * @throws {BadRequestError} When Google answers with any other HTTP error status.
199
+ */
200
+ createSpreadsheet(title: string): Promise<{
201
+ spreadsheetId: string;
202
+ spreadsheetUrl?: string;
203
+ }>;
204
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @module integrations/io/google-sheets
3
+ * @summary Google Sheets REST v4 service (values read/write/append/clear, spreadsheet creation).
4
+ * @description Re-exports the Google Sheets client-based service and its types.
5
+ */
6
+ export * from "./GoogleSheetsService.d.cts";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @module integrations/io/google-sheets
3
+ * @summary Google Sheets REST v4 service (values read/write/append/clear, spreadsheet creation).
4
+ * @description Re-exports the Google Sheets client-based service and its types.
5
+ */
6
+ export * from "./GoogleSheetsService.d.mts";
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @module integrations/io/graphql/service
3
+ * @summary Generic GraphQL endpoint integration service for executing queries and mutations.
4
+ * @description Posts GraphQL documents to any endpoint as an undecorated
5
+ * client-based service built on {@link HttpApiService}.
6
+ * The endpoint is supplied as `endpoint` (an alias normalized to `baseUrl`
7
+ * during initialization) or the `io.graphql` environment slice; an optional
8
+ * bearer token is attached to every request, per-request headers can extend
9
+ * it, and failures are mapped to decaf errors via {@link httpError}. GraphQL
10
+ * field-level `errors` are returned in the response rather than thrown —
11
+ * callers decide how to handle partial results.
12
+ */
13
+ import { type MaybeContextualArg } from "@decaf-ts/core";
14
+ import type { AxiosInstance } from "axios";
15
+ import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.cts";
16
+ /**
17
+ * @description Configuration for the GraphQL service
18
+ * @summary Extends {@link HttpApiServiceConfig} with the GraphQL `endpoint`
19
+ * URL (normalized to `baseUrl` during initialization) and the optional bearer
20
+ * token. When omitted, the `io.graphql` environment slice supplies the
21
+ * endpoint (and optional `token`, `timeout`).
22
+ * @category IO
23
+ * @memberOf module:integrations/io/graphql/service
24
+ */
25
+ export interface GraphqlServiceConfig extends HttpApiServiceConfig {
26
+ /**
27
+ * @description GraphQL endpoint URL
28
+ * @summary Aliased to `baseUrl` by {@link GraphqlService.initialize}; every
29
+ * request is posted to this URL.
30
+ */
31
+ endpoint?: string;
32
+ /**
33
+ * @description Bearer token for the endpoint
34
+ * @summary Sent as `Authorization: Bearer <token>` with every request.
35
+ */
36
+ token?: string;
37
+ }
38
+ /**
39
+ * @description Input for a GraphQL request
40
+ * @summary Carries the `query` document, the `variables` map referenced by
41
+ * it, the optional `operationName` when the document holds multiple named
42
+ * operations, and per-request `headers` merged into the client's defaults.
43
+ * @category IO
44
+ * @memberOf module:integrations/io/graphql/service
45
+ */
46
+ export interface GraphqlRequest {
47
+ /**
48
+ * @description The GraphQL query or mutation document (required)
49
+ */
50
+ query: string;
51
+ /**
52
+ * @description Variable values for the document's declared variables
53
+ */
54
+ variables?: Record<string, unknown>;
55
+ /**
56
+ * @description The operation to execute when the document defines several
57
+ */
58
+ operationName?: string;
59
+ /**
60
+ * @description Extra headers merged over the client's defaults for this request
61
+ */
62
+ headers?: Record<string, string>;
63
+ }
64
+ /**
65
+ * @description GraphQL response envelope
66
+ * @summary The standard GraphQL execution result: `data` when the operation
67
+ * produced results, field-level `errors` (message plus response path) when
68
+ * execution partially failed, and provider `extensions`.
69
+ * @template T - The expected type of the `data` payload.
70
+ * @category IO
71
+ * @memberOf module:integrations/io/graphql/service
72
+ */
73
+ export interface GraphqlResponse<T = unknown> {
74
+ data?: T;
75
+ errors?: Array<{
76
+ message: string;
77
+ path?: Array<string | number>;
78
+ }>;
79
+ extensions?: Record<string, unknown>;
80
+ }
81
+ /**
82
+ * @description Generic GraphQL endpoint integration service
83
+ * @summary An undecorated HTTP service that `POST`s GraphQL
84
+ * documents to any endpoint. Unlike the other integration services there is
85
+ * no default base URL — the endpoint must come from the config (`endpoint` or
86
+ * `baseUrl`) or the `io.graphql` environment slice. Initialization normalizes
87
+ * the `endpoint` alias to `baseUrl` before delegating to the shared
88
+ * {@link HttpApiService.initialize}; the optional token is sent as a bearer
89
+ * header and per-request headers extend it. Transport failures are mapped to
90
+ * decaf errors via {@link httpError}, while GraphQL field-level `errors` are
91
+ * returned in the response for the caller to interpret.
92
+ * @class GraphqlService
93
+ * @category IO
94
+ * @example
95
+ * ```ts
96
+ * import { GraphqlService } from "@decaf-ts/integrations/io/graphql";
97
+ *
98
+ * const graphql = new GraphqlService();
99
+ * await graphql.initialize({
100
+ * endpoint: "https://api.example.com/graphql",
101
+ * token: process.env.GRAPH_CREDENTIAL_GRAPHQL_TOKEN,
102
+ * });
103
+ * const response = await graphql.request<{ user: { name: string } }>({
104
+ * query: `query GetUser($id: ID!) {
105
+ * user(id: $id) { name }
106
+ * }`,
107
+ * variables: { id: "123" },
108
+ * });
109
+ * ```
110
+ * @memberOf module:integrations/io/graphql/service
111
+ */
112
+ export declare class GraphqlService extends HttpApiService<GraphqlServiceConfig> {
113
+ /**
114
+ * @description The provider name used in error messages
115
+ */
116
+ protected readonly serviceName = "GraphQL";
117
+ /**
118
+ * @description The absence of a default GraphQL endpoint
119
+ * @summary Returns an empty string because GraphQL endpoints are
120
+ * provider-specific; {@link GraphqlService.request} rejects execution when
121
+ * no endpoint was configured.
122
+ * @returns {string} An empty string.
123
+ */
124
+ protected defaultBaseUrl(): string;
125
+ /**
126
+ * @description Normalizes the `endpoint` alias before shared initialization
127
+ * @summary When the provided config carries no `baseUrl` but an `endpoint`,
128
+ * copies `endpoint` into `baseUrl` and delegates to
129
+ * {@link HttpApiService.initialize}, which merges the environment slice and
130
+ * builds the Axios client.
131
+ * @param {...MaybeContextualArg<any>} args - An optional `Partial<GraphqlServiceConfig>`, optionally followed by a decaf `Context`.
132
+ * @returns {Promise<{config: GraphqlServiceConfig, client: AxiosInstance}>} The merged configuration and the configured Axios instance.
133
+ * @throws {InternalError} When no base URL can be resolved from the config or environment.
134
+ */
135
+ initialize(...args: MaybeContextualArg<any>): Promise<{
136
+ config: GraphqlServiceConfig;
137
+ client: AxiosInstance;
138
+ }>;
139
+ /**
140
+ * @description Builds the GraphQL bearer authorization headers
141
+ * @summary Returns the `Authorization: Bearer <token>` header when the
142
+ * config carries a token, and no headers otherwise.
143
+ * @param {GraphqlServiceConfig} config - The resolved service configuration.
144
+ * @returns {Record<string, string>} The authorization headers (empty without a token).
145
+ */
146
+ protected authHeaders(config: GraphqlServiceConfig): Record<string, string>;
147
+ /**
148
+ * @description Reads the GraphQL endpoint and token from the environment
149
+ * @summary Reads the `io.graphql` environment slice and returns a partial
150
+ * config (with `endpoint` also mirrored to `baseUrl`) when an endpoint is
151
+ * configured, `undefined` otherwise. Values pass through
152
+ * `envString`/`envNumber` to reject unset-leaf proxies.
153
+ * @returns {Partial<GraphqlServiceConfig> | undefined} A partial config, or `undefined` when no GraphQL endpoint is configured.
154
+ */
155
+ protected configFromEnvironment(): Partial<GraphqlServiceConfig> | undefined;
156
+ /**
157
+ * @description Executes a GraphQL query or mutation against the configured endpoint
158
+ * @summary `POST`s the standard GraphQL request body (`query`,
159
+ * `variables`, `operationName`) to the resolved endpoint with the optional
160
+ * per-request headers merged over the client defaults. Requires a
161
+ * non-empty query and a configured endpoint. Returns the raw execution
162
+ * envelope: field-level `errors` are reported in `GraphqlResponse.errors`
163
+ * rather than thrown, so callers must inspect them for partial failures.
164
+ * @template T - The expected type of the `data` payload.
165
+ * @param {GraphqlRequest} input - The query document, variables, operation name, and per-request headers.
166
+ * @returns {Promise<GraphqlResponse<T>>} The execution envelope with `data`, `errors`, and `extensions`.
167
+ * @throws {InternalError} When the query is empty or no endpoint is configured.
168
+ * @throws {NotFoundError} When the endpoint answers with HTTP 404.
169
+ * @throws {ConflictError} When the endpoint answers with HTTP 409.
170
+ * @throws {BadRequestError} When the endpoint answers with any other HTTP error status.
171
+ */
172
+ request<T = unknown>(input: GraphqlRequest): Promise<GraphqlResponse<T>>;
173
+ }