chirag-appwrite-cli 0.1.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 (491) hide show
  1. package/.github/workflows/npm-publish.yml +49 -0
  2. package/CHANGELOG.md +1 -0
  3. package/Formula/appwrite.rb +19 -0
  4. package/LICENSE.md +1 -0
  5. package/README.md +104 -0
  6. package/appwrite.json +164 -0
  7. package/docs/examples/account/create-anonymous-session.md +1 -0
  8. package/docs/examples/account/create-email-password-session.md +3 -0
  9. package/docs/examples/account/create-email-token.md +4 -0
  10. package/docs/examples/account/create-j-w-t.md +1 -0
  11. package/docs/examples/account/create-magic-u-r-l-token.md +5 -0
  12. package/docs/examples/account/create-mfa-authenticator.md +2 -0
  13. package/docs/examples/account/create-mfa-challenge.md +2 -0
  14. package/docs/examples/account/create-mfa-recovery-codes.md +1 -0
  15. package/docs/examples/account/create-o-auth2session.md +5 -0
  16. package/docs/examples/account/create-o-auth2token.md +5 -0
  17. package/docs/examples/account/create-phone-token.md +3 -0
  18. package/docs/examples/account/create-phone-verification.md +1 -0
  19. package/docs/examples/account/create-push-target.md +4 -0
  20. package/docs/examples/account/create-recovery.md +3 -0
  21. package/docs/examples/account/create-session.md +3 -0
  22. package/docs/examples/account/create-verification.md +2 -0
  23. package/docs/examples/account/create.md +5 -0
  24. package/docs/examples/account/delete-identity.md +2 -0
  25. package/docs/examples/account/delete-mfa-authenticator.md +2 -0
  26. package/docs/examples/account/delete-push-target.md +2 -0
  27. package/docs/examples/account/delete-session.md +2 -0
  28. package/docs/examples/account/delete-sessions.md +1 -0
  29. package/docs/examples/account/delete.md +1 -0
  30. package/docs/examples/account/get-mfa-recovery-codes.md +1 -0
  31. package/docs/examples/account/get-prefs.md +1 -0
  32. package/docs/examples/account/get-session.md +2 -0
  33. package/docs/examples/account/get.md +1 -0
  34. package/docs/examples/account/list-identities.md +2 -0
  35. package/docs/examples/account/list-logs.md +2 -0
  36. package/docs/examples/account/list-mfa-factors.md +1 -0
  37. package/docs/examples/account/list-sessions.md +1 -0
  38. package/docs/examples/account/update-email.md +3 -0
  39. package/docs/examples/account/update-m-f-a.md +2 -0
  40. package/docs/examples/account/update-magic-u-r-l-session.md +3 -0
  41. package/docs/examples/account/update-mfa-authenticator.md +3 -0
  42. package/docs/examples/account/update-mfa-challenge.md +3 -0
  43. package/docs/examples/account/update-mfa-recovery-codes.md +1 -0
  44. package/docs/examples/account/update-name.md +2 -0
  45. package/docs/examples/account/update-password.md +3 -0
  46. package/docs/examples/account/update-phone-session.md +3 -0
  47. package/docs/examples/account/update-phone-verification.md +3 -0
  48. package/docs/examples/account/update-phone.md +3 -0
  49. package/docs/examples/account/update-prefs.md +2 -0
  50. package/docs/examples/account/update-push-target.md +3 -0
  51. package/docs/examples/account/update-recovery.md +4 -0
  52. package/docs/examples/account/update-session.md +2 -0
  53. package/docs/examples/account/update-status.md +1 -0
  54. package/docs/examples/account/update-verification.md +3 -0
  55. package/docs/examples/avatars/get-browser.md +5 -0
  56. package/docs/examples/avatars/get-credit-card.md +5 -0
  57. package/docs/examples/avatars/get-favicon.md +2 -0
  58. package/docs/examples/avatars/get-flag.md +5 -0
  59. package/docs/examples/avatars/get-image.md +4 -0
  60. package/docs/examples/avatars/get-initials.md +5 -0
  61. package/docs/examples/avatars/get-q-r.md +5 -0
  62. package/docs/examples/console/get-resource.md +3 -0
  63. package/docs/examples/console/variables.md +1 -0
  64. package/docs/examples/databases/create-boolean-attribute.md +7 -0
  65. package/docs/examples/databases/create-collection.md +7 -0
  66. package/docs/examples/databases/create-datetime-attribute.md +7 -0
  67. package/docs/examples/databases/create-document.md +6 -0
  68. package/docs/examples/databases/create-documents.md +4 -0
  69. package/docs/examples/databases/create-email-attribute.md +7 -0
  70. package/docs/examples/databases/create-enum-attribute.md +8 -0
  71. package/docs/examples/databases/create-float-attribute.md +9 -0
  72. package/docs/examples/databases/create-index.md +8 -0
  73. package/docs/examples/databases/create-integer-attribute.md +9 -0
  74. package/docs/examples/databases/create-ip-attribute.md +7 -0
  75. package/docs/examples/databases/create-relationship-attribute.md +9 -0
  76. package/docs/examples/databases/create-string-attribute.md +9 -0
  77. package/docs/examples/databases/create-url-attribute.md +7 -0
  78. package/docs/examples/databases/create.md +4 -0
  79. package/docs/examples/databases/decrement-document-attribute.md +7 -0
  80. package/docs/examples/databases/delete-attribute.md +4 -0
  81. package/docs/examples/databases/delete-collection.md +3 -0
  82. package/docs/examples/databases/delete-document.md +4 -0
  83. package/docs/examples/databases/delete-documents.md +4 -0
  84. package/docs/examples/databases/delete-index.md +4 -0
  85. package/docs/examples/databases/delete.md +2 -0
  86. package/docs/examples/databases/get-attribute.md +4 -0
  87. package/docs/examples/databases/get-collection-usage.md +4 -0
  88. package/docs/examples/databases/get-collection.md +3 -0
  89. package/docs/examples/databases/get-database-usage.md +3 -0
  90. package/docs/examples/databases/get-document.md +5 -0
  91. package/docs/examples/databases/get-index.md +4 -0
  92. package/docs/examples/databases/get-usage.md +2 -0
  93. package/docs/examples/databases/get.md +2 -0
  94. package/docs/examples/databases/increment-document-attribute.md +7 -0
  95. package/docs/examples/databases/list-attributes.md +4 -0
  96. package/docs/examples/databases/list-collection-logs.md +4 -0
  97. package/docs/examples/databases/list-collections.md +4 -0
  98. package/docs/examples/databases/list-document-logs.md +5 -0
  99. package/docs/examples/databases/list-documents.md +4 -0
  100. package/docs/examples/databases/list-indexes.md +4 -0
  101. package/docs/examples/databases/list-logs.md +3 -0
  102. package/docs/examples/databases/list.md +3 -0
  103. package/docs/examples/databases/update-boolean-attribute.md +7 -0
  104. package/docs/examples/databases/update-collection.md +7 -0
  105. package/docs/examples/databases/update-datetime-attribute.md +7 -0
  106. package/docs/examples/databases/update-document.md +6 -0
  107. package/docs/examples/databases/update-documents.md +5 -0
  108. package/docs/examples/databases/update-email-attribute.md +7 -0
  109. package/docs/examples/databases/update-enum-attribute.md +8 -0
  110. package/docs/examples/databases/update-float-attribute.md +9 -0
  111. package/docs/examples/databases/update-integer-attribute.md +9 -0
  112. package/docs/examples/databases/update-ip-attribute.md +7 -0
  113. package/docs/examples/databases/update-relationship-attribute.md +6 -0
  114. package/docs/examples/databases/update-string-attribute.md +8 -0
  115. package/docs/examples/databases/update-url-attribute.md +7 -0
  116. package/docs/examples/databases/update.md +4 -0
  117. package/docs/examples/databases/upsert-document.md +6 -0
  118. package/docs/examples/databases/upsert-documents.md +4 -0
  119. package/docs/examples/functions/create-deployment.md +6 -0
  120. package/docs/examples/functions/create-duplicate-deployment.md +4 -0
  121. package/docs/examples/functions/create-execution.md +8 -0
  122. package/docs/examples/functions/create-template-deployment.md +7 -0
  123. package/docs/examples/functions/create-variable.md +5 -0
  124. package/docs/examples/functions/create-vcs-deployment.md +5 -0
  125. package/docs/examples/functions/create.md +19 -0
  126. package/docs/examples/functions/delete-deployment.md +3 -0
  127. package/docs/examples/functions/delete-execution.md +3 -0
  128. package/docs/examples/functions/delete-variable.md +3 -0
  129. package/docs/examples/functions/delete.md +2 -0
  130. package/docs/examples/functions/get-deployment-download.md +4 -0
  131. package/docs/examples/functions/get-deployment.md +3 -0
  132. package/docs/examples/functions/get-execution.md +3 -0
  133. package/docs/examples/functions/get-template.md +2 -0
  134. package/docs/examples/functions/get-usage.md +3 -0
  135. package/docs/examples/functions/get-variable.md +3 -0
  136. package/docs/examples/functions/get.md +2 -0
  137. package/docs/examples/functions/list-deployments.md +4 -0
  138. package/docs/examples/functions/list-executions.md +3 -0
  139. package/docs/examples/functions/list-runtimes.md +1 -0
  140. package/docs/examples/functions/list-specifications.md +1 -0
  141. package/docs/examples/functions/list-templates.md +5 -0
  142. package/docs/examples/functions/list-usage.md +2 -0
  143. package/docs/examples/functions/list-variables.md +2 -0
  144. package/docs/examples/functions/list.md +3 -0
  145. package/docs/examples/functions/update-deployment-status.md +3 -0
  146. package/docs/examples/functions/update-function-deployment.md +3 -0
  147. package/docs/examples/functions/update-variable.md +6 -0
  148. package/docs/examples/functions/update.md +19 -0
  149. package/docs/examples/graphql/mutation.md +2 -0
  150. package/docs/examples/graphql/query.md +2 -0
  151. package/docs/examples/health/get-antivirus.md +1 -0
  152. package/docs/examples/health/get-cache.md +1 -0
  153. package/docs/examples/health/get-certificate.md +2 -0
  154. package/docs/examples/health/get-d-b.md +1 -0
  155. package/docs/examples/health/get-failed-jobs.md +3 -0
  156. package/docs/examples/health/get-pub-sub.md +1 -0
  157. package/docs/examples/health/get-queue-builds.md +2 -0
  158. package/docs/examples/health/get-queue-certificates.md +2 -0
  159. package/docs/examples/health/get-queue-databases.md +3 -0
  160. package/docs/examples/health/get-queue-deletes.md +2 -0
  161. package/docs/examples/health/get-queue-functions.md +2 -0
  162. package/docs/examples/health/get-queue-logs.md +2 -0
  163. package/docs/examples/health/get-queue-mails.md +2 -0
  164. package/docs/examples/health/get-queue-messaging.md +2 -0
  165. package/docs/examples/health/get-queue-migrations.md +2 -0
  166. package/docs/examples/health/get-queue-stats-resources.md +2 -0
  167. package/docs/examples/health/get-queue-usage.md +2 -0
  168. package/docs/examples/health/get-queue-webhooks.md +2 -0
  169. package/docs/examples/health/get-storage-local.md +1 -0
  170. package/docs/examples/health/get-storage.md +1 -0
  171. package/docs/examples/health/get-time.md +1 -0
  172. package/docs/examples/health/get.md +1 -0
  173. package/docs/examples/locale/get.md +1 -0
  174. package/docs/examples/locale/list-codes.md +1 -0
  175. package/docs/examples/locale/list-continents.md +1 -0
  176. package/docs/examples/locale/list-countries-e-u.md +1 -0
  177. package/docs/examples/locale/list-countries-phones.md +1 -0
  178. package/docs/examples/locale/list-countries.md +1 -0
  179. package/docs/examples/locale/list-currencies.md +1 -0
  180. package/docs/examples/locale/list-languages.md +1 -0
  181. package/docs/examples/messaging/create-apns-provider.md +9 -0
  182. package/docs/examples/messaging/create-email.md +13 -0
  183. package/docs/examples/messaging/create-fcm-provider.md +5 -0
  184. package/docs/examples/messaging/create-mailgun-provider.md +11 -0
  185. package/docs/examples/messaging/create-msg91provider.md +7 -0
  186. package/docs/examples/messaging/create-push.md +20 -0
  187. package/docs/examples/messaging/create-sendgrid-provider.md +9 -0
  188. package/docs/examples/messaging/create-sms.md +8 -0
  189. package/docs/examples/messaging/create-smtp-provider.md +15 -0
  190. package/docs/examples/messaging/create-subscriber.md +4 -0
  191. package/docs/examples/messaging/create-telesign-provider.md +7 -0
  192. package/docs/examples/messaging/create-textmagic-provider.md +7 -0
  193. package/docs/examples/messaging/create-topic.md +4 -0
  194. package/docs/examples/messaging/create-twilio-provider.md +7 -0
  195. package/docs/examples/messaging/create-vonage-provider.md +7 -0
  196. package/docs/examples/messaging/delete-provider.md +2 -0
  197. package/docs/examples/messaging/delete-subscriber.md +3 -0
  198. package/docs/examples/messaging/delete-topic.md +2 -0
  199. package/docs/examples/messaging/delete.md +2 -0
  200. package/docs/examples/messaging/get-message.md +2 -0
  201. package/docs/examples/messaging/get-provider.md +2 -0
  202. package/docs/examples/messaging/get-subscriber.md +3 -0
  203. package/docs/examples/messaging/get-topic.md +2 -0
  204. package/docs/examples/messaging/list-message-logs.md +3 -0
  205. package/docs/examples/messaging/list-messages.md +3 -0
  206. package/docs/examples/messaging/list-provider-logs.md +3 -0
  207. package/docs/examples/messaging/list-providers.md +3 -0
  208. package/docs/examples/messaging/list-subscriber-logs.md +3 -0
  209. package/docs/examples/messaging/list-subscribers.md +4 -0
  210. package/docs/examples/messaging/list-targets.md +3 -0
  211. package/docs/examples/messaging/list-topic-logs.md +3 -0
  212. package/docs/examples/messaging/list-topics.md +3 -0
  213. package/docs/examples/messaging/update-apns-provider.md +9 -0
  214. package/docs/examples/messaging/update-email.md +13 -0
  215. package/docs/examples/messaging/update-fcm-provider.md +5 -0
  216. package/docs/examples/messaging/update-mailgun-provider.md +11 -0
  217. package/docs/examples/messaging/update-msg91provider.md +7 -0
  218. package/docs/examples/messaging/update-push.md +20 -0
  219. package/docs/examples/messaging/update-sendgrid-provider.md +9 -0
  220. package/docs/examples/messaging/update-sms.md +8 -0
  221. package/docs/examples/messaging/update-smtp-provider.md +15 -0
  222. package/docs/examples/messaging/update-telesign-provider.md +7 -0
  223. package/docs/examples/messaging/update-textmagic-provider.md +7 -0
  224. package/docs/examples/messaging/update-topic.md +4 -0
  225. package/docs/examples/messaging/update-twilio-provider.md +7 -0
  226. package/docs/examples/messaging/update-vonage-provider.md +7 -0
  227. package/docs/examples/migrations/create-appwrite-migration.md +5 -0
  228. package/docs/examples/migrations/create-csv-migration.md +4 -0
  229. package/docs/examples/migrations/create-firebase-migration.md +3 -0
  230. package/docs/examples/migrations/create-n-host-migration.md +9 -0
  231. package/docs/examples/migrations/create-supabase-migration.md +8 -0
  232. package/docs/examples/migrations/delete.md +2 -0
  233. package/docs/examples/migrations/get-appwrite-report.md +5 -0
  234. package/docs/examples/migrations/get-firebase-report.md +3 -0
  235. package/docs/examples/migrations/get-n-host-report.md +9 -0
  236. package/docs/examples/migrations/get-supabase-report.md +8 -0
  237. package/docs/examples/migrations/get.md +2 -0
  238. package/docs/examples/migrations/list.md +3 -0
  239. package/docs/examples/migrations/retry.md +2 -0
  240. package/docs/examples/project/create-variable.md +4 -0
  241. package/docs/examples/project/delete-variable.md +2 -0
  242. package/docs/examples/project/get-usage.md +4 -0
  243. package/docs/examples/project/get-variable.md +2 -0
  244. package/docs/examples/project/list-variables.md +1 -0
  245. package/docs/examples/project/update-variable.md +5 -0
  246. package/docs/examples/projects/create-dev-key.md +4 -0
  247. package/docs/examples/projects/create-j-w-t.md +4 -0
  248. package/docs/examples/projects/create-key.md +5 -0
  249. package/docs/examples/projects/create-platform.md +7 -0
  250. package/docs/examples/projects/create-smtp-test.md +11 -0
  251. package/docs/examples/projects/create-webhook.md +9 -0
  252. package/docs/examples/projects/create.md +14 -0
  253. package/docs/examples/projects/delete-dev-key.md +3 -0
  254. package/docs/examples/projects/delete-email-template.md +4 -0
  255. package/docs/examples/projects/delete-key.md +3 -0
  256. package/docs/examples/projects/delete-platform.md +3 -0
  257. package/docs/examples/projects/delete-sms-template.md +4 -0
  258. package/docs/examples/projects/delete-webhook.md +3 -0
  259. package/docs/examples/projects/delete.md +2 -0
  260. package/docs/examples/projects/get-dev-key.md +3 -0
  261. package/docs/examples/projects/get-email-template.md +4 -0
  262. package/docs/examples/projects/get-key.md +3 -0
  263. package/docs/examples/projects/get-platform.md +3 -0
  264. package/docs/examples/projects/get-sms-template.md +4 -0
  265. package/docs/examples/projects/get-webhook.md +3 -0
  266. package/docs/examples/projects/get.md +2 -0
  267. package/docs/examples/projects/list-dev-keys.md +3 -0
  268. package/docs/examples/projects/list-keys.md +2 -0
  269. package/docs/examples/projects/list-platforms.md +2 -0
  270. package/docs/examples/projects/list-webhooks.md +2 -0
  271. package/docs/examples/projects/list.md +3 -0
  272. package/docs/examples/projects/update-api-status-all.md +3 -0
  273. package/docs/examples/projects/update-api-status.md +4 -0
  274. package/docs/examples/projects/update-auth-duration.md +3 -0
  275. package/docs/examples/projects/update-auth-limit.md +3 -0
  276. package/docs/examples/projects/update-auth-password-dictionary.md +3 -0
  277. package/docs/examples/projects/update-auth-password-history.md +3 -0
  278. package/docs/examples/projects/update-auth-sessions-limit.md +3 -0
  279. package/docs/examples/projects/update-auth-status.md +4 -0
  280. package/docs/examples/projects/update-dev-key.md +5 -0
  281. package/docs/examples/projects/update-email-template.md +9 -0
  282. package/docs/examples/projects/update-key.md +6 -0
  283. package/docs/examples/projects/update-memberships-privacy.md +5 -0
  284. package/docs/examples/projects/update-mock-numbers.md +3 -0
  285. package/docs/examples/projects/update-o-auth2.md +6 -0
  286. package/docs/examples/projects/update-personal-data-check.md +3 -0
  287. package/docs/examples/projects/update-platform.md +7 -0
  288. package/docs/examples/projects/update-service-status-all.md +3 -0
  289. package/docs/examples/projects/update-service-status.md +4 -0
  290. package/docs/examples/projects/update-session-alerts.md +3 -0
  291. package/docs/examples/projects/update-sms-template.md +5 -0
  292. package/docs/examples/projects/update-smtp.md +11 -0
  293. package/docs/examples/projects/update-team.md +3 -0
  294. package/docs/examples/projects/update-webhook-signature.md +3 -0
  295. package/docs/examples/projects/update-webhook.md +10 -0
  296. package/docs/examples/projects/update.md +12 -0
  297. package/docs/examples/proxy/create-a-p-i-rule.md +2 -0
  298. package/docs/examples/proxy/create-function-rule.md +4 -0
  299. package/docs/examples/proxy/create-redirect-rule.md +6 -0
  300. package/docs/examples/proxy/create-site-rule.md +4 -0
  301. package/docs/examples/proxy/delete-rule.md +2 -0
  302. package/docs/examples/proxy/get-rule.md +2 -0
  303. package/docs/examples/proxy/list-rules.md +3 -0
  304. package/docs/examples/proxy/update-rule-verification.md +2 -0
  305. package/docs/examples/sites/create-deployment.md +7 -0
  306. package/docs/examples/sites/create-duplicate-deployment.md +3 -0
  307. package/docs/examples/sites/create-template-deployment.md +7 -0
  308. package/docs/examples/sites/create-variable.md +5 -0
  309. package/docs/examples/sites/create-vcs-deployment.md +5 -0
  310. package/docs/examples/sites/create.md +19 -0
  311. package/docs/examples/sites/delete-deployment.md +3 -0
  312. package/docs/examples/sites/delete-log.md +3 -0
  313. package/docs/examples/sites/delete-variable.md +3 -0
  314. package/docs/examples/sites/delete.md +2 -0
  315. package/docs/examples/sites/get-deployment-download.md +4 -0
  316. package/docs/examples/sites/get-deployment.md +3 -0
  317. package/docs/examples/sites/get-log.md +3 -0
  318. package/docs/examples/sites/get-template.md +2 -0
  319. package/docs/examples/sites/get-usage.md +3 -0
  320. package/docs/examples/sites/get-variable.md +3 -0
  321. package/docs/examples/sites/get.md +2 -0
  322. package/docs/examples/sites/list-deployments.md +4 -0
  323. package/docs/examples/sites/list-frameworks.md +1 -0
  324. package/docs/examples/sites/list-logs.md +3 -0
  325. package/docs/examples/sites/list-specifications.md +1 -0
  326. package/docs/examples/sites/list-templates.md +5 -0
  327. package/docs/examples/sites/list-usage.md +2 -0
  328. package/docs/examples/sites/list-variables.md +2 -0
  329. package/docs/examples/sites/list.md +3 -0
  330. package/docs/examples/sites/update-deployment-status.md +3 -0
  331. package/docs/examples/sites/update-site-deployment.md +3 -0
  332. package/docs/examples/sites/update-variable.md +6 -0
  333. package/docs/examples/sites/update.md +19 -0
  334. package/docs/examples/storage/create-bucket.md +11 -0
  335. package/docs/examples/storage/create-file.md +5 -0
  336. package/docs/examples/storage/delete-bucket.md +2 -0
  337. package/docs/examples/storage/delete-file.md +3 -0
  338. package/docs/examples/storage/get-bucket-usage.md +3 -0
  339. package/docs/examples/storage/get-bucket.md +2 -0
  340. package/docs/examples/storage/get-file-download.md +4 -0
  341. package/docs/examples/storage/get-file-preview.md +15 -0
  342. package/docs/examples/storage/get-file-view.md +4 -0
  343. package/docs/examples/storage/get-file.md +3 -0
  344. package/docs/examples/storage/get-usage.md +2 -0
  345. package/docs/examples/storage/list-buckets.md +3 -0
  346. package/docs/examples/storage/list-files.md +4 -0
  347. package/docs/examples/storage/update-bucket.md +11 -0
  348. package/docs/examples/storage/update-file.md +5 -0
  349. package/docs/examples/teams/create-membership.md +8 -0
  350. package/docs/examples/teams/create.md +4 -0
  351. package/docs/examples/teams/delete-membership.md +3 -0
  352. package/docs/examples/teams/delete.md +2 -0
  353. package/docs/examples/teams/get-membership.md +3 -0
  354. package/docs/examples/teams/get-prefs.md +2 -0
  355. package/docs/examples/teams/get.md +2 -0
  356. package/docs/examples/teams/list-logs.md +3 -0
  357. package/docs/examples/teams/list-memberships.md +4 -0
  358. package/docs/examples/teams/list.md +3 -0
  359. package/docs/examples/teams/update-membership-status.md +5 -0
  360. package/docs/examples/teams/update-membership.md +4 -0
  361. package/docs/examples/teams/update-name.md +3 -0
  362. package/docs/examples/teams/update-prefs.md +3 -0
  363. package/docs/examples/tokens/create-file-token.md +4 -0
  364. package/docs/examples/tokens/delete.md +2 -0
  365. package/docs/examples/tokens/get.md +2 -0
  366. package/docs/examples/tokens/list.md +4 -0
  367. package/docs/examples/tokens/update.md +3 -0
  368. package/docs/examples/users/create-argon2user.md +5 -0
  369. package/docs/examples/users/create-bcrypt-user.md +5 -0
  370. package/docs/examples/users/create-j-w-t.md +4 -0
  371. package/docs/examples/users/create-m-d5user.md +5 -0
  372. package/docs/examples/users/create-mfa-recovery-codes.md +2 -0
  373. package/docs/examples/users/create-p-h-pass-user.md +5 -0
  374. package/docs/examples/users/create-s-h-a-user.md +6 -0
  375. package/docs/examples/users/create-scrypt-modified-user.md +8 -0
  376. package/docs/examples/users/create-scrypt-user.md +10 -0
  377. package/docs/examples/users/create-session.md +2 -0
  378. package/docs/examples/users/create-target.md +7 -0
  379. package/docs/examples/users/create-token.md +4 -0
  380. package/docs/examples/users/create.md +6 -0
  381. package/docs/examples/users/delete-identity.md +2 -0
  382. package/docs/examples/users/delete-mfa-authenticator.md +3 -0
  383. package/docs/examples/users/delete-session.md +3 -0
  384. package/docs/examples/users/delete-sessions.md +2 -0
  385. package/docs/examples/users/delete-target.md +3 -0
  386. package/docs/examples/users/delete.md +2 -0
  387. package/docs/examples/users/get-mfa-recovery-codes.md +2 -0
  388. package/docs/examples/users/get-prefs.md +2 -0
  389. package/docs/examples/users/get-target.md +3 -0
  390. package/docs/examples/users/get-usage.md +2 -0
  391. package/docs/examples/users/get.md +2 -0
  392. package/docs/examples/users/list-identities.md +3 -0
  393. package/docs/examples/users/list-logs.md +3 -0
  394. package/docs/examples/users/list-memberships.md +4 -0
  395. package/docs/examples/users/list-mfa-factors.md +2 -0
  396. package/docs/examples/users/list-sessions.md +2 -0
  397. package/docs/examples/users/list-targets.md +3 -0
  398. package/docs/examples/users/list.md +3 -0
  399. package/docs/examples/users/update-email-verification.md +3 -0
  400. package/docs/examples/users/update-email.md +3 -0
  401. package/docs/examples/users/update-labels.md +3 -0
  402. package/docs/examples/users/update-mfa-recovery-codes.md +2 -0
  403. package/docs/examples/users/update-mfa.md +3 -0
  404. package/docs/examples/users/update-name.md +3 -0
  405. package/docs/examples/users/update-password.md +3 -0
  406. package/docs/examples/users/update-phone-verification.md +3 -0
  407. package/docs/examples/users/update-phone.md +3 -0
  408. package/docs/examples/users/update-prefs.md +3 -0
  409. package/docs/examples/users/update-status.md +3 -0
  410. package/docs/examples/users/update-target.md +6 -0
  411. package/docs/examples/vcs/create-repository-detection.md +5 -0
  412. package/docs/examples/vcs/create-repository.md +4 -0
  413. package/docs/examples/vcs/delete-installation.md +2 -0
  414. package/docs/examples/vcs/get-installation.md +2 -0
  415. package/docs/examples/vcs/get-repository-contents.md +5 -0
  416. package/docs/examples/vcs/get-repository.md +3 -0
  417. package/docs/examples/vcs/list-installations.md +3 -0
  418. package/docs/examples/vcs/list-repositories.md +4 -0
  419. package/docs/examples/vcs/list-repository-branches.md +3 -0
  420. package/docs/examples/vcs/update-external-deployments.md +4 -0
  421. package/functions/Starter function/.prettierrc.json +6 -0
  422. package/functions/Starter function/README.md +48 -0
  423. package/functions/Starter function/package-lock.json +60 -0
  424. package/functions/Starter function/package.json +16 -0
  425. package/functions/Starter function/src/main.js +35 -0
  426. package/generate/appwrite.d.ts +18 -0
  427. package/index.js +109 -0
  428. package/install.ps1 +98 -0
  429. package/install.sh +157 -0
  430. package/lib/client.js +259 -0
  431. package/lib/commands/account.js +2074 -0
  432. package/lib/commands/avatars.js +491 -0
  433. package/lib/commands/console.js +129 -0
  434. package/lib/commands/databases.js +2972 -0
  435. package/lib/commands/functions.js +1737 -0
  436. package/lib/commands/generic.js +328 -0
  437. package/lib/commands/graphql.js +128 -0
  438. package/lib/commands/health.js +891 -0
  439. package/lib/commands/init.js +566 -0
  440. package/lib/commands/locale.js +324 -0
  441. package/lib/commands/messaging.js +2970 -0
  442. package/lib/commands/migrations.js +751 -0
  443. package/lib/commands/organizations.js +48 -0
  444. package/lib/commands/project.js +308 -0
  445. package/lib/commands/projects.js +2615 -0
  446. package/lib/commands/proxy.js +406 -0
  447. package/lib/commands/pull.js +474 -0
  448. package/lib/commands/push.js +2117 -0
  449. package/lib/commands/run.js +330 -0
  450. package/lib/commands/sites.js +1663 -0
  451. package/lib/commands/storage.js +990 -0
  452. package/lib/commands/teams.js +682 -0
  453. package/lib/commands/tokens.js +261 -0
  454. package/lib/commands/types.js +156 -0
  455. package/lib/commands/users.js +2035 -0
  456. package/lib/commands/vcs.js +484 -0
  457. package/lib/config.js +705 -0
  458. package/lib/emulation/docker.js +264 -0
  459. package/lib/emulation/utils.js +186 -0
  460. package/lib/exception.js +9 -0
  461. package/lib/id.js +30 -0
  462. package/lib/paginate.js +52 -0
  463. package/lib/parser.js +246 -0
  464. package/lib/questions.js +1006 -0
  465. package/lib/sdks.js +60 -0
  466. package/lib/spinner.js +104 -0
  467. package/lib/type-generation/attribute.js +16 -0
  468. package/lib/type-generation/languages/dart.js +196 -0
  469. package/lib/type-generation/languages/java.js +130 -0
  470. package/lib/type-generation/languages/javascript.js +102 -0
  471. package/lib/type-generation/languages/kotlin.js +84 -0
  472. package/lib/type-generation/languages/language.js +125 -0
  473. package/lib/type-generation/languages/php.js +109 -0
  474. package/lib/type-generation/languages/swift.js +169 -0
  475. package/lib/type-generation/languages/typescript.js +102 -0
  476. package/lib/utils.js +289 -0
  477. package/lib/validations.js +17 -0
  478. package/package.json +50 -0
  479. package/scoop/appwrite.json +30 -0
  480. package/sites/JavaScript starter/.env.example +3 -0
  481. package/sites/JavaScript starter/LICENSE +21 -0
  482. package/sites/JavaScript starter/images/appwrite.svg +8 -0
  483. package/sites/JavaScript starter/images/javascript.svg +5 -0
  484. package/sites/JavaScript starter/index.html +250 -0
  485. package/sites/JavaScript starter/lib/appwrite.js +10 -0
  486. package/sites/JavaScript starter/package-lock.json +1431 -0
  487. package/sites/JavaScript starter/package.json +21 -0
  488. package/sites/JavaScript starter/readme.md +26 -0
  489. package/sites/JavaScript starter/src/javascript.svg +1 -0
  490. package/sites/JavaScript starter/style/app.css +20 -0
  491. package/sites/JavaScript starter/vite.config.js +7 -0
@@ -0,0 +1,566 @@
1
+ const fs = require("fs");
2
+ const path = require("path");
3
+ const childProcess = require('child_process');
4
+ const { Command } = require("commander");
5
+ const inquirer = require("inquirer");
6
+ const { fetch } = require("undici");
7
+ const { projectsCreate, projectsGet } = require("./projects");
8
+ const { storageCreateBucket } = require("./storage");
9
+ const { messagingCreateTopic } = require("./messaging");
10
+ const { functionsCreate } = require("./functions");
11
+ const { databasesCreateCollection } = require("./databases");
12
+ const { pullResources } = require("./pull");
13
+ const ID = require("../id");
14
+ const { localConfig, globalConfig } = require("../config");
15
+ const {
16
+ questionsCreateFunction,
17
+ questionsCreateFunctionSelectTemplate,
18
+ questionsCreateSite,
19
+ questionsCreateBucket,
20
+ questionsCreateMessagingTopic,
21
+ questionsCreateCollection,
22
+ questionsInitProject,
23
+ questionsInitProjectAutopull,
24
+ questionsInitResources,
25
+ questionsCreateTeam
26
+ } = require("../questions");
27
+ const { cliConfig, success, log, hint, error, actionRunner, commandDescriptions } = require("../parser");
28
+ const { accountGet } = require("./account");
29
+ const { sitesListTemplates } = require("./sites");
30
+ const { sdkForConsole } = require("../sdks");
31
+ const { isCloud } = require('../utils');
32
+
33
+ const initResources = async () => {
34
+ const actions = {
35
+ function: initFunction,
36
+ site: initSite,
37
+ collection: initCollection,
38
+ bucket: initBucket,
39
+ team: initTeam,
40
+ message: initTopic
41
+ }
42
+
43
+ const answers = await inquirer.prompt(questionsInitResources[0]);
44
+
45
+ const action = actions[answers.resource];
46
+ if (action !== undefined) {
47
+ await action({ returnOnZero: true });
48
+ }
49
+ };
50
+
51
+ const initProject = async ({ organizationId, projectId, projectName } = {}) => {
52
+ let response = {};
53
+
54
+ try {
55
+ if (globalConfig.getEndpoint() === '' || globalConfig.getCookie() === '') {
56
+ throw '';
57
+ }
58
+ const client = await sdkForConsole();
59
+
60
+ await accountGet({
61
+ parseOutput: false,
62
+ sdk: client
63
+ });
64
+ } catch (e) {
65
+ error("Error Session not found. Please run 'appwrite login' to create a session");
66
+ process.exit(1);
67
+ }
68
+
69
+ let answers = {};
70
+
71
+ if (!organizationId && !projectId && !projectName) {
72
+ answers = await inquirer.prompt(questionsInitProject)
73
+ if (answers.override === false) {
74
+ process.exit(1)
75
+ }
76
+ } else {
77
+ answers.start = 'existing';
78
+ answers.project = {};
79
+ answers.organization = {};
80
+
81
+ answers.organization = organizationId ?? (await inquirer.prompt(questionsInitProject[2])).organization;
82
+ answers.project.name = projectName ?? (await inquirer.prompt(questionsInitProject[3])).project;
83
+ answers.project = projectId ?? (await inquirer.prompt(questionsInitProject[4])).id;
84
+
85
+ try {
86
+ await projectsGet({ projectId, parseOutput: false });
87
+ } catch (e) {
88
+ if (e.code === 404) {
89
+ answers.start = 'new';
90
+ answers.id = answers.project;
91
+ answers.project = answers.project.name;
92
+ } else {
93
+ throw e;
94
+ }
95
+ }
96
+ }
97
+
98
+ localConfig.clear(); // Clear the config to avoid any conflicts
99
+ const url = new URL("https://cloud.appwrite.io/v1");
100
+
101
+ if (answers.start === 'new') {
102
+ response = await projectsCreate({
103
+ projectId: answers.id,
104
+ name: answers.project,
105
+ teamId: answers.organization,
106
+ parseOutput: false
107
+ })
108
+
109
+ localConfig.setProject(response['$id']);
110
+ if (answers.region) {
111
+ localConfig.setEndpoint(`https://${answers.region}.${url.host}${url.pathname}`);
112
+ }
113
+ } else {
114
+ localConfig.setProject(answers.project["$id"]);
115
+ if(isCloud()) {
116
+ localConfig.setEndpoint(`https://${answers.project["region"]}.${url.host}${url.pathname}`);
117
+ }
118
+ }
119
+
120
+ success(`Project successfully ${answers.start === 'existing' ? 'linked' : 'created'}. Details are now stored in appwrite.json file.`);
121
+
122
+ if(answers.start === 'existing') {
123
+ answers = await inquirer.prompt(questionsInitProjectAutopull);
124
+ if(answers.autopull) {
125
+ cliConfig.all = true;
126
+ cliConfig.force = true;
127
+ await pullResources();
128
+ } else {
129
+ log("You can run 'appwrite pull all' to synchronize all of your existing resources.");
130
+ }
131
+ }
132
+
133
+ hint("Next you can use 'appwrite init' to create resources in your project, or use 'appwrite pull' and 'appwrite push' to synchronize your project.")
134
+ }
135
+
136
+ const initBucket = async () => {
137
+ const answers = await inquirer.prompt(questionsCreateBucket)
138
+
139
+ localConfig.addBucket({
140
+ $id: answers.id === 'unique()' ? ID.unique() : answers.id,
141
+ name: answers.bucket,
142
+ fileSecurity: answers.fileSecurity.toLowerCase() === 'yes',
143
+ enabled: true,
144
+ });
145
+ success("Initialing bucket");
146
+ log("Next you can use 'appwrite push bucket' to deploy the changes.");
147
+ };
148
+
149
+ const initTeam = async () => {
150
+ const answers = await inquirer.prompt(questionsCreateTeam)
151
+
152
+ localConfig.addTeam({
153
+ $id: answers.id === 'unique()' ? ID.unique() : answers.id,
154
+ name: answers.bucket,
155
+ });
156
+
157
+ success("Initialing team");
158
+ log("Next you can use 'appwrite push team' to deploy the changes.");
159
+ };
160
+
161
+ const initCollection = async () => {
162
+ const answers = await inquirer.prompt(questionsCreateCollection)
163
+ const newDatabase = (answers.method ?? '').toLowerCase() !== 'existing';
164
+
165
+ if (!newDatabase) {
166
+ answers.databaseId = answers.database;
167
+ answers.databaseName = localConfig.getDatabase(answers.database).name;
168
+ }
169
+
170
+ const databaseId = answers.databaseId === 'unique()' ? ID.unique() : answers.databaseId;
171
+
172
+ if (newDatabase || !localConfig.getDatabase(answers.databaseId)) {
173
+ localConfig.addDatabase({
174
+ $id: databaseId,
175
+ name: answers.databaseName,
176
+ enabled: true
177
+ });
178
+ }
179
+
180
+ localConfig.addCollection({
181
+ $id: answers.id === 'unique()' ? ID.unique() : answers.id,
182
+ databaseId: databaseId,
183
+ name: answers.collection,
184
+ documentSecurity: answers.documentSecurity.toLowerCase() === 'yes',
185
+ attributes: [],
186
+ indexes: [],
187
+ enabled: true,
188
+ });
189
+
190
+ success("Initialing collection");
191
+ log("Next you can use 'appwrite push collection' to deploy the changes.");
192
+ };
193
+
194
+ const initTopic = async () => {
195
+ const answers = await inquirer.prompt(questionsCreateMessagingTopic)
196
+
197
+ localConfig.addMessagingTopic({
198
+ $id: answers.id === 'unique()' ? ID.unique() : answers.id,
199
+ name: answers.topic,
200
+
201
+ });
202
+
203
+ success("Initialing topic");
204
+ log("Next you can use 'appwrite push topic' to deploy the changes.");
205
+ };
206
+
207
+ const initFunction = async () => {
208
+ process.chdir(localConfig.configDirectoryPath)
209
+
210
+ // TODO: Add CI/CD support (ID, name, runtime)
211
+ const answers = await inquirer.prompt(questionsCreateFunction)
212
+ const functionFolder = path.join(process.cwd(), 'functions');
213
+
214
+ if (!fs.existsSync(functionFolder)) {
215
+ fs.mkdirSync(functionFolder, {
216
+ recursive: true
217
+ });
218
+ }
219
+
220
+ const functionId = answers.id === 'unique()' ? ID.unique() : answers.id;
221
+ const functionName = answers.name;
222
+ const functionDir = path.join(functionFolder, functionName);
223
+ const templatesDir = path.join(functionFolder, `${functionId}-templates`);
224
+ const runtimeDir = path.join(templatesDir, answers.runtime.name);
225
+
226
+ if (fs.existsSync(functionDir)) {
227
+ throw new Error(`( ${functionName} ) already exists in the current directory. Please choose another name.`);
228
+ }
229
+
230
+ if (!answers.runtime.entrypoint) {
231
+ log(`Entrypoint for this runtime not found. You will be asked to configure entrypoint when you first push the function.`);
232
+ }
233
+
234
+ if (!answers.runtime.commands) {
235
+ log(`Installation command for this runtime not found. You will be asked to configure the install command when you first push the function.`);
236
+ }
237
+
238
+ fs.mkdirSync(functionDir, "777");
239
+ fs.mkdirSync(templatesDir, "777");
240
+ const repo = "https://github.com/appwrite/templates";
241
+ const api = `https://api.github.com/repos/appwrite/templates/contents/${answers.runtime.name}`
242
+ let selected = { template: 'starter' };
243
+
244
+ const sparse = (selected ? `${answers.runtime.name}/${selected.template}` : answers.runtime.name).toLowerCase();
245
+
246
+ let gitInitCommands = `git clone --single-branch --depth 1 --sparse ${repo} .`; // depth prevents fetching older commits reducing the amount fetched
247
+
248
+ let gitPullCommands = `git sparse-checkout add ${sparse}`;
249
+
250
+ /* Force use CMD as powershell does not support && */
251
+ if (process.platform === 'win32') {
252
+ gitInitCommands = 'cmd /c "' + gitInitCommands + '"';
253
+ gitPullCommands = 'cmd /c "' + gitPullCommands + '"';
254
+ }
255
+
256
+ /* Execute the child process but do not print any std output */
257
+ try {
258
+ childProcess.execSync(gitInitCommands, { stdio: 'pipe', cwd: templatesDir });
259
+ childProcess.execSync(gitPullCommands, { stdio: 'pipe', cwd: templatesDir });
260
+ } catch (error) {
261
+ /* Specialised errors with recommended actions to take */
262
+ if (error.message.includes('error: unknown option')) {
263
+ throw new Error(`${error.message} \n\nSuggestion: Try updating your git to the latest version, then trying to run this command again.`)
264
+ } else if (error.message.includes('is not recognized as an internal or external command,') || error.message.includes('command not found')) {
265
+ throw new Error(`${error.message} \n\nSuggestion: It appears that git is not installed, try installing git then trying to run this command again.`)
266
+ } else {
267
+ throw error;
268
+ }
269
+ }
270
+
271
+ fs.rmSync(path.join(templatesDir, ".git"), { recursive: true });
272
+ if (!selected) {
273
+ const templates = [];
274
+ templates.push(...fs.readdirSync(runtimeDir, { withFileTypes: true })
275
+ .filter(item => item.isDirectory() && item.name !== 'starter')
276
+ .map(dirent => dirent.name));
277
+ selected = { template: 'starter' };
278
+
279
+ if (templates.length > 1) {
280
+ selected = await inquirer.prompt(questionsCreateFunctionSelectTemplate(templates))
281
+ }
282
+ }
283
+
284
+ const copyRecursiveSync = (src, dest) => {
285
+ let exists = fs.existsSync(src);
286
+ let stats = exists && fs.statSync(src);
287
+ let isDirectory = exists && stats.isDirectory();
288
+ if (isDirectory) {
289
+ if (!fs.existsSync(dest)) {
290
+ fs.mkdirSync(dest);
291
+ }
292
+
293
+ fs.readdirSync(src).forEach(function (childItemName) {
294
+ copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName));
295
+ });
296
+ } else {
297
+ fs.copyFileSync(src, dest);
298
+ }
299
+ };
300
+ copyRecursiveSync(path.join(runtimeDir, selected.template), functionDir);
301
+
302
+ fs.rmSync(templatesDir, { recursive: true, force: true });
303
+
304
+ const readmePath = path.join(process.cwd(), 'functions', functionName, 'README.md');
305
+ const readmeFile = fs.readFileSync(readmePath).toString();
306
+ const newReadmeFile = readmeFile.split('\n');
307
+ newReadmeFile[0] = `# ${answers.name}`;
308
+ newReadmeFile.splice(1, 2);
309
+ fs.writeFileSync(readmePath, newReadmeFile.join('\n'));
310
+
311
+ let data = {
312
+ $id: functionId,
313
+ name: answers.name,
314
+ runtime: answers.runtime.id,
315
+ specification: answers.specification,
316
+ execute: ["any"],
317
+ events: [],
318
+ scopes: ["users.read"],
319
+ schedule: "",
320
+ timeout: 15,
321
+ enabled: true,
322
+ logging: true,
323
+ entrypoint: answers.runtime.entrypoint || '',
324
+ commands: answers.runtime.commands || '',
325
+ ignore: answers.runtime.ignore || null,
326
+ path: `functions/${functionName}`,
327
+ };
328
+
329
+ localConfig.addFunction(data);
330
+ success("Initialing function");
331
+ log("Next you can use 'appwrite run function' to develop a function locally. To deploy the function, use 'appwrite push function'");
332
+ }
333
+
334
+ const initSite = async () => {
335
+ process.chdir(localConfig.configDirectoryPath)
336
+
337
+ const answers = await inquirer.prompt(questionsCreateSite);
338
+ const siteFolder = path.join(process.cwd(), 'sites');
339
+
340
+ if (!fs.existsSync(siteFolder)) {
341
+ fs.mkdirSync(siteFolder, {
342
+ recursive: true
343
+ });
344
+ }
345
+
346
+ const siteId = answers.id === 'unique()' ? ID.unique() : answers.id;
347
+ const siteName = answers.name;
348
+ const siteDir = path.join(siteFolder, siteName);
349
+ const templatesDir = path.join(siteFolder, `${siteId}-templates`);
350
+
351
+ if (fs.existsSync(siteDir)) {
352
+ throw new Error(`( ${siteName} ) already exists in the current directory. Please choose another name.`);
353
+ }
354
+
355
+ let templateDetails;
356
+ try {
357
+ const response = await sitesListTemplates({
358
+ frameworks: [answers.framework.key],
359
+ useCases: ['starter'],
360
+ limit: 1,
361
+ parseOutput: false
362
+ });
363
+ if (response.total == 0) {
364
+ throw new Error(`No starter template found for framework ${answers.framework.key}`);
365
+ }
366
+ templateDetails = response.templates[0];
367
+ } catch (error) {
368
+ throw new Error(`Failed to fetch template for framework ${answers.framework.key}: ${error.message}`);
369
+ }
370
+
371
+ fs.mkdirSync(siteDir, "777");
372
+ fs.mkdirSync(templatesDir, "777");
373
+ const repo = `https://github.com/${templateDetails.providerOwner}/${templateDetails.providerRepositoryId}`;
374
+ let selected = { template: templateDetails.frameworks[0].providerRootDirectory };
375
+
376
+ let gitCloneCommands = '';
377
+
378
+ const sparse = selected.template.startsWith('./') ? selected.template.substring(2) : selected.template;
379
+
380
+ log('Fetching site code ...');
381
+
382
+ if(selected.template === './') {
383
+ gitCloneCommands = `
384
+ mkdir -p .
385
+ cd .
386
+ git init
387
+ git remote add origin ${repo}
388
+ git config --global init.defaultBranch main
389
+ git fetch --depth=1 origin refs/tags/$(git ls-remote --tags origin "${templateDetails.providerVersion}" | tail -n 1 | awk -F '/' '{print $3}')
390
+ git checkout FETCH_HEAD
391
+ `.trim();
392
+ } else {
393
+ gitCloneCommands = `
394
+ mkdir -p .
395
+ cd .
396
+ git init
397
+ git remote add origin ${repo}
398
+ git config --global init.defaultBranch main
399
+ git config core.sparseCheckout true
400
+ echo "${sparse}" >> .git/info/sparse-checkout
401
+ git config --add remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
402
+ git config remote.origin.tagopt --no-tags
403
+ git fetch --depth=1 origin refs/tags/$(git ls-remote --tags origin "${templateDetails.providerVersion}" | tail -n 1 | awk -F '/' '{print $3}')
404
+ git checkout FETCH_HEAD
405
+ `.trim();
406
+ }
407
+
408
+ /* Force use CMD as powershell does not support && */
409
+ if (process.platform === 'win32') {
410
+ gitCloneCommands = 'cmd /c "' + gitCloneCommands + '"';
411
+ }
412
+
413
+ /* Execute the child process but do not print any std output */
414
+ try {
415
+ childProcess.execSync(gitCloneCommands, { stdio: 'pipe', cwd: templatesDir });
416
+ } catch (error) {
417
+ /* Specialised errors with recommended actions to take */
418
+ if (error.message.includes('error: unknown option')) {
419
+ throw new Error(`${error.message} \n\nSuggestion: Try updating your git to the latest version, then trying to run this command again.`)
420
+ } else if (error.message.includes('is not recognized as an internal or external command,') || error.message.includes('command not found')) {
421
+ throw new Error(`${error.message} \n\nSuggestion: It appears that git is not installed, try installing git then trying to run this command again.`)
422
+ } else {
423
+ throw error;
424
+ }
425
+ }
426
+
427
+ fs.rmSync(path.join(templatesDir, ".git"), { recursive: true });
428
+
429
+ const copyRecursiveSync = (src, dest) => {
430
+ let exists = fs.existsSync(src);
431
+ let stats = exists && fs.statSync(src);
432
+ let isDirectory = exists && stats.isDirectory();
433
+ if (isDirectory) {
434
+ if (!fs.existsSync(dest)) {
435
+ fs.mkdirSync(dest);
436
+ }
437
+
438
+ fs.readdirSync(src).forEach(function (childItemName) {
439
+ copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName));
440
+ });
441
+ } else {
442
+ fs.copyFileSync(src, dest);
443
+ }
444
+ };
445
+ copyRecursiveSync(selected.template === './' ? templatesDir : path.join(templatesDir, selected.template), siteDir);
446
+
447
+ fs.rmSync(templatesDir, { recursive: true, force: true });
448
+
449
+ const readmePath = path.join(process.cwd(), 'sites', siteName, 'README.md');
450
+ const readmeFile = fs.readFileSync(readmePath).toString();
451
+ const newReadmeFile = readmeFile.split('\n');
452
+ newReadmeFile[0] = `# ${answers.key}`;
453
+ newReadmeFile.splice(1, 2);
454
+ fs.writeFileSync(readmePath, newReadmeFile.join('\n'));
455
+
456
+ let vars = (templateDetails.variables ?? []).map(variable => {
457
+ let value = variable.value;
458
+ const replacements = {
459
+ '{apiEndpoint}': globalConfig.getEndpoint(),
460
+ '{projectId}': localConfig.getProject().projectId,
461
+ '{projectName}': localConfig.getProject().projectName,
462
+ };
463
+
464
+ for (const placeholder in replacements) {
465
+ if (value?.includes(placeholder)) {
466
+ value = value.replace(placeholder, replacements[placeholder]);
467
+ }
468
+ }
469
+
470
+ return {
471
+ key: variable.name,
472
+ value: value
473
+ };
474
+ });
475
+
476
+ let data = {
477
+ $id: siteId,
478
+ name: answers.name,
479
+ framework: answers.framework.key,
480
+ adapter: templateDetails.frameworks[0].adapter || '',
481
+ buildRuntime: templateDetails.frameworks[0].buildRuntime || '',
482
+ installCommand: templateDetails.frameworks[0].installCommand || '',
483
+ buildCommand: templateDetails.frameworks[0].buildCommand || '',
484
+ outputDirectory: templateDetails.frameworks[0].outputDirectory || '',
485
+ fallbackFile: templateDetails.frameworks[0].fallbackFile || '',
486
+ specification: answers.specification,
487
+ enabled: true,
488
+ timeout: 30,
489
+ logging: true,
490
+ ignore: answers.framework.ignore || null,
491
+ path: `sites/${siteName}`,
492
+ vars: vars
493
+ };
494
+
495
+ if (!data.buildRuntime) {
496
+ log(`Build runtime for this framework not found. You will be asked to configure build runtime when you first push the site.`);
497
+ }
498
+
499
+ if (!data.installCommand) {
500
+ log(`Installation command for this framework not found. You will be asked to configure the install command when you first push the site.`);
501
+ }
502
+
503
+ if (!data.buildCommand) {
504
+ log(`Build command for this framework not found. You will be asked to configure the build command when you first push the site.`);
505
+ }
506
+
507
+ if (!data.outputDirectory) {
508
+ log(`Output directory for this framework not found. You will be asked to configure the output directory when you first push the site.`);
509
+ }
510
+
511
+ localConfig.addSite(data);
512
+ success("Initializing site");
513
+ log("Next you can use 'appwrite push site' to deploy the changes.");
514
+ };
515
+
516
+ const init = new Command("init")
517
+ .description(commandDescriptions['init'])
518
+ .action(actionRunner(initResources));
519
+
520
+ init
521
+ .command("project")
522
+ .description("Init a new Appwrite project")
523
+ .option("--organization-id <organization-id>", "Appwrite organization ID")
524
+ .option("--project-id <project-id>", "Appwrite project ID")
525
+ .option("--project-name <project-name>", "Appwrite project ID")
526
+ .action(actionRunner(initProject));
527
+
528
+ init
529
+ .command("function")
530
+ .alias("functions")
531
+ .description("Init a new Appwrite function")
532
+ .action(actionRunner(initFunction));
533
+
534
+ init
535
+ .command("site")
536
+ .alias("sites")
537
+ .description("Init a new Appwrite site")
538
+ .action(actionRunner(initSite));
539
+
540
+ init
541
+ .command("bucket")
542
+ .alias("buckets")
543
+ .description("Init a new Appwrite bucket")
544
+ .action(actionRunner(initBucket));
545
+
546
+ init
547
+ .command("team")
548
+ .alias("teams")
549
+ .description("Init a new Appwrite team")
550
+ .action(actionRunner(initTeam));
551
+
552
+ init
553
+ .command("collection")
554
+ .alias("collections")
555
+ .description("Init a new Appwrite collection")
556
+ .action(actionRunner(initCollection));
557
+
558
+ init
559
+ .command("topic")
560
+ .alias("topics")
561
+ .description("Init a new Appwrite topic")
562
+ .action(actionRunner(initTopic));
563
+
564
+ module.exports = {
565
+ init,
566
+ };