appwrite-cli 0.14.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 (413) hide show
  1. package/.github/workflows/npm-publish.yml +41 -0
  2. package/Formula/appwrite.rb +19 -0
  3. package/LICENSE.md +12 -0
  4. package/README.md +102 -0
  5. package/docs/examples/account/create-anonymous-session.md +1 -0
  6. package/docs/examples/account/create-j-w-t.md +1 -0
  7. package/docs/examples/account/create-magic-u-r-l-session.md +4 -0
  8. package/docs/examples/account/create-o-auth2session.md +5 -0
  9. package/docs/examples/account/create-recovery.md +3 -0
  10. package/docs/examples/account/create-session.md +3 -0
  11. package/docs/examples/account/create-verification.md +2 -0
  12. package/docs/examples/account/create.md +5 -0
  13. package/docs/examples/account/delete-session.md +2 -0
  14. package/docs/examples/account/delete-sessions.md +1 -0
  15. package/docs/examples/account/delete.md +1 -0
  16. package/docs/examples/account/get-logs.md +3 -0
  17. package/docs/examples/account/get-prefs.md +1 -0
  18. package/docs/examples/account/get-session.md +2 -0
  19. package/docs/examples/account/get-sessions.md +1 -0
  20. package/docs/examples/account/get.md +1 -0
  21. package/docs/examples/account/update-email.md +3 -0
  22. package/docs/examples/account/update-magic-u-r-l-session.md +3 -0
  23. package/docs/examples/account/update-name.md +2 -0
  24. package/docs/examples/account/update-password.md +3 -0
  25. package/docs/examples/account/update-prefs.md +2 -0
  26. package/docs/examples/account/update-recovery.md +5 -0
  27. package/docs/examples/account/update-session.md +2 -0
  28. package/docs/examples/account/update-verification.md +3 -0
  29. package/docs/examples/avatars/get-browser.md +5 -0
  30. package/docs/examples/avatars/get-credit-card.md +5 -0
  31. package/docs/examples/avatars/get-favicon.md +2 -0
  32. package/docs/examples/avatars/get-flag.md +5 -0
  33. package/docs/examples/avatars/get-image.md +4 -0
  34. package/docs/examples/avatars/get-initials.md +6 -0
  35. package/docs/examples/avatars/get-q-r.md +5 -0
  36. package/docs/examples/database/create-boolean-attribute.md +6 -0
  37. package/docs/examples/database/create-collection.md +6 -0
  38. package/docs/examples/database/create-document.md +6 -0
  39. package/docs/examples/database/create-email-attribute.md +6 -0
  40. package/docs/examples/database/create-enum-attribute.md +7 -0
  41. package/docs/examples/database/create-float-attribute.md +8 -0
  42. package/docs/examples/database/create-index.md +6 -0
  43. package/docs/examples/database/create-integer-attribute.md +8 -0
  44. package/docs/examples/database/create-ip-attribute.md +6 -0
  45. package/docs/examples/database/create-string-attribute.md +7 -0
  46. package/docs/examples/database/create-url-attribute.md +6 -0
  47. package/docs/examples/database/delete-attribute.md +3 -0
  48. package/docs/examples/database/delete-collection.md +2 -0
  49. package/docs/examples/database/delete-document.md +3 -0
  50. package/docs/examples/database/delete-index.md +3 -0
  51. package/docs/examples/database/get-attribute.md +3 -0
  52. package/docs/examples/database/get-collection-usage.md +3 -0
  53. package/docs/examples/database/get-collection.md +2 -0
  54. package/docs/examples/database/get-document.md +3 -0
  55. package/docs/examples/database/get-index.md +3 -0
  56. package/docs/examples/database/get-usage.md +2 -0
  57. package/docs/examples/database/list-attributes.md +2 -0
  58. package/docs/examples/database/list-collection-logs.md +4 -0
  59. package/docs/examples/database/list-collections.md +7 -0
  60. package/docs/examples/database/list-document-logs.md +5 -0
  61. package/docs/examples/database/list-documents.md +9 -0
  62. package/docs/examples/database/list-indexes.md +2 -0
  63. package/docs/examples/database/update-collection.md +7 -0
  64. package/docs/examples/database/update-document.md +6 -0
  65. package/docs/examples/functions/create-deployment.md +5 -0
  66. package/docs/examples/functions/create-execution.md +4 -0
  67. package/docs/examples/functions/create.md +9 -0
  68. package/docs/examples/functions/delete-deployment.md +3 -0
  69. package/docs/examples/functions/delete.md +2 -0
  70. package/docs/examples/functions/get-deployment.md +3 -0
  71. package/docs/examples/functions/get-execution.md +3 -0
  72. package/docs/examples/functions/get-usage.md +3 -0
  73. package/docs/examples/functions/get.md +2 -0
  74. package/docs/examples/functions/list-deployments.md +8 -0
  75. package/docs/examples/functions/list-executions.md +7 -0
  76. package/docs/examples/functions/list-runtimes.md +1 -0
  77. package/docs/examples/functions/list.md +7 -0
  78. package/docs/examples/functions/retry-build.md +4 -0
  79. package/docs/examples/functions/update-deployment.md +3 -0
  80. package/docs/examples/functions/update.md +8 -0
  81. package/docs/examples/health/get-antivirus.md +1 -0
  82. package/docs/examples/health/get-cache.md +1 -0
  83. package/docs/examples/health/get-d-b.md +1 -0
  84. package/docs/examples/health/get-queue-certificates.md +1 -0
  85. package/docs/examples/health/get-queue-functions.md +1 -0
  86. package/docs/examples/health/get-queue-logs.md +1 -0
  87. package/docs/examples/health/get-queue-usage.md +1 -0
  88. package/docs/examples/health/get-queue-webhooks.md +1 -0
  89. package/docs/examples/health/get-storage-local.md +1 -0
  90. package/docs/examples/health/get-time.md +1 -0
  91. package/docs/examples/health/get.md +1 -0
  92. package/docs/examples/locale/get-continents.md +1 -0
  93. package/docs/examples/locale/get-countries-e-u.md +1 -0
  94. package/docs/examples/locale/get-countries-phones.md +1 -0
  95. package/docs/examples/locale/get-countries.md +1 -0
  96. package/docs/examples/locale/get-currencies.md +1 -0
  97. package/docs/examples/locale/get-languages.md +1 -0
  98. package/docs/examples/locale/get.md +1 -0
  99. package/docs/examples/projects/create-domain.md +3 -0
  100. package/docs/examples/projects/create-key.md +4 -0
  101. package/docs/examples/projects/create-platform.md +7 -0
  102. package/docs/examples/projects/create-webhook.md +8 -0
  103. package/docs/examples/projects/create.md +13 -0
  104. package/docs/examples/projects/delete-domain.md +3 -0
  105. package/docs/examples/projects/delete-key.md +3 -0
  106. package/docs/examples/projects/delete-platform.md +3 -0
  107. package/docs/examples/projects/delete-webhook.md +3 -0
  108. package/docs/examples/projects/delete.md +3 -0
  109. package/docs/examples/projects/get-domain.md +3 -0
  110. package/docs/examples/projects/get-key.md +3 -0
  111. package/docs/examples/projects/get-platform.md +3 -0
  112. package/docs/examples/projects/get-usage.md +3 -0
  113. package/docs/examples/projects/get-webhook.md +3 -0
  114. package/docs/examples/projects/get.md +2 -0
  115. package/docs/examples/projects/list-domains.md +2 -0
  116. package/docs/examples/projects/list-keys.md +2 -0
  117. package/docs/examples/projects/list-platforms.md +2 -0
  118. package/docs/examples/projects/list-webhooks.md +2 -0
  119. package/docs/examples/projects/list.md +7 -0
  120. package/docs/examples/projects/update-auth-limit.md +3 -0
  121. package/docs/examples/projects/update-auth-status.md +4 -0
  122. package/docs/examples/projects/update-domain-verification.md +3 -0
  123. package/docs/examples/projects/update-key.md +5 -0
  124. package/docs/examples/projects/update-o-auth2.md +5 -0
  125. package/docs/examples/projects/update-platform.md +7 -0
  126. package/docs/examples/projects/update-service-status.md +4 -0
  127. package/docs/examples/projects/update-webhook.md +9 -0
  128. package/docs/examples/projects/update.md +12 -0
  129. package/docs/examples/storage/create-bucket.md +11 -0
  130. package/docs/examples/storage/create-file.md +6 -0
  131. package/docs/examples/storage/delete-bucket.md +2 -0
  132. package/docs/examples/storage/delete-file.md +3 -0
  133. package/docs/examples/storage/get-bucket-usage.md +3 -0
  134. package/docs/examples/storage/get-bucket.md +2 -0
  135. package/docs/examples/storage/get-file-download.md +3 -0
  136. package/docs/examples/storage/get-file-preview.md +14 -0
  137. package/docs/examples/storage/get-file-view.md +3 -0
  138. package/docs/examples/storage/get-file.md +3 -0
  139. package/docs/examples/storage/get-usage.md +2 -0
  140. package/docs/examples/storage/list-buckets.md +7 -0
  141. package/docs/examples/storage/list-files.md +8 -0
  142. package/docs/examples/storage/update-bucket.md +11 -0
  143. package/docs/examples/storage/update-file.md +5 -0
  144. package/docs/examples/teams/create-membership.md +6 -0
  145. package/docs/examples/teams/create.md +4 -0
  146. package/docs/examples/teams/delete-membership.md +3 -0
  147. package/docs/examples/teams/delete.md +2 -0
  148. package/docs/examples/teams/get-membership.md +3 -0
  149. package/docs/examples/teams/get-memberships.md +8 -0
  150. package/docs/examples/teams/get.md +2 -0
  151. package/docs/examples/teams/list.md +7 -0
  152. package/docs/examples/teams/update-membership-roles.md +4 -0
  153. package/docs/examples/teams/update-membership-status.md +5 -0
  154. package/docs/examples/teams/update.md +3 -0
  155. package/docs/examples/users/create.md +5 -0
  156. package/docs/examples/users/delete-session.md +3 -0
  157. package/docs/examples/users/delete-sessions.md +2 -0
  158. package/docs/examples/users/delete.md +2 -0
  159. package/docs/examples/users/get-logs.md +4 -0
  160. package/docs/examples/users/get-prefs.md +2 -0
  161. package/docs/examples/users/get-sessions.md +2 -0
  162. package/docs/examples/users/get-usage.md +3 -0
  163. package/docs/examples/users/get.md +2 -0
  164. package/docs/examples/users/list.md +7 -0
  165. package/docs/examples/users/update-email.md +3 -0
  166. package/docs/examples/users/update-name.md +3 -0
  167. package/docs/examples/users/update-password.md +3 -0
  168. package/docs/examples/users/update-prefs.md +3 -0
  169. package/docs/examples/users/update-status.md +3 -0
  170. package/docs/examples/users/update-verification.md +3 -0
  171. package/index.js +49 -0
  172. package/install.sh +165 -0
  173. package/ldid/COPYING +661 -0
  174. package/ldid/Makefile +51 -0
  175. package/ldid/control +12 -0
  176. package/ldid/control.sh +5 -0
  177. package/ldid/deb.sh +10 -0
  178. package/ldid/ios.sh +2 -0
  179. package/ldid/ldid.cpp +3253 -0
  180. package/ldid/ldid.hpp +164 -0
  181. package/ldid/libplist/.github/workflows/build.yml +62 -0
  182. package/ldid/libplist/.github/workflows/codeql-analysis.yml +71 -0
  183. package/ldid/libplist/AUTHORS +28 -0
  184. package/ldid/libplist/COPYING +340 -0
  185. package/ldid/libplist/COPYING.LESSER +502 -0
  186. package/ldid/libplist/Makefile.am +20 -0
  187. package/ldid/libplist/NEWS +252 -0
  188. package/ldid/libplist/README.md +114 -0
  189. package/ldid/libplist/aclocal.m4 +1729 -0
  190. package/ldid/libplist/autogen.sh +26 -0
  191. package/ldid/libplist/configure.ac +292 -0
  192. package/ldid/libplist/cython/Makefile.am +53 -0
  193. package/ldid/libplist/cython/plist.pxd +78 -0
  194. package/ldid/libplist/cython/plist.pyx +947 -0
  195. package/ldid/libplist/cython/plist_util.c +40 -0
  196. package/ldid/libplist/cython/plist_util.h +5 -0
  197. package/ldid/libplist/docs/Makefile.am +3 -0
  198. package/ldid/libplist/docs/plistutil.1 +62 -0
  199. package/ldid/libplist/fuzz/Makefile.am +43 -0
  200. package/ldid/libplist/fuzz/bplist-crashes/clusterfuzz-testcase-4766291097288704 +0 -0
  201. package/ldid/libplist/fuzz/bplist-crashes/clusterfuzz-testcase-4930725262393344 +0 -0
  202. package/ldid/libplist/fuzz/bplist-crashes/clusterfuzz-testcase-5421965105954816 +0 -0
  203. package/ldid/libplist/fuzz/bplist-crashes/clusterfuzz-testcase-5556177727389696 +0 -0
  204. package/ldid/libplist/fuzz/bplist-crashes/clusterfuzz-testcase-6557963011489792 +0 -0
  205. package/ldid/libplist/fuzz/bplist-crashes/clusterfuzz-testcase-6605859144597504 +0 -0
  206. package/ldid/libplist/fuzz/bplist-crashes/crash-0ce4dd483b645bc05ec45a97d285dcf1933ee840 +0 -0
  207. package/ldid/libplist/fuzz/bplist-crashes/crash-0d59cdcb5c3416c2790612b78a631ce9f5622800 +0 -0
  208. package/ldid/libplist/fuzz/bplist-crashes/crash-17d635ab460fef74df1ac7561f1253533a6359c5 +0 -0
  209. package/ldid/libplist/fuzz/bplist-crashes/crash-33a67313fa7864cd627ef92d12017a127d342f28 +0 -0
  210. package/ldid/libplist/fuzz/bplist-crashes/crash-39f1347115f8fe9ac25cdc9332e3fc5cd32c7f7b +0 -0
  211. package/ldid/libplist/fuzz/bplist-crashes/crash-4bd78175fe01d07c5ee90104fbc68d95dd092210 +0 -0
  212. package/ldid/libplist/fuzz/bplist-crashes/crash-4c5404453bb7425aef9b953a5f6f3f0afcc48392 +0 -0
  213. package/ldid/libplist/fuzz/bplist-crashes/crash-52775e25f6af20af351cd616834e602fc988a032 +0 -0
  214. package/ldid/libplist/fuzz/bplist-crashes/crash-6d1399685b745d3d49fadc91072fabcdde8d16fa +0 -0
  215. package/ldid/libplist/fuzz/bplist-crashes/crash-94b3725900d63c6258448fd757559c81002de9c9 +0 -0
  216. package/ldid/libplist/fuzz/bplist-crashes/crash-a47195acbabc3f5b2cda9c6ebda42f2afc1cc5af +0 -0
  217. package/ldid/libplist/fuzz/bplist-crashes/crash-ce852bae6aeeffc4698a93660236f1b995ce966e +0 -0
  218. package/ldid/libplist/fuzz/bplist-crashes/crash-daddb6e82e3d1ed76e20e4131462f5247a6fb131 +0 -0
  219. package/ldid/libplist/fuzz/bplist-crashes/crash-f21be4ebce7f9c337bf96b93cec7e252f5c75a21 +0 -0
  220. package/ldid/libplist/fuzz/bplist-crashes/crash-f779dafccc0164684d1a264976e56037188b40e2 +0 -0
  221. package/ldid/libplist/fuzz/bplist-leaks/leak-96fb453b3ba18d31e164831795a708183b5a0dac +0 -0
  222. package/ldid/libplist/fuzz/bplist-leaks/leak-acb3c00a83d7635638a476a4e70fc1f1caa1a5b1 +0 -0
  223. package/ldid/libplist/fuzz/bplist-leaks/leak-fe2cd4b1f67e0c9b21e6225a4fb4ca19eab80074 +0 -0
  224. package/ldid/libplist/fuzz/bplist.dict +1 -0
  225. package/ldid/libplist/fuzz/bplist_fuzzer.cc +32 -0
  226. package/ldid/libplist/fuzz/bplist_fuzzer.options +3 -0
  227. package/ldid/libplist/fuzz/fuzzers.test +8 -0
  228. package/ldid/libplist/fuzz/init-fuzzers.sh +23 -0
  229. package/ldid/libplist/fuzz/test-fuzzers.sh +33 -0
  230. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-4516959125241856 +0 -0
  231. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-4663876528373760 +5 -0
  232. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-5799076113154048 +45 -0
  233. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-5922404220010496 +0 -0
  234. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-6015098361479168 +0 -0
  235. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-6043836860071936 +0 -0
  236. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-6047509906456576 +10050 -0
  237. package/ldid/libplist/fuzz/xplist-crashes/clusterfuzz-testcase-6482601374121984 +0 -0
  238. package/ldid/libplist/fuzz/xplist-crashes/crash-09788d7acb46b4b177422f9c4ee54556a3ad1f17 +53 -0
  239. package/ldid/libplist/fuzz/xplist-crashes/crash-155c60d5c4b2778110fb4a633caa7d64eb9b99c1 +9 -0
  240. package/ldid/libplist/fuzz/xplist-crashes/crash-348c909a0b3532977185f551eb5d2ed04e694883 +11 -0
  241. package/ldid/libplist/fuzz/xplist-crashes/crash-7bc172e27a2b1d4fcaf031f59d1f08fb83081e4a +8 -0
  242. package/ldid/libplist/fuzz/xplist-crashes/crash-80c28b0e2a446665e68927dd4441c10c9a68e64e +0 -0
  243. package/ldid/libplist/fuzz/xplist-crashes/crash-8acf177da60ecf13c36d0da1b8e25de891980ea6 +5 -0
  244. package/ldid/libplist/fuzz/xplist-crashes/crash-94276cf69a50e78dd6cdf079c208cb80f357cd33 +0 -0
  245. package/ldid/libplist/fuzz/xplist-crashes/crash-9ddb891a0ec42401eb4629e6b99e01aef7909eb9 +0 -0
  246. package/ldid/libplist/fuzz/xplist-crashes/crash-a8b44e1f5be4f75f00a937016ec5405bce77a0f9 +0 -0
  247. package/ldid/libplist/fuzz/xplist-crashes/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
  248. package/ldid/libplist/fuzz/xplist-crashes/crash-f03c680ee1c4d84c28e731752df77a61e213a24d +72 -0
  249. package/ldid/libplist/fuzz/xplist-leaks/clusterfuzz-testcase-4634751103139840 +187 -0
  250. package/ldid/libplist/fuzz/xplist-leaks/clusterfuzz-testcase-6056412121661440 +12 -0
  251. package/ldid/libplist/fuzz/xplist-leaks/leak-47b0a9f21d3affab6cfc898e5140bb53265ada07 +0 -0
  252. package/ldid/libplist/fuzz/xplist-leaks/leak-4c81aae70b20d9b9408b78d40999a54205bdcfb7 +0 -0
  253. package/ldid/libplist/fuzz/xplist-leaks/leak-53bc466851eda790bd891733da5db0a7482886bf +6 -0
  254. package/ldid/libplist/fuzz/xplist.dict +51 -0
  255. package/ldid/libplist/fuzz/xplist_fuzzer.cc +32 -0
  256. package/ldid/libplist/fuzz/xplist_fuzzer.options +3 -0
  257. package/ldid/libplist/include/Makefile.am +15 -0
  258. package/ldid/libplist/include/plist/Array.h +55 -0
  259. package/ldid/libplist/include/plist/Boolean.h +48 -0
  260. package/ldid/libplist/include/plist/Data.h +49 -0
  261. package/ldid/libplist/include/plist/Date.h +50 -0
  262. package/ldid/libplist/include/plist/Dictionary.h +68 -0
  263. package/ldid/libplist/include/plist/Integer.h +48 -0
  264. package/ldid/libplist/include/plist/Key.h +49 -0
  265. package/ldid/libplist/include/plist/Node.h +57 -0
  266. package/ldid/libplist/include/plist/Real.h +48 -0
  267. package/ldid/libplist/include/plist/String.h +49 -0
  268. package/ldid/libplist/include/plist/Structure.h +59 -0
  269. package/ldid/libplist/include/plist/Uid.h +48 -0
  270. package/ldid/libplist/include/plist/plist++.h +39 -0
  271. package/ldid/libplist/include/plist/plist.h +953 -0
  272. package/ldid/libplist/libcnary/COPYING +502 -0
  273. package/ldid/libplist/libcnary/Makefile.am +15 -0
  274. package/ldid/libplist/libcnary/README +5 -0
  275. package/ldid/libplist/libcnary/cnary.c +46 -0
  276. package/ldid/libplist/libcnary/include/node.h +65 -0
  277. package/ldid/libplist/libcnary/include/node_list.h +47 -0
  278. package/ldid/libplist/libcnary/include/object.h +41 -0
  279. package/ldid/libplist/libcnary/node.c +216 -0
  280. package/ldid/libplist/libcnary/node_list.c +157 -0
  281. package/ldid/libplist/m4/ac_pkg_cython.m4 +67 -0
  282. package/ldid/libplist/m4/as-compiler-flag.m4 +62 -0
  283. package/ldid/libplist/m4/ax_pthread.m4 +485 -0
  284. package/ldid/libplist/m4/ax_python_devel.m4 +327 -0
  285. package/ldid/libplist/m4/cython_python.m4 +7 -0
  286. package/ldid/libplist/src/Array.cpp +148 -0
  287. package/ldid/libplist/src/Boolean.cpp +73 -0
  288. package/ldid/libplist/src/Data.cpp +79 -0
  289. package/ldid/libplist/src/Date.cpp +76 -0
  290. package/ldid/libplist/src/Dictionary.cpp +182 -0
  291. package/ldid/libplist/src/Integer.cpp +73 -0
  292. package/ldid/libplist/src/Key.cpp +80 -0
  293. package/ldid/libplist/src/Makefile.am +63 -0
  294. package/ldid/libplist/src/Node.cpp +166 -0
  295. package/ldid/libplist/src/Real.cpp +73 -0
  296. package/ldid/libplist/src/String.cpp +80 -0
  297. package/ldid/libplist/src/Structure.cpp +123 -0
  298. package/ldid/libplist/src/Uid.cpp +73 -0
  299. package/ldid/libplist/src/base64.c +119 -0
  300. package/ldid/libplist/src/base64.h +28 -0
  301. package/ldid/libplist/src/bplist.c +1381 -0
  302. package/ldid/libplist/src/bytearray.c +61 -0
  303. package/ldid/libplist/src/bytearray.h +36 -0
  304. package/ldid/libplist/src/hashtable.c +140 -0
  305. package/ldid/libplist/src/hashtable.h +50 -0
  306. package/ldid/libplist/src/plist.c +1356 -0
  307. package/ldid/libplist/src/plist.h +74 -0
  308. package/ldid/libplist/src/ptrarray.c +96 -0
  309. package/ldid/libplist/src/ptrarray.h +40 -0
  310. package/ldid/libplist/src/strbuf.h +34 -0
  311. package/ldid/libplist/src/time64.c +814 -0
  312. package/ldid/libplist/src/time64.h +81 -0
  313. package/ldid/libplist/src/time64_limits.h +97 -0
  314. package/ldid/libplist/src/xplist.c +1435 -0
  315. package/ldid/libplist/test/Makefile.am +93 -0
  316. package/ldid/libplist/test/amp.test +14 -0
  317. package/ldid/libplist/test/bigarray.test +15 -0
  318. package/ldid/libplist/test/cdata.test +12 -0
  319. package/ldid/libplist/test/data/1.plist +35 -0
  320. package/ldid/libplist/test/data/2.plist +100 -0
  321. package/ldid/libplist/test/data/3.plist +420 -0
  322. package/ldid/libplist/test/data/4.plist +5037 -0
  323. package/ldid/libplist/test/data/5.plist +55053 -0
  324. package/ldid/libplist/test/data/6.plist +4006 -0
  325. package/ldid/libplist/test/data/7.plist +14 -0
  326. package/ldid/libplist/test/data/amp.plist +6 -0
  327. package/ldid/libplist/test/data/cdata.plist +6 -0
  328. package/ldid/libplist/test/data/dictref1byte.bplist +0 -0
  329. package/ldid/libplist/test/data/dictref2bytes.bplist +0 -0
  330. package/ldid/libplist/test/data/dictref3bytes.bplist +0 -0
  331. package/ldid/libplist/test/data/dictref4bytes.bplist +0 -0
  332. package/ldid/libplist/test/data/dictref5bytes.bplist +0 -0
  333. package/ldid/libplist/test/data/dictref6bytes.bplist +0 -0
  334. package/ldid/libplist/test/data/dictref7bytes.bplist +0 -0
  335. package/ldid/libplist/test/data/dictref8bytes.bplist +0 -0
  336. package/ldid/libplist/test/data/empty_keys.plist +8 -0
  337. package/ldid/libplist/test/data/entities.plist +57 -0
  338. package/ldid/libplist/test/data/hex.plist +5 -0
  339. package/ldid/libplist/test/data/invalid_tag.plist +6 -0
  340. package/ldid/libplist/test/data/malformed_dict.bplist +0 -0
  341. package/ldid/libplist/test/data/off1byte.bplist +0 -0
  342. package/ldid/libplist/test/data/off2bytes.bplist +0 -0
  343. package/ldid/libplist/test/data/off3bytes.bplist +0 -0
  344. package/ldid/libplist/test/data/off4bytes.bplist +0 -0
  345. package/ldid/libplist/test/data/off5bytes.bplist +0 -0
  346. package/ldid/libplist/test/data/off6bytes.bplist +0 -0
  347. package/ldid/libplist/test/data/off7bytes.bplist +0 -0
  348. package/ldid/libplist/test/data/off8bytes.bplist +0 -0
  349. package/ldid/libplist/test/data/offxml.plist +8 -0
  350. package/ldid/libplist/test/data/order.bplist +0 -0
  351. package/ldid/libplist/test/data/order.plist +27 -0
  352. package/ldid/libplist/test/data/recursion.bplist +0 -0
  353. package/ldid/libplist/test/data/signed.bplist +0 -0
  354. package/ldid/libplist/test/data/signed.plist +5 -0
  355. package/ldid/libplist/test/data/signedunsigned.bplist +0 -0
  356. package/ldid/libplist/test/data/signedunsigned.plist +11 -0
  357. package/ldid/libplist/test/data/unsigned.bplist +0 -0
  358. package/ldid/libplist/test/data/unsigned.plist +5 -0
  359. package/ldid/libplist/test/dates.test +15 -0
  360. package/ldid/libplist/test/empty.test +15 -0
  361. package/ldid/libplist/test/empty_keys.test +12 -0
  362. package/ldid/libplist/test/entities.test +12 -0
  363. package/ldid/libplist/test/hex.test +12 -0
  364. package/ldid/libplist/test/huge.test +15 -0
  365. package/ldid/libplist/test/invalid_tag.test +14 -0
  366. package/ldid/libplist/test/large.test +15 -0
  367. package/ldid/libplist/test/malformed_dict.test +11 -0
  368. package/ldid/libplist/test/medium.test +15 -0
  369. package/ldid/libplist/test/offsetsize.test +12 -0
  370. package/ldid/libplist/test/order.test +13 -0
  371. package/ldid/libplist/test/plist_cmp.c +158 -0
  372. package/ldid/libplist/test/plist_test.c +135 -0
  373. package/ldid/libplist/test/recursion.test +11 -0
  374. package/ldid/libplist/test/refsize.test +12 -0
  375. package/ldid/libplist/test/signedunsigned1.test +23 -0
  376. package/ldid/libplist/test/signedunsigned2.test +23 -0
  377. package/ldid/libplist/test/signedunsigned3.test +23 -0
  378. package/ldid/libplist/test/small.test +15 -0
  379. package/ldid/libplist/test/timezone1.test +17 -0
  380. package/ldid/libplist/test/timezone2.test +21 -0
  381. package/ldid/libplist/tools/Makefile.am +10 -0
  382. package/ldid/libplist/tools/plistutil.c +299 -0
  383. package/ldid/lookup2.c +416 -0
  384. package/ldid/make.sh +90 -0
  385. package/ldid/minimal/hexdump.h +76 -0
  386. package/ldid/minimal/mapping.h +72 -0
  387. package/ldid/minimal/sqlite3.h +71 -0
  388. package/ldid/minimal/stdlib.h +129 -0
  389. package/ldid/minimal/string.h +51 -0
  390. package/ldid/plist.sh +2 -0
  391. package/ldid/sha1.h +64 -0
  392. package/ldid/sysroot.sh +31 -0
  393. package/ldid/version.sh +2 -0
  394. package/lib/client.js +243 -0
  395. package/lib/commands/account.js +785 -0
  396. package/lib/commands/avatars.js +349 -0
  397. package/lib/commands/database.js +1238 -0
  398. package/lib/commands/deploy.js +477 -0
  399. package/lib/commands/functions.js +689 -0
  400. package/lib/commands/generic.js +106 -0
  401. package/lib/commands/health.js +269 -0
  402. package/lib/commands/init.js +148 -0
  403. package/lib/commands/locale.js +177 -0
  404. package/lib/commands/projects.js +1191 -0
  405. package/lib/commands/storage.js +743 -0
  406. package/lib/commands/teams.js +435 -0
  407. package/lib/commands/users.js +542 -0
  408. package/lib/config.js +264 -0
  409. package/lib/exception.js +9 -0
  410. package/lib/parser.js +179 -0
  411. package/lib/questions.js +223 -0
  412. package/lib/sdks.js +82 -0
  413. package/package.json +41 -0
@@ -0,0 +1,477 @@
1
+ const inquirer = require("inquirer");
2
+ const { Command } = require("commander");
3
+ const { localConfig } = require("../config");
4
+ const { questionsDeployFunctions, questionsGetEntrypoint, questionsDeployCollections } = require("../questions");
5
+ const { actionRunner, success, log, error, commandDescriptions } = require("../parser");
6
+ const { functionsGet, functionsCreate, functionsUpdate, functionsCreateDeployment, functionsUpdateDeployment } = require('./functions');
7
+ const {
8
+ databaseCreateBooleanAttribute,
9
+ databaseGetCollection,
10
+ databaseCreateCollection,
11
+ databaseCreateStringAttribute,
12
+ databaseCreateIntegerAttribute,
13
+ databaseCreateFloatAttribute,
14
+ databaseCreateEmailAttribute,
15
+ databaseCreateIndex,
16
+ databaseCreateUrlAttribute,
17
+ databaseCreateIpAttribute,
18
+ databaseCreateEnumAttribute,
19
+ databaseDeleteAttribute,
20
+ databaseListAttributes,
21
+ databaseListIndexes,
22
+ databaseDeleteIndex
23
+ } = require("./database");
24
+
25
+ const POOL_DEBOUNCE = 2000; // in milliseconds
26
+ const POOL_MAX_DEBOUNCES = 30;
27
+
28
+ const awaitPools = {
29
+ wipeAttributes: async (collectionId, iteration = 1) => {
30
+ if (iteration > POOL_MAX_DEBOUNCES) {
31
+ return false;
32
+ }
33
+
34
+ // TODO: Pagination?
35
+ const { attributes: remoteAttributes } = await databaseListAttributes({
36
+ collectionId,
37
+ limit: 100,
38
+ parseOutput: false
39
+ });
40
+
41
+ if (remoteAttributes.length <= 0) {
42
+ return true;
43
+ }
44
+
45
+ await new Promise(resolve => setTimeout(resolve, POOL_DEBOUNCE));
46
+ return await awaitPools.wipeAttributes(collectionId, iteration + 1);
47
+ },
48
+ wipeIndexes: async (collectionId, iteration = 1) => {
49
+ if (iteration > POOL_MAX_DEBOUNCES) {
50
+ return false;
51
+ }
52
+
53
+ // TODO: Pagination?
54
+ const { indexes: remoteIndexes } = await databaseListIndexes({
55
+ collectionId,
56
+ limit: 100,
57
+ parseOutput: false
58
+ });
59
+
60
+ if (remoteIndexes.length <= 0) {
61
+ return true;
62
+ }
63
+
64
+ await new Promise(resolve => setTimeout(resolve, POOL_DEBOUNCE));
65
+ return await awaitPools.wipeIndexes(collectionId, iteration + 1);
66
+ },
67
+ expectAttributes: async (collectionId, attributeKeys, iteration = 1) => {
68
+ if (iteration > POOL_MAX_DEBOUNCES) {
69
+ return false;
70
+ }
71
+
72
+ // TODO: Pagination?
73
+ const { attributes: remoteAttributes } = await databaseListAttributes({
74
+ collectionId,
75
+ limit: 100,
76
+ parseOutput: false
77
+ });
78
+
79
+ const readyAttributeKeys = remoteAttributes.filter((attribute) => {
80
+ if (attributeKeys.includes(attribute.key)) {
81
+ if (['stuck', 'failed'].includes(attribute.status)) {
82
+ throw new Error(`Attribute '${attribute.key}' failed!`);
83
+ }
84
+
85
+ return attribute.status === 'available';
86
+ }
87
+
88
+ return false;
89
+ }).map(attribute => attribute.key);
90
+
91
+ if (readyAttributeKeys.length >= attributeKeys.length) {
92
+ return true;
93
+ }
94
+
95
+ await new Promise(resolve => setTimeout(resolve, POOL_DEBOUNCE));
96
+ return await awaitPools.expectAttributes(collectionId, attributeKeys, iteration + 1);
97
+ },
98
+ expectIndexes: async (collectionId, indexKeys, iteration = 1) => {
99
+ if (iteration > POOL_MAX_DEBOUNCES) {
100
+ return false;
101
+ }
102
+
103
+ // TODO: Pagination?
104
+ const { indexes: remoteIndexes } = await databaseListIndexes({
105
+ collectionId,
106
+ limit: 100,
107
+ parseOutput: false
108
+ });
109
+
110
+ const readyIndexKeys = remoteIndexes.filter((index) => {
111
+ if (indexKeys.includes(index.key)) {
112
+ if (['stuck', 'failed'].includes(index.status)) {
113
+ throw new Error(`Index '${index.key}' failed!`);
114
+ }
115
+
116
+ return index.status === 'available';
117
+ }
118
+
119
+ return false;
120
+ }).map(index => index.key);
121
+
122
+ if (readyIndexKeys.length >= indexKeys.length) {
123
+ return true;
124
+ }
125
+
126
+ await new Promise(resolve => setTimeout(resolve, POOL_DEBOUNCE));
127
+ return await awaitPools.expectIndexes(collectionId, indexKeys, iteration + 1);
128
+ },
129
+ }
130
+
131
+ const deploy = new Command("deploy")
132
+ .description(commandDescriptions['deploy'])
133
+ .option("--all", "Flag to deploy collections and functions")
134
+ .action(actionRunner(async ({ all }, command) => {
135
+ if (all == undefined) {
136
+ command.help()
137
+ }
138
+
139
+ try {
140
+ await deployFunction();
141
+ } catch (e) {
142
+ error(e.message);
143
+ }
144
+ await deployCollection()
145
+ }));
146
+
147
+ const deployFunction = async () => {
148
+ let response = {};
149
+
150
+ let answers = await inquirer.prompt(questionsDeployFunctions)
151
+ let functions = answers.functions
152
+
153
+ for (let func of functions) {
154
+ log(`Deploying function ${func.name} ( ${func['$id']} )`)
155
+
156
+ try {
157
+ response = await functionsGet({
158
+ functionId: func['$id'],
159
+ parseOutput: false,
160
+ });
161
+
162
+ if(response.runtime !== func.runtime) {
163
+ throw new Error(`Runtime missmatch! (local=${func.runtime},remote=${response.runtime}) Please delete remote function or update your appwrite.json`);
164
+ }
165
+
166
+ response = await functionsUpdate({
167
+ functionId: func['$id'],
168
+ name: func.name,
169
+ execute: func.execute,
170
+ vars: func.vars,
171
+ events: func.events,
172
+ schedule: func.schedule,
173
+ timeout: func.timeout,
174
+ parseOutput: false
175
+ });
176
+ } catch (e) {
177
+ if (e.code == 404) {
178
+ log(`Function ${func.name} ( ${func['$id']} ) does not exist in the project. Creating ... `);
179
+ response = await functionsCreate({
180
+ functionId: func.$id || 'unique()',
181
+ name: func.name,
182
+ runtime: func.runtime,
183
+ execute: func.execute,
184
+ vars: func.vars,
185
+ events: func.events,
186
+ schedule: func.schedule,
187
+ timeout: func.timeout,
188
+ parseOutput: false
189
+ });
190
+
191
+ localConfig.updateFunction(func['$id'], {
192
+ "$id": response['$id'],
193
+ });
194
+
195
+ func["$id"] = response['$id'];
196
+ log(`Function ${func.name} created.`);
197
+ } else {
198
+ throw e;
199
+ }
200
+ }
201
+
202
+ // Create tag
203
+ if (!func.entrypoint) {
204
+ answers = await inquirer.prompt(questionsGetEntrypoint)
205
+ func.entrypoint = answers.entrypoint;
206
+ localConfig.updateFunction(func['$id'], func);
207
+ }
208
+
209
+ try {
210
+ response = await functionsCreateDeployment({
211
+ functionId: func['$id'],
212
+ entrypoint: func.entrypoint,
213
+ code: func.path,
214
+ activate: true,
215
+ parseOutput: false
216
+ })
217
+
218
+ success(`Deployed ${func.name} ( ${func['$id']} )`);
219
+
220
+ } catch (e) {
221
+ switch (e.code) {
222
+ case 'ENOENT':
223
+ error(`Function ${func.name} ( ${func['$id']} ) not found in the current directory. Skipping ...`);
224
+ break;
225
+ default:
226
+ throw e;
227
+ }
228
+ }
229
+ }
230
+ }
231
+
232
+ const createAttribute = async (collectionId, attribute) => {
233
+ switch (attribute.type) {
234
+ case 'string':
235
+ switch (attribute.format) {
236
+ case 'email':
237
+ return await databaseCreateEmailAttribute({
238
+ collectionId,
239
+ key: attribute.key,
240
+ required: attribute.required,
241
+ xdefault: attribute.default,
242
+ array: attribute.array,
243
+ parseOutput: false
244
+ })
245
+ case 'url':
246
+ return await databaseCreateUrlAttribute({
247
+ collectionId,
248
+ key: attribute.key,
249
+ required: attribute.required,
250
+ xdefault: attribute.default,
251
+ array: attribute.array,
252
+ parseOutput: false
253
+ })
254
+ case 'ip':
255
+ return await databaseCreateIpAttribute({
256
+ collectionId,
257
+ key: attribute.key,
258
+ required: attribute.required,
259
+ xdefault: attribute.default,
260
+ array: attribute.array,
261
+ parseOutput: false
262
+ })
263
+ case 'enum':
264
+ return await databaseCreateEnumAttribute({
265
+ collectionId,
266
+ key: attribute.key,
267
+ elements: attribute.elements,
268
+ required: attribute.required,
269
+ xdefault: attribute.default,
270
+ array: attribute.array,
271
+ parseOutput: false
272
+ })
273
+ default:
274
+ return await databaseCreateStringAttribute({
275
+ collectionId,
276
+ key: attribute.key,
277
+ size: attribute.size,
278
+ required: attribute.required,
279
+ xdefault: attribute.default,
280
+ array: attribute.array,
281
+ parseOutput: false
282
+ })
283
+
284
+ }
285
+ case 'integer':
286
+ return await databaseCreateIntegerAttribute({
287
+ collectionId,
288
+ key: attribute.key,
289
+ required: attribute.required,
290
+ min: attribute.min,
291
+ max: attribute.max,
292
+ xdefault: attribute.default,
293
+ array: attribute.array,
294
+ parseOutput: false
295
+ })
296
+ case 'double':
297
+ return databaseCreateFloatAttribute({
298
+ collectionId,
299
+ key: attribute.key,
300
+ required: attribute.required,
301
+ min: attribute.min,
302
+ max: attribute.max,
303
+ xdefault: attribute.default,
304
+ array: attribute.array,
305
+ parseOutput: false
306
+ })
307
+ case 'boolean':
308
+ return databaseCreateBooleanAttribute({
309
+ collectionId,
310
+ key: attribute.key,
311
+ required: attribute.required,
312
+ xdefault: attribute.default,
313
+ array: attribute.array,
314
+ parseOutput: false
315
+ })
316
+ }
317
+ }
318
+
319
+ const deployCollection = async () => {
320
+ let response = {};
321
+ let answers = await inquirer.prompt(questionsDeployCollections[0])
322
+ let collections = answers.collections
323
+
324
+ for (let collection of collections) {
325
+ log(`Deploying collection ${collection.name} ( ${collection['$id']} )`)
326
+ try {
327
+ response = await databaseGetCollection({
328
+ collectionId: collection['$id'],
329
+ parseOutput: false,
330
+ })
331
+ log(`Collection ${collection.name} ( ${collection['$id']} ) already exists.`);
332
+
333
+ answers = await inquirer.prompt(questionsDeployCollections[1])
334
+ if (answers.override !== "YES") {
335
+ log(`Received "${answers.override}". Skipping ${collection.name} ( ${collection['$id']} )`);
336
+ continue;
337
+ }
338
+
339
+ log(`Updating attributes ... `);
340
+
341
+ // TODO: Pagination?
342
+ const { indexes: remoteIndexes } = await databaseListIndexes({
343
+ collectionId: collection['$id'],
344
+ limit: 100,
345
+ parseOutput: false
346
+ });
347
+
348
+ await Promise.all(remoteIndexes.map(async index => {
349
+ await databaseDeleteIndex({
350
+ collectionId: collection['$id'],
351
+ key: index.key,
352
+ parseOutput: false
353
+ });
354
+ }));
355
+
356
+ const deleteIndexesPoolStatus = await awaitPools.wipeIndexes(collection['$id']);
357
+ if (!deleteIndexesPoolStatus) {
358
+ throw new Error("Index deletion did not finish for too long.");
359
+ }
360
+
361
+ // TODO: Pagination?
362
+ const { attributes: remoteAttributes } = await databaseListAttributes({
363
+ collectionId: collection['$id'],
364
+ limit: 100,
365
+ parseOutput: false
366
+ });
367
+
368
+ await Promise.all(remoteAttributes.map(async attribute => {
369
+ await databaseDeleteAttribute({
370
+ collectionId: collection['$id'],
371
+ key: attribute.key,
372
+ parseOutput: false
373
+ });
374
+ }));
375
+
376
+ const deleteAttributesPoolStatus = await awaitPools.wipeAttributes(collection['$id']);
377
+ if (!deleteAttributesPoolStatus) {
378
+ throw new Error("Attribute deletion did not finish for too long.");
379
+ }
380
+
381
+ await Promise.all(collection.attributes.map(async attribute => {
382
+ await createAttribute(collection['$id'], attribute);
383
+ }));
384
+
385
+ const attributeKeys = collection.attributes.map(attribute => attribute.key);
386
+ const createPoolStatus = await awaitPools.expectAttributes(collection['$id'], attributeKeys);
387
+ if (!createPoolStatus) {
388
+ throw new Error("Attribute creation did not finish for too long.");
389
+ }
390
+
391
+ success(`Created ${collection.attributes.length} attributes`);
392
+
393
+ log(`Creating indexes ...`)
394
+ await Promise.all(collection.indexes.map(async index => {
395
+ await databaseCreateIndex({
396
+ collectionId: collection['$id'],
397
+ key: index.key,
398
+ type: index.type,
399
+ attributes: index.attributes,
400
+ orders: index.orders,
401
+ parseOutput: false
402
+ });
403
+ }));
404
+
405
+ const indexKeys = collection.indexes.map(attribute => attribute.key);
406
+ const indexPoolStatus = await awaitPools.expectIndexes(collection['$id'], indexKeys);
407
+ if (!indexPoolStatus) {
408
+ throw new Error("Index creation did not finish for too long.");
409
+ }
410
+
411
+ success(`Created ${collection.indexes.length} indexes`);
412
+ } catch (e) {
413
+ if (e.code == 404) {
414
+ log(`Collection ${collection.name} does not exist in the project. Creating ... `);
415
+ response = await databaseCreateCollection({
416
+ collectionId: collection['$id'],
417
+ name: collection.name,
418
+ permission: collection.permission,
419
+ read: collection['$read'],
420
+ write: collection['$write'],
421
+ parseOutput: false
422
+ })
423
+
424
+ log(`Creating attributes ... `);
425
+ await Promise.all(collection.attributes.map(async attribute => {
426
+ await createAttribute(collection['$id'], attribute);
427
+ }));
428
+
429
+ const attributeKeys = collection.attributes.map(attribute => attribute.key);
430
+ const attributePoolStatus = await awaitPools.expectAttributes(collection['$id'], attributeKeys);
431
+ if (!attributePoolStatus) {
432
+ throw new Error("Attribute creation did not finish for too long.");
433
+ }
434
+
435
+ success(`Created ${collection.attributes.length} attributes`);
436
+
437
+ log(`Creating indexes ...`);
438
+ await Promise.all(collection.indexes.map(async index => {
439
+ await databaseCreateIndex({
440
+ collectionId: collection['$id'],
441
+ key: index.key,
442
+ type: index.type,
443
+ attributes: index.attributes,
444
+ orders: index.orders,
445
+ parseOutput: false
446
+ });
447
+ }));
448
+
449
+ const indexKeys = collection.indexes.map(attribute => attribute.key);
450
+ const indexPoolStatus = await awaitPools.expectIndexes(collection['$id'], indexKeys);
451
+ if (!indexPoolStatus) {
452
+ throw new Error("Index creation did not finish for too long.");
453
+ }
454
+
455
+ success(`Created ${collection.indexes.length} indexes`);
456
+
457
+ success(`Deployed ${collection.name} ( ${collection['$id']} )`);
458
+ } else {
459
+ throw e;
460
+ }
461
+ }
462
+ }
463
+ }
464
+
465
+ deploy
466
+ .command("function")
467
+ .description("Deploy functions in the current directory.")
468
+ .action(actionRunner(deployFunction));
469
+
470
+ deploy
471
+ .command("collection")
472
+ .description("Deploy collections in the current project.")
473
+ .action(actionRunner(deployCollection));
474
+
475
+ module.exports = {
476
+ deploy
477
+ }