mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Merge branch '1.8.x' into ser-375-update-email-verification-with-branded-design
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
"settings.locale": "en",
|
||||
"settings.direction": "ltr",
|
||||
"emails.sender": "{{project}} Team",
|
||||
"emails.verification.subject": "Account Verification",
|
||||
"emails.verification.subject": "Account Verification for {{project}}",
|
||||
"emails.verification.preview": "Verify your email to activate your {{project}} account.",
|
||||
"emails.verification.heading": "Verify your email to start using {{project}}",
|
||||
"emails.verification.hello": "Hello {{user}},",
|
||||
@@ -49,7 +49,7 @@
|
||||
"emails.mfaChallenge.clientInfo": "This verification code was requested using {{b}}{{agentClient}}{{/b}} on {{b}}{{agentDevice}}{{/b}} {{b}}{{agentOs}}{{/b}}. If you didn't request the verification code, you can safely ignore this email.",
|
||||
"emails.mfaChallenge.thanks": "Thanks,",
|
||||
"emails.mfaChallenge.signature": "{{project}} team",
|
||||
"emails.recovery.subject": "Password Reset",
|
||||
"emails.recovery.subject": "Password Reset for {{project}}",
|
||||
"emails.recovery.preview": "Reset your {{project}} password using the link.",
|
||||
"emails.recovery.hello": "Hello {{user}},",
|
||||
"emails.recovery.body": "Follow this link to reset your {{b}}{{project}}{{/b}} password.",
|
||||
|
||||
+15
-15
@@ -11,7 +11,7 @@ return [
|
||||
[
|
||||
'key' => 'web',
|
||||
'name' => 'Web',
|
||||
'version' => '19.0.0',
|
||||
'version' => '21.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-web',
|
||||
'package' => 'https://www.npmjs.com/package/appwrite',
|
||||
'enabled' => true,
|
||||
@@ -60,7 +60,7 @@ return [
|
||||
[
|
||||
'key' => 'flutter',
|
||||
'name' => 'Flutter',
|
||||
'version' => '18.0.0',
|
||||
'version' => '20.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-flutter',
|
||||
'package' => 'https://pub.dev/packages/appwrite',
|
||||
'enabled' => true,
|
||||
@@ -79,7 +79,7 @@ return [
|
||||
[
|
||||
'key' => 'apple',
|
||||
'name' => 'Apple',
|
||||
'version' => '11.0.0',
|
||||
'version' => '13.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-apple',
|
||||
'package' => 'https://github.com/appwrite/sdk-for-apple',
|
||||
'enabled' => true,
|
||||
@@ -116,7 +116,7 @@ return [
|
||||
[
|
||||
'key' => 'android',
|
||||
'name' => 'Android',
|
||||
'version' => '9.0.0',
|
||||
'version' => '11.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-android',
|
||||
'package' => 'https://search.maven.org/artifact/io.appwrite/sdk-for-android',
|
||||
'enabled' => true,
|
||||
@@ -139,7 +139,7 @@ return [
|
||||
[
|
||||
'key' => 'react-native',
|
||||
'name' => 'React Native',
|
||||
'version' => '0.12.0',
|
||||
'version' => '0.15.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-react-native',
|
||||
'package' => 'https://npmjs.com/package/react-native-appwrite',
|
||||
'enabled' => true,
|
||||
@@ -226,7 +226,7 @@ return [
|
||||
[
|
||||
'key' => 'cli',
|
||||
'name' => 'Command Line',
|
||||
'version' => '9.1.0',
|
||||
'version' => '10.0.1',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-cli',
|
||||
'package' => 'https://www.npmjs.com/package/appwrite-cli',
|
||||
'enabled' => true,
|
||||
@@ -262,7 +262,7 @@ return [
|
||||
[
|
||||
'key' => 'nodejs',
|
||||
'name' => 'Node.js',
|
||||
'version' => '18.0.0',
|
||||
'version' => '20.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-node',
|
||||
'package' => 'https://www.npmjs.com/package/node-appwrite',
|
||||
'enabled' => true,
|
||||
@@ -281,7 +281,7 @@ return [
|
||||
[
|
||||
'key' => 'php',
|
||||
'name' => 'PHP',
|
||||
'version' => '16.0.0',
|
||||
'version' => '17.2.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-php',
|
||||
'package' => 'https://packagist.org/packages/appwrite/appwrite',
|
||||
'enabled' => true,
|
||||
@@ -300,7 +300,7 @@ return [
|
||||
[
|
||||
'key' => 'python',
|
||||
'name' => 'Python',
|
||||
'version' => '12.0.0',
|
||||
'version' => '13.2.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-python',
|
||||
'package' => 'https://pypi.org/project/appwrite/',
|
||||
'enabled' => true,
|
||||
@@ -319,7 +319,7 @@ return [
|
||||
[
|
||||
'key' => 'ruby',
|
||||
'name' => 'Ruby',
|
||||
'version' => '17.0.0',
|
||||
'version' => '19.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-ruby',
|
||||
'package' => 'https://rubygems.org/gems/appwrite',
|
||||
'enabled' => true,
|
||||
@@ -338,7 +338,7 @@ return [
|
||||
[
|
||||
'key' => 'go',
|
||||
'name' => 'Go',
|
||||
'version' => '0.10.0',
|
||||
'version' => '0.13.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-go',
|
||||
'package' => 'https://github.com/appwrite/sdk-for-go',
|
||||
'enabled' => true,
|
||||
@@ -357,7 +357,7 @@ return [
|
||||
[
|
||||
'key' => 'dotnet',
|
||||
'name' => '.NET',
|
||||
'version' => '0.16.0',
|
||||
'version' => '0.19.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-dotnet',
|
||||
'package' => 'https://www.nuget.org/packages/Appwrite',
|
||||
'enabled' => true,
|
||||
@@ -376,7 +376,7 @@ return [
|
||||
[
|
||||
'key' => 'dart',
|
||||
'name' => 'Dart',
|
||||
'version' => '17.0.0',
|
||||
'version' => '19.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-dart',
|
||||
'package' => 'https://pub.dev/packages/dart_appwrite',
|
||||
'enabled' => true,
|
||||
@@ -395,7 +395,7 @@ return [
|
||||
[
|
||||
'key' => 'kotlin',
|
||||
'name' => 'Kotlin',
|
||||
'version' => '10.0.0',
|
||||
'version' => '12.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-kotlin',
|
||||
'package' => 'https://search.maven.org/artifact/io.appwrite/sdk-for-kotlin',
|
||||
'enabled' => true,
|
||||
@@ -418,7 +418,7 @@ return [
|
||||
[
|
||||
'key' => 'swift',
|
||||
'name' => 'Swift',
|
||||
'version' => '11.0.0',
|
||||
'version' => '13.0.0',
|
||||
'url' => 'https://github.com/appwrite/sdk-for-swift',
|
||||
'package' => 'https://github.com/appwrite/sdk-for-swift',
|
||||
'enabled' => true,
|
||||
|
||||
@@ -214,7 +214,7 @@ return [
|
||||
'name' => 'Proxy',
|
||||
'subtitle' => 'The Proxy Service allows you to configure actions for your domains beyond DNS configuration.',
|
||||
'description' => '/docs/services/proxy.md',
|
||||
'controller' => 'api/proxy.php',
|
||||
'controller' => '', // Uses modules
|
||||
'sdk' => true,
|
||||
'docs' => true,
|
||||
'docsUrl' => 'https://appwrite.io/docs/proxy',
|
||||
|
||||
@@ -3464,10 +3464,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"\/account\/verification": {
|
||||
"\/account\/verifications\/email": {
|
||||
"post": {
|
||||
"summary": "Create email verification",
|
||||
"operationId": "accountCreateVerification",
|
||||
"operationId": "accountCreateEmailVerification",
|
||||
"tags": [
|
||||
"account"
|
||||
],
|
||||
@@ -3486,12 +3486,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "createVerification",
|
||||
"method": "createEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 41,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/create-verification.md",
|
||||
"demo": "account\/create-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3502,6 +3502,56 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "createEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "createVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.createEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3535,7 +3585,7 @@
|
||||
},
|
||||
"put": {
|
||||
"summary": "Update email verification (confirmation)",
|
||||
"operationId": "accountUpdateVerification",
|
||||
"operationId": "accountUpdateEmailVerification",
|
||||
"tags": [
|
||||
"account"
|
||||
],
|
||||
@@ -3554,12 +3604,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "updateVerification",
|
||||
"method": "updateEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 42,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/update-verification.md",
|
||||
"demo": "account\/update-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3570,6 +3620,60 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "updateEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "updateVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.updateEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3608,7 +3712,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"\/account\/verification\/phone": {
|
||||
"\/account\/verifications\/phone": {
|
||||
"post": {
|
||||
"summary": "Create phone verification",
|
||||
"operationId": "accountCreatePhoneVerification",
|
||||
@@ -4830,7 +4934,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listDocuments",
|
||||
"group": "documents",
|
||||
"weight": 339,
|
||||
"weight": 335,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/list-documents.md",
|
||||
@@ -4919,7 +5023,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createDocument",
|
||||
"group": "documents",
|
||||
"weight": 331,
|
||||
"weight": 327,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/create-document.md",
|
||||
@@ -5069,7 +5173,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getDocument",
|
||||
"group": "documents",
|
||||
"weight": 332,
|
||||
"weight": 328,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/get-document.md",
|
||||
@@ -5168,7 +5272,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertDocument",
|
||||
"group": "documents",
|
||||
"weight": 335,
|
||||
"weight": 331,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/upsert-document.md",
|
||||
@@ -5316,7 +5420,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateDocument",
|
||||
"group": "documents",
|
||||
"weight": 333,
|
||||
"weight": 329,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/update-document.md",
|
||||
@@ -5419,7 +5523,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteDocument",
|
||||
"group": "documents",
|
||||
"weight": 337,
|
||||
"weight": 333,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/delete-document.md",
|
||||
@@ -5507,7 +5611,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 342,
|
||||
"weight": 338,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/decrement-document-attribute.md",
|
||||
@@ -5626,7 +5730,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 341,
|
||||
"weight": 337,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/increment-document-attribute.md",
|
||||
@@ -5745,7 +5849,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listExecutions",
|
||||
"group": "executions",
|
||||
"weight": 460,
|
||||
"weight": 456,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/list-executions.md",
|
||||
@@ -5820,7 +5924,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createExecution",
|
||||
"group": "executions",
|
||||
"weight": 458,
|
||||
"weight": 454,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/create-execution.md",
|
||||
@@ -5936,7 +6040,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getExecution",
|
||||
"group": "executions",
|
||||
"weight": 459,
|
||||
"weight": 455,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/get-execution.md",
|
||||
@@ -6010,7 +6114,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "query",
|
||||
"group": "graphql",
|
||||
"weight": 254,
|
||||
"weight": 250,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/query.md",
|
||||
@@ -6062,7 +6166,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "mutation",
|
||||
"group": "graphql",
|
||||
"weight": 253,
|
||||
"weight": 249,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/mutation.md",
|
||||
@@ -6530,7 +6634,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 300,
|
||||
"weight": 296,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/create-subscriber.md",
|
||||
@@ -6613,7 +6717,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 304,
|
||||
"weight": 300,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/delete-subscriber.md",
|
||||
@@ -7491,7 +7595,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listRows",
|
||||
"group": "rows",
|
||||
"weight": 431,
|
||||
"weight": 427,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/list-rows.md",
|
||||
@@ -7533,7 +7637,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the TableDB service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdbdb#tablesdbCreate).",
|
||||
"description": "Table ID. You can create a new table using the TablesDB service [server integration](https:\/\/appwrite.io\/docs\/products\/databases\/tables#create-table).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -7562,7 +7666,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7579,7 +7683,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createRow",
|
||||
"group": "rows",
|
||||
"weight": 423,
|
||||
"weight": 419,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/create-row.md",
|
||||
@@ -7624,7 +7728,7 @@
|
||||
"model": "#\/components\/schemas\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/create-row.md"
|
||||
}
|
||||
],
|
||||
@@ -7652,7 +7756,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate). Make sure to define columns before creating rows.",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable). Make sure to define columns before creating rows.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -7687,7 +7791,7 @@
|
||||
},
|
||||
"rows": {
|
||||
"type": "array",
|
||||
"description": "Array of documents data as JSON objects.",
|
||||
"description": "Array of rows data as JSON objects.",
|
||||
"x-example": null,
|
||||
"items": {
|
||||
"type": "object"
|
||||
@@ -7724,7 +7828,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getRow",
|
||||
"group": "rows",
|
||||
"weight": 424,
|
||||
"weight": 420,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/get-row.md",
|
||||
@@ -7766,7 +7870,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -7805,7 +7909,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7822,7 +7926,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertRow",
|
||||
"group": "rows",
|
||||
"weight": 427,
|
||||
"weight": 423,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/upsert-row.md",
|
||||
@@ -7866,7 +7970,7 @@
|
||||
"model": "#\/components\/schemas\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/upsert-row.md"
|
||||
}
|
||||
],
|
||||
@@ -7961,7 +8065,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateRow",
|
||||
"group": "rows",
|
||||
"weight": 425,
|
||||
"weight": 421,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/update-row.md",
|
||||
@@ -8063,7 +8167,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteRow",
|
||||
"group": "rows",
|
||||
"weight": 429,
|
||||
"weight": 425,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/delete-row.md",
|
||||
@@ -8105,7 +8209,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -8150,7 +8254,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 434,
|
||||
"weight": 430,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/decrement-row-column.md",
|
||||
@@ -8268,7 +8372,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 433,
|
||||
"weight": 429,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/increment-row-column.md",
|
||||
@@ -11393,12 +11497,23 @@
|
||||
"trigger": {
|
||||
"type": "string",
|
||||
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
|
||||
"x-example": "http"
|
||||
"x-example": "http",
|
||||
"enum": [
|
||||
"http",
|
||||
"schedule",
|
||||
"event"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"description": "The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.",
|
||||
"x-example": "processing"
|
||||
"x-example": "processing",
|
||||
"enum": [
|
||||
"waiting",
|
||||
"processing",
|
||||
"completed",
|
||||
"failed"
|
||||
]
|
||||
},
|
||||
"requestMethod": {
|
||||
"type": "string",
|
||||
@@ -11412,7 +11527,7 @@
|
||||
},
|
||||
"requestHeaders": {
|
||||
"type": "array",
|
||||
"description": "HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"description": "HTTP request headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"items": {
|
||||
"$ref": "#\/components\/schemas\/headers"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3464,10 +3464,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"\/account\/verification": {
|
||||
"\/account\/verifications\/email": {
|
||||
"post": {
|
||||
"summary": "Create email verification",
|
||||
"operationId": "accountCreateVerification",
|
||||
"operationId": "accountCreateEmailVerification",
|
||||
"tags": [
|
||||
"account"
|
||||
],
|
||||
@@ -3486,12 +3486,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "createVerification",
|
||||
"method": "createEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 41,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/create-verification.md",
|
||||
"demo": "account\/create-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3502,6 +3502,56 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "createEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "createVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.createEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3535,7 +3585,7 @@
|
||||
},
|
||||
"put": {
|
||||
"summary": "Update email verification (confirmation)",
|
||||
"operationId": "accountUpdateVerification",
|
||||
"operationId": "accountUpdateEmailVerification",
|
||||
"tags": [
|
||||
"account"
|
||||
],
|
||||
@@ -3554,12 +3604,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "updateVerification",
|
||||
"method": "updateEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 42,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/update-verification.md",
|
||||
"demo": "account\/update-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3570,6 +3620,60 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "updateEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "updateVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/components\/schemas\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.updateEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3608,7 +3712,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"\/account\/verification\/phone": {
|
||||
"\/account\/verifications\/phone": {
|
||||
"post": {
|
||||
"summary": "Create phone verification",
|
||||
"operationId": "accountCreatePhoneVerification",
|
||||
@@ -4830,7 +4934,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listDocuments",
|
||||
"group": "documents",
|
||||
"weight": 339,
|
||||
"weight": 335,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/list-documents.md",
|
||||
@@ -4919,7 +5023,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createDocument",
|
||||
"group": "documents",
|
||||
"weight": 331,
|
||||
"weight": 327,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/create-document.md",
|
||||
@@ -5069,7 +5173,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getDocument",
|
||||
"group": "documents",
|
||||
"weight": 332,
|
||||
"weight": 328,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/get-document.md",
|
||||
@@ -5168,7 +5272,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertDocument",
|
||||
"group": "documents",
|
||||
"weight": 335,
|
||||
"weight": 331,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/upsert-document.md",
|
||||
@@ -5316,7 +5420,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateDocument",
|
||||
"group": "documents",
|
||||
"weight": 333,
|
||||
"weight": 329,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/update-document.md",
|
||||
@@ -5419,7 +5523,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteDocument",
|
||||
"group": "documents",
|
||||
"weight": 337,
|
||||
"weight": 333,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/delete-document.md",
|
||||
@@ -5507,7 +5611,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 342,
|
||||
"weight": 338,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/decrement-document-attribute.md",
|
||||
@@ -5626,7 +5730,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 341,
|
||||
"weight": 337,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/increment-document-attribute.md",
|
||||
@@ -5745,7 +5849,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listExecutions",
|
||||
"group": "executions",
|
||||
"weight": 460,
|
||||
"weight": 456,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/list-executions.md",
|
||||
@@ -5820,7 +5924,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createExecution",
|
||||
"group": "executions",
|
||||
"weight": 458,
|
||||
"weight": 454,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/create-execution.md",
|
||||
@@ -5936,7 +6040,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getExecution",
|
||||
"group": "executions",
|
||||
"weight": 459,
|
||||
"weight": 455,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/get-execution.md",
|
||||
@@ -6010,7 +6114,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "query",
|
||||
"group": "graphql",
|
||||
"weight": 254,
|
||||
"weight": 250,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/query.md",
|
||||
@@ -6062,7 +6166,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "mutation",
|
||||
"group": "graphql",
|
||||
"weight": 253,
|
||||
"weight": 249,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/mutation.md",
|
||||
@@ -6530,7 +6634,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 300,
|
||||
"weight": 296,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/create-subscriber.md",
|
||||
@@ -6613,7 +6717,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 304,
|
||||
"weight": 300,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/delete-subscriber.md",
|
||||
@@ -7491,7 +7595,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listRows",
|
||||
"group": "rows",
|
||||
"weight": 431,
|
||||
"weight": 427,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/list-rows.md",
|
||||
@@ -7533,7 +7637,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the TableDB service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdbdb#tablesdbCreate).",
|
||||
"description": "Table ID. You can create a new table using the TablesDB service [server integration](https:\/\/appwrite.io\/docs\/products\/databases\/tables#create-table).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -7562,7 +7666,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7579,7 +7683,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createRow",
|
||||
"group": "rows",
|
||||
"weight": 423,
|
||||
"weight": 419,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/create-row.md",
|
||||
@@ -7624,7 +7728,7 @@
|
||||
"model": "#\/components\/schemas\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/create-row.md"
|
||||
}
|
||||
],
|
||||
@@ -7652,7 +7756,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate). Make sure to define columns before creating rows.",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable). Make sure to define columns before creating rows.",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -7687,7 +7791,7 @@
|
||||
},
|
||||
"rows": {
|
||||
"type": "array",
|
||||
"description": "Array of documents data as JSON objects.",
|
||||
"description": "Array of rows data as JSON objects.",
|
||||
"x-example": null,
|
||||
"items": {
|
||||
"type": "object"
|
||||
@@ -7724,7 +7828,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getRow",
|
||||
"group": "rows",
|
||||
"weight": 424,
|
||||
"weight": 420,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/get-row.md",
|
||||
@@ -7766,7 +7870,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -7805,7 +7909,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7822,7 +7926,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertRow",
|
||||
"group": "rows",
|
||||
"weight": 427,
|
||||
"weight": 423,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/upsert-row.md",
|
||||
@@ -7866,7 +7970,7 @@
|
||||
"model": "#\/components\/schemas\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/upsert-row.md"
|
||||
}
|
||||
],
|
||||
@@ -7961,7 +8065,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateRow",
|
||||
"group": "rows",
|
||||
"weight": 425,
|
||||
"weight": 421,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/update-row.md",
|
||||
@@ -8063,7 +8167,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteRow",
|
||||
"group": "rows",
|
||||
"weight": 429,
|
||||
"weight": 425,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/delete-row.md",
|
||||
@@ -8105,7 +8209,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"schema": {
|
||||
"type": "string",
|
||||
@@ -8150,7 +8254,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 434,
|
||||
"weight": 430,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/decrement-row-column.md",
|
||||
@@ -8268,7 +8372,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 433,
|
||||
"weight": 429,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/increment-row-column.md",
|
||||
@@ -11393,12 +11497,23 @@
|
||||
"trigger": {
|
||||
"type": "string",
|
||||
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
|
||||
"x-example": "http"
|
||||
"x-example": "http",
|
||||
"enum": [
|
||||
"http",
|
||||
"schedule",
|
||||
"event"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"description": "The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.",
|
||||
"x-example": "processing"
|
||||
"x-example": "processing",
|
||||
"enum": [
|
||||
"waiting",
|
||||
"processing",
|
||||
"completed",
|
||||
"failed"
|
||||
]
|
||||
},
|
||||
"requestMethod": {
|
||||
"type": "string",
|
||||
@@ -11412,7 +11527,7 @@
|
||||
},
|
||||
"requestHeaders": {
|
||||
"type": "array",
|
||||
"description": "HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"description": "HTTP request headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"items": {
|
||||
"$ref": "#\/components\/schemas\/headers"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3599,10 +3599,10 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"\/account\/verification": {
|
||||
"\/account\/verifications\/email": {
|
||||
"post": {
|
||||
"summary": "Create email verification",
|
||||
"operationId": "accountCreateVerification",
|
||||
"operationId": "accountCreateEmailVerification",
|
||||
"consumes": [
|
||||
"application\/json"
|
||||
],
|
||||
@@ -3623,12 +3623,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "createVerification",
|
||||
"method": "createEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 41,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/create-verification.md",
|
||||
"demo": "account\/create-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3639,6 +3639,56 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "createEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "createVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.createEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3673,7 +3723,7 @@
|
||||
},
|
||||
"put": {
|
||||
"summary": "Update email verification (confirmation)",
|
||||
"operationId": "accountUpdateVerification",
|
||||
"operationId": "accountUpdateEmailVerification",
|
||||
"consumes": [
|
||||
"application\/json"
|
||||
],
|
||||
@@ -3694,12 +3744,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "updateVerification",
|
||||
"method": "updateEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 42,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/update-verification.md",
|
||||
"demo": "account\/update-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3710,6 +3760,60 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "updateEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "updateVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.updateEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3750,7 +3854,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"\/account\/verification\/phone": {
|
||||
"\/account\/verifications\/phone": {
|
||||
"post": {
|
||||
"summary": "Create phone verification",
|
||||
"operationId": "accountCreatePhoneVerification",
|
||||
@@ -4972,7 +5076,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listDocuments",
|
||||
"group": "documents",
|
||||
"weight": 339,
|
||||
"weight": 335,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/list-documents.md",
|
||||
@@ -5057,7 +5161,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createDocument",
|
||||
"group": "documents",
|
||||
"weight": 331,
|
||||
"weight": 327,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/create-document.md",
|
||||
@@ -5204,7 +5308,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getDocument",
|
||||
"group": "documents",
|
||||
"weight": 332,
|
||||
"weight": 328,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/get-document.md",
|
||||
@@ -5297,7 +5401,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertDocument",
|
||||
"group": "documents",
|
||||
"weight": 335,
|
||||
"weight": 331,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/upsert-document.md",
|
||||
@@ -5440,7 +5544,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateDocument",
|
||||
"group": "documents",
|
||||
"weight": 333,
|
||||
"weight": 329,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/update-document.md",
|
||||
@@ -5540,7 +5644,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteDocument",
|
||||
"group": "documents",
|
||||
"weight": 337,
|
||||
"weight": 333,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/delete-document.md",
|
||||
@@ -5623,7 +5727,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 342,
|
||||
"weight": 338,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/decrement-document-attribute.md",
|
||||
@@ -5735,7 +5839,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 341,
|
||||
"weight": 337,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/increment-document-attribute.md",
|
||||
@@ -5845,7 +5949,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listExecutions",
|
||||
"group": "executions",
|
||||
"weight": 460,
|
||||
"weight": 456,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/list-executions.md",
|
||||
@@ -5918,7 +6022,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createExecution",
|
||||
"group": "executions",
|
||||
"weight": 458,
|
||||
"weight": 454,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/create-execution.md",
|
||||
@@ -6035,7 +6139,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getExecution",
|
||||
"group": "executions",
|
||||
"weight": 459,
|
||||
"weight": 455,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/get-execution.md",
|
||||
@@ -6106,7 +6210,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "query",
|
||||
"group": "graphql",
|
||||
"weight": 254,
|
||||
"weight": 250,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/query.md",
|
||||
@@ -6179,7 +6283,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "mutation",
|
||||
"group": "graphql",
|
||||
"weight": 253,
|
||||
"weight": 249,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/mutation.md",
|
||||
@@ -6660,7 +6764,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 300,
|
||||
"weight": 296,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/create-subscriber.md",
|
||||
@@ -6744,7 +6848,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 304,
|
||||
"weight": 300,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/delete-subscriber.md",
|
||||
@@ -7573,7 +7677,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listRows",
|
||||
"group": "rows",
|
||||
"weight": 431,
|
||||
"weight": 427,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/list-rows.md",
|
||||
@@ -7612,7 +7716,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the TableDB service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdbdb#tablesdbCreate).",
|
||||
"description": "Table ID. You can create a new table using the TablesDB service [server integration](https:\/\/appwrite.io\/docs\/products\/databases\/tables#create-table).",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -7644,7 +7748,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7657,7 +7761,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createRow",
|
||||
"group": "rows",
|
||||
"weight": 423,
|
||||
"weight": 419,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/create-row.md",
|
||||
@@ -7701,7 +7805,7 @@
|
||||
"model": "#\/definitions\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/create-row.md"
|
||||
}
|
||||
],
|
||||
@@ -7727,7 +7831,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate). Make sure to define columns before creating rows.",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable). Make sure to define columns before creating rows.",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -7762,7 +7866,7 @@
|
||||
},
|
||||
"rows": {
|
||||
"type": "array",
|
||||
"description": "Array of documents data as JSON objects.",
|
||||
"description": "Array of rows data as JSON objects.",
|
||||
"default": [],
|
||||
"x-example": null,
|
||||
"items": {
|
||||
@@ -7799,7 +7903,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getRow",
|
||||
"group": "rows",
|
||||
"weight": 424,
|
||||
"weight": 420,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/get-row.md",
|
||||
@@ -7838,7 +7942,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -7878,7 +7982,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7891,7 +7995,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertRow",
|
||||
"group": "rows",
|
||||
"weight": 427,
|
||||
"weight": 423,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/upsert-row.md",
|
||||
@@ -7934,7 +8038,7 @@
|
||||
"model": "#\/definitions\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/upsert-row.md"
|
||||
}
|
||||
],
|
||||
@@ -8025,7 +8129,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateRow",
|
||||
"group": "rows",
|
||||
"weight": 425,
|
||||
"weight": 421,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/update-row.md",
|
||||
@@ -8124,7 +8228,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteRow",
|
||||
"group": "rows",
|
||||
"weight": 429,
|
||||
"weight": 425,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/delete-row.md",
|
||||
@@ -8163,7 +8267,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -8206,7 +8310,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 434,
|
||||
"weight": 430,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/decrement-row-column.md",
|
||||
@@ -8317,7 +8421,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 433,
|
||||
"weight": 429,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/increment-row-column.md",
|
||||
@@ -11392,12 +11496,23 @@
|
||||
"trigger": {
|
||||
"type": "string",
|
||||
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
|
||||
"x-example": "http"
|
||||
"x-example": "http",
|
||||
"enum": [
|
||||
"http",
|
||||
"schedule",
|
||||
"event"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"description": "The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.",
|
||||
"x-example": "processing"
|
||||
"x-example": "processing",
|
||||
"enum": [
|
||||
"waiting",
|
||||
"processing",
|
||||
"completed",
|
||||
"failed"
|
||||
]
|
||||
},
|
||||
"requestMethod": {
|
||||
"type": "string",
|
||||
@@ -11411,7 +11526,7 @@
|
||||
},
|
||||
"requestHeaders": {
|
||||
"type": "array",
|
||||
"description": "HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"description": "HTTP request headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"$ref": "#\/definitions\/headers"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3599,10 +3599,10 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"\/account\/verification": {
|
||||
"\/account\/verifications\/email": {
|
||||
"post": {
|
||||
"summary": "Create email verification",
|
||||
"operationId": "accountCreateVerification",
|
||||
"operationId": "accountCreateEmailVerification",
|
||||
"consumes": [
|
||||
"application\/json"
|
||||
],
|
||||
@@ -3623,12 +3623,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "createVerification",
|
||||
"method": "createEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 41,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/create-verification.md",
|
||||
"demo": "account\/create-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/create-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3639,6 +3639,56 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "createEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "createVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"url"
|
||||
],
|
||||
"required": [
|
||||
"url"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 201,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to send a verification message to your user email address to confirm they are the valid owners of that address. Both the **userId** and **secret** arguments will be passed as query parameters to the URL you have provided to be attached to the verification email. The provided URL should redirect the user back to your app and allow you to complete the verification process by verifying both the **userId** and **secret** parameters. Learn more about how to [complete the verification process](https:\/\/appwrite.io\/docs\/references\/cloud\/client-web\/account#updateVerification). The verification link sent to the user's email address is valid for 7 days.\n\nPlease note that in order to avoid a [Redirect Attack](https:\/\/github.com\/OWASP\/CheatSheetSeries\/blob\/master\/cheatsheets\/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md), the only valid redirect URLs are the ones from domains you have set when adding your platforms in the console interface.\n",
|
||||
"demo": "account\/create-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.createEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3673,7 +3723,7 @@
|
||||
},
|
||||
"put": {
|
||||
"summary": "Update email verification (confirmation)",
|
||||
"operationId": "accountUpdateVerification",
|
||||
"operationId": "accountUpdateEmailVerification",
|
||||
"consumes": [
|
||||
"application\/json"
|
||||
],
|
||||
@@ -3694,12 +3744,12 @@
|
||||
},
|
||||
"deprecated": false,
|
||||
"x-appwrite": {
|
||||
"method": "updateVerification",
|
||||
"method": "updateEmailVerification",
|
||||
"group": "verification",
|
||||
"weight": 42,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "account\/update-verification.md",
|
||||
"demo": "account\/update-email-verification.md",
|
||||
"edit": "https:\/\/github.com\/appwrite\/appwrite\/edit\/master\/docs\/references\/account\/update-email-verification.md",
|
||||
"rate-limit": 10,
|
||||
"rate-time": 3600,
|
||||
@@ -3710,6 +3760,60 @@
|
||||
"server"
|
||||
],
|
||||
"packaging": false,
|
||||
"methods": [
|
||||
{
|
||||
"name": "updateEmailVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-email-verification.md"
|
||||
},
|
||||
{
|
||||
"name": "updateVerification",
|
||||
"namespace": "account",
|
||||
"desc": "",
|
||||
"auth": {
|
||||
"Project": []
|
||||
},
|
||||
"parameters": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"required": [
|
||||
"userId",
|
||||
"secret"
|
||||
],
|
||||
"responses": [
|
||||
{
|
||||
"code": 200,
|
||||
"model": "#\/definitions\/token"
|
||||
}
|
||||
],
|
||||
"description": "Use this endpoint to complete the user email verification process. Use both the **userId** and **secret** parameters that were attached to your app URL to verify the user email ownership. If confirmed this route will return a 200 status code.",
|
||||
"demo": "account\/update-verification.md",
|
||||
"deprecated": {
|
||||
"since": "1.8.0",
|
||||
"replaceWith": "account.updateEmailVerification"
|
||||
}
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"Project": []
|
||||
}
|
||||
@@ -3750,7 +3854,7 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"\/account\/verification\/phone": {
|
||||
"\/account\/verifications\/phone": {
|
||||
"post": {
|
||||
"summary": "Create phone verification",
|
||||
"operationId": "accountCreatePhoneVerification",
|
||||
@@ -4972,7 +5076,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listDocuments",
|
||||
"group": "documents",
|
||||
"weight": 339,
|
||||
"weight": 335,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/list-documents.md",
|
||||
@@ -5057,7 +5161,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createDocument",
|
||||
"group": "documents",
|
||||
"weight": 331,
|
||||
"weight": 327,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/create-document.md",
|
||||
@@ -5204,7 +5308,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getDocument",
|
||||
"group": "documents",
|
||||
"weight": 332,
|
||||
"weight": 328,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/get-document.md",
|
||||
@@ -5297,7 +5401,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertDocument",
|
||||
"group": "documents",
|
||||
"weight": 335,
|
||||
"weight": 331,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/upsert-document.md",
|
||||
@@ -5440,7 +5544,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateDocument",
|
||||
"group": "documents",
|
||||
"weight": 333,
|
||||
"weight": 329,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/update-document.md",
|
||||
@@ -5540,7 +5644,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteDocument",
|
||||
"group": "documents",
|
||||
"weight": 337,
|
||||
"weight": 333,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/delete-document.md",
|
||||
@@ -5623,7 +5727,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 342,
|
||||
"weight": 338,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/decrement-document-attribute.md",
|
||||
@@ -5735,7 +5839,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementDocumentAttribute",
|
||||
"group": "documents",
|
||||
"weight": 341,
|
||||
"weight": 337,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "databases\/increment-document-attribute.md",
|
||||
@@ -5845,7 +5949,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listExecutions",
|
||||
"group": "executions",
|
||||
"weight": 460,
|
||||
"weight": 456,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/list-executions.md",
|
||||
@@ -5918,7 +6022,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createExecution",
|
||||
"group": "executions",
|
||||
"weight": 458,
|
||||
"weight": 454,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/create-execution.md",
|
||||
@@ -6035,7 +6139,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getExecution",
|
||||
"group": "executions",
|
||||
"weight": 459,
|
||||
"weight": 455,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "functions\/get-execution.md",
|
||||
@@ -6106,7 +6210,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "query",
|
||||
"group": "graphql",
|
||||
"weight": 254,
|
||||
"weight": 250,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/query.md",
|
||||
@@ -6179,7 +6283,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "mutation",
|
||||
"group": "graphql",
|
||||
"weight": 253,
|
||||
"weight": 249,
|
||||
"cookies": false,
|
||||
"type": "graphql",
|
||||
"demo": "graphql\/mutation.md",
|
||||
@@ -6660,7 +6764,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 300,
|
||||
"weight": 296,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/create-subscriber.md",
|
||||
@@ -6744,7 +6848,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteSubscriber",
|
||||
"group": "subscribers",
|
||||
"weight": 304,
|
||||
"weight": 300,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "messaging\/delete-subscriber.md",
|
||||
@@ -7573,7 +7677,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "listRows",
|
||||
"group": "rows",
|
||||
"weight": 431,
|
||||
"weight": 427,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/list-rows.md",
|
||||
@@ -7612,7 +7716,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the TableDB service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdbdb#tablesdbCreate).",
|
||||
"description": "Table ID. You can create a new table using the TablesDB service [server integration](https:\/\/appwrite.io\/docs\/products\/databases\/tables#create-table).",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -7644,7 +7748,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7657,7 +7761,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "createRow",
|
||||
"group": "rows",
|
||||
"weight": 423,
|
||||
"weight": 419,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/create-row.md",
|
||||
@@ -7701,7 +7805,7 @@
|
||||
"model": "#\/definitions\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create a new Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/create-row.md"
|
||||
}
|
||||
],
|
||||
@@ -7727,7 +7831,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate). Make sure to define columns before creating rows.",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable). Make sure to define columns before creating rows.",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -7762,7 +7866,7 @@
|
||||
},
|
||||
"rows": {
|
||||
"type": "array",
|
||||
"description": "Array of documents data as JSON objects.",
|
||||
"description": "Array of rows data as JSON objects.",
|
||||
"default": [],
|
||||
"x-example": null,
|
||||
"items": {
|
||||
@@ -7799,7 +7903,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "getRow",
|
||||
"group": "rows",
|
||||
"weight": 424,
|
||||
"weight": 420,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/get-row.md",
|
||||
@@ -7838,7 +7942,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -7878,7 +7982,7 @@
|
||||
"tags": [
|
||||
"tablesDB"
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "Row",
|
||||
@@ -7891,7 +7995,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "upsertRow",
|
||||
"group": "rows",
|
||||
"weight": 427,
|
||||
"weight": 423,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/upsert-row.md",
|
||||
@@ -7934,7 +8038,7 @@
|
||||
"model": "#\/definitions\/row"
|
||||
}
|
||||
],
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreateTable) API or directly from your database console.",
|
||||
"description": "Create or update a Row. Before using this route, you should create a new table resource using either a [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable) API or directly from your database console.",
|
||||
"demo": "tablesdb\/upsert-row.md"
|
||||
}
|
||||
],
|
||||
@@ -8025,7 +8129,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "updateRow",
|
||||
"group": "rows",
|
||||
"weight": 425,
|
||||
"weight": 421,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/update-row.md",
|
||||
@@ -8124,7 +8228,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "deleteRow",
|
||||
"group": "rows",
|
||||
"weight": 429,
|
||||
"weight": 425,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/delete-row.md",
|
||||
@@ -8163,7 +8267,7 @@
|
||||
},
|
||||
{
|
||||
"name": "tableId",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/server\/tablesdb#tablesDBCreate).",
|
||||
"description": "Table ID. You can create a new table using the Database service [server integration](https:\/\/appwrite.io\/docs\/references\/cloud\/server-dart\/tablesDB#createTable).",
|
||||
"required": true,
|
||||
"type": "string",
|
||||
"x-example": "<TABLE_ID>",
|
||||
@@ -8206,7 +8310,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "decrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 434,
|
||||
"weight": 430,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/decrement-row-column.md",
|
||||
@@ -8317,7 +8421,7 @@
|
||||
"x-appwrite": {
|
||||
"method": "incrementRowColumn",
|
||||
"group": "rows",
|
||||
"weight": 433,
|
||||
"weight": 429,
|
||||
"cookies": false,
|
||||
"type": "",
|
||||
"demo": "tablesdb\/increment-row-column.md",
|
||||
@@ -11392,12 +11496,23 @@
|
||||
"trigger": {
|
||||
"type": "string",
|
||||
"description": "The trigger that caused the function to execute. Possible values can be: `http`, `schedule`, or `event`.",
|
||||
"x-example": "http"
|
||||
"x-example": "http",
|
||||
"enum": [
|
||||
"http",
|
||||
"schedule",
|
||||
"event"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"description": "The status of the function execution. Possible values can be: `waiting`, `processing`, `completed`, or `failed`.",
|
||||
"x-example": "processing"
|
||||
"x-example": "processing",
|
||||
"enum": [
|
||||
"waiting",
|
||||
"processing",
|
||||
"completed",
|
||||
"failed"
|
||||
]
|
||||
},
|
||||
"requestMethod": {
|
||||
"type": "string",
|
||||
@@ -11411,7 +11526,7 @@
|
||||
},
|
||||
"requestHeaders": {
|
||||
"type": "array",
|
||||
"description": "HTTP response headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"description": "HTTP request headers as a key-value object. This will return only whitelisted headers. All headers are returned if execution is created as synchronous.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"$ref": "#\/definitions\/headers"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3536,27 +3536,48 @@ App::put('/v1/account/recovery')
|
||||
$response->dynamic($recoveryDocument, Response::MODEL_TOKEN);
|
||||
});
|
||||
|
||||
App::post('/v1/account/verification')
|
||||
App::post('/v1/account/verifications/email')
|
||||
->alias('/v1/account/verification')
|
||||
->desc('Create email verification')
|
||||
->groups(['api', 'account'])
|
||||
->label('scope', 'account')
|
||||
->label('event', 'users.[userId].verification.[tokenId].create')
|
||||
->label('audits.event', 'verification.create')
|
||||
->label('audits.resource', 'user/{response.userId}')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'account',
|
||||
group: 'verification',
|
||||
name: 'createVerification',
|
||||
description: '/docs/references/account/create-email-verification.md',
|
||||
auth: [AuthType::SESSION, AuthType::JWT],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_CREATED,
|
||||
model: Response::MODEL_TOKEN,
|
||||
)
|
||||
],
|
||||
contentType: ContentType::JSON,
|
||||
))
|
||||
->label('sdk', [
|
||||
new Method(
|
||||
namespace: 'account',
|
||||
group: 'verification',
|
||||
name: 'createEmailVerification',
|
||||
description: '/docs/references/account/create-email-verification.md',
|
||||
auth: [AuthType::SESSION, AuthType::JWT],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_CREATED,
|
||||
model: Response::MODEL_TOKEN,
|
||||
)
|
||||
],
|
||||
contentType: ContentType::JSON,
|
||||
),
|
||||
new Method(
|
||||
namespace: 'account',
|
||||
group: 'verification',
|
||||
name: 'createVerification',
|
||||
description: '/docs/references/account/create-email-verification.md',
|
||||
auth: [AuthType::SESSION, AuthType::JWT],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_CREATED,
|
||||
model: Response::MODEL_TOKEN,
|
||||
)
|
||||
],
|
||||
contentType: ContentType::JSON,
|
||||
deprecated: new Deprecated(
|
||||
since: '1.8.0',
|
||||
replaceWith: 'account.createEmailVerification'
|
||||
),
|
||||
)
|
||||
])
|
||||
->label('abuse-limit', 10)
|
||||
->label('abuse-key', 'url:{url},userId:{userId}')
|
||||
->param('url', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect the user back to your app from the verification email. Only URLs from hostnames in your project platform list are allowed. This requirement helps to prevent an [open redirect](https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html) attack against your project API.', false, ['platforms', 'devKey']) // TODO add built-in confirm page
|
||||
@@ -3726,27 +3747,48 @@ App::post('/v1/account/verification')
|
||||
->dynamic($verification, Response::MODEL_TOKEN);
|
||||
});
|
||||
|
||||
App::put('/v1/account/verification')
|
||||
App::put('/v1/account/verifications/email')
|
||||
->alias('/v1/account/verification')
|
||||
->desc('Update email verification (confirmation)')
|
||||
->groups(['api', 'account'])
|
||||
->label('scope', 'public')
|
||||
->label('event', 'users.[userId].verification.[tokenId].update')
|
||||
->label('audits.event', 'verification.update')
|
||||
->label('audits.resource', 'user/{response.userId}')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'account',
|
||||
group: 'verification',
|
||||
name: 'updateVerification',
|
||||
description: '/docs/references/account/update-email-verification.md',
|
||||
auth: [AuthType::SESSION, AuthType::JWT],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_TOKEN,
|
||||
)
|
||||
],
|
||||
contentType: ContentType::JSON
|
||||
))
|
||||
->label('sdk', [
|
||||
new Method(
|
||||
namespace: 'account',
|
||||
group: 'verification',
|
||||
name: 'updateEmailVerification',
|
||||
description: '/docs/references/account/update-email-verification.md',
|
||||
auth: [AuthType::SESSION, AuthType::JWT],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_TOKEN,
|
||||
)
|
||||
],
|
||||
contentType: ContentType::JSON
|
||||
),
|
||||
new Method(
|
||||
namespace: 'account',
|
||||
group: 'verification',
|
||||
name: 'updateVerification',
|
||||
description: '/docs/references/account/update-email-verification.md',
|
||||
auth: [AuthType::SESSION, AuthType::JWT],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_TOKEN,
|
||||
)
|
||||
],
|
||||
contentType: ContentType::JSON,
|
||||
deprecated: new Deprecated(
|
||||
since: '1.8.0',
|
||||
replaceWith: 'account.updateEmailVerification'
|
||||
),
|
||||
)
|
||||
])
|
||||
->label('abuse-limit', 10)
|
||||
->label('abuse-key', 'url:{url},userId:{param-userId}')
|
||||
->param('userId', '', new UID(), 'User ID.')
|
||||
@@ -3793,7 +3835,8 @@ App::put('/v1/account/verification')
|
||||
$response->dynamic($verification, Response::MODEL_TOKEN);
|
||||
});
|
||||
|
||||
App::post('/v1/account/verification/phone')
|
||||
App::post('/v1/account/verifications/phone')
|
||||
->alias('/v1/account/verification/phone')
|
||||
->desc('Create phone verification')
|
||||
->groups(['api', 'account', 'auth'])
|
||||
->label('scope', 'account')
|
||||
@@ -3942,7 +3985,8 @@ App::post('/v1/account/verification/phone')
|
||||
->dynamic($verification, Response::MODEL_TOKEN);
|
||||
});
|
||||
|
||||
App::put('/v1/account/verification/phone')
|
||||
App::put('/v1/account/verifications/phone')
|
||||
->alias('/v1/account/verification/phone')
|
||||
->desc('Update phone verification (confirmation)')
|
||||
->groups(['api', 'account'])
|
||||
->label('scope', 'public')
|
||||
|
||||
@@ -538,7 +538,7 @@ App::get('/v1/health/queue/databases')
|
||||
->inject('response')
|
||||
->action(function (string $name, int|string $threshold, Database $queueForDatabase, Response $response) {
|
||||
$threshold = \intval($threshold);
|
||||
$size = $queueForDatabase->getSize();
|
||||
$size = $queueForDatabase->setQueue($name)->getSize();
|
||||
|
||||
if ($size >= $threshold) {
|
||||
throw new Exception(Exception::HEALTH_QUEUE_SIZE_EXCEEDED, "Queue size threshold hit. Current size is {$size} and threshold is {$threshold}.");
|
||||
|
||||
@@ -3102,7 +3102,7 @@ App::post('/v1/messaging/messages/email')
|
||||
case MessageStatus::SCHEDULED:
|
||||
$schedule = $dbForPlatform->createDocument('schedules', new Document([
|
||||
'region' => $project->getAttribute('region'),
|
||||
'resourceType' => 'message',
|
||||
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
|
||||
'resourceId' => $message->getId(),
|
||||
'resourceInternalId' => $message->getSequence(),
|
||||
'resourceUpdatedAt' => DateTime::now(),
|
||||
@@ -3244,7 +3244,7 @@ App::post('/v1/messaging/messages/sms')
|
||||
case MessageStatus::SCHEDULED:
|
||||
$schedule = $dbForPlatform->createDocument('schedules', new Document([
|
||||
'region' => $project->getAttribute('region'),
|
||||
'resourceType' => 'message',
|
||||
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
|
||||
'resourceId' => $message->getId(),
|
||||
'resourceInternalId' => $message->getSequence(),
|
||||
'resourceUpdatedAt' => DateTime::now(),
|
||||
@@ -3462,7 +3462,7 @@ App::post('/v1/messaging/messages/push')
|
||||
case MessageStatus::SCHEDULED:
|
||||
$schedule = $dbForPlatform->createDocument('schedules', new Document([
|
||||
'region' => $project->getAttribute('region'),
|
||||
'resourceType' => 'message',
|
||||
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
|
||||
'resourceId' => $message->getId(),
|
||||
'resourceInternalId' => $message->getSequence(),
|
||||
'resourceUpdatedAt' => DateTime::now(),
|
||||
@@ -3863,7 +3863,7 @@ App::patch('/v1/messaging/messages/email/:messageId')
|
||||
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
|
||||
$schedule = $dbForPlatform->createDocument('schedules', new Document([
|
||||
'region' => $project->getAttribute('region'),
|
||||
'resourceType' => 'message',
|
||||
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
|
||||
'resourceId' => $message->getId(),
|
||||
'resourceInternalId' => $message->getSequence(),
|
||||
'resourceUpdatedAt' => DateTime::now(),
|
||||
@@ -4084,7 +4084,7 @@ App::patch('/v1/messaging/messages/sms/:messageId')
|
||||
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
|
||||
$schedule = $dbForPlatform->createDocument('schedules', new Document([
|
||||
'region' => $project->getAttribute('region'),
|
||||
'resourceType' => 'message',
|
||||
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
|
||||
'resourceId' => $message->getId(),
|
||||
'resourceInternalId' => $message->getSequence(),
|
||||
'resourceUpdatedAt' => DateTime::now(),
|
||||
@@ -4258,7 +4258,7 @@ App::patch('/v1/messaging/messages/push/:messageId')
|
||||
if (\is_null($currentScheduledAt) && !\is_null($scheduledAt)) {
|
||||
$schedule = $dbForPlatform->createDocument('schedules', new Document([
|
||||
'region' => $project->getAttribute('region'),
|
||||
'resourceType' => 'message',
|
||||
'resourceType' => SCHEDULE_RESOURCE_TYPE_MESSAGE,
|
||||
'resourceId' => $message->getId(),
|
||||
'resourceInternalId' => $message->getSequence(),
|
||||
'resourceUpdatedAt' => DateTime::now(),
|
||||
|
||||
@@ -1756,7 +1756,28 @@ App::post('/v1/projects/:projectId/platforms')
|
||||
]
|
||||
))
|
||||
->param('projectId', '', new UID(), 'Project unique ID.')
|
||||
->param('type', null, new WhiteList([Platform::TYPE_WEB, Platform::TYPE_FLUTTER_WEB, Platform::TYPE_FLUTTER_IOS, Platform::TYPE_FLUTTER_ANDROID, Platform::TYPE_FLUTTER_LINUX, Platform::TYPE_FLUTTER_MACOS, Platform::TYPE_FLUTTER_WINDOWS, Platform::TYPE_APPLE_IOS, Platform::TYPE_APPLE_MACOS, Platform::TYPE_APPLE_WATCHOS, Platform::TYPE_APPLE_TVOS, Platform::TYPE_ANDROID, Platform::TYPE_UNITY, Platform::TYPE_REACT_NATIVE_IOS, Platform::TYPE_REACT_NATIVE_ANDROID], true), 'Platform type.')
|
||||
->param(
|
||||
'type',
|
||||
null,
|
||||
new WhiteList([
|
||||
Platform::TYPE_WEB,
|
||||
Platform::TYPE_FLUTTER_WEB,
|
||||
Platform::TYPE_FLUTTER_IOS,
|
||||
Platform::TYPE_FLUTTER_ANDROID,
|
||||
Platform::TYPE_FLUTTER_LINUX,
|
||||
Platform::TYPE_FLUTTER_MACOS,
|
||||
Platform::TYPE_FLUTTER_WINDOWS,
|
||||
Platform::TYPE_APPLE_IOS,
|
||||
Platform::TYPE_APPLE_MACOS,
|
||||
Platform::TYPE_APPLE_WATCHOS,
|
||||
Platform::TYPE_APPLE_TVOS,
|
||||
Platform::TYPE_ANDROID,
|
||||
Platform::TYPE_UNITY,
|
||||
Platform::TYPE_REACT_NATIVE_IOS,
|
||||
Platform::TYPE_REACT_NATIVE_ANDROID,
|
||||
], true),
|
||||
'Platform type. Possible values are: web, flutter-web, flutter-ios, flutter-android, flutter-linux, flutter-macos, flutter-windows, apple-ios, apple-macos, apple-watchos, apple-tvos, android, unity, react-native-ios, react-native-android.'
|
||||
)
|
||||
->param('name', null, new Text(128), 'Platform name. Max length: 128 chars.')
|
||||
->param('key', '', new Text(256), 'Package name for Android or bundle ID for iOS or macOS. Max length: 256 chars.', true)
|
||||
->param('store', '', new Text(256), 'App store or Google Play store ID. Max length: 256 chars.', true)
|
||||
|
||||
@@ -1,318 +0,0 @@
|
||||
<?php
|
||||
|
||||
use Appwrite\Event\Certificate;
|
||||
use Appwrite\Event\Delete;
|
||||
use Appwrite\Event\Event;
|
||||
use Appwrite\Extend\Exception;
|
||||
use Appwrite\Network\Validator\DNS;
|
||||
use Appwrite\SDK\AuthType;
|
||||
use Appwrite\SDK\ContentType;
|
||||
use Appwrite\SDK\Method;
|
||||
use Appwrite\SDK\Response as SDKResponse;
|
||||
use Appwrite\Utopia\Database\Validator\Queries\Rules;
|
||||
use Appwrite\Utopia\Response;
|
||||
use Utopia\App;
|
||||
use Utopia\Database\Database;
|
||||
use Utopia\Database\Document;
|
||||
use Utopia\Database\Exception\Query as QueryException;
|
||||
use Utopia\Database\Query;
|
||||
use Utopia\Database\Validator\Query\Cursor;
|
||||
use Utopia\Database\Validator\UID;
|
||||
use Utopia\Domains\Domain;
|
||||
use Utopia\Logger\Log;
|
||||
use Utopia\System\System;
|
||||
use Utopia\Validator\AnyOf;
|
||||
use Utopia\Validator\IP;
|
||||
use Utopia\Validator\Text;
|
||||
|
||||
App::get('/v1/proxy/rules')
|
||||
->groups(['api', 'proxy'])
|
||||
->desc('List rules')
|
||||
->label('scope', 'rules.read')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'proxy',
|
||||
group: null,
|
||||
name: 'listRules',
|
||||
description: '/docs/references/proxy/list-rules.md',
|
||||
auth: [AuthType::ADMIN],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_PROXY_RULE_LIST,
|
||||
)
|
||||
]
|
||||
))
|
||||
->param('queries', [], new Rules(), 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/databases#querying-documents). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' queries are allowed, each ' . APP_LIMIT_ARRAY_ELEMENT_SIZE . ' characters long. You may filter on the following attributes: ' . implode(', ', Rules::ALLOWED_ATTRIBUTES), true)
|
||||
->param('search', '', new Text(256), 'Search term to filter your list results. Max length: 256 chars.', true)
|
||||
->inject('response')
|
||||
->inject('project')
|
||||
->inject('dbForPlatform')
|
||||
->action(function (array $queries, string $search, Response $response, Document $project, Database $dbForPlatform) {
|
||||
try {
|
||||
$queries = Query::parseQueries($queries);
|
||||
} catch (QueryException $e) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
|
||||
}
|
||||
|
||||
if (!empty($search)) {
|
||||
$queries[] = Query::search('search', $search);
|
||||
}
|
||||
|
||||
$queries[] = Query::equal('projectInternalId', [$project->getSequence()]);
|
||||
|
||||
/**
|
||||
* Get cursor document if there was a cursor query, we use array_filter and reset for reference $cursor to $queries
|
||||
*/
|
||||
$cursor = \array_filter($queries, function ($query) {
|
||||
return \in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]);
|
||||
});
|
||||
$cursor = reset($cursor);
|
||||
if ($cursor) {
|
||||
/** @var Query $cursor */
|
||||
|
||||
$validator = new Cursor();
|
||||
if (!$validator->isValid($cursor)) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $validator->getDescription());
|
||||
}
|
||||
|
||||
$ruleId = $cursor->getValue();
|
||||
$cursorDocument = $dbForPlatform->getDocument('rules', $ruleId);
|
||||
|
||||
if ($cursorDocument->isEmpty()) {
|
||||
throw new Exception(Exception::GENERAL_CURSOR_NOT_FOUND, "Rule '{$ruleId}' for the 'cursor' value not found.");
|
||||
}
|
||||
|
||||
$cursor->setValue($cursorDocument);
|
||||
}
|
||||
|
||||
$filterQueries = Query::groupByType($queries)['filters'];
|
||||
|
||||
$rules = $dbForPlatform->find('rules', $queries);
|
||||
foreach ($rules as $rule) {
|
||||
$certificate = $dbForPlatform->getDocument('certificates', $rule->getAttribute('certificateId', ''));
|
||||
$rule->setAttribute('logs', $certificate->getAttribute('logs', ''));
|
||||
$rule->setAttribute('renewAt', $certificate->getAttribute('renewDate', ''));
|
||||
}
|
||||
|
||||
$response->dynamic(new Document([
|
||||
'rules' => $rules,
|
||||
'total' => $dbForPlatform->count('rules', $filterQueries, APP_LIMIT_COUNT),
|
||||
]), Response::MODEL_PROXY_RULE_LIST);
|
||||
});
|
||||
|
||||
App::get('/v1/proxy/rules/:ruleId')
|
||||
->groups(['api', 'proxy'])
|
||||
->desc('Get rule')
|
||||
->label('scope', 'rules.read')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'proxy',
|
||||
group: null,
|
||||
name: 'getRule',
|
||||
description: '/docs/references/proxy/get-rule.md',
|
||||
auth: [AuthType::ADMIN],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_PROXY_RULE,
|
||||
)
|
||||
]
|
||||
))
|
||||
->param('ruleId', '', new UID(), 'Rule ID.')
|
||||
->inject('response')
|
||||
->inject('project')
|
||||
->inject('dbForPlatform')
|
||||
->action(function (string $ruleId, Response $response, Document $project, Database $dbForPlatform) {
|
||||
$rule = $dbForPlatform->getDocument('rules', $ruleId);
|
||||
|
||||
if ($rule->isEmpty() || $rule->getAttribute('projectInternalId') !== $project->getSequence()) {
|
||||
throw new Exception(Exception::RULE_NOT_FOUND);
|
||||
}
|
||||
|
||||
$certificate = $dbForPlatform->getDocument('certificates', $rule->getAttribute('certificateId', ''));
|
||||
$rule->setAttribute('logs', $certificate->getAttribute('logs', ''));
|
||||
$rule->setAttribute('renewAt', $certificate->getAttribute('renewDate', ''));
|
||||
|
||||
$response->dynamic($rule, Response::MODEL_PROXY_RULE);
|
||||
});
|
||||
|
||||
App::delete('/v1/proxy/rules/:ruleId')
|
||||
->groups(['api', 'proxy'])
|
||||
->desc('Delete rule')
|
||||
->label('scope', 'rules.write')
|
||||
->label('event', 'rules.[ruleId].delete')
|
||||
->label('audits.event', 'rules.delete')
|
||||
->label('audits.resource', 'rule/{request.ruleId}')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'proxy',
|
||||
group: null,
|
||||
name: 'deleteRule',
|
||||
description: '/docs/references/proxy/delete-rule.md',
|
||||
auth: [AuthType::ADMIN],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_NOCONTENT,
|
||||
model: Response::MODEL_NONE,
|
||||
)
|
||||
],
|
||||
contentType: ContentType::NONE
|
||||
))
|
||||
->param('ruleId', '', new UID(), 'Rule ID.')
|
||||
->inject('response')
|
||||
->inject('project')
|
||||
->inject('dbForPlatform')
|
||||
->inject('queueForDeletes')
|
||||
->inject('queueForEvents')
|
||||
->action(function (string $ruleId, Response $response, Document $project, Database $dbForPlatform, Delete $queueForDeletes, Event $queueForEvents) {
|
||||
$rule = $dbForPlatform->getDocument('rules', $ruleId);
|
||||
|
||||
if ($rule->isEmpty() || $rule->getAttribute('projectInternalId') !== $project->getSequence()) {
|
||||
throw new Exception(Exception::RULE_NOT_FOUND);
|
||||
}
|
||||
|
||||
$dbForPlatform->deleteDocument('rules', $rule->getId());
|
||||
|
||||
$queueForDeletes
|
||||
->setType(DELETE_TYPE_DOCUMENT)
|
||||
->setDocument($rule);
|
||||
|
||||
$queueForEvents->setParam('ruleId', $rule->getId());
|
||||
|
||||
$response->noContent();
|
||||
});
|
||||
|
||||
App::patch('/v1/proxy/rules/:ruleId/verification')
|
||||
->desc('Update rule verification status')
|
||||
->groups(['api', 'proxy'])
|
||||
->label('scope', 'rules.write')
|
||||
->label('event', 'rules.[ruleId].update')
|
||||
->label('audits.event', 'rule.update')
|
||||
->label('audits.resource', 'rule/{response.$id}')
|
||||
->label('sdk', new Method(
|
||||
namespace: 'proxy',
|
||||
group: null,
|
||||
name: 'updateRuleVerification',
|
||||
description: '/docs/references/proxy/update-rule-verification.md',
|
||||
auth: [AuthType::ADMIN],
|
||||
responses: [
|
||||
new SDKResponse(
|
||||
code: Response::STATUS_CODE_OK,
|
||||
model: Response::MODEL_PROXY_RULE,
|
||||
)
|
||||
]
|
||||
))
|
||||
->param('ruleId', '', new UID(), 'Rule ID.')
|
||||
->inject('response')
|
||||
->inject('queueForCertificates')
|
||||
->inject('queueForEvents')
|
||||
->inject('project')
|
||||
->inject('dbForPlatform')
|
||||
->inject('log')
|
||||
->action(function (string $ruleId, Response $response, Certificate $queueForCertificates, Event $queueForEvents, Document $project, Database $dbForPlatform, Log $log) {
|
||||
$rule = $dbForPlatform->getDocument('rules', $ruleId);
|
||||
|
||||
if ($rule->isEmpty() || $rule->getAttribute('projectInternalId') !== $project->getSequence()) {
|
||||
throw new Exception(Exception::RULE_NOT_FOUND);
|
||||
}
|
||||
|
||||
$targetCNAME = null;
|
||||
switch ($rule->getAttribute('type', '')) {
|
||||
case 'api':
|
||||
// For example: fra.cloud.appwrite.io
|
||||
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_TARGET_CNAME', ''));
|
||||
break;
|
||||
case 'redirect':
|
||||
// For example: appwrite.network
|
||||
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_SITES', ''));
|
||||
break;
|
||||
case 'deployment':
|
||||
switch ($rule->getAttribute('deploymentResourceType', '')) {
|
||||
case 'function':
|
||||
// For example: fra.appwrite.run
|
||||
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_FUNCTIONS', ''));
|
||||
break;
|
||||
case 'site':
|
||||
// For example: appwrite.network
|
||||
$targetCNAME = new Domain(System::getEnv('_APP_DOMAIN_SITES', ''));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
// no break
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
$validators = [];
|
||||
|
||||
if (!is_null($targetCNAME)) {
|
||||
if ($targetCNAME->isKnown() && !$targetCNAME->isTest()) {
|
||||
$validators[] = new DNS($targetCNAME->get(), DNS::RECORD_CNAME);
|
||||
}
|
||||
}
|
||||
|
||||
if ((new IP(IP::V4))->isValid(System::getEnv('_APP_DOMAIN_TARGET_A', ''))) {
|
||||
$validators[] = new DNS(System::getEnv('_APP_DOMAIN_TARGET_A', ''), DNS::RECORD_A);
|
||||
}
|
||||
if ((new IP(IP::V6))->isValid(System::getEnv('_APP_DOMAIN_TARGET_AAAA', ''))) {
|
||||
$validators[] = new DNS(System::getEnv('_APP_DOMAIN_TARGET_AAAA', ''), DNS::RECORD_AAAA);
|
||||
}
|
||||
|
||||
if (empty($validators)) {
|
||||
throw new Exception(Exception::GENERAL_SERVER_ERROR, 'At least one of domain targets environment variable must be configured.');
|
||||
}
|
||||
|
||||
if ($rule->getAttribute('verification') === true) {
|
||||
return $response->dynamic($rule, Response::MODEL_PROXY_RULE);
|
||||
}
|
||||
|
||||
$validator = new AnyOf($validators, AnyOf::TYPE_STRING);
|
||||
$domain = new Domain($rule->getAttribute('domain', ''));
|
||||
|
||||
$validationStart = \microtime(true);
|
||||
if (!$validator->isValid($domain->get())) {
|
||||
$log->addExtra('dnsTiming', \strval(\microtime(true) - $validationStart));
|
||||
$log->addTag('dnsDomain', $domain->get());
|
||||
|
||||
$errors = [];
|
||||
foreach ($validators as $validator) {
|
||||
if (!empty($validator->getLogs())) {
|
||||
$errors[] = $validator->getLogs();
|
||||
}
|
||||
}
|
||||
|
||||
$error = \implode("\n", $errors);
|
||||
$log->addExtra('dnsResponse', \is_array($error) ? \json_encode($error) : \strval($error));
|
||||
|
||||
throw new Exception(Exception::RULE_VERIFICATION_FAILED);
|
||||
}
|
||||
|
||||
// Ensure CAA won't block certificate issuance
|
||||
if (!empty(System::getEnv('_APP_DOMAIN_TARGET_CAA', ''))) {
|
||||
$validationStart = \microtime(true);
|
||||
$validator = new DNS(System::getEnv('_APP_DOMAIN_TARGET_CAA', ''), DNS::RECORD_CAA);
|
||||
if (!$validator->isValid($domain->get())) {
|
||||
$log->addExtra('dnsTimingCaa', \strval(\microtime(true) - $validationStart));
|
||||
$log->addTag('dnsDomain', $domain->get());
|
||||
$error = $validator->getDescription();
|
||||
$log->addExtra('dnsResponse', \is_array($error) ? \json_encode($error) : \strval($error));
|
||||
throw new Exception(Exception::RULE_VERIFICATION_FAILED, 'Domain verification failed because CAA records do not allow Appwrite\'s certificate issuer.');
|
||||
}
|
||||
}
|
||||
|
||||
$dbForPlatform->updateDocument('rules', $rule->getId(), $rule->setAttribute('status', 'verifying'));
|
||||
|
||||
// Issue a TLS certificate when domain is verified
|
||||
$queueForCertificates
|
||||
->setDomain(new Document([
|
||||
'domain' => $rule->getAttribute('domain'),
|
||||
'domainType' => $rule->getAttribute('deploymentResourceType', $rule->getAttribute('type')),
|
||||
]))
|
||||
->trigger();
|
||||
|
||||
$queueForEvents->setParam('ruleId', $rule->getId());
|
||||
|
||||
$certificate = $dbForPlatform->getDocument('certificates', $rule->getAttribute('certificateId', ''));
|
||||
$rule->setAttribute('logs', $certificate->getAttribute('logs', ''));
|
||||
|
||||
$response->dynamic($rule, Response::MODEL_PROXY_RULE);
|
||||
});
|
||||
@@ -225,6 +225,8 @@ App::get('/v1/storage/buckets')
|
||||
$total = $dbForProject->count('buckets', $filterQueries, APP_LIMIT_COUNT);
|
||||
} catch (OrderException $e) {
|
||||
throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null.");
|
||||
} catch (QueryException $e) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
|
||||
}
|
||||
$response->dynamic(new Document([
|
||||
'buckets' => $buckets,
|
||||
@@ -853,6 +855,8 @@ App::get('/v1/storage/buckets/:bucketId/files')
|
||||
throw new Exception(Exception::STORAGE_BUCKET_NOT_FOUND);
|
||||
} catch (OrderException $e) {
|
||||
throw new Exception(Exception::DATABASE_QUERY_ORDER_NULL, "The order attribute '{$e->getAttribute()}' had a null value. Cursor pagination requires all documents order attribute values are non-null.");
|
||||
} catch (QueryException $e) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
|
||||
}
|
||||
|
||||
$response->dynamic(new Document([
|
||||
|
||||
@@ -246,10 +246,11 @@ App::init()
|
||||
$role = $apiKey->getRole();
|
||||
$scopes = $apiKey->getScopes();
|
||||
|
||||
// Disable authorization checks for API keys
|
||||
Authorization::setDefaultStatus(false);
|
||||
|
||||
if ($apiKey->getRole() === Auth::USER_ROLE_APPS) {
|
||||
// Disable authorization checks for API keys
|
||||
Authorization::setDefaultStatus(false);
|
||||
|
||||
$user = new Document([
|
||||
'$id' => '',
|
||||
'status' => true,
|
||||
|
||||
+9
-5
@@ -10,6 +10,7 @@ use Swoole\Http\Response as SwooleResponse;
|
||||
use Swoole\Http\Server;
|
||||
use Swoole\Process;
|
||||
use Swoole\Table;
|
||||
use Swoole\Timer;
|
||||
use Utopia\App;
|
||||
use Utopia\Audit\Audit;
|
||||
use Utopia\CLI\Console;
|
||||
@@ -156,11 +157,16 @@ $http->on(Constant::EVENT_WORKER_START, function ($server, $workerId) {
|
||||
Console::success('Worker ' . ++$workerId . ' started successfully');
|
||||
});
|
||||
|
||||
$http->on(Constant::EVENT_BEFORE_RELOAD, function ($server, $workerId) {
|
||||
$http->on(Constant::EVENT_WORKER_STOP, function ($server, $workerId) {
|
||||
Timer::clearAll();
|
||||
Console::success('Worker ' . ++$workerId . ' stopped successfully');
|
||||
});
|
||||
|
||||
$http->on(Constant::EVENT_BEFORE_RELOAD, function ($server) {
|
||||
Console::success('Starting reload...');
|
||||
});
|
||||
|
||||
$http->on(Constant::EVENT_AFTER_RELOAD, function ($server, $workerId) {
|
||||
$http->on(Constant::EVENT_AFTER_RELOAD, function ($server) {
|
||||
Console::success('Reload completed...');
|
||||
});
|
||||
|
||||
@@ -550,7 +556,7 @@ $http->on(Constant::EVENT_TASK, function () use ($register, $domains) {
|
||||
/** @var Utopia\Database\Database $dbForPlatform */
|
||||
$dbForPlatform = $app->getResource('dbForPlatform');
|
||||
|
||||
Console::loop(function () use ($dbForPlatform, $domains, &$lastSyncUpdate) {
|
||||
Timer::tick(DOMAIN_SYNC_TIMER * 1000, function () use ($dbForPlatform, $domains, &$lastSyncUpdate) {
|
||||
try {
|
||||
$time = DateTime::now();
|
||||
$limit = 1000;
|
||||
@@ -589,8 +595,6 @@ $http->on(Constant::EVENT_TASK, function () use ($register, $domains) {
|
||||
} catch (Throwable $th) {
|
||||
Console::error($th->getMessage());
|
||||
}
|
||||
}, DOMAIN_SYNC_TIMER, 0, function ($error) {
|
||||
Console::error($error);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -263,7 +263,6 @@ const METRIC_SITES_ID_INBOUND = 'sites.{siteInternalId}.inbound';
|
||||
const METRIC_SITES_ID_OUTBOUND = 'sites.{siteInternalId}.outbound';
|
||||
|
||||
// Resource types
|
||||
|
||||
const RESOURCE_TYPE_PROJECTS = 'projects';
|
||||
const RESOURCE_TYPE_FUNCTIONS = 'functions';
|
||||
const RESOURCE_TYPE_SITES = 'sites';
|
||||
@@ -273,10 +272,15 @@ const RESOURCE_TYPE_PROVIDERS = 'providers';
|
||||
const RESOURCE_TYPE_TOPICS = 'topics';
|
||||
const RESOURCE_TYPE_SUBSCRIBERS = 'subscribers';
|
||||
const RESOURCE_TYPE_MESSAGES = 'messages';
|
||||
const RESOURCE_TYPE_EXECUTIONS = 'executions';
|
||||
|
||||
// Resource types for Tokens
|
||||
|
||||
const TOKENS_RESOURCE_TYPE_FILES = 'files';
|
||||
const TOKENS_RESOURCE_TYPE_SITES = 'sites';
|
||||
const TOKENS_RESOURCE_TYPE_FUNCTIONS = 'functions';
|
||||
const TOKENS_RESOURCE_TYPE_DATABASES = 'databases';
|
||||
|
||||
// Resource types for Schedules
|
||||
const SCHEDULE_RESOURCE_TYPE_EXECUTION = 'execution';
|
||||
const SCHEDULE_RESOURCE_TYPE_FUNCTION = 'function';
|
||||
const SCHEDULE_RESOURCE_TYPE_MESSAGE = 'message';
|
||||
|
||||
@@ -255,6 +255,8 @@ Database::addFilter(
|
||||
->find('variables', [
|
||||
Query::equal('resourceInternalId', [$document->getSequence()]),
|
||||
Query::equal('resourceType', $resourceType),
|
||||
Query::orderAsc('resourceType'),
|
||||
Query::orderAsc(),
|
||||
Query::limit(APP_LIMIT_SUBQUERY),
|
||||
]);
|
||||
}
|
||||
|
||||
+38
-27
@@ -151,7 +151,7 @@ App::setResource('queueForMigrations', function (Publisher $publisher) {
|
||||
App::setResource('queueForStatsResources', function (Publisher $publisher) {
|
||||
return new StatsResources($publisher);
|
||||
}, ['publisher']);
|
||||
App::setResource('platforms', function (Request $request, Document $console, Document $project) {
|
||||
App::setResource('platforms', function (Request $request, Document $console, Document $project, Database $dbForPlatform) {
|
||||
$console->setAttribute('platforms', [ // Always allow current host
|
||||
'$collection' => ID::custom('platforms'),
|
||||
'name' => 'Current Host',
|
||||
@@ -190,11 +190,40 @@ App::setResource('platforms', function (Request $request, Document $console, Doc
|
||||
], Document::SET_TYPE_APPEND);
|
||||
}
|
||||
|
||||
$origin = \parse_url($request->getOrigin(), PHP_URL_HOST);
|
||||
|
||||
if (empty($origin)) {
|
||||
$origin = \parse_url($request->getReferer(), PHP_URL_HOST);
|
||||
}
|
||||
|
||||
// Safe if rule with same project ID exists
|
||||
if (!empty($origin)) {
|
||||
if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
|
||||
$rule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', md5($origin ?? '')));
|
||||
} else {
|
||||
$rule = Authorization::skip(
|
||||
fn () => $dbForPlatform->find('rules', [
|
||||
Query::equal('domain', [$origin]),
|
||||
Query::limit(1)
|
||||
])
|
||||
)[0] ?? new Document();
|
||||
}
|
||||
|
||||
if (!$rule->isEmpty() && $rule->getAttribute('projectInternalId') === $project->getSequence()) {
|
||||
$project->setAttribute('platforms', [
|
||||
'$collection' => ID::custom('platforms'),
|
||||
'type' => Platform::TYPE_WEB,
|
||||
'name' => $origin,
|
||||
'hostname' => $origin,
|
||||
], Document::SET_TYPE_APPEND);
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
...$console->getAttribute('platforms', []),
|
||||
...$project->getAttribute('platforms', []),
|
||||
];
|
||||
}, ['request', 'console', 'project']);
|
||||
}, ['request', 'console', 'project', 'dbForPlatform']);
|
||||
|
||||
App::setResource('user', function ($mode, $project, $console, $request, $response, $dbForProject, $dbForPlatform) {
|
||||
/** @var Appwrite\Utopia\Request $request */
|
||||
@@ -375,7 +404,7 @@ App::setResource('dbForProject', function (Group $pools, Database $dbForPlatform
|
||||
if (\in_array($dsn->getHost(), $sharedTables)) {
|
||||
$database
|
||||
->setSharedTables(true)
|
||||
->setTenant((int)$project->getSequence())
|
||||
->setTenant((int) $project->getSequence())
|
||||
->setNamespace($dsn->getParam('namespace'));
|
||||
} else {
|
||||
$database
|
||||
@@ -428,7 +457,7 @@ App::setResource('getProjectDB', function (Group $pools, Database $dbForPlatform
|
||||
if (\in_array($dsn->getHost(), $sharedTables)) {
|
||||
$database
|
||||
->setSharedTables(true)
|
||||
->setTenant((int)$project->getSequence())
|
||||
->setTenant((int) $project->getSequence())
|
||||
->setNamespace($dsn->getParam('namespace'));
|
||||
} else {
|
||||
$database
|
||||
@@ -458,7 +487,7 @@ App::setResource('getLogsDB', function (Group $pools, Cache $cache) {
|
||||
|
||||
return function (?Document $project = null) use ($pools, $cache, &$database) {
|
||||
if ($database !== null && $project !== null && !$project->isEmpty() && $project->getId() !== 'console') {
|
||||
$database->setTenant((int)$project->getSequence());
|
||||
$database->setTenant((int) $project->getSequence());
|
||||
return $database;
|
||||
}
|
||||
|
||||
@@ -473,7 +502,7 @@ App::setResource('getLogsDB', function (Group $pools, Cache $cache) {
|
||||
|
||||
// set tenant
|
||||
if ($project !== null && !$project->isEmpty() && $project->getId() !== 'console') {
|
||||
$database->setTenant((int)$project->getSequence());
|
||||
$database->setTenant((int) $project->getSequence());
|
||||
}
|
||||
|
||||
return $database;
|
||||
@@ -501,7 +530,7 @@ App::setResource('redis', function () {
|
||||
$pass = System::getEnv('_APP_REDIS_PASS', '');
|
||||
|
||||
$redis = new \Redis();
|
||||
@$redis->pconnect($host, (int)$port);
|
||||
@$redis->pconnect($host, (int) $port);
|
||||
if ($pass) {
|
||||
$redis->auth($pass);
|
||||
}
|
||||
@@ -714,7 +743,7 @@ App::setResource('schema', function ($utopia, $dbForProject) {
|
||||
// NOTE: `params` and `urls` are not used internally in the `Schema::build` function below!
|
||||
$params = [
|
||||
'list' => function (string $databaseId, string $collectionId, array $args) {
|
||||
return [ 'queries' => $args['queries']];
|
||||
return ['queries' => $args['queries']];
|
||||
},
|
||||
'create' => function (string $databaseId, string $collectionId, array $args) {
|
||||
$id = $args['id'] ?? 'unique()';
|
||||
@@ -963,7 +992,7 @@ App::setResource('resourceToken', function ($project, $dbForProject, $request) {
|
||||
}
|
||||
|
||||
$accessedAt = $token->getAttribute('accessedAt', 0);
|
||||
if (empty($accessedAt) || DatabaseDateTime::formatTz(DatabaseDateTime::addSeconds(new \DateTime(), - APP_RESOURCE_TOKEN_ACCESS)) > $accessedAt) {
|
||||
if (empty($accessedAt) || DatabaseDateTime::formatTz(DatabaseDateTime::addSeconds(new \DateTime(), -APP_RESOURCE_TOKEN_ACCESS)) > $accessedAt) {
|
||||
$token->setAttribute('accessedAt', DatabaseDateTime::now());
|
||||
Authorization::skip(fn () => $dbForProject->updateDocument('resourceTokens', $token->getId(), $token));
|
||||
}
|
||||
@@ -1005,24 +1034,6 @@ App::setResource('httpReferrerSafe', function (Request $request, string $httpRef
|
||||
return $referrer;
|
||||
}
|
||||
|
||||
// Safe if rule with same project ID exists
|
||||
if (!empty($origin)) {
|
||||
if (System::getEnv('_APP_RULES_FORMAT') === 'md5') {
|
||||
$rule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', md5($origin ?? '')));
|
||||
} else {
|
||||
$rule = Authorization::skip(
|
||||
fn () => $dbForPlatform->find('rules', [
|
||||
Query::equal('domain', [$origin]),
|
||||
Query::limit(1)
|
||||
])
|
||||
)[0] ?? new Document();
|
||||
}
|
||||
|
||||
if (!$rule->isEmpty() && $rule->getAttribute('projectInternalId') === $project->getSequence()) {
|
||||
return $referrer;
|
||||
}
|
||||
}
|
||||
|
||||
// Unsafe; Localhost is always safe for ease of local development
|
||||
$origin = 'localhost';
|
||||
$protocol = \parse_url($request->getOrigin($httpReferrer), PHP_URL_SCHEME);
|
||||
|
||||
+22
-3
@@ -604,11 +604,18 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server,
|
||||
$code = 500;
|
||||
}
|
||||
|
||||
$message = $th->getMessage();
|
||||
|
||||
// sanitize 5xx errors
|
||||
if ($code >= 500 && !App::isDevelopment()) {
|
||||
$message = 'Error: Server Error';
|
||||
}
|
||||
|
||||
$response = [
|
||||
'type' => 'error',
|
||||
'data' => [
|
||||
'code' => $code,
|
||||
'message' => $th->getMessage()
|
||||
'message' => $message
|
||||
]
|
||||
];
|
||||
|
||||
@@ -705,11 +712,23 @@ $server->onMessage(function (int $connection, string $message) use ($server, $re
|
||||
throw new Exception(Exception::REALTIME_MESSAGE_FORMAT_INVALID, 'Message type is not valid.');
|
||||
}
|
||||
} catch (Throwable $th) {
|
||||
$code = $th->getCode();
|
||||
if (!is_int($code)) {
|
||||
$code = 500;
|
||||
}
|
||||
|
||||
$message = $th->getMessage();
|
||||
|
||||
// sanitize 5xx errors
|
||||
if ($code >= 500 && !App::isDevelopment()) {
|
||||
$message = 'Error: Server Error';
|
||||
}
|
||||
|
||||
$response = [
|
||||
'type' => 'error',
|
||||
'data' => [
|
||||
'code' => $th->getCode(),
|
||||
'message' => $th->getMessage()
|
||||
'code' => $code,
|
||||
'message' => $message
|
||||
]
|
||||
];
|
||||
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@
|
||||
"utopia-php/cache": "0.13.*",
|
||||
"utopia-php/cli": "0.15.*",
|
||||
"utopia-php/config": "0.2.*",
|
||||
"utopia-php/database": "1.*",
|
||||
"utopia-php/database": "2.*",
|
||||
"utopia-php/detector": "0.1.*",
|
||||
"utopia-php/domains": "0.8.*",
|
||||
"utopia-php/dns": "0.3.*",
|
||||
|
||||
Generated
+28
-28
@@ -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": "7553e976312b0423cc31544abb91caec",
|
||||
"content-hash": "773efb29b9b584b1249790e0016c823a",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adhocore/jwt",
|
||||
@@ -3293,16 +3293,16 @@
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/abuse",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/abuse.git",
|
||||
"reference": "c5e2232033b507a07f72180dc56d37e1872ee7be"
|
||||
"reference": "cd591568791556d246d901d6aaf9935ab02c3f9a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/abuse/zipball/c5e2232033b507a07f72180dc56d37e1872ee7be",
|
||||
"reference": "c5e2232033b507a07f72180dc56d37e1872ee7be",
|
||||
"url": "https://api.github.com/repos/utopia-php/abuse/zipball/cd591568791556d246d901d6aaf9935ab02c3f9a",
|
||||
"reference": "cd591568791556d246d901d6aaf9935ab02c3f9a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3310,7 +3310,7 @@
|
||||
"ext-pdo": "*",
|
||||
"ext-redis": "*",
|
||||
"php": ">=8.0",
|
||||
"utopia-php/database": "1.*"
|
||||
"utopia-php/database": "2.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/pint": "1.*",
|
||||
@@ -3338,9 +3338,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/abuse/issues",
|
||||
"source": "https://github.com/utopia-php/abuse/tree/1.0.0"
|
||||
"source": "https://github.com/utopia-php/abuse/tree/1.0.1"
|
||||
},
|
||||
"time": "2025-08-13T09:12:54+00:00"
|
||||
"time": "2025-09-04T12:46:54+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/analytics",
|
||||
@@ -3390,21 +3390,21 @@
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/audit",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/audit.git",
|
||||
"reference": "c0ed75f4d068f1f6c2e7149a909490d4214e72bb"
|
||||
"reference": "5ef26d6a2ab2db7bb86288a1a6ef970307b46f22"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/audit/zipball/c0ed75f4d068f1f6c2e7149a909490d4214e72bb",
|
||||
"reference": "c0ed75f4d068f1f6c2e7149a909490d4214e72bb",
|
||||
"url": "https://api.github.com/repos/utopia-php/audit/zipball/5ef26d6a2ab2db7bb86288a1a6ef970307b46f22",
|
||||
"reference": "5ef26d6a2ab2db7bb86288a1a6ef970307b46f22",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.0",
|
||||
"utopia-php/database": "1.*"
|
||||
"utopia-php/database": "2.*"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/pint": "1.*",
|
||||
@@ -3431,9 +3431,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/audit/issues",
|
||||
"source": "https://github.com/utopia-php/audit/tree/1.0.0"
|
||||
"source": "https://github.com/utopia-php/audit/tree/1.0.1"
|
||||
},
|
||||
"time": "2025-08-13T09:09:00+00:00"
|
||||
"time": "2025-09-04T12:46:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/cache",
|
||||
@@ -3635,16 +3635,16 @@
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/database",
|
||||
"version": "1.5.1",
|
||||
"version": "2.3.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/database.git",
|
||||
"reference": "56efe4daaf23abb753553acffccdcc04cd6178c9"
|
||||
"reference": "35c978ddd20b649d119296094686d3cc9fcf161f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/database/zipball/56efe4daaf23abb753553acffccdcc04cd6178c9",
|
||||
"reference": "56efe4daaf23abb753553acffccdcc04cd6178c9",
|
||||
"url": "https://api.github.com/repos/utopia-php/database/zipball/35c978ddd20b649d119296094686d3cc9fcf161f",
|
||||
"reference": "35c978ddd20b649d119296094686d3cc9fcf161f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3685,9 +3685,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/database/issues",
|
||||
"source": "https://github.com/utopia-php/database/tree/1.5.1"
|
||||
"source": "https://github.com/utopia-php/database/tree/2.3.2"
|
||||
},
|
||||
"time": "2025-10-01T04:44:14+00:00"
|
||||
"time": "2025-10-07T03:09:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/detector",
|
||||
@@ -4187,16 +4187,16 @@
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/migration",
|
||||
"version": "1.2.0",
|
||||
"version": "1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/migration.git",
|
||||
"reference": "42ff497c5231f5a727d1e229419ff1d2195d8093"
|
||||
"reference": "6fb6f8f032cd34c3c65728a55d494adeac2ff038"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/migration/zipball/42ff497c5231f5a727d1e229419ff1d2195d8093",
|
||||
"reference": "42ff497c5231f5a727d1e229419ff1d2195d8093",
|
||||
"url": "https://api.github.com/repos/utopia-php/migration/zipball/6fb6f8f032cd34c3c65728a55d494adeac2ff038",
|
||||
"reference": "6fb6f8f032cd34c3c65728a55d494adeac2ff038",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4204,7 +4204,7 @@
|
||||
"ext-curl": "*",
|
||||
"ext-openssl": "*",
|
||||
"php": ">=8.1",
|
||||
"utopia-php/database": "1.*",
|
||||
"utopia-php/database": "2.*",
|
||||
"utopia-php/dsn": "0.2.*",
|
||||
"utopia-php/framework": "0.33.*",
|
||||
"utopia-php/storage": "0.18.*"
|
||||
@@ -4237,9 +4237,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/migration/issues",
|
||||
"source": "https://github.com/utopia-php/migration/tree/1.2.0"
|
||||
"source": "https://github.com/utopia-php/migration/tree/1.1.0"
|
||||
},
|
||||
"time": "2025-09-24T10:32:24+00:00"
|
||||
"time": "2025-09-10T05:45:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/orchestration",
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
import io.appwrite.Client;
|
||||
import io.appwrite.coroutines.CoroutineCallback;
|
||||
import io.appwrite.services.Account;
|
||||
|
||||
Client client = new Client(context)
|
||||
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
|
||||
|
||||
Account account = new Account(client);
|
||||
|
||||
account.createEmailVerification(
|
||||
"https://example.com", // url
|
||||
new CoroutineCallback<>((result, error) -> {
|
||||
if (error != null) {
|
||||
error.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
Log.d("Appwrite", result.toString());
|
||||
})
|
||||
);
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import io.appwrite.Client;
|
||||
import io.appwrite.coroutines.CoroutineCallback;
|
||||
import io.appwrite.services.Account;
|
||||
|
||||
Client client = new Client(context)
|
||||
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.setProject("<YOUR_PROJECT_ID>"); // Your project ID
|
||||
|
||||
Account account = new Account(client);
|
||||
|
||||
account.updateEmailVerification(
|
||||
"<USER_ID>", // userId
|
||||
"<SECRET>", // secret
|
||||
new CoroutineCallback<>((result, error) -> {
|
||||
if (error != null) {
|
||||
error.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
Log.d("Appwrite", result.toString());
|
||||
})
|
||||
);
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import io.appwrite.Client
|
||||
import io.appwrite.coroutines.CoroutineCallback
|
||||
import io.appwrite.services.Account
|
||||
|
||||
val client = Client(context)
|
||||
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.setProject("<YOUR_PROJECT_ID>") // Your project ID
|
||||
|
||||
val account = Account(client)
|
||||
|
||||
val result = account.createEmailVerification(
|
||||
url = "https://example.com",
|
||||
)
|
||||
@@ -0,0 +1,14 @@
|
||||
import io.appwrite.Client
|
||||
import io.appwrite.coroutines.CoroutineCallback
|
||||
import io.appwrite.services.Account
|
||||
|
||||
val client = Client(context)
|
||||
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.setProject("<YOUR_PROJECT_ID>") // Your project ID
|
||||
|
||||
val account = Account(client)
|
||||
|
||||
val result = account.updateEmailVerification(
|
||||
userId = "<USER_ID>",
|
||||
secret = "<SECRET>",
|
||||
)
|
||||
@@ -0,0 +1,12 @@
|
||||
import Appwrite
|
||||
|
||||
let client = Client()
|
||||
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.setProject("<YOUR_PROJECT_ID>") // Your project ID
|
||||
|
||||
let account = Account(client)
|
||||
|
||||
let token = try await account.createEmailVerification(
|
||||
url: "https://example.com"
|
||||
)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import Appwrite
|
||||
|
||||
let client = Client()
|
||||
.setEndpoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.setProject("<YOUR_PROJECT_ID>") // Your project ID
|
||||
|
||||
let account = Account(client)
|
||||
|
||||
let token = try await account.updateEmailVerification(
|
||||
userId: "<USER_ID>",
|
||||
secret: "<SECRET>"
|
||||
)
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
import 'package:appwrite/appwrite.dart';
|
||||
|
||||
Client client = Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
Account account = Account(client);
|
||||
|
||||
Token result = await account.createEmailVerification(
|
||||
url: 'https://example.com',
|
||||
);
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'package:appwrite/appwrite.dart';
|
||||
|
||||
Client client = Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
Account account = Account(client);
|
||||
|
||||
Token result = await account.updateEmailVerification(
|
||||
userId: '<USER_ID>',
|
||||
secret: '<SECRET>',
|
||||
);
|
||||
@@ -0,0 +1,12 @@
|
||||
mutation {
|
||||
accountCreateEmailVerification(
|
||||
url: "https://example.com"
|
||||
) {
|
||||
_id
|
||||
_createdAt
|
||||
userId
|
||||
secret
|
||||
expire
|
||||
phrase
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
mutation {
|
||||
accountUpdateEmailVerification(
|
||||
userId: "<USER_ID>",
|
||||
secret: "<SECRET>"
|
||||
) {
|
||||
_id
|
||||
_createdAt
|
||||
userId
|
||||
secret
|
||||
expire
|
||||
phrase
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { Client, Account } from "react-native-appwrite";
|
||||
|
||||
const client = new Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
const account = new Account(client);
|
||||
|
||||
const result = await account.createEmailVerification({
|
||||
url: 'https://example.com'
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
@@ -0,0 +1,14 @@
|
||||
import { Client, Account } from "react-native-appwrite";
|
||||
|
||||
const client = new Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
const account = new Account(client);
|
||||
|
||||
const result = await account.updateEmailVerification({
|
||||
userId: '<USER_ID>',
|
||||
secret: '<SECRET>'
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
@@ -0,0 +1,11 @@
|
||||
POST /v1/account/verification HTTP/1.1
|
||||
Host: cloud.appwrite.io
|
||||
Content-Type: application/json
|
||||
X-Appwrite-Response-Format: 1.8.0
|
||||
X-Appwrite-Project: <YOUR_PROJECT_ID>
|
||||
X-Appwrite-Session:
|
||||
X-Appwrite-JWT: <YOUR_JWT>
|
||||
|
||||
{
|
||||
"url": "https://example.com"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
PUT /v1/account/verification HTTP/1.1
|
||||
Host: cloud.appwrite.io
|
||||
Content-Type: application/json
|
||||
X-Appwrite-Response-Format: 1.8.0
|
||||
X-Appwrite-Project: <YOUR_PROJECT_ID>
|
||||
X-Appwrite-Session:
|
||||
X-Appwrite-JWT: <YOUR_JWT>
|
||||
|
||||
{
|
||||
"userId": "<USER_ID>",
|
||||
"secret": "<SECRET>"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
import { Client, Account } from "appwrite";
|
||||
|
||||
const client = new Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
const account = new Account(client);
|
||||
|
||||
const result = await account.createEmailVerification({
|
||||
url: 'https://example.com'
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
@@ -0,0 +1,14 @@
|
||||
import { Client, Account } from "appwrite";
|
||||
|
||||
const client = new Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
const account = new Account(client);
|
||||
|
||||
const result = await account.updateEmailVerification({
|
||||
userId: '<USER_ID>',
|
||||
secret: '<SECRET>'
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
@@ -0,0 +1,2 @@
|
||||
appwrite account create-email-verification \
|
||||
--url https://example.com
|
||||
@@ -0,0 +1,3 @@
|
||||
appwrite account update-email-verification \
|
||||
--user-id <USER_ID> \
|
||||
--secret <SECRET>
|
||||
@@ -0,0 +1,13 @@
|
||||
import { Client, Account } from "@appwrite.io/console";
|
||||
|
||||
const client = new Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
const account = new Account(client);
|
||||
|
||||
const result = await account.createEmailVerification({
|
||||
url: 'https://example.com'
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
@@ -0,0 +1,14 @@
|
||||
import { Client, Account } from "@appwrite.io/console";
|
||||
|
||||
const client = new Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>'); // Your project ID
|
||||
|
||||
const account = new Account(client);
|
||||
|
||||
const result = await account.updateEmailVerification({
|
||||
userId: '<USER_ID>',
|
||||
secret: '<SECRET>'
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
@@ -11,7 +11,7 @@ const result = await databases.createLineAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]] // optional
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await databases.createPointAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [1, 2] // optional
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await databases.createPolygonAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[[1, 2], [3, 4], [5, 6], [1, 2]]] // optional
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await databases.updateLineAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await databases.updatePointAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [1, 2], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await databases.updatePolygonAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[[1, 2], [3, 4], [5, 6], [1, 2]]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await tablesDB.createLineColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]] // optional
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await tablesDB.createPointColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [1, 2] // optional
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await tablesDB.createPolygonColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[[1, 2], [3, 4], [5, 6], [1, 2]]] // optional
|
||||
});
|
||||
|
||||
console.log(result);
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await tablesDB.updateLineColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await tablesDB.updatePointColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [1, 2], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ const result = await tablesDB.updatePolygonColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[[1, 2], [3, 4], [5, 6], [1, 2]]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import 'package:dart_appwrite/dart_appwrite.dart';
|
||||
|
||||
Client client = Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>') // Your project ID
|
||||
.setSession(''); // The user session to authenticate with
|
||||
|
||||
Account account = Account(client);
|
||||
|
||||
Token result = await account.createEmailVerification(
|
||||
url: 'https://example.com',
|
||||
);
|
||||
@@ -0,0 +1,13 @@
|
||||
import 'package:dart_appwrite/dart_appwrite.dart';
|
||||
|
||||
Client client = Client()
|
||||
.setEndpoint('https://<REGION>.cloud.appwrite.io/v1') // Your API Endpoint
|
||||
.setProject('<YOUR_PROJECT_ID>') // Your project ID
|
||||
.setSession(''); // The user session to authenticate with
|
||||
|
||||
Account account = Account(client);
|
||||
|
||||
Token result = await account.updateEmailVerification(
|
||||
userId: '<USER_ID>',
|
||||
secret: '<SECRET>',
|
||||
);
|
||||
@@ -12,5 +12,5 @@ AttributeLine result = await databases.createLineAttribute(
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[1, 2], [3, 4], [5, 6]], // (optional)
|
||||
);
|
||||
|
||||
@@ -12,5 +12,5 @@ AttributePoint result = await databases.createPointAttribute(
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [1, 2], // (optional)
|
||||
);
|
||||
|
||||
@@ -12,5 +12,5 @@ AttributePolygon result = await databases.createPolygonAttribute(
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[[1, 2], [3, 4], [5, 6], [1, 2]]], // (optional)
|
||||
);
|
||||
|
||||
@@ -12,6 +12,6 @@ AttributeLine result = await databases.updateLineAttribute(
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[1, 2], [3, 4], [5, 6]], // (optional)
|
||||
newKey: '', // (optional)
|
||||
);
|
||||
|
||||
@@ -12,6 +12,6 @@ AttributePoint result = await databases.updatePointAttribute(
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [1, 2], // (optional)
|
||||
newKey: '', // (optional)
|
||||
);
|
||||
|
||||
@@ -12,6 +12,6 @@ AttributePolygon result = await databases.updatePolygonAttribute(
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[[1, 2], [3, 4], [5, 6], [1, 2]]], // (optional)
|
||||
newKey: '', // (optional)
|
||||
);
|
||||
|
||||
@@ -12,5 +12,5 @@ ColumnLine result = await tablesDB.createLineColumn(
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[1, 2], [3, 4], [5, 6]], // (optional)
|
||||
);
|
||||
|
||||
@@ -12,5 +12,5 @@ ColumnPoint result = await tablesDB.createPointColumn(
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [1, 2], // (optional)
|
||||
);
|
||||
|
||||
@@ -12,5 +12,5 @@ ColumnPolygon result = await tablesDB.createPolygonColumn(
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[[1, 2], [3, 4], [5, 6], [1, 2]]], // (optional)
|
||||
);
|
||||
|
||||
@@ -12,6 +12,6 @@ ColumnLine result = await tablesDB.updateLineColumn(
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[1, 2], [3, 4], [5, 6]], // (optional)
|
||||
newKey: '', // (optional)
|
||||
);
|
||||
|
||||
@@ -12,6 +12,6 @@ ColumnPoint result = await tablesDB.updatePointColumn(
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [1, 2], // (optional)
|
||||
newKey: '', // (optional)
|
||||
);
|
||||
|
||||
@@ -12,6 +12,6 @@ ColumnPolygon result = await tablesDB.updatePolygonColumn(
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
xrequired: false,
|
||||
xdefault: '', // (optional)
|
||||
xdefault: [[[1, 2], [3, 4], [5, 6], [1, 2]]], // (optional)
|
||||
newKey: '', // (optional)
|
||||
);
|
||||
|
||||
@@ -12,5 +12,5 @@ const response = await databases.createLineAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1,2], [3, 4]] // optional
|
||||
});
|
||||
|
||||
@@ -12,5 +12,5 @@ const response = await databases.createPointAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1,2], [3, 4]] // optional
|
||||
});
|
||||
|
||||
@@ -12,5 +12,5 @@ const response = await databases.createPolygonAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1,2], [3, 4]] // optional
|
||||
});
|
||||
|
||||
@@ -12,6 +12,6 @@ const response = await databases.updateLineAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1,2], [3, 4]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
@@ -12,6 +12,6 @@ const response = await databases.updatePointAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1,2], [3, 4]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
@@ -12,6 +12,6 @@ const response = await databases.updatePolygonAttribute({
|
||||
collectionId: '<COLLECTION_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1,2], [3, 4]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
@@ -12,5 +12,5 @@ const response = await tablesDB.createLineColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1,2], [3, 4]] // optional
|
||||
});
|
||||
|
||||
@@ -12,5 +12,5 @@ const response = await tablesDB.createPointColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1,2], [3, 4]] // optional
|
||||
});
|
||||
|
||||
@@ -12,5 +12,5 @@ const response = await tablesDB.createPolygonColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '' // optional
|
||||
default: [[1,2], [3, 4]] // optional
|
||||
});
|
||||
|
||||
@@ -12,6 +12,6 @@ const response = await tablesDB.updateLineColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1,2], [3, 4]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
@@ -12,6 +12,6 @@ const response = await tablesDB.updatePointColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1,2], [3, 4]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
@@ -12,6 +12,6 @@ const response = await tablesDB.updatePolygonColumn({
|
||||
tableId: '<TABLE_ID>',
|
||||
key: '',
|
||||
required: false,
|
||||
default: '', // optional
|
||||
default: [[1,2], [3, 4]], // optional
|
||||
newKey: '' // optional
|
||||
});
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
using Appwrite;
|
||||
using Appwrite.Models;
|
||||
using Appwrite.Services;
|
||||
|
||||
Client client = new Client()
|
||||
.SetEndPoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.SetProject("<YOUR_PROJECT_ID>") // Your project ID
|
||||
.SetSession(""); // The user session to authenticate with
|
||||
|
||||
Account account = new Account(client);
|
||||
|
||||
Token result = await account.CreateEmailVerification(
|
||||
url: "https://example.com"
|
||||
);
|
||||
@@ -0,0 +1,15 @@
|
||||
using Appwrite;
|
||||
using Appwrite.Models;
|
||||
using Appwrite.Services;
|
||||
|
||||
Client client = new Client()
|
||||
.SetEndPoint("https://<REGION>.cloud.appwrite.io/v1") // Your API Endpoint
|
||||
.SetProject("<YOUR_PROJECT_ID>") // Your project ID
|
||||
.SetSession(""); // The user session to authenticate with
|
||||
|
||||
Account account = new Account(client);
|
||||
|
||||
Token result = await account.UpdateEmailVerification(
|
||||
userId: "<USER_ID>",
|
||||
secret: "<SECRET>"
|
||||
);
|
||||
@@ -14,5 +14,5 @@ AttributeLine result = await databases.CreateLineAttribute(
|
||||
collectionId: "<COLLECTION_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "" // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]] // optional
|
||||
);
|
||||
@@ -14,5 +14,5 @@ AttributePoint result = await databases.CreatePointAttribute(
|
||||
collectionId: "<COLLECTION_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "" // optional
|
||||
default: [1, 2] // optional
|
||||
);
|
||||
@@ -14,5 +14,5 @@ AttributePolygon result = await databases.CreatePolygonAttribute(
|
||||
collectionId: "<COLLECTION_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "" // optional
|
||||
default: [[[1, 2], [3, 4], [5, 6], [1, 2]]] // optional
|
||||
);
|
||||
@@ -14,6 +14,6 @@ AttributeLine result = await databases.UpdateLineAttribute(
|
||||
collectionId: "<COLLECTION_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "", // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]], // optional
|
||||
newKey: "" // optional
|
||||
);
|
||||
@@ -14,6 +14,6 @@ AttributePoint result = await databases.UpdatePointAttribute(
|
||||
collectionId: "<COLLECTION_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "", // optional
|
||||
default: [1, 2], // optional
|
||||
newKey: "" // optional
|
||||
);
|
||||
@@ -14,6 +14,6 @@ AttributePolygon result = await databases.UpdatePolygonAttribute(
|
||||
collectionId: "<COLLECTION_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "", // optional
|
||||
default: [[[1, 2], [3, 4], [5, 6], [1, 2]]], // optional
|
||||
newKey: "" // optional
|
||||
);
|
||||
@@ -14,5 +14,5 @@ ColumnLine result = await tablesDB.CreateLineColumn(
|
||||
tableId: "<TABLE_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "" // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]] // optional
|
||||
);
|
||||
@@ -14,5 +14,5 @@ ColumnPoint result = await tablesDB.CreatePointColumn(
|
||||
tableId: "<TABLE_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "" // optional
|
||||
default: [1, 2] // optional
|
||||
);
|
||||
@@ -14,5 +14,5 @@ ColumnPolygon result = await tablesDB.CreatePolygonColumn(
|
||||
tableId: "<TABLE_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "" // optional
|
||||
default: [[[1, 2], [3, 4], [5, 6], [1, 2]]] // optional
|
||||
);
|
||||
@@ -14,6 +14,6 @@ ColumnLine result = await tablesDB.UpdateLineColumn(
|
||||
tableId: "<TABLE_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "", // optional
|
||||
default: [[1, 2], [3, 4], [5, 6]], // optional
|
||||
newKey: "" // optional
|
||||
);
|
||||
@@ -14,6 +14,6 @@ ColumnPoint result = await tablesDB.UpdatePointColumn(
|
||||
tableId: "<TABLE_ID>",
|
||||
key: "",
|
||||
required: false,
|
||||
default: "", // optional
|
||||
default: [1, 2], // optional
|
||||
newKey: "" // optional
|
||||
);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user