chirag-appwrite-cli 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (709) hide show
  1. package/.github/workflows/{npm-publish.yml → publish.yml} +1 -1
  2. package/CHANGELOG.md +1 -190
  3. package/Formula/appwrite.rb +3 -3
  4. package/LICENSE.md +1 -12
  5. package/README.md +18 -185
  6. package/cli.ts +140 -146
  7. package/dist/bundle.cjs +74100 -86261
  8. package/dist/cli.js +63 -59
  9. package/dist/cli.js.map +1 -1
  10. package/dist/lib/client.d.ts.map +1 -1
  11. package/dist/lib/client.js +8 -7
  12. package/dist/lib/client.js.map +1 -1
  13. package/dist/lib/commands/config.d.ts +23 -12
  14. package/dist/lib/commands/config.d.ts.map +1 -1
  15. package/dist/lib/commands/config.js +17 -6
  16. package/dist/lib/commands/config.js.map +1 -1
  17. package/dist/lib/commands/generate.d.ts +6 -0
  18. package/dist/lib/commands/generate.d.ts.map +1 -0
  19. package/dist/lib/commands/generate.js +53 -0
  20. package/dist/lib/commands/generate.js.map +1 -0
  21. package/dist/lib/commands/generators/databases.d.ts +25 -0
  22. package/dist/lib/commands/generators/databases.d.ts.map +1 -0
  23. package/dist/lib/commands/generators/databases.js +405 -0
  24. package/dist/lib/commands/generators/databases.js.map +1 -0
  25. package/dist/lib/commands/init.d.ts.map +1 -1
  26. package/dist/lib/commands/init.js +15 -14
  27. package/dist/lib/commands/init.js.map +1 -1
  28. package/dist/lib/commands/pull.d.ts.map +1 -1
  29. package/dist/lib/commands/pull.js +181 -155
  30. package/dist/lib/commands/pull.js.map +1 -1
  31. package/dist/lib/commands/push.d.ts +32 -4
  32. package/dist/lib/commands/push.d.ts.map +1 -1
  33. package/dist/lib/commands/push.js +272 -106
  34. package/dist/lib/commands/push.js.map +1 -1
  35. package/dist/lib/commands/run.js +1 -1
  36. package/dist/lib/commands/run.js.map +1 -1
  37. package/dist/lib/commands/schema.d.ts +8 -6
  38. package/dist/lib/commands/schema.d.ts.map +1 -1
  39. package/dist/lib/commands/schema.js +20 -9
  40. package/dist/lib/commands/schema.js.map +1 -1
  41. package/dist/lib/commands/services/account.d.ts.map +1 -1
  42. package/dist/lib/commands/services/account.js +86 -64
  43. package/dist/lib/commands/services/account.js.map +1 -1
  44. package/dist/lib/commands/services/console.d.ts.map +1 -1
  45. package/dist/lib/commands/services/console.js +4 -17
  46. package/dist/lib/commands/services/console.js.map +1 -1
  47. package/dist/lib/commands/services/databases.d.ts.map +1 -1
  48. package/dist/lib/commands/services/databases.js +160 -152
  49. package/dist/lib/commands/services/databases.js.map +1 -1
  50. package/dist/lib/commands/services/functions.d.ts.map +1 -1
  51. package/dist/lib/commands/services/functions.js +41 -33
  52. package/dist/lib/commands/services/functions.js.map +1 -1
  53. package/dist/lib/commands/services/graphql.d.ts.map +1 -1
  54. package/dist/lib/commands/services/graphql.js +3 -3
  55. package/dist/lib/commands/services/graphql.js.map +1 -1
  56. package/dist/lib/commands/services/health.d.ts.map +1 -1
  57. package/dist/lib/commands/services/health.js +24 -24
  58. package/dist/lib/commands/services/health.js.map +1 -1
  59. package/dist/lib/commands/services/locale.d.ts.map +1 -1
  60. package/dist/lib/commands/services/locale.js +9 -9
  61. package/dist/lib/commands/services/locale.js.map +1 -1
  62. package/dist/lib/commands/services/messaging.d.ts.map +1 -1
  63. package/dist/lib/commands/services/messaging.js +59 -59
  64. package/dist/lib/commands/services/messaging.js.map +1 -1
  65. package/dist/lib/commands/services/migrations.d.ts.map +1 -1
  66. package/dist/lib/commands/services/migrations.js +19 -19
  67. package/dist/lib/commands/services/migrations.js.map +1 -1
  68. package/dist/lib/commands/services/project.d.ts.map +1 -1
  69. package/dist/lib/commands/services/project.js +8 -8
  70. package/dist/lib/commands/services/project.js.map +1 -1
  71. package/dist/lib/commands/services/projects.d.ts.map +1 -1
  72. package/dist/lib/commands/services/projects.js +71 -65
  73. package/dist/lib/commands/services/projects.js.map +1 -1
  74. package/dist/lib/commands/services/proxy.d.ts.map +1 -1
  75. package/dist/lib/commands/services/proxy.js +11 -11
  76. package/dist/lib/commands/services/proxy.js.map +1 -1
  77. package/dist/lib/commands/services/sites.d.ts.map +1 -1
  78. package/dist/lib/commands/services/sites.js +41 -33
  79. package/dist/lib/commands/services/sites.js.map +1 -1
  80. package/dist/lib/commands/services/storage.d.ts.map +1 -1
  81. package/dist/lib/commands/services/storage.js +40 -18
  82. package/dist/lib/commands/services/storage.js.map +1 -1
  83. package/dist/lib/commands/services/tables-db.d.ts +3 -0
  84. package/dist/lib/commands/services/tables-db.d.ts.map +1 -0
  85. package/dist/lib/commands/services/{tablesdb.js → tables-db.js} +171 -163
  86. package/dist/lib/commands/services/tables-db.js.map +1 -0
  87. package/dist/lib/commands/services/teams.d.ts.map +1 -1
  88. package/dist/lib/commands/services/teams.js +16 -16
  89. package/dist/lib/commands/services/teams.js.map +1 -1
  90. package/dist/lib/commands/services/tokens.d.ts.map +1 -1
  91. package/dist/lib/commands/services/tokens.js +6 -6
  92. package/dist/lib/commands/services/tokens.js.map +1 -1
  93. package/dist/lib/commands/services/users.d.ts.map +1 -1
  94. package/dist/lib/commands/services/users.js +54 -54
  95. package/dist/lib/commands/services/users.js.map +1 -1
  96. package/dist/lib/commands/services/vcs.d.ts.map +1 -1
  97. package/dist/lib/commands/services/vcs.js +13 -13
  98. package/dist/lib/commands/services/vcs.js.map +1 -1
  99. package/dist/lib/commands/types.d.ts.map +1 -1
  100. package/dist/lib/commands/types.js +1 -1
  101. package/dist/lib/commands/types.js.map +1 -1
  102. package/dist/lib/commands/update.d.ts.map +1 -1
  103. package/dist/lib/commands/update.js +8 -7
  104. package/dist/lib/commands/update.js.map +1 -1
  105. package/dist/lib/commands/utils/attributes.d.ts +2 -1
  106. package/dist/lib/commands/utils/attributes.d.ts.map +1 -1
  107. package/dist/lib/commands/utils/attributes.js +32 -34
  108. package/dist/lib/commands/utils/attributes.js.map +1 -1
  109. package/dist/lib/commands/utils/deployment.d.ts.map +1 -1
  110. package/dist/lib/commands/utils/deployment.js +3 -2
  111. package/dist/lib/commands/utils/deployment.js.map +1 -1
  112. package/dist/lib/commands/utils/pools.d.ts.map +1 -1
  113. package/dist/lib/commands/utils/pools.js +7 -6
  114. package/dist/lib/commands/utils/pools.js.map +1 -1
  115. package/dist/lib/config.d.ts +1 -0
  116. package/dist/lib/config.d.ts.map +1 -1
  117. package/dist/lib/config.js +45 -4
  118. package/dist/lib/config.js.map +1 -1
  119. package/dist/lib/constants.d.ts +14 -0
  120. package/dist/lib/constants.d.ts.map +1 -0
  121. package/dist/lib/constants.js +19 -0
  122. package/dist/lib/constants.js.map +1 -0
  123. package/dist/lib/emulation/docker.d.ts.map +1 -1
  124. package/dist/lib/emulation/docker.js +80 -67
  125. package/dist/lib/emulation/docker.js.map +1 -1
  126. package/dist/lib/parser.d.ts.map +1 -1
  127. package/dist/lib/parser.js +11 -10
  128. package/dist/lib/parser.js.map +1 -1
  129. package/dist/lib/questions.d.ts +2 -0
  130. package/dist/lib/questions.d.ts.map +1 -1
  131. package/dist/lib/questions.js +34 -20
  132. package/dist/lib/questions.js.map +1 -1
  133. package/dist/lib/sdks.d.ts.map +1 -1
  134. package/dist/lib/sdks.js +10 -11
  135. package/dist/lib/sdks.js.map +1 -1
  136. package/dist/lib/utils.d.ts +3 -0
  137. package/dist/lib/utils.d.ts.map +1 -1
  138. package/dist/lib/utils.js +29 -2
  139. package/dist/lib/utils.js.map +1 -1
  140. package/dist/package.json +4 -4
  141. package/docs/examples/account/create-anonymous-session.md +1 -0
  142. package/docs/examples/account/create-email-password-session.md +3 -0
  143. package/docs/examples/account/create-email-token.md +3 -0
  144. package/docs/examples/account/create-email-verification.md +2 -0
  145. package/docs/examples/account/create-jwt.md +1 -0
  146. package/docs/examples/account/create-magic-url-token.md +3 -0
  147. package/docs/examples/account/create-mfa-authenticator.md +2 -0
  148. package/docs/examples/account/create-mfa-challenge.md +2 -0
  149. package/docs/examples/account/create-mfa-recovery-codes.md +1 -0
  150. package/docs/examples/account/create-o-auth-2-session.md +2 -0
  151. package/docs/examples/account/create-o-auth-2-token.md +2 -0
  152. package/docs/examples/account/create-phone-token.md +3 -0
  153. package/docs/examples/account/create-phone-verification.md +1 -0
  154. package/docs/examples/account/create-push-target.md +3 -0
  155. package/docs/examples/account/create-recovery.md +3 -0
  156. package/docs/examples/account/create-session.md +3 -0
  157. package/docs/examples/account/create-verification.md +2 -0
  158. package/docs/examples/account/create.md +4 -0
  159. package/docs/examples/account/delete-identity.md +2 -0
  160. package/docs/examples/account/delete-mfa-authenticator.md +2 -0
  161. package/docs/examples/account/delete-push-target.md +2 -0
  162. package/docs/examples/account/delete-session.md +2 -0
  163. package/docs/examples/account/delete-sessions.md +1 -0
  164. package/docs/examples/account/delete.md +1 -0
  165. package/docs/examples/account/get-mfa-recovery-codes.md +1 -0
  166. package/docs/examples/account/get-prefs.md +1 -0
  167. package/docs/examples/account/get-session.md +2 -0
  168. package/docs/examples/account/get.md +1 -0
  169. package/docs/examples/account/list-identities.md +1 -0
  170. package/docs/examples/account/list-logs.md +1 -0
  171. package/docs/examples/account/list-mfa-factors.md +1 -0
  172. package/docs/examples/account/list-sessions.md +1 -0
  173. package/docs/examples/account/update-email-verification.md +3 -0
  174. package/docs/examples/account/update-email.md +3 -0
  175. package/docs/examples/account/update-magic-url-session.md +3 -0
  176. package/docs/examples/account/update-mfa-authenticator.md +3 -0
  177. package/docs/examples/account/update-mfa-challenge.md +3 -0
  178. package/docs/examples/account/update-mfa-recovery-codes.md +1 -0
  179. package/docs/examples/account/update-mfa.md +2 -0
  180. package/docs/examples/account/update-name.md +2 -0
  181. package/docs/examples/account/update-password.md +2 -0
  182. package/docs/examples/account/update-phone-session.md +3 -0
  183. package/docs/examples/account/update-phone-verification.md +3 -0
  184. package/docs/examples/account/update-phone.md +3 -0
  185. package/docs/examples/account/update-prefs.md +2 -0
  186. package/docs/examples/account/update-push-target.md +3 -0
  187. package/docs/examples/account/update-recovery.md +4 -0
  188. package/docs/examples/account/update-session.md +2 -0
  189. package/docs/examples/account/update-status.md +1 -0
  190. package/docs/examples/account/update-verification.md +3 -0
  191. package/docs/examples/console/get-resource.md +3 -0
  192. package/docs/examples/console/variables.md +1 -0
  193. package/docs/examples/databases/create-boolean-attribute.md +5 -0
  194. package/docs/examples/databases/create-collection.md +4 -0
  195. package/docs/examples/databases/create-datetime-attribute.md +5 -0
  196. package/docs/examples/databases/create-document.md +5 -0
  197. package/docs/examples/databases/create-documents.md +4 -0
  198. package/docs/examples/databases/create-email-attribute.md +5 -0
  199. package/docs/examples/databases/create-enum-attribute.md +6 -0
  200. package/docs/examples/databases/create-float-attribute.md +5 -0
  201. package/docs/examples/databases/create-index.md +6 -0
  202. package/docs/examples/databases/create-integer-attribute.md +5 -0
  203. package/docs/examples/databases/create-ip-attribute.md +5 -0
  204. package/docs/examples/databases/create-line-attribute.md +5 -0
  205. package/docs/examples/databases/create-operations.md +2 -0
  206. package/docs/examples/databases/create-point-attribute.md +5 -0
  207. package/docs/examples/databases/create-polygon-attribute.md +5 -0
  208. package/docs/examples/databases/create-relationship-attribute.md +5 -0
  209. package/docs/examples/databases/create-string-attribute.md +6 -0
  210. package/docs/examples/databases/create-transaction.md +1 -0
  211. package/docs/examples/databases/create-url-attribute.md +5 -0
  212. package/docs/examples/databases/create.md +3 -0
  213. package/docs/examples/databases/decrement-document-attribute.md +5 -0
  214. package/docs/examples/databases/delete-attribute.md +4 -0
  215. package/docs/examples/databases/delete-collection.md +3 -0
  216. package/docs/examples/databases/delete-document.md +4 -0
  217. package/docs/examples/databases/delete-documents.md +3 -0
  218. package/docs/examples/databases/delete-index.md +4 -0
  219. package/docs/examples/databases/delete-transaction.md +2 -0
  220. package/docs/examples/databases/delete.md +2 -0
  221. package/docs/examples/databases/get-attribute.md +4 -0
  222. package/docs/examples/databases/get-collection-usage.md +3 -0
  223. package/docs/examples/databases/get-collection.md +3 -0
  224. package/docs/examples/databases/get-document.md +4 -0
  225. package/docs/examples/databases/get-index.md +4 -0
  226. package/docs/examples/databases/get-transaction.md +2 -0
  227. package/docs/examples/databases/get-usage.md +2 -0
  228. package/docs/examples/databases/get.md +2 -0
  229. package/docs/examples/databases/increment-document-attribute.md +5 -0
  230. package/docs/examples/databases/list-attributes.md +3 -0
  231. package/docs/examples/databases/list-collection-logs.md +3 -0
  232. package/docs/examples/databases/list-collections.md +2 -0
  233. package/docs/examples/databases/list-document-logs.md +4 -0
  234. package/docs/examples/databases/list-documents.md +3 -0
  235. package/docs/examples/databases/list-indexes.md +3 -0
  236. package/docs/examples/databases/list-logs.md +2 -0
  237. package/docs/examples/databases/list-transactions.md +1 -0
  238. package/docs/examples/databases/list-usage.md +1 -0
  239. package/docs/examples/databases/list.md +1 -0
  240. package/docs/examples/databases/update-boolean-attribute.md +6 -0
  241. package/docs/examples/databases/update-collection.md +4 -0
  242. package/docs/examples/databases/update-datetime-attribute.md +6 -0
  243. package/docs/examples/databases/update-document.md +4 -0
  244. package/docs/examples/databases/update-documents.md +3 -0
  245. package/docs/examples/databases/update-email-attribute.md +6 -0
  246. package/docs/examples/databases/update-enum-attribute.md +7 -0
  247. package/docs/examples/databases/update-float-attribute.md +6 -0
  248. package/docs/examples/databases/update-integer-attribute.md +6 -0
  249. package/docs/examples/databases/update-ip-attribute.md +6 -0
  250. package/docs/examples/databases/update-line-attribute.md +5 -0
  251. package/docs/examples/databases/update-point-attribute.md +5 -0
  252. package/docs/examples/databases/update-polygon-attribute.md +5 -0
  253. package/docs/examples/databases/update-relationship-attribute.md +4 -0
  254. package/docs/examples/databases/update-string-attribute.md +6 -0
  255. package/docs/examples/databases/update-transaction.md +2 -0
  256. package/docs/examples/databases/update-url-attribute.md +6 -0
  257. package/docs/examples/databases/update.md +3 -0
  258. package/docs/examples/databases/upsert-document.md +4 -0
  259. package/docs/examples/databases/upsert-documents.md +4 -0
  260. package/docs/examples/functions/create-deployment.md +4 -0
  261. package/docs/examples/functions/create-duplicate-deployment.md +3 -0
  262. package/docs/examples/functions/create-execution.md +2 -0
  263. package/docs/examples/functions/create-template-deployment.md +7 -0
  264. package/docs/examples/functions/create-variable.md +4 -0
  265. package/docs/examples/functions/create-vcs-deployment.md +4 -0
  266. package/docs/examples/functions/create.md +4 -0
  267. package/docs/examples/functions/delete-deployment.md +3 -0
  268. package/docs/examples/functions/delete-execution.md +3 -0
  269. package/docs/examples/functions/delete-variable.md +3 -0
  270. package/docs/examples/functions/delete.md +2 -0
  271. package/docs/examples/functions/get-deployment-download.md +3 -0
  272. package/docs/examples/functions/get-deployment.md +3 -0
  273. package/docs/examples/functions/get-execution.md +3 -0
  274. package/docs/examples/functions/get-template.md +2 -0
  275. package/docs/examples/functions/get-usage.md +2 -0
  276. package/docs/examples/functions/get-variable.md +3 -0
  277. package/docs/examples/functions/get.md +2 -0
  278. package/docs/examples/functions/list-deployments.md +2 -0
  279. package/docs/examples/functions/list-executions.md +2 -0
  280. package/docs/examples/functions/list-runtimes.md +1 -0
  281. package/docs/examples/functions/list-specifications.md +1 -0
  282. package/docs/examples/functions/list-templates.md +1 -0
  283. package/docs/examples/functions/list-usage.md +1 -0
  284. package/docs/examples/functions/list-variables.md +2 -0
  285. package/docs/examples/functions/list.md +1 -0
  286. package/docs/examples/functions/update-deployment-status.md +3 -0
  287. package/docs/examples/functions/update-function-deployment.md +3 -0
  288. package/docs/examples/functions/update-variable.md +4 -0
  289. package/docs/examples/functions/update.md +3 -0
  290. package/docs/examples/graphql/mutation.md +2 -0
  291. package/docs/examples/graphql/query.md +2 -0
  292. package/docs/examples/health/get-antivirus.md +1 -0
  293. package/docs/examples/health/get-cache.md +1 -0
  294. package/docs/examples/health/get-certificate.md +1 -0
  295. package/docs/examples/health/get-db.md +1 -0
  296. package/docs/examples/health/get-failed-jobs.md +2 -0
  297. package/docs/examples/health/get-pub-sub.md +1 -0
  298. package/docs/examples/health/get-queue-builds.md +1 -0
  299. package/docs/examples/health/get-queue-certificates.md +1 -0
  300. package/docs/examples/health/get-queue-databases.md +1 -0
  301. package/docs/examples/health/get-queue-deletes.md +1 -0
  302. package/docs/examples/health/get-queue-functions.md +1 -0
  303. package/docs/examples/health/get-queue-logs.md +1 -0
  304. package/docs/examples/health/get-queue-mails.md +1 -0
  305. package/docs/examples/health/get-queue-messaging.md +1 -0
  306. package/docs/examples/health/get-queue-migrations.md +1 -0
  307. package/docs/examples/health/get-queue-stats-resources.md +1 -0
  308. package/docs/examples/health/get-queue-usage.md +1 -0
  309. package/docs/examples/health/get-queue-webhooks.md +1 -0
  310. package/docs/examples/health/get-storage-local.md +1 -0
  311. package/docs/examples/health/get-storage.md +1 -0
  312. package/docs/examples/health/get-time.md +1 -0
  313. package/docs/examples/health/get.md +1 -0
  314. package/docs/examples/locale/get.md +1 -0
  315. package/docs/examples/locale/list-codes.md +1 -0
  316. package/docs/examples/locale/list-continents.md +1 -0
  317. package/docs/examples/locale/list-countries-eu.md +1 -0
  318. package/docs/examples/locale/list-countries-phones.md +1 -0
  319. package/docs/examples/locale/list-countries.md +1 -0
  320. package/docs/examples/locale/list-currencies.md +1 -0
  321. package/docs/examples/locale/list-languages.md +1 -0
  322. package/docs/examples/messaging/create-apns-provider.md +3 -0
  323. package/docs/examples/messaging/create-email.md +4 -0
  324. package/docs/examples/messaging/create-fcm-provider.md +3 -0
  325. package/docs/examples/messaging/create-mailgun-provider.md +3 -0
  326. package/docs/examples/messaging/create-msg-91-provider.md +3 -0
  327. package/docs/examples/messaging/create-push.md +2 -0
  328. package/docs/examples/messaging/create-resend-provider.md +3 -0
  329. package/docs/examples/messaging/create-sendgrid-provider.md +3 -0
  330. package/docs/examples/messaging/create-sms.md +3 -0
  331. package/docs/examples/messaging/create-smtp-provider.md +4 -0
  332. package/docs/examples/messaging/create-subscriber.md +4 -0
  333. package/docs/examples/messaging/create-telesign-provider.md +3 -0
  334. package/docs/examples/messaging/create-textmagic-provider.md +3 -0
  335. package/docs/examples/messaging/create-topic.md +3 -0
  336. package/docs/examples/messaging/create-twilio-provider.md +3 -0
  337. package/docs/examples/messaging/create-vonage-provider.md +3 -0
  338. package/docs/examples/messaging/delete-provider.md +2 -0
  339. package/docs/examples/messaging/delete-subscriber.md +3 -0
  340. package/docs/examples/messaging/delete-topic.md +2 -0
  341. package/docs/examples/messaging/delete.md +2 -0
  342. package/docs/examples/messaging/get-message.md +2 -0
  343. package/docs/examples/messaging/get-provider.md +2 -0
  344. package/docs/examples/messaging/get-subscriber.md +3 -0
  345. package/docs/examples/messaging/get-topic.md +2 -0
  346. package/docs/examples/messaging/list-message-logs.md +2 -0
  347. package/docs/examples/messaging/list-messages.md +1 -0
  348. package/docs/examples/messaging/list-provider-logs.md +2 -0
  349. package/docs/examples/messaging/list-providers.md +1 -0
  350. package/docs/examples/messaging/list-subscriber-logs.md +2 -0
  351. package/docs/examples/messaging/list-subscribers.md +2 -0
  352. package/docs/examples/messaging/list-targets.md +2 -0
  353. package/docs/examples/messaging/list-topic-logs.md +2 -0
  354. package/docs/examples/messaging/list-topics.md +1 -0
  355. package/docs/examples/messaging/update-apns-provider.md +2 -0
  356. package/docs/examples/messaging/update-email.md +2 -0
  357. package/docs/examples/messaging/update-fcm-provider.md +2 -0
  358. package/docs/examples/messaging/update-mailgun-provider.md +2 -0
  359. package/docs/examples/messaging/update-msg-91-provider.md +2 -0
  360. package/docs/examples/messaging/update-push.md +2 -0
  361. package/docs/examples/messaging/update-resend-provider.md +2 -0
  362. package/docs/examples/messaging/update-sendgrid-provider.md +2 -0
  363. package/docs/examples/messaging/update-sms.md +2 -0
  364. package/docs/examples/messaging/update-smtp-provider.md +2 -0
  365. package/docs/examples/messaging/update-telesign-provider.md +2 -0
  366. package/docs/examples/messaging/update-textmagic-provider.md +2 -0
  367. package/docs/examples/messaging/update-topic.md +2 -0
  368. package/docs/examples/messaging/update-twilio-provider.md +2 -0
  369. package/docs/examples/messaging/update-vonage-provider.md +2 -0
  370. package/docs/examples/migrations/create-appwrite-migration.md +5 -0
  371. package/docs/examples/migrations/create-csv-export.md +3 -0
  372. package/docs/examples/migrations/create-csv-import.md +4 -0
  373. package/docs/examples/migrations/create-firebase-migration.md +3 -0
  374. package/docs/examples/migrations/create-n-host-migration.md +8 -0
  375. package/docs/examples/migrations/create-supabase-migration.md +7 -0
  376. package/docs/examples/migrations/delete.md +2 -0
  377. package/docs/examples/migrations/get-appwrite-report.md +5 -0
  378. package/docs/examples/migrations/get-firebase-report.md +3 -0
  379. package/docs/examples/migrations/get-n-host-report.md +8 -0
  380. package/docs/examples/migrations/get-supabase-report.md +7 -0
  381. package/docs/examples/migrations/get.md +2 -0
  382. package/docs/examples/migrations/list.md +1 -0
  383. package/docs/examples/migrations/retry.md +2 -0
  384. package/docs/examples/project/create-variable.md +3 -0
  385. package/docs/examples/project/delete-variable.md +2 -0
  386. package/docs/examples/project/get-usage.md +3 -0
  387. package/docs/examples/project/get-variable.md +2 -0
  388. package/docs/examples/project/list-variables.md +1 -0
  389. package/docs/examples/project/update-variable.md +3 -0
  390. package/docs/examples/projects/create-dev-key.md +4 -0
  391. package/docs/examples/projects/create-jwt.md +3 -0
  392. package/docs/examples/projects/create-key.md +4 -0
  393. package/docs/examples/projects/create-platform.md +4 -0
  394. package/docs/examples/projects/create-smtp-test.md +6 -0
  395. package/docs/examples/projects/create-webhook.md +6 -0
  396. package/docs/examples/projects/create.md +4 -0
  397. package/docs/examples/projects/delete-dev-key.md +3 -0
  398. package/docs/examples/projects/delete-email-template.md +4 -0
  399. package/docs/examples/projects/delete-key.md +3 -0
  400. package/docs/examples/projects/delete-platform.md +3 -0
  401. package/docs/examples/projects/delete-sms-template.md +4 -0
  402. package/docs/examples/projects/delete-webhook.md +3 -0
  403. package/docs/examples/projects/delete.md +2 -0
  404. package/docs/examples/projects/get-dev-key.md +3 -0
  405. package/docs/examples/projects/get-email-template.md +4 -0
  406. package/docs/examples/projects/get-key.md +3 -0
  407. package/docs/examples/projects/get-platform.md +3 -0
  408. package/docs/examples/projects/get-sms-template.md +4 -0
  409. package/docs/examples/projects/get-webhook.md +3 -0
  410. package/docs/examples/projects/get.md +2 -0
  411. package/docs/examples/projects/list-dev-keys.md +2 -0
  412. package/docs/examples/projects/list-keys.md +2 -0
  413. package/docs/examples/projects/list-platforms.md +2 -0
  414. package/docs/examples/projects/list-webhooks.md +2 -0
  415. package/docs/examples/projects/list.md +1 -0
  416. package/docs/examples/projects/update-api-status-all.md +3 -0
  417. package/docs/examples/projects/update-api-status.md +4 -0
  418. package/docs/examples/projects/update-auth-duration.md +3 -0
  419. package/docs/examples/projects/update-auth-limit.md +3 -0
  420. package/docs/examples/projects/update-auth-password-dictionary.md +3 -0
  421. package/docs/examples/projects/update-auth-password-history.md +3 -0
  422. package/docs/examples/projects/update-auth-sessions-limit.md +3 -0
  423. package/docs/examples/projects/update-auth-status.md +4 -0
  424. package/docs/examples/projects/update-dev-key.md +5 -0
  425. package/docs/examples/projects/update-email-template.md +6 -0
  426. package/docs/examples/projects/update-key.md +5 -0
  427. package/docs/examples/projects/update-labels.md +3 -0
  428. package/docs/examples/projects/update-memberships-privacy.md +5 -0
  429. package/docs/examples/projects/update-mock-numbers.md +3 -0
  430. package/docs/examples/projects/update-o-auth-2.md +3 -0
  431. package/docs/examples/projects/update-personal-data-check.md +3 -0
  432. package/docs/examples/projects/update-platform.md +4 -0
  433. package/docs/examples/projects/update-service-status-all.md +3 -0
  434. package/docs/examples/projects/update-service-status.md +4 -0
  435. package/docs/examples/projects/update-session-alerts.md +3 -0
  436. package/docs/examples/projects/update-session-invalidation.md +3 -0
  437. package/docs/examples/projects/update-sms-template.md +5 -0
  438. package/docs/examples/projects/update-smtp.md +3 -0
  439. package/docs/examples/projects/update-team.md +3 -0
  440. package/docs/examples/projects/update-webhook-signature.md +3 -0
  441. package/docs/examples/projects/update-webhook.md +7 -0
  442. package/docs/examples/projects/update.md +3 -0
  443. package/docs/examples/proxy/create-api-rule.md +2 -0
  444. package/docs/examples/proxy/create-function-rule.md +3 -0
  445. package/docs/examples/proxy/create-redirect-rule.md +6 -0
  446. package/docs/examples/proxy/create-site-rule.md +3 -0
  447. package/docs/examples/proxy/delete-rule.md +2 -0
  448. package/docs/examples/proxy/get-rule.md +2 -0
  449. package/docs/examples/proxy/list-rules.md +1 -0
  450. package/docs/examples/proxy/update-rule-verification.md +2 -0
  451. package/docs/examples/sites/create-deployment.md +4 -0
  452. package/docs/examples/sites/create-duplicate-deployment.md +3 -0
  453. package/docs/examples/sites/create-template-deployment.md +7 -0
  454. package/docs/examples/sites/create-variable.md +4 -0
  455. package/docs/examples/sites/create-vcs-deployment.md +4 -0
  456. package/docs/examples/sites/create.md +5 -0
  457. package/docs/examples/sites/delete-deployment.md +3 -0
  458. package/docs/examples/sites/delete-log.md +3 -0
  459. package/docs/examples/sites/delete-variable.md +3 -0
  460. package/docs/examples/sites/delete.md +2 -0
  461. package/docs/examples/sites/get-deployment-download.md +3 -0
  462. package/docs/examples/sites/get-deployment.md +3 -0
  463. package/docs/examples/sites/get-log.md +3 -0
  464. package/docs/examples/sites/get-template.md +2 -0
  465. package/docs/examples/sites/get-usage.md +2 -0
  466. package/docs/examples/sites/get-variable.md +3 -0
  467. package/docs/examples/sites/get.md +2 -0
  468. package/docs/examples/sites/list-deployments.md +2 -0
  469. package/docs/examples/sites/list-frameworks.md +1 -0
  470. package/docs/examples/sites/list-logs.md +2 -0
  471. package/docs/examples/sites/list-specifications.md +1 -0
  472. package/docs/examples/sites/list-templates.md +1 -0
  473. package/docs/examples/sites/list-usage.md +1 -0
  474. package/docs/examples/sites/list-variables.md +2 -0
  475. package/docs/examples/sites/list.md +1 -0
  476. package/docs/examples/sites/update-deployment-status.md +3 -0
  477. package/docs/examples/sites/update-site-deployment.md +3 -0
  478. package/docs/examples/sites/update-variable.md +4 -0
  479. package/docs/examples/sites/update.md +4 -0
  480. package/docs/examples/storage/create-bucket.md +3 -0
  481. package/docs/examples/storage/create-file.md +4 -0
  482. package/docs/examples/storage/delete-bucket.md +2 -0
  483. package/docs/examples/storage/delete-file.md +3 -0
  484. package/docs/examples/storage/get-bucket-usage.md +2 -0
  485. package/docs/examples/storage/get-bucket.md +2 -0
  486. package/docs/examples/storage/get-file-download.md +3 -0
  487. package/docs/examples/storage/get-file-preview.md +3 -0
  488. package/docs/examples/storage/get-file-view.md +3 -0
  489. package/docs/examples/storage/get-file.md +3 -0
  490. package/docs/examples/storage/get-usage.md +1 -0
  491. package/docs/examples/storage/list-buckets.md +1 -0
  492. package/docs/examples/storage/list-files.md +2 -0
  493. package/docs/examples/storage/update-bucket.md +3 -0
  494. package/docs/examples/storage/update-file.md +3 -0
  495. package/docs/examples/tablesdb/create-boolean-column.md +5 -0
  496. package/docs/examples/tablesdb/create-datetime-column.md +5 -0
  497. package/docs/examples/tablesdb/create-email-column.md +5 -0
  498. package/docs/examples/tablesdb/create-enum-column.md +6 -0
  499. package/docs/examples/tablesdb/create-float-column.md +5 -0
  500. package/docs/examples/tablesdb/create-index.md +6 -0
  501. package/docs/examples/tablesdb/create-integer-column.md +5 -0
  502. package/docs/examples/tablesdb/create-ip-column.md +5 -0
  503. package/docs/examples/tablesdb/create-line-column.md +5 -0
  504. package/docs/examples/tablesdb/create-operations.md +2 -0
  505. package/docs/examples/tablesdb/create-point-column.md +5 -0
  506. package/docs/examples/tablesdb/create-polygon-column.md +5 -0
  507. package/docs/examples/tablesdb/create-relationship-column.md +5 -0
  508. package/docs/examples/tablesdb/create-row.md +5 -0
  509. package/docs/examples/tablesdb/create-rows.md +4 -0
  510. package/docs/examples/tablesdb/create-string-column.md +6 -0
  511. package/docs/examples/tablesdb/create-table.md +4 -0
  512. package/docs/examples/tablesdb/create-transaction.md +1 -0
  513. package/docs/examples/tablesdb/create-url-column.md +5 -0
  514. package/docs/examples/tablesdb/create.md +3 -0
  515. package/docs/examples/tablesdb/decrement-row-column.md +5 -0
  516. package/docs/examples/tablesdb/delete-column.md +4 -0
  517. package/docs/examples/tablesdb/delete-index.md +4 -0
  518. package/docs/examples/tablesdb/delete-row.md +4 -0
  519. package/docs/examples/tablesdb/delete-rows.md +3 -0
  520. package/docs/examples/tablesdb/delete-table.md +3 -0
  521. package/docs/examples/tablesdb/delete-transaction.md +2 -0
  522. package/docs/examples/tablesdb/delete.md +2 -0
  523. package/docs/examples/tablesdb/get-column.md +4 -0
  524. package/docs/examples/tablesdb/get-index.md +4 -0
  525. package/docs/examples/tablesdb/get-row.md +4 -0
  526. package/docs/examples/tablesdb/get-table-usage.md +3 -0
  527. package/docs/examples/tablesdb/get-table.md +3 -0
  528. package/docs/examples/tablesdb/get-transaction.md +2 -0
  529. package/docs/examples/tablesdb/get-usage.md +2 -0
  530. package/docs/examples/tablesdb/get.md +2 -0
  531. package/docs/examples/tablesdb/increment-row-column.md +5 -0
  532. package/docs/examples/tablesdb/list-columns.md +3 -0
  533. package/docs/examples/tablesdb/list-indexes.md +3 -0
  534. package/docs/examples/tablesdb/list-row-logs.md +4 -0
  535. package/docs/examples/tablesdb/list-rows.md +3 -0
  536. package/docs/examples/tablesdb/list-table-logs.md +3 -0
  537. package/docs/examples/tablesdb/list-tables.md +2 -0
  538. package/docs/examples/tablesdb/list-transactions.md +1 -0
  539. package/docs/examples/tablesdb/list-usage.md +1 -0
  540. package/docs/examples/tablesdb/list.md +1 -0
  541. package/docs/examples/tablesdb/update-boolean-column.md +6 -0
  542. package/docs/examples/tablesdb/update-datetime-column.md +6 -0
  543. package/docs/examples/tablesdb/update-email-column.md +6 -0
  544. package/docs/examples/tablesdb/update-enum-column.md +7 -0
  545. package/docs/examples/tablesdb/update-float-column.md +6 -0
  546. package/docs/examples/tablesdb/update-integer-column.md +6 -0
  547. package/docs/examples/tablesdb/update-ip-column.md +6 -0
  548. package/docs/examples/tablesdb/update-line-column.md +5 -0
  549. package/docs/examples/tablesdb/update-point-column.md +5 -0
  550. package/docs/examples/tablesdb/update-polygon-column.md +5 -0
  551. package/docs/examples/tablesdb/update-relationship-column.md +4 -0
  552. package/docs/examples/tablesdb/update-row.md +4 -0
  553. package/docs/examples/tablesdb/update-rows.md +3 -0
  554. package/docs/examples/tablesdb/update-string-column.md +6 -0
  555. package/docs/examples/tablesdb/update-table.md +4 -0
  556. package/docs/examples/tablesdb/update-transaction.md +2 -0
  557. package/docs/examples/tablesdb/update-url-column.md +6 -0
  558. package/docs/examples/tablesdb/update.md +3 -0
  559. package/docs/examples/tablesdb/upsert-row.md +4 -0
  560. package/docs/examples/tablesdb/upsert-rows.md +4 -0
  561. package/docs/examples/teams/create-membership.md +3 -0
  562. package/docs/examples/teams/create.md +3 -0
  563. package/docs/examples/teams/delete-membership.md +3 -0
  564. package/docs/examples/teams/delete.md +2 -0
  565. package/docs/examples/teams/get-membership.md +3 -0
  566. package/docs/examples/teams/get-prefs.md +2 -0
  567. package/docs/examples/teams/get.md +2 -0
  568. package/docs/examples/teams/list-logs.md +2 -0
  569. package/docs/examples/teams/list-memberships.md +2 -0
  570. package/docs/examples/teams/list.md +1 -0
  571. package/docs/examples/teams/update-membership-status.md +5 -0
  572. package/docs/examples/teams/update-membership.md +4 -0
  573. package/docs/examples/teams/update-name.md +3 -0
  574. package/docs/examples/teams/update-prefs.md +3 -0
  575. package/docs/examples/tokens/create-file-token.md +3 -0
  576. package/docs/examples/tokens/delete.md +2 -0
  577. package/docs/examples/tokens/get.md +2 -0
  578. package/docs/examples/tokens/list.md +3 -0
  579. package/docs/examples/tokens/update.md +2 -0
  580. package/docs/examples/users/create-argon-2-user.md +4 -0
  581. package/docs/examples/users/create-bcrypt-user.md +4 -0
  582. package/docs/examples/users/create-jwt.md +2 -0
  583. package/docs/examples/users/create-md-5-user.md +4 -0
  584. package/docs/examples/users/create-mfa-recovery-codes.md +2 -0
  585. package/docs/examples/users/create-ph-pass-user.md +4 -0
  586. package/docs/examples/users/create-scrypt-modified-user.md +7 -0
  587. package/docs/examples/users/create-scrypt-user.md +9 -0
  588. package/docs/examples/users/create-session.md +2 -0
  589. package/docs/examples/users/create-sha-user.md +4 -0
  590. package/docs/examples/users/create-target.md +5 -0
  591. package/docs/examples/users/create-token.md +2 -0
  592. package/docs/examples/users/create.md +2 -0
  593. package/docs/examples/users/delete-identity.md +2 -0
  594. package/docs/examples/users/delete-mfa-authenticator.md +3 -0
  595. package/docs/examples/users/delete-session.md +3 -0
  596. package/docs/examples/users/delete-sessions.md +2 -0
  597. package/docs/examples/users/delete-target.md +3 -0
  598. package/docs/examples/users/delete.md +2 -0
  599. package/docs/examples/users/get-mfa-recovery-codes.md +2 -0
  600. package/docs/examples/users/get-prefs.md +2 -0
  601. package/docs/examples/users/get-target.md +3 -0
  602. package/docs/examples/users/get-usage.md +1 -0
  603. package/docs/examples/users/get.md +2 -0
  604. package/docs/examples/users/list-identities.md +1 -0
  605. package/docs/examples/users/list-logs.md +2 -0
  606. package/docs/examples/users/list-memberships.md +2 -0
  607. package/docs/examples/users/list-mfa-factors.md +2 -0
  608. package/docs/examples/users/list-sessions.md +2 -0
  609. package/docs/examples/users/list-targets.md +2 -0
  610. package/docs/examples/users/list.md +1 -0
  611. package/docs/examples/users/update-email-verification.md +3 -0
  612. package/docs/examples/users/update-email.md +3 -0
  613. package/docs/examples/users/update-labels.md +3 -0
  614. package/docs/examples/users/update-mfa-recovery-codes.md +2 -0
  615. package/docs/examples/users/update-mfa.md +3 -0
  616. package/docs/examples/users/update-name.md +3 -0
  617. package/docs/examples/users/update-password.md +3 -0
  618. package/docs/examples/users/update-phone-verification.md +3 -0
  619. package/docs/examples/users/update-phone.md +3 -0
  620. package/docs/examples/users/update-prefs.md +3 -0
  621. package/docs/examples/users/update-status.md +3 -0
  622. package/docs/examples/users/update-target.md +3 -0
  623. package/docs/examples/vcs/create-repository-detection.md +4 -0
  624. package/docs/examples/vcs/create-repository.md +4 -0
  625. package/docs/examples/vcs/delete-installation.md +2 -0
  626. package/docs/examples/vcs/get-installation.md +2 -0
  627. package/docs/examples/vcs/get-repository-contents.md +3 -0
  628. package/docs/examples/vcs/get-repository.md +3 -0
  629. package/docs/examples/vcs/list-installations.md +1 -0
  630. package/docs/examples/vcs/list-repositories.md +3 -0
  631. package/docs/examples/vcs/list-repository-branches.md +3 -0
  632. package/docs/examples/vcs/update-external-deployments.md +4 -0
  633. package/install.ps1 +3 -3
  634. package/install.sh +3 -3
  635. package/lib/client.ts +15 -7
  636. package/lib/commands/config.ts +22 -6
  637. package/lib/commands/generate.ts +76 -0
  638. package/lib/commands/generators/databases.ts +508 -0
  639. package/lib/commands/init.ts +25 -14
  640. package/lib/commands/pull.ts +245 -193
  641. package/lib/commands/push.ts +336 -130
  642. package/lib/commands/run.ts +1 -1
  643. package/lib/commands/schema.ts +30 -11
  644. package/lib/commands/services/account.ts +200 -385
  645. package/lib/commands/services/console.ts +13 -34
  646. package/lib/commands/services/databases.ts +298 -1215
  647. package/lib/commands/services/functions.ts +115 -434
  648. package/lib/commands/services/graphql.ts +5 -2
  649. package/lib/commands/services/health.ts +87 -149
  650. package/lib/commands/services/locale.ts +36 -33
  651. package/lib/commands/services/messaging.ts +180 -999
  652. package/lib/commands/services/migrations.ts +54 -226
  653. package/lib/commands/services/project.ts +19 -23
  654. package/lib/commands/services/projects.ts +194 -714
  655. package/lib/commands/services/proxy.ts +30 -58
  656. package/lib/commands/services/sites.ts +107 -379
  657. package/lib/commands/services/storage.ts +93 -302
  658. package/lib/commands/services/tables-db.ts +1150 -0
  659. package/lib/commands/services/teams.ts +48 -110
  660. package/lib/commands/services/tokens.ts +16 -28
  661. package/lib/commands/services/users.ts +133 -403
  662. package/lib/commands/services/vcs.ts +48 -151
  663. package/lib/commands/types.ts +1 -1
  664. package/lib/commands/update.ts +12 -11
  665. package/lib/commands/utils/attributes.ts +44 -53
  666. package/lib/commands/utils/deployment.ts +6 -2
  667. package/lib/commands/utils/pools.ts +7 -6
  668. package/lib/config.ts +51 -4
  669. package/lib/constants.ts +22 -0
  670. package/lib/emulation/docker.ts +97 -83
  671. package/lib/parser.ts +16 -11
  672. package/lib/questions.ts +36 -21
  673. package/lib/sdks.ts +15 -11
  674. package/lib/utils.ts +35 -4
  675. package/package.json +4 -4
  676. package/scoop/appwrite.config.json +29 -19
  677. package/.github/workflows/build-verify.yml +0 -71
  678. package/bun.lock +0 -627
  679. package/dist/lib/commands/db.d.ts +0 -34
  680. package/dist/lib/commands/db.d.ts.map +0 -1
  681. package/dist/lib/commands/db.js +0 -247
  682. package/dist/lib/commands/db.js.map +0 -1
  683. package/dist/lib/commands/services/avatars.d.ts +0 -3
  684. package/dist/lib/commands/services/avatars.d.ts.map +0 -1
  685. package/dist/lib/commands/services/avatars.js +0 -118
  686. package/dist/lib/commands/services/avatars.js.map +0 -1
  687. package/dist/lib/commands/services/tablesdb.d.ts +0 -3
  688. package/dist/lib/commands/services/tablesdb.d.ts.map +0 -1
  689. package/dist/lib/commands/services/tablesdb.js.map +0 -1
  690. package/dist/scripts/generate-commands.d.ts +0 -2
  691. package/dist/scripts/generate-commands.d.ts.map +0 -1
  692. package/dist/scripts/generate-commands.js +0 -398
  693. package/dist/scripts/generate-commands.js.map +0 -1
  694. package/dist/sites/profile-website/src/lib/utils.d.ts +0 -4
  695. package/dist/sites/profile-website/src/lib/utils.d.ts.map +0 -1
  696. package/dist/sites/profile-website/src/lib/utils.js +0 -32
  697. package/dist/sites/profile-website/src/lib/utils.js.map +0 -1
  698. package/dist/sites/profile-website/tailwind.config.d.ts +0 -3
  699. package/dist/sites/profile-website/tailwind.config.d.ts.map +0 -1
  700. package/dist/sites/profile-website/tailwind.config.js +0 -110
  701. package/dist/sites/profile-website/tailwind.config.js.map +0 -1
  702. package/dist/test.d.ts +0 -2
  703. package/dist/test.d.ts.map +0 -1
  704. package/dist/test.js +0 -38
  705. package/dist/test.js.map +0 -1
  706. package/lib/commands/db.ts +0 -324
  707. package/lib/commands/services/avatars.ts +0 -400
  708. package/lib/commands/services/tablesdb.ts +0 -1928
  709. package/scripts/generate-commands.ts +0 -539
@@ -1,9 +1,11 @@
1
1
  import fs from "fs";
2
+ import path from "path";
2
3
  import { parse as parseDotenv } from "dotenv";
3
4
  import chalk from "chalk";
4
5
  import inquirer from "inquirer";
5
6
  import { Command } from "commander";
6
7
  import ID from "../id.js";
8
+ import { EXECUTABLE_NAME } from "../constants.js";
7
9
  import {
8
10
  localConfig,
9
11
  globalConfig,
@@ -15,7 +17,8 @@ import {
15
17
  KeysCollection,
16
18
  KeysTable,
17
19
  } from "../config.js";
18
- import type { SettingsType, ConfigType } from "./config.js";
20
+ import { ConfigSchema, type SettingsType, type ConfigType } from "./config.js";
21
+ import { parseWithBetterErrors } from "./utils/error-formatter.js";
19
22
  import { createSettingsObject } from "../utils.js";
20
23
  import { Spinner, SPINNER_DOTS } from "../spinner.js";
21
24
  import { paginate } from "../paginate.js";
@@ -24,7 +27,9 @@ import {
24
27
  questionsPushBuckets,
25
28
  questionsPushTeams,
26
29
  questionsPushFunctions,
30
+ questionsPushFunctionsCode,
27
31
  questionsPushSites,
32
+ questionsPushSitesCode,
28
33
  questionsGetEntrypoint,
29
34
  questionsPushCollections,
30
35
  questionsPushTables,
@@ -74,6 +79,7 @@ import { checkAndApplyTablesDBChanges } from "./utils/database-sync.js";
74
79
 
75
80
  const POLL_DEBOUNCE = 2000; // Milliseconds
76
81
  const POLL_DEFAULT_VALUE = 30;
82
+ const DEPLOYMENT_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
77
83
 
78
84
  export interface PushOptions {
79
85
  all?: boolean;
@@ -86,6 +92,7 @@ export interface PushOptions {
86
92
  teams?: boolean;
87
93
  topics?: boolean;
88
94
  skipDeprecated?: boolean;
95
+ skipConfirmation?: boolean;
89
96
  functionOptions?: {
90
97
  async?: boolean;
91
98
  code?: boolean;
@@ -96,6 +103,9 @@ export interface PushOptions {
96
103
  code?: boolean;
97
104
  withVariables?: boolean;
98
105
  };
106
+ tableOptions?: {
107
+ attempts?: number;
108
+ };
99
109
  }
100
110
 
101
111
  interface PushSiteOptions {
@@ -114,15 +124,54 @@ interface PushFunctionOptions {
114
124
 
115
125
  interface PushTableOptions {
116
126
  attempts?: number;
127
+ skipConfirmation?: boolean;
117
128
  }
118
129
 
119
130
  export class Push {
120
131
  private projectClient: Client;
121
132
  private consoleClient: Client;
133
+ private silent: boolean;
122
134
 
123
- constructor(projectClient: Client, consoleClient: Client) {
135
+ constructor(projectClient: Client, consoleClient: Client, silent = false) {
124
136
  this.projectClient = projectClient;
125
137
  this.consoleClient = consoleClient;
138
+ this.silent = silent;
139
+ }
140
+
141
+ /**
142
+ * Log a message (respects silent mode)
143
+ */
144
+ private log(message: string): void {
145
+ if (!this.silent) {
146
+ log(message);
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Log a success message (respects silent mode)
152
+ */
153
+ private success(message: string): void {
154
+ if (!this.silent) {
155
+ success(message);
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Log a warning message (respects silent mode)
161
+ */
162
+ private warn(message: string): void {
163
+ if (!this.silent) {
164
+ warn(message);
165
+ }
166
+ }
167
+
168
+ /**
169
+ * Log an error message (respects silent mode)
170
+ */
171
+ private error(message: string): void {
172
+ if (!this.silent) {
173
+ error(message);
174
+ }
126
175
  }
127
176
 
128
177
  public async pushResources(
@@ -143,12 +192,15 @@ export class Push {
143
192
  (config.projectName || config.settings)
144
193
  ) {
145
194
  try {
146
- log("Pushing settings ...");
195
+ this.log("Pushing settings ...");
147
196
  await this.pushSettings({
148
197
  projectId: config.projectId,
149
198
  projectName: config.projectName,
150
199
  settings: config.settings,
151
200
  });
201
+ this.success(
202
+ `Successfully pushed ${chalk.bold("all")} project settings.`,
203
+ );
152
204
  results.settings = { success: true };
153
205
  } catch (e: any) {
154
206
  allErrors.push(e);
@@ -163,8 +215,11 @@ export class Push {
163
215
  config.buckets.length > 0
164
216
  ) {
165
217
  try {
166
- log("Pushing buckets ...");
218
+ this.log("Pushing buckets ...");
167
219
  const result = await this.pushBuckets(config.buckets);
220
+ this.success(
221
+ `Successfully pushed ${chalk.bold(result.successfullyPushed)} buckets.`,
222
+ );
168
223
  results.buckets = result;
169
224
  allErrors.push(...result.errors);
170
225
  } catch (e: any) {
@@ -180,8 +235,11 @@ export class Push {
180
235
  config.teams.length > 0
181
236
  ) {
182
237
  try {
183
- log("Pushing teams ...");
238
+ this.log("Pushing teams ...");
184
239
  const result = await this.pushTeams(config.teams);
240
+ this.success(
241
+ `Successfully pushed ${chalk.bold(result.successfullyPushed)} teams.`,
242
+ );
185
243
  results.teams = result;
186
244
  allErrors.push(...result.errors);
187
245
  } catch (e: any) {
@@ -197,8 +255,11 @@ export class Push {
197
255
  config.topics.length > 0
198
256
  ) {
199
257
  try {
200
- log("Pushing topics ...");
258
+ this.log("Pushing topics ...");
201
259
  const result = await this.pushMessagingTopics(config.topics);
260
+ this.success(
261
+ `Successfully pushed ${chalk.bold(result.successfullyPushed)} topics.`,
262
+ );
202
263
  results.topics = result;
203
264
  allErrors.push(...result.errors);
204
265
  } catch (e: any) {
@@ -214,11 +275,14 @@ export class Push {
214
275
  config.functions.length > 0
215
276
  ) {
216
277
  try {
217
- log("Pushing functions ...");
278
+ this.log("Pushing functions ...");
218
279
  const result = await this.pushFunctions(
219
280
  config.functions,
220
281
  options.functionOptions,
221
282
  );
283
+ this.success(
284
+ `Successfully pushed ${chalk.bold(result.successfullyPushed)} functions.`,
285
+ );
222
286
  results.functions = result;
223
287
  allErrors.push(...result.errors);
224
288
  } catch (e: any) {
@@ -239,8 +303,11 @@ export class Push {
239
303
  config.sites.length > 0
240
304
  ) {
241
305
  try {
242
- log("Pushing sites ...");
306
+ this.log("Pushing sites ...");
243
307
  const result = await this.pushSites(config.sites, options.siteOptions);
308
+ this.success(
309
+ `Successfully pushed ${chalk.bold(result.successfullyPushed)} sites.`,
310
+ );
244
311
  results.sites = result;
245
312
  allErrors.push(...result.errors);
246
313
  } catch (e: any) {
@@ -261,8 +328,14 @@ export class Push {
261
328
  config.tables.length > 0
262
329
  ) {
263
330
  try {
264
- log("Pushing tables ...");
265
- const result = await this.pushTables(config.tables);
331
+ this.log("Pushing tables ...");
332
+ const result = await this.pushTables(config.tables, {
333
+ attempts: options.tableOptions?.attempts,
334
+ skipConfirmation: options.skipConfirmation,
335
+ });
336
+ this.success(
337
+ `Successfully pushed ${chalk.bold(result.successfullyPushed)} tables.`,
338
+ );
266
339
  results.tables = result;
267
340
  allErrors.push(...result.errors);
268
341
  } catch (e: any) {
@@ -271,15 +344,14 @@ export class Push {
271
344
  }
272
345
  }
273
346
 
274
- // Push collections (unless skipDeprecated is true)
347
+ // Push collections (skipDeprecated only applies when pushing all, explicit collections option takes precedence)
275
348
  if (
276
- !skipDeprecated &&
277
- (shouldPushAll || options.collections) &&
349
+ (options.collections || (shouldPushAll && !skipDeprecated)) &&
278
350
  config.collections &&
279
351
  config.collections.length > 0
280
352
  ) {
281
353
  try {
282
- log("Pushing collections ...");
354
+ this.log("Pushing collections ...");
283
355
  // Add database names to collections
284
356
  const collectionsWithDbNames = config.collections.map(
285
357
  (collection: any) => {
@@ -292,7 +364,12 @@ export class Push {
292
364
  };
293
365
  },
294
366
  );
295
- const result = await this.pushCollections(collectionsWithDbNames);
367
+ const result = await this.pushCollections(collectionsWithDbNames, {
368
+ skipConfirmation: options.skipConfirmation,
369
+ });
370
+ this.success(
371
+ `Successfully pushed ${chalk.bold(result.successfullyPushed)} collections.`,
372
+ );
296
373
  results.collections = result;
297
374
  allErrors.push(...result.errors);
298
375
  } catch (e: any) {
@@ -318,6 +395,7 @@ export class Push {
318
395
  const settings = config.settings ?? {};
319
396
 
320
397
  if (projectName) {
398
+ this.log("Applying project name ...");
321
399
  await projectsService.update({
322
400
  projectId: projectId,
323
401
  name: projectName,
@@ -325,6 +403,7 @@ export class Push {
325
403
  }
326
404
 
327
405
  if (settings.services) {
406
+ this.log("Applying service statuses ...");
328
407
  for (let [service, status] of Object.entries(settings.services)) {
329
408
  await projectsService.updateServiceStatus({
330
409
  projectId: projectId,
@@ -336,17 +415,18 @@ export class Push {
336
415
 
337
416
  if (settings.auth) {
338
417
  if (settings.auth.security) {
418
+ this.log("Applying auth security settings ...");
339
419
  await projectsService.updateAuthDuration({
340
420
  projectId,
341
- duration: settings.auth.security.duration,
421
+ duration: Number(settings.auth.security.duration),
342
422
  });
343
423
  await projectsService.updateAuthLimit({
344
424
  projectId,
345
- limit: settings.auth.security.limit,
425
+ limit: Number(settings.auth.security.limit),
346
426
  });
347
427
  await projectsService.updateAuthSessionsLimit({
348
428
  projectId,
349
- limit: settings.auth.security.sessionsLimit,
429
+ limit: Number(settings.auth.security.sessionsLimit),
350
430
  });
351
431
  await projectsService.updateAuthPasswordDictionary({
352
432
  projectId,
@@ -354,7 +434,7 @@ export class Push {
354
434
  });
355
435
  await projectsService.updateAuthPasswordHistory({
356
436
  projectId,
357
- limit: settings.auth.security.passwordHistory,
437
+ limit: Number(settings.auth.security.passwordHistory),
358
438
  });
359
439
  await projectsService.updatePersonalDataCheck({
360
440
  projectId,
@@ -371,6 +451,7 @@ export class Push {
371
451
  }
372
452
 
373
453
  if (settings.auth.methods) {
454
+ this.log("Applying auth methods statuses ...");
374
455
  for (let [method, status] of Object.entries(settings.auth.methods)) {
375
456
  await projectsService.updateAuthStatus({
376
457
  projectId,
@@ -391,7 +472,7 @@ export class Push {
391
472
 
392
473
  for (const bucket of buckets) {
393
474
  try {
394
- log(`Pushing bucket ${chalk.bold(bucket["name"])} ...`);
475
+ this.log(`Pushing bucket ${chalk.bold(bucket["name"])} ...`);
395
476
  const storageService = await getStorageService(this.projectClient);
396
477
 
397
478
  try {
@@ -430,7 +511,7 @@ export class Push {
430
511
  successfullyPushed++;
431
512
  } catch (e: any) {
432
513
  errors.push(e);
433
- error(`Failed to push bucket ${bucket["name"]}: ${e.message}`);
514
+ this.error(`Failed to push bucket ${bucket["name"]}: ${e.message}`);
434
515
  }
435
516
  }
436
517
 
@@ -449,7 +530,7 @@ export class Push {
449
530
 
450
531
  for (const team of teams) {
451
532
  try {
452
- log(`Pushing team ${chalk.bold(team["name"])} ...`);
533
+ this.log(`Pushing team ${chalk.bold(team["name"])} ...`);
453
534
  const teamsService = await getTeamsService(this.projectClient);
454
535
 
455
536
  try {
@@ -472,7 +553,7 @@ export class Push {
472
553
  successfullyPushed++;
473
554
  } catch (e: any) {
474
555
  errors.push(e);
475
- error(`Failed to push team ${team["name"]}: ${e.message}`);
556
+ this.error(`Failed to push team ${team["name"]}: ${e.message}`);
476
557
  }
477
558
  }
478
559
 
@@ -491,7 +572,7 @@ export class Push {
491
572
 
492
573
  for (const topic of topics) {
493
574
  try {
494
- log(`Pushing topic ${chalk.bold(topic["name"])} ...`);
575
+ this.log(`Pushing topic ${chalk.bold(topic["name"])} ...`);
495
576
  const messagingService = await getMessagingService(this.projectClient);
496
577
 
497
578
  try {
@@ -513,11 +594,11 @@ export class Push {
513
594
  }
514
595
  }
515
596
 
516
- success(`Created ${topic.name} ( ${topic["$id"]} )`);
597
+ this.success(`Pushed ${topic.name} ( ${topic["$id"]} )`);
517
598
  successfullyPushed++;
518
599
  } catch (e: any) {
519
600
  errors.push(e);
520
- error(`Failed to push topic ${topic["name"]}: ${e.message}`);
601
+ this.error(`Failed to push topic ${topic["name"]}: ${e.message}`);
521
602
  }
522
603
  }
523
604
 
@@ -632,21 +713,21 @@ export class Push {
632
713
  let domain = "";
633
714
  try {
634
715
  const consoleService = await getConsoleService(
635
- this.projectClient,
716
+ this.consoleClient,
636
717
  );
637
718
  const variables = await consoleService.variables();
638
719
  domain = ID.unique() + "." + variables["_APP_DOMAIN_FUNCTIONS"];
639
- } catch (error) {
640
- console.error("Error fetching console variables.");
641
- throw error;
720
+ } catch (err) {
721
+ this.error("Error fetching console variables.");
722
+ throw err;
642
723
  }
643
724
 
644
725
  try {
645
726
  const proxyService = await getProxyService(this.projectClient);
646
727
  await proxyService.createFunctionRule(domain, func.$id);
647
- } catch (error) {
648
- console.error("Error creating function rule.");
649
- throw error;
728
+ } catch (err) {
729
+ this.error("Error creating function rule.");
730
+ throw err;
650
731
  }
651
732
 
652
733
  updaterRow.update({ status: "Created" });
@@ -730,6 +811,29 @@ export class Push {
730
811
  return;
731
812
  }
732
813
 
814
+ if (!func.path) {
815
+ errors.push(
816
+ new Error(`Function '${func.name}' has no path configured`),
817
+ );
818
+ updaterRow.fail({
819
+ errorMessage: `No path configured for function`,
820
+ });
821
+ return;
822
+ }
823
+
824
+ if (
825
+ !fs.existsSync(func.path) ||
826
+ fs.readdirSync(func.path).length === 0
827
+ ) {
828
+ errors.push(
829
+ new Error(`Deployment not found or empty at path: ${func.path}`),
830
+ );
831
+ updaterRow.fail({
832
+ errorMessage: `path not found or empty: ${path.relative(process.cwd(), path.resolve(func.path))}`,
833
+ });
834
+ return;
835
+ }
836
+
733
837
  try {
734
838
  updaterRow.update({ status: "Pushing" }).replaceSpinner(SPINNER_DOTS);
735
839
  const functionsServiceDeploy = await getFunctionsService(
@@ -761,7 +865,7 @@ export class Push {
761
865
  switch (e.code) {
762
866
  case "ENOENT":
763
867
  updaterRow.fail({
764
- errorMessage: "Not found in the current directory. Skipping...",
868
+ errorMessage: `Deployment not found at path: ${path.resolve(func.path)}`,
765
869
  });
766
870
  break;
767
871
  default:
@@ -780,7 +884,21 @@ export class Push {
780
884
  end: "Checking deployment status...",
781
885
  });
782
886
 
887
+ const timeoutDeadline = Date.now() + DEPLOYMENT_TIMEOUT_MS;
888
+
783
889
  while (true) {
890
+ if (Date.now() > timeoutDeadline) {
891
+ failedDeployments.push({
892
+ name: func["name"],
893
+ $id: func["$id"],
894
+ deployment: deploymentId,
895
+ });
896
+ updaterRow.fail({
897
+ errorMessage: "Deployment timed out after 10 minutes",
898
+ });
899
+ break;
900
+ }
901
+
784
902
  const functionsServicePoll = await getFunctionsService(
785
903
  this.projectClient,
786
904
  );
@@ -830,7 +948,7 @@ export class Push {
830
948
  }
831
949
 
832
950
  await new Promise((resolve) =>
833
- setTimeout(resolve, POLL_DEBOUNCE * 1.5),
951
+ setTimeout(resolve, POLL_DEBOUNCE),
834
952
  );
835
953
  }
836
954
  } catch (e: any) {
@@ -960,21 +1078,21 @@ export class Push {
960
1078
  let domain = "";
961
1079
  try {
962
1080
  const consoleService = await getConsoleService(
963
- this.projectClient,
1081
+ this.consoleClient,
964
1082
  );
965
1083
  const variables = await consoleService.variables();
966
1084
  domain = ID.unique() + "." + variables["_APP_DOMAIN_SITES"];
967
- } catch (error) {
968
- console.error("Error fetching console variables.");
969
- throw error;
1085
+ } catch (err) {
1086
+ this.error("Error fetching console variables.");
1087
+ throw err;
970
1088
  }
971
1089
 
972
1090
  try {
973
1091
  const proxyService = await getProxyService(this.projectClient);
974
1092
  await proxyService.createSiteRule(domain, site.$id);
975
- } catch (error) {
976
- console.error("Error creating site rule.");
977
- throw error;
1093
+ } catch (err) {
1094
+ this.error("Error creating site rule.");
1095
+ throw err;
978
1096
  }
979
1097
 
980
1098
  updaterRow.update({ status: "Created" });
@@ -1054,6 +1172,27 @@ export class Push {
1054
1172
  return;
1055
1173
  }
1056
1174
 
1175
+ if (!site.path) {
1176
+ errors.push(new Error(`Site '${site.name}' has no path configured`));
1177
+ updaterRow.fail({
1178
+ errorMessage: `No path configured for site`,
1179
+ });
1180
+ return;
1181
+ }
1182
+
1183
+ if (
1184
+ !fs.existsSync(site.path) ||
1185
+ fs.readdirSync(site.path).length === 0
1186
+ ) {
1187
+ errors.push(
1188
+ new Error(`Deployment not found or empty at path: ${site.path}`),
1189
+ );
1190
+ updaterRow.fail({
1191
+ errorMessage: `path not found or empty: ${path.relative(process.cwd(), path.resolve(site.path))}`,
1192
+ });
1193
+ return;
1194
+ }
1195
+
1057
1196
  try {
1058
1197
  updaterRow.update({ status: "Pushing" }).replaceSpinner(SPINNER_DOTS);
1059
1198
  const sitesServiceDeploy = await getSitesService(this.projectClient);
@@ -1083,7 +1222,7 @@ export class Push {
1083
1222
  switch (e.code) {
1084
1223
  case "ENOENT":
1085
1224
  updaterRow.fail({
1086
- errorMessage: "Not found in the current directory. Skipping...",
1225
+ errorMessage: `Deployment not found at path: ${path.resolve(site.path)}`,
1087
1226
  });
1088
1227
  break;
1089
1228
  default:
@@ -1102,7 +1241,21 @@ export class Push {
1102
1241
  end: "Checking deployment status...",
1103
1242
  });
1104
1243
 
1244
+ const timeoutDeadline = Date.now() + DEPLOYMENT_TIMEOUT_MS;
1245
+
1105
1246
  while (true) {
1247
+ if (Date.now() > timeoutDeadline) {
1248
+ failedDeployments.push({
1249
+ name: site["name"],
1250
+ $id: site["$id"],
1251
+ deployment: deploymentId,
1252
+ });
1253
+ updaterRow.fail({
1254
+ errorMessage: "Deployment timed out after 10 minutes",
1255
+ });
1256
+ break;
1257
+ }
1258
+
1106
1259
  const sitesServicePoll = await getSitesService(
1107
1260
  this.projectClient,
1108
1261
  );
@@ -1119,12 +1272,14 @@ export class Push {
1119
1272
  const proxyServiceUrl = await getProxyService(
1120
1273
  this.projectClient,
1121
1274
  );
1122
- const res = await proxyServiceUrl.listRules([
1123
- Query.limit(1),
1124
- Query.equal("deploymentResourceType", "site"),
1125
- Query.equal("deploymentResourceId", site["$id"]),
1126
- Query.equal("trigger", "manual"),
1127
- ]);
1275
+ const res = await proxyServiceUrl.listRules({
1276
+ queries: [
1277
+ Query.limit(1),
1278
+ Query.equal("deploymentResourceType", "site"),
1279
+ Query.equal("deploymentResourceId", site["$id"]),
1280
+ Query.equal("trigger", "manual"),
1281
+ ],
1282
+ });
1128
1283
 
1129
1284
  if (Number(res.total) === 1) {
1130
1285
  url = `https://${res.rules[0].domain}`;
@@ -1150,7 +1305,7 @@ export class Push {
1150
1305
  }
1151
1306
 
1152
1307
  await new Promise((resolve) =>
1153
- setTimeout(resolve, POLL_DEBOUNCE * 1.5),
1308
+ setTimeout(resolve, POLL_DEBOUNCE),
1154
1309
  );
1155
1310
  }
1156
1311
  } catch (e: any) {
@@ -1178,14 +1333,15 @@ export class Push {
1178
1333
 
1179
1334
  public async pushTables(
1180
1335
  tables: any[],
1181
- attempts?: number,
1336
+ options: PushTableOptions = {},
1182
1337
  ): Promise<{
1183
1338
  successfullyPushed: number;
1184
1339
  errors: any[];
1185
1340
  }> {
1341
+ const { attempts, skipConfirmation = false } = options;
1186
1342
  const pollMaxDebounces = attempts ?? POLL_DEFAULT_VALUE;
1187
1343
  const pools = new Pools(pollMaxDebounces);
1188
- const attributes = new Attributes(pools);
1344
+ const attributes = new Attributes(pools, skipConfirmation);
1189
1345
 
1190
1346
  let tablesChanged = new Set();
1191
1347
  const errors: any[] = [];
@@ -1212,15 +1368,15 @@ export class Push {
1212
1368
  changes.push("permissions");
1213
1369
 
1214
1370
  if (changes.length > 0) {
1215
- await tablesService.updateTable(
1216
- table["databaseId"],
1217
- table["$id"],
1218
- table.name,
1219
- table.rowSecurity,
1220
- table["$permissions"],
1221
- );
1371
+ await tablesService.updateTable({
1372
+ databaseId: table["databaseId"],
1373
+ tableId: table["$id"],
1374
+ name: table.name,
1375
+ rowSecurity: table.rowSecurity,
1376
+ permissions: table["$permissions"],
1377
+ });
1222
1378
 
1223
- success(
1379
+ this.success(
1224
1380
  `Updated ${table.name} ( ${table["$id"]} ) - ${changes.join(", ")}`,
1225
1381
  );
1226
1382
  tablesChanged.add(table["$id"]);
@@ -1230,19 +1386,21 @@ export class Push {
1230
1386
  table.isExisted = true;
1231
1387
  } catch (e: any) {
1232
1388
  if (Number(e.code) === 404) {
1233
- log(
1389
+ this.log(
1234
1390
  `Table ${table.name} does not exist in the project. Creating ... `,
1235
1391
  );
1236
1392
  const tablesService = await getTablesDBService(this.projectClient);
1237
- await tablesService.createTable(
1238
- table["databaseId"],
1239
- table["$id"],
1240
- table.name,
1241
- table.rowSecurity,
1242
- table["$permissions"],
1243
- );
1393
+ await tablesService.createTable({
1394
+ databaseId: table["databaseId"],
1395
+ tableId: table["$id"],
1396
+ name: table.name,
1397
+ rowSecurity: table.rowSecurity,
1398
+ permissions: table["$permissions"]
1399
+ ? [...table["$permissions"]]
1400
+ : undefined,
1401
+ });
1244
1402
 
1245
- success(`Created ${table.name} ( ${table["$id"]} )`);
1403
+ this.success(`Created ${table.name} ( ${table["$id"]} )`);
1246
1404
  tablesChanged.add(table["$id"]);
1247
1405
  } else {
1248
1406
  errors.push(e);
@@ -1280,7 +1438,7 @@ export class Push {
1280
1438
  }
1281
1439
  }
1282
1440
 
1283
- log(
1441
+ this.log(
1284
1442
  `Pushing table ${table.name} ( ${table["databaseId"]} - ${table["$id"]} ) attributes`,
1285
1443
  );
1286
1444
 
@@ -1298,7 +1456,7 @@ export class Push {
1298
1456
  throw e;
1299
1457
  }
1300
1458
  tablesChanged.add(table["$id"]);
1301
- success(`Successfully pushed ${table.name} ( ${table["$id"]} )`);
1459
+ this.success(`Successfully pushed ${table.name} ( ${table["$id"]} )`);
1302
1460
  }
1303
1461
 
1304
1462
  return {
@@ -1307,12 +1465,16 @@ export class Push {
1307
1465
  };
1308
1466
  }
1309
1467
 
1310
- public async pushCollections(collections: any[]): Promise<{
1468
+ public async pushCollections(
1469
+ collections: any[],
1470
+ options: { skipConfirmation?: boolean } = {},
1471
+ ): Promise<{
1311
1472
  successfullyPushed: number;
1312
1473
  errors: any[];
1313
1474
  }> {
1475
+ const { skipConfirmation = false } = options;
1314
1476
  const pools = new Pools(POLL_DEFAULT_VALUE);
1315
- const attributes = new Attributes(pools);
1477
+ const attributes = new Attributes(pools, skipConfirmation);
1316
1478
 
1317
1479
  const errors: any[] = [];
1318
1480
 
@@ -1336,16 +1498,20 @@ export class Push {
1336
1498
  if (database.name !== localDatabaseName) {
1337
1499
  await databasesService.update(databaseId, localDatabaseName);
1338
1500
 
1339
- success(`Updated ${localDatabaseName} ( ${databaseId} ) name`);
1501
+ this.success(`Updated ${localDatabaseName} ( ${databaseId} ) name`);
1340
1502
  }
1341
- } catch (err) {
1342
- log(`Database ${databaseId} not found. Creating it now ...`);
1503
+ } catch (err: any) {
1504
+ if (Number(err.code) === 404) {
1505
+ this.log(`Database ${databaseId} not found. Creating it now ...`);
1343
1506
 
1344
- const localDatabaseName =
1345
- collections.find((c: any) => c.databaseId === databaseId)
1346
- ?.databaseName ?? databaseId;
1507
+ const localDatabaseName =
1508
+ collections.find((c: any) => c.databaseId === databaseId)
1509
+ ?.databaseName ?? databaseId;
1347
1510
 
1348
- await databasesService.create(databaseId, localDatabaseName);
1511
+ await databasesService.create(databaseId, localDatabaseName);
1512
+ } else {
1513
+ throw err;
1514
+ }
1349
1515
  }
1350
1516
  }),
1351
1517
  );
@@ -1369,26 +1535,28 @@ export class Push {
1369
1535
  collection.name,
1370
1536
  );
1371
1537
 
1372
- success(`Updated ${collection.name} ( ${collection["$id"]} ) name`);
1538
+ this.success(
1539
+ `Updated ${collection.name} ( ${collection["$id"]} ) name`,
1540
+ );
1373
1541
  }
1374
1542
  collection.remoteVersion = remoteCollection;
1375
1543
 
1376
1544
  collection.isExisted = true;
1377
1545
  } catch (e: any) {
1378
1546
  if (Number(e.code) === 404) {
1379
- log(
1547
+ this.log(
1380
1548
  `Collection ${collection.name} does not exist in the project. Creating ... `,
1381
1549
  );
1382
1550
  const databasesService = await getDatabasesService(
1383
1551
  this.projectClient,
1384
1552
  );
1385
- await databasesService.createCollection(
1386
- collection["databaseId"],
1387
- collection["$id"],
1388
- collection.name,
1389
- collection.documentSecurity,
1390
- collection["$permissions"],
1391
- );
1553
+ await databasesService.createCollection({
1554
+ databaseId: collection["databaseId"],
1555
+ collectionId: collection["$id"],
1556
+ name: collection.name,
1557
+ documentSecurity: collection.documentSecurity,
1558
+ permissions: collection["$permissions"],
1559
+ });
1392
1560
  } else {
1393
1561
  errors.push(e);
1394
1562
  throw e;
@@ -1426,7 +1594,7 @@ export class Push {
1426
1594
  }
1427
1595
  }
1428
1596
 
1429
- log(
1597
+ this.log(
1430
1598
  `Pushing collection ${collection.name} ( ${collection["databaseId"]} - ${collection["$id"]} ) attributes`,
1431
1599
  );
1432
1600
 
@@ -1447,7 +1615,7 @@ export class Push {
1447
1615
  throw e;
1448
1616
  }
1449
1617
  numberOfCollections++;
1450
- success(
1618
+ this.success(
1451
1619
  `Successfully pushed ${collection.name} ( ${collection["$id"]} )`,
1452
1620
  );
1453
1621
  }
@@ -1459,10 +1627,10 @@ export class Push {
1459
1627
  }
1460
1628
  }
1461
1629
 
1462
- async function createPushInstance(): Promise<Push> {
1630
+ async function createPushInstance(silent = false): Promise<Push> {
1463
1631
  const projectClient = await sdkForProject();
1464
1632
  const consoleClient = await sdkForConsole();
1465
- return new Push(projectClient, consoleClient);
1633
+ return new Push(projectClient, consoleClient, silent);
1466
1634
  }
1467
1635
 
1468
1636
  const pushResources = async ({
@@ -1473,13 +1641,54 @@ const pushResources = async ({
1473
1641
  if (cliConfig.all) {
1474
1642
  checkDeployConditions(localConfig);
1475
1643
 
1644
+ const functions = localConfig.getFunctions();
1645
+ let allowFunctionsCodePush: boolean | null =
1646
+ cliConfig.force === true ? true : null;
1647
+ if (functions.length > 0 && allowFunctionsCodePush === null) {
1648
+ const codeAnswer = await inquirer.prompt(questionsPushFunctionsCode);
1649
+ allowFunctionsCodePush = codeAnswer.override;
1650
+ }
1651
+
1652
+ const sites = localConfig.getSites();
1653
+ let allowSitesCodePush: boolean | null =
1654
+ cliConfig.force === true ? true : null;
1655
+ if (sites.length > 0 && allowSitesCodePush === null) {
1656
+ const codeAnswer = await inquirer.prompt(questionsPushSitesCode);
1657
+ allowSitesCodePush = codeAnswer.override;
1658
+ }
1659
+
1476
1660
  const pushInstance = await createPushInstance();
1477
- const config = localConfig.getProject() as ConfigType;
1661
+ const project = localConfig.getProject();
1662
+ const config: ConfigType = {
1663
+ projectId: project.projectId ?? "",
1664
+ projectName: project.projectName,
1665
+ settings: project.projectSettings,
1666
+ functions,
1667
+ sites,
1668
+ collections: localConfig.getCollections(),
1669
+ databases: localConfig.getDatabases(),
1670
+ tables: localConfig.getTables(),
1671
+ tablesDB: localConfig.getTablesDBs(),
1672
+ buckets: localConfig.getBuckets(),
1673
+ teams: localConfig.getTeams(),
1674
+ topics: localConfig.getMessagingTopics(),
1675
+ };
1676
+
1677
+ parseWithBetterErrors<ConfigType>(
1678
+ ConfigSchema,
1679
+ config,
1680
+ "Configuration validation failed",
1681
+ config,
1682
+ );
1478
1683
 
1479
1684
  await pushInstance.pushResources(config, {
1685
+ all: cliConfig.all,
1480
1686
  skipDeprecated,
1481
- functionOptions: { code: true, withVariables: false },
1482
- siteOptions: { code: true, withVariables: false },
1687
+ functionOptions: {
1688
+ code: allowFunctionsCodePush === true,
1689
+ withVariables: false,
1690
+ },
1691
+ siteOptions: { code: allowSitesCodePush === true, withVariables: false },
1483
1692
  });
1484
1693
  } else {
1485
1694
  const actions: Record<string, (options?: any) => Promise<void>> = {
@@ -1555,25 +1764,6 @@ const pushSettings = async (): Promise<void> => {
1555
1764
 
1556
1765
  const pushInstance = await createPushInstance();
1557
1766
  const config = localConfig.getProject();
1558
- const settings = config.projectSettings ?? {};
1559
-
1560
- if (config.projectName) {
1561
- log("Applying project name ...");
1562
- }
1563
-
1564
- if (settings.services) {
1565
- log("Applying service statuses ...");
1566
- }
1567
-
1568
- if (settings.auth) {
1569
- if (settings.auth.security) {
1570
- log("Applying auth security settings ...");
1571
- }
1572
-
1573
- if (settings.auth.methods) {
1574
- log("Applying auth methods statuses ...");
1575
- }
1576
- }
1577
1767
 
1578
1768
  await pushInstance.pushSettings({
1579
1769
  projectId: config.projectId,
@@ -1619,7 +1809,7 @@ const pushSite = async ({
1619
1809
  if (siteIds.length === 0) {
1620
1810
  log("No sites found.");
1621
1811
  hint(
1622
- "Use 'appwrite pull sites' to synchronize existing one, or use 'appwrite init site' to create a new one.",
1812
+ `Use '${EXECUTABLE_NAME} pull sites' to synchronize existing one, or use '${EXECUTABLE_NAME} init site' to create a new one.`,
1623
1813
  );
1624
1814
  return;
1625
1815
  }
@@ -1662,12 +1852,20 @@ const pushSite = async ({
1662
1852
  return;
1663
1853
  }
1664
1854
 
1855
+ let allowCodePush: boolean | null = cliConfig.force === true ? true : null;
1856
+ if (code !== false && allowCodePush === null) {
1857
+ const codeAnswer = await inquirer.prompt(questionsPushSitesCode);
1858
+ allowCodePush = codeAnswer.override;
1859
+ }
1860
+
1861
+ const shouldPushCode = code !== false && allowCodePush === true;
1862
+
1665
1863
  log("Pushing sites ...");
1666
1864
 
1667
1865
  const pushInstance = await createPushInstance();
1668
1866
  const result = await pushInstance.pushSites(sites, {
1669
1867
  async: asyncDeploy,
1670
- code,
1868
+ code: shouldPushCode,
1671
1869
  withVariables,
1672
1870
  });
1673
1871
 
@@ -1740,7 +1938,7 @@ const pushFunction = async ({
1740
1938
  if (functionIds.length === 0) {
1741
1939
  log("No functions found.");
1742
1940
  hint(
1743
- "Use 'appwrite pull functions' to synchronize existing one, or use 'appwrite init function' to create a new one.",
1941
+ `Use '${EXECUTABLE_NAME} pull functions' to synchronize existing one, or use '${EXECUTABLE_NAME} init function' to create a new one.`,
1744
1942
  );
1745
1943
  return;
1746
1944
  }
@@ -1782,12 +1980,20 @@ const pushFunction = async ({
1782
1980
  return;
1783
1981
  }
1784
1982
 
1983
+ let allowCodePush: boolean | null = cliConfig.force === true ? true : null;
1984
+ if (code !== false && allowCodePush === null) {
1985
+ const codeAnswer = await inquirer.prompt(questionsPushFunctionsCode);
1986
+ allowCodePush = codeAnswer.override;
1987
+ }
1988
+
1989
+ const shouldPushCode = code !== false && allowCodePush === true;
1990
+
1785
1991
  log("Pushing functions ...");
1786
1992
 
1787
1993
  const pushInstance = await createPushInstance();
1788
1994
  const result = await pushInstance.pushFunctions(functions, {
1789
1995
  async: asyncDeploy,
1790
- code,
1996
+ code: shouldPushCode,
1791
1997
  withVariables,
1792
1998
  });
1793
1999
 
@@ -1861,7 +2067,7 @@ const pushTable = async ({
1861
2067
  const validTablesDBs = localTablesDBs.filter((db: any) =>
1862
2068
  remoteDatabaseIds.has(db.$id),
1863
2069
  );
1864
- localConfig.set("tables", validTablesDBs);
2070
+ localConfig.set("tablesDB", validTablesDBs);
1865
2071
 
1866
2072
  success("Configuration resynced successfully.");
1867
2073
  console.log();
@@ -1956,7 +2162,7 @@ const pushTable = async ({
1956
2162
  if (tables.length === 0) {
1957
2163
  log("No tables found.");
1958
2164
  hint(
1959
- "Use 'appwrite pull tables' to synchronize existing one, or use 'appwrite init table' to create a new one.",
2165
+ `Use '${EXECUTABLE_NAME} pull tables' to synchronize existing one, or use '${EXECUTABLE_NAME} init table' to create a new one.`,
1960
2166
  );
1961
2167
  return;
1962
2168
  }
@@ -1982,7 +2188,7 @@ const pushTable = async ({
1982
2188
  log("Pushing tables ...");
1983
2189
 
1984
2190
  const pushInstance = await createPushInstance();
1985
- const result = await pushInstance.pushTables(tables, attempts);
2191
+ const result = await pushInstance.pushTables(tables, { attempts });
1986
2192
 
1987
2193
  const { successfullyPushed, errors } = result;
1988
2194
 
@@ -1997,9 +2203,9 @@ const pushTable = async ({
1997
2203
  }
1998
2204
  };
1999
2205
 
2000
- const pushCollection = async ({}: PushTableOptions = {}): Promise<void> => {
2206
+ const pushCollection = async (): Promise<void> => {
2001
2207
  warn(
2002
- "appwrite push collection has been deprecated. Please consider using 'appwrite push tables' instead",
2208
+ `${EXECUTABLE_NAME} push collection has been deprecated. Please consider using '${EXECUTABLE_NAME} push tables' instead`,
2003
2209
  );
2004
2210
  const collections: any[] = [];
2005
2211
 
@@ -2023,7 +2229,7 @@ const pushCollection = async ({}: PushTableOptions = {}): Promise<void> => {
2023
2229
  if (collections.length === 0) {
2024
2230
  log("No collections found.");
2025
2231
  hint(
2026
- "Use 'appwrite pull collections' to synchronize existing one, or use 'appwrite init collection' to create a new one.",
2232
+ `Use '${EXECUTABLE_NAME} pull collections' to synchronize existing one, or use '${EXECUTABLE_NAME} init collection' to create a new one.`,
2027
2233
  );
2028
2234
  return;
2029
2235
  }
@@ -2092,7 +2298,7 @@ const pushBucket = async (): Promise<void> => {
2092
2298
  if (bucketIds.length === 0) {
2093
2299
  log("No buckets found.");
2094
2300
  hint(
2095
- "Use 'appwrite pull buckets' to synchronize existing one, or use 'appwrite init bucket' to create a new one.",
2301
+ `Use '${EXECUTABLE_NAME} pull buckets' to synchronize existing one, or use '${EXECUTABLE_NAME} init bucket' to create a new one.`,
2096
2302
  );
2097
2303
  return;
2098
2304
  }
@@ -2156,7 +2362,7 @@ const pushTeam = async (): Promise<void> => {
2156
2362
  if (teamIds.length === 0) {
2157
2363
  log("No teams found.");
2158
2364
  hint(
2159
- "Use 'appwrite pull teams' to synchronize existing one, or use 'appwrite init team' to create a new one.",
2365
+ `Use '${EXECUTABLE_NAME} pull teams' to synchronize existing one, or use '${EXECUTABLE_NAME} init team' to create a new one.`,
2160
2366
  );
2161
2367
  return;
2162
2368
  }
@@ -2220,7 +2426,7 @@ const pushMessagingTopic = async (): Promise<void> => {
2220
2426
  if (topicsIds.length === 0) {
2221
2427
  log("No topics found.");
2222
2428
  hint(
2223
- "Use 'appwrite pull topics' to synchronize existing one, or use 'appwrite init topic' to create a new one.",
2429
+ `Use '${EXECUTABLE_NAME} pull topics' to synchronize existing one, or use '${EXECUTABLE_NAME} init topic' to create a new one.`,
2224
2430
  );
2225
2431
  return;
2226
2432
  }
@@ -2345,11 +2551,11 @@ push
2345
2551
  .action(actionRunner(pushMessagingTopic));
2346
2552
 
2347
2553
  export const deploy = new Command("deploy")
2348
- .description("Removed. Use appwrite push instead")
2554
+ .description(`Removed. Use ${EXECUTABLE_NAME} push instead`)
2349
2555
  .action(
2350
2556
  actionRunner(async () => {
2351
2557
  warn(
2352
- "appwrite deploy has been removed. Please use 'appwrite push' instead",
2558
+ `${EXECUTABLE_NAME} deploy has been removed. Please use '${EXECUTABLE_NAME} push' instead`,
2353
2559
  );
2354
2560
  }),
2355
2561
  );