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
@@ -1,14 +1,420 @@
1
1
  import fs from "fs";
2
+ import path from "path";
2
3
  import chalk from "chalk";
3
- import tar from "tar";
4
4
  import { Command } from "commander";
5
5
  import inquirer from "inquirer";
6
- import { getMessagingService, getTeamsService, getProjectsService, getFunctionsService, getSitesService, getDatabasesService, getTablesDBService, getStorageService, } from "../services.js";
6
+ import { Databases, Functions, Messaging, Projects, Sites, Storage, TablesDB, Teams, Query, } from "@appwrite.io/console";
7
+ import { getFunctionsService, getSitesService } from "../services.js";
8
+ import { sdkForProject, sdkForConsole } from "../sdks.js";
7
9
  import { localConfig } from "../config.js";
8
10
  import { paginate } from "../paginate.js";
9
- import { questionsPullCollection, questionsPullFunctions, questionsPullFunctionsCode, questionsPullSites, questionsPullSitesCode, questionsPullResources, } from "../questions.js";
11
+ import { questionsPullFunctions, questionsPullFunctionsCode, questionsPullSites, questionsPullSitesCode, questionsPullResources, } from "../questions.js";
10
12
  import { cliConfig, success, log, warn, error, actionRunner, commandDescriptions, } from "../parser.js";
11
- export const pullResources = async ({ skipDeprecated = false, } = {}) => {
13
+ import { createSettingsObject } from "../utils.js";
14
+ import { ProjectNotInitializedError } from "./errors.js";
15
+ import { downloadDeploymentCode } from "./utils/deployment.js";
16
+ async function createPullInstance() {
17
+ const projectClient = await sdkForProject();
18
+ const consoleClient = await sdkForConsole();
19
+ const pullInstance = new Pull(projectClient, consoleClient);
20
+ pullInstance.setConfigDirectoryPath(localConfig.configDirectoryPath);
21
+ return pullInstance;
22
+ }
23
+ export class Pull {
24
+ projectClient;
25
+ consoleClient;
26
+ configDirectoryPath;
27
+ silent;
28
+ constructor(projectClient, consoleClient, silent = false) {
29
+ this.projectClient = projectClient;
30
+ this.consoleClient = consoleClient;
31
+ this.configDirectoryPath = process.cwd();
32
+ this.silent = silent;
33
+ }
34
+ /**
35
+ * Set the base directory path for config files and resources
36
+ */
37
+ setConfigDirectoryPath(path) {
38
+ this.configDirectoryPath = path;
39
+ }
40
+ /**
41
+ * Log a message (respects silent mode)
42
+ */
43
+ log(message) {
44
+ if (!this.silent) {
45
+ log(message);
46
+ }
47
+ }
48
+ /**
49
+ * Log a success message (respects silent mode)
50
+ */
51
+ success(message) {
52
+ if (!this.silent) {
53
+ success(message);
54
+ }
55
+ }
56
+ /**
57
+ * Log a warning message (respects silent mode)
58
+ */
59
+ warn(message) {
60
+ if (!this.silent) {
61
+ warn(message);
62
+ }
63
+ }
64
+ /**
65
+ * Pull resources from Appwrite project and return updated config
66
+ *
67
+ * @param config - Current configuration object
68
+ * @param options - Pull options specifying which resources to pull
69
+ * @returns Updated configuration object with pulled resources
70
+ */
71
+ async pullResources(config, options = { all: true, skipDeprecated: true }) {
72
+ const { skipDeprecated = true } = options;
73
+ if (!config.projectId) {
74
+ throw new ProjectNotInitializedError();
75
+ }
76
+ const updatedConfig = { ...config };
77
+ const shouldPullAll = options.all === true;
78
+ if (shouldPullAll || options.settings) {
79
+ const settings = await this.pullSettings(config.projectId);
80
+ updatedConfig.settings = settings.settings;
81
+ updatedConfig.projectName = settings.projectName;
82
+ }
83
+ if (shouldPullAll || options.functions) {
84
+ const functions = await this.pullFunctions({
85
+ code: options.noCode === true ? false : true,
86
+ withVariables: options.withVariables,
87
+ });
88
+ updatedConfig.functions = functions;
89
+ }
90
+ if (shouldPullAll || options.sites) {
91
+ const sites = await this.pullSites({
92
+ code: options.noCode === true ? false : true,
93
+ withVariables: options.withVariables,
94
+ });
95
+ updatedConfig.sites = sites;
96
+ }
97
+ if (shouldPullAll || options.tables) {
98
+ const { databases, tables } = await this.pullTables();
99
+ updatedConfig.databases = databases;
100
+ updatedConfig.tables = tables;
101
+ }
102
+ if (options.collections || (shouldPullAll && !skipDeprecated)) {
103
+ const { databases, collections } = await this.pullCollections();
104
+ updatedConfig.databases = databases;
105
+ updatedConfig.collections = collections;
106
+ }
107
+ if (shouldPullAll || options.buckets) {
108
+ const buckets = await this.pullBuckets();
109
+ updatedConfig.buckets = buckets;
110
+ }
111
+ if (shouldPullAll || options.teams) {
112
+ const teams = await this.pullTeams();
113
+ updatedConfig.teams = teams;
114
+ }
115
+ if (shouldPullAll || options.topics) {
116
+ const topics = await this.pullMessagingTopics();
117
+ updatedConfig.topics = topics;
118
+ }
119
+ return updatedConfig;
120
+ }
121
+ /**
122
+ * Pull project settings
123
+ */
124
+ async pullSettings(projectId) {
125
+ this.log("Pulling project settings ...");
126
+ const projectsService = new Projects(this.consoleClient);
127
+ const project = await projectsService.get({ projectId: projectId });
128
+ this.success(`Successfully pulled ${chalk.bold("all")} project settings.`);
129
+ return {
130
+ projectName: project.name,
131
+ settings: createSettingsObject(project),
132
+ project,
133
+ };
134
+ }
135
+ /**
136
+ * Pull functions from the project
137
+ */
138
+ async pullFunctions(options = {}) {
139
+ this.log("Fetching functions ...");
140
+ const functionsService = new Functions(this.projectClient);
141
+ let functions;
142
+ if (options.functionIds && options.functionIds.length > 0) {
143
+ functions = await Promise.all(options.functionIds.map((id) => functionsService.get({
144
+ functionId: id,
145
+ })));
146
+ }
147
+ else {
148
+ const fetchResponse = await functionsService.list({
149
+ queries: [Query.limit(1)],
150
+ });
151
+ if (fetchResponse["functions"].length <= 0) {
152
+ this.log("No functions found.");
153
+ this.success(`Successfully pulled ${chalk.bold(0)} functions.`);
154
+ return [];
155
+ }
156
+ const { functions: allFunctions } = await paginate(async () => new Functions(this.projectClient).list(), {}, 100, "functions");
157
+ functions = allFunctions;
158
+ }
159
+ const result = [];
160
+ for (const func of functions) {
161
+ this.log(`Pulling function ${chalk.bold(func.name)} ...`);
162
+ const funcPath = `functions/${func.name}`;
163
+ const absoluteFuncPath = path.resolve(this.configDirectoryPath, funcPath);
164
+ const holdingVars = func.vars || [];
165
+ const functionConfig = {
166
+ $id: func.$id,
167
+ name: func.name,
168
+ runtime: func.runtime,
169
+ path: funcPath,
170
+ entrypoint: func.entrypoint,
171
+ execute: func.execute,
172
+ enabled: func.enabled,
173
+ logging: func.logging,
174
+ events: func.events,
175
+ schedule: func.schedule,
176
+ timeout: func.timeout,
177
+ commands: func.commands,
178
+ scopes: func.scopes,
179
+ specification: func.specification,
180
+ };
181
+ result.push(functionConfig);
182
+ if (!fs.existsSync(absoluteFuncPath)) {
183
+ fs.mkdirSync(absoluteFuncPath, { recursive: true });
184
+ }
185
+ if (options.code !== false) {
186
+ await downloadDeploymentCode({
187
+ resourceId: func["$id"],
188
+ resourcePath: absoluteFuncPath,
189
+ holdingVars,
190
+ withVariables: options.withVariables,
191
+ listDeployments: () => functionsService.listDeployments({
192
+ functionId: func["$id"],
193
+ queries: [Query.limit(1), Query.orderDesc("$id")],
194
+ }),
195
+ getDownloadUrl: (deploymentId) => functionsService.getDeploymentDownload({
196
+ functionId: func["$id"],
197
+ deploymentId,
198
+ }),
199
+ projectClient: this.projectClient,
200
+ });
201
+ }
202
+ }
203
+ if (options.code === false) {
204
+ this.warn("Source code download skipped.");
205
+ }
206
+ this.success(`Successfully pulled ${chalk.bold(result.length)} functions.`);
207
+ return result;
208
+ }
209
+ /**
210
+ * Pull sites from the project
211
+ */
212
+ async pullSites(options = {}) {
213
+ this.log("Fetching sites ...");
214
+ const sitesService = new Sites(this.projectClient);
215
+ let sites;
216
+ if (options.siteIds && options.siteIds.length > 0) {
217
+ sites = await Promise.all(options.siteIds.map((id) => sitesService.get({
218
+ siteId: id,
219
+ })));
220
+ }
221
+ else {
222
+ const fetchResponse = await sitesService.list({
223
+ queries: [Query.limit(1)],
224
+ });
225
+ if (fetchResponse["sites"].length <= 0) {
226
+ this.log("No sites found.");
227
+ this.success(`Successfully pulled ${chalk.bold(0)} sites.`);
228
+ return [];
229
+ }
230
+ const { sites: fetchedSites } = await paginate(async () => new Sites(this.projectClient).list(), {}, 100, "sites");
231
+ sites = fetchedSites;
232
+ }
233
+ const result = [];
234
+ for (const site of sites) {
235
+ this.log(`Pulling site ${chalk.bold(site.name)} ...`);
236
+ const sitePath = `sites/${site.name}`;
237
+ const absoluteSitePath = path.resolve(this.configDirectoryPath, sitePath);
238
+ const holdingVars = site.vars || [];
239
+ const siteConfig = {
240
+ $id: site.$id,
241
+ name: site.name,
242
+ path: sitePath,
243
+ framework: site.framework,
244
+ enabled: site.enabled,
245
+ logging: site.logging,
246
+ timeout: site.timeout,
247
+ buildRuntime: site.buildRuntime,
248
+ adapter: site.adapter,
249
+ installCommand: site.installCommand,
250
+ buildCommand: site.buildCommand,
251
+ outputDirectory: site.outputDirectory,
252
+ fallbackFile: site.fallbackFile,
253
+ specification: site.specification,
254
+ };
255
+ result.push(siteConfig);
256
+ if (!fs.existsSync(absoluteSitePath)) {
257
+ fs.mkdirSync(absoluteSitePath, { recursive: true });
258
+ }
259
+ if (options.code !== false) {
260
+ await downloadDeploymentCode({
261
+ resourceId: site["$id"],
262
+ resourcePath: absoluteSitePath,
263
+ holdingVars,
264
+ withVariables: options.withVariables,
265
+ listDeployments: () => sitesService.listDeployments({
266
+ siteId: site["$id"],
267
+ queries: [Query.limit(1), Query.orderDesc("$id")],
268
+ }),
269
+ getDownloadUrl: (deploymentId) => sitesService.getDeploymentDownload({
270
+ siteId: site["$id"],
271
+ deploymentId,
272
+ }),
273
+ projectClient: this.projectClient,
274
+ });
275
+ }
276
+ }
277
+ if (options.code === false) {
278
+ this.warn("Source code download skipped.");
279
+ }
280
+ this.success(`Successfully pulled ${chalk.bold(result.length)} sites.`);
281
+ return result;
282
+ }
283
+ /**
284
+ * Pull collections from the project (deprecated)
285
+ */
286
+ async pullCollections() {
287
+ this.warn("appwrite pull collection has been deprecated. Please consider using 'appwrite pull tables' instead");
288
+ this.log("Fetching collections ...");
289
+ const databasesService = new Databases(this.projectClient);
290
+ const fetchResponse = await databasesService.list([Query.limit(1)]);
291
+ if (fetchResponse["databases"].length <= 0) {
292
+ this.log("No collections found.");
293
+ this.success(`Successfully pulled ${chalk.bold(0)} collections from ${chalk.bold(0)} databases.`);
294
+ return { databases: [], collections: [] };
295
+ }
296
+ const { databases } = await paginate(async () => new Databases(this.projectClient).list(), {}, 100, "databases");
297
+ const allDatabases = [];
298
+ const allCollections = [];
299
+ for (const database of databases) {
300
+ this.log(`Pulling all collections from ${chalk.bold(database.name)} database ...`);
301
+ allDatabases.push(database);
302
+ const { collections } = await paginate(async () => new Databases(this.projectClient).listCollections(database.$id), {}, 100, "collections");
303
+ for (const collection of collections) {
304
+ allCollections.push({
305
+ ...collection,
306
+ $createdAt: undefined,
307
+ $updatedAt: undefined,
308
+ });
309
+ }
310
+ }
311
+ this.success(`Successfully pulled ${chalk.bold(allCollections.length)} collections from ${chalk.bold(allDatabases.length)} databases.`);
312
+ return {
313
+ databases: allDatabases,
314
+ collections: allCollections,
315
+ };
316
+ }
317
+ /**
318
+ * Pull tables from the project
319
+ */
320
+ async pullTables() {
321
+ this.log("Fetching tables ...");
322
+ const tablesDBService = new TablesDB(this.projectClient);
323
+ const fetchResponse = await tablesDBService.list({
324
+ queries: [Query.limit(1)],
325
+ });
326
+ if (fetchResponse["databases"].length <= 0) {
327
+ this.log("No tables found.");
328
+ this.success(`Successfully pulled ${chalk.bold(0)} tables from ${chalk.bold(0)} tableDBs.`);
329
+ return { databases: [], tables: [] };
330
+ }
331
+ const { databases } = await paginate(async () => new TablesDB(this.projectClient).list(), {}, 100, "databases");
332
+ const allDatabases = [];
333
+ const allTables = [];
334
+ for (const database of databases) {
335
+ this.log(`Pulling all tables from ${chalk.bold(database.name)} database ...`);
336
+ allDatabases.push(database);
337
+ const { tables } = await paginate(async () => new TablesDB(this.projectClient).listTables(database.$id), {}, 100, "tables");
338
+ for (const table of tables) {
339
+ allTables.push({
340
+ ...table,
341
+ $createdAt: undefined,
342
+ $updatedAt: undefined,
343
+ });
344
+ }
345
+ }
346
+ this.success(`Successfully pulled ${chalk.bold(allTables.length)} tables from ${chalk.bold(allDatabases.length)} tableDBs.`);
347
+ return {
348
+ databases: allDatabases,
349
+ tables: allTables,
350
+ };
351
+ }
352
+ /**
353
+ * Pull storage buckets from the project
354
+ */
355
+ async pullBuckets() {
356
+ this.log("Fetching buckets ...");
357
+ const storageService = new Storage(this.projectClient);
358
+ const fetchResponse = await storageService.listBuckets({
359
+ queries: [Query.limit(1)],
360
+ });
361
+ if (fetchResponse["buckets"].length <= 0) {
362
+ this.log("No buckets found.");
363
+ this.success(`Successfully pulled ${chalk.bold(0)} buckets.`);
364
+ return [];
365
+ }
366
+ const { buckets } = await paginate(async () => new Storage(this.projectClient).listBuckets(), {}, 100, "buckets");
367
+ for (const bucket of buckets) {
368
+ this.log(`Pulling bucket ${chalk.bold(bucket.name)} ...`);
369
+ }
370
+ this.success(`Successfully pulled ${chalk.bold(buckets.length)} buckets.`);
371
+ return buckets;
372
+ }
373
+ /**
374
+ * Pull teams from the project
375
+ */
376
+ async pullTeams() {
377
+ this.log("Fetching teams ...");
378
+ const teamsService = new Teams(this.projectClient);
379
+ const fetchResponse = await teamsService.list({
380
+ queries: [Query.limit(1)],
381
+ });
382
+ if (fetchResponse["teams"].length <= 0) {
383
+ this.log("No teams found.");
384
+ this.success(`Successfully pulled ${chalk.bold(0)} teams.`);
385
+ return [];
386
+ }
387
+ const { teams } = await paginate(async () => new Teams(this.projectClient).list(), {}, 100, "teams");
388
+ for (const team of teams) {
389
+ this.log(`Pulling team ${chalk.bold(team.name)} ...`);
390
+ }
391
+ this.success(`Successfully pulled ${chalk.bold(teams.length)} teams.`);
392
+ return teams;
393
+ }
394
+ /**
395
+ * Pull messaging topics from the project
396
+ */
397
+ async pullMessagingTopics() {
398
+ this.log("Fetching topics ...");
399
+ const messagingService = new Messaging(this.projectClient);
400
+ const fetchResponse = await messagingService.listTopics({
401
+ queries: [Query.limit(1)],
402
+ });
403
+ if (fetchResponse["topics"].length <= 0) {
404
+ this.log("No topics found.");
405
+ this.success(`Successfully pulled ${chalk.bold(0)} topics.`);
406
+ return [];
407
+ }
408
+ const { topics } = await paginate(async () => new Messaging(this.projectClient).listTopics(), {}, 100, "topics");
409
+ for (const topic of topics) {
410
+ this.log(`Pulling topic ${chalk.bold(topic.name)} ...`);
411
+ }
412
+ this.success(`Successfully pulled ${chalk.bold(topics.length)} topics.`);
413
+ return topics;
414
+ }
415
+ }
416
+ /** Helper methods for CLI commands */
417
+ export const pullResources = async ({ skipDeprecated = true, } = {}) => {
12
418
  const project = localConfig.getProject();
13
419
  if (!project.projectId) {
14
420
  error("Project configuration not found. Please run 'appwrite init project' to initialize your project first.");
@@ -42,338 +448,121 @@ export const pullResources = async ({ skipDeprecated = false, } = {}) => {
42
448
  }
43
449
  };
44
450
  const pullSettings = async () => {
45
- log("Pulling project settings ...");
46
- try {
47
- const projectsService = await getProjectsService();
48
- let response = await projectsService.get(localConfig.getProject().projectId);
49
- localConfig.setProject(response.$id, response.name, response);
50
- success(`Successfully pulled ${chalk.bold("all")} project settings.`);
51
- }
52
- catch (e) {
53
- throw e;
54
- }
451
+ const pullInstance = await createPullInstance();
452
+ const projectId = localConfig.getProject().projectId;
453
+ const settings = await pullInstance.pullSettings(projectId);
454
+ localConfig.setProject(projectId, settings.projectName, settings.project);
55
455
  };
56
456
  const pullFunctions = async ({ code, withVariables, } = {}) => {
57
- process.chdir(localConfig.configDirectoryPath);
58
- log("Fetching functions ...");
59
- let total = 0;
60
457
  const functionsService = await getFunctionsService();
61
- const fetchResponse = await functionsService.list([
62
- JSON.stringify({ method: "limit", values: [1] }),
63
- ]);
458
+ const fetchResponse = await functionsService.list([Query.limit(1)]);
64
459
  if (fetchResponse["functions"].length <= 0) {
65
460
  log("No functions found.");
66
- success(`Successfully pulled ${chalk.bold(total)} functions.`);
461
+ success(`Successfully pulled ${chalk.bold(0)} functions.`);
67
462
  return;
68
463
  }
69
- const functions = cliConfig.all
464
+ const functionsToCheck = cliConfig.all
70
465
  ? (await paginate(async () => (await getFunctionsService()).list(), {}, 100, "functions")).functions
71
466
  : (await inquirer.prompt(questionsPullFunctions)).functions;
72
467
  let allowCodePull = cliConfig.force === true ? true : null;
73
- for (let func of functions) {
74
- total++;
75
- log(`Pulling function ${chalk.bold(func["name"])} ...`);
468
+ if (code !== false && allowCodePull === null) {
469
+ const codeAnswer = await inquirer.prompt(questionsPullFunctionsCode);
470
+ allowCodePull = codeAnswer.override;
471
+ }
472
+ const shouldPullCode = code !== false && allowCodePull === true;
473
+ const selectedFunctionIds = functionsToCheck.map((f) => f.$id);
474
+ const pullInstance = await createPullInstance();
475
+ const functions = await pullInstance.pullFunctions({
476
+ code: shouldPullCode,
477
+ withVariables,
478
+ functionIds: selectedFunctionIds,
479
+ });
480
+ for (const func of functions) {
76
481
  const localFunction = localConfig.getFunction(func.$id);
77
- func["path"] = localFunction["path"];
78
- if (!localFunction["path"]) {
79
- func["path"] = `functions/${func.name}`;
80
- }
81
- const holdingVars = func["vars"];
82
- // We don't save var in to the config
83
- delete func["vars"];
482
+ func["path"] = localFunction["path"] || func["path"];
84
483
  localConfig.addFunction(func);
85
- if (!fs.existsSync(func["path"])) {
86
- fs.mkdirSync(func["path"], { recursive: true });
87
- }
88
- if (code === false) {
89
- warn("Source code download skipped.");
90
- continue;
91
- }
92
- if (allowCodePull === null) {
93
- const codeAnswer = await inquirer.prompt(questionsPullFunctionsCode);
94
- allowCodePull = codeAnswer.override;
95
- }
96
- if (!allowCodePull) {
97
- continue;
98
- }
99
- let deploymentId = null;
100
- try {
101
- const fetchResponse = await functionsService.listDeployments({
102
- functionId: func["$id"],
103
- queries: [
104
- JSON.stringify({ method: "limit", values: [1] }),
105
- JSON.stringify({ method: "orderDesc", values: ["$id"] }),
106
- ],
107
- });
108
- if (fetchResponse["total"] > 0) {
109
- deploymentId = fetchResponse["deployments"][0]["$id"];
110
- }
111
- }
112
- catch { }
113
- if (deploymentId === null) {
114
- log("Source code download skipped because function doesn't have any available deployment");
115
- continue;
116
- }
117
- log("Pulling latest deployment code ...");
118
- const compressedFileName = `${func["$id"]}-${+new Date()}.tar.gz`;
119
- const downloadUrl = functionsService.getDeploymentDownload({
120
- functionId: func["$id"],
121
- deploymentId: deploymentId,
122
- });
123
- const client = (await getFunctionsService()).client;
124
- const downloadBuffer = await client.call("get", new URL(downloadUrl), {}, {}, "arrayBuffer");
125
- fs.writeFileSync(compressedFileName, Buffer.from(downloadBuffer));
126
- tar.extract({
127
- sync: true,
128
- cwd: func["path"],
129
- file: compressedFileName,
130
- strict: false,
131
- });
132
- fs.rmSync(compressedFileName);
133
- if (withVariables) {
134
- const envFileLocation = `${func["path"]}/.env`;
135
- try {
136
- fs.rmSync(envFileLocation);
137
- }
138
- catch { }
139
- fs.writeFileSync(envFileLocation, holdingVars.map((r) => `${r.key}=${r.value}\n`).join(""));
140
- }
141
484
  }
142
- success(`Successfully pulled ${chalk.bold(total)} functions.`);
143
485
  };
144
486
  const pullSites = async ({ code, withVariables, } = {}) => {
145
- process.chdir(localConfig.configDirectoryPath);
146
- log("Fetching sites ...");
147
- let total = 0;
148
487
  const sitesService = await getSitesService();
149
- const fetchResponse = await sitesService.list([
150
- JSON.stringify({ method: "limit", values: [1] }),
151
- ]);
488
+ const fetchResponse = await sitesService.list({
489
+ queries: [Query.limit(1)],
490
+ });
152
491
  if (fetchResponse["sites"].length <= 0) {
153
492
  log("No sites found.");
154
- success(`Successfully pulled ${chalk.bold(total)} sites.`);
493
+ success(`Successfully pulled ${chalk.bold(0)} sites.`);
155
494
  return;
156
495
  }
157
- const sites = cliConfig.all
496
+ const sitesToCheck = cliConfig.all
158
497
  ? (await paginate(async () => (await getSitesService()).list(), {}, 100, "sites")).sites
159
498
  : (await inquirer.prompt(questionsPullSites)).sites;
160
499
  let allowCodePull = cliConfig.force === true ? true : null;
161
- for (let site of sites) {
162
- total++;
163
- log(`Pulling site ${chalk.bold(site["name"])} ...`);
500
+ if (code !== false && allowCodePull === null) {
501
+ const codeAnswer = await inquirer.prompt(questionsPullSitesCode);
502
+ allowCodePull = codeAnswer.override;
503
+ }
504
+ const shouldPullCode = code !== false && allowCodePull === true;
505
+ const selectedSiteIds = sitesToCheck.map((s) => s.$id);
506
+ const pullInstance = await createPullInstance();
507
+ const sites = await pullInstance.pullSites({
508
+ code: shouldPullCode,
509
+ withVariables,
510
+ siteIds: selectedSiteIds,
511
+ });
512
+ for (const site of sites) {
164
513
  const localSite = localConfig.getSite(site.$id);
165
- site["path"] = localSite["path"];
166
- if (!localSite["path"]) {
167
- site["path"] = `sites/${site.name}`;
168
- }
169
- const holdingVars = site["vars"];
170
- // We don't save var in to the config
171
- delete site["vars"];
514
+ site["path"] = localSite["path"] || site["path"];
172
515
  localConfig.addSite(site);
173
- if (!fs.existsSync(site["path"])) {
174
- fs.mkdirSync(site["path"], { recursive: true });
175
- }
176
- if (code === false) {
177
- warn("Source code download skipped.");
178
- continue;
179
- }
180
- if (allowCodePull === null) {
181
- const codeAnswer = await inquirer.prompt(questionsPullSitesCode);
182
- allowCodePull = codeAnswer.override;
183
- }
184
- if (!allowCodePull) {
185
- continue;
186
- }
187
- let deploymentId = null;
188
- try {
189
- const fetchResponse = await sitesService.listDeployments({
190
- siteId: site["$id"],
191
- queries: [
192
- JSON.stringify({ method: "limit", values: [1] }),
193
- JSON.stringify({ method: "orderDesc", values: ["$id"] }),
194
- ],
195
- });
196
- if (fetchResponse["total"] > 0) {
197
- deploymentId = fetchResponse["deployments"][0]["$id"];
198
- }
199
- }
200
- catch { }
201
- if (deploymentId === null) {
202
- log("Source code download skipped because site doesn't have any available deployment");
203
- continue;
204
- }
205
- log("Pulling latest deployment code ...");
206
- const compressedFileName = `${site["$id"]}-${+new Date()}.tar.gz`;
207
- const downloadUrl = sitesService.getDeploymentDownload({
208
- siteId: site["$id"],
209
- deploymentId: deploymentId,
210
- });
211
- const client = (await getSitesService()).client;
212
- const downloadBuffer = await client.call("get", new URL(downloadUrl), {}, {}, "arrayBuffer");
213
- fs.writeFileSync(compressedFileName, Buffer.from(downloadBuffer));
214
- tar.extract({
215
- sync: true,
216
- cwd: site["path"],
217
- file: compressedFileName,
218
- strict: false,
219
- });
220
- fs.rmSync(compressedFileName);
221
- if (withVariables) {
222
- const envFileLocation = `${site["path"]}/.env`;
223
- try {
224
- fs.rmSync(envFileLocation);
225
- }
226
- catch { }
227
- fs.writeFileSync(envFileLocation, holdingVars.map((r) => `${r.key}=${r.value}\n`).join(""));
228
- }
229
516
  }
230
- success(`Successfully pulled ${chalk.bold(total)} sites.`);
231
517
  };
232
518
  const pullCollection = async () => {
233
- warn("appwrite pull collection has been deprecated. Please consider using 'appwrite pull tables' instead");
234
- log("Fetching collections ...");
235
- let totalDatabases = 0;
236
- let totalCollections = 0;
237
- const databasesService = await getDatabasesService();
238
- const fetchResponse = await databasesService.list([
239
- JSON.stringify({ method: "limit", values: [1] }),
240
- ]);
241
- if (fetchResponse["databases"].length <= 0) {
242
- log("No collections found.");
243
- success(`Successfully pulled ${chalk.bold(totalCollections)} collections from ${chalk.bold(totalDatabases)} databases.`);
244
- return;
245
- }
246
- let databases = cliConfig.ids;
247
- if (databases.length === 0) {
248
- if (cliConfig.all) {
249
- databases = (await paginate(async () => (await getDatabasesService()).list(), {}, 100, "databases")).databases.map((database) => database.$id);
250
- }
251
- else {
252
- databases = (await inquirer.prompt(questionsPullCollection)).databases;
253
- }
254
- }
255
- for (const databaseId of databases) {
256
- const database = await databasesService.get(databaseId);
257
- totalDatabases++;
258
- log(`Pulling all collections from ${chalk.bold(database["name"])} database ...`);
519
+ const pullInstance = await createPullInstance();
520
+ const { databases, collections } = await pullInstance.pullCollections();
521
+ for (const database of databases) {
259
522
  localConfig.addDatabase(database);
260
- const { collections } = await paginate(async () => (await getDatabasesService()).listCollections(databaseId), {}, 100, "collections");
261
- for (const collection of collections) {
262
- totalCollections++;
263
- localConfig.addCollection({
264
- ...collection,
265
- $createdAt: undefined,
266
- $updatedAt: undefined,
267
- });
268
- }
269
523
  }
270
- success(`Successfully pulled ${chalk.bold(totalCollections)} collections from ${chalk.bold(totalDatabases)} databases.`);
524
+ for (const collection of collections) {
525
+ localConfig.addCollection(collection);
526
+ }
271
527
  };
272
528
  const pullTable = async () => {
273
- log("Fetching tables ...");
274
- let totalTablesDBs = 0;
275
- let totalTables = 0;
276
- const tablesDBService = await getTablesDBService();
277
- const fetchResponse = await tablesDBService.list([
278
- JSON.stringify({ method: "limit", values: [1] }),
279
- ]);
280
- if (fetchResponse["databases"].length <= 0) {
281
- log("No tables found.");
282
- success(`Successfully pulled ${chalk.bold(totalTables)} tables from ${chalk.bold(totalTablesDBs)} tableDBs.`);
283
- return;
284
- }
285
- let databases = cliConfig.ids;
286
- if (databases.length === 0) {
287
- if (cliConfig.all) {
288
- databases = (await paginate(async () => (await getTablesDBService()).list(), {}, 100, "databases")).databases.map((database) => database.$id);
289
- }
290
- else {
291
- databases = (await inquirer.prompt(questionsPullCollection)).databases;
292
- }
293
- }
294
- for (const databaseId of databases) {
295
- const database = await tablesDBService.get(databaseId);
296
- totalTablesDBs++;
297
- log(`Pulling all tables from ${chalk.bold(database["name"])} database ...`);
529
+ const pullInstance = await createPullInstance();
530
+ const { databases, tables } = await pullInstance.pullTables();
531
+ for (const database of databases) {
298
532
  localConfig.addTablesDB(database);
299
- const { tables } = await paginate(async () => (await getTablesDBService()).listTables(databaseId), {}, 100, "tables");
300
- for (const table of tables) {
301
- totalTables++;
302
- localConfig.addTable({
303
- ...table,
304
- $createdAt: undefined,
305
- $updatedAt: undefined,
306
- });
307
- }
308
533
  }
309
- success(`Successfully pulled ${chalk.bold(totalTables)} tables from ${chalk.bold(totalTablesDBs)} tableDBs.`);
534
+ for (const table of tables) {
535
+ localConfig.addTable(table);
536
+ }
310
537
  };
311
538
  const pullBucket = async () => {
312
- log("Fetching buckets ...");
313
- let total = 0;
314
- const storageService = await getStorageService();
315
- const fetchResponse = await storageService.listBuckets([
316
- JSON.stringify({ method: "limit", values: [1] }),
317
- ]);
318
- if (fetchResponse["buckets"].length <= 0) {
319
- log("No buckets found.");
320
- success(`Successfully pulled ${chalk.bold(total)} buckets.`);
321
- return;
322
- }
323
- const { buckets } = await paginate(async () => (await getStorageService()).listBuckets(), {}, 100, "buckets");
539
+ const pullInstance = await createPullInstance();
540
+ const buckets = await pullInstance.pullBuckets();
324
541
  for (const bucket of buckets) {
325
- total++;
326
- log(`Pulling bucket ${chalk.bold(bucket["name"])} ...`);
327
542
  localConfig.addBucket(bucket);
328
543
  }
329
- success(`Successfully pulled ${chalk.bold(total)} buckets.`);
330
544
  };
331
545
  const pullTeam = async () => {
332
- log("Fetching teams ...");
333
- let total = 0;
334
- const teamsService = await getTeamsService();
335
- const fetchResponse = await teamsService.list([
336
- JSON.stringify({ method: "limit", values: [1] }),
337
- ]);
338
- if (fetchResponse["teams"].length <= 0) {
339
- log("No teams found.");
340
- success(`Successfully pulled ${chalk.bold(total)} teams.`);
341
- return;
342
- }
343
- const { teams } = await paginate(async () => (await getTeamsService()).list(), {}, 100, "teams");
546
+ const pullInstance = await createPullInstance();
547
+ const teams = await pullInstance.pullTeams();
344
548
  for (const team of teams) {
345
- total++;
346
- log(`Pulling team ${chalk.bold(team["name"])} ...`);
347
549
  localConfig.addTeam(team);
348
550
  }
349
- success(`Successfully pulled ${chalk.bold(total)} teams.`);
350
551
  };
351
552
  const pullMessagingTopic = async () => {
352
- log("Fetching topics ...");
353
- let total = 0;
354
- const messagingService = await getMessagingService();
355
- const fetchResponse = await messagingService.listTopics([
356
- JSON.stringify({ method: "limit", values: [1] }),
357
- ]);
358
- if (fetchResponse["topics"].length <= 0) {
359
- log("No topics found.");
360
- success(`Successfully pulled ${chalk.bold(total)} topics.`);
361
- return;
362
- }
363
- const { topics } = await paginate(async () => (await getMessagingService()).listTopics(), {}, 100, "topics");
553
+ const pullInstance = await createPullInstance();
554
+ const topics = await pullInstance.pullMessagingTopics();
364
555
  for (const topic of topics) {
365
- total++;
366
- log(`Pulling topic ${chalk.bold(topic["name"])} ...`);
367
556
  localConfig.addMessagingTopic(topic);
368
557
  }
369
- success(`Successfully pulled ${chalk.bold(total)} topics.`);
370
558
  };
559
+ /** Commander.js exports */
371
560
  export const pull = new Command("pull")
372
561
  .description(commandDescriptions["pull"])
373
562
  .action(actionRunner(() => pullResources({ skipDeprecated: true })));
374
563
  pull
375
564
  .command("all")
376
- .description("Pull all resource.")
565
+ .description("Pull all resources")
377
566
  .action(actionRunner(() => {
378
567
  cliConfig.all = true;
379
568
  return pullResources({