diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml index 2551c366bf..1399d56746 100644 --- a/.github/ISSUE_TEMPLATE/bug.yaml +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -37,6 +37,7 @@ body: label: "🎲 Appwrite version" description: "What version of Appwrite are you running?" options: + - Version 0.11.x - Version 0.10.x - Version 0.9.x - Version 0.8.x diff --git a/README.md b/README.md index e4d50bf529..e71cbf57e9 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ docker run -it --rm , appwrite/appwrite:0.11.0 ``` -Once the Docker installation completes, go to http://localhost to access the Appwrite console from your browser. Please note that on non-linux native hosts, the server might take a few minutes to start after installation completes. +Once the Docker installation completes, go to http://localhost to access the Appwrite console from your browser. Please note that on non-Linux native hosts, the server might take a few minutes to start after installation completes. For advanced production and custom installation, check out our Docker [environment variables](https://appwrite.io/docs/environment-variables) docs. You can also use our public [docker-compose.yml](https://gist.github.com/eldadfux/977869ff6bdd7312adfd4e629ee15cc5#file-docker-compose-yml) file to manually set up an environment. @@ -94,7 +94,7 @@ If you are upgrading your Appwrite server from an older version, you should use ## Getting Started -Getting started with Appwrite is as easy as creating a new project, choosing your platform, and integrating its SDK in your code. You can easily get started with your platform of choice by reading one of our Getting Started tutorials. +Getting started with Appwrite is as easy as creating a new project, choosing your platform, and integrating its SDK into your code. You can easily get started with your platform of choice by reading one of our Getting Started tutorials. * [Getting Started for Web](https://appwrite.io/docs/getting-started-for-web) * [Getting Started for Flutter](https://appwrite.io/docs/getting-started-for-flutter) @@ -102,7 +102,6 @@ Getting started with Appwrite is as easy as creating a new project, choosing you * [Getting Started for Android](https://appwrite.io/docs/getting-started-for-android) * [Getting Started for Server](https://appwrite.io/docs/getting-started-for-server) * [Getting Started for CLI](https://appwrite.io/docs/command-line) -* Getting Started for iOS (Coming soon...) ### Services @@ -130,7 +129,7 @@ Below is a list of currently supported platforms and languages. If you wish to h #### Server * ✅   [NodeJS](https://github.com/appwrite/sdk-for-node) (Maintained by the Appwrite Team) * ✅   [PHP](https://github.com/appwrite/sdk-for-php) (Maintained by the Appwrite Team) -* ✅   [Dart](https://github.com/appwrite/sdk-for-dart) - **Beta** (Maintained by the Appwrite Team) +* ✅   [Dart](https://github.com/appwrite/sdk-for-dart) - (Maintained by the Appwrite Team) * ✅   [Deno](https://github.com/appwrite/sdk-for-deno) - **Beta** (Maintained by the Appwrite Team) * ✅   [Ruby](https://github.com/appwrite/sdk-for-ruby) (Maintained by the Appwrite Team) * ✅   [Python](https://github.com/appwrite/sdk-for-python) (Maintained by the Appwrite Team) @@ -139,8 +138,9 @@ Below is a list of currently supported platforms and languages. If you wish to h * ✅   [.NET](https://github.com/appwrite/sdk-for-dotnet) - **Experimental** (Maintained by the Appwrite Team) #### Community -* ✅   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (Maintained by [Michael Gangolf](https://github.com/m1ga/)) - +* ✅   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (Maintained by [Michael Gangolf](https://github.com/m1ga/)) +* ✅   [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (Maintained by [fenix-hub @GodotNuts](https://github.com/fenix-hub)) + Looking for more SDKs? - Help us by contributing a pull request to our [SDK Generator](https://github.com/appwrite/sdk-generator)! ## Contributing diff --git a/app/config/locale/translations/fa.json b/app/config/locale/translations/fa.json index 2ea78963af..346e3759bf 100644 --- a/app/config/locale/translations/fa.json +++ b/app/config/locale/translations/fa.json @@ -1,24 +1,24 @@ { - "settings.inspire": "\"هنر خردمند بودن، هنر دانستن چیزی است که باید از آن غافل شد.\"", + "settings.inspire": "\"هنر خردمند بودن این است که بدانید چه چیزی را نادیده بگیرید.\"", "settings.locale": "fa", "settings.direction": "rtl", "emails.sender": "تیم %s", "emails.verification.subject": "تأیید حساب", "emails.verification.hello": "سلام {{name}}", - "emails.verification.body": "برای تأیید حساب‌تان پیوند زیر را دنبال کنید.", - "emails.verification.footer": "اگر شما درخواست تأیید حساب نداده‌اید، می‌توانید این ایمیل را نادیده بگیرید.", + "emails.verification.body": "برای تأیید ایمیل‌تان پیوند زیر را دنبال کنید.", + "emails.verification.footer": "اگر شما درخواست تأیید حساب نداده‌اید، می‌توانید این پیام را نادیده بگیرید.", "emails.verification.thanks": "سپاس فراوان", "emails.verification.signature": "تیم {{name}}", "emails.magicSession.subject": "ورود به حساب کاربری", "emails.magicSession.hello": "سلام،", "emails.magicSession.body": "برای ورود به حساب‌تان پیوند زیر را دنبال کنید.", - "emails.magicSession.footer": "اگر شما درخواست ورود به حساب کاربری نداد‌ه‌اید، می‌توانید این ایمیل را نادیده بگیرید.", + "emails.magicSession.footer": "اگر شما درخواست ورود به حساب کاربری با استفاده از این ایمیل را نداد‌ه‌اید، می‌توانید این پیام را نادیده بگیرید.", "emails.magicSession.thanks": "سپاس فراوان", "emails.magicSession.signature": "تیم {{name}}", "emails.recovery.subject": "بازیابی گذرواژه", "emails.recovery.hello": "سلام {{name}}", "emails.recovery.body": "برای بازیابی گذرواژه‌تان پیوند زیر را دنبال کنید.", - "emails.recovery.footer": "اگر شما درخواست بازیابی گذرواژه نداده‌اید، می‌توانید این ایمیل را نادیده بگیرید.", + "emails.recovery.footer": "اگر شما درخواست بازیابی گذرواژه نداده‌اید، می‌توانید این پیام را نادیده بگیرید.", "emails.recovery.thanks": "سپاس فراوان", "emails.recovery.signature": "تیم {{name}}", "emails.invitation.subject": "دعوت به تیم %s در %s", diff --git a/app/config/locale/translations/ga.json b/app/config/locale/translations/ga.json index 9ff3f16bfa..d572fa01a8 100644 --- a/app/config/locale/translations/ga.json +++ b/app/config/locale/translations/ga.json @@ -28,205 +28,205 @@ "emails.invitation.thanks": "Go raibh maith agat", "emails.invitation.signature": "{{project}} foireann", "locale.country.unknown": "Neamhaithnid", - "countries.af": "Afghanistan", - "countries.ao": "Angola", - "countries.al": "Albania", - "countries.ad": "Andorra", - "countries.ae": "United Arab Emirates", - "countries.ar": "Argentina", - "countries.am": "Armenia", - "countries.ag": "Antigua and Barbuda", - "countries.au": "Australia", - "countries.at": "Austria", - "countries.az": "Azerbaijan", - "countries.bi": "Burundi", - "countries.be": "Belgium", - "countries.bj": "Benin", - "countries.bf": "Burkina Faso", - "countries.bd": "Bangladesh", - "countries.bg": "Bulgaria", - "countries.bh": "Bahrain", - "countries.bs": "Bahamas", - "countries.ba": "Bosnia and Herzegovina", - "countries.by": "Belarus", - "countries.bz": "Belize", - "countries.bo": "Bolivia", - "countries.br": "Brazil", - "countries.bb": "Barbados", - "countries.bn": "Brunei", - "countries.bt": "Bhutan", - "countries.bw": "Botswana", - "countries.cf": "Central African Republic", - "countries.ca": "Canada", - "countries.ch": "Switzerland", - "countries.cl": "Chile", - "countries.cn": "China", - "countries.ci": "Ivory Coast", - "countries.cm": "Cameroon", - "countries.cd": "DR Congo", - "countries.cg": "Republic of the Congo", - "countries.co": "Colombia", - "countries.km": "Comoros", + "countries.af": "An Afganastáin", + "countries.ao": "Angóla", + "countries.al": "Albáin", + "countries.ad": "Andóra", + "countries.ae": "Aontas na nÉimíríochtaí Arabacha", + "countries.ar": "Airgintín", + "countries.am": "Airméin", + "countries.ag": "Antigua agus Barbúda", + "countries.au": "Astráil", + "countries.at": "Ostair", + "countries.az": "Asarbaiseáin", + "countries.bi": "An Bhurúin", + "countries.be": "An Bheilg", + "countries.bj": "Beinin", + "countries.bf": "Buircíne Fasó", + "countries.bd": "An Bhanglaidéis", + "countries.bg": "An Bhulgáir", + "countries.bh": "Bairéin", + "countries.bs": "Na Bahámaí", + "countries.ba": "An Bhoisnia agus an Heirseagaivéin", + "countries.by": "An Bhealarúis", + "countries.bz": "An Bheilís", + "countries.bo": "An Bholaiv", + "countries.br": "An Bhrasaíl", + "countries.bb": "Barbadós", + "countries.bn": "Brúiné", + "countries.bt": "An Bhútáin", + "countries.bw": "An Bhotsuáin", + "countries.cf": "Poblacht na hAfraice Láir", + "countries.ca": "Ceanada", + "countries.ch": "An Eilvéis", + "countries.cl": "An tSile", + "countries.cn": "An tSín", + "countries.ci": "Poblacht Côte d’Ivoire", + "countries.cm": "Camarún", + "countries.cd": "Poblacht Dhaonlathach an Chongó", + "countries.cg": "Poblacht an Chongó", + "countries.co": "An Cholóim", + "countries.km": "Oileáin Chomóra", "countries.cv": "Cape Verde", - "countries.cr": "Costa Rica", - "countries.cu": "Cuba", - "countries.cy": "Cyprus", - "countries.cz": "Czechia", - "countries.de": "Germany", + "countries.cr": "Cósta Ríce", + "countries.cu": "Cúba", + "countries.cy": "An Chipir", + "countries.cz": "An tSeicia", + "countries.de": "An Ghearmáin", "countries.dj": "Djibouti", - "countries.dm": "Dominica", - "countries.dk": "Denmark", - "countries.do": "Dominican Republic", - "countries.dz": "Algeria", - "countries.ec": "Ecuador", - "countries.eg": "Egypt", - "countries.er": "Eritrea", - "countries.es": "Spain", - "countries.ee": "Estonia", - "countries.et": "Ethiopia", - "countries.fi": "Finland", - "countries.fj": "Fiji", - "countries.fr": "France", - "countries.fm": "Micronesia", - "countries.ga": "Gabon", - "countries.gb": "United Kingdom", - "countries.ge": "Georgia", - "countries.gh": "Ghana", - "countries.gn": "Guinea", - "countries.gm": "Gambia", - "countries.gw": "Guinea-Bissau", - "countries.gq": "Equatorial Guinea", - "countries.gr": "Greece", - "countries.gd": "Grenada", - "countries.gt": "Guatemala", - "countries.gy": "Guyana", - "countries.hn": "Honduras", - "countries.hr": "Croatia", - "countries.ht": "Haiti", - "countries.hu": "Hungary", - "countries.id": "Indonesia", + "countries.dm": "Doiminice", + "countries.dk": "An Danmhairg", + "countries.do": "An Phoblacht Dhoiminiceach", + "countries.dz": "An Ailgéir", + "countries.ec": "Eacuadór", + "countries.eg": "An Éigipt", + "countries.er": "An Eiritré", + "countries.es": "An Spáinn", + "countries.ee": "An Eastóin", + "countries.et": "An Aetóip", + "countries.fi": "An Fhionlainn", + "countries.fj": "Fidsí", + "countries.fr": "An Fhrainc", + "countries.fm": "An Mhicrinéis", + "countries.ga": "An Ghabúin", + "countries.gb": "An Ríocht Aontaithe", + "countries.ge": "An tSeoirsia", + "countries.gh": "Gána", + "countries.gn": "An Ghuine", + "countries.gm": "An Ghaimbia", + "countries.gw": "Guine Bissau", + "countries.gq": "An Ghuine Mheánchiorclach", + "countries.gr": "An Ghréig", + "countries.gd": "Greanáda", + "countries.gt": "Guatamala", + "countries.gy": "An Ghuáin", + "countries.hn": "Hondúras", + "countries.hr": "An Chróit", + "countries.ht": "Háítí", + "countries.hu": "An Ungáir", + "countries.id": "An Indinéis", "countries.in": "India", - "countries.ie": "Ireland", - "countries.ir": "Iran", - "countries.iq": "Iraq", - "countries.is": "Iceland", - "countries.il": "Israel", - "countries.it": "Italy", - "countries.jm": "Jamaica", - "countries.jo": "Jordan", - "countries.jp": "Japan", - "countries.kz": "Kazakhstan", - "countries.ke": "Kenya", - "countries.kg": "Kyrgyzstan", - "countries.kh": "Cambodia", - "countries.ki": "Kiribati", - "countries.kn": "Saint Kitts and Nevis", - "countries.kr": "South Korea", - "countries.kw": "Kuwait", + "countries.ie": "Éire", + "countries.ir": "An Iaráin", + "countries.iq": "An Iaráic", + "countries.is": "An Íoslainn", + "countries.il": "Iosrael", + "countries.it": "An Iodáil", + "countries.jm": "Iamáice", + "countries.jo": "An Iordáin", + "countries.jp": "An tSeapáin", + "countries.kz": "An Chasacstáin", + "countries.ke": "An Chéinia", + "countries.kg": "An Chirgeastáin", + "countries.kh": "An Chambóid", + "countries.ki": "Ciribeas", + "countries.kn": "San Críostóir-Nimheas", + "countries.kr": "An Chóiré Theas", + "countries.kw": "Cuáit", "countries.la": "Laos", - "countries.lb": "Lebanon", - "countries.lr": "Liberia", - "countries.ly": "Libya", + "countries.lb": "An Liobáin", + "countries.lr": "An Libéir", + "countries.ly": "An Libia", "countries.lc": "Saint Lucia", - "countries.li": "Liechtenstein", - "countries.lk": "Sri Lanka", - "countries.ls": "Lesotho", - "countries.lt": "Lithuania", - "countries.lu": "Luxembourg", - "countries.lv": "Latvia", - "countries.ma": "Morocco", - "countries.mc": "Monaco", - "countries.md": "Moldova", + "countries.li": "Lichtinstéin", + "countries.lk": "Srí Lanca", + "countries.ls": "Leosóta", + "countries.lt": "An Liotuáin", + "countries.lu": "Lucsamburg", + "countries.lv": "An Laitvia", + "countries.ma": "Maracó", + "countries.mc": "Monacó", + "countries.md": "An Mholdóiv", "countries.mg": "Madagascar", - "countries.mv": "Maldives", - "countries.mx": "Mexico", - "countries.mh": "Marshall Islands", - "countries.mk": "Macedonia", - "countries.ml": "Mali", - "countries.mt": "Malta", - "countries.mm": "Myanmar", - "countries.me": "Montenegro", - "countries.mn": "Mongolia", - "countries.mz": "Mozambique", - "countries.mr": "Mauritania", - "countries.mu": "Mauritius", - "countries.mw": "Malawi", - "countries.my": "Malaysia", - "countries.na": "Namibia", + "countries.mv": "Oileáin Mhaildíve", + "countries.mx": "Meicsiceo", + "countries.mh": "Oileáin Marshall", + "countries.mk": "An Mhacadóin", + "countries.ml": "Mailí", + "countries.mt": "Málta", + "countries.mm": "Maenmar", + "countries.me": "Montainéagró", + "countries.mn": "An Mhongóil", + "countries.mz": "Mósaimbíc", + "countries.mr": "An Mháratáin", + "countries.mu": "Oileán Mhuirís", + "countries.mw": "Malávach", + "countries.my": "An Mhalaeisia", + "countries.na": "An Namaib", "countries.ne": "Niger", - "countries.ng": "Nigeria", - "countries.ni": "Nicaragua", - "countries.nl": "Netherlands", - "countries.no": "Norway", - "countries.np": "Nepal", - "countries.nr": "Nauru", - "countries.nz": "New Zealand", - "countries.om": "Oman", - "countries.pk": "Pakistan", + "countries.ng": "An Nigéir", + "countries.ni": "Nicearagua", + "countries.nl": "An Ísiltír", + "countries.no": "An Iorua", + "countries.np": "Neipeal", + "countries.nr": "Nárú", + "countries.nz": "An Nua-Shéalainn", + "countries.om": "Óman", + "countries.pk": "An Phacastáin", "countries.pa": "Panama", - "countries.pe": "Peru", - "countries.ph": "Philippines", - "countries.pw": "Palau", - "countries.pg": "Papua New Guinea", - "countries.pl": "Poland", - "countries.kp": "North Korea", - "countries.pt": "Portugal", - "countries.py": "Paraguay", - "countries.qa": "Qatar", - "countries.ro": "Romania", - "countries.ru": "Russia", - "countries.rw": "Rwanda", - "countries.sa": "Saudi Arabia", - "countries.sd": "Sudan", - "countries.sn": "Senegal", - "countries.sg": "Singapore", - "countries.sb": "Solomon Islands", - "countries.sl": "Sierra Leone", - "countries.sv": "El Salvador", - "countries.sm": "San Marino", - "countries.so": "Somalia", - "countries.rs": "Serbia", - "countries.ss": "South Sudan", - "countries.st": "São Tomé and Príncipe", - "countries.sr": "Suriname", - "countries.sk": "Slovakia", - "countries.si": "Slovenia", - "countries.se": "Sweden", - "countries.sz": "Swaziland", - "countries.sc": "Seychelles", - "countries.sy": "Syria", - "countries.td": "Chad", - "countries.tg": "Togo", - "countries.th": "Thailand", - "countries.tj": "Tajikistan", - "countries.tm": "Turkmenistan", - "countries.tl": "Timor-Leste", + "countries.pe": "Peiriú", + "countries.ph": "Na hOileáin Fhilipíneacha", + "countries.pw": "Oileáin Palau", + "countries.pg": "Nua-Ghuine Phapua", + "countries.pl": "An Pholainn", + "countries.kp": "An Chóiré Thuaidh", + "countries.pt": "An Phortaingéil", + "countries.py": "Paragua", + "countries.qa": "Catar", + "countries.ro": "An Rómáin", + "countries.ru": "An Rúis", + "countries.rw": "Ruanda", + "countries.sa": "An Araib Shádach", + "countries.sd": "An tSúdáin", + "countries.sn": "An tSeineagáil", + "countries.sg": "Singeapór", + "countries.sb": "Oileáin Sholaimh", + "countries.sl": "Siarra Leon", + "countries.sv": "An tSalvadóir", + "countries.sm": "San Mairíne", + "countries.so": "An tSomáil", + "countries.rs": "An tSeirbia", + "countries.ss": "An tSúdáin Theas", + "countries.st": "São Tomé agus Príncipe", + "countries.sr": "Suranam", + "countries.sk": "An tSlóvaic", + "countries.si": "An tSlóivéin", + "countries.se": "An tSualainn", + "countries.sz": "An tSuasalainn", + "countries.sc": "Na Séiséil", + "countries.sy": "An tSiria", + "countries.td": "Sead", + "countries.tg": "Tóga", + "countries.th": "An Téalainn", + "countries.tj": "An Táidsíceastáin", + "countries.tm": "An Tuircméanastáin", + "countries.tl": "Tíomór Thoir", "countries.to": "Tonga", - "countries.tt": "Trinidad and Tobago", - "countries.tn": "Tunisia", - "countries.tr": "Turkey", - "countries.tv": "Tuvalu", - "countries.tz": "Tanzania", + "countries.tt": "Oileán na Tríonóide agus Tobága", + "countries.tn": "An Túinéis", + "countries.tr": "An Tuirc", + "countries.tv": "Túvalú", + "countries.tz": "An Tansáin", "countries.ug": "Uganda", - "countries.ua": "Ukraine", - "countries.uy": "Uruguay", - "countries.us": "United States", - "countries.uz": "Uzbekistan", - "countries.va": "Vatican City", - "countries.vc": "Saint Vincent and the Grenadines", - "countries.ve": "Venezuela", - "countries.vn": "Vietnam", - "countries.vu": "Vanuatu", - "countries.ws": "Samoa", - "countries.ye": "Yemen", - "countries.za": "South Africa", - "countries.zm": "Zambia", - "countries.zw": "Zimbabwe", - "continents.af": "Africa", - "continents.an": "Antarctica", - "continents.as": "Asia", - "continents.eu": "Europe", - "continents.na": "North America", - "continents.oc": "Oceania", - "continents.sa": "South America" + "countries.ua": "An Úcráin", + "countries.uy": "Uragua", + "countries.us": "Na Stáit Aontaithe", + "countries.uz": "An Úisbéiceastáin", + "countries.va": "Cathair na Vatacáine", + "countries.vc": "San Uinseann agus na Greanáidíní", + "countries.ve": "Veiniséala", + "countries.vn": "Vítneam", + "countries.vu": "Vanuatú", + "countries.ws": "Samó", + "countries.ye": "Éimin", + "countries.za": "An Afraic Theas", + "countries.zm": "An tSaimbia", + "countries.zw": "An tSiombáib", + "continents.af": "An Afraic", + "continents.an": "Antartaice", + "continents.as": "An Áise", + "continents.eu": "An Eoraip", + "continents.na": "Meiriceá Thuaidh", + "continents.oc": "An Aigéine", + "continents.sa": "Meiriceá Theas" } diff --git a/app/config/locale/translations/hi.json b/app/config/locale/translations/hi.json index a1ef9b7aa5..1fa7d0555a 100644 --- a/app/config/locale/translations/hi.json +++ b/app/config/locale/translations/hi.json @@ -1,30 +1,30 @@ { - "settings.inspire": "\"बुद्धिमान होने की कला यह जानने की कला है कि क्या अनदेखा करना चाहिए |\"", + "settings.inspire": "\"बुद्धिमान होने की कला यह जानने की कला है कि क्या अनदेखा किया जाए |\"", "settings.locale": "hi", "settings.direction": "ltr", "emails.sender": "%s टीम", - "emails.verification.subject": "खाता सत्यापन", + "emails.verification.subject": "अकाउंट वेरिफिकेशन ", "emails.verification.hello": "नमस्ते {{name}}", - "emails.verification.body": "इस लिंक के माध्यम से ईमेल सत्यापित कीजिये।", - "emails.verification.footer": "यदि आपने इस पते को सत्यापित करने के लिए नहीं कहा है, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", + "emails.verification.body": "इस लिंक के माध्यम से अपने ईमेल को सत्यापित कीजिये।", + "emails.verification.footer": "यदि आपने इस पते को सत्यापित नहीं करना चाहते है, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", "emails.verification.thanks": "धन्यवाद", "emails.verification.signature": "{{project}} टीम", "emails.magicSession.subject": "लॉग इन", "emails.magicSession.hello": "नमस्ते,", - "emails.magicSession.body": "इस लिंक के माध्यम से लॉग इन करें।", - "emails.magicSession.footer": "यदि आपने इस ईमेल का उपयोग करके लॉगिन करने के लिए नहीं कहा है, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", + "emails.magicSession.body": "इस लिंक के माध्यम से लॉग-इन करें।", + "emails.magicSession.footer": "यदि आप इस ईमेल द्वारा लॉगिन नहीं करना चाहते है, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", "emails.magicSession.thanks": "धन्यवाद", "emails.magicSession.signature": "{{project}} टीम", "emails.recovery.subject": "पासवर्ड रीसेट", "emails.recovery.hello": "नमस्ते {{name}}", "emails.recovery.body": "इस लिंक के माध्यम से अपना {{project}} पासवर्ड रीसेट करें।", - "emails.recovery.footer": "यदि आपने अपना पासवर्ड रीसेट करने के लिए नहीं कहा है, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", + "emails.recovery.footer": "यदि आप अपना पासवर्ड रिसेट नहीं करना चाहते है, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", "emails.recovery.thanks": "धन्यवाद", "emails.recovery.signature": "{{project}} टीम", - "emails.invitation.subject": "%s टीम को %s पर आमंत्रण", + "emails.invitation.subject": "%s टीम का यहाँ %s पर आमंत्रण", "emails.invitation.hello": "नमस्ते", - "emails.invitation.body": "यह मेल आपको इसलिए भेजा गया था क्योंकि {{owner}} आपको {{team}} टीम का सदस्य बनने के लिए आमंत्रित करना चाहते थे जो {{project}} से जुड़ा है।", - "emails.invitation.footer": "यदि यह आपके लिए आवश्यक नहीं है, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", + "emails.invitation.body": "यह मेल आपको इसलिए भेजा गया था क्योंकि {{owner}} आपको {{team}} टीम का सदस्य बनाना चाहते थे, जो {{project}} से जुड़ा हुआ है।", + "emails.invitation.footer": "यदि आप इसमे रूचि नहीं रखते, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", "emails.invitation.thanks": "धन्यवाद", "emails.invitation.signature": "{{project}} टीम", "locale.country.unknown": "अज्ञात", diff --git a/app/config/locale/translations/jv.json b/app/config/locale/translations/jv.json index a7c658c8b4..06990dfa9f 100644 --- a/app/config/locale/translations/jv.json +++ b/app/config/locale/translations/jv.json @@ -3,30 +3,30 @@ "settings.locale": "jv", "settings.direction": "ltr", "emails.sender": "Tim %s", - "emails.verification.subject": "", - "emails.verification.hello": "", - "emails.verification.body": "", - "emails.verification.footer": "", - "emails.verification.thanks": "", - "emails.verification.signature": "", - "emails.magicSession.subject": "", - "emails.magicSession.hello": "", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", - "emails.magicSession.thanks": "", - "emails.magicSession.signature": "", - "emails.recovery.subject": "", - "emails.recovery.hello": "", - "emails.recovery.body": "", - "emails.recovery.footer": "", - "emails.recovery.thanks": "", - "emails.recovery.signature": "", - "emails.invitation.subject": "", - "emails.invitation.hello": "", - "emails.invitation.body": "", - "emails.invitation.footer": "", - "emails.invitation.thanks": "", - "emails.invitation.signature": "", + "emails.verification.subject": "Verifikasi Akun", + "emails.verification.hello": "Hai {{name}}", + "emails.verification.body": "Klik link iki kanggo verifikasi alamat email sampeyan.", + "emails.verification.footer": "Yen sampeyan ora njaluk verifikasi alamat iki, sampeyan iso nglirwakake pesen iki.", + "emails.verification.thanks": "Matur nuwun", + "emails.verification.signature": "Tim {{project}}", + "emails.magicSession.subject": "Masuk", + "emails.magicSession.hello": "Hai,", + "emails.magicSession.body": "Klik link iki kanggo masuk.", + "emails.magicSession.footer": "Yen sampeyan ora njaluk masuk nggunakake alamat email iki, sampeyan iso nglirwakake pesen iki.", + "emails.magicSession.thanks": "Matur nuwun", + "emails.magicSession.signature": "Tim {{project}}", + "emails.recovery.subject": "Setel ulang sandi", + "emails.recovery.hello": "Halo {{name}}", + "emails.recovery.body": "Klik link iki kanggo setel ulang sandi {{project}}.", + "emails.recovery.footer": "Yen sampeyan ora njaluk setel ulang sandi, sampeyan iso nglirwakake pesen iki.", + "emails.recovery.thanks": "Matur nuwun", + "emails.recovery.signature": "Tim {{project}}", + "emails.invitation.subject": "Undangan ke Tim %s di %s", + "emails.invitation.hello": "Halo", + "emails.invitation.body": "Email iki dikirim menyang sampeyan amarga {{owner}} pengin ngajak sampeyan dadi anggota tim {{team}} di {{project}}.", + "emails.invitation.footer": "Yen sampeyan ora tertarik, sampeyan iso nglirwakake pesen iki.", + "emails.invitation.thanks": "Matur nuwun", + "emails.invitation.signature": "Tim {{project}}", "locale.country.unknown": "Ora dingerteni", "countries.af": "Afghanistan", "countries.ao": "Angola", diff --git a/app/config/locale/translations/mr.json b/app/config/locale/translations/mr.json index 45a08f5f7e..1b3adfe061 100644 --- a/app/config/locale/translations/mr.json +++ b/app/config/locale/translations/mr.json @@ -3,30 +3,30 @@ "settings.locale": "mr", "settings.direction": "ltr", "emails.sender": "%s टीम", - "emails.verification.subject": "", - "emails.verification.hello": "", - "emails.verification.body": "", - "emails.verification.footer": "", - "emails.verification.thanks": "", - "emails.verification.signature": "", - "emails.magicSession.subject": "", - "emails.magicSession.hello": "", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", - "emails.magicSession.thanks": "", - "emails.magicSession.signature": "", - "emails.recovery.subject": "", - "emails.recovery.hello": "", - "emails.recovery.body": "", - "emails.recovery.footer": "", - "emails.recovery.thanks": "", - "emails.recovery.signature": "", - "emails.invitation.subject": "", - "emails.invitation.hello": "", - "emails.invitation.body": "", - "emails.invitation.footer": "", - "emails.invitation.thanks": "", - "emails.invitation.signature": "", + "emails.verification.subject": "खाते सत्यापन", + "emails.verification.hello": "नमस्कार {{name}}", + "emails.verification.body": "आपला ईमेल पत्ता सत्यापित करण्यासाठी या दुव्याचे अनुसरण करा.", + "emails.verification.footer": "आपण या पत्त्याची पडताळणी करण्यास सांगितले नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.", + "emails.verification.thanks": "धन्यवाद", + "emails.verification.signature": "{{project}} संघ", + "emails.magicSession.subject": "लॉगिन करा", + "emails.magicSession.hello": "नमस्कार ,", + "emails.magicSession.body": "लॉगिन करण्यासाठी या लिंकचे अनुसरण करा.", + "emails.magicSession.footer": "आपण या ईमेलचा वापर करून लॉगिन करण्यास सांगितले नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.", + "emails.magicSession.thanks": "धन्यवाद", + "emails.magicSession.signature": "{{project}} संघ", + "emails.recovery.subject": "पासवर्ड रीसेट", + "emails.recovery.hello": "नमस्कार {{name}}", + "emails.recovery.body": "आपला {{project}}चे पासवर्ड रीसेट करण्यासाठी या लिंकचे अनुसरण करा", + "emails.recovery.footer": "आपण आपला पासवर्ड रीसेट करण्यास सांगितले नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.", + "emails.recovery.thanks": "धन्यवाद", + "emails.recovery.signature": "{{project}} संघ", + "emails.invitation.subject": "%s संघ %s येथे सामील होण्यासाठी आमंत्रण", + "emails.invitation.hello": "नमस्कार", + "emails.invitation.body": "हा मेल तुम्हाला पाठवला होता कारण {{owner}} तुम्हाला {{project}} येथे {{team}} टीमचे सदस्य होण्यासाठी आमंत्रित करू इच्छित होते.", + "emails.invitation.footer": "आपल्याला स्वारस्य नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.", + "emails.invitation.thanks": "धन्यवाद", + "emails.invitation.signature": "{{project}} संघ", "locale.country.unknown": "अज्ञात", "countries.af": "अफगानिस्तान", "countries.ao": "अंगोला", diff --git a/app/config/platforms.php b/app/config/platforms.php index 16f6cf42ba..f97d598086 100644 --- a/app/config/platforms.php +++ b/app/config/platforms.php @@ -15,7 +15,7 @@ return [ [ 'key' => 'web', 'name' => 'Web', - 'version' => '4.0.4', + 'version' => '5.0.0', 'url' => 'https://github.com/appwrite/sdk-for-web', 'package' => 'https://www.npmjs.com/package/appwrite', 'enabled' => true, @@ -81,7 +81,7 @@ return [ [ 'key' => 'apple', 'name' => 'Apple', - 'version' => '0.1.0', + 'version' => '0.1.1', 'url' => 'https://github.com/appwrite/sdk-for-apple', 'package' => 'https://github.com/appwrite/sdk-for-apple', 'enabled' => true, @@ -190,7 +190,7 @@ return [ [ 'key' => 'nodejs', 'name' => 'Node.js', - 'version' => '2.5.1', + 'version' => '3.0.0', 'url' => 'https://github.com/appwrite/sdk-for-node', 'package' => 'https://www.npmjs.com/package/node-appwrite', 'enabled' => true, @@ -208,11 +208,11 @@ return [ [ 'key' => 'deno', 'name' => 'Deno', - 'version' => '0.4.1', + 'version' => '1.0.0', 'url' => 'https://github.com/appwrite/sdk-for-deno', 'package' => 'https://deno.land/x/appwrite', 'enabled' => true, - 'beta' => true, + 'beta' => false, 'dev' => false, 'hidden' => false, 'family' => APP_PLATFORM_SERVER, diff --git a/app/controllers/api/health.php b/app/controllers/api/health.php index 5a1718c9cc..0b8e91b3b5 100644 --- a/app/controllers/api/health.php +++ b/app/controllers/api/health.php @@ -46,9 +46,20 @@ App::get('/v1/health/db') ->action(function ($response, $utopia) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\App $utopia */ - $utopia->getResource('db'); + try { + $db = $utopia->getResource('db'); /* @var $db PDO */ - $response->json(['status' => 'OK']); + // Run a small test to check the connection + $statement = $db->prepare("SELECT 1;"); + + $statement->closeCursor(); + + $statement->execute(); + } catch (Exception $_e) { + throw new Exception('Database is not available', 500); + } + + return $response->json(['status' => 'OK']); }); App::get('/v1/health/cache') @@ -64,9 +75,14 @@ App::get('/v1/health/cache') ->action(function ($response, $utopia) { /** @var Appwrite\Utopia\Response $response */ /** @var Utopia\App $utopia */ - $utopia->getResource('cache'); + /** @var Redis */ + $redis = $utopia->getResource('cache'); - $response->json(['status' => 'OK']); + if ($redis->ping(true)) { + return $response->json(['status' => 'OK']); + } else { + throw new Exception('Cache is not available', 500); + } }); App::get('/v1/health/time') diff --git a/app/controllers/mock.php b/app/controllers/mock.php index d4076547e0..ffffff1ad6 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -234,29 +234,74 @@ App::post('/v1/mock/tests/general/upload') ->param('z', null, new ArrayList(new Text(256)), 'Sample array param') ->param('file', [], new File(), 'Sample file param', false) ->inject('request') - ->action(function ($x, $y, $z, $file, $request) { + ->inject('response') + ->action(function ($x, $y, $z, $file, $request, $response) { /** @var Utopia\Swoole\Request $request */ + /** @var Utopia\Swoole\Response $response */ $file = $request->getFiles('file'); - $file['tmp_name'] = (\is_array($file['tmp_name'])) ? $file['tmp_name'] : [$file['tmp_name']]; - $file['name'] = (\is_array($file['name'])) ? $file['name'] : [$file['name']]; - $file['size'] = (\is_array($file['size'])) ? $file['size'] : [$file['size']]; + + $contentRange = $request->getHeader('content-range'); + if(!empty($contentRange)) { + $start = $request->getContentRangeStart(); + $end = $request->getContentRangeEnd(); + $size = $request->getContentRangeSize(); + $id = $request->getHeader('x-appwrite-id', ''); + $file['size'] = (\is_array($file['size'])) ? $file['size'] : [$file['size']]; - foreach ($file['name'] as $i => $name) { - if ($name !== 'file.png') { - throw new Exception('Wrong file name', 400); + if(is_null($start) || is_null($end) || is_null($size)) { + throw new Exception('Invalid content-range header', 400); } - } - foreach ($file['size'] as $i => $size) { - if ($size !== 38756) { - throw new Exception('Wrong file size', 400); + if($start > $end || $end > $size) { + throw new Exception('Invalid content-range header', 400); } - } - foreach ($file['tmp_name'] as $i => $tmpName) { - if (\md5(\file_get_contents($tmpName)) !== 'd80e7e6999a3eb2ae0d631a96fe135a4') { - throw new Exception('Wrong file uploaded', 400); + if($start === 0 && !empty($id)) { + throw new Exception('First chunked request cannot have id header', 400); + } + + if($start !== 0 && $id !== 'newfileid') { + throw new Exception('All chunked request must have id header (except first)', 400); + } + + if($end !== $size && $end-$start+1 !== 5*1024*1024) { + throw new Exception('Chunk size must be 5MB (except last chunk)', 400); + } + + foreach ($file['size'] as $i => $sz) { + if ($end !== $size && $sz !== 5*1024*1024) { + throw new Exception('Wrong chunk size', 400); + } + + if($sz > 5*1024*1024) { + throw new Exception('Chunk size must be 5MB or less', 400); + } + } + if($end !== $size) { + $response->json(['$id'=> 'newfileid']); + } + } else { + $file['tmp_name'] = (\is_array($file['tmp_name'])) ? $file['tmp_name'] : [$file['tmp_name']]; + $file['name'] = (\is_array($file['name'])) ? $file['name'] : [$file['name']]; + $file['size'] = (\is_array($file['size'])) ? $file['size'] : [$file['size']]; + + foreach ($file['name'] as $i => $name) { + if ($name !== 'file.png') { + throw new Exception('Wrong file name', 400); + } + } + + foreach ($file['size'] as $i => $size) { + if ($size !== 38756) { + throw new Exception('Wrong file size', 400); + } + } + + foreach ($file['tmp_name'] as $i => $tmpName) { + if (\md5(\file_get_contents($tmpName)) !== 'd80e7e6999a3eb2ae0d631a96fe135a4') { + throw new Exception('Wrong file uploaded', 400); + } } } }); diff --git a/composer.json b/composer.json index 304cc03264..40542d8e6e 100644 --- a/composer.json +++ b/composer.json @@ -64,7 +64,7 @@ "slickdeals/statsd": "3.1.0" }, "require-dev": { - "appwrite/sdk-generator": "dev-feat-swift-templates", + "appwrite/sdk-generator": "0.16.2", "phpunit/phpunit": "9.5.6", "swoole/ide-helper": "4.6.7", "textalk/websocket": "1.5.2", diff --git a/composer.lock b/composer.lock index 45d1525e8f..bd4240a995 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "6658bcb6a570300242ac1d227052f1bf", + "content-hash": "a3aad9d7aba75e837b4c6e242c7a91a3", "packages": [ { "name": "adhocore/jwt", @@ -115,16 +115,16 @@ }, { "name": "appwrite/php-runtimes", - "version": "0.6.0", + "version": "0.6.1", "source": { "type": "git", "url": "https://github.com/appwrite/php-runtimes.git", - "reference": "b4ca9786e6012c99db30baa752b55d935294ac5c" + "reference": "a42434de2fbd60818244c1a9b2ac0429ad0ef9ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/php-runtimes/zipball/b4ca9786e6012c99db30baa752b55d935294ac5c", - "reference": "b4ca9786e6012c99db30baa752b55d935294ac5c", + "url": "https://api.github.com/repos/appwrite/php-runtimes/zipball/a42434de2fbd60818244c1a9b2ac0429ad0ef9ee", + "reference": "a42434de2fbd60818244c1a9b2ac0429ad0ef9ee", "shasum": "" }, "require": { @@ -164,9 +164,9 @@ ], "support": { "issues": "https://github.com/appwrite/php-runtimes/issues", - "source": "https://github.com/appwrite/php-runtimes/tree/0.6.0" + "source": "https://github.com/appwrite/php-runtimes/tree/0.6.1" }, - "time": "2021-10-06T13:26:31+00:00" + "time": "2021-10-21T11:32:25+00:00" }, { "name": "chillerlan/php-qrcode", @@ -416,24 +416,25 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.3.0", + "version": "7.4.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7008573787b430c1c1f650e3722d9bba59967628" + "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", - "reference": "7008573787b430c1c1f650e3722d9bba59967628", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/868b3571a039f0ebc11ac8f344f4080babe2cb94", + "reference": "868b3571a039f0ebc11ac8f344f4080babe2cb94", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7 || ^2.0", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0" + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2" }, "provide": { "psr/http-client-implementation": "1.0" @@ -443,7 +444,7 @@ "ext-curl": "*", "php-http/client-integration-tests": "^3.0", "phpunit/phpunit": "^8.5.5 || ^9.3.5", - "psr/log": "^1.1" + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { "ext-curl": "Required for CURL handler support", @@ -453,7 +454,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.3-dev" + "dev-master": "7.4-dev" } }, "autoload": { @@ -469,19 +470,43 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, { "name": "Márk Sági-Kazár", "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", @@ -495,7 +520,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.3.0" + "source": "https://github.com/guzzle/guzzle/tree/7.4.0" }, "funding": [ { @@ -507,28 +532,24 @@ "type": "github" }, { - "url": "https://github.com/alexeyshockov", - "type": "github" - }, - { - "url": "https://github.com/gmponos", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" } ], - "time": "2021-03-23T11:33:13+00:00" + "time": "2021-10-18T09:52:00+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0" + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/136a635e2b4a49b9d79e9c8fee267ffb257fdba0", - "reference": "136a635e2b4a49b9d79e9c8fee267ffb257fdba0", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", "shasum": "" }, "require": { @@ -583,7 +604,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.0" + "source": "https://github.com/guzzle/promises/tree/1.5.1" }, "funding": [ { @@ -599,7 +620,7 @@ "type": "tidelift" } ], - "time": "2021-10-07T13:05:22+00:00" + "time": "2021-10-22T20:56:57+00:00" }, { "name": "guzzlehttp/psr7", @@ -1372,6 +1393,73 @@ }, "time": "2021-06-04T20:33:46+00:00" }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-03-23T23:28:01+00:00" + }, { "name": "symfony/polyfill-ctype", "version": "v1.23.0", @@ -1871,20 +1959,19 @@ }, { "name": "utopia-php/image", - "version": "0.5.2", + "version": "0.5.3", "source": { "type": "git", "url": "https://github.com/utopia-php/image.git", - "reference": "049446fea7cb53db8a431455ec382e30e6d1482a" + "reference": "4a8429b62dcf56562b038d6712375f75166f0c02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/image/zipball/049446fea7cb53db8a431455ec382e30e6d1482a", - "reference": "049446fea7cb53db8a431455ec382e30e6d1482a", + "url": "https://api.github.com/repos/utopia-php/image/zipball/4a8429b62dcf56562b038d6712375f75166f0c02", + "reference": "4a8429b62dcf56562b038d6712375f75166f0c02", "shasum": "" }, "require": { - "chillerlan/php-qrcode": "4.3.1", "ext-imagick": "*", "php": ">=7.4" }, @@ -1918,9 +2005,9 @@ ], "support": { "issues": "https://github.com/utopia-php/image/issues", - "source": "https://github.com/utopia-php/image/tree/0.5.2" + "source": "https://github.com/utopia-php/image/tree/0.5.3" }, - "time": "2021-10-18T06:41:05+00:00" + "time": "2021-11-02T05:47:16+00:00" }, { "name": "utopia-php/locale", @@ -2582,16 +2669,16 @@ }, { "name": "appwrite/sdk-generator", - "version": "dev-feat-swift-templates", + "version": "0.16.2", "source": { "type": "git", "url": "https://github.com/appwrite/sdk-generator.git", - "reference": "0fe34f984cded746a13b4c5dacb6c008f72d6897" + "reference": "e3a20c96a745a9c4aa048fd344650fcfbf41cf6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/0fe34f984cded746a13b4c5dacb6c008f72d6897", - "reference": "0fe34f984cded746a13b4c5dacb6c008f72d6897", + "url": "https://api.github.com/repos/appwrite/sdk-generator/zipball/e3a20c96a745a9c4aa048fd344650fcfbf41cf6f", + "reference": "e3a20c96a745a9c4aa048fd344650fcfbf41cf6f", "shasum": "" }, "require": { @@ -2625,9 +2712,9 @@ "description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms", "support": { "issues": "https://github.com/appwrite/sdk-generator/issues", - "source": "https://github.com/appwrite/sdk-generator/tree/feat-swift-templates" + "source": "https://github.com/appwrite/sdk-generator/tree/0.16.2" }, - "time": "2021-10-18T08:23:10+00:00" + "time": "2021-11-12T11:09:38+00:00" }, { "name": "composer/package-versions-deprecated", @@ -2704,16 +2791,16 @@ }, { "name": "composer/semver", - "version": "3.2.5", + "version": "3.2.6", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" + "reference": "83e511e247de329283478496f7a1e114c9517506" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", - "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", + "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", + "reference": "83e511e247de329283478496f7a1e114c9517506", "shasum": "" }, "require": { @@ -2765,7 +2852,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.5" + "source": "https://github.com/composer/semver/tree/3.2.6" }, "funding": [ { @@ -2781,7 +2868,7 @@ "type": "tidelift" } ], - "time": "2021-05-24T12:41:47+00:00" + "time": "2021-10-25T11:34:17+00:00" }, { "name": "composer/xdebug-handler", @@ -3296,16 +3383,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.13.0", + "version": "v4.13.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "50953a2691a922aa1769461637869a0a2faa3f53" + "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/50953a2691a922aa1769461637869a0a2faa3f53", - "reference": "50953a2691a922aa1769461637869a0a2faa3f53", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd", + "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd", "shasum": "" }, "require": { @@ -3346,9 +3433,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1" }, - "time": "2021-09-20T12:20:58+00:00" + "time": "2021-11-03T20:52:16+00:00" }, { "name": "openlss/lib-array2xml", @@ -3569,16 +3656,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { @@ -3589,7 +3676,8 @@ "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -3619,9 +3707,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -3742,23 +3830,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.7", + "version": "9.2.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218" + "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d4c798ed8d51506800b441f7a13ecb0f76f12218", - "reference": "d4c798ed8d51506800b441f7a13ecb0f76f12218", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cf04e88a2e3c56fc1a65488afd493325b4c1bc3e", + "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.12.0", + "nikic/php-parser": "^4.13.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -3807,7 +3895,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.8" }, "funding": [ { @@ -3815,7 +3903,7 @@ "type": "github" } ], - "time": "2021-09-17T05:39:03+00:00" + "time": "2021-10-30T08:01:38+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4163,20 +4251,20 @@ }, { "name": "psr/container", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", "autoload": { @@ -4205,9 +4293,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "sebastian/cli-parser", @@ -4638,16 +4726,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", "shasum": "" }, "require": { @@ -4696,14 +4784,14 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" }, "funding": [ { @@ -4711,7 +4799,7 @@ "type": "github" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2021-11-11T14:18:36+00:00" }, { "name": "sebastian/global-state", @@ -5062,7 +5150,6 @@ "type": "github" } ], - "abandoned": true, "time": "2020-09-28T06:45:17+00:00" }, { @@ -5228,16 +5315,16 @@ }, { "name": "symfony/console", - "version": "v5.3.7", + "version": "v5.3.10", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" + "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", - "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", + "url": "https://api.github.com/repos/symfony/console/zipball/d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3", + "reference": "d4e409d9fbcfbf71af0e5a940abb7b0b4bad0bd3", "shasum": "" }, "require": { @@ -5307,7 +5394,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.7" + "source": "https://github.com/symfony/console/tree/v5.3.10" }, "funding": [ { @@ -5323,74 +5410,7 @@ "type": "tidelift" } ], - "time": "2021-08-25T20:02:16+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2021-10-26T09:30:15+00:00" }, { "name": "symfony/polyfill-intl-grapheme", @@ -5880,16 +5900,16 @@ }, { "name": "symfony/string", - "version": "v5.3.7", + "version": "v5.3.10", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" + "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", - "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", + "url": "https://api.github.com/repos/symfony/string/zipball/d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", + "reference": "d70c35bb20bbca71fc4ab7921e3c6bda1a82a60c", "shasum": "" }, "require": { @@ -5943,7 +5963,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.7" + "source": "https://github.com/symfony/string/tree/v5.3.10" }, "funding": [ { @@ -5959,7 +5979,7 @@ "type": "tidelift" } ], - "time": "2021-08-26T08:00:08+00:00" + "time": "2021-10-27T18:21:46+00:00" }, { "name": "textalk/websocket", @@ -6292,14 +6312,13 @@ "issues": "https://github.com/webmozart/path-util/issues", "source": "https://github.com/webmozart/path-util/tree/2.3.0" }, + "abandoned": "symfony/filesystem", "time": "2015-12-17T08:42:14+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "appwrite/sdk-generator": 20 - }, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { @@ -6321,5 +6340,5 @@ "platform-overrides": { "php": "8.0" }, - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/docker-compose.yml b/docker-compose.yml index 08a1b9b3e9..39d4bf89bb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -463,7 +463,7 @@ services: # - SMARTHOST_PORT=587 redis: - image: redis:6.0-alpine + image: redis:6.2-alpine container_name: appwrite-redis networks: - appwrite @@ -479,7 +479,7 @@ services: # - appwrite-uploads:/storage/uploads influxdb: - image: appwrite/influxdb:1.0.0 + image: appwrite/influxdb:1.4.0 container_name: appwrite-influxdb networks: - appwrite @@ -487,7 +487,7 @@ services: - appwrite-influxdb:/var/lib/influxdb:rw telegraf: - image: appwrite/telegraf:1.2.0 + image: appwrite/telegraf:1.3.0 container_name: appwrite-telegraf networks: - appwrite diff --git a/docs/sdks/deno/GETTING_STARTED.md b/docs/sdks/deno/GETTING_STARTED.md index 5fae9f634b..65930a3e07 100644 --- a/docs/sdks/deno/GETTING_STARTED.md +++ b/docs/sdks/deno/GETTING_STARTED.md @@ -12,7 +12,6 @@ client .setKey('919c2d18fb5d4...a2ae413da83346ad2') // Your secret API key .setSelfSigned() // Use only on dev mode with a self-signed SSL cert ; - ``` ### Make your first request @@ -22,13 +21,8 @@ Once your SDK object is set, create any of the Appwrite service objects and choo ```typescript let users = new sdk.Users(client); -let promise = users.create('email@example.com', 'password'); - -promise.then(function (response) { - console.log(response); -}, function (error) { - console.log(error); -}); +let response = await users.create('email@example.com', 'password'); +console.log(response); ``` ### Full Example @@ -45,13 +39,8 @@ client .setSelfSigned() // Use only on dev mode with a self-signed SSL cert ; -let promise = users.create('email@example.com', 'password'); - -promise.then(function (response) { - console.log(response); -}, function (error) { - console.log(error); -}); +let response = await users.create('email@example.com', 'password'); +console.log(response); ``` ### Error Handling @@ -61,7 +50,7 @@ The Appwrite Deno SDK raises `AppwriteException` object with `message`, `code` a let users = new sdk.Users(client); try { - let res = await users.create('email@example.com', 'password'); + let response = await users.create('email@example.com', 'password'); } catch(e) { console.log(e.message); } diff --git a/docs/sdks/flutter/GETTING_STARTED.md b/docs/sdks/flutter/GETTING_STARTED.md index 28899ff18d..8ed1e19923 100644 --- a/docs/sdks/flutter/GETTING_STARTED.md +++ b/docs/sdks/flutter/GETTING_STARTED.md @@ -58,14 +58,16 @@ For **Windows** add your app name and package name, Your package n ```dart import 'package:appwrite/appwrite.dart'; -Client client = Client(); +void main() { + Client client = Client(); -client - .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint - .setProject('5e8cf4f46b5e8') // Your project ID - .setSelfSigned() // Use only on dev mode with a self-signed SSL cert -; + client + .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint + .setProject('5e8cf4f46b5e8') // Your project ID + .setSelfSigned() // Use only on dev mode with a self-signed SSL cert + ; +} ``` Before starting to send any API calls to your new Appwrite instance, make sure your Android or iOS emulators has network access to the Appwrite server hostname or IP address. @@ -91,25 +93,28 @@ Response user = await account ```dart import 'package:appwrite/appwrite.dart'; -Client client = Client(); + +void main() { + Client client = Client(); -client - .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint - .setProject('5e8cf4f46b5e8') // Your project ID - .setSelfSigned() // Use only on dev mode with a self-signed SSL cert - ; + client + .setEndpoint('https://localhost/v1') // Your Appwrite Endpoint + .setProject('5e8cf4f46b5e8') // Your project ID + .setSelfSigned() // Use only on dev mode with a self-signed SSL cert + ; -// Register User -Account account = Account(client); + // Register User + Account account = Account(client); -Response user = await account - .create( - email: 'me@appwrite.io', - password: 'password', - name: 'My Name' - ); + Response user = await account + .create( + email: 'me@appwrite.io', + password: 'password', + name: 'My Name' + ); +} ``` ### Error Handling diff --git a/public/images/logo.png b/public/images/logo.png index 3b7ec29c62..1f2cf818cf 100644 Binary files a/public/images/logo.png and b/public/images/logo.png differ diff --git a/public/styles/themes.less b/public/styles/themes.less index 9361037de1..868cc02243 100644 --- a/public/styles/themes.less +++ b/public/styles/themes.less @@ -5,6 +5,7 @@ --config-width-large: 700px; --config-width-medium: 550px; --config-width-small: 320px; + --config-color-primary: #f02e65; --config-color-link: #1e849e; --config-color-background: #eceff1; --config-color-background-dark: #dfe2e4; @@ -92,6 +93,7 @@ --config-console-nav-switch-arrow: url("data:image/svg+xml;utf8,"); .theme-dark { + --config-color-primary: #f02e65; --config-color-background: #061F2F; --config-color-background-dark: #262d50; --config-color-background-fade: #1c223a; diff --git a/src/Appwrite/Extend/PDO.php b/src/Appwrite/Extend/PDO.php index 72f9f37ac3..6d54bcf3f0 100644 --- a/src/Appwrite/Extend/PDO.php +++ b/src/Appwrite/Extend/PDO.php @@ -49,7 +49,7 @@ class PDO extends PDONative return $this->pdo->setAttribute($attribute, $value); } - public function prepare($statement, $driver_options = NULL) + public function prepare($statement, $driver_options = null) { return new PDOStatement($this, $this->pdo->prepare($statement, [])); } @@ -71,4 +71,4 @@ class PDO extends PDONative return $this->pdo; } -} \ No newline at end of file +} diff --git a/src/Appwrite/Extend/PDOStatement.php b/src/Appwrite/Extend/PDOStatement.php index c1a60f6a3a..3dc7a4aa1d 100644 --- a/src/Appwrite/Extend/PDOStatement.php +++ b/src/Appwrite/Extend/PDOStatement.php @@ -100,10 +100,10 @@ class PDOStatement extends PDOStatementNative /** * Fetch All - * + * * @param int $fetch_style * @param mixed $fetch_args - * + * * @return array|false */ public function fetchAll(int $fetch_style = PDO::FETCH_BOTH, mixed ...$fetch_args) @@ -112,4 +112,4 @@ class PDOStatement extends PDOStatementNative return $result; } -} \ No newline at end of file +} diff --git a/src/Appwrite/OpenSSL/OpenSSL.php b/src/Appwrite/OpenSSL/OpenSSL.php index aa641ec839..1965a3c858 100644 --- a/src/Appwrite/OpenSSL/OpenSSL.php +++ b/src/Appwrite/OpenSSL/OpenSSL.php @@ -4,7 +4,7 @@ namespace Appwrite\OpenSSL; class OpenSSL { - const CIPHER_AES_128_GCM = 'aes-128-gcm'; + public const CIPHER_AES_128_GCM = 'aes-128-gcm'; /** * @param $data diff --git a/src/Appwrite/Utopia/Response.php b/src/Appwrite/Utopia/Response.php index 6a9f62cc4c..4f561de342 100644 --- a/src/Appwrite/Utopia/Response.php +++ b/src/Appwrite/Utopia/Response.php @@ -22,6 +22,7 @@ use Appwrite\Utopia\Response\Model\ErrorDev; use Appwrite\Utopia\Response\Model\Execution; use Appwrite\Utopia\Response\Model\File; use Appwrite\Utopia\Response\Model\Func; +use Appwrite\Utopia\Response\Model\FuncPermissions; use Appwrite\Utopia\Response\Model\JWT; use Appwrite\Utopia\Response\Model\Key; use Appwrite\Utopia\Response\Model\Language; @@ -106,6 +107,7 @@ class Response extends SwooleResponse const MODEL_TAG_LIST = 'tagList'; const MODEL_EXECUTION = 'execution'; const MODEL_EXECUTION_LIST = 'executionList'; + const MODEL_FUNC_PERMISSIONS = 'funcPermissions'; // Project const MODEL_PROJECT = 'project'; @@ -186,6 +188,7 @@ class Response extends SwooleResponse ->setModel(new Team()) ->setModel(new Membership()) ->setModel(new Func()) + ->setModel(new FuncPermissions()) ->setModel(new Tag()) ->setModel(new Execution()) ->setModel(new Project()) diff --git a/src/Appwrite/Utopia/Response/Model/Func.php b/src/Appwrite/Utopia/Response/Model/Func.php index cb869a6b5f..1ea91757c3 100644 --- a/src/Appwrite/Utopia/Response/Model/Func.php +++ b/src/Appwrite/Utopia/Response/Model/Func.php @@ -17,7 +17,7 @@ class Func extends Model 'example' => '5e5ea5c16897e', ]) ->addRule('$permissions', [ - 'type' => Response::MODEL_PERMISSIONS, + 'type' => Response::MODEL_FUNC_PERMISSIONS, 'description' => 'Function permissions.', 'default' => new \stdClass, 'example' => new \stdClass, diff --git a/src/Appwrite/Utopia/Response/Model/FuncPermissions.php b/src/Appwrite/Utopia/Response/Model/FuncPermissions.php new file mode 100644 index 0000000000..22ee62b759 --- /dev/null +++ b/src/Appwrite/Utopia/Response/Model/FuncPermissions.php @@ -0,0 +1,42 @@ +addRule('execute', [ + 'type' => self::TYPE_STRING, + 'description' => 'Execution permissions.', + 'default' => [], + 'example' => 'user:5e5ea5c16897e', + 'array' => true, + ]) + ; + } + + /** + * Get Name + * + * @return string + */ + public function getName():string + { + return 'FuncPermissions'; + } + + /** + * Get Collection + * + * @return string + */ + public function getType():string + { + return Response::MODEL_FUNC_PERMISSIONS; + } +}