appwrite-cli 13.0.0-rc.2 → 13.0.0-rc.3

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 (718) hide show
  1. package/.github/workflows/{npm-publish.yml → publish.yml} +1 -1
  2. package/CHANGELOG.md +106 -101
  3. package/LICENSE.md +2 -2
  4. package/README.md +36 -59
  5. package/cli.ts +152 -0
  6. package/dist/bundle.cjs +4613 -3653
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +145 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/index.d.ts +10 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +7 -142
  14. package/dist/index.js.map +1 -1
  15. package/dist/lib/client.d.ts.map +1 -1
  16. package/dist/lib/client.js +7 -6
  17. package/dist/lib/client.js.map +1 -1
  18. package/dist/lib/commands/config.d.ts +562 -0
  19. package/dist/lib/commands/config.d.ts.map +1 -0
  20. package/dist/lib/commands/config.js +416 -0
  21. package/dist/lib/commands/config.js.map +1 -0
  22. package/dist/lib/commands/db.d.ts +34 -0
  23. package/dist/lib/commands/db.d.ts.map +1 -0
  24. package/dist/lib/commands/db.js +247 -0
  25. package/dist/lib/commands/db.js.map +1 -0
  26. package/dist/lib/commands/errors.d.ts +68 -0
  27. package/dist/lib/commands/errors.d.ts.map +1 -0
  28. package/dist/lib/commands/errors.js +72 -0
  29. package/dist/lib/commands/errors.js.map +1 -0
  30. package/dist/lib/commands/init.d.ts.map +1 -1
  31. package/dist/lib/commands/init.js +15 -14
  32. package/dist/lib/commands/init.js.map +1 -1
  33. package/dist/lib/commands/pull.d.ts +104 -2
  34. package/dist/lib/commands/pull.d.ts.map +1 -1
  35. package/dist/lib/commands/pull.js +470 -281
  36. package/dist/lib/commands/pull.js.map +1 -1
  37. package/dist/lib/commands/push.d.ts +106 -0
  38. package/dist/lib/commands/push.d.ts.map +1 -1
  39. package/dist/lib/commands/push.js +1257 -1628
  40. package/dist/lib/commands/push.js.map +1 -1
  41. package/dist/lib/commands/run.js +1 -1
  42. package/dist/lib/commands/run.js.map +1 -1
  43. package/dist/lib/commands/schema.d.ts +59 -0
  44. package/dist/lib/commands/schema.d.ts.map +1 -0
  45. package/dist/lib/commands/schema.js +86 -0
  46. package/dist/lib/commands/schema.js.map +1 -0
  47. package/dist/lib/commands/services/account.d.ts.map +1 -1
  48. package/dist/lib/commands/services/account.js +86 -64
  49. package/dist/lib/commands/services/account.js.map +1 -1
  50. package/dist/lib/commands/services/console.d.ts.map +1 -1
  51. package/dist/lib/commands/services/console.js +4 -17
  52. package/dist/lib/commands/services/console.js.map +1 -1
  53. package/dist/lib/commands/services/databases.d.ts.map +1 -1
  54. package/dist/lib/commands/services/databases.js +160 -152
  55. package/dist/lib/commands/services/databases.js.map +1 -1
  56. package/dist/lib/commands/services/functions.d.ts.map +1 -1
  57. package/dist/lib/commands/services/functions.js +41 -33
  58. package/dist/lib/commands/services/functions.js.map +1 -1
  59. package/dist/lib/commands/services/graphql.d.ts.map +1 -1
  60. package/dist/lib/commands/services/graphql.js +3 -3
  61. package/dist/lib/commands/services/graphql.js.map +1 -1
  62. package/dist/lib/commands/services/health.d.ts.map +1 -1
  63. package/dist/lib/commands/services/health.js +24 -24
  64. package/dist/lib/commands/services/health.js.map +1 -1
  65. package/dist/lib/commands/services/locale.d.ts.map +1 -1
  66. package/dist/lib/commands/services/locale.js +9 -9
  67. package/dist/lib/commands/services/locale.js.map +1 -1
  68. package/dist/lib/commands/services/messaging.d.ts.map +1 -1
  69. package/dist/lib/commands/services/messaging.js +59 -59
  70. package/dist/lib/commands/services/messaging.js.map +1 -1
  71. package/dist/lib/commands/services/migrations.d.ts.map +1 -1
  72. package/dist/lib/commands/services/migrations.js +19 -19
  73. package/dist/lib/commands/services/migrations.js.map +1 -1
  74. package/dist/lib/commands/services/project.d.ts.map +1 -1
  75. package/dist/lib/commands/services/project.js +8 -8
  76. package/dist/lib/commands/services/project.js.map +1 -1
  77. package/dist/lib/commands/services/projects.d.ts.map +1 -1
  78. package/dist/lib/commands/services/projects.js +64 -64
  79. package/dist/lib/commands/services/projects.js.map +1 -1
  80. package/dist/lib/commands/services/proxy.d.ts.map +1 -1
  81. package/dist/lib/commands/services/proxy.js +11 -11
  82. package/dist/lib/commands/services/proxy.js.map +1 -1
  83. package/dist/lib/commands/services/sites.d.ts.map +1 -1
  84. package/dist/lib/commands/services/sites.js +41 -33
  85. package/dist/lib/commands/services/sites.js.map +1 -1
  86. package/dist/lib/commands/services/storage.d.ts.map +1 -1
  87. package/dist/lib/commands/services/storage.js +38 -16
  88. package/dist/lib/commands/services/storage.js.map +1 -1
  89. package/dist/lib/commands/services/tables-db.d.ts +3 -0
  90. package/dist/lib/commands/services/tables-db.d.ts.map +1 -0
  91. package/dist/lib/commands/services/{tablesdb.js → tables-db.js} +171 -163
  92. package/dist/lib/commands/services/tables-db.js.map +1 -0
  93. package/dist/lib/commands/services/teams.d.ts.map +1 -1
  94. package/dist/lib/commands/services/teams.js +16 -16
  95. package/dist/lib/commands/services/teams.js.map +1 -1
  96. package/dist/lib/commands/services/tokens.d.ts.map +1 -1
  97. package/dist/lib/commands/services/tokens.js +6 -6
  98. package/dist/lib/commands/services/tokens.js.map +1 -1
  99. package/dist/lib/commands/services/users.d.ts.map +1 -1
  100. package/dist/lib/commands/services/users.js +54 -54
  101. package/dist/lib/commands/services/users.js.map +1 -1
  102. package/dist/lib/commands/services/vcs.d.ts.map +1 -1
  103. package/dist/lib/commands/services/vcs.js +13 -13
  104. package/dist/lib/commands/services/vcs.js.map +1 -1
  105. package/dist/lib/commands/types.d.ts.map +1 -1
  106. package/dist/lib/commands/types.js +1 -1
  107. package/dist/lib/commands/types.js.map +1 -1
  108. package/dist/lib/commands/update.d.ts.map +1 -1
  109. package/dist/lib/commands/update.js +9 -8
  110. package/dist/lib/commands/update.js.map +1 -1
  111. package/dist/lib/commands/utils/attributes.d.ts +47 -0
  112. package/dist/lib/commands/utils/attributes.d.ts.map +1 -0
  113. package/dist/lib/commands/utils/attributes.js +514 -0
  114. package/dist/lib/commands/utils/attributes.js.map +1 -0
  115. package/dist/lib/commands/utils/change-approval.d.ts +25 -0
  116. package/dist/lib/commands/utils/change-approval.d.ts.map +1 -0
  117. package/dist/lib/commands/utils/change-approval.js +129 -0
  118. package/dist/lib/commands/utils/change-approval.js.map +1 -0
  119. package/dist/lib/commands/utils/database-sync.d.ts +10 -0
  120. package/dist/lib/commands/utils/database-sync.d.ts.map +1 -0
  121. package/dist/lib/commands/utils/database-sync.js +136 -0
  122. package/dist/lib/commands/utils/database-sync.js.map +1 -0
  123. package/dist/lib/commands/utils/deployment.d.ts +34 -0
  124. package/dist/lib/commands/utils/deployment.d.ts.map +1 -0
  125. package/dist/lib/commands/utils/deployment.js +109 -0
  126. package/dist/lib/commands/utils/deployment.js.map +1 -0
  127. package/dist/lib/commands/utils/error-formatter.d.ts +19 -0
  128. package/dist/lib/commands/utils/error-formatter.d.ts.map +1 -0
  129. package/dist/lib/commands/utils/error-formatter.js +333 -0
  130. package/dist/lib/commands/utils/error-formatter.js.map +1 -0
  131. package/dist/lib/commands/utils/pools.d.ts +16 -0
  132. package/dist/lib/commands/utils/pools.d.ts.map +1 -0
  133. package/dist/lib/commands/utils/pools.js +198 -0
  134. package/dist/lib/commands/utils/pools.js.map +1 -0
  135. package/dist/lib/config.d.ts +27 -26
  136. package/dist/lib/config.d.ts.map +1 -1
  137. package/dist/lib/config.js +8 -45
  138. package/dist/lib/config.js.map +1 -1
  139. package/dist/lib/constants.d.ts +14 -0
  140. package/dist/lib/constants.d.ts.map +1 -0
  141. package/dist/lib/constants.js +19 -0
  142. package/dist/lib/constants.js.map +1 -0
  143. package/dist/lib/emulation/docker.d.ts +4 -4
  144. package/dist/lib/emulation/docker.d.ts.map +1 -1
  145. package/dist/lib/emulation/docker.js +80 -67
  146. package/dist/lib/emulation/docker.js.map +1 -1
  147. package/dist/lib/parser.d.ts.map +1 -1
  148. package/dist/lib/parser.js +11 -10
  149. package/dist/lib/parser.js.map +1 -1
  150. package/dist/lib/questions.d.ts.map +1 -1
  151. package/dist/lib/questions.js +20 -20
  152. package/dist/lib/questions.js.map +1 -1
  153. package/dist/lib/sdks.d.ts.map +1 -1
  154. package/dist/lib/sdks.js +10 -11
  155. package/dist/lib/sdks.js.map +1 -1
  156. package/dist/lib/types.d.ts +0 -214
  157. package/dist/lib/types.d.ts.map +1 -1
  158. package/dist/lib/utils.d.ts +3 -0
  159. package/dist/lib/utils.d.ts.map +1 -1
  160. package/dist/lib/utils.js +42 -2
  161. package/dist/lib/utils.js.map +1 -1
  162. package/dist/package.json +12 -11
  163. package/docs/examples/account/create-anonymous-session.md +1 -0
  164. package/docs/examples/account/create-email-password-session.md +3 -0
  165. package/docs/examples/account/create-email-token.md +3 -0
  166. package/docs/examples/account/create-email-verification.md +2 -0
  167. package/docs/examples/account/create-jwt.md +1 -0
  168. package/docs/examples/account/create-magic-url-token.md +3 -0
  169. package/docs/examples/account/create-mfa-authenticator.md +2 -0
  170. package/docs/examples/account/create-mfa-challenge.md +2 -0
  171. package/docs/examples/account/create-mfa-recovery-codes.md +1 -0
  172. package/docs/examples/account/create-o-auth-2-session.md +2 -0
  173. package/docs/examples/account/create-o-auth-2-token.md +2 -0
  174. package/docs/examples/account/create-phone-token.md +3 -0
  175. package/docs/examples/account/create-phone-verification.md +1 -0
  176. package/docs/examples/account/create-push-target.md +3 -0
  177. package/docs/examples/account/create-recovery.md +3 -0
  178. package/docs/examples/account/create-session.md +3 -0
  179. package/docs/examples/account/create-verification.md +2 -0
  180. package/docs/examples/account/create.md +4 -0
  181. package/docs/examples/account/delete-identity.md +2 -0
  182. package/docs/examples/account/delete-mfa-authenticator.md +2 -0
  183. package/docs/examples/account/delete-push-target.md +2 -0
  184. package/docs/examples/account/delete-session.md +2 -0
  185. package/docs/examples/account/delete-sessions.md +1 -0
  186. package/docs/examples/account/delete.md +1 -0
  187. package/docs/examples/account/get-mfa-recovery-codes.md +1 -0
  188. package/docs/examples/account/get-prefs.md +1 -0
  189. package/docs/examples/account/get-session.md +2 -0
  190. package/docs/examples/account/get.md +1 -0
  191. package/docs/examples/account/list-identities.md +1 -0
  192. package/docs/examples/account/list-logs.md +1 -0
  193. package/docs/examples/account/list-mfa-factors.md +1 -0
  194. package/docs/examples/account/list-sessions.md +1 -0
  195. package/docs/examples/account/update-email-verification.md +3 -0
  196. package/docs/examples/account/update-email.md +3 -0
  197. package/docs/examples/account/update-magic-url-session.md +3 -0
  198. package/docs/examples/account/update-mfa-authenticator.md +3 -0
  199. package/docs/examples/account/update-mfa-challenge.md +3 -0
  200. package/docs/examples/account/update-mfa-recovery-codes.md +1 -0
  201. package/docs/examples/account/update-mfa.md +2 -0
  202. package/docs/examples/account/update-name.md +2 -0
  203. package/docs/examples/account/update-password.md +2 -0
  204. package/docs/examples/account/update-phone-session.md +3 -0
  205. package/docs/examples/account/update-phone-verification.md +3 -0
  206. package/docs/examples/account/update-phone.md +3 -0
  207. package/docs/examples/account/update-prefs.md +2 -0
  208. package/docs/examples/account/update-push-target.md +3 -0
  209. package/docs/examples/account/update-recovery.md +4 -0
  210. package/docs/examples/account/update-session.md +2 -0
  211. package/docs/examples/account/update-status.md +1 -0
  212. package/docs/examples/account/update-verification.md +3 -0
  213. package/docs/examples/console/get-resource.md +3 -0
  214. package/docs/examples/console/variables.md +1 -0
  215. package/docs/examples/databases/create-boolean-attribute.md +5 -0
  216. package/docs/examples/databases/create-collection.md +4 -0
  217. package/docs/examples/databases/create-datetime-attribute.md +5 -0
  218. package/docs/examples/databases/create-document.md +5 -0
  219. package/docs/examples/databases/create-documents.md +4 -0
  220. package/docs/examples/databases/create-email-attribute.md +5 -0
  221. package/docs/examples/databases/create-enum-attribute.md +6 -0
  222. package/docs/examples/databases/create-float-attribute.md +5 -0
  223. package/docs/examples/databases/create-index.md +6 -0
  224. package/docs/examples/databases/create-integer-attribute.md +5 -0
  225. package/docs/examples/databases/create-ip-attribute.md +5 -0
  226. package/docs/examples/databases/create-line-attribute.md +5 -0
  227. package/docs/examples/databases/create-operations.md +2 -0
  228. package/docs/examples/databases/create-point-attribute.md +5 -0
  229. package/docs/examples/databases/create-polygon-attribute.md +5 -0
  230. package/docs/examples/databases/create-relationship-attribute.md +5 -0
  231. package/docs/examples/databases/create-string-attribute.md +6 -0
  232. package/docs/examples/databases/create-transaction.md +1 -0
  233. package/docs/examples/databases/create-url-attribute.md +5 -0
  234. package/docs/examples/databases/create.md +3 -0
  235. package/docs/examples/databases/decrement-document-attribute.md +5 -0
  236. package/docs/examples/databases/delete-attribute.md +4 -0
  237. package/docs/examples/databases/delete-collection.md +3 -0
  238. package/docs/examples/databases/delete-document.md +4 -0
  239. package/docs/examples/databases/delete-documents.md +3 -0
  240. package/docs/examples/databases/delete-index.md +4 -0
  241. package/docs/examples/databases/delete-transaction.md +2 -0
  242. package/docs/examples/databases/delete.md +2 -0
  243. package/docs/examples/databases/get-attribute.md +4 -0
  244. package/docs/examples/databases/get-collection-usage.md +3 -0
  245. package/docs/examples/databases/get-collection.md +3 -0
  246. package/docs/examples/databases/get-document.md +4 -0
  247. package/docs/examples/databases/get-index.md +4 -0
  248. package/docs/examples/databases/get-transaction.md +2 -0
  249. package/docs/examples/databases/get-usage.md +2 -0
  250. package/docs/examples/databases/get.md +2 -0
  251. package/docs/examples/databases/increment-document-attribute.md +5 -0
  252. package/docs/examples/databases/list-attributes.md +3 -0
  253. package/docs/examples/databases/list-collection-logs.md +3 -0
  254. package/docs/examples/databases/list-collections.md +2 -0
  255. package/docs/examples/databases/list-document-logs.md +4 -0
  256. package/docs/examples/databases/list-documents.md +3 -0
  257. package/docs/examples/databases/list-indexes.md +3 -0
  258. package/docs/examples/databases/list-logs.md +2 -0
  259. package/docs/examples/databases/list-transactions.md +1 -0
  260. package/docs/examples/databases/list-usage.md +1 -0
  261. package/docs/examples/databases/list.md +1 -0
  262. package/docs/examples/databases/update-boolean-attribute.md +6 -0
  263. package/docs/examples/databases/update-collection.md +4 -0
  264. package/docs/examples/databases/update-datetime-attribute.md +6 -0
  265. package/docs/examples/databases/update-document.md +4 -0
  266. package/docs/examples/databases/update-documents.md +3 -0
  267. package/docs/examples/databases/update-email-attribute.md +6 -0
  268. package/docs/examples/databases/update-enum-attribute.md +7 -0
  269. package/docs/examples/databases/update-float-attribute.md +6 -0
  270. package/docs/examples/databases/update-integer-attribute.md +6 -0
  271. package/docs/examples/databases/update-ip-attribute.md +6 -0
  272. package/docs/examples/databases/update-line-attribute.md +5 -0
  273. package/docs/examples/databases/update-point-attribute.md +5 -0
  274. package/docs/examples/databases/update-polygon-attribute.md +5 -0
  275. package/docs/examples/databases/update-relationship-attribute.md +4 -0
  276. package/docs/examples/databases/update-string-attribute.md +6 -0
  277. package/docs/examples/databases/update-transaction.md +2 -0
  278. package/docs/examples/databases/update-url-attribute.md +6 -0
  279. package/docs/examples/databases/update.md +3 -0
  280. package/docs/examples/databases/upsert-document.md +4 -0
  281. package/docs/examples/databases/upsert-documents.md +4 -0
  282. package/docs/examples/functions/create-deployment.md +4 -0
  283. package/docs/examples/functions/create-duplicate-deployment.md +3 -0
  284. package/docs/examples/functions/create-execution.md +2 -0
  285. package/docs/examples/functions/create-template-deployment.md +7 -0
  286. package/docs/examples/functions/create-variable.md +4 -0
  287. package/docs/examples/functions/create-vcs-deployment.md +4 -0
  288. package/docs/examples/functions/create.md +4 -0
  289. package/docs/examples/functions/delete-deployment.md +3 -0
  290. package/docs/examples/functions/delete-execution.md +3 -0
  291. package/docs/examples/functions/delete-variable.md +3 -0
  292. package/docs/examples/functions/delete.md +2 -0
  293. package/docs/examples/functions/get-deployment-download.md +3 -0
  294. package/docs/examples/functions/get-deployment.md +3 -0
  295. package/docs/examples/functions/get-execution.md +3 -0
  296. package/docs/examples/functions/get-template.md +2 -0
  297. package/docs/examples/functions/get-usage.md +2 -0
  298. package/docs/examples/functions/get-variable.md +3 -0
  299. package/docs/examples/functions/get.md +2 -0
  300. package/docs/examples/functions/list-deployments.md +2 -0
  301. package/docs/examples/functions/list-executions.md +2 -0
  302. package/docs/examples/functions/list-runtimes.md +1 -0
  303. package/docs/examples/functions/list-specifications.md +1 -0
  304. package/docs/examples/functions/list-templates.md +1 -0
  305. package/docs/examples/functions/list-usage.md +1 -0
  306. package/docs/examples/functions/list-variables.md +2 -0
  307. package/docs/examples/functions/list.md +1 -0
  308. package/docs/examples/functions/update-deployment-status.md +3 -0
  309. package/docs/examples/functions/update-function-deployment.md +3 -0
  310. package/docs/examples/functions/update-variable.md +4 -0
  311. package/docs/examples/functions/update.md +3 -0
  312. package/docs/examples/graphql/mutation.md +2 -0
  313. package/docs/examples/graphql/query.md +2 -0
  314. package/docs/examples/health/get-antivirus.md +1 -0
  315. package/docs/examples/health/get-cache.md +1 -0
  316. package/docs/examples/health/get-certificate.md +1 -0
  317. package/docs/examples/health/get-db.md +1 -0
  318. package/docs/examples/health/get-failed-jobs.md +2 -0
  319. package/docs/examples/health/get-pub-sub.md +1 -0
  320. package/docs/examples/health/get-queue-builds.md +1 -0
  321. package/docs/examples/health/get-queue-certificates.md +1 -0
  322. package/docs/examples/health/get-queue-databases.md +1 -0
  323. package/docs/examples/health/get-queue-deletes.md +1 -0
  324. package/docs/examples/health/get-queue-functions.md +1 -0
  325. package/docs/examples/health/get-queue-logs.md +1 -0
  326. package/docs/examples/health/get-queue-mails.md +1 -0
  327. package/docs/examples/health/get-queue-messaging.md +1 -0
  328. package/docs/examples/health/get-queue-migrations.md +1 -0
  329. package/docs/examples/health/get-queue-stats-resources.md +1 -0
  330. package/docs/examples/health/get-queue-usage.md +1 -0
  331. package/docs/examples/health/get-queue-webhooks.md +1 -0
  332. package/docs/examples/health/get-storage-local.md +1 -0
  333. package/docs/examples/health/get-storage.md +1 -0
  334. package/docs/examples/health/get-time.md +1 -0
  335. package/docs/examples/health/get.md +1 -0
  336. package/docs/examples/locale/get.md +1 -0
  337. package/docs/examples/locale/list-codes.md +1 -0
  338. package/docs/examples/locale/list-continents.md +1 -0
  339. package/docs/examples/locale/list-countries-eu.md +1 -0
  340. package/docs/examples/locale/list-countries-phones.md +1 -0
  341. package/docs/examples/locale/list-countries.md +1 -0
  342. package/docs/examples/locale/list-currencies.md +1 -0
  343. package/docs/examples/locale/list-languages.md +1 -0
  344. package/docs/examples/messaging/create-apns-provider.md +3 -0
  345. package/docs/examples/messaging/create-email.md +4 -0
  346. package/docs/examples/messaging/create-fcm-provider.md +3 -0
  347. package/docs/examples/messaging/create-mailgun-provider.md +3 -0
  348. package/docs/examples/messaging/create-msg-91-provider.md +3 -0
  349. package/docs/examples/messaging/create-push.md +2 -0
  350. package/docs/examples/messaging/create-resend-provider.md +3 -0
  351. package/docs/examples/messaging/create-sendgrid-provider.md +3 -0
  352. package/docs/examples/messaging/create-sms.md +3 -0
  353. package/docs/examples/messaging/create-smtp-provider.md +4 -0
  354. package/docs/examples/messaging/create-subscriber.md +4 -0
  355. package/docs/examples/messaging/create-telesign-provider.md +3 -0
  356. package/docs/examples/messaging/create-textmagic-provider.md +3 -0
  357. package/docs/examples/messaging/create-topic.md +3 -0
  358. package/docs/examples/messaging/create-twilio-provider.md +3 -0
  359. package/docs/examples/messaging/create-vonage-provider.md +3 -0
  360. package/docs/examples/messaging/delete-provider.md +2 -0
  361. package/docs/examples/messaging/delete-subscriber.md +3 -0
  362. package/docs/examples/messaging/delete-topic.md +2 -0
  363. package/docs/examples/messaging/delete.md +2 -0
  364. package/docs/examples/messaging/get-message.md +2 -0
  365. package/docs/examples/messaging/get-provider.md +2 -0
  366. package/docs/examples/messaging/get-subscriber.md +3 -0
  367. package/docs/examples/messaging/get-topic.md +2 -0
  368. package/docs/examples/messaging/list-message-logs.md +2 -0
  369. package/docs/examples/messaging/list-messages.md +1 -0
  370. package/docs/examples/messaging/list-provider-logs.md +2 -0
  371. package/docs/examples/messaging/list-providers.md +1 -0
  372. package/docs/examples/messaging/list-subscriber-logs.md +2 -0
  373. package/docs/examples/messaging/list-subscribers.md +2 -0
  374. package/docs/examples/messaging/list-targets.md +2 -0
  375. package/docs/examples/messaging/list-topic-logs.md +2 -0
  376. package/docs/examples/messaging/list-topics.md +1 -0
  377. package/docs/examples/messaging/update-apns-provider.md +2 -0
  378. package/docs/examples/messaging/update-email.md +2 -0
  379. package/docs/examples/messaging/update-fcm-provider.md +2 -0
  380. package/docs/examples/messaging/update-mailgun-provider.md +2 -0
  381. package/docs/examples/messaging/update-msg-91-provider.md +2 -0
  382. package/docs/examples/messaging/update-push.md +2 -0
  383. package/docs/examples/messaging/update-resend-provider.md +2 -0
  384. package/docs/examples/messaging/update-sendgrid-provider.md +2 -0
  385. package/docs/examples/messaging/update-sms.md +2 -0
  386. package/docs/examples/messaging/update-smtp-provider.md +2 -0
  387. package/docs/examples/messaging/update-telesign-provider.md +2 -0
  388. package/docs/examples/messaging/update-textmagic-provider.md +2 -0
  389. package/docs/examples/messaging/update-topic.md +2 -0
  390. package/docs/examples/messaging/update-twilio-provider.md +2 -0
  391. package/docs/examples/messaging/update-vonage-provider.md +2 -0
  392. package/docs/examples/migrations/create-appwrite-migration.md +5 -0
  393. package/docs/examples/migrations/create-csv-export.md +3 -0
  394. package/docs/examples/migrations/create-csv-import.md +4 -0
  395. package/docs/examples/migrations/create-firebase-migration.md +3 -0
  396. package/docs/examples/migrations/create-n-host-migration.md +8 -0
  397. package/docs/examples/migrations/create-supabase-migration.md +7 -0
  398. package/docs/examples/migrations/delete.md +2 -0
  399. package/docs/examples/migrations/get-appwrite-report.md +5 -0
  400. package/docs/examples/migrations/get-firebase-report.md +3 -0
  401. package/docs/examples/migrations/get-n-host-report.md +8 -0
  402. package/docs/examples/migrations/get-supabase-report.md +7 -0
  403. package/docs/examples/migrations/get.md +2 -0
  404. package/docs/examples/migrations/list.md +1 -0
  405. package/docs/examples/migrations/retry.md +2 -0
  406. package/docs/examples/project/create-variable.md +3 -0
  407. package/docs/examples/project/delete-variable.md +2 -0
  408. package/docs/examples/project/get-usage.md +3 -0
  409. package/docs/examples/project/get-variable.md +2 -0
  410. package/docs/examples/project/list-variables.md +1 -0
  411. package/docs/examples/project/update-variable.md +3 -0
  412. package/docs/examples/projects/create-dev-key.md +4 -0
  413. package/docs/examples/projects/create-jwt.md +3 -0
  414. package/docs/examples/projects/create-key.md +4 -0
  415. package/docs/examples/projects/create-platform.md +4 -0
  416. package/docs/examples/projects/create-smtp-test.md +6 -0
  417. package/docs/examples/projects/create-webhook.md +6 -0
  418. package/docs/examples/projects/create.md +4 -0
  419. package/docs/examples/projects/delete-dev-key.md +3 -0
  420. package/docs/examples/projects/delete-email-template.md +4 -0
  421. package/docs/examples/projects/delete-key.md +3 -0
  422. package/docs/examples/projects/delete-platform.md +3 -0
  423. package/docs/examples/projects/delete-sms-template.md +4 -0
  424. package/docs/examples/projects/delete-webhook.md +3 -0
  425. package/docs/examples/projects/delete.md +2 -0
  426. package/docs/examples/projects/get-dev-key.md +3 -0
  427. package/docs/examples/projects/get-email-template.md +4 -0
  428. package/docs/examples/projects/get-key.md +3 -0
  429. package/docs/examples/projects/get-platform.md +3 -0
  430. package/docs/examples/projects/get-sms-template.md +4 -0
  431. package/docs/examples/projects/get-webhook.md +3 -0
  432. package/docs/examples/projects/get.md +2 -0
  433. package/docs/examples/projects/list-dev-keys.md +2 -0
  434. package/docs/examples/projects/list-keys.md +2 -0
  435. package/docs/examples/projects/list-platforms.md +2 -0
  436. package/docs/examples/projects/list-webhooks.md +2 -0
  437. package/docs/examples/projects/list.md +1 -0
  438. package/docs/examples/projects/update-api-status-all.md +3 -0
  439. package/docs/examples/projects/update-api-status.md +4 -0
  440. package/docs/examples/projects/update-auth-duration.md +3 -0
  441. package/docs/examples/projects/update-auth-limit.md +3 -0
  442. package/docs/examples/projects/update-auth-password-dictionary.md +3 -0
  443. package/docs/examples/projects/update-auth-password-history.md +3 -0
  444. package/docs/examples/projects/update-auth-sessions-limit.md +3 -0
  445. package/docs/examples/projects/update-auth-status.md +4 -0
  446. package/docs/examples/projects/update-dev-key.md +5 -0
  447. package/docs/examples/projects/update-email-template.md +6 -0
  448. package/docs/examples/projects/update-key.md +5 -0
  449. package/docs/examples/projects/update-memberships-privacy.md +5 -0
  450. package/docs/examples/projects/update-mock-numbers.md +3 -0
  451. package/docs/examples/projects/update-o-auth-2.md +3 -0
  452. package/docs/examples/projects/update-personal-data-check.md +3 -0
  453. package/docs/examples/projects/update-platform.md +4 -0
  454. package/docs/examples/projects/update-service-status-all.md +3 -0
  455. package/docs/examples/projects/update-service-status.md +4 -0
  456. package/docs/examples/projects/update-session-alerts.md +3 -0
  457. package/docs/examples/projects/update-session-invalidation.md +3 -0
  458. package/docs/examples/projects/update-sms-template.md +5 -0
  459. package/docs/examples/projects/update-smtp.md +3 -0
  460. package/docs/examples/projects/update-team.md +3 -0
  461. package/docs/examples/projects/update-webhook-signature.md +3 -0
  462. package/docs/examples/projects/update-webhook.md +7 -0
  463. package/docs/examples/projects/update.md +3 -0
  464. package/docs/examples/proxy/create-api-rule.md +2 -0
  465. package/docs/examples/proxy/create-function-rule.md +3 -0
  466. package/docs/examples/proxy/create-redirect-rule.md +6 -0
  467. package/docs/examples/proxy/create-site-rule.md +3 -0
  468. package/docs/examples/proxy/delete-rule.md +2 -0
  469. package/docs/examples/proxy/get-rule.md +2 -0
  470. package/docs/examples/proxy/list-rules.md +1 -0
  471. package/docs/examples/proxy/update-rule-verification.md +2 -0
  472. package/docs/examples/sites/create-deployment.md +4 -0
  473. package/docs/examples/sites/create-duplicate-deployment.md +3 -0
  474. package/docs/examples/sites/create-template-deployment.md +7 -0
  475. package/docs/examples/sites/create-variable.md +4 -0
  476. package/docs/examples/sites/create-vcs-deployment.md +4 -0
  477. package/docs/examples/sites/create.md +5 -0
  478. package/docs/examples/sites/delete-deployment.md +3 -0
  479. package/docs/examples/sites/delete-log.md +3 -0
  480. package/docs/examples/sites/delete-variable.md +3 -0
  481. package/docs/examples/sites/delete.md +2 -0
  482. package/docs/examples/sites/get-deployment-download.md +3 -0
  483. package/docs/examples/sites/get-deployment.md +3 -0
  484. package/docs/examples/sites/get-log.md +3 -0
  485. package/docs/examples/sites/get-template.md +2 -0
  486. package/docs/examples/sites/get-usage.md +2 -0
  487. package/docs/examples/sites/get-variable.md +3 -0
  488. package/docs/examples/sites/get.md +2 -0
  489. package/docs/examples/sites/list-deployments.md +2 -0
  490. package/docs/examples/sites/list-frameworks.md +1 -0
  491. package/docs/examples/sites/list-logs.md +2 -0
  492. package/docs/examples/sites/list-specifications.md +1 -0
  493. package/docs/examples/sites/list-templates.md +1 -0
  494. package/docs/examples/sites/list-usage.md +1 -0
  495. package/docs/examples/sites/list-variables.md +2 -0
  496. package/docs/examples/sites/list.md +1 -0
  497. package/docs/examples/sites/update-deployment-status.md +3 -0
  498. package/docs/examples/sites/update-site-deployment.md +3 -0
  499. package/docs/examples/sites/update-variable.md +4 -0
  500. package/docs/examples/sites/update.md +4 -0
  501. package/docs/examples/storage/create-bucket.md +3 -0
  502. package/docs/examples/storage/create-file.md +4 -0
  503. package/docs/examples/storage/delete-bucket.md +2 -0
  504. package/docs/examples/storage/delete-file.md +3 -0
  505. package/docs/examples/storage/get-bucket-usage.md +2 -0
  506. package/docs/examples/storage/get-bucket.md +2 -0
  507. package/docs/examples/storage/get-file-download.md +3 -0
  508. package/docs/examples/storage/get-file-preview.md +3 -0
  509. package/docs/examples/storage/get-file-view.md +3 -0
  510. package/docs/examples/storage/get-file.md +3 -0
  511. package/docs/examples/storage/get-usage.md +1 -0
  512. package/docs/examples/storage/list-buckets.md +1 -0
  513. package/docs/examples/storage/list-files.md +2 -0
  514. package/docs/examples/storage/update-bucket.md +3 -0
  515. package/docs/examples/storage/update-file.md +3 -0
  516. package/docs/examples/tablesdb/create-boolean-column.md +5 -0
  517. package/docs/examples/tablesdb/create-datetime-column.md +5 -0
  518. package/docs/examples/tablesdb/create-email-column.md +5 -0
  519. package/docs/examples/tablesdb/create-enum-column.md +6 -0
  520. package/docs/examples/tablesdb/create-float-column.md +5 -0
  521. package/docs/examples/tablesdb/create-index.md +6 -0
  522. package/docs/examples/tablesdb/create-integer-column.md +5 -0
  523. package/docs/examples/tablesdb/create-ip-column.md +5 -0
  524. package/docs/examples/tablesdb/create-line-column.md +5 -0
  525. package/docs/examples/tablesdb/create-operations.md +2 -0
  526. package/docs/examples/tablesdb/create-point-column.md +5 -0
  527. package/docs/examples/tablesdb/create-polygon-column.md +5 -0
  528. package/docs/examples/tablesdb/create-relationship-column.md +5 -0
  529. package/docs/examples/tablesdb/create-row.md +5 -0
  530. package/docs/examples/tablesdb/create-rows.md +4 -0
  531. package/docs/examples/tablesdb/create-string-column.md +6 -0
  532. package/docs/examples/tablesdb/create-table.md +4 -0
  533. package/docs/examples/tablesdb/create-transaction.md +1 -0
  534. package/docs/examples/tablesdb/create-url-column.md +5 -0
  535. package/docs/examples/tablesdb/create.md +3 -0
  536. package/docs/examples/tablesdb/decrement-row-column.md +5 -0
  537. package/docs/examples/tablesdb/delete-column.md +4 -0
  538. package/docs/examples/tablesdb/delete-index.md +4 -0
  539. package/docs/examples/tablesdb/delete-row.md +4 -0
  540. package/docs/examples/tablesdb/delete-rows.md +3 -0
  541. package/docs/examples/tablesdb/delete-table.md +3 -0
  542. package/docs/examples/tablesdb/delete-transaction.md +2 -0
  543. package/docs/examples/tablesdb/delete.md +2 -0
  544. package/docs/examples/tablesdb/get-column.md +4 -0
  545. package/docs/examples/tablesdb/get-index.md +4 -0
  546. package/docs/examples/tablesdb/get-row.md +4 -0
  547. package/docs/examples/tablesdb/get-table-usage.md +3 -0
  548. package/docs/examples/tablesdb/get-table.md +3 -0
  549. package/docs/examples/tablesdb/get-transaction.md +2 -0
  550. package/docs/examples/tablesdb/get-usage.md +2 -0
  551. package/docs/examples/tablesdb/get.md +2 -0
  552. package/docs/examples/tablesdb/increment-row-column.md +5 -0
  553. package/docs/examples/tablesdb/list-columns.md +3 -0
  554. package/docs/examples/tablesdb/list-indexes.md +3 -0
  555. package/docs/examples/tablesdb/list-row-logs.md +4 -0
  556. package/docs/examples/tablesdb/list-rows.md +3 -0
  557. package/docs/examples/tablesdb/list-table-logs.md +3 -0
  558. package/docs/examples/tablesdb/list-tables.md +2 -0
  559. package/docs/examples/tablesdb/list-transactions.md +1 -0
  560. package/docs/examples/tablesdb/list-usage.md +1 -0
  561. package/docs/examples/tablesdb/list.md +1 -0
  562. package/docs/examples/tablesdb/update-boolean-column.md +6 -0
  563. package/docs/examples/tablesdb/update-datetime-column.md +6 -0
  564. package/docs/examples/tablesdb/update-email-column.md +6 -0
  565. package/docs/examples/tablesdb/update-enum-column.md +7 -0
  566. package/docs/examples/tablesdb/update-float-column.md +6 -0
  567. package/docs/examples/tablesdb/update-integer-column.md +6 -0
  568. package/docs/examples/tablesdb/update-ip-column.md +6 -0
  569. package/docs/examples/tablesdb/update-line-column.md +5 -0
  570. package/docs/examples/tablesdb/update-point-column.md +5 -0
  571. package/docs/examples/tablesdb/update-polygon-column.md +5 -0
  572. package/docs/examples/tablesdb/update-relationship-column.md +4 -0
  573. package/docs/examples/tablesdb/update-row.md +4 -0
  574. package/docs/examples/tablesdb/update-rows.md +3 -0
  575. package/docs/examples/tablesdb/update-string-column.md +6 -0
  576. package/docs/examples/tablesdb/update-table.md +4 -0
  577. package/docs/examples/tablesdb/update-transaction.md +2 -0
  578. package/docs/examples/tablesdb/update-url-column.md +6 -0
  579. package/docs/examples/tablesdb/update.md +3 -0
  580. package/docs/examples/tablesdb/upsert-row.md +4 -0
  581. package/docs/examples/tablesdb/upsert-rows.md +4 -0
  582. package/docs/examples/teams/create-membership.md +3 -0
  583. package/docs/examples/teams/create.md +3 -0
  584. package/docs/examples/teams/delete-membership.md +3 -0
  585. package/docs/examples/teams/delete.md +2 -0
  586. package/docs/examples/teams/get-membership.md +3 -0
  587. package/docs/examples/teams/get-prefs.md +2 -0
  588. package/docs/examples/teams/get.md +2 -0
  589. package/docs/examples/teams/list-logs.md +2 -0
  590. package/docs/examples/teams/list-memberships.md +2 -0
  591. package/docs/examples/teams/list.md +1 -0
  592. package/docs/examples/teams/update-membership-status.md +5 -0
  593. package/docs/examples/teams/update-membership.md +4 -0
  594. package/docs/examples/teams/update-name.md +3 -0
  595. package/docs/examples/teams/update-prefs.md +3 -0
  596. package/docs/examples/tokens/create-file-token.md +3 -0
  597. package/docs/examples/tokens/delete.md +2 -0
  598. package/docs/examples/tokens/get.md +2 -0
  599. package/docs/examples/tokens/list.md +3 -0
  600. package/docs/examples/tokens/update.md +2 -0
  601. package/docs/examples/users/create-argon-2-user.md +4 -0
  602. package/docs/examples/users/create-bcrypt-user.md +4 -0
  603. package/docs/examples/users/create-jwt.md +2 -0
  604. package/docs/examples/users/create-md-5-user.md +4 -0
  605. package/docs/examples/users/create-mfa-recovery-codes.md +2 -0
  606. package/docs/examples/users/create-ph-pass-user.md +4 -0
  607. package/docs/examples/users/create-scrypt-modified-user.md +7 -0
  608. package/docs/examples/users/create-scrypt-user.md +9 -0
  609. package/docs/examples/users/create-session.md +2 -0
  610. package/docs/examples/users/create-sha-user.md +4 -0
  611. package/docs/examples/users/create-target.md +5 -0
  612. package/docs/examples/users/create-token.md +2 -0
  613. package/docs/examples/users/create.md +2 -0
  614. package/docs/examples/users/delete-identity.md +2 -0
  615. package/docs/examples/users/delete-mfa-authenticator.md +3 -0
  616. package/docs/examples/users/delete-session.md +3 -0
  617. package/docs/examples/users/delete-sessions.md +2 -0
  618. package/docs/examples/users/delete-target.md +3 -0
  619. package/docs/examples/users/delete.md +2 -0
  620. package/docs/examples/users/get-mfa-recovery-codes.md +2 -0
  621. package/docs/examples/users/get-prefs.md +2 -0
  622. package/docs/examples/users/get-target.md +3 -0
  623. package/docs/examples/users/get-usage.md +1 -0
  624. package/docs/examples/users/get.md +2 -0
  625. package/docs/examples/users/list-identities.md +1 -0
  626. package/docs/examples/users/list-logs.md +2 -0
  627. package/docs/examples/users/list-memberships.md +2 -0
  628. package/docs/examples/users/list-mfa-factors.md +2 -0
  629. package/docs/examples/users/list-sessions.md +2 -0
  630. package/docs/examples/users/list-targets.md +2 -0
  631. package/docs/examples/users/list.md +1 -0
  632. package/docs/examples/users/update-email-verification.md +3 -0
  633. package/docs/examples/users/update-email.md +3 -0
  634. package/docs/examples/users/update-labels.md +3 -0
  635. package/docs/examples/users/update-mfa-recovery-codes.md +2 -0
  636. package/docs/examples/users/update-mfa.md +3 -0
  637. package/docs/examples/users/update-name.md +3 -0
  638. package/docs/examples/users/update-password.md +3 -0
  639. package/docs/examples/users/update-phone-verification.md +3 -0
  640. package/docs/examples/users/update-phone.md +3 -0
  641. package/docs/examples/users/update-prefs.md +3 -0
  642. package/docs/examples/users/update-status.md +3 -0
  643. package/docs/examples/users/update-target.md +3 -0
  644. package/docs/examples/vcs/create-repository-detection.md +4 -0
  645. package/docs/examples/vcs/create-repository.md +4 -0
  646. package/docs/examples/vcs/delete-installation.md +2 -0
  647. package/docs/examples/vcs/get-installation.md +2 -0
  648. package/docs/examples/vcs/get-repository-contents.md +3 -0
  649. package/docs/examples/vcs/get-repository.md +3 -0
  650. package/docs/examples/vcs/list-installations.md +1 -0
  651. package/docs/examples/vcs/list-repositories.md +3 -0
  652. package/docs/examples/vcs/list-repository-branches.md +3 -0
  653. package/docs/examples/vcs/update-external-deployments.md +4 -0
  654. package/index.ts +25 -165
  655. package/install.ps1 +2 -2
  656. package/install.sh +1 -1
  657. package/lib/client.ts +14 -6
  658. package/lib/commands/config.ts +494 -0
  659. package/lib/commands/db.ts +324 -0
  660. package/lib/commands/errors.ts +93 -0
  661. package/lib/commands/init.ts +25 -14
  662. package/lib/commands/pull.ts +683 -420
  663. package/lib/commands/push.ts +1677 -2404
  664. package/lib/commands/run.ts +1 -1
  665. package/lib/commands/schema.ts +122 -0
  666. package/lib/commands/services/account.ts +200 -385
  667. package/lib/commands/services/console.ts +13 -34
  668. package/lib/commands/services/databases.ts +298 -1215
  669. package/lib/commands/services/functions.ts +115 -434
  670. package/lib/commands/services/graphql.ts +5 -2
  671. package/lib/commands/services/health.ts +87 -149
  672. package/lib/commands/services/locale.ts +36 -33
  673. package/lib/commands/services/messaging.ts +180 -999
  674. package/lib/commands/services/migrations.ts +54 -226
  675. package/lib/commands/services/project.ts +19 -23
  676. package/lib/commands/services/projects.ts +182 -714
  677. package/lib/commands/services/proxy.ts +30 -58
  678. package/lib/commands/services/sites.ts +107 -379
  679. package/lib/commands/services/storage.ts +93 -302
  680. package/lib/commands/services/tables-db.ts +1150 -0
  681. package/lib/commands/services/teams.ts +48 -110
  682. package/lib/commands/services/tokens.ts +16 -28
  683. package/lib/commands/services/users.ts +133 -403
  684. package/lib/commands/services/vcs.ts +48 -151
  685. package/lib/commands/types.ts +1 -1
  686. package/lib/commands/update.ts +13 -22
  687. package/lib/commands/utils/attributes.ts +719 -0
  688. package/lib/commands/utils/change-approval.ts +186 -0
  689. package/lib/commands/utils/database-sync.ts +180 -0
  690. package/lib/commands/utils/deployment.ts +184 -0
  691. package/lib/commands/utils/error-formatter.ts +417 -0
  692. package/lib/commands/utils/pools.ts +355 -0
  693. package/lib/config.ts +46 -82
  694. package/lib/constants.ts +22 -0
  695. package/lib/emulation/docker.ts +101 -87
  696. package/lib/parser.ts +16 -11
  697. package/lib/questions.ts +20 -21
  698. package/lib/sdks.ts +15 -11
  699. package/lib/types.ts +0 -229
  700. package/lib/utils.ts +45 -4
  701. package/package.json +12 -11
  702. package/scoop/appwrite.config.json +29 -19
  703. package/.github/workflows/build-verify.yml +0 -71
  704. package/bun.lock +0 -625
  705. package/dist/lib/commands/services/avatars.d.ts +0 -3
  706. package/dist/lib/commands/services/avatars.d.ts.map +0 -1
  707. package/dist/lib/commands/services/avatars.js +0 -118
  708. package/dist/lib/commands/services/avatars.js.map +0 -1
  709. package/dist/lib/commands/services/tablesdb.d.ts +0 -3
  710. package/dist/lib/commands/services/tablesdb.d.ts.map +0 -1
  711. package/dist/lib/commands/services/tablesdb.js.map +0 -1
  712. package/dist/scripts/generate-commands.d.ts +0 -2
  713. package/dist/scripts/generate-commands.d.ts.map +0 -1
  714. package/dist/scripts/generate-commands.js +0 -398
  715. package/dist/scripts/generate-commands.js.map +0 -1
  716. package/lib/commands/services/avatars.ts +0 -400
  717. package/lib/commands/services/tablesdb.ts +0 -1928
  718. package/scripts/generate-commands.ts +0 -539
@@ -0,0 +1,719 @@
1
+ import chalk from "chalk";
2
+ import { getDatabasesService } from "../../services.js";
3
+ import { KeysAttributes } from "../../config.js";
4
+ import { log, success, cliConfig, drawTable } from "../../parser.js";
5
+ import { Pools } from "./pools.js";
6
+ import inquirer from "inquirer";
7
+
8
+ const changeableKeys = [
9
+ "status",
10
+ "required",
11
+ "xdefault",
12
+ "elements",
13
+ "min",
14
+ "max",
15
+ "default",
16
+ "error",
17
+ ];
18
+
19
+ export interface AttributeChange {
20
+ key: string;
21
+ attribute: any;
22
+ reason: string;
23
+ action: string;
24
+ }
25
+
26
+ export interface Collection {
27
+ $id: string;
28
+ databaseId: string;
29
+ name: string;
30
+ attributes?: any[];
31
+ indexes?: any[];
32
+ columns?: any[];
33
+ [key: string]: any;
34
+ }
35
+
36
+ const questionPushChanges = [
37
+ {
38
+ type: "input",
39
+ name: "changes",
40
+ message: 'Type "YES" to confirm or "NO" to cancel:',
41
+ },
42
+ ];
43
+
44
+ const questionPushChangesConfirmation = [
45
+ {
46
+ type: "input",
47
+ name: "changes",
48
+ message:
49
+ 'Incorrect answer. Please type "YES" to confirm or "NO" to cancel:',
50
+ },
51
+ ];
52
+
53
+ export class Attributes {
54
+ private pools: Pools;
55
+ private skipConfirmation: boolean;
56
+
57
+ constructor(pools?: Pools, skipConfirmation = false) {
58
+ this.pools = pools || new Pools();
59
+ this.skipConfirmation = skipConfirmation;
60
+ }
61
+
62
+ private getConfirmation = async (): Promise<boolean> => {
63
+ if (cliConfig.force || this.skipConfirmation) {
64
+ return true;
65
+ }
66
+
67
+ async function fixConfirmation(): Promise<string> {
68
+ const answers = await inquirer.prompt(questionPushChangesConfirmation);
69
+ if (answers.changes !== "YES" && answers.changes !== "NO") {
70
+ return await fixConfirmation();
71
+ }
72
+
73
+ return answers.changes;
74
+ }
75
+
76
+ let answers = await inquirer.prompt(questionPushChanges);
77
+
78
+ if (answers.changes !== "YES" && answers.changes !== "NO") {
79
+ answers.changes = await fixConfirmation();
80
+ }
81
+
82
+ if (answers.changes === "YES") {
83
+ return true;
84
+ }
85
+
86
+ return false;
87
+ };
88
+
89
+ private isEmpty = (value: any): boolean =>
90
+ value === null ||
91
+ value === undefined ||
92
+ (typeof value === "string" && value.trim().length === 0) ||
93
+ (Array.isArray(value) && value.length === 0);
94
+
95
+ private isEqual = (a: any, b: any): boolean => {
96
+ if (a === b) return true;
97
+ if (
98
+ typeof a === "object" &&
99
+ typeof b === "object" &&
100
+ a !== null &&
101
+ b !== null
102
+ ) {
103
+ return JSON.stringify(a) === JSON.stringify(b);
104
+ }
105
+ return String(a) === String(b);
106
+ };
107
+
108
+ private compareAttribute = (
109
+ remote: any,
110
+ local: any,
111
+ reason: string,
112
+ key: string,
113
+ ): string => {
114
+ if (this.isEmpty(remote) && this.isEmpty(local)) {
115
+ return reason;
116
+ }
117
+
118
+ if (Array.isArray(remote) && Array.isArray(local)) {
119
+ if (JSON.stringify(remote) !== JSON.stringify(local)) {
120
+ const bol = reason === "" ? "" : "\n";
121
+ reason += `${bol}${key} changed from ${chalk.red(remote)} to ${chalk.green(local)}`;
122
+ }
123
+ } else if (!this.isEqual(remote, local)) {
124
+ const bol = reason === "" ? "" : "\n";
125
+ reason += `${bol}${key} changed from ${chalk.red(remote)} to ${chalk.green(local)}`;
126
+ }
127
+
128
+ return reason;
129
+ };
130
+
131
+ /**
132
+ * Check if attribute non-changeable fields has been changed
133
+ * If so return the differences as an object.
134
+ */
135
+ private checkAttributeChanges = (
136
+ remote: any,
137
+ local: any,
138
+ collection: Collection,
139
+ recreating: boolean = true,
140
+ ): AttributeChange | undefined => {
141
+ if (local === undefined) {
142
+ return undefined;
143
+ }
144
+
145
+ const keyName = `${chalk.yellow(local.key)} in ${collection.name} (${collection["$id"]})`;
146
+ const action = chalk.cyan(recreating ? "recreating" : "changing");
147
+ let reason = "";
148
+ let attribute = recreating ? remote : local;
149
+
150
+ for (let key of Object.keys(remote)) {
151
+ if (!KeysAttributes.has(key)) {
152
+ continue;
153
+ }
154
+
155
+ if (changeableKeys.includes(key)) {
156
+ if (!recreating) {
157
+ reason = this.compareAttribute(remote[key], local[key], reason, key);
158
+ }
159
+ continue;
160
+ }
161
+
162
+ if (!recreating) {
163
+ continue;
164
+ }
165
+
166
+ reason = this.compareAttribute(remote[key], local[key], reason, key);
167
+ }
168
+
169
+ return reason === ""
170
+ ? undefined
171
+ : { key: keyName, attribute, reason, action };
172
+ };
173
+
174
+ /**
175
+ * Check if attributes contain the given attribute
176
+ */
177
+ private attributesContains = (attribute: any, attributes: any[]): any =>
178
+ attributes.find((attr) => attr.key === attribute.key);
179
+
180
+ private generateChangesObject = (
181
+ attribute: any,
182
+ collection: Collection,
183
+ isAdding: boolean,
184
+ ): AttributeChange => {
185
+ return {
186
+ key: `${chalk.yellow(attribute.key)} in ${collection.name} (${collection["$id"]})`,
187
+ attribute: attribute,
188
+ reason: isAdding
189
+ ? "Field isn't present on the remote server"
190
+ : "Field isn't present on the appwrite.config.json file",
191
+ action: isAdding ? chalk.green("adding") : chalk.red("deleting"),
192
+ };
193
+ };
194
+
195
+ public createAttribute = async (
196
+ databaseId: string,
197
+ collectionId: string,
198
+ attribute: any,
199
+ ): Promise<any> => {
200
+ const databasesService = await getDatabasesService();
201
+ switch (attribute.type) {
202
+ case "string":
203
+ switch (attribute.format) {
204
+ case "email":
205
+ return databasesService.createEmailAttribute({
206
+ databaseId,
207
+ collectionId,
208
+ key: attribute.key,
209
+ required: attribute.required,
210
+ xdefault: attribute.default,
211
+ array: attribute.array,
212
+ });
213
+ case "url":
214
+ return databasesService.createUrlAttribute({
215
+ databaseId,
216
+ collectionId,
217
+ key: attribute.key,
218
+ required: attribute.required,
219
+ xdefault: attribute.default,
220
+ array: attribute.array,
221
+ });
222
+ case "ip":
223
+ return databasesService.createIpAttribute({
224
+ databaseId,
225
+ collectionId,
226
+ key: attribute.key,
227
+ required: attribute.required,
228
+ xdefault: attribute.default,
229
+ array: attribute.array,
230
+ });
231
+ case "enum":
232
+ return databasesService.createEnumAttribute({
233
+ databaseId,
234
+ collectionId,
235
+ key: attribute.key,
236
+ elements: attribute.elements,
237
+ required: attribute.required,
238
+ xdefault: attribute.default,
239
+ array: attribute.array,
240
+ });
241
+ default:
242
+ return databasesService.createStringAttribute({
243
+ databaseId,
244
+ collectionId,
245
+ key: attribute.key,
246
+ size: attribute.size,
247
+ required: attribute.required,
248
+ xdefault: attribute.default,
249
+ array: attribute.array,
250
+ encrypt: attribute.encrypt,
251
+ });
252
+ }
253
+ case "integer":
254
+ return databasesService.createIntegerAttribute({
255
+ databaseId,
256
+ collectionId,
257
+ key: attribute.key,
258
+ required: attribute.required,
259
+ min: attribute.min,
260
+ max: attribute.max,
261
+ xdefault: attribute.default,
262
+ array: attribute.array,
263
+ });
264
+ case "double":
265
+ return databasesService.createFloatAttribute({
266
+ databaseId,
267
+ collectionId,
268
+ key: attribute.key,
269
+ required: attribute.required,
270
+ min: attribute.min,
271
+ max: attribute.max,
272
+ xdefault: attribute.default,
273
+ array: attribute.array,
274
+ });
275
+ case "boolean":
276
+ return databasesService.createBooleanAttribute({
277
+ databaseId,
278
+ collectionId,
279
+ key: attribute.key,
280
+ required: attribute.required,
281
+ xdefault: attribute.default,
282
+ array: attribute.array,
283
+ });
284
+ case "datetime":
285
+ return databasesService.createDatetimeAttribute({
286
+ databaseId,
287
+ collectionId,
288
+ key: attribute.key,
289
+ required: attribute.required,
290
+ xdefault: attribute.default,
291
+ array: attribute.array,
292
+ });
293
+ case "relationship":
294
+ return databasesService.createRelationshipAttribute({
295
+ databaseId,
296
+ collectionId,
297
+ relatedCollectionId:
298
+ attribute.relatedTable ?? attribute.relatedCollection,
299
+ type: attribute.relationType,
300
+ twoWay: attribute.twoWay,
301
+ key: attribute.key,
302
+ twoWayKey: attribute.twoWayKey,
303
+ onDelete: attribute.onDelete,
304
+ });
305
+ case "point":
306
+ return databasesService.createPointAttribute({
307
+ databaseId,
308
+ collectionId,
309
+ key: attribute.key,
310
+ required: attribute.required,
311
+ xdefault: attribute.default,
312
+ });
313
+ case "linestring":
314
+ return databasesService.createLineAttribute({
315
+ databaseId,
316
+ collectionId,
317
+ key: attribute.key,
318
+ required: attribute.required,
319
+ xdefault: attribute.default,
320
+ });
321
+ case "polygon":
322
+ return databasesService.createPolygonAttribute({
323
+ databaseId,
324
+ collectionId,
325
+ key: attribute.key,
326
+ required: attribute.required,
327
+ xdefault: attribute.default,
328
+ });
329
+ default:
330
+ throw new Error(`Unsupported attribute type: ${attribute.type}`);
331
+ }
332
+ };
333
+
334
+ public updateAttribute = async (
335
+ databaseId: string,
336
+ collectionId: string,
337
+ attribute: any,
338
+ ): Promise<any> => {
339
+ const databasesService = await getDatabasesService();
340
+ switch (attribute.type) {
341
+ case "string":
342
+ switch (attribute.format) {
343
+ case "email":
344
+ return databasesService.updateEmailAttribute({
345
+ databaseId,
346
+ collectionId,
347
+ key: attribute.key,
348
+ required: attribute.required,
349
+ xdefault: attribute.default,
350
+ });
351
+ case "url":
352
+ return databasesService.updateUrlAttribute({
353
+ databaseId,
354
+ collectionId,
355
+ key: attribute.key,
356
+ required: attribute.required,
357
+ xdefault: attribute.default,
358
+ });
359
+ case "ip":
360
+ return databasesService.updateIpAttribute({
361
+ databaseId,
362
+ collectionId,
363
+ key: attribute.key,
364
+ required: attribute.required,
365
+ xdefault: attribute.default,
366
+ });
367
+ case "enum":
368
+ return databasesService.updateEnumAttribute({
369
+ databaseId,
370
+ collectionId,
371
+ key: attribute.key,
372
+ elements: attribute.elements,
373
+ required: attribute.required,
374
+ xdefault: attribute.default,
375
+ });
376
+ default:
377
+ return databasesService.updateStringAttribute({
378
+ databaseId,
379
+ collectionId,
380
+ key: attribute.key,
381
+ required: attribute.required,
382
+ xdefault: attribute.default,
383
+ });
384
+ }
385
+ case "integer":
386
+ return databasesService.updateIntegerAttribute({
387
+ databaseId,
388
+ collectionId,
389
+ key: attribute.key,
390
+ required: attribute.required,
391
+ min: attribute.min,
392
+ max: attribute.max,
393
+ xdefault: attribute.default,
394
+ });
395
+ case "double":
396
+ return databasesService.updateFloatAttribute({
397
+ databaseId,
398
+ collectionId,
399
+ key: attribute.key,
400
+ required: attribute.required,
401
+ min: attribute.min,
402
+ max: attribute.max,
403
+ xdefault: attribute.default,
404
+ });
405
+ case "boolean":
406
+ return databasesService.updateBooleanAttribute({
407
+ databaseId,
408
+ collectionId,
409
+ key: attribute.key,
410
+ required: attribute.required,
411
+ xdefault: attribute.default,
412
+ });
413
+ case "datetime":
414
+ return databasesService.updateDatetimeAttribute({
415
+ databaseId,
416
+ collectionId,
417
+ key: attribute.key,
418
+ required: attribute.required,
419
+ xdefault: attribute.default,
420
+ });
421
+ case "relationship":
422
+ return databasesService.updateRelationshipAttribute({
423
+ databaseId,
424
+ collectionId,
425
+ key: attribute.key,
426
+ onDelete: attribute.onDelete,
427
+ });
428
+ case "point":
429
+ return databasesService.updatePointAttribute({
430
+ databaseId,
431
+ collectionId,
432
+ key: attribute.key,
433
+ required: attribute.required,
434
+ xdefault: attribute.default,
435
+ });
436
+ case "linestring":
437
+ return databasesService.updateLineAttribute({
438
+ databaseId,
439
+ collectionId,
440
+ key: attribute.key,
441
+ required: attribute.required,
442
+ xdefault: attribute.default,
443
+ });
444
+ case "polygon":
445
+ return databasesService.updatePolygonAttribute({
446
+ databaseId,
447
+ collectionId,
448
+ key: attribute.key,
449
+ required: attribute.required,
450
+ xdefault: attribute.default,
451
+ });
452
+ default:
453
+ throw new Error(`Unsupported attribute type: ${attribute.type}`);
454
+ }
455
+ };
456
+
457
+ public deleteAttribute = async (
458
+ collection: Collection,
459
+ attribute: any,
460
+ isIndex: boolean = false,
461
+ ): Promise<void> => {
462
+ log(
463
+ `Deleting ${isIndex ? "index" : "attribute"} ${attribute.key} of ${collection.name} ( ${collection["$id"]} )`,
464
+ );
465
+
466
+ const databasesService = await getDatabasesService();
467
+ if (isIndex) {
468
+ await databasesService.deleteIndex(
469
+ collection["databaseId"],
470
+ collection["$id"],
471
+ attribute.key,
472
+ );
473
+ return;
474
+ }
475
+
476
+ await databasesService.deleteAttribute(
477
+ collection["databaseId"],
478
+ collection["$id"],
479
+ attribute.key,
480
+ );
481
+ };
482
+
483
+ /**
484
+ * Filter deleted and recreated attributes,
485
+ * return list of attributes to create
486
+ */
487
+ public attributesToCreate = async (
488
+ remoteAttributes: any[],
489
+ localAttributes: any[],
490
+ collection: Collection,
491
+ isIndex: boolean = false,
492
+ ): Promise<any[]> => {
493
+ const deleting = remoteAttributes
494
+ .filter(
495
+ (attribute) => !this.attributesContains(attribute, localAttributes),
496
+ )
497
+ .map((attr) => this.generateChangesObject(attr, collection, false));
498
+ const adding = localAttributes
499
+ .filter(
500
+ (attribute) => !this.attributesContains(attribute, remoteAttributes),
501
+ )
502
+ .map((attr) => this.generateChangesObject(attr, collection, true));
503
+ const conflicts = remoteAttributes
504
+ .map((attribute) =>
505
+ this.checkAttributeChanges(
506
+ attribute,
507
+ this.attributesContains(attribute, localAttributes),
508
+ collection,
509
+ ),
510
+ )
511
+ .filter((attribute) => attribute !== undefined) as AttributeChange[];
512
+ const changes = remoteAttributes
513
+ .map((attribute) =>
514
+ this.checkAttributeChanges(
515
+ attribute,
516
+ this.attributesContains(attribute, localAttributes),
517
+ collection,
518
+ false,
519
+ ),
520
+ )
521
+ .filter((attribute) => attribute !== undefined)
522
+ .filter(
523
+ (attribute) =>
524
+ conflicts.filter((attr) => attribute!.key === attr.key).length !== 1,
525
+ ) as AttributeChange[];
526
+
527
+ let changedAttributes: any[] = [];
528
+ const changing = [...deleting, ...adding, ...conflicts, ...changes];
529
+ if (changing.length === 0) {
530
+ return changedAttributes;
531
+ }
532
+
533
+ log(
534
+ !cliConfig.force
535
+ ? "There are pending changes in your collection deployment"
536
+ : "List of applied changes",
537
+ );
538
+
539
+ drawTable(
540
+ changing.map((change) => {
541
+ return {
542
+ Key: change.key,
543
+ Action: change.action,
544
+ Reason: change.reason,
545
+ };
546
+ }),
547
+ );
548
+
549
+ if (!cliConfig.force) {
550
+ if (deleting.length > 0 && !isIndex) {
551
+ console.log(
552
+ `${chalk.red("------------------------------------------------------")}`,
553
+ );
554
+ console.log(
555
+ `${chalk.red("| WARNING: Attribute deletion may cause loss of data |")}`,
556
+ );
557
+ console.log(
558
+ `${chalk.red("------------------------------------------------------")}`,
559
+ );
560
+ console.log();
561
+ }
562
+ if (conflicts.length > 0 && !isIndex) {
563
+ console.log(
564
+ `${chalk.red("--------------------------------------------------------")}`,
565
+ );
566
+ console.log(
567
+ `${chalk.red("| WARNING: Attribute recreation may cause loss of data |")}`,
568
+ );
569
+ console.log(
570
+ `${chalk.red("--------------------------------------------------------")}`,
571
+ );
572
+ console.log();
573
+ }
574
+
575
+ if ((await this.getConfirmation()) !== true) {
576
+ return changedAttributes;
577
+ }
578
+ }
579
+
580
+ if (conflicts.length > 0) {
581
+ changedAttributes = conflicts.map((change) => change.attribute);
582
+ await Promise.all(
583
+ changedAttributes.map((changed) =>
584
+ this.deleteAttribute(collection, changed, isIndex),
585
+ ),
586
+ );
587
+ remoteAttributes = remoteAttributes.filter(
588
+ (attribute) => !this.attributesContains(attribute, changedAttributes),
589
+ );
590
+ }
591
+
592
+ if (changes.length > 0) {
593
+ changedAttributes = changes.map((change) => change.attribute);
594
+ await Promise.all(
595
+ changedAttributes.map((changed) =>
596
+ this.updateAttribute(
597
+ collection["databaseId"],
598
+ collection["$id"],
599
+ changed,
600
+ ),
601
+ ),
602
+ );
603
+ }
604
+
605
+ const deletingAttributes = deleting.map((change) => change.attribute);
606
+ await Promise.all(
607
+ deletingAttributes.map((attribute) =>
608
+ this.deleteAttribute(collection, attribute, isIndex),
609
+ ),
610
+ );
611
+ const attributeKeys = deletingAttributes.map(
612
+ (attribute: any) => attribute.key,
613
+ );
614
+
615
+ if (attributeKeys.length) {
616
+ const deleteAttributesPoolStatus =
617
+ await this.pools.waitForAttributeDeletion(
618
+ collection["databaseId"],
619
+ collection["$id"],
620
+ attributeKeys,
621
+ );
622
+
623
+ if (!deleteAttributesPoolStatus) {
624
+ throw new Error("Attribute deletion timed out.");
625
+ }
626
+ }
627
+
628
+ return localAttributes.filter(
629
+ (attribute) => !this.attributesContains(attribute, remoteAttributes),
630
+ );
631
+ };
632
+
633
+ public createIndexes = async (
634
+ indexes: any[],
635
+ collection: Collection,
636
+ ): Promise<void> => {
637
+ log(`Creating indexes ...`);
638
+
639
+ const databasesService = await getDatabasesService();
640
+ for (let index of indexes) {
641
+ await databasesService.createIndex({
642
+ databaseId: collection["databaseId"],
643
+ collectionId: collection["$id"],
644
+ key: index.key,
645
+ type: index.type,
646
+ attributes: index.columns ?? index.attributes,
647
+ orders: index.orders,
648
+ });
649
+ }
650
+
651
+ const result = await this.pools.expectIndexes(
652
+ collection["databaseId"],
653
+ collection["$id"],
654
+ indexes.map((index: any) => index.key),
655
+ );
656
+
657
+ if (!result) {
658
+ throw new Error("Index creation timed out.");
659
+ }
660
+
661
+ success(`Created ${indexes.length} indexes`);
662
+ };
663
+
664
+ public createAttributes = async (
665
+ attributes: any[],
666
+ collection: Collection,
667
+ ): Promise<void> => {
668
+ for (let attribute of attributes) {
669
+ if (attribute.side !== "child") {
670
+ await this.createAttribute(
671
+ collection["databaseId"],
672
+ collection["$id"],
673
+ attribute,
674
+ );
675
+ }
676
+ }
677
+
678
+ const result = await this.pools.expectAttributes(
679
+ collection["databaseId"],
680
+ collection["$id"],
681
+ attributes
682
+ .filter((attribute: any) => attribute.side !== "child")
683
+ .map((attribute: any) => attribute.key),
684
+ );
685
+
686
+ if (!result) {
687
+ throw new Error(`Attribute creation timed out.`);
688
+ }
689
+
690
+ const createdCount = attributes.filter((a) => a.side !== "child").length;
691
+ success(`Created ${createdCount} attributes`);
692
+ };
693
+
694
+ public createColumns = async (
695
+ columns: any[],
696
+ table: Collection,
697
+ ): Promise<void> => {
698
+ for (let column of columns) {
699
+ if (column.side !== "child") {
700
+ await this.createAttribute(table["databaseId"], table["$id"], column);
701
+ }
702
+ }
703
+
704
+ const result = await this.pools.expectAttributes(
705
+ table["databaseId"],
706
+ table["$id"],
707
+ columns
708
+ .filter((column: any) => column.side !== "child")
709
+ .map((column: any) => column.key),
710
+ );
711
+
712
+ if (!result) {
713
+ throw new Error(`Column creation timed out.`);
714
+ }
715
+
716
+ const createdCount = columns.filter((c) => c.side !== "child").length;
717
+ success(`Created ${createdCount} columns`);
718
+ };
719
+ }