appwrite 28.3.2 → 29.0.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 (397) hide show
  1. checksums.yaml +4 -4
  2. data/lib/appwrite/client.rb +36 -20
  3. data/lib/appwrite/enums/billing_plan_group.rb +2 -1
  4. data/lib/appwrite/enums/build_runtime.rb +2 -0
  5. data/lib/appwrite/enums/databases_index_type.rb +1 -0
  6. data/lib/appwrite/enums/domain_registration_type.rb +10 -0
  7. data/lib/appwrite/enums/domain_transfer_status_enum.rb +14 -0
  8. data/lib/appwrite/enums/execution_trigger.rb +1 -0
  9. data/lib/appwrite/enums/framework.rb +1 -0
  10. data/lib/appwrite/enums/id_token_provider.rb +8 -0
  11. data/lib/appwrite/enums/image_gravity.rb +1 -0
  12. data/lib/appwrite/enums/o_auth2_auth0_prompt.rb +9 -0
  13. data/lib/appwrite/enums/o_auth2_discord_prompt.rb +8 -0
  14. data/lib/appwrite/enums/o_auth2_github_prompt.rb +7 -0
  15. data/lib/appwrite/enums/o_auth2_kakao_prompt.rb +10 -0
  16. data/lib/appwrite/enums/o_auth2_microsoft_prompt.rb +10 -0
  17. data/lib/appwrite/enums/o_auth2_okta_prompt.rb +9 -0
  18. data/lib/appwrite/enums/o_auth2_salesforce_prompt.rb +8 -0
  19. data/lib/appwrite/enums/o_auth2_zoho_prompt.rb +7 -0
  20. data/lib/appwrite/enums/o_auth_provider.rb +3 -0
  21. data/lib/appwrite/enums/project_email_template_id.rb +2 -0
  22. data/lib/appwrite/enums/project_key_scopes.rb +4 -0
  23. data/lib/appwrite/enums/project_o_auth2_auth0_prompt.rb +9 -0
  24. data/lib/appwrite/enums/project_o_auth2_discord_prompt.rb +8 -0
  25. data/lib/appwrite/enums/project_o_auth2_git_hub_prompt.rb +7 -0
  26. data/lib/appwrite/enums/project_o_auth2_kakao_prompt.rb +10 -0
  27. data/lib/appwrite/enums/project_o_auth2_microsoft_prompt.rb +10 -0
  28. data/lib/appwrite/enums/project_o_auth2_okta_prompt.rb +9 -0
  29. data/lib/appwrite/enums/project_o_auth2_salesforce_prompt.rb +8 -0
  30. data/lib/appwrite/enums/project_o_auth2_zoho_prompt.rb +7 -0
  31. data/lib/appwrite/enums/project_o_auth_provider_id.rb +3 -0
  32. data/lib/appwrite/enums/project_policy_id.rb +2 -0
  33. data/lib/appwrite/enums/proxy_rule_deployment_resource_type.rb +1 -0
  34. data/lib/appwrite/enums/proxy_rule_protocol.rb +8 -0
  35. data/lib/appwrite/enums/runtime.rb +2 -0
  36. data/lib/appwrite/enums/tables_db_index_type.rb +1 -0
  37. data/lib/appwrite/enums/waf_rule_action.rb +11 -0
  38. data/lib/appwrite/models/account.rb +143 -0
  39. data/lib/appwrite/models/activity_event.rb +1 -0
  40. data/lib/appwrite/models/activity_event_list.rb +1 -0
  41. data/lib/appwrite/models/additional_resource.rb +1 -0
  42. data/lib/appwrite/models/algo_argon2.rb +1 -0
  43. data/lib/appwrite/models/algo_bcrypt.rb +1 -0
  44. data/lib/appwrite/models/algo_md5.rb +1 -0
  45. data/lib/appwrite/models/algo_phpass.rb +1 -0
  46. data/lib/appwrite/models/algo_scrypt.rb +1 -0
  47. data/lib/appwrite/models/algo_scrypt_modified.rb +1 -0
  48. data/lib/appwrite/models/algo_sha.rb +1 -0
  49. data/lib/appwrite/models/app.rb +1 -0
  50. data/lib/appwrite/models/app_installation.rb +2 -1
  51. data/lib/appwrite/models/app_installation_list.rb +1 -0
  52. data/lib/appwrite/models/app_key.rb +2 -1
  53. data/lib/appwrite/models/app_key_list.rb +1 -0
  54. data/lib/appwrite/models/app_scope.rb +1 -0
  55. data/lib/appwrite/models/app_scope_list.rb +1 -0
  56. data/lib/appwrite/models/app_secret.rb +2 -1
  57. data/lib/appwrite/models/app_secret_list.rb +1 -0
  58. data/lib/appwrite/models/app_secret_plaintext.rb +2 -1
  59. data/lib/appwrite/models/apps_list.rb +1 -0
  60. data/lib/appwrite/models/attribute_bigint.rb +5 -4
  61. data/lib/appwrite/models/attribute_boolean.rb +3 -2
  62. data/lib/appwrite/models/attribute_datetime.rb +3 -2
  63. data/lib/appwrite/models/attribute_email.rb +3 -2
  64. data/lib/appwrite/models/attribute_enum.rb +3 -2
  65. data/lib/appwrite/models/attribute_float.rb +5 -4
  66. data/lib/appwrite/models/attribute_integer.rb +5 -4
  67. data/lib/appwrite/models/attribute_ip.rb +3 -2
  68. data/lib/appwrite/models/attribute_line.rb +3 -2
  69. data/lib/appwrite/models/attribute_list.rb +1 -0
  70. data/lib/appwrite/models/attribute_longtext.rb +4 -3
  71. data/lib/appwrite/models/attribute_mediumtext.rb +4 -3
  72. data/lib/appwrite/models/attribute_object.rb +2 -1
  73. data/lib/appwrite/models/attribute_point.rb +3 -2
  74. data/lib/appwrite/models/attribute_polygon.rb +3 -2
  75. data/lib/appwrite/models/attribute_relationship.rb +2 -1
  76. data/lib/appwrite/models/attribute_string.rb +4 -3
  77. data/lib/appwrite/models/attribute_text.rb +4 -3
  78. data/lib/appwrite/models/attribute_url.rb +3 -2
  79. data/lib/appwrite/models/attribute_varchar.rb +4 -3
  80. data/lib/appwrite/models/attribute_vector.rb +2 -1
  81. data/lib/appwrite/models/backup_archive.rb +5 -4
  82. data/lib/appwrite/models/backup_archive_list.rb +1 -0
  83. data/lib/appwrite/models/backup_policy.rb +3 -2
  84. data/lib/appwrite/models/backup_policy_list.rb +1 -0
  85. data/lib/appwrite/models/backup_restoration.rb +2 -1
  86. data/lib/appwrite/models/backup_restoration_list.rb +1 -0
  87. data/lib/appwrite/models/billing_limits.rb +8 -8
  88. data/lib/appwrite/models/billing_plan.rb +25 -13
  89. data/lib/appwrite/models/billing_plan_addon.rb +2 -2
  90. data/lib/appwrite/models/billing_plan_addon_details.rb +2 -1
  91. data/lib/appwrite/models/billing_plan_dedicated_database_limits.rb +19 -19
  92. data/lib/appwrite/models/billing_plan_limits.rb +2 -2
  93. data/lib/appwrite/models/billing_plan_supported_addons.rb +1 -0
  94. data/lib/appwrite/models/block.rb +4 -33
  95. data/lib/appwrite/models/bucket.rb +1 -0
  96. data/lib/appwrite/models/bucket_list.rb +1 -0
  97. data/lib/appwrite/models/collection.rb +1 -0
  98. data/lib/appwrite/models/collection_list.rb +1 -0
  99. data/lib/appwrite/models/column_bigint.rb +5 -4
  100. data/lib/appwrite/models/column_boolean.rb +3 -2
  101. data/lib/appwrite/models/column_datetime.rb +3 -2
  102. data/lib/appwrite/models/column_email.rb +3 -2
  103. data/lib/appwrite/models/column_enum.rb +3 -2
  104. data/lib/appwrite/models/column_float.rb +5 -4
  105. data/lib/appwrite/models/column_index.rb +2 -1
  106. data/lib/appwrite/models/column_index_list.rb +1 -0
  107. data/lib/appwrite/models/column_integer.rb +5 -4
  108. data/lib/appwrite/models/column_ip.rb +3 -2
  109. data/lib/appwrite/models/column_line.rb +3 -2
  110. data/lib/appwrite/models/column_list.rb +1 -0
  111. data/lib/appwrite/models/column_longtext.rb +4 -3
  112. data/lib/appwrite/models/column_mediumtext.rb +4 -3
  113. data/lib/appwrite/models/column_point.rb +3 -2
  114. data/lib/appwrite/models/column_polygon.rb +3 -2
  115. data/lib/appwrite/models/column_relationship.rb +2 -1
  116. data/lib/appwrite/models/column_string.rb +4 -3
  117. data/lib/appwrite/models/column_text.rb +4 -3
  118. data/lib/appwrite/models/column_url.rb +3 -2
  119. data/lib/appwrite/models/column_varchar.rb +4 -3
  120. data/lib/appwrite/models/continent.rb +1 -0
  121. data/lib/appwrite/models/continent_list.rb +1 -0
  122. data/lib/appwrite/models/country.rb +1 -0
  123. data/lib/appwrite/models/country_list.rb +1 -0
  124. data/lib/appwrite/models/currency.rb +1 -0
  125. data/lib/appwrite/models/currency_list.rb +1 -0
  126. data/lib/appwrite/models/database.rb +10 -9
  127. data/lib/appwrite/models/database_list.rb +1 -0
  128. data/lib/appwrite/models/database_migration.rb +1 -0
  129. data/lib/appwrite/models/database_migration_list.rb +1 -0
  130. data/lib/appwrite/models/database_status.rb +6 -5
  131. data/lib/appwrite/models/database_status_connections.rb +1 -0
  132. data/lib/appwrite/models/database_status_replica.rb +3 -2
  133. data/lib/appwrite/models/database_status_volume.rb +1 -0
  134. data/lib/appwrite/models/dedicated_database.rb +22 -6
  135. data/lib/appwrite/models/dedicated_database_backup.rb +6 -5
  136. data/lib/appwrite/models/dedicated_database_backup_list.rb +1 -0
  137. data/lib/appwrite/models/dedicated_database_backup_storage.rb +1 -0
  138. data/lib/appwrite/models/dedicated_database_branch.rb +2 -1
  139. data/lib/appwrite/models/dedicated_database_branch_list.rb +1 -0
  140. data/lib/appwrite/models/dedicated_database_execution.rb +1 -0
  141. data/lib/appwrite/models/dedicated_database_execution_column.rb +1 -0
  142. data/lib/appwrite/models/dedicated_database_extensions.rb +1 -0
  143. data/lib/appwrite/models/dedicated_database_list.rb +1 -0
  144. data/lib/appwrite/models/dedicated_database_member.rb +3 -2
  145. data/lib/appwrite/models/dedicated_database_operation.rb +4 -3
  146. data/lib/appwrite/models/dedicated_database_operation_list.rb +1 -0
  147. data/lib/appwrite/models/dedicated_database_pitr_windows.rb +1 -0
  148. data/lib/appwrite/models/dedicated_database_pooler.rb +1 -0
  149. data/lib/appwrite/models/dedicated_database_replicas.rb +3 -2
  150. data/lib/appwrite/models/dedicated_database_restoration.rb +11 -5
  151. data/lib/appwrite/models/dedicated_database_restoration_list.rb +1 -0
  152. data/lib/appwrite/models/dedicated_database_specification.rb +21 -0
  153. data/lib/appwrite/models/dedicated_database_specification_list.rb +4 -8
  154. data/lib/appwrite/models/deployment.rb +1 -0
  155. data/lib/appwrite/models/deployment_list.rb +1 -0
  156. data/lib/appwrite/models/dns_record.rb +83 -0
  157. data/lib/appwrite/models/dns_records_list.rb +33 -0
  158. data/lib/appwrite/models/document.rb +1 -0
  159. data/lib/appwrite/models/document_list.rb +1 -0
  160. data/lib/appwrite/models/domain.rb +109 -0
  161. data/lib/appwrite/models/domain_price.rb +63 -0
  162. data/lib/appwrite/models/domain_prices_list.rb +33 -0
  163. data/lib/appwrite/models/domain_transfer_status.rb +59 -0
  164. data/lib/appwrite/models/domains_list.rb +33 -0
  165. data/lib/appwrite/models/email_template.rb +1 -0
  166. data/lib/appwrite/models/email_template_list.rb +1 -0
  167. data/lib/appwrite/models/embedding.rb +1 -0
  168. data/lib/appwrite/models/embedding_list.rb +1 -0
  169. data/lib/appwrite/models/ephemeral_key.rb +1 -0
  170. data/lib/appwrite/models/execution.rb +3 -1
  171. data/lib/appwrite/models/execution_list.rb +1 -0
  172. data/lib/appwrite/models/file.rb +1 -0
  173. data/lib/appwrite/models/file_list.rb +1 -0
  174. data/lib/appwrite/models/framework.rb +1 -0
  175. data/lib/appwrite/models/framework_adapter.rb +2 -1
  176. data/lib/appwrite/models/framework_list.rb +1 -0
  177. data/lib/appwrite/models/function.rb +10 -4
  178. data/lib/appwrite/models/function_list.rb +1 -0
  179. data/lib/appwrite/models/headers.rb +1 -0
  180. data/lib/appwrite/models/identity.rb +9 -3
  181. data/lib/appwrite/models/identity_list.rb +1 -0
  182. data/lib/appwrite/models/index.rb +2 -1
  183. data/lib/appwrite/models/index_list.rb +1 -0
  184. data/lib/appwrite/models/insight.rb +4 -3
  185. data/lib/appwrite/models/insight_cta.rb +1 -0
  186. data/lib/appwrite/models/insight_list.rb +1 -0
  187. data/lib/appwrite/models/jwt.rb +1 -0
  188. data/lib/appwrite/models/key.rb +1 -0
  189. data/lib/appwrite/models/key_list.rb +1 -0
  190. data/lib/appwrite/models/language.rb +1 -0
  191. data/lib/appwrite/models/language_list.rb +1 -0
  192. data/lib/appwrite/models/locale.rb +12 -11
  193. data/lib/appwrite/models/locale_code.rb +1 -0
  194. data/lib/appwrite/models/locale_code_list.rb +1 -0
  195. data/lib/appwrite/models/membership.rb +1 -0
  196. data/lib/appwrite/models/membership_list.rb +1 -0
  197. data/lib/appwrite/models/message.rb +4 -3
  198. data/lib/appwrite/models/message_list.rb +1 -0
  199. data/lib/appwrite/models/mfa_challenge.rb +1 -0
  200. data/lib/appwrite/models/mfa_challenge_secret.rb +1 -0
  201. data/lib/appwrite/models/mfa_factors.rb +1 -0
  202. data/lib/appwrite/models/mfa_recovery_codes.rb +1 -0
  203. data/lib/appwrite/models/mfa_type.rb +1 -0
  204. data/lib/appwrite/models/mock_number.rb +1 -0
  205. data/lib/appwrite/models/mock_number_list.rb +1 -0
  206. data/lib/appwrite/models/o_auth2_amazon.rb +1 -0
  207. data/lib/appwrite/models/o_auth2_apple.rb +14 -3
  208. data/lib/appwrite/models/o_auth2_appwrite.rb +1 -0
  209. data/lib/appwrite/models/o_auth2_auth0.rb +24 -0
  210. data/lib/appwrite/models/o_auth2_authentik.rb +1 -0
  211. data/lib/appwrite/models/o_auth2_autodesk.rb +1 -0
  212. data/lib/appwrite/models/o_auth2_bitbucket.rb +1 -0
  213. data/lib/appwrite/models/o_auth2_bitly.rb +1 -0
  214. data/lib/appwrite/models/o_auth2_box.rb +1 -0
  215. data/lib/appwrite/models/o_auth2_cloudflare.rb +1 -0
  216. data/lib/appwrite/models/o_auth2_dailymotion.rb +1 -0
  217. data/lib/appwrite/models/o_auth2_discord.rb +26 -3
  218. data/lib/appwrite/models/o_auth2_disqus.rb +1 -0
  219. data/lib/appwrite/models/o_auth2_dropbox.rb +1 -0
  220. data/lib/appwrite/models/o_auth2_etsy.rb +1 -0
  221. data/lib/appwrite/models/o_auth2_facebook.rb +1 -0
  222. data/lib/appwrite/models/o_auth2_figma.rb +1 -0
  223. data/lib/appwrite/models/o_auth2_fusion_auth.rb +1 -0
  224. data/lib/appwrite/models/o_auth2_github.rb +25 -3
  225. data/lib/appwrite/models/o_auth2_gitlab.rb +1 -0
  226. data/lib/appwrite/models/o_auth2_google.rb +18 -5
  227. data/lib/appwrite/models/o_auth2_hugging_face.rb +1 -0
  228. data/lib/appwrite/models/o_auth2_kakao.rb +67 -0
  229. data/lib/appwrite/models/o_auth2_keycloak.rb +1 -0
  230. data/lib/appwrite/models/o_auth2_kick.rb +1 -0
  231. data/lib/appwrite/models/o_auth2_linkedin.rb +1 -0
  232. data/lib/appwrite/models/o_auth2_microsoft.rb +25 -0
  233. data/lib/appwrite/models/o_auth2_notion.rb +1 -0
  234. data/lib/appwrite/models/o_auth2_oidc.rb +11 -8
  235. data/lib/appwrite/models/o_auth2_okta.rb +24 -0
  236. data/lib/appwrite/models/o_auth2_paypal.rb +1 -0
  237. data/lib/appwrite/models/o_auth2_podio.rb +1 -0
  238. data/lib/appwrite/models/o_auth2_provider_list.rb +1 -0
  239. data/lib/appwrite/models/o_auth2_resend.rb +1 -0
  240. data/lib/appwrite/models/o_auth2_salesforce.rb +26 -3
  241. data/lib/appwrite/models/o_auth2_slack.rb +1 -0
  242. data/lib/appwrite/models/o_auth2_spotify.rb +1 -0
  243. data/lib/appwrite/models/o_auth2_stripe.rb +1 -0
  244. data/lib/appwrite/models/o_auth2_tik_tok.rb +43 -0
  245. data/lib/appwrite/models/o_auth2_tradeshift.rb +1 -0
  246. data/lib/appwrite/models/o_auth2_twitch.rb +1 -0
  247. data/lib/appwrite/models/o_auth2_webflow.rb +43 -0
  248. data/lib/appwrite/models/o_auth2_word_press.rb +1 -0
  249. data/lib/appwrite/models/o_auth2_x.rb +1 -0
  250. data/lib/appwrite/models/o_auth2_yahoo.rb +1 -0
  251. data/lib/appwrite/models/o_auth2_yandex.rb +1 -0
  252. data/lib/appwrite/models/o_auth2_zoho.rb +25 -3
  253. data/lib/appwrite/models/o_auth2_zoom.rb +1 -0
  254. data/lib/appwrite/models/oauth2_approve.rb +1 -0
  255. data/lib/appwrite/models/oauth2_authorize.rb +1 -0
  256. data/lib/appwrite/models/oauth2_consent.rb +1 -0
  257. data/lib/appwrite/models/oauth2_consent_list.rb +1 -0
  258. data/lib/appwrite/models/oauth2_consent_token.rb +1 -0
  259. data/lib/appwrite/models/oauth2_consent_token_list.rb +1 -0
  260. data/lib/appwrite/models/oauth2_device_authorization.rb +1 -0
  261. data/lib/appwrite/models/oauth2_grant.rb +1 -0
  262. data/lib/appwrite/models/oauth2_introspection.rb +83 -0
  263. data/lib/appwrite/models/oauth2_organization.rb +1 -0
  264. data/lib/appwrite/models/oauth2_organization_list.rb +1 -0
  265. data/lib/appwrite/models/oauth2_par.rb +1 -0
  266. data/lib/appwrite/models/oauth2_project.rb +1 -0
  267. data/lib/appwrite/models/oauth2_project_list.rb +1 -0
  268. data/lib/appwrite/models/oauth2_reject.rb +1 -0
  269. data/lib/appwrite/models/oauth2_token.rb +3 -2
  270. data/lib/appwrite/models/organization.rb +21 -20
  271. data/lib/appwrite/models/passkey.rb +1 -0
  272. data/lib/appwrite/models/passkey_challenge.rb +1 -0
  273. data/lib/appwrite/models/passkey_list.rb +1 -0
  274. data/lib/appwrite/models/phone.rb +1 -0
  275. data/lib/appwrite/models/phone_list.rb +1 -0
  276. data/lib/appwrite/models/platform_android.rb +9 -3
  277. data/lib/appwrite/models/platform_apple.rb +1 -0
  278. data/lib/appwrite/models/platform_linux.rb +1 -0
  279. data/lib/appwrite/models/platform_list.rb +1 -0
  280. data/lib/appwrite/models/platform_web.rb +1 -0
  281. data/lib/appwrite/models/platform_windows.rb +1 -0
  282. data/lib/appwrite/models/policy_deny_aliased_email.rb +1 -0
  283. data/lib/appwrite/models/policy_deny_corporate_email.rb +1 -0
  284. data/lib/appwrite/models/policy_deny_disposable_email.rb +1 -0
  285. data/lib/appwrite/models/policy_deny_free_email.rb +1 -0
  286. data/lib/appwrite/models/policy_list.rb +1 -0
  287. data/lib/appwrite/models/policy_membership_privacy.rb +1 -0
  288. data/lib/appwrite/models/policy_mfa_factors.rb +1 -0
  289. data/lib/appwrite/models/policy_passkey.rb +1 -0
  290. data/lib/appwrite/models/policy_password_dictionary.rb +1 -0
  291. data/lib/appwrite/models/policy_password_history.rb +1 -0
  292. data/lib/appwrite/models/policy_password_personal_data.rb +1 -0
  293. data/lib/appwrite/models/policy_password_pwned.rb +43 -0
  294. data/lib/appwrite/models/policy_password_rotation.rb +38 -0
  295. data/lib/appwrite/models/policy_password_strength.rb +1 -0
  296. data/lib/appwrite/models/policy_session_alert.rb +1 -0
  297. data/lib/appwrite/models/policy_session_duration.rb +1 -0
  298. data/lib/appwrite/models/policy_session_invalidation.rb +1 -0
  299. data/lib/appwrite/models/policy_session_limit.rb +1 -0
  300. data/lib/appwrite/models/policy_user_limit.rb +1 -0
  301. data/lib/appwrite/models/postgres_extension.rb +1 -0
  302. data/lib/appwrite/models/presence.rb +4 -3
  303. data/lib/appwrite/models/presence_list.rb +1 -0
  304. data/lib/appwrite/models/program.rb +1 -0
  305. data/lib/appwrite/models/project.rb +35 -24
  306. data/lib/appwrite/models/project_auth_method.rb +1 -0
  307. data/lib/appwrite/models/project_list.rb +1 -0
  308. data/lib/appwrite/models/project_protocol.rb +1 -0
  309. data/lib/appwrite/models/project_service.rb +1 -0
  310. data/lib/appwrite/models/provider.rb +2 -1
  311. data/lib/appwrite/models/provider_list.rb +1 -0
  312. data/lib/appwrite/models/proxy_invalidation.rb +1 -0
  313. data/lib/appwrite/models/proxy_rule.rb +24 -4
  314. data/lib/appwrite/models/proxy_rule_list.rb +1 -0
  315. data/lib/appwrite/models/report.rb +2 -1
  316. data/lib/appwrite/models/report_list.rb +1 -0
  317. data/lib/appwrite/models/resource_token.rb +1 -0
  318. data/lib/appwrite/models/resource_token_list.rb +1 -0
  319. data/lib/appwrite/models/row.rb +1 -0
  320. data/lib/appwrite/models/row_list.rb +1 -0
  321. data/lib/appwrite/models/runtime.rb +1 -0
  322. data/lib/appwrite/models/runtime_list.rb +1 -0
  323. data/lib/appwrite/models/session.rb +1 -0
  324. data/lib/appwrite/models/session_list.rb +1 -0
  325. data/lib/appwrite/models/site.rb +1 -0
  326. data/lib/appwrite/models/site_list.rb +1 -0
  327. data/lib/appwrite/models/specification.rb +1 -0
  328. data/lib/appwrite/models/specification_list.rb +1 -0
  329. data/lib/appwrite/models/subscriber.rb +1 -0
  330. data/lib/appwrite/models/subscriber_list.rb +1 -0
  331. data/lib/appwrite/models/table.rb +1 -0
  332. data/lib/appwrite/models/table_list.rb +1 -0
  333. data/lib/appwrite/models/target.rb +2 -1
  334. data/lib/appwrite/models/target_list.rb +1 -0
  335. data/lib/appwrite/models/team.rb +1 -0
  336. data/lib/appwrite/models/team_list.rb +1 -0
  337. data/lib/appwrite/models/token.rb +1 -0
  338. data/lib/appwrite/models/token_secret.rb +1 -0
  339. data/lib/appwrite/models/topic.rb +14 -3
  340. data/lib/appwrite/models/topic_list.rb +1 -0
  341. data/lib/appwrite/models/transaction.rb +1 -0
  342. data/lib/appwrite/models/transaction_list.rb +1 -0
  343. data/lib/appwrite/models/usage_billing_plan.rb +27 -27
  344. data/lib/appwrite/models/user.rb +16 -10
  345. data/lib/appwrite/models/user_list.rb +1 -0
  346. data/lib/appwrite/models/variable.rb +1 -0
  347. data/lib/appwrite/models/variable_list.rb +1 -0
  348. data/lib/appwrite/models/vectorsdb_collection.rb +1 -0
  349. data/lib/appwrite/models/vectorsdb_collection_list.rb +1 -0
  350. data/lib/appwrite/models/waf_rule_bypass.rb +111 -0
  351. data/lib/appwrite/models/waf_rule_challenge.rb +126 -0
  352. data/lib/appwrite/models/waf_rule_deny.rb +111 -0
  353. data/lib/appwrite/models/{log_list.rb → waf_rule_list.rb} +8 -7
  354. data/lib/appwrite/models/waf_rule_rate_limit.rb +136 -0
  355. data/lib/appwrite/models/waf_rule_redirect.rb +121 -0
  356. data/lib/appwrite/models/webhook.rb +1 -0
  357. data/lib/appwrite/models/webhook_list.rb +1 -0
  358. data/lib/appwrite/query/builder.rb +361 -0
  359. data/lib/appwrite/query.rb +190 -0
  360. data/lib/appwrite/services/account.rb +409 -133
  361. data/lib/appwrite/services/activities.rb +4 -4
  362. data/lib/appwrite/services/advisor.rb +19 -18
  363. data/lib/appwrite/services/apps.rb +89 -89
  364. data/lib/appwrite/services/avatars.rb +92 -21
  365. data/lib/appwrite/services/backups.rb +30 -30
  366. data/lib/appwrite/services/databases.rb +504 -453
  367. data/lib/appwrite/services/documents_db.rb +199 -191
  368. data/lib/appwrite/services/domains.rb +2318 -0
  369. data/lib/appwrite/services/embeddings.rb +2 -2
  370. data/lib/appwrite/services/functions.rb +128 -112
  371. data/lib/appwrite/services/graphql.rb +4 -4
  372. data/lib/appwrite/services/locale.rb +49 -14
  373. data/lib/appwrite/services/messaging.rb +281 -153
  374. data/lib/appwrite/services/mongo.rb +194 -130
  375. data/lib/appwrite/services/mysql.rb +212 -144
  376. data/lib/appwrite/services/oauth2.rb +72 -27
  377. data/lib/appwrite/services/organization.rb +255 -221
  378. data/lib/appwrite/services/postgresql.rb +226 -158
  379. data/lib/appwrite/services/presences.rb +17 -16
  380. data/lib/appwrite/services/project.rb +588 -157
  381. data/lib/appwrite/services/proxy.rb +70 -23
  382. data/lib/appwrite/services/sites.rb +119 -107
  383. data/lib/appwrite/services/storage.rb +62 -59
  384. data/lib/appwrite/services/tables_db.rb +617 -558
  385. data/lib/appwrite/services/teams.rb +87 -82
  386. data/lib/appwrite/services/tokens.rb +25 -24
  387. data/lib/appwrite/services/users.rb +170 -199
  388. data/lib/appwrite/services/vectors_db.rb +185 -177
  389. data/lib/appwrite/services/waf.rb +859 -0
  390. data/lib/appwrite/services/webhooks.rb +23 -22
  391. data/lib/appwrite/topic.rb +53 -0
  392. data/lib/appwrite.rb +48 -9
  393. metadata +47 -7
  394. data/lib/appwrite/enums/organization_key_scopes.rb +0 -22
  395. data/lib/appwrite/models/dedicated_database_specification_pricing.rb +0 -42
  396. data/lib/appwrite/models/dev_key.rb +0 -62
  397. data/lib/appwrite/models/log.rb +0 -132
@@ -0,0 +1,859 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Appwrite
4
+ class Waf < Service
5
+ def initialize(client)
6
+ @client = client
7
+ end
8
+
9
+ # List WAF rules for the current project.
10
+ #
11
+ #
12
+ # @param [Array] queries Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long.
13
+ # @param [String] search Search term to filter your list results. Max length: 256 chars.
14
+ # @param [] total When set to false, the total count returned will be 0 and will not be calculated.
15
+ #
16
+ # @return [WafRuleList]
17
+ def list_rules(
18
+ queries: nil,
19
+ search: nil,
20
+ total: nil
21
+ )
22
+ api_path = '/waf/rules'
23
+
24
+ api_params = {
25
+ queries: queries,
26
+ search: search,
27
+ total: total,
28
+ }
29
+
30
+ api_headers = {
31
+ "X-Appwrite-Project": @client.get_config('project'),
32
+ "accept": 'application/json',
33
+ }
34
+
35
+ @client.call(
36
+ method: 'GET',
37
+ path: api_path,
38
+ headers: api_headers,
39
+ params: api_params,
40
+ response_type: Models::WafRuleList
41
+ )
42
+ end
43
+
44
+ # Create a bypass WAF rule. Conditions can match request attributes including
45
+ # `ip` (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`, `path`,
46
+ # `host`, `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`,
47
+ # `queryKeys`, `userAgent`, `os`, `osVersion`, `browser`, and
48
+ # `browserVersion`. Conditions on `city` and `state` require the premium Geo
49
+ # DB addon.
50
+ #
51
+ #
52
+ # @param [String] rule_id Rule ID. Choose a custom ID or pass `ID.unique()` to generate a unique one.
53
+ # @param [String] resource_type Resource type the rule applies to.
54
+ # @param [String] name Rule name.
55
+ # @param [String] resource_id Resource identifier. Leave empty for the API resource type.
56
+ # @param [String] description Optional description for the rule.
57
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
58
+ # @param [] enabled Set to false to create the rule in a disabled state.
59
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
60
+ #
61
+ # @return [WafRuleBypass]
62
+ def create_bypass_rule(
63
+ rule_id:,
64
+ resource_type:,
65
+ name:,
66
+ resource_id: nil,
67
+ description: nil,
68
+ priority: nil,
69
+ enabled: nil,
70
+ conditions: nil
71
+ )
72
+ if rule_id.nil?
73
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
74
+ end
75
+
76
+ if resource_type.nil?
77
+ raise Appwrite::Exception.new('Missing required parameter: "resourceType"')
78
+ end
79
+
80
+ if name.nil?
81
+ raise Appwrite::Exception.new('Missing required parameter: "name"')
82
+ end
83
+
84
+ api_path = '/waf/rules/bypass'
85
+
86
+ api_params = {
87
+ ruleId: rule_id,
88
+ resourceType: resource_type,
89
+ resourceId: resource_id,
90
+ name: name,
91
+ description: description,
92
+ priority: priority,
93
+ enabled: enabled,
94
+ conditions: conditions,
95
+ }
96
+
97
+ api_headers = {
98
+ "X-Appwrite-Project": @client.get_config('project'),
99
+ "content-type": 'application/json',
100
+ "accept": 'application/json',
101
+ }
102
+
103
+ @client.call(
104
+ method: 'POST',
105
+ path: api_path,
106
+ headers: api_headers,
107
+ params: api_params,
108
+ response_type: Models::WafRuleBypass
109
+ )
110
+ end
111
+
112
+ # Update a bypass WAF rule. Conditions can match request attributes including
113
+ # `ip` (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`, `path`,
114
+ # `host`, `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`,
115
+ # `queryKeys`, `userAgent`, `os`, `osVersion`, `browser`, and
116
+ # `browserVersion`. Conditions on `city` and `state` require the premium Geo
117
+ # DB addon.
118
+ #
119
+ #
120
+ # @param [String] rule_id Rule ID.
121
+ # @param [String] resource_type Resource type the rule applies to.
122
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
123
+ # @param [String] name Rule name.
124
+ # @param [String] description Optional description for the rule.
125
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
126
+ # @param [] enabled Set to false to disable the rule.
127
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
128
+ #
129
+ # @return [WafRuleBypass]
130
+ def update_bypass_rule(
131
+ rule_id:,
132
+ resource_type: nil,
133
+ resource_id: nil,
134
+ name: nil,
135
+ description: nil,
136
+ priority: nil,
137
+ enabled: nil,
138
+ conditions: nil
139
+ )
140
+ if rule_id.nil? || rule_id == ''
141
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
142
+ end
143
+
144
+ api_path = '/waf/rules/bypass/{ruleId}'
145
+ .gsub('{ruleId}', rule_id)
146
+
147
+ api_params = {
148
+ resourceType: resource_type,
149
+ resourceId: resource_id,
150
+ name: name,
151
+ description: description,
152
+ priority: priority,
153
+ enabled: enabled,
154
+ conditions: conditions,
155
+ }
156
+
157
+ api_headers = {
158
+ "X-Appwrite-Project": @client.get_config('project'),
159
+ "content-type": 'application/json',
160
+ "accept": 'application/json',
161
+ }
162
+
163
+ @client.call(
164
+ method: 'PATCH',
165
+ path: api_path,
166
+ headers: api_headers,
167
+ params: api_params,
168
+ response_type: Models::WafRuleBypass
169
+ )
170
+ end
171
+
172
+ # Create a challenge WAF rule. Use `difficulty` (1 easiest to 5 hardest) to
173
+ # tune the client-side proof-of-work cost, and `ttl` to control how long, in
174
+ # seconds, a visitor stays cleared after passing the challenge before being
175
+ # challenged again. Conditions can match request attributes including `ip`
176
+ # (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`, `path`, `host`,
177
+ # `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`, `queryKeys`,
178
+ # `userAgent`, `os`, `osVersion`, `browser`, and `browserVersion`. Conditions
179
+ # on `city` and `state` require the premium Geo DB addon.
180
+ #
181
+ #
182
+ # @param [String] rule_id Rule ID. Choose a custom ID or pass `ID.unique()` to generate a unique one.
183
+ # @param [String] resource_type Resource type the rule applies to.
184
+ # @param [String] name Rule name.
185
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
186
+ # @param [String] description Optional description for the rule.
187
+ # @param [String] challenge_type Challenge type enforced by the rule.
188
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
189
+ # @param [] enabled Set to false to create the rule in a disabled state.
190
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
191
+ # @param [Integer] difficulty Challenge difficulty from 1 (easiest) to 5 (hardest). Higher values demand more client-side proof-of-work.
192
+ # @param [Integer] ttl How long, in seconds, a visitor stays cleared after passing the challenge before being challenged again.
193
+ #
194
+ # @return [WafRuleChallenge]
195
+ def create_challenge_rule(
196
+ rule_id:,
197
+ resource_type:,
198
+ name:,
199
+ resource_id: nil,
200
+ description: nil,
201
+ challenge_type: nil,
202
+ priority: nil,
203
+ enabled: nil,
204
+ conditions: nil,
205
+ difficulty: nil,
206
+ ttl: nil
207
+ )
208
+ if rule_id.nil?
209
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
210
+ end
211
+
212
+ if resource_type.nil?
213
+ raise Appwrite::Exception.new('Missing required parameter: "resourceType"')
214
+ end
215
+
216
+ if name.nil?
217
+ raise Appwrite::Exception.new('Missing required parameter: "name"')
218
+ end
219
+
220
+ api_path = '/waf/rules/challenge'
221
+
222
+ api_params = {
223
+ ruleId: rule_id,
224
+ resourceType: resource_type,
225
+ resourceId: resource_id,
226
+ name: name,
227
+ description: description,
228
+ challengeType: challenge_type,
229
+ priority: priority,
230
+ enabled: enabled,
231
+ conditions: conditions,
232
+ difficulty: difficulty,
233
+ ttl: ttl,
234
+ }
235
+
236
+ api_headers = {
237
+ "X-Appwrite-Project": @client.get_config('project'),
238
+ "content-type": 'application/json',
239
+ "accept": 'application/json',
240
+ }
241
+
242
+ @client.call(
243
+ method: 'POST',
244
+ path: api_path,
245
+ headers: api_headers,
246
+ params: api_params,
247
+ response_type: Models::WafRuleChallenge
248
+ )
249
+ end
250
+
251
+ # Update a challenge WAF rule. Use `difficulty` (1 easiest to 5 hardest) to
252
+ # tune the client-side proof-of-work cost, and `ttl` to control how long, in
253
+ # seconds, a visitor stays cleared after passing the challenge before being
254
+ # challenged again. Conditions can match request attributes including `ip`
255
+ # (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`, `path`, `host`,
256
+ # `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`, `queryKeys`,
257
+ # `userAgent`, `os`, `osVersion`, `browser`, and `browserVersion`. Conditions
258
+ # on `city` and `state` require the premium Geo DB addon.
259
+ #
260
+ #
261
+ # @param [String] rule_id Rule ID.
262
+ # @param [String] resource_type Resource type the rule applies to.
263
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
264
+ # @param [String] name Rule name.
265
+ # @param [String] description Optional description for the rule.
266
+ # @param [String] challenge_type Challenge type enforced by the rule.
267
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
268
+ # @param [] enabled Set to false to disable the rule.
269
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
270
+ # @param [Integer] difficulty Challenge difficulty from 1 (easiest) to 5 (hardest). Higher values demand more client-side proof-of-work.
271
+ # @param [Integer] ttl How long, in seconds, a visitor stays cleared after passing the challenge before being challenged again.
272
+ #
273
+ # @return [WafRuleChallenge]
274
+ def update_challenge_rule(
275
+ rule_id:,
276
+ resource_type: nil,
277
+ resource_id: nil,
278
+ name: nil,
279
+ description: nil,
280
+ challenge_type: nil,
281
+ priority: nil,
282
+ enabled: nil,
283
+ conditions: nil,
284
+ difficulty: nil,
285
+ ttl: nil
286
+ )
287
+ if rule_id.nil? || rule_id == ''
288
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
289
+ end
290
+
291
+ api_path = '/waf/rules/challenge/{ruleId}'
292
+ .gsub('{ruleId}', rule_id)
293
+
294
+ api_params = {
295
+ resourceType: resource_type,
296
+ resourceId: resource_id,
297
+ name: name,
298
+ description: description,
299
+ challengeType: challenge_type,
300
+ priority: priority,
301
+ enabled: enabled,
302
+ conditions: conditions,
303
+ difficulty: difficulty,
304
+ ttl: ttl,
305
+ }
306
+
307
+ api_headers = {
308
+ "X-Appwrite-Project": @client.get_config('project'),
309
+ "content-type": 'application/json',
310
+ "accept": 'application/json',
311
+ }
312
+
313
+ @client.call(
314
+ method: 'PATCH',
315
+ path: api_path,
316
+ headers: api_headers,
317
+ params: api_params,
318
+ response_type: Models::WafRuleChallenge
319
+ )
320
+ end
321
+
322
+ # Create a deny WAF rule. Conditions can match request attributes including
323
+ # `ip` (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`, `path`,
324
+ # `host`, `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`,
325
+ # `queryKeys`, `userAgent`, `os`, `osVersion`, `browser`, and
326
+ # `browserVersion`. Conditions on `city` and `state` require the premium Geo
327
+ # DB addon.
328
+ #
329
+ #
330
+ # @param [String] rule_id Rule ID. Choose a custom ID or pass `ID.unique()` to generate a unique one.
331
+ # @param [String] resource_type Resource type the rule applies to.
332
+ # @param [String] name Rule name.
333
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
334
+ # @param [String] description Optional description for the rule.
335
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
336
+ # @param [] enabled Set to false to create the rule in a disabled state.
337
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
338
+ #
339
+ # @return [WafRuleDeny]
340
+ def create_deny_rule(
341
+ rule_id:,
342
+ resource_type:,
343
+ name:,
344
+ resource_id: nil,
345
+ description: nil,
346
+ priority: nil,
347
+ enabled: nil,
348
+ conditions: nil
349
+ )
350
+ if rule_id.nil?
351
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
352
+ end
353
+
354
+ if resource_type.nil?
355
+ raise Appwrite::Exception.new('Missing required parameter: "resourceType"')
356
+ end
357
+
358
+ if name.nil?
359
+ raise Appwrite::Exception.new('Missing required parameter: "name"')
360
+ end
361
+
362
+ api_path = '/waf/rules/deny'
363
+
364
+ api_params = {
365
+ ruleId: rule_id,
366
+ resourceType: resource_type,
367
+ resourceId: resource_id,
368
+ name: name,
369
+ description: description,
370
+ priority: priority,
371
+ enabled: enabled,
372
+ conditions: conditions,
373
+ }
374
+
375
+ api_headers = {
376
+ "X-Appwrite-Project": @client.get_config('project'),
377
+ "content-type": 'application/json',
378
+ "accept": 'application/json',
379
+ }
380
+
381
+ @client.call(
382
+ method: 'POST',
383
+ path: api_path,
384
+ headers: api_headers,
385
+ params: api_params,
386
+ response_type: Models::WafRuleDeny
387
+ )
388
+ end
389
+
390
+ # Update a deny WAF rule. Conditions can match request attributes including
391
+ # `ip` (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`, `path`,
392
+ # `host`, `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`,
393
+ # `queryKeys`, `userAgent`, `os`, `osVersion`, `browser`, and
394
+ # `browserVersion`. Conditions on `city` and `state` require the premium Geo
395
+ # DB addon.
396
+ #
397
+ #
398
+ # @param [String] rule_id Rule ID.
399
+ # @param [String] resource_type Resource type the rule applies to.
400
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
401
+ # @param [String] name Rule name.
402
+ # @param [String] description Optional description for the rule.
403
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
404
+ # @param [] enabled Set to false to disable the rule.
405
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
406
+ #
407
+ # @return [WafRuleDeny]
408
+ def update_deny_rule(
409
+ rule_id:,
410
+ resource_type: nil,
411
+ resource_id: nil,
412
+ name: nil,
413
+ description: nil,
414
+ priority: nil,
415
+ enabled: nil,
416
+ conditions: nil
417
+ )
418
+ if rule_id.nil? || rule_id == ''
419
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
420
+ end
421
+
422
+ api_path = '/waf/rules/deny/{ruleId}'
423
+ .gsub('{ruleId}', rule_id)
424
+
425
+ api_params = {
426
+ resourceType: resource_type,
427
+ resourceId: resource_id,
428
+ name: name,
429
+ description: description,
430
+ priority: priority,
431
+ enabled: enabled,
432
+ conditions: conditions,
433
+ }
434
+
435
+ api_headers = {
436
+ "X-Appwrite-Project": @client.get_config('project'),
437
+ "content-type": 'application/json',
438
+ "accept": 'application/json',
439
+ }
440
+
441
+ @client.call(
442
+ method: 'PATCH',
443
+ path: api_path,
444
+ headers: api_headers,
445
+ params: api_params,
446
+ response_type: Models::WafRuleDeny
447
+ )
448
+ end
449
+
450
+ # Create a rate limit WAF rule. Use `key` to choose the counter: `ip` limits
451
+ # per client IP, while `userId` limits per authenticated user (requests
452
+ # without an authenticated user skip `userId` rules). Conditions can match
453
+ # request attributes including `ip` (plain IPs or CIDR blocks like
454
+ # `10.0.0.0/8`), `method`, `path`, `host`, `country`, `continent`,
455
+ # `headers.&lt;name&gt;`, `query.&lt;key&gt;`, `queryKeys`, `userAgent`, `os`,
456
+ # `osVersion`, `browser`, and `browserVersion`. Conditions on `city` and
457
+ # `state` require the premium Geo DB addon.
458
+ #
459
+ #
460
+ # @param [String] rule_id Rule ID. Choose a custom ID or pass `ID.unique()` to generate a unique one.
461
+ # @param [String] resource_type Resource type the rule applies to.
462
+ # @param [String] name Rule name.
463
+ # @param [Integer] limit Maximum number of matching requests allowed in the configured interval.
464
+ # @param [Integer] interval Interval in seconds used for rate limiting.
465
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
466
+ # @param [String] description Optional description for the rule.
467
+ # @param [String] key Rate limit key. Use `ip` to limit per client IP or `userId` to limit per authenticated user. Requests without an authenticated user skip `userId` rules.
468
+ # @param [String] strategy Rate limit strategy. `fixedWindow` counts requests in discrete intervals, `slidingWindow` weights the previous interval for smoother limiting, and `tokenBucket` refills allowance continuously to permit short bursts.
469
+ # @param [Integer] max_bucket_size Maximum number of tokens the bucket can hold for the `tokenBucket` strategy, controlling how large a burst is allowed. The sustained refill rate is `limit / interval`. Defaults to `limit` when omitted. Ignored by other strategies.
470
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
471
+ # @param [] enabled Set to false to create the rule in a disabled state.
472
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
473
+ #
474
+ # @return [WafRuleRateLimit]
475
+ def create_rate_limit_rule(
476
+ rule_id:,
477
+ resource_type:,
478
+ name:,
479
+ limit:,
480
+ interval:,
481
+ resource_id: nil,
482
+ description: nil,
483
+ key: nil,
484
+ strategy: nil,
485
+ max_bucket_size: nil,
486
+ priority: nil,
487
+ enabled: nil,
488
+ conditions: nil
489
+ )
490
+ if rule_id.nil?
491
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
492
+ end
493
+
494
+ if resource_type.nil?
495
+ raise Appwrite::Exception.new('Missing required parameter: "resourceType"')
496
+ end
497
+
498
+ if name.nil?
499
+ raise Appwrite::Exception.new('Missing required parameter: "name"')
500
+ end
501
+
502
+ if limit.nil?
503
+ raise Appwrite::Exception.new('Missing required parameter: "limit"')
504
+ end
505
+
506
+ if interval.nil?
507
+ raise Appwrite::Exception.new('Missing required parameter: "interval"')
508
+ end
509
+
510
+ api_path = '/waf/rules/rate-limit'
511
+
512
+ api_params = {
513
+ ruleId: rule_id,
514
+ resourceType: resource_type,
515
+ resourceId: resource_id,
516
+ name: name,
517
+ description: description,
518
+ limit: limit,
519
+ interval: interval,
520
+ key: key,
521
+ strategy: strategy,
522
+ maxBucketSize: max_bucket_size,
523
+ priority: priority,
524
+ enabled: enabled,
525
+ conditions: conditions,
526
+ }
527
+
528
+ api_headers = {
529
+ "X-Appwrite-Project": @client.get_config('project'),
530
+ "content-type": 'application/json',
531
+ "accept": 'application/json',
532
+ }
533
+
534
+ @client.call(
535
+ method: 'POST',
536
+ path: api_path,
537
+ headers: api_headers,
538
+ params: api_params,
539
+ response_type: Models::WafRuleRateLimit
540
+ )
541
+ end
542
+
543
+ # Update a rate limit WAF rule. Use `key` to choose the counter: `ip` limits
544
+ # per client IP, while `userId` limits per authenticated user (requests
545
+ # without an authenticated user skip `userId` rules). Conditions can match
546
+ # request attributes including `ip` (plain IPs or CIDR blocks like
547
+ # `10.0.0.0/8`), `method`, `path`, `host`, `country`, `continent`,
548
+ # `headers.&lt;name&gt;`, `query.&lt;key&gt;`, `queryKeys`, `userAgent`, `os`,
549
+ # `osVersion`, `browser`, and `browserVersion`. Conditions on `city` and
550
+ # `state` require the premium Geo DB addon.
551
+ #
552
+ #
553
+ # @param [String] rule_id Rule ID.
554
+ # @param [String] resource_type Resource type the rule applies to.
555
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
556
+ # @param [String] name Rule name.
557
+ # @param [String] description Optional description for the rule.
558
+ # @param [Integer] limit Maximum number of matching requests allowed in the configured interval.
559
+ # @param [Integer] interval Interval in seconds used for rate limiting.
560
+ # @param [String] key Rate limit key. Use `ip` to limit per client IP or `userId` to limit per authenticated user. Requests without an authenticated user skip `userId` rules.
561
+ # @param [Integer] max_bucket_size Maximum number of tokens the bucket can hold for the `tokenBucket` strategy, controlling how large a burst is allowed. The sustained refill rate is `limit / interval`. Ignored by other strategies. The strategy itself cannot be changed after creation.
562
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
563
+ # @param [] enabled Set to false to disable the rule.
564
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
565
+ #
566
+ # @return [WafRuleRateLimit]
567
+ def update_rate_limit_rule(
568
+ rule_id:,
569
+ resource_type: nil,
570
+ resource_id: nil,
571
+ name: nil,
572
+ description: nil,
573
+ limit: nil,
574
+ interval: nil,
575
+ key: nil,
576
+ max_bucket_size: nil,
577
+ priority: nil,
578
+ enabled: nil,
579
+ conditions: nil
580
+ )
581
+ if rule_id.nil? || rule_id == ''
582
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
583
+ end
584
+
585
+ api_path = '/waf/rules/rate-limit/{ruleId}'
586
+ .gsub('{ruleId}', rule_id)
587
+
588
+ api_params = {
589
+ resourceType: resource_type,
590
+ resourceId: resource_id,
591
+ name: name,
592
+ description: description,
593
+ limit: limit,
594
+ interval: interval,
595
+ key: key,
596
+ maxBucketSize: max_bucket_size,
597
+ priority: priority,
598
+ enabled: enabled,
599
+ conditions: conditions,
600
+ }
601
+
602
+ api_headers = {
603
+ "X-Appwrite-Project": @client.get_config('project'),
604
+ "content-type": 'application/json',
605
+ "accept": 'application/json',
606
+ }
607
+
608
+ @client.call(
609
+ method: 'PATCH',
610
+ path: api_path,
611
+ headers: api_headers,
612
+ params: api_params,
613
+ response_type: Models::WafRuleRateLimit
614
+ )
615
+ end
616
+
617
+ # Create a redirect WAF rule. Conditions can match request attributes
618
+ # including `ip` (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`,
619
+ # `path`, `host`, `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`,
620
+ # `queryKeys`, `userAgent`, `os`, `osVersion`, `browser`, and
621
+ # `browserVersion`. Conditions on `city` and `state` require the premium Geo
622
+ # DB addon.
623
+ #
624
+ #
625
+ # @param [String] rule_id Rule ID. Choose a custom ID or pass `ID.unique()` to generate a unique one.
626
+ # @param [String] resource_type Resource type the rule applies to.
627
+ # @param [String] name Rule name.
628
+ # @param [String] location Location used for redirect responses.
629
+ # @param [Integer] status_code Integer status code used for redirect responses.
630
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
631
+ # @param [String] description Optional description for the rule.
632
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
633
+ # @param [] enabled Set to false to create the rule in a disabled state.
634
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
635
+ #
636
+ # @return [WafRuleRedirect]
637
+ def create_redirect_rule(
638
+ rule_id:,
639
+ resource_type:,
640
+ name:,
641
+ location:,
642
+ status_code:,
643
+ resource_id: nil,
644
+ description: nil,
645
+ priority: nil,
646
+ enabled: nil,
647
+ conditions: nil
648
+ )
649
+ if rule_id.nil?
650
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
651
+ end
652
+
653
+ if resource_type.nil?
654
+ raise Appwrite::Exception.new('Missing required parameter: "resourceType"')
655
+ end
656
+
657
+ if name.nil?
658
+ raise Appwrite::Exception.new('Missing required parameter: "name"')
659
+ end
660
+
661
+ if location.nil?
662
+ raise Appwrite::Exception.new('Missing required parameter: "location"')
663
+ end
664
+
665
+ if status_code.nil?
666
+ raise Appwrite::Exception.new('Missing required parameter: "statusCode"')
667
+ end
668
+
669
+ api_path = '/waf/rules/redirect'
670
+
671
+ api_params = {
672
+ ruleId: rule_id,
673
+ resourceType: resource_type,
674
+ resourceId: resource_id,
675
+ name: name,
676
+ description: description,
677
+ location: location,
678
+ statusCode: status_code,
679
+ priority: priority,
680
+ enabled: enabled,
681
+ conditions: conditions,
682
+ }
683
+
684
+ api_headers = {
685
+ "X-Appwrite-Project": @client.get_config('project'),
686
+ "content-type": 'application/json',
687
+ "accept": 'application/json',
688
+ }
689
+
690
+ @client.call(
691
+ method: 'POST',
692
+ path: api_path,
693
+ headers: api_headers,
694
+ params: api_params,
695
+ response_type: Models::WafRuleRedirect
696
+ )
697
+ end
698
+
699
+ # Update a redirect WAF rule. Conditions can match request attributes
700
+ # including `ip` (plain IPs or CIDR blocks like `10.0.0.0/8`), `method`,
701
+ # `path`, `host`, `country`, `continent`, `headers.&lt;name&gt;`, `query.&lt;key&gt;`,
702
+ # `queryKeys`, `userAgent`, `os`, `osVersion`, `browser`, and
703
+ # `browserVersion`. Conditions on `city` and `state` require the premium Geo
704
+ # DB addon.
705
+ #
706
+ #
707
+ # @param [String] rule_id Rule ID.
708
+ # @param [String] resource_type Resource type the rule applies to.
709
+ # @param [String] resource_id Resource identifier. Required for functions and sites.
710
+ # @param [String] name Rule name.
711
+ # @param [String] description Optional description for the rule.
712
+ # @param [String] location Location used for redirect responses.
713
+ # @param [Integer] status_code Integer status code used for redirect responses.
714
+ # @param [Integer] priority Evaluation priority. Lower numbers run earlier.
715
+ # @param [] enabled Set to false to disable the rule.
716
+ # @param [Array] conditions Array of condition strings generated using the WAF Condition builder. Maximum of 100 conditions are allowed, each 4096 characters long.
717
+ #
718
+ # @return [WafRuleRedirect]
719
+ def update_redirect_rule(
720
+ rule_id:,
721
+ resource_type: nil,
722
+ resource_id: nil,
723
+ name: nil,
724
+ description: nil,
725
+ location: nil,
726
+ status_code: nil,
727
+ priority: nil,
728
+ enabled: nil,
729
+ conditions: nil
730
+ )
731
+ if rule_id.nil? || rule_id == ''
732
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
733
+ end
734
+
735
+ api_path = '/waf/rules/redirect/{ruleId}'
736
+ .gsub('{ruleId}', rule_id)
737
+
738
+ api_params = {
739
+ resourceType: resource_type,
740
+ resourceId: resource_id,
741
+ name: name,
742
+ description: description,
743
+ location: location,
744
+ statusCode: status_code,
745
+ priority: priority,
746
+ enabled: enabled,
747
+ conditions: conditions,
748
+ }
749
+
750
+ api_headers = {
751
+ "X-Appwrite-Project": @client.get_config('project'),
752
+ "content-type": 'application/json',
753
+ "accept": 'application/json',
754
+ }
755
+
756
+ @client.call(
757
+ method: 'PATCH',
758
+ path: api_path,
759
+ headers: api_headers,
760
+ params: api_params,
761
+ response_type: Models::WafRuleRedirect
762
+ )
763
+ end
764
+
765
+ # Get a WAF rule by its ID.
766
+ #
767
+ #
768
+ # @param [String] rule_id Rule ID.
769
+ #
770
+ # @return [WafRuleBypass, WafRuleDeny, WafRuleChallenge, WafRuleRateLimit, WafRuleRedirect]
771
+ def get_rule(
772
+ rule_id:
773
+ )
774
+ if rule_id.nil? || rule_id == ''
775
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
776
+ end
777
+
778
+ api_path = '/waf/rules/{ruleId}'
779
+ .gsub('{ruleId}', rule_id)
780
+
781
+ api_params = {}
782
+
783
+ api_headers = {
784
+ "X-Appwrite-Project": @client.get_config('project'),
785
+ "accept": 'application/json',
786
+ }
787
+
788
+ response = @client.call(
789
+ method: 'GET',
790
+ path: api_path,
791
+ headers: api_headers,
792
+ params: api_params,
793
+ )
794
+
795
+ unless response.is_a?(Hash)
796
+ raise Exception, "Expected object response when hydrating a response model"
797
+ end
798
+
799
+ if response['action'] == 'bypass'
800
+
801
+ return Models::WafRuleBypass.from(map: response)
802
+ end
803
+
804
+ if response['action'] == 'deny'
805
+
806
+ return Models::WafRuleDeny.from(map: response)
807
+ end
808
+
809
+ if response['action'] == 'challenge'
810
+
811
+ return Models::WafRuleChallenge.from(map: response)
812
+ end
813
+
814
+ if response['action'] == 'rateLimit'
815
+
816
+ return Models::WafRuleRateLimit.from(map: response)
817
+ end
818
+
819
+ if response['action'] == 'redirect'
820
+
821
+ return Models::WafRuleRedirect.from(map: response)
822
+ end
823
+
824
+ raise Exception, "Unable to match response to any expected response model"
825
+ end
826
+
827
+ # Delete a WAF rule.
828
+ #
829
+ #
830
+ # @param [String] rule_id Rule ID.
831
+ #
832
+ # @return []
833
+ def delete_rule(
834
+ rule_id:
835
+ )
836
+ if rule_id.nil? || rule_id == ''
837
+ raise Appwrite::Exception.new('Missing required parameter: "ruleId"')
838
+ end
839
+
840
+ api_path = '/waf/rules/{ruleId}'
841
+ .gsub('{ruleId}', rule_id)
842
+
843
+ api_params = {}
844
+
845
+ api_headers = {
846
+ "X-Appwrite-Project": @client.get_config('project'),
847
+ "content-type": 'application/json',
848
+ "accept": 'application/json',
849
+ }
850
+
851
+ @client.call(
852
+ method: 'DELETE',
853
+ path: api_path,
854
+ headers: api_headers,
855
+ params: api_params,
856
+ )
857
+ end
858
+ end
859
+ end