@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
@@ -7,6 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
+ import { description } from "@decaf-ts/decoration";
10
11
  import { BaseModel } from "@decaf-ts/core";
11
12
  import { column, createdAt, pk, table, updatedAt, uuid } from "@decaf-ts/core";
12
13
  import { model, required } from "@decaf-ts/decorator-validation";
@@ -61,6 +62,7 @@ __decorate([
61
62
  __metadata("design:type", Date)
62
63
  ], FeatureFlagAccess.prototype, "updatedAt", void 0);
63
64
  FeatureFlagAccess = __decorate([
65
+ description("Persisted feature flag access rule for a subject"),
64
66
  table("feature_flag_access"),
65
67
  model(),
66
68
  __metadata("design:paramtypes", [Object])
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureFlagAccess.model.js","sourceRoot":"","sources":["../../../../src/feature-flags/models/FeatureFlagAccess.model.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAK1D,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,SAAS;IAC9C,YAAY,IAAiC;QAC3C,KAAK,CAAC,IAAI,CAAC,CAAC;QAoBd,YAAO,GAAY,IAAI,CAAC;IAnBxB,CAAC;CAmCF,CAAA;AA/BC;IAFC,EAAE,EAAE;IACJ,IAAI,EAAE;;6CACK;AAIZ;IAFC,QAAQ,EAAE;IACV,MAAM,EAAE;;qDACW;AAIpB;IAFC,QAAQ,EAAE;IACV,MAAM,EAAE;;sDAC2C;AAIpD;IAFC,QAAQ,EAAE;IACV,MAAM,EAAE;;qDACW;AAGpB;IADC,MAAM,EAAE;;kDACe;AAGxB;IADC,MAAM,EAAE;;mDAC0B;AAGnC;IADC,MAAM,EAAE;;oDACU;AAGnB;IADC,MAAM,EAAE;;oDACU;AAGnB;IADC,SAAS,EAAE;8BACA,IAAI;oDAAC;AAGjB;IADC,SAAS,EAAE;8BACA,IAAI;oDAAC;AArCN,iBAAiB;IAF7B,KAAK,CAAC,qBAAqB,CAAC;IAC5B,KAAK,EAAE;;GACK,iBAAiB,CAsC7B"}
1
+ {"version":3,"file":"FeatureFlagAccess.model.js","sourceRoot":"","sources":["../../../../src/feature-flags/models/FeatureFlagAccess.model.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAM1D,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,SAAS;IAC9C,YAAY,IAAiC;QAC3C,KAAK,CAAC,IAAI,CAAC,CAAC;QAoBd,YAAO,GAAY,IAAI,CAAC;IAnBxB,CAAC;CAmCF,CAAA;AA/BC;IAFC,EAAE,EAAE;IACJ,IAAI,EAAE;;6CACK;AAIZ;IAFC,QAAQ,EAAE;IACV,MAAM,EAAE;;qDACW;AAIpB;IAFC,QAAQ,EAAE;IACV,MAAM,EAAE;;sDAC2C;AAIpD;IAFC,QAAQ,EAAE;IACV,MAAM,EAAE;;qDACW;AAGpB;IADC,MAAM,EAAE;;kDACe;AAGxB;IADC,MAAM,EAAE;;mDAC0B;AAGnC;IADC,MAAM,EAAE;;oDACU;AAGnB;IADC,MAAM,EAAE;;oDACU;AAGnB;IADC,SAAS,EAAE;8BACA,IAAI;oDAAC;AAGjB;IADC,SAAS,EAAE;8BACA,IAAI;oDAAC;AArCN,iBAAiB;IAH7B,WAAW,CAAC,kDAAkD,CAAC;IAC/D,KAAK,CAAC,qBAAqB,CAAC;IAC5B,KAAK,EAAE;;GACK,iBAAiB,CAsC7B"}
package/lib/esm/index.js CHANGED
@@ -6,8 +6,8 @@
6
6
  export * from "./utils.js";
7
7
  export * from "./namespaces/index.js";
8
8
  export * from "./feature-flags/index.js";
9
- export const VERSION = "0.10.8";
10
- export const COMMIT = "6c774f8";
11
- export const FULL_VERSION = "0.10.8-6c774f8";
9
+ export const VERSION = "0.11.0";
10
+ export const COMMIT = "004735e";
11
+ export const FULL_VERSION = "0.11.0-004735e";
12
12
  export const PACKAGE_NAME = "@decaf-ts/integrations";
13
13
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,261 @@
1
+ /**
2
+ * @module integrations/io/airtable/service
3
+ * @summary Airtable Web API integration service for CRUD operations on base records.
4
+ * @description Exposes the Airtable v0 records API (list, get, create, update,
5
+ * delete) as an undecorated client-based service built on
6
+ * {@link HttpApiService}. Configuration comes from an explicit
7
+ * `AirtableServiceConfig` or the `io.airtable` environment slice; base
8
+ * targets default to the configured `baseId` and can be overridden per call.
9
+ * Failures are mapped to decaf errors via {@link httpError}.
10
+ */
11
+ import { InternalError } from "@decaf-ts/db-decorators";
12
+ import { IoEnvironment } from "./../environment.js";
13
+ import { envNumber, envString } from "./../../shared/environmentValue.js";
14
+ import { HttpApiService, httpError, } from "./../../shared/http/index.js";
15
+ /**
16
+ * @description Airtable Web API integration service
17
+ * @summary An undecorated HTTP service for listing records
18
+ * with filtering, sorting, and cursor paging; fetching, creating, updating,
19
+ * and deleting individual records. Base targets resolve per call from the
20
+ * `baseId` argument, falling back to the configured value, and throw
21
+ * `InternalError` when unresolved. Every operation requires a token
22
+ * (`requireToken()`), and transport failures are mapped to decaf errors via
23
+ * {@link httpError}.
24
+ * @class AirtableService
25
+ * @category IO
26
+ * @example
27
+ * ```ts
28
+ * import { AirtableService } from "@decaf-ts/integrations/io/airtable";
29
+ *
30
+ * const airtable = new AirtableService();
31
+ * await airtable.initialize({
32
+ * token: process.env.GRAPH_CREDENTIAL_AIRTABLE_TOKEN,
33
+ * baseId: "appExampleBase",
34
+ * });
35
+ * const created = await airtable.createRecord({
36
+ * table: "Tasks",
37
+ * fields: { Name: "Ship release", Status: "Todo" },
38
+ * });
39
+ * ```
40
+ * @memberOf module:integrations/io/airtable/service
41
+ */
42
+ export class AirtableService extends HttpApiService {
43
+ constructor() {
44
+ super(...arguments);
45
+ /**
46
+ * @description The provider name used in error messages
47
+ */
48
+ this.serviceName = "Airtable";
49
+ }
50
+ /**
51
+ * @description The Airtable Web API v0 base URL
52
+ * @summary Used when the resolved config carries no `baseUrl`.
53
+ * @returns {string} `"https://api.airtable.com/v0"`.
54
+ */
55
+ defaultBaseUrl() {
56
+ return "https://api.airtable.com/v0";
57
+ }
58
+ /**
59
+ * @description Builds the Airtable bearer authorization headers
60
+ * @summary Returns the `Authorization: Bearer <token>` header when the
61
+ * config carries a token, and no headers otherwise.
62
+ * @param {AirtableServiceConfig} config - The resolved service configuration.
63
+ * @returns {Record<string, string>} The authorization headers (empty without a token).
64
+ */
65
+ authHeaders(config) {
66
+ return config.token ? { Authorization: `Bearer ${config.token}` } : {};
67
+ }
68
+ /**
69
+ * @description Reads the Airtable credentials and defaults from the environment
70
+ * @summary Reads the `io.airtable` environment slice and returns a partial
71
+ * config when a token is configured, `undefined` otherwise. Values pass
72
+ * through `envString`/`envNumber` to reject unset-leaf proxies.
73
+ * @returns {Partial<AirtableServiceConfig> | undefined} A partial config, or `undefined` when no Airtable token is configured.
74
+ */
75
+ configFromEnvironment() {
76
+ const env = IoEnvironment.io.airtable;
77
+ const token = envString(env?.token);
78
+ if (!token)
79
+ return undefined;
80
+ return {
81
+ token,
82
+ baseId: envString(env.baseId),
83
+ baseUrl: envString(env.baseUrl),
84
+ timeout: envNumber(env.timeout),
85
+ };
86
+ }
87
+ /**
88
+ * @description Resolves the URL-encoded base path for a call
89
+ * @summary Builds `/<baseId>` from the given base ID, falling back to the
90
+ * configured value, and throws when neither is available.
91
+ * @param {string} [baseId] - The per-call base override.
92
+ * @returns {string} The URL-encoded base API path.
93
+ * @throws {InternalError} When neither the input nor the config yields a base ID.
94
+ */
95
+ basePath(baseId) {
96
+ const resolved = baseId ?? this.config.baseId;
97
+ if (!resolved) {
98
+ throw new InternalError("Airtable requires a base ID");
99
+ }
100
+ return `/${encodeURIComponent(resolved)}`;
101
+ }
102
+ /**
103
+ * @description Resolves the URL-encoded table path for a call
104
+ * @summary Builds `<basePath>/<table>` with both segments URL-encoded, and
105
+ * throws when the table name is empty (or the base cannot be resolved).
106
+ * @param {string} table - The table name or ID.
107
+ * @param {string} [baseId] - The per-call base override.
108
+ * @returns {string} The URL-encoded table API path.
109
+ * @throws {InternalError} When the table name is empty or the base ID cannot be resolved.
110
+ */
111
+ tablePath(table, baseId) {
112
+ if (!table)
113
+ throw new InternalError("Airtable requires a table name");
114
+ return `${this.basePath(baseId)}/${encodeURIComponent(table)}`;
115
+ }
116
+ /**
117
+ * @description Lists records in an Airtable table with cursor paging
118
+ * @summary `GET`s the table endpoint with the configured view, formula
119
+ * filter, record caps, page size, page offset, field projection, and first
120
+ * sort entry. Return the `offset` cursor as the next call's
121
+ * `AirtableListOptions.offset` to fetch further pages.
122
+ * @param {AirtableListOptions} options - The table and filter/sort/paging options.
123
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
124
+ * @returns {Promise<AirtableListResult>} The page of records and the next offset cursor when more pages exist.
125
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
126
+ * @throws {NotFoundError} When the base or table does not exist (HTTP 404).
127
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
128
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid formula).
129
+ * @example
130
+ * ```ts
131
+ * let offset: string | undefined;
132
+ * do {
133
+ * const page = await airtable.listRecords({
134
+ * table: "Tasks",
135
+ * filterByFormula: "{Status} = 'Active'",
136
+ * pageSize: 100,
137
+ * offset,
138
+ * sort: [{ field: "Name", direction: "asc" }],
139
+ * });
140
+ * console.log(page.records);
141
+ * offset = page.offset;
142
+ * } while (offset);
143
+ * ```
144
+ */
145
+ async listRecords(options, baseId) {
146
+ this.requireToken();
147
+ try {
148
+ const response = await this.client.get(this.tablePath(options.table, baseId), {
149
+ params: {
150
+ view: options.view,
151
+ filterByFormula: options.filterByFormula,
152
+ maxRecords: options.maxRecords,
153
+ pageSize: options.pageSize,
154
+ offset: options.offset,
155
+ "fields[]": options.fields,
156
+ "sort[0][field]": options.sort?.[0]?.field,
157
+ "sort[0][direction]": options.sort?.[0]?.direction,
158
+ },
159
+ });
160
+ return {
161
+ records: response.data.records ?? [],
162
+ offset: response.data.offset,
163
+ };
164
+ }
165
+ catch (error) {
166
+ throw httpError("Airtable", "list records", error);
167
+ }
168
+ }
169
+ /**
170
+ * @description Fetches a single Airtable record
171
+ * @summary `GET`s the table endpoint with the record ID appended and
172
+ * returns the record envelope.
173
+ * @param {string} table - The table name or ID.
174
+ * @param {string} recordId - The record ID to fetch (e.g. `"rec1234567890"`).
175
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
176
+ * @returns {Promise<AirtableRecord>} The record envelope.
177
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
178
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
179
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
180
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status.
181
+ */
182
+ async getRecord(table, recordId, baseId) {
183
+ this.requireToken();
184
+ try {
185
+ const response = await this.client.get(`${this.tablePath(table, baseId)}/${encodeURIComponent(recordId)}`);
186
+ return response.data;
187
+ }
188
+ catch (error) {
189
+ throw httpError("Airtable", "get record", error);
190
+ }
191
+ }
192
+ /**
193
+ * @description Creates an Airtable record
194
+ * @summary `POST`s the fields map to the table endpoint; `typecast` lets
195
+ * Airtable coerce values into the column types (disabled by default).
196
+ * @param {AirtableWriteInput} input - The table, fields, and typecast option.
197
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
198
+ * @returns {Promise<AirtableRecord>} The created record envelope.
199
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
200
+ * @throws {NotFoundError} When the base or table does not exist (HTTP 404).
201
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
202
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid field values).
203
+ */
204
+ async createRecord(input, baseId) {
205
+ this.requireToken();
206
+ try {
207
+ const response = await this.client.post(this.tablePath(input.table, baseId), { fields: input.fields, typecast: input.typecast ?? false });
208
+ return response.data;
209
+ }
210
+ catch (error) {
211
+ throw httpError("Airtable", "create record", error);
212
+ }
213
+ }
214
+ /**
215
+ * @description Updates an Airtable record
216
+ * @summary `PATCH`es the fields map onto the record identified by
217
+ * `recordId`; only the provided fields change. `typecast` lets Airtable
218
+ * coerce values into the column types (disabled by default).
219
+ * @param {AirtableWriteInput & {recordId: string}} input - The table, fields, typecast option, and target record ID.
220
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
221
+ * @returns {Promise<AirtableRecord>} The updated record envelope.
222
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
223
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
224
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
225
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status (e.g. invalid field values).
226
+ */
227
+ async updateRecord(input, baseId) {
228
+ this.requireToken();
229
+ try {
230
+ const response = await this.client.patch(`${this.tablePath(input.table, baseId)}/${encodeURIComponent(input.recordId)}`, { fields: input.fields, typecast: input.typecast ?? false });
231
+ return response.data;
232
+ }
233
+ catch (error) {
234
+ throw httpError("Airtable", "update record", error);
235
+ }
236
+ }
237
+ /**
238
+ * @description Deletes an Airtable record
239
+ * @summary `DELETE`s the record identified by `recordId` and returns the
240
+ * Airtable deletion confirmation.
241
+ * @param {string} table - The table name or ID.
242
+ * @param {string} recordId - The record ID to delete.
243
+ * @param {string} [baseId] - The base override; falls back to the configured `baseId`.
244
+ * @returns {Promise<{id: string, deleted: boolean}>} The deleted record's ID and Airtable's `deleted` confirmation.
245
+ * @throws {InternalError} When no token is configured or the table/base cannot be resolved.
246
+ * @throws {NotFoundError} When the record does not exist (HTTP 404).
247
+ * @throws {ConflictError} When Airtable answers with HTTP 409.
248
+ * @throws {BadRequestError} When Airtable answers with any other HTTP error status.
249
+ */
250
+ async deleteRecord(table, recordId, baseId) {
251
+ this.requireToken();
252
+ try {
253
+ const response = await this.client.delete(`${this.tablePath(table, baseId)}/${encodeURIComponent(recordId)}`);
254
+ return response.data;
255
+ }
256
+ catch (error) {
257
+ throw httpError("Airtable", "delete record", error);
258
+ }
259
+ }
260
+ }
261
+ //# sourceMappingURL=AirtableService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AirtableService.js","sourceRoot":"","sources":["../../../../src/io/airtable/AirtableService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,4BAAuB;AAC/C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,2CAAsC;AACrE,OAAO,EACL,cAAc,EAEd,SAAS,GACV,qCAA0B;AA2G3B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,eAAgB,SAAQ,cAAqC;IAA1E;;QACE;;WAEG;QACgB,gBAAW,GAAG,UAAU,CAAC;IAyP9C,CAAC;IAvPC;;;;OAIG;IACO,cAAc;QACtB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IAED;;;;;;OAMG;IACO,WAAW,CAAC,MAA6B;QACjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,CAAC;IAED;;;;;;OAMG;IACO,qBAAqB;QAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,OAAO;YACL,KAAK;YACL,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;YAC/B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;SAChC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACO,QAAQ,CAAC,MAAe;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,aAAa,CAAC,6BAA6B,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED;;;;;;;;OAQG;IACO,SAAS,CAAC,KAAa,EAAE,MAAe;QAChD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,aAAa,CAAC,gCAAgC,CAAC,CAAC;QACtE,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IACjE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,KAAK,CAAC,WAAW,CACf,OAA4B,EAC5B,MAAe;QAEf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EACrC;gBACE,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,eAAe,EAAE,OAAO,CAAC,eAAe;oBACxC,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,UAAU,EAAE,OAAO,CAAC,MAAM;oBAC1B,gBAAgB,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK;oBAC1C,oBAAoB,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;iBACnD;aACF,CACF,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE;gBACpC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;aAC7B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,SAAS,CACb,KAAa,EACb,QAAgB,EAChB,MAAe;QAEf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CACpC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CACnE,CAAC;YACF,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,YAAY,CAChB,KAAyB,EACzB,MAAe;QAEf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACrC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EACnC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,EAAE,CAC5D,CAAC;YACF,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,YAAY,CAChB,KAAgD,EAChD,MAAe;QAEf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACtC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,kBAAkB,CAC1D,KAAK,CAAC,QAAQ,CACf,EAAE,EACH,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,EAAE,CAC5D,CAAC;YACF,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,YAAY,CAChB,KAAa,EACb,QAAgB,EAChB,MAAe;QAEf,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAIvC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CACnE,CAAC;YACF,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,7 @@
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.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/io/airtable/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qCAAkC"}
@@ -0,0 +1,42 @@
1
+ import { LoggedEnvironment } from "@decaf-ts/logging";
2
+ /**
3
+ * @description Accumulated io environment singleton
4
+ * @summary The `LoggedEnvironment.accumulate`-registered instance backing the
5
+ * `IoEnvironmentShape` contract. IO services read their provider slice
6
+ * (e.g. `IoEnvironment.io.airtable`) inside `configFromEnvironment()` and
7
+ * translate it into an `HttpApiServiceConfig`-derived config. Credentials
8
+ * come from environment variables; for as-graph node usage those are provided
9
+ * as `GRAPH_CREDENTIAL_*` values (placeholders in this example).
10
+ * @example
11
+ * ```ts
12
+ * import { AirtableService } from "@decaf-ts/integrations/io/airtable";
13
+ *
14
+ * // with io.airtable.token / io.airtable.baseId configured in the environment
15
+ * const airtable = new AirtableService();
16
+ * await airtable.initialize();
17
+ * ```
18
+ * @constant {LoggedEnvironment} IoEnvironment
19
+ * @memberOf module:integrations/io/environment
20
+ */
21
+ export const IoEnvironment = LoggedEnvironment.accumulate({
22
+ io: {
23
+ airtable: {
24
+ token: "",
25
+ baseUrl: "",
26
+ baseId: "",
27
+ timeout: undefined,
28
+ },
29
+ googleSheets: {
30
+ token: "",
31
+ apiKey: "",
32
+ baseUrl: "",
33
+ timeout: undefined,
34
+ },
35
+ graphql: {
36
+ endpoint: "",
37
+ token: "",
38
+ timeout: undefined,
39
+ },
40
+ },
41
+ });
42
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/io/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AA8CtD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC,UAAU,CAAC;IACxD,EAAE,EAAE;QACF,QAAQ,EAAE;YACR,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,SAA8B;SACxC;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,SAA8B;SACxC;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,SAA8B;SACxC;KACF;CACoB,CAAC,CAAC"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * @module integrations/io/google-sheets/service
3
+ * @summary Google Sheets API integration service for reading and writing spreadsheet values.
4
+ * @description Exposes the Google Sheets v4 values API (`get`, `update`,
5
+ * `append`, `clear`) and spreadsheet creation as an undecorated
6
+ * client-based service built on
7
+ * {@link HttpApiService}. Authentication accepts either an OAuth token
8
+ * (bearer) or a plain API key (`X-Goog-Api-Key`); configuration comes from an
9
+ * explicit `GoogleSheetsServiceConfig` or the `io.googleSheets` environment
10
+ * slice, and failures are mapped to decaf errors via {@link httpError}.
11
+ */
12
+ import { InternalError } from "@decaf-ts/db-decorators";
13
+ import { IoEnvironment } from "./../environment.js";
14
+ import { envNumber, envString } from "./../../shared/environmentValue.js";
15
+ import { HttpApiService, httpError, } from "./../../shared/http/index.js";
16
+ /**
17
+ * @description Google Sheets API integration service
18
+ * @summary An undecorated HTTP service for reading,
19
+ * updating, appending, and clearing values in A1 ranges of a spreadsheet, and
20
+ * for creating new spreadsheets. Every operation requires either an OAuth
21
+ * token or an API key (`requireAuth()`); ranges and spreadsheet IDs are
22
+ * URL-encoded, and transport failures are mapped to decaf errors via
23
+ * {@link httpError}.
24
+ * @class GoogleSheetsService
25
+ * @category IO
26
+ * @example
27
+ * ```ts
28
+ * import { GoogleSheetsService } from "@decaf-ts/integrations/io/google-sheets";
29
+ *
30
+ * const sheets = new GoogleSheetsService();
31
+ * await sheets.initialize({
32
+ * token: process.env.GRAPH_CREDENTIAL_GOOGLE_SHEETS_TOKEN,
33
+ * });
34
+ * const created = await sheets.createSpreadsheet("Metrics");
35
+ * await sheets.updateValues({
36
+ * spreadsheetId: created.spreadsheetId,
37
+ * range: "Sheet1!A1:B2",
38
+ * values: [
39
+ * ["date", "count"],
40
+ * ["2026-01-01", "42"],
41
+ * ],
42
+ * });
43
+ * ```
44
+ * @memberOf module:integrations/io/google-sheets/service
45
+ */
46
+ export class GoogleSheetsService extends HttpApiService {
47
+ constructor() {
48
+ super(...arguments);
49
+ /**
50
+ * @description The provider name used in error messages
51
+ */
52
+ this.serviceName = "Google Sheets";
53
+ }
54
+ /**
55
+ * @description The Google Sheets v4 values API base URL
56
+ * @summary Used when the resolved config carries no `baseUrl`.
57
+ * @returns {string} `"https://sheets.googleapis.com/v4/spreadsheets"`.
58
+ */
59
+ defaultBaseUrl() {
60
+ return "https://sheets.googleapis.com/v4/spreadsheets";
61
+ }
62
+ /**
63
+ * @description Builds the Google Sheets authorization headers
64
+ * @summary Returns the `Authorization: Bearer <token>` header when the
65
+ * config carries an OAuth token, otherwise the `X-Goog-Api-Key` header when
66
+ * an API key is configured, and no headers otherwise.
67
+ * @param {GoogleSheetsServiceConfig} config - The resolved service configuration.
68
+ * @returns {Record<string, string>} The authorization headers (empty without a token or API key).
69
+ */
70
+ authHeaders(config) {
71
+ if (config.token)
72
+ return { Authorization: `Bearer ${config.token}` };
73
+ if (config.apiKey)
74
+ return { "X-Goog-Api-Key": config.apiKey };
75
+ return {};
76
+ }
77
+ /**
78
+ * @description Reads the Google Sheets credentials and defaults from the environment
79
+ * @summary Reads the `io.googleSheets` environment slice and returns a
80
+ * partial config when a token or API key is configured, `undefined`
81
+ * otherwise. Values pass through `envString`/`envNumber` to reject
82
+ * unset-leaf proxies.
83
+ * @returns {Partial<GoogleSheetsServiceConfig> | undefined} A partial config, or `undefined` when neither token nor API key is configured.
84
+ */
85
+ configFromEnvironment() {
86
+ const env = IoEnvironment.io.googleSheets;
87
+ const token = envString(env?.token);
88
+ const apiKey = envString(env?.apiKey);
89
+ if (!token && !apiKey)
90
+ return undefined;
91
+ return {
92
+ token,
93
+ apiKey,
94
+ baseUrl: envString(env.baseUrl),
95
+ timeout: envNumber(env.timeout),
96
+ };
97
+ }
98
+ /**
99
+ * @description Asserts that the service was configured with OAuth credentials
100
+ * @summary Throws when the resolved config carries neither a `token` nor an
101
+ * `apiKey`; every operation calls this before issuing requests.
102
+ * @returns {void}
103
+ * @throws {InternalError} When neither an OAuth token nor an API key is configured.
104
+ */
105
+ requireAuth() {
106
+ const config = this.config;
107
+ if (!config.token && !config.apiKey) {
108
+ throw new InternalError("Google Sheets requires an OAuth token or an API key");
109
+ }
110
+ }
111
+ /**
112
+ * @description URL-encodes an A1 range for the values API path
113
+ * @summary Ranges such as `Sheet1!A1:B2` contain characters that must be
114
+ * percent-encoded; all operations route the range through this helper.
115
+ * @param {string} range - The A1 notation range to encode.
116
+ * @returns {string} The URL-encoded range.
117
+ */
118
+ rangePath(range) {
119
+ return encodeURIComponent(range);
120
+ }
121
+ /**
122
+ * @description Reads values from an A1 range of a spreadsheet
123
+ * @summary `GET`s the values endpoint for the given `spreadsheetId` and
124
+ * `range` and returns the served range, major dimension, and the grid
125
+ * values (rows of cell strings). Requires credentials and both arguments.
126
+ * @param {string} spreadsheetId - The spreadsheet to read from.
127
+ * @param {string} range - The A1 notation range to read (e.g. `"Sheet1!A1:C10"`).
128
+ * @returns {Promise<GoogleSheetsValuesResult>} The served range and grid values.
129
+ * @throws {InternalError} When credentials are missing or the spreadsheet ID/range is empty.
130
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
131
+ * @throws {ConflictError} When Google answers with HTTP 409.
132
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
133
+ */
134
+ async getValues(spreadsheetId, range) {
135
+ this.requireAuth();
136
+ if (!spreadsheetId || !range) {
137
+ throw new InternalError("Google Sheets getValues requires a spreadsheet ID and range");
138
+ }
139
+ try {
140
+ const response = await this.client.get(`/${encodeURIComponent(spreadsheetId)}/values/${this.rangePath(range)}`);
141
+ return {
142
+ spreadsheetId,
143
+ range: response.data.range ?? range,
144
+ majorDimension: response.data.majorDimension,
145
+ values: response.data.values ?? [],
146
+ };
147
+ }
148
+ catch (error) {
149
+ throw httpError("Google Sheets", "get values", error);
150
+ }
151
+ }
152
+ /**
153
+ * @description Overwrites values in an A1 range of a spreadsheet
154
+ * @summary `PUT`s the row values to the values endpoint for the given
155
+ * `spreadsheetId` and `range`. Cells are interpreted according to
156
+ * `valueInputOption` (`"USER_ENTERED"` by default, `"RAW"` to store text
157
+ * verbatim), and the existing range content is replaced.
158
+ * @param {GoogleSheetsWriteInput} input - The target spreadsheet, range, values, and input interpretation.
159
+ * @returns {Promise<GoogleSheetsValuesResult>} The served range and the written values.
160
+ * @throws {InternalError} When credentials are missing.
161
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
162
+ * @throws {ConflictError} When Google answers with HTTP 409.
163
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
164
+ */
165
+ async updateValues(input) {
166
+ this.requireAuth();
167
+ try {
168
+ const response = await this.client.put(`/${encodeURIComponent(input.spreadsheetId)}/values/${this.rangePath(input.range)}`, {
169
+ range: input.range,
170
+ majorDimension: "ROWS",
171
+ values: input.values,
172
+ }, {
173
+ params: {
174
+ valueInputOption: input.valueInputOption ?? "USER_ENTERED",
175
+ },
176
+ });
177
+ return {
178
+ spreadsheetId: input.spreadsheetId,
179
+ range: response.data.range ?? input.range,
180
+ majorDimension: response.data.majorDimension ?? "ROWS",
181
+ values: response.data.values ?? input.values,
182
+ };
183
+ }
184
+ catch (error) {
185
+ throw httpError("Google Sheets", "update values", error);
186
+ }
187
+ }
188
+ /**
189
+ * @description Appends values after the last row of an A1 range's table
190
+ * @summary `POST`s the row values to the `:append` endpoint for the given
191
+ * `spreadsheetId` and `range`, inserting new rows after existing table data
192
+ * (`insertDataOption: "INSERT_ROWS"`). Cells are interpreted according to
193
+ * `valueInputOption` (`"USER_ENTERED"` by default). Use a single-row or
194
+ * single-column A1 range to anchor the table; Google reports the range the
195
+ * data actually landed in.
196
+ * @param {GoogleSheetsWriteInput} input - The target spreadsheet, anchor range, values, and input interpretation.
197
+ * @returns {Promise<GoogleSheetsValuesResult>} The range the appended rows landed in and the appended values.
198
+ * @throws {InternalError} When credentials are missing.
199
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
200
+ * @throws {ConflictError} When Google answers with HTTP 409.
201
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
202
+ */
203
+ async appendValues(input) {
204
+ this.requireAuth();
205
+ try {
206
+ const response = await this.client.post(`/${encodeURIComponent(input.spreadsheetId)}/values/${this.rangePath(input.range)}:append`, {
207
+ range: input.range,
208
+ majorDimension: "ROWS",
209
+ values: input.values,
210
+ }, {
211
+ params: {
212
+ valueInputOption: input.valueInputOption ?? "USER_ENTERED",
213
+ insertDataOption: "INSERT_ROWS",
214
+ },
215
+ });
216
+ return {
217
+ spreadsheetId: input.spreadsheetId,
218
+ range: response.data.range ?? input.range,
219
+ majorDimension: response.data.majorDimension ?? "ROWS",
220
+ values: response.data.values ?? [],
221
+ };
222
+ }
223
+ catch (error) {
224
+ throw httpError("Google Sheets", "append values", error);
225
+ }
226
+ }
227
+ /**
228
+ * @description Clears all values in an A1 range of a spreadsheet
229
+ * @summary `POST`s the `:clear` endpoint for the given `spreadsheetId` and
230
+ * `range`, emptying the cells while preserving formatting, and returns the
231
+ * range Google actually cleared.
232
+ * @param {string} spreadsheetId - The spreadsheet to clear values in.
233
+ * @param {string} range - The A1 notation range to clear.
234
+ * @returns {Promise<{spreadsheetId: string, clearedRange: string}>} The cleared range as reported by Google.
235
+ * @throws {InternalError} When credentials are missing.
236
+ * @throws {NotFoundError} When the spreadsheet does not exist (HTTP 404).
237
+ * @throws {ConflictError} When Google answers with HTTP 409.
238
+ * @throws {BadRequestError} When Google answers with any other HTTP error status (e.g. invalid range).
239
+ */
240
+ async clearValues(spreadsheetId, range) {
241
+ this.requireAuth();
242
+ try {
243
+ const response = await this.client.post(`/${encodeURIComponent(spreadsheetId)}/values/${this.rangePath(range)}:clear`, {});
244
+ return {
245
+ spreadsheetId,
246
+ clearedRange: response.data.clearedRange ?? range,
247
+ };
248
+ }
249
+ catch (error) {
250
+ throw httpError("Google Sheets", "clear values", error);
251
+ }
252
+ }
253
+ /**
254
+ * @description Creates a new spreadsheet with the given title
255
+ * @summary `POST`s a spreadsheet resource with `properties.title` to the
256
+ * spreadsheets endpoint and returns the new spreadsheet's ID and URL.
257
+ * @param {string} title - The title for the new spreadsheet.
258
+ * @returns {Promise<{spreadsheetId: string, spreadsheetUrl?: string}>} The created spreadsheet's ID and URL.
259
+ * @throws {InternalError} When credentials are missing or the title is empty.
260
+ * @throws {NotFoundError} When Google answers with HTTP 404.
261
+ * @throws {ConflictError} When Google answers with HTTP 409.
262
+ * @throws {BadRequestError} When Google answers with any other HTTP error status.
263
+ */
264
+ async createSpreadsheet(title) {
265
+ this.requireAuth();
266
+ if (!title) {
267
+ throw new InternalError("Google Sheets createSpreadsheet requires a title");
268
+ }
269
+ try {
270
+ const response = await this.client.post("/", {
271
+ properties: { title },
272
+ });
273
+ return {
274
+ spreadsheetId: response.data.spreadsheetId,
275
+ spreadsheetUrl: response.data.spreadsheetUrl,
276
+ };
277
+ }
278
+ catch (error) {
279
+ throw httpError("Google Sheets", "create spreadsheet", error);
280
+ }
281
+ }
282
+ }
283
+ //# sourceMappingURL=GoogleSheetsService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoogleSheetsService.js","sourceRoot":"","sources":["../../../../src/io/google-sheets/GoogleSheetsService.ts"],"names":[],"mappings":"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"}