diff --git a/.env b/.env index 960405111a..55ec662f24 100644 --- a/.env +++ b/.env @@ -22,7 +22,7 @@ _APP_OPTIONS_FORCE_HTTPS=disabled _APP_OPTIONS_ROUTER_FORCE_HTTPS=disabled _APP_OPENSSL_KEY_V1=your-secret-key _APP_DNS=8.8.8.8 -_APP_DOMAIN=traefik +_APP_DOMAIN=appwrite.test _APP_CONSOLE_DOMAIN=localhost _APP_DOMAIN_FUNCTIONS=functions.localhost _APP_DOMAIN_SITES=sites.localhost @@ -124,4 +124,4 @@ _APP_MESSAGE_PUSH_TEST_DSN= _APP_WEBHOOK_MAX_FAILED_ATTEMPTS=10 _APP_PROJECT_REGIONS=default _APP_FUNCTIONS_CREATION_ABUSE_LIMIT=5000 -_APP_STATS_USAGE_DUAL_WRITING_DBS=database_db_main \ No newline at end of file +_APP_STATS_USAGE_DUAL_WRITING_DBS=database_db_main diff --git a/.github/workflows/issue-triage.lock.yml b/.github/workflows/issue-triage.lock.yml index 3fc2d5d190..e2483cf0fd 100644 --- a/.github/workflows/issue-triage.lock.yml +++ b/.github/workflows/issue-triage.lock.yml @@ -5,7 +5,7 @@ # # Source: githubnext/agentics/workflows/issue-triage.md@0837fb7b24c3b84ee77fb7c8cfa8735c48be347a # -# Effective stop-time: 2025-12-03 20:01:19 +# Effective stop-time: 2025-12-12 19:43:36 # # Job Dependency Graph: # ```mermaid @@ -43,8 +43,8 @@ # https://github.com/actions/github-script/commit/ed597411d8f924073f98dfc5c65a23a2325f34cd # - actions/setup-node@v6 (2028fbc5c25fe9cf00d9f06a71cc4710d4507903) # https://github.com/actions/setup-node/commit/2028fbc5c25fe9cf00d9f06a71cc4710d4507903 -# - actions/upload-artifact@v4 (ea165f8d65b6e75b540449e92b4886f43607fa02) -# https://github.com/actions/upload-artifact/commit/ea165f8d65b6e75b540449e92b4886f43607fa02 +# - actions/upload-artifact@v5 (330a01c490aca151604b8cf639adc76d48f6c5d4) +# https://github.com/actions/upload-artifact/commit/330a01c490aca151604b8cf639adc76d48f6c5d4 name: "Agentic Triage" "on": @@ -59,12 +59,22 @@ concurrency: run-name: "Agentic Triage" +env: + GH_AW_ERROR_PATTERNS: |- + [ + {"id":"gh-action-error","pattern":"^::(error)(?:\\\\s+[^:]*)?::(.+)","level_group":1,"message_group":2,"description":"GitHub Actions workflow command - error"}, + {"id":"gh-action-warning","pattern":"^::(warning)(?:\\\\s+[^:]*)?::(.+)","level_group":1,"message_group":2,"description":"GitHub Actions workflow command - warning"}, + {"id":"bracketed-level","pattern":"^\\[(ERROR|CRITICAL|WARNING|WARN)\\]\\s+(.+)","level_group":1,"message_group":2,"description":"Bracketed log level at start of line"}, + {"id":"timestamped-copilot","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\\s+\\[(ERROR|WARN|WARNING|CRITICAL)\\]\\s+(.+)","level_group":1,"message_group":3,"description":"Timestamped Copilot CLI messages"} + ] + jobs: activation: needs: pre_activation if: needs.pre_activation.outputs.activated == 'true' runs-on: ubuntu-slim permissions: + contents: read discussions: write issues: write pull-requests: write @@ -132,14 +142,22 @@ jobs: core.info(` Source modified: ${workflowStat.mtime.toISOString()}`); core.info(` Lock modified: ${lockStat.mtime.toISOString()}`); if (workflowMtime > lockMtime) { - const warningMessage = `🔴🔴🔴 WARNING: Lock file '${lockFile}' is outdated! The workflow file '${workflowMdFile}' has been modified more recently. Run 'gh aw compile' to regenerate the lock file.`; + const warningMessage = `WARNING: Lock file '${lockFile}' is outdated! The workflow file '${workflowMdFile}' has been modified more recently. Run 'gh aw compile' to regenerate the lock file.`; core.error(warningMessage); - await core.summary - .addRaw("## ⚠️ Workflow Lock File Warning\n\n") - .addRaw(`🔴🔴🔴 **WARNING**: Lock file \`${lockFile}\` is outdated!\n\n`) - .addRaw(`The workflow file \`${workflowMdFile}\` has been modified more recently.\n\n`) - .addRaw("Run `gh aw compile` to regenerate the lock file.\n\n") - .write(); + const workflowTimestamp = workflowStat.mtime.toISOString(); + const lockTimestamp = lockStat.mtime.toISOString(); + const gitSha = process.env.GITHUB_SHA; + let summary = core.summary + .addRaw("### ⚠️ Workflow Lock File Warning\n\n") + .addRaw("**WARNING**: Lock file is outdated and needs to be regenerated.\n\n") + .addRaw("**Files:**\n") + .addRaw(`- Source: \`${workflowMdFile}\` (modified: ${workflowTimestamp})\n`) + .addRaw(`- Lock: \`${lockFile}\` (modified: ${lockTimestamp})\n\n`); + if (gitSha) { + summary = summary.addRaw(`**Git Commit:** \`${gitSha}\`\n\n`); + } + summary = summary.addRaw("**Action Required:** Run `gh aw compile` to regenerate the lock file.\n\n"); + await summary.write(); } else { core.info("✅ Lock file is up to date"); } @@ -482,9 +500,7 @@ jobs: needs: - agent - detection - if: > - (((!cancelled()) && (needs.agent.result != 'skipped')) && (contains(needs.agent.outputs.output_types, 'add_comment'))) && - (((github.event.issue.number) || (github.event.pull_request.number)) || (github.event.discussion.number)) + if: ((!cancelled()) && (needs.agent.result != 'skipped')) && (contains(needs.agent.outputs.output_types, 'add_comment')) runs-on: ubuntu-slim permissions: contents: read @@ -512,8 +528,8 @@ jobs: - name: Setup agent output environment variable run: | mkdir -p /tmp/gh-aw/safeoutputs/ - find /tmp/gh-aw/safeoutputs/ -type f -print - echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> $GITHUB_ENV + find "/tmp/gh-aw/safeoutputs/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> "$GITHUB_ENV" - name: Add Issue Comment id: add_comment uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd @@ -522,9 +538,44 @@ jobs: GH_AW_WORKFLOW_NAME: "Agentic Triage" GH_AW_WORKFLOW_SOURCE: "githubnext/agentics/workflows/issue-triage.md@0837fb7b24c3b84ee77fb7c8cfa8735c48be347a" GH_AW_WORKFLOW_SOURCE_URL: "${{ github.server_url }}/githubnext/agentics/tree/0837fb7b24c3b84ee77fb7c8cfa8735c48be347a/workflows/issue-triage.md" + GH_AW_COMMENT_TARGET: "*" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | + const fs = require("fs"); + function loadAgentOutput() { + const agentOutputFile = process.env.GH_AW_AGENT_OUTPUT; + if (!agentOutputFile) { + core.info("No GH_AW_AGENT_OUTPUT environment variable found"); + return { success: false }; + } + let outputContent; + try { + outputContent = fs.readFileSync(agentOutputFile, "utf8"); + } catch (error) { + const errorMessage = `Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`; + core.setFailed(errorMessage); + return { success: false, error: errorMessage }; + } + if (outputContent.trim() === "") { + core.info("Agent output content is empty"); + return { success: false }; + } + core.info(`Agent output content length: ${outputContent.length}`); + let validatedOutput; + try { + validatedOutput = JSON.parse(outputContent); + } catch (error) { + const errorMessage = `Error parsing agent output JSON: ${error instanceof Error ? error.message : String(error)}`; + core.setFailed(errorMessage); + return { success: false, error: errorMessage }; + } + if (!validatedOutput.items || !Array.isArray(validatedOutput.items)) { + core.info("No valid items found in agent output"); + return { success: false }; + } + return { success: true, items: validatedOutput.items }; + } function generateFooter( workflowName, runUrl, @@ -608,35 +659,11 @@ jobs: async function main() { const isStaged = process.env.GH_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussionExplicit = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const agentOutputFile = process.env.GH_AW_AGENT_OUTPUT; - if (!agentOutputFile) { - core.info("No GH_AW_AGENT_OUTPUT environment variable found"); + const result = loadAgentOutput(); + if (!result.success) { return; } - let outputContent; - try { - outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - if (outputContent.trim() === "") { - core.info("Agent output content is empty"); - return; - } - core.info(`Agent output content length: ${outputContent.length}`); - let validatedOutput; - try { - validatedOutput = JSON.parse(outputContent); - } catch (error) { - core.setFailed(`Error parsing agent output JSON: ${error instanceof Error ? error.message : String(error)}`); - return; - } - if (!validatedOutput.items || !Array.isArray(validatedOutput.items)) { - core.info("No valid items found in agent output"); - return; - } - const commentItems = validatedOutput.items.filter( item => item.type === "add_comment"); + const commentItems = result.items.filter( item => item.type === "add_comment"); if (commentItems.length === 0) { core.info("No add-comment items found in agent output"); return; @@ -873,9 +900,7 @@ jobs: needs: - agent - detection - if: > - (((!cancelled()) && (needs.agent.result != 'skipped')) && (contains(needs.agent.outputs.output_types, 'add_labels'))) && - ((github.event.issue.number) || (github.event.pull_request.number)) + if: ((!cancelled()) && (needs.agent.result != 'skipped')) && (contains(needs.agent.outputs.output_types, 'add_labels')) runs-on: ubuntu-slim permissions: contents: read @@ -894,15 +919,16 @@ jobs: - name: Setup agent output environment variable run: | mkdir -p /tmp/gh-aw/safeoutputs/ - find /tmp/gh-aw/safeoutputs/ -type f -print - echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> $GITHUB_ENV + find "/tmp/gh-aw/safeoutputs/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> "$GITHUB_ENV" - name: Add Labels id: add_labels uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd env: GH_AW_AGENT_OUTPUT: ${{ env.GH_AW_AGENT_OUTPUT }} GH_AW_LABELS_ALLOWED: "" - GH_AW_LABELS_MAX_COUNT: 5 + GH_AW_LABELS_MAX_COUNT: 100 + GH_AW_LABELS_TARGET: "*" with: github-token: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} script: | @@ -911,8 +937,8 @@ jobs: return ""; } let sanitized = content.trim(); - sanitized = sanitized.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, ""); sanitized = sanitized.replace(/\x1b\[[0-9;]*[mGKH]/g, ""); + sanitized = sanitized.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, ""); sanitized = sanitized.replace( /(^|[^\w`])@([A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?(?:\/[A-Za-z0-9._-]+)?)/g, (_m, p1, p2) => `${p1}\`@${p2}\`` @@ -920,54 +946,86 @@ jobs: sanitized = sanitized.replace(/[<>&'"]/g, ""); return sanitized.trim(); } - async function main() { + const fs = require("fs"); + function loadAgentOutput() { const agentOutputFile = process.env.GH_AW_AGENT_OUTPUT; if (!agentOutputFile) { core.info("No GH_AW_AGENT_OUTPUT environment variable found"); - return; + return { success: false }; } let outputContent; try { - outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + outputContent = fs.readFileSync(agentOutputFile, "utf8"); } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; + const errorMessage = `Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`; + core.setFailed(errorMessage); + return { success: false, error: errorMessage }; } if (outputContent.trim() === "") { core.info("Agent output content is empty"); - return; + return { success: false }; } core.info(`Agent output content length: ${outputContent.length}`); let validatedOutput; try { validatedOutput = JSON.parse(outputContent); } catch (error) { - core.setFailed(`Error parsing agent output JSON: ${error instanceof Error ? error.message : String(error)}`); - return; + const errorMessage = `Error parsing agent output JSON: ${error instanceof Error ? error.message : String(error)}`; + core.setFailed(errorMessage); + return { success: false, error: errorMessage }; } if (!validatedOutput.items || !Array.isArray(validatedOutput.items)) { - core.warning("No valid items found in agent output"); + core.info("No valid items found in agent output"); + return { success: false }; + } + return { success: true, items: validatedOutput.items }; + } + async function generateStagedPreview(options) { + const { title, description, items, renderItem } = options; + let summaryContent = `## 🎭 Staged Mode: ${title} Preview\n\n`; + summaryContent += `${description}\n\n`; + for (let i = 0; i < items.length; i++) { + const item = items[i]; + summaryContent += renderItem(item, i); + summaryContent += "---\n\n"; + } + try { + await core.summary.addRaw(summaryContent).write(); + core.info(summaryContent); + core.info(`📝 ${title} preview written to step summary`); + } catch (error) { + core.setFailed(error instanceof Error ? error : String(error)); + } + } + async function main() { + const result = loadAgentOutput(); + if (!result.success) { return; } - const labelsItem = validatedOutput.items.find(item => item.type === "add_labels"); + const labelsItem = result.items.find(item => item.type === "add_labels"); if (!labelsItem) { core.warning("No add-labels item found in agent output"); return; } core.info(`Found add-labels item with ${labelsItem.labels.length} labels`); if (process.env.GH_AW_SAFE_OUTPUTS_STAGED === "true") { - let summaryContent = "## 🎭 Staged Mode: Add Labels Preview\n\n"; - summaryContent += "The following labels would be added if staged mode was disabled:\n\n"; - if (labelsItem.item_number) { - summaryContent += `**Target Issue:** #${labelsItem.item_number}\n\n`; - } else { - summaryContent += `**Target:** Current issue/PR\n\n`; - } - if (labelsItem.labels && labelsItem.labels.length > 0) { - summaryContent += `**Labels to add:** ${labelsItem.labels.join(", ")}\n\n`; - } - await core.summary.addRaw(summaryContent).write(); - core.info("📝 Label addition preview written to step summary"); + await generateStagedPreview({ + title: "Add Labels", + description: "The following labels would be added if staged mode was disabled:", + items: [labelsItem], + renderItem: item => { + let content = ""; + if (item.item_number) { + content += `**Target Issue:** #${item.item_number}\n\n`; + } else { + content += `**Target:** Current issue/PR\n\n`; + } + if (item.labels && item.labels.length > 0) { + content += `**Labels to add:** ${item.labels.join(", ")}\n\n`; + } + return content; + }, + }); return; } const allowedLabelsEnv = process.env.GH_AW_LABELS_ALLOWED?.trim(); @@ -1119,7 +1177,6 @@ jobs: group: "gh-aw-copilot-${{ github.workflow }}" env: GH_AW_SAFE_OUTPUTS: /tmp/gh-aw/safeoutputs/outputs.jsonl - GH_AW_SAFE_OUTPUTS_CONFIG: "{\"add_comment\":{\"max\":1},\"add_labels\":{\"max\":5},\"missing_tool\":{}}" outputs: output: ${{ steps.collect_output.outputs.output }} output_types: ${{ steps.collect_output.outputs.output_types }} @@ -1180,24 +1237,29 @@ jobs: main().catch(error => { core.setFailed(error instanceof Error ? error.message : String(error)); }); - - name: Validate COPILOT_CLI_TOKEN secret + - name: Validate COPILOT_GITHUB_TOKEN or COPILOT_CLI_TOKEN secret run: | - if [ -z "$COPILOT_CLI_TOKEN" ]; then - echo "Error: COPILOT_CLI_TOKEN secret is not set" - echo "The GitHub Copilot CLI engine requires the COPILOT_CLI_TOKEN secret to be configured." - echo "Please configure this secret in your repository settings." + if [ -z "$COPILOT_GITHUB_TOKEN" ] && [ -z "$COPILOT_CLI_TOKEN" ]; then + echo "Error: Neither COPILOT_GITHUB_TOKEN nor COPILOT_CLI_TOKEN secret is set" + echo "The GitHub Copilot CLI engine requires either COPILOT_GITHUB_TOKEN or COPILOT_CLI_TOKEN secret to be configured." + echo "Please configure one of these secrets in your repository settings." echo "Documentation: https://githubnext.github.io/gh-aw/reference/engines/#github-copilot-default" exit 1 fi - echo "COPILOT_CLI_TOKEN secret is configured" + if [ -n "$COPILOT_GITHUB_TOKEN" ]; then + echo "COPILOT_GITHUB_TOKEN secret is configured" + else + echo "COPILOT_CLI_TOKEN secret is configured (using as fallback for COPILOT_GITHUB_TOKEN)" + fi env: + COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} COPILOT_CLI_TOKEN: ${{ secrets.COPILOT_CLI_TOKEN }} - name: Setup Node.js uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 with: node-version: '24' - name: Install GitHub Copilot CLI - run: npm install -g @github/copilot@0.0.353 + run: npm install -g @github/copilot@0.0.354 - name: Downloading container images run: | set -e @@ -1207,7 +1269,7 @@ jobs: run: | mkdir -p /tmp/gh-aw/safeoutputs cat > /tmp/gh-aw/safeoutputs/config.json << 'EOF' - {"add_comment":{"max":1},"add_labels":{"max":5},"missing_tool":{}} + {"add_comment":{"max":10,"target":"*"},"add_labels":{"max":100},"missing_tool":{}} EOF cat > /tmp/gh-aw/safeoutputs/mcp-server.cjs << 'EOF' const fs = require("fs"); @@ -1231,39 +1293,26 @@ jobs: normalized = normalized.toLowerCase(); return normalized; } - const configEnv = process.env.GH_AW_SAFE_OUTPUTS_CONFIG; + const configPath = process.env.GH_AW_SAFE_OUTPUTS_CONFIG_PATH || "/tmp/gh-aw/safeoutputs/config.json"; let safeOutputsConfigRaw; - if (!configEnv) { - const defaultConfigPath = "/tmp/gh-aw/safeoutputs/config.json"; - debug(`GH_AW_SAFE_OUTPUTS_CONFIG not set, attempting to read from default path: ${defaultConfigPath}`); - try { - if (fs.existsSync(defaultConfigPath)) { - debug(`Reading config from file: ${defaultConfigPath}`); - const configFileContent = fs.readFileSync(defaultConfigPath, "utf8"); - debug(`Config file content length: ${configFileContent.length} characters`); - debug(`Config file read successfully, attempting to parse JSON`); - safeOutputsConfigRaw = JSON.parse(configFileContent); - debug(`Successfully parsed config from file with ${Object.keys(safeOutputsConfigRaw).length} configuration keys`); - } else { - debug(`Config file does not exist at: ${defaultConfigPath}`); - debug(`Using minimal default configuration`); - safeOutputsConfigRaw = {}; - } - } catch (error) { - debug(`Error reading config file: ${error instanceof Error ? error.message : String(error)}`); - debug(`Falling back to empty configuration`); + debug(`Reading config from file: ${configPath}`); + try { + if (fs.existsSync(configPath)) { + debug(`Config file exists at: ${configPath}`); + const configFileContent = fs.readFileSync(configPath, "utf8"); + debug(`Config file content length: ${configFileContent.length} characters`); + debug(`Config file read successfully, attempting to parse JSON`); + safeOutputsConfigRaw = JSON.parse(configFileContent); + debug(`Successfully parsed config from file with ${Object.keys(safeOutputsConfigRaw).length} configuration keys`); + } else { + debug(`Config file does not exist at: ${configPath}`); + debug(`Using minimal default configuration`); safeOutputsConfigRaw = {}; } - } else { - debug(`Using GH_AW_SAFE_OUTPUTS_CONFIG from environment variable`); - debug(`Config environment variable length: ${configEnv.length} characters`); - try { - safeOutputsConfigRaw = JSON.parse(configEnv); - debug(`Successfully parsed config from environment: ${JSON.stringify(safeOutputsConfigRaw)}`); - } catch (error) { - debug(`Error parsing config from environment: ${error instanceof Error ? error.message : String(error)}`); - throw new Error(`Failed to parse GH_AW_SAFE_OUTPUTS_CONFIG: ${error instanceof Error ? error.message : String(error)}`); - } + } catch (error) { + debug(`Error reading config file: ${error instanceof Error ? error.message : String(error)}`); + debug(`Falling back to empty configuration`); + safeOutputsConfigRaw = {}; } const safeOutputsConfig = Object.fromEntries(Object.entries(safeOutputsConfigRaw).map(([k, v]) => [k.replace(/-/g, "_"), v])); debug(`Final processed config: ${JSON.stringify(safeOutputsConfig)}`); @@ -1509,6 +1558,17 @@ jobs: }; }; function getCurrentBranch() { + const cwd = process.env.GITHUB_WORKSPACE || process.cwd(); + try { + const branch = execSync("git rev-parse --abbrev-ref HEAD", { + encoding: "utf8", + cwd: cwd, + }).trim(); + debug(`Resolved current branch from git in ${cwd}: ${branch}`); + return branch; + } catch (error) { + debug(`Failed to get branch from git: ${error instanceof Error ? error.message : String(error)}`); + } const ghHeadRef = process.env.GITHUB_HEAD_REF; const ghRefName = process.env.GITHUB_REF_NAME; if (ghHeadRef) { @@ -1519,23 +1579,22 @@ jobs: debug(`Resolved current branch from GITHUB_REF_NAME: ${ghRefName}`); return ghRefName; } - const cwd = process.env.GITHUB_WORKSPACE || process.cwd(); - try { - const branch = execSync("git rev-parse --abbrev-ref HEAD", { - encoding: "utf8", - cwd: cwd, - }).trim(); - debug(`Resolved current branch from git in ${cwd}: ${branch}`); - return branch; - } catch (error) { - throw new Error(`Failed to get current branch: ${error instanceof Error ? error.message : String(error)}`); - } + throw new Error("Failed to determine current branch: git command failed and no GitHub environment variables available"); + } + function getBaseBranch() { + return process.env.GH_AW_BASE_BRANCH || "main"; } const createPullRequestHandler = args => { const entry = { ...args, type: "create_pull_request" }; - if (!entry.branch || entry.branch.trim() === "") { - entry.branch = getCurrentBranch(); - debug(`Using current branch for create_pull_request: ${entry.branch}`); + const baseBranch = getBaseBranch(); + if (!entry.branch || entry.branch.trim() === "" || entry.branch === baseBranch) { + const detectedBranch = getCurrentBranch(); + if (entry.branch === baseBranch) { + debug(`Branch equals base branch (${baseBranch}), detecting actual working branch: ${detectedBranch}`); + } else { + debug(`Using current branch for create_pull_request: ${detectedBranch}`); + } + entry.branch = detectedBranch; } appendSafeOutput(entry); return { @@ -1549,9 +1608,15 @@ jobs: }; const pushToPullRequestBranchHandler = args => { const entry = { ...args, type: "push_to_pull_request_branch" }; - if (!entry.branch || entry.branch.trim() === "") { - entry.branch = getCurrentBranch(); - debug(`Using current branch for push_to_pull_request_branch: ${entry.branch}`); + const baseBranch = getBaseBranch(); + if (!entry.branch || entry.branch.trim() === "" || entry.branch === baseBranch) { + const detectedBranch = getCurrentBranch(); + if (entry.branch === baseBranch) { + debug(`Branch equals base branch (${baseBranch}), detecting actual working branch: ${detectedBranch}`); + } else { + debug(`Using current branch for push_to_pull_request_branch: ${detectedBranch}`); + } + entry.branch = detectedBranch; } appendSafeOutput(entry); return { @@ -1995,7 +2060,6 @@ jobs: env: GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }} - GH_AW_SAFE_OUTPUTS_CONFIG: ${{ toJSON(env.GH_AW_SAFE_OUTPUTS_CONFIG) }} GH_AW_ASSETS_BRANCH: ${{ env.GH_AW_ASSETS_BRANCH }} GH_AW_ASSETS_MAX_SIZE_KB: ${{ env.GH_AW_ASSETS_MAX_SIZE_KB }} GH_AW_ASSETS_ALLOWED_EXTS: ${{ env.GH_AW_ASSETS_ALLOWED_EXTS }} @@ -2017,7 +2081,7 @@ jobs: "-e", "GITHUB_READ_ONLY=1", "-e", - "GITHUB_TOOLSETS=default", + "GITHUB_TOOLSETS=default,labels", "ghcr.io/github/github-mcp-server:v0.20.1" ], "tools": ["*"], @@ -2032,7 +2096,6 @@ jobs: "tools": ["*"], "env": { "GH_AW_SAFE_OUTPUTS": "\${GH_AW_SAFE_OUTPUTS}", - "GH_AW_SAFE_OUTPUTS_CONFIG": "\${GH_AW_SAFE_OUTPUTS_CONFIG}", "GH_AW_ASSETS_BRANCH": "\${GH_AW_ASSETS_BRANCH}", "GH_AW_ASSETS_MAX_SIZE_KB": "\${GH_AW_ASSETS_MAX_SIZE_KB}", "GH_AW_ASSETS_ALLOWED_EXTS": "\${GH_AW_ASSETS_ALLOWED_EXTS}", @@ -2065,29 +2128,39 @@ jobs: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }} run: | - mkdir -p $(dirname "$GH_AW_PROMPT") + PROMPT_DIR="$(dirname "$GH_AW_PROMPT")" + mkdir -p "$PROMPT_DIR" cat > "$GH_AW_PROMPT" << 'PROMPT_EOF' # Agentic Triage - You're a triage assistant for GitHub issues. Your task is to analyze issues created in the last 24 hours and perform initial triage tasks for each of them. + You're a triage assistant for GitHub issues. Your task is to analyze issues that were either created in the last 24 hours or updated (with a new comment) in the last 24 hours, and perform initial triage tasks for each of them. - 1. First, use the `list_issues` tool to retrieve all issues created in the last 24 hours. Filter issues by using the `since` parameter with a timestamp from 24 hours ago (calculate: current time minus 24 hours in ISO 8601 format). + 1. First, use the `list_issues` tool to retrieve all issues created or updated in the last 24 hours. The `since` parameter filters by the issue's `updated_at` timestamp, which includes both newly created issues and recently commented issues. Calculate the timestamp from 24 hours ago (example: 2025-11-06T20:27:14Z for reference) and use it for the `since` parameter. 2. For each issue found, perform the following triage tasks: - 3. Select appropriate labels for the issue from the provided list. + 3. Use the `get_comments` tool to retrieve all the comments on the issue. - 4. Retrieve the issue content using the `get_issue` tool. If the issue is obviously spam, or generated by bot, or something else that is not an actual issue to be worked on, then add an issue comment to the issue with a one sentence analysis and move to the next issue. + 4. Check for spam and quality issue descriptions and comments first: + + - **Non-English Content**: If the issue is primarily written in a non-English language, add a respectful and appreciative comment explaining that while you appreciate their contribution, the majority of the community communicates in English and kindly ask them to repost in English so everyone can follow along and help. Provide a friendly translation of your message in their language if possible. + - **Multiple Topics**: If the issue discusses multiple unrelated topics or problems, add a comment explaining that each issue should focus on one clear topic so the team can effectively solve the right problem. Politely ask them to split it into separate issues. + - **Obvious Spam or Bot-Generated Content**: If the issue/comment is obviously spam, generated by a bot, or something that is not an actual issue to be worked on, add an issue comment with a one-sentence analysis and move to the next issue. - 5. Next, use the GitHub tools to gather additional context about the issue: + 5. Retrieve the issue content using the `get_issue` tool for any issues that pass the spam checks. - - Fetch the list of labels available in this repository. Use 'gh label list' bash command to fetch the labels. This will give you the labels you can use for triaging issues. - - Fetch any comments on the issue using the `get_issue_comments` tool - - **Search for duplicate and related issues**: Use the `search_issues` tool to find similar issues by searching for key terms from the issue title and description. Look for both open and closed issues that might be related or duplicates. + 6. Next, use the GitHub tools to gather additional context about the issue: - 6. Analyze the issue content, considering: + - Fetch the list of labels available in this repository using the `list_label` tool with `owner: "appwrite"` and `repo: "appwrite"` parameters. This will give you the labels you can use for triaging issues. + - Fetch any comments on the issue using the `get_issue_comments` tool to understand recent activity + - **Search for duplicate and related issues (repo first, then org-wide)**: + - First search in this repository using the `search_issues` tool with a query like: `repo:appwrite/appwrite is:issue (is:open OR is:closed) `. + - Then perform an org-wide search across the entire Appwrite organization using: `org:appwrite is:issue (is:open OR is:closed) `. + - Prefer linking to OPEN issues when identifying potential duplicates; include CLOSED ones as related history when useful. + + 7. Analyze the issue content, considering: - The issue title and description - The type of issue (bug report, feature request, question, etc.) @@ -2096,45 +2169,48 @@ jobs: - User impact - Components affected - 7. Write notes, ideas, nudges, resource links, debugging strategies and/or reproduction steps for the team to consider relevant to the issue. + 8. Write notes, ideas, nudges, resource links, debugging strategies and/or reproduction steps for the team to consider relevant to the issue. - 8. Select appropriate labels from the available labels list provided above: + 9. Select appropriate labels from the available labels list: - Choose labels that accurately reflect the issue's nature - Be specific but comprehensive - Select priority labels if you can determine urgency (high-priority, med-priority, or low-priority) - Consider platform labels (android, ios) if applicable - - Search for similar issues, and if you find similar issues consider using a "duplicate" label if appropriate. Only do so if the issue is a duplicate of another OPEN issue. - - Only select labels from the provided list above + - Search for similar issues. If you find a duplicate of another OPEN issue in THIS repository, you may use a "duplicate" label (if available) and reference the canonical issue. + - If the closest match is in another repository within the Appwrite org, do NOT mark as duplicate here; instead, link it in your comment under a "Cross‑repo related issues" section. + - Only select labels from the provided list + - Don't apply the `good first issue` or `help wanted` labels - It's okay to not add any labels if none are clearly applicable - 9. Apply the selected labels: + 10. Apply the selected labels: - Use the `update_issue` tool to apply the labels to the issue - DO NOT communicate directly with users - If no labels are clearly applicable, do not apply any labels - 10. Add an issue comment to the issue with your analysis: + 11. Add an issue comment to the issue with your analysis: - Start with "🎯 Agentic Issue Triage" - Provide a brief summary of the issue - - **If duplicate or related issues were found**, add a section listing them with links (e.g., "### 🔗 Potentially Related Issues" followed by a bullet list of related issues with their titles and links) + - **If duplicate or related issues were found**, add sections listing them with links: + - "### 🔗 Potentially Related Issues (this repo)" – bullet list of same-repo issues with titles and links + - If applicable: "### 🌐 Cross-repo related issues (org: appwrite)" – bullet list including `owner/repo#number` with titles and links - Mention any relevant details that might help the team understand the issue better - Include any debugging strategies or reproduction steps if applicable - Suggest resources or links that might be helpful for resolving the issue or learning skills related to the issue or the particular area of the codebase affected by it - Mention any nudges or ideas that could help the team in addressing the issue - - If you have possible reproduction steps, include them in the comment - - If you have any debugging strategies, include them in the comment - - If appropriate break the issue down to sub-tasks and write a checklist of things to do. - - Use collapsed-by-default sections in the GitHub markdown to keep the comment tidy. Collapse all sections except the short main summary at the top. + - If appropriate break the issue down to sub-tasks and write a checklist of things to do + - Use collapsed-by-default sections in the GitHub markdown to keep the comment tidy. Collapse all sections except the short main summary at the top. For bolded section titles, wrap the text with `` and `` to make it bold. + - Do not indicate/encourage a community member to submit a PR for the issue. - 11. After processing all issues, provide a summary of how many issues were triaged. If no issues were created in the last 24 hours, simply note that no new issues needed triage. + 12. After processing all issues, provide a summary of how many issues were triaged (created or updated in the last 24 hours). If no issues matched the criteria, simply note that no issues needed triage. PROMPT_EOF - name: Append XPIA security instructions to prompt env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt run: | - cat >> "$GH_AW_PROMPT" << 'PROMPT_EOF' + cat >> "$GH_AW_PROMPT" << PROMPT_EOF --- @@ -2166,7 +2242,7 @@ jobs: env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt run: | - cat >> "$GH_AW_PROMPT" << 'PROMPT_EOF' + cat >> "$GH_AW_PROMPT" << PROMPT_EOF --- @@ -2179,7 +2255,7 @@ jobs: env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt run: | - cat >> "$GH_AW_PROMPT" << 'PROMPT_EOF' + cat >> "$GH_AW_PROMPT" << PROMPT_EOF --- @@ -2204,7 +2280,7 @@ jobs: env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt run: | - cat >> "$GH_AW_PROMPT" << 'PROMPT_EOF' + cat >> "$GH_AW_PROMPT" << PROMPT_EOF --- @@ -2234,7 +2310,7 @@ jobs: Use this context information to understand the scope of your work. PROMPT_EOF - - name: Render template conditionals + - name: Interpolate variables and render templates uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt @@ -2245,45 +2321,74 @@ jobs: const v = expr.trim().toLowerCase(); return !(v === "" || v === "false" || v === "0" || v === "null" || v === "undefined"); } + function interpolateVariables(content, variables) { + let result = content; + for (const [varName, value] of Object.entries(variables)) { + const pattern = new RegExp(`\\$\\{${varName}\\}`, "g"); + result = result.replace(pattern, value); + } + return result; + } function renderMarkdownTemplate(markdown) { return markdown.replace(/{{#if\s+([^}]+)}}([\s\S]*?){{\/if}}/g, (_, cond, body) => (isTruthy(cond) ? body : "")); } - function main() { + async function main() { try { const promptPath = process.env.GH_AW_PROMPT; if (!promptPath) { core.setFailed("GH_AW_PROMPT environment variable is not set"); - process.exit(1); + return; } - const markdown = fs.readFileSync(promptPath, "utf8"); - const hasConditionals = /{{#if\s+[^}]+}}/.test(markdown); - if (!hasConditionals) { + let content = fs.readFileSync(promptPath, "utf8"); + const variables = {}; + for (const [key, value] of Object.entries(process.env)) { + if (key.startsWith("GH_AW_EXPR_")) { + variables[key] = value || ""; + } + } + const varCount = Object.keys(variables).length; + if (varCount > 0) { + core.info(`Found ${varCount} expression variable(s) to interpolate`); + content = interpolateVariables(content, variables); + core.info(`Successfully interpolated ${varCount} variable(s) in prompt`); + } else { + core.info("No expression variables found, skipping interpolation"); + } + const hasConditionals = /{{#if\s+[^}]+}}/.test(content); + if (hasConditionals) { + core.info("Processing conditional template blocks"); + content = renderMarkdownTemplate(content); + core.info("Template rendered successfully"); + } else { core.info("No conditional blocks found in prompt, skipping template rendering"); - process.exit(0); } - const rendered = renderMarkdownTemplate(markdown); - fs.writeFileSync(promptPath, rendered, "utf8"); - core.info("Template rendered successfully"); + fs.writeFileSync(promptPath, content, "utf8"); } catch (error) { core.setFailed(error instanceof Error ? error.message : String(error)); } } main(); - - name: Print prompt to step summary + - name: Print prompt env: GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt run: | - echo "
" >> "$GITHUB_STEP_SUMMARY" - echo "Generated Prompt" >> "$GITHUB_STEP_SUMMARY" - echo "" >> "$GITHUB_STEP_SUMMARY" - echo '```markdown' >> "$GITHUB_STEP_SUMMARY" - cat "$GH_AW_PROMPT" >> "$GITHUB_STEP_SUMMARY" - echo '```' >> "$GITHUB_STEP_SUMMARY" - echo "" >> "$GITHUB_STEP_SUMMARY" - echo "
" >> "$GITHUB_STEP_SUMMARY" + # Print prompt to workflow logs (equivalent to core.info) + echo "Generated Prompt:" + cat "$GH_AW_PROMPT" + # Print prompt to step summary + { + echo "
" + echo "Generated Prompt" + echo "" + echo '```markdown' + cat "$GH_AW_PROMPT" + echo '```' + echo "" + echo "
" + } >> "$GITHUB_STEP_SUMMARY" - name: Upload prompt if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: prompt.txt path: /tmp/gh-aw/aw-prompts/prompt.txt @@ -2299,7 +2404,7 @@ jobs: engine_name: "GitHub Copilot CLI", model: "", version: "", - agent_version: "0.0.353", + agent_version: "0.0.354", workflow_name: "Agentic Triage", experimental: false, supports_tools_allowlist: true, @@ -2326,7 +2431,7 @@ jobs: console.log(JSON.stringify(awInfo, null, 2)); - name: Upload agentic run info if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: aw_info.json path: /tmp/gh-aw/aw_info.json @@ -2340,7 +2445,7 @@ jobs: timeout-minutes: 10 run: | set -o pipefail - COPILOT_CLI_INSTRUCTION=$(cat /tmp/gh-aw/aw-prompts/prompt.txt) + COPILOT_CLI_INSTRUCTION="$(cat /tmp/gh-aw/aw-prompts/prompt.txt)" mkdir -p /tmp/ mkdir -p /tmp/gh-aw/ mkdir -p /tmp/gh-aw/agent/ @@ -2348,15 +2453,14 @@ jobs: copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/.copilot/logs/ --disable-builtin-mcps --allow-tool github --allow-tool safeoutputs --allow-tool web-fetch --prompt "$COPILOT_CLI_INSTRUCTION" 2>&1 | tee /tmp/gh-aw/agent-stdio.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE + COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN || secrets.COPILOT_CLI_TOKEN }} GH_AW_MCP_CONFIG: /home/runner/.copilot/mcp-config.json GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }} - GH_AW_SAFE_OUTPUTS_CONFIG: "{\"add_comment\":{\"max\":1},\"add_labels\":{\"max\":5},\"missing_tool\":{}}" GITHUB_HEAD_REF: ${{ github.head_ref }} GITHUB_MCP_SERVER_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} GITHUB_REF_NAME: ${{ github.ref_name }} GITHUB_STEP_SUMMARY: ${{ env.GITHUB_STEP_SUMMARY }} - GITHUB_TOKEN: ${{ secrets.COPILOT_CLI_TOKEN }} GITHUB_WORKSPACE: ${{ github.workspace }} XDG_CONFIG_HOME: /home/runner - name: Redact secrets in logs @@ -2470,13 +2574,14 @@ jobs: } await main(); env: - GH_AW_SECRET_NAMES: 'COPILOT_CLI_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN' + GH_AW_SECRET_NAMES: 'COPILOT_CLI_TOKEN,COPILOT_GITHUB_TOKEN,GH_AW_GITHUB_TOKEN,GITHUB_TOKEN' SECRET_COPILOT_CLI_TOKEN: ${{ secrets.COPILOT_CLI_TOKEN }} + SECRET_COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} SECRET_GH_AW_GITHUB_TOKEN: ${{ secrets.GH_AW_GITHUB_TOKEN }} SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload Safe Outputs if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: safe_output.jsonl path: ${{ env.GH_AW_SAFE_OUTPUTS }} @@ -2486,24 +2591,58 @@ jobs: uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd env: GH_AW_SAFE_OUTPUTS: ${{ env.GH_AW_SAFE_OUTPUTS }} - GH_AW_SAFE_OUTPUTS_CONFIG: "{\"add_comment\":{\"max\":1},\"add_labels\":{\"max\":5},\"missing_tool\":{}}" GH_AW_ALLOWED_DOMAINS: "api.enterprise.githubcopilot.com,api.github.com,github.com,raw.githubusercontent.com,registry.npmjs.org" + GITHUB_SERVER_URL: ${{ github.server_url }} + GITHUB_API_URL: ${{ github.api_url }} with: script: | async function main() { const fs = require("fs"); + function extractDomainsFromUrl(url) { + if (!url || typeof url !== "string") { + return []; + } + try { + const urlObj = new URL(url); + const hostname = urlObj.hostname.toLowerCase(); + const domains = [hostname]; + if (hostname === "github.com") { + domains.push("api.github.com"); + domains.push("raw.githubusercontent.com"); + domains.push("*.githubusercontent.com"); + } + else if (!hostname.startsWith("api.")) { + domains.push("api." + hostname); + domains.push("raw." + hostname); + } + return domains; + } catch (e) { + return []; + } + } function sanitizeContent(content, maxLength) { if (!content || typeof content !== "string") { return ""; } const allowedDomainsEnv = process.env.GH_AW_ALLOWED_DOMAINS; const defaultAllowedDomains = ["github.com", "github.io", "githubusercontent.com", "githubassets.com", "github.dev", "codespaces.new"]; - const allowedDomains = allowedDomainsEnv + let allowedDomains = allowedDomainsEnv ? allowedDomainsEnv .split(",") .map(d => d.trim()) .filter(d => d) : defaultAllowedDomains; + const githubServerUrl = process.env.GITHUB_SERVER_URL; + const githubApiUrl = process.env.GITHUB_API_URL; + if (githubServerUrl) { + const serverDomains = extractDomainsFromUrl(githubServerUrl); + allowedDomains = allowedDomains.concat(serverDomains); + } + if (githubApiUrl) { + const apiDomains = extractDomainsFromUrl(githubApiUrl); + allowedDomains = allowedDomains.concat(apiDomains); + } + allowedDomains = [...new Set(allowedDomains)]; let sanitized = content; sanitized = neutralizeCommands(sanitized); sanitized = neutralizeMentions(sanitized); @@ -2918,7 +3057,16 @@ jobs: } } const outputFile = process.env.GH_AW_SAFE_OUTPUTS; - const safeOutputsConfig = process.env.GH_AW_SAFE_OUTPUTS_CONFIG; + const configPath = process.env.GH_AW_SAFE_OUTPUTS_CONFIG_PATH || "/tmp/gh-aw/safeoutputs/config.json"; + let safeOutputsConfig; + try { + if (fs.existsSync(configPath)) { + const configFileContent = fs.readFileSync(configPath, "utf8"); + safeOutputsConfig = JSON.parse(configFileContent); + } + } catch (error) { + core.warning(`Failed to read config file from ${configPath}: ${error instanceof Error ? error.message : String(error)}`); + } if (!outputFile) { core.info("GH_AW_SAFE_OUTPUTS not set, no output to collect"); core.setOutput("output", ""); @@ -2937,8 +3085,7 @@ jobs: let expectedOutputTypes = {}; if (safeOutputsConfig) { try { - const rawConfig = JSON.parse(safeOutputsConfig); - expectedOutputTypes = Object.fromEntries(Object.entries(rawConfig).map(([key, value]) => [key.replace(/-/g, "_"), value])); + expectedOutputTypes = Object.fromEntries(Object.entries(safeOutputsConfig).map(([key, value]) => [key.replace(/-/g, "_"), value])); core.info(`Expected output types: ${JSON.stringify(Object.keys(expectedOutputTypes))}`); } catch (error) { const errorMsg = error instanceof Error ? error.message : String(error); @@ -3309,13 +3456,13 @@ jobs: await main(); - name: Upload sanitized agent output if: always() && env.GH_AW_AGENT_OUTPUT - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: agent_output.json path: ${{ env.GH_AW_AGENT_OUTPUT }} if-no-files-found: warn - name: Upload engine output files - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: agent_outputs path: | @@ -3323,7 +3470,7 @@ jobs: if-no-files-found: ignore - name: Upload MCP logs if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: mcp-logs path: /tmp/gh-aw/mcp-logs/ @@ -3335,9 +3482,10 @@ jobs: GH_AW_AGENT_OUTPUT: /tmp/gh-aw/.copilot/logs/ with: script: | - function main() { + function runLogParser(options) { const fs = require("fs"); const path = require("path"); + const { parseLog, parserName, supportsDirectories = false } = options; try { const logPath = process.env.GH_AW_AGENT_OUTPUT; if (!logPath) { @@ -3351,6 +3499,10 @@ jobs: let content = ""; const stat = fs.statSync(logPath); if (stat.isDirectory()) { + if (!supportsDirectories) { + core.info(`Log path is a directory but ${parserName} parser does not support directories: ${logPath}`); + return; + } const files = fs.readdirSync(logPath); const logFiles = files.filter(file => file.endsWith(".log") || file.endsWith(".txt")); if (logFiles.length === 0) { @@ -3361,26 +3513,55 @@ jobs: for (const file of logFiles) { const filePath = path.join(logPath, file); const fileContent = fs.readFileSync(filePath, "utf8"); - content += fileContent; if (content.length > 0 && !content.endsWith("\n")) { content += "\n"; } + content += fileContent; } } else { content = fs.readFileSync(logPath, "utf8"); } - const parsedLog = parseCopilotLog(content); - if (parsedLog) { - core.info(parsedLog); - core.summary.addRaw(parsedLog).write(); - core.info("Copilot log parsed successfully"); + const result = parseLog(content); + let markdown = ""; + let mcpFailures = []; + let maxTurnsHit = false; + if (typeof result === "string") { + markdown = result; + } else if (result && typeof result === "object") { + markdown = result.markdown || ""; + mcpFailures = result.mcpFailures || []; + maxTurnsHit = result.maxTurnsHit || false; + } + if (markdown) { + core.info(markdown); + core.summary.addRaw(markdown).write(); + core.info(`${parserName} log parsed successfully`); } else { - core.error("Failed to parse Copilot log"); + core.error(`Failed to parse ${parserName} log`); + } + if (mcpFailures && mcpFailures.length > 0) { + const failedServers = mcpFailures.join(", "); + core.setFailed(`MCP server(s) failed to launch: ${failedServers}`); + } + if (maxTurnsHit) { + core.setFailed(`Agent execution stopped: max-turns limit reached. The agent did not complete its task successfully.`); } } catch (error) { core.setFailed(error instanceof Error ? error : String(error)); } } + if (typeof module !== "undefined" && module.exports) { + module.exports = { + runLogParser, + }; + } + function main() { + runLogParser({ + parseLog: parseCopilotLog, + parserName: "Copilot", + supportsDirectories: true, + }); + } function extractPremiumRequestCount(logContent) { const patterns = [ /premium\s+requests?\s+consumed:?\s*(\d+)/i, @@ -4208,7 +4389,7 @@ jobs: main(); - name: Upload Agent Stdio if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: agent-stdio.log path: /tmp/gh-aw/agent-stdio.log @@ -4590,24 +4771,29 @@ jobs: run: | mkdir -p /tmp/gh-aw/threat-detection touch /tmp/gh-aw/threat-detection/detection.log - - name: Validate COPILOT_CLI_TOKEN secret + - name: Validate COPILOT_GITHUB_TOKEN or COPILOT_CLI_TOKEN secret run: | - if [ -z "$COPILOT_CLI_TOKEN" ]; then - echo "Error: COPILOT_CLI_TOKEN secret is not set" - echo "The GitHub Copilot CLI engine requires the COPILOT_CLI_TOKEN secret to be configured." - echo "Please configure this secret in your repository settings." + if [ -z "$COPILOT_GITHUB_TOKEN" ] && [ -z "$COPILOT_CLI_TOKEN" ]; then + echo "Error: Neither COPILOT_GITHUB_TOKEN nor COPILOT_CLI_TOKEN secret is set" + echo "The GitHub Copilot CLI engine requires either COPILOT_GITHUB_TOKEN or COPILOT_CLI_TOKEN secret to be configured." + echo "Please configure one of these secrets in your repository settings." echo "Documentation: https://githubnext.github.io/gh-aw/reference/engines/#github-copilot-default" exit 1 fi - echo "COPILOT_CLI_TOKEN secret is configured" + if [ -n "$COPILOT_GITHUB_TOKEN" ]; then + echo "COPILOT_GITHUB_TOKEN secret is configured" + else + echo "COPILOT_CLI_TOKEN secret is configured (using as fallback for COPILOT_GITHUB_TOKEN)" + fi env: + COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} COPILOT_CLI_TOKEN: ${{ secrets.COPILOT_CLI_TOKEN }} - name: Setup Node.js uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 with: node-version: '24' - name: Install GitHub Copilot CLI - run: npm install -g @github/copilot@0.0.353 + run: npm install -g @github/copilot@0.0.354 - name: Execute GitHub Copilot CLI id: agentic_execution # Copilot CLI tool arguments (sorted): @@ -4621,7 +4807,7 @@ jobs: timeout-minutes: 20 run: | set -o pipefail - COPILOT_CLI_INSTRUCTION=$(cat /tmp/gh-aw/aw-prompts/prompt.txt) + COPILOT_CLI_INSTRUCTION="$(cat /tmp/gh-aw/aw-prompts/prompt.txt)" mkdir -p /tmp/ mkdir -p /tmp/gh-aw/ mkdir -p /tmp/gh-aw/agent/ @@ -4629,11 +4815,11 @@ jobs: copilot --add-dir /tmp/ --add-dir /tmp/gh-aw/ --add-dir /tmp/gh-aw/agent/ --log-level all --log-dir /tmp/gh-aw/.copilot/logs/ --disable-builtin-mcps --allow-tool 'shell(cat)' --allow-tool 'shell(grep)' --allow-tool 'shell(head)' --allow-tool 'shell(jq)' --allow-tool 'shell(ls)' --allow-tool 'shell(tail)' --allow-tool 'shell(wc)' --prompt "$COPILOT_CLI_INSTRUCTION" 2>&1 | tee /tmp/gh-aw/threat-detection/detection.log env: COPILOT_AGENT_RUNNER_TYPE: STANDALONE + COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN || secrets.COPILOT_CLI_TOKEN }} GH_AW_PROMPT: /tmp/gh-aw/aw-prompts/prompt.txt GITHUB_HEAD_REF: ${{ github.head_ref }} GITHUB_REF_NAME: ${{ github.ref_name }} GITHUB_STEP_SUMMARY: ${{ env.GITHUB_STEP_SUMMARY }} - GITHUB_TOKEN: ${{ secrets.COPILOT_CLI_TOKEN }} GITHUB_WORKSPACE: ${{ github.workspace }} XDG_CONFIG_HOME: /home/runner - name: Parse threat detection results @@ -4674,7 +4860,7 @@ jobs: } - name: Upload threat detection log if: always() - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 with: name: threat-detection.log path: /tmp/gh-aw/threat-detection/detection.log @@ -4702,8 +4888,8 @@ jobs: - name: Setup agent output environment variable run: | mkdir -p /tmp/gh-aw/safeoutputs/ - find /tmp/gh-aw/safeoutputs/ -type f -print - echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> $GITHUB_ENV + find "/tmp/gh-aw/safeoutputs/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> "$GITHUB_ENV" - name: Record Missing Tool id: missing_tool uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd @@ -4821,7 +5007,7 @@ jobs: id: check_stop_time uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd env: - GH_AW_STOP_TIME: 2025-12-03 20:01:19 + GH_AW_STOP_TIME: 2025-12-12 19:43:36 GH_AW_WORKFLOW_NAME: "Agentic Triage" with: script: | @@ -4891,8 +5077,8 @@ jobs: - name: Setup agent output environment variable run: | mkdir -p /tmp/gh-aw/safeoutputs/ - find /tmp/gh-aw/safeoutputs/ -type f -print - echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> $GITHUB_ENV + find "/tmp/gh-aw/safeoutputs/" -type f -print + echo "GH_AW_AGENT_OUTPUT=/tmp/gh-aw/safeoutputs/agent_output.json" >> "$GITHUB_ENV" - name: Update reaction comment with completion status id: update_reaction uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd diff --git a/.github/workflows/issue-triage.md b/.github/workflows/issue-triage.md index 087f009106..8b327a26cf 100644 --- a/.github/workflows/issue-triage.md +++ b/.github/workflows/issue-triage.md @@ -8,41 +8,68 @@ on: permissions: read-all +# Add stricter error-detection patterns so issue text doesn't trigger agent error detection. +# After merging this file run `gh aw compile` to regenerate the lock file. +env: + GH_AW_ERROR_PATTERNS: >- + [ + {"id":"gh-action-error","pattern":"^::(error)(?:\\\\s+[^:]*)?::(.+)","level_group":1,"message_group":2,"description":"GitHub Actions workflow command - error"}, + {"id":"gh-action-warning","pattern":"^::(warning)(?:\\\\s+[^:]*)?::(.+)","level_group":1,"message_group":2,"description":"GitHub Actions workflow command - warning"}, + {"id":"bracketed-level","pattern":"^\\[(ERROR|CRITICAL|WARNING|WARN)\\]\\s+(.+)","level_group":1,"message_group":2,"description":"Bracketed log level at start of line"}, + {"id":"timestamped-copilot","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z\\s+\\[(ERROR|WARN|WARNING|CRITICAL)\\]\\s+(.+)","level_group":1,"message_group":3,"description":"Timestamped Copilot CLI messages"} + ] + network: defaults safe-outputs: add-labels: - max: 5 + max: 100 + target: "*" add-comment: + max: 10 + target: "*" tools: web-fetch: web-search: + github: + toolsets: + - default + - labels -timeout_minutes: 10 +timeout-minutes: 10 source: githubnext/agentics/workflows/issue-triage.md@0837fb7b24c3b84ee77fb7c8cfa8735c48be347a --- # Agentic Triage -You're a triage assistant for GitHub issues. Your task is to analyze issues created in the last 24 hours and perform initial triage tasks for each of them. +You're a triage assistant for GitHub issues. Your task is to analyze issues that were either created in the last 24 hours or updated (with a new comment) in the last 24 hours, and perform initial triage tasks for each of them. -1. First, use the `list_issues` tool to retrieve all issues created in the last 24 hours. Filter issues by using the `since` parameter with a timestamp from 24 hours ago (calculate: current time minus 24 hours in ISO 8601 format). +1. First, use the `list_issues` tool to retrieve all issues created or updated in the last 24 hours. The `since` parameter filters by the issue's `updated_at` timestamp, which includes both newly created issues and recently commented issues. Calculate the timestamp from 24 hours ago (example: 2025-11-06T20:27:14Z for reference) and use it for the `since` parameter. 2. For each issue found, perform the following triage tasks: -3. Select appropriate labels for the issue from the provided list. +3. Use the `get_comments` tool to retrieve all the comments on the issue. -4. Retrieve the issue content using the `get_issue` tool. If the issue is obviously spam, or generated by bot, or something else that is not an actual issue to be worked on, then add an issue comment to the issue with a one sentence analysis and move to the next issue. +4. Check for spam and quality issue descriptions and comments first: + + - **Non-English Content**: If the issue is primarily written in a non-English language, add a respectful and appreciative comment explaining that while you appreciate their contribution, the majority of the community communicates in English and kindly ask them to repost in English so everyone can follow along and help. Provide a friendly translation of your message in their language if possible. + - **Multiple Topics**: If the issue discusses multiple unrelated topics or problems, add a comment explaining that each issue should focus on one clear topic so the team can effectively solve the right problem. Politely ask them to split it into separate issues. + - **Obvious Spam or Bot-Generated Content**: If the issue/comment is obviously spam, generated by a bot, or something that is not an actual issue to be worked on, add an issue comment with a one-sentence analysis and move to the next issue. -5. Next, use the GitHub tools to gather additional context about the issue: +5. Retrieve the issue content using the `get_issue` tool for any issues that pass the spam checks. - - Fetch the list of labels available in this repository. Use 'gh label list' bash command to fetch the labels. This will give you the labels you can use for triaging issues. - - Fetch any comments on the issue using the `get_issue_comments` tool - - **Search for duplicate and related issues**: Use the `search_issues` tool to find similar issues by searching for key terms from the issue title and description. Look for both open and closed issues that might be related or duplicates. +6. Next, use the GitHub tools to gather additional context about the issue: -6. Analyze the issue content, considering: + - Fetch the list of labels available in this repository using the `list_label` tool with `owner: "appwrite"` and `repo: "appwrite"` parameters. This will give you the labels you can use for triaging issues. + - Fetch any comments on the issue using the `get_issue_comments` tool to understand recent activity + - **Search for duplicate and related issues (repo first, then org-wide)**: + - First search in this repository using the `search_issues` tool with a query like: `repo:appwrite/appwrite is:issue (is:open OR is:closed) `. + - Then perform an org-wide search across the entire Appwrite organization using: `org:appwrite is:issue (is:open OR is:closed) `. + - Prefer linking to OPEN issues when identifying potential duplicates; include CLOSED ones as related history when useful. + +7. Analyze the issue content, considering: - The issue title and description - The type of issue (bug report, feature request, question, etc.) @@ -51,35 +78,38 @@ You're a triage assistant for GitHub issues. Your task is to analyze issues crea - User impact - Components affected -7. Write notes, ideas, nudges, resource links, debugging strategies and/or reproduction steps for the team to consider relevant to the issue. +8. Write notes, ideas, nudges, resource links, debugging strategies and/or reproduction steps for the team to consider relevant to the issue. -8. Select appropriate labels from the available labels list provided above: +9. Select appropriate labels from the available labels list: - Choose labels that accurately reflect the issue's nature - Be specific but comprehensive - Select priority labels if you can determine urgency (high-priority, med-priority, or low-priority) - Consider platform labels (android, ios) if applicable - - Search for similar issues, and if you find similar issues consider using a "duplicate" label if appropriate. Only do so if the issue is a duplicate of another OPEN issue. - - Only select labels from the provided list above + - Search for similar issues. If you find a duplicate of another OPEN issue in THIS repository, you may use a "duplicate" label (if available) and reference the canonical issue. + - If the closest match is in another repository within the Appwrite org, do NOT mark as duplicate here; instead, link it in your comment under a "Cross‑repo related issues" section. + - Only select labels from the provided list + - Don't apply the `good first issue` or `help wanted` labels - It's okay to not add any labels if none are clearly applicable -9. Apply the selected labels: +10. Apply the selected labels: - Use the `update_issue` tool to apply the labels to the issue - DO NOT communicate directly with users - If no labels are clearly applicable, do not apply any labels -10. Add an issue comment to the issue with your analysis: +11. Add an issue comment to the issue with your analysis: - Start with "🎯 Agentic Issue Triage" - Provide a brief summary of the issue - - **If duplicate or related issues were found**, add a section listing them with links (e.g., "### 🔗 Potentially Related Issues" followed by a bullet list of related issues with their titles and links) + - **If duplicate or related issues were found**, add sections listing them with links: + - "### 🔗 Potentially Related Issues (this repo)" – bullet list of same-repo issues with titles and links + - If applicable: "### 🌐 Cross-repo related issues (org: appwrite)" – bullet list including `owner/repo#number` with titles and links - Mention any relevant details that might help the team understand the issue better - Include any debugging strategies or reproduction steps if applicable - Suggest resources or links that might be helpful for resolving the issue or learning skills related to the issue or the particular area of the codebase affected by it - Mention any nudges or ideas that could help the team in addressing the issue - - If you have possible reproduction steps, include them in the comment - - If you have any debugging strategies, include them in the comment - - If appropriate break the issue down to sub-tasks and write a checklist of things to do. - - Use collapsed-by-default sections in the GitHub markdown to keep the comment tidy. Collapse all sections except the short main summary at the top. + - If appropriate break the issue down to sub-tasks and write a checklist of things to do + - Use collapsed-by-default sections in the GitHub markdown to keep the comment tidy. Collapse all sections except the short main summary at the top. For bolded section titles, wrap the text with `` and `` to make it bold. + - Do not indicate/encourage a community member to submit a PR for the issue. -11. After processing all issues, provide a summary of how many issues were triaged. If no issues were created in the last 24 hours, simply note that no new issues needed triage. +12. After processing all issues, provide a summary of how many issues were triaged (created or updated in the last 24 hours). If no issues matched the criteria, simply note that no issues needed triage. diff --git a/README-CN.md b/README-CN.md index ad9ce7d29a..c087b16201 100644 --- a/README-CN.md +++ b/README-CN.md @@ -2,7 +2,7 @@

- Appwrite banner with logo and slogan build like a team of hundreds + Appwrite banner, with logo and text saying

适用于[Flutter/Vue/Angular/React/iOS/Android/* 等等平台 *]的完整后端服务 @@ -36,7 +36,6 @@ Appwrite 可以提供给开发者用户验证,外部授权,用户数据读 内容: - - [开始](#开始) - [安装](#安装) - [Unix](#unix) @@ -57,7 +56,8 @@ Appwrite 可以提供给开发者用户验证,外部授权,用户数据读 - [版权说明](#版权说明) ## 开始 -要轻松开始使用Appwrite,您可以[**免费注册Appwrite Cloud**](https://cloud.appwrite.io/)。在Appwrite Cloud公开测试版期间,您可以完全免费使用Appwrite,而且我们不会收集您的信用卡信息。 + +要轻松开始使用 Appwrite,您可以[**免费注册 Appwrite Cloud**](https://cloud.appwrite.io/)。在 Appwrite Cloud 公开测试版期间,您可以完全免费使用 Appwrite,而且我们不会收集您的信用卡信息。 ## 安装 @@ -119,22 +119,16 @@ docker run -it --rm `
DigitalOcean - - - Gitpod Logo -
Gitpod
- - Akamai Logo -
Akamai Compute
+
Akamai Compute AWS Logo -
AWS Marketplace
+
AWS Marketplace @@ -188,25 +182,28 @@ docker run -it --rm ` 以下是当前支持的平台和语言列表。如果您想帮助我们为您选择的平台添加支持,您可以访问我们的 [SDK 生成器](https://github.com/appwrite/sdk-generator) 项目并查看我们的 [贡献指南](https://github.com/appwrite/sdk-generator/blob/master/CONTRIBUTING.md)。 #### 客户端 -* :white_check_mark:   [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护) -* :white_check_mark:   [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护) -* :white_check_mark:   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) -* :white_check_mark:   [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护) + +- :white_check_mark:   [Web](https://github.com/appwrite/sdk-for-web) (由 Appwrite 团队维护) +- :white_check_mark:   [Flutter](https://github.com/appwrite/sdk-for-flutter) (由 Appwrite 团队维护) +- :white_check_mark:   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) +- :white_check_mark:   [Android](https://github.com/appwrite/sdk-for-android) (由 Appwrite 团队维护) #### 服务器 -* :white_check_mark:   [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护) -* :white_check_mark:   [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护) -* :white_check_mark:   [Dart](https://github.com/appwrite/sdk-for-dart) - (由 Appwrite 团队维护) -* :white_check_mark:   [Deno](https://github.com/appwrite/sdk-for-deno) - **公测** (由 Appwrite 团队维护) -* :white_check_mark:   [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护) -* :white_check_mark:   [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护) -* :white_check_mark:   [Kotlin](https://github.com/appwrite/sdk-for-kotlin) - **公测** (由 Appwrite 团队维护) -* :white_check_mark:   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) -* :white_check_mark:   [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护) + +- :white_check_mark:   [NodeJS](https://github.com/appwrite/sdk-for-node) (由 Appwrite 团队维护) +- :white_check_mark:   [PHP](https://github.com/appwrite/sdk-for-php) (由 Appwrite 团队维护) +- :white_check_mark:   [Dart](https://github.com/appwrite/sdk-for-dart) - (由 Appwrite 团队维护) +- :white_check_mark:   [Deno](https://github.com/appwrite/sdk-for-deno) - **公测** (由 Appwrite 团队维护) +- :white_check_mark:   [Ruby](https://github.com/appwrite/sdk-for-ruby) (由 Appwrite 团队维护) +- :white_check_mark:   [Python](https://github.com/appwrite/sdk-for-python) (由 Appwrite 团队维护) +- :white_check_mark:   [Kotlin](https://github.com/appwrite/sdk-for-kotlin) - **公测** (由 Appwrite 团队维护) +- :white_check_mark:   [Apple](https://github.com/appwrite/sdk-for-apple) - **公测** (由 Appwrite 团队维护) +- :white_check_mark:   [.NET](https://github.com/appwrite/sdk-for-dotnet) - **公测** (由 Appwrite 团队维护) #### 开发者社区 -* :white_check_mark:   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/)) -* :white_check_mark:   [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub)) + +- :white_check_mark:   [Appcelerator Titanium](https://github.com/m1ga/ti.appwrite) (维护者 [Michael Gangolf](https://github.com/m1ga/)) +- :white_check_mark:   [Godot Engine](https://github.com/GodotNuts/appwrite-sdk) (维护者 [fenix-hub @GodotNuts](https://github.com/fenix-hub)) 找不到需要的的 SDK? - 欢迎通过发起 PR 来帮助我们完善 Appwrite 的软件生态环境 [SDK 生成器](https://github.com/appwrite/sdk-generator)! diff --git a/README.md b/README.md index 50c1ed399b..0743234954 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@

- Appwrite banner, with logo and text saying + Appwrite banner, with logo and text saying

- Appwrite is an all-in-one development platform for Web, Mobile, and Flutter applications. Use built-in backend infrastructure and web hosting, all from a single place. Built with the open source community and optimized for developer experience in the coding languages you love. + Appwrite is a best-in-class, developer-first platform that gives builders everything they need to create scalable, stable, and production-ready software, fast.

@@ -32,13 +32,6 @@ Appwrite is an end-to-end platform for building Web, Mobile, Native, or Backend Using Appwrite, you can easily integrate your app with user authentication and multiple sign-in methods, a database for storing and querying users and team data, storage and file management, image manipulation, Cloud Functions, messaging, and [more services](https://appwrite.io/docs). -

-
- Appwrite - 100% open source alternative for Firebase | Product Hunt -
-
-

- ![Appwrite project dashboard showing various Appwrite features](public/images/github.png) Find out more at: [https://appwrite.io](https://appwrite.io). @@ -129,12 +122,6 @@ Choose from one of the providers below:
DigitalOcean - - - Gitpod Logo -
Gitpod
- - Akamai Logo diff --git a/app/config/errors.php b/app/config/errors.php index e9c3894f53..6d747e4eb1 100644 --- a/app/config/errors.php +++ b/app/config/errors.php @@ -688,12 +688,12 @@ return [ /** Databases */ Exception::DATABASE_NOT_FOUND => [ 'name' => Exception::DATABASE_NOT_FOUND, - 'description' => 'Database not found', + 'description' => 'Database with the requested ID \'%s\' could not be found.', 'code' => 404 ], Exception::DATABASE_ALREADY_EXISTS => [ 'name' => Exception::DATABASE_ALREADY_EXISTS, - 'description' => 'Database already exists', + 'description' => 'Database with the requested ID \'%s\' already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', 'code' => 409 ], Exception::DATABASE_TIMEOUT => [ @@ -710,41 +710,41 @@ return [ /** Collections */ Exception::COLLECTION_NOT_FOUND => [ 'name' => Exception::COLLECTION_NOT_FOUND, - 'description' => 'Collection with the requested ID could not be found.', + 'description' => 'Collection with the requested ID \'%s\' could not be found.', 'code' => 404, ], Exception::COLLECTION_ALREADY_EXISTS => [ 'name' => Exception::COLLECTION_ALREADY_EXISTS, - 'description' => 'A collection with the requested ID already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', + 'description' => 'A collection with the requested ID \'%s\' already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', 'code' => 409, ], Exception::COLLECTION_LIMIT_EXCEEDED => [ 'name' => Exception::COLLECTION_LIMIT_EXCEEDED, - 'description' => 'The maximum number of collections has been reached.', + 'description' => 'The maximum number of collections for database \'%s\' has been reached.', 'code' => 400, ], /** Tables */ Exception::TABLE_NOT_FOUND => [ 'name' => Exception::TABLE_NOT_FOUND, - 'description' => 'Table with the requested ID could not be found.', + 'description' => 'Table with the requested ID \'%s\' could not be found.', 'code' => 404, ], Exception::TABLE_ALREADY_EXISTS => [ 'name' => Exception::TABLE_ALREADY_EXISTS, - 'description' => 'A table with the requested ID already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', + 'description' => 'A table with the requested ID \'%s\' already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', 'code' => 409, ], Exception::TABLE_LIMIT_EXCEEDED => [ 'name' => Exception::TABLE_LIMIT_EXCEEDED, - 'description' => 'The maximum number of tables has been reached.', + 'description' => 'The maximum number of tables for database \'%s\' has been reached.', 'code' => 400, ], /** Documents */ Exception::DOCUMENT_NOT_FOUND => [ 'name' => Exception::DOCUMENT_NOT_FOUND, - 'description' => 'Document with the requested ID could not be found.', + 'description' => 'Document with the requested ID \'%s\' could not be found.', 'code' => 404, ], Exception::DOCUMENT_INVALID_STRUCTURE => [ @@ -764,7 +764,7 @@ return [ ], Exception::DOCUMENT_ALREADY_EXISTS => [ 'name' => Exception::DOCUMENT_ALREADY_EXISTS, - 'description' => 'Document with the requested ID already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', + 'description' => 'Document with the requested ID \'%s\' already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', 'code' => 409, ], Exception::DOCUMENT_UPDATE_CONFLICT => [ @@ -781,7 +781,7 @@ return [ /** Rows */ Exception::ROW_NOT_FOUND => [ 'name' => Exception::ROW_NOT_FOUND, - 'description' => 'Row with the requested ID could not be found.', + 'description' => 'Row with the requested ID \'%s\' could not be found.', 'code' => 404, ], Exception::ROW_INVALID_STRUCTURE => [ @@ -791,7 +791,7 @@ return [ ], Exception::ROW_MISSING_DATA => [ 'name' => Exception::ROW_MISSING_DATA, - 'description' => 'The row data is missing. Try again with row data populated', + 'description' => 'The row data is missing. Try again with row data populated.', 'code' => 400, ], Exception::ROW_MISSING_PAYLOAD => [ @@ -801,7 +801,7 @@ return [ ], Exception::ROW_ALREADY_EXISTS => [ 'name' => Exception::ROW_ALREADY_EXISTS, - 'description' => 'Row with the requested ID already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', + 'description' => 'Row with the requested ID \'%s\' already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', 'code' => 409, ], Exception::ROW_UPDATE_CONFLICT => [ @@ -818,17 +818,17 @@ return [ /** Attributes */ Exception::ATTRIBUTE_NOT_FOUND => [ 'name' => Exception::ATTRIBUTE_NOT_FOUND, - 'description' => 'Attribute with the requested ID could not be found.', + 'description' => 'Attribute with the requested key \'%s\' could not be found.', 'code' => 404, ], Exception::ATTRIBUTE_UNKNOWN => [ 'name' => Exception::ATTRIBUTE_UNKNOWN, - 'description' => 'The attribute required for the index could not be found. Please confirm all your attributes are in the available state.', + 'description' => 'The attribute \'%s\' required for the index could not be found. Please confirm all your attributes are in the available state.', 'code' => 400, ], Exception::ATTRIBUTE_NOT_AVAILABLE => [ 'name' => Exception::ATTRIBUTE_NOT_AVAILABLE, - 'description' => 'The requested attribute is not yet available. Please try again later.', + 'description' => 'The requested attribute \'%s\' is not yet available. Please try again later.', 'code' => 400, ], Exception::ATTRIBUTE_FORMAT_UNSUPPORTED => [ @@ -843,12 +843,12 @@ return [ ], Exception::ATTRIBUTE_ALREADY_EXISTS => [ 'name' => Exception::ATTRIBUTE_ALREADY_EXISTS, - 'description' => 'Attribute with the requested key already exists. Attribute keys must be unique, try again with a different key.', + 'description' => 'Attribute with the requested key \'%s\' already exists. Attribute keys must be unique, try again with a different key.', 'code' => 409, ], Exception::ATTRIBUTE_LIMIT_EXCEEDED => [ 'name' => Exception::ATTRIBUTE_LIMIT_EXCEEDED, - 'description' => 'The maximum number or size of attributes for this collection has been reached.', + 'description' => 'The maximum number or size of attributes for collection \'%s\' has been reached.', 'code' => 400, ], Exception::ATTRIBUTE_VALUE_INVALID => [ @@ -858,7 +858,7 @@ return [ ], Exception::ATTRIBUTE_TYPE_INVALID => [ 'name' => Exception::ATTRIBUTE_TYPE_INVALID, - 'description' => 'The attribute type is invalid.', + 'description' => 'The attribute \'%s\' type is invalid.', 'code' => 400, ], Exception::ATTRIBUTE_INVALID_RESIZE => [ @@ -869,7 +869,7 @@ return [ Exception::ATTRIBUTE_TYPE_NOT_SUPPORTED => [ 'name' => Exception::ATTRIBUTE_TYPE_NOT_SUPPORTED, - 'description' => 'Attribute type is not supported.', + 'description' => 'Attribute type \'%s\' is not supported.', 'code' => 400, ], @@ -883,17 +883,17 @@ return [ /** Columns */ Exception::COLUMN_NOT_FOUND => [ 'name' => Exception::COLUMN_NOT_FOUND, - 'description' => 'Column with the requested ID could not be found.', + 'description' => 'Column with the requested key \'%s\' could not be found.', 'code' => 404, ], Exception::COLUMN_UNKNOWN => [ 'name' => Exception::COLUMN_UNKNOWN, - 'description' => 'The column required for the index could not be found. Please confirm all your columns are in the available state.', + 'description' => 'The column \'%s\' required for the index could not be found. Please confirm all your columns are in the available state.', 'code' => 400, ], Exception::COLUMN_NOT_AVAILABLE => [ 'name' => Exception::COLUMN_NOT_AVAILABLE, - 'description' => 'The requested column is not yet available. Please try again later.', + 'description' => 'The requested column \'%s\' is not yet available. Please try again later.', 'code' => 400, ], Exception::COLUMN_FORMAT_UNSUPPORTED => [ @@ -908,12 +908,12 @@ return [ ], Exception::COLUMN_ALREADY_EXISTS => [ 'name' => Exception::COLUMN_ALREADY_EXISTS, - 'description' => 'Column with the requested key already exists. Column keys must be unique, try again with a different key.', + 'description' => 'Column with the requested key \'%s\' already exists. Column keys must be unique, try again with a different key.', 'code' => 409, ], Exception::COLUMN_LIMIT_EXCEEDED => [ 'name' => Exception::COLUMN_LIMIT_EXCEEDED, - 'description' => 'The maximum number or size of columns for this table has been reached.', + 'description' => 'The maximum number or size of columns for table \'%s\' has been reached.', 'code' => 400, ], Exception::COLUMN_VALUE_INVALID => [ @@ -923,7 +923,7 @@ return [ ], Exception::COLUMN_TYPE_INVALID => [ 'name' => Exception::COLUMN_TYPE_INVALID, - 'description' => 'The column type is invalid.', + 'description' => 'The column \'%s\' type is invalid.', 'code' => 400, ], Exception::COLUMN_INVALID_RESIZE => [ @@ -933,24 +933,24 @@ return [ ], Exception::COLUMN_TYPE_NOT_SUPPORTED => [ 'name' => Exception::COLUMN_TYPE_NOT_SUPPORTED, - 'description' => 'Column type is not supported.', + 'description' => 'Column type \'%s\' is not supported.', 'code' => 400, ], /** Indexes */ Exception::INDEX_NOT_FOUND => [ 'name' => Exception::INDEX_NOT_FOUND, - 'description' => 'Index with the requested ID could not be found.', + 'description' => 'Index with the requested key \'%s\' could not be found.', 'code' => 404, ], Exception::INDEX_LIMIT_EXCEEDED => [ 'name' => Exception::INDEX_LIMIT_EXCEEDED, - 'description' => 'The maximum number of indexes has been reached.', + 'description' => 'The maximum number of indexes for collection \'%s\' has been reached.', 'code' => 400, ], Exception::INDEX_ALREADY_EXISTS => [ 'name' => Exception::INDEX_ALREADY_EXISTS, - 'description' => 'Index with the requested key already exists. Try again with a different key.', + 'description' => 'Index with the requested key \'%s\' already exists. Try again with a different key.', 'code' => 409, ], Exception::INDEX_INVALID => [ @@ -960,24 +960,24 @@ return [ ], Exception::INDEX_DEPENDENCY => [ 'name' => Exception::INDEX_DEPENDENCY, - 'description' => 'Attribute cannot be renamed or deleted. Please remove the associated index first.', + 'description' => 'Attribute \'%s\' cannot be renamed or deleted. Please remove the associated index first.', 'code' => 409, ], /** Column Indexes, same as Indexes but with different type */ Exception::COLUMN_INDEX_NOT_FOUND => [ 'name' => Exception::COLUMN_INDEX_NOT_FOUND, - 'description' => 'Index with the requested ID could not be found.', + 'description' => 'Index with the requested key \'%s\' could not be found.', 'code' => 404, ], Exception::COLUMN_INDEX_LIMIT_EXCEEDED => [ 'name' => Exception::COLUMN_INDEX_LIMIT_EXCEEDED, - 'description' => 'The maximum number of indexes has been reached.', + 'description' => 'The maximum number of indexes for table \'%s\' has been reached.', 'code' => 400, ], Exception::COLUMN_INDEX_ALREADY_EXISTS => [ 'name' => Exception::COLUMN_INDEX_ALREADY_EXISTS, - 'description' => 'Index with the requested key already exists. Try again with a different key.', + 'description' => 'Index with the requested key \'%s\' already exists. Try again with a different key.', 'code' => 409, ], Exception::COLUMN_INDEX_INVALID => [ @@ -987,19 +987,19 @@ return [ ], Exception::COLUMN_INDEX_DEPENDENCY => [ 'name' => Exception::COLUMN_INDEX_DEPENDENCY, - 'description' => 'Column cannot be renamed or deleted. Please remove the associated index first.', + 'description' => 'Column \'%s\' cannot be renamed or deleted. Please remove the associated index first.', 'code' => 409, ], /** Transactions */ Exception::TRANSACTION_NOT_FOUND => [ 'name' => Exception::TRANSACTION_NOT_FOUND, - 'description' => 'Transaction with the requested ID could not be found.', + 'description' => 'Transaction with the requested ID \'%s\' could not be found.', 'code' => 404, ], Exception::TRANSACTION_ALREADY_EXISTS => [ 'name' => Exception::TRANSACTION_ALREADY_EXISTS, - 'description' => 'Transaction with the requested ID already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', + 'description' => 'Transaction with the requested ID \'%s\' already exists. Try again with a different ID or use ID.unique() to generate a unique ID.', 'code' => 409, ], Exception::TRANSACTION_INVALID => [ diff --git a/app/config/platform.php b/app/config/platform.php new file mode 100644 index 0000000000..b9d9dccbef --- /dev/null +++ b/app/config/platform.php @@ -0,0 +1,25 @@ + System::getEnv('_APP_DOMAIN', 'localhost'), + 'consoleHostname' => System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', 'localhost')), + 'hostnames' => array_filter(array_unique([ + System::getEnv('_APP_DOMAIN', 'localhost'), + System::getEnv('_APP_CONSOLE_DOMAIN', 'localhost'), + ])), + 'platformName' => APP_EMAIL_PLATFORM_NAME, + 'logoUrl' => APP_EMAIL_LOGO_URL, + 'accentColor' => APP_EMAIL_ACCENT_COLOR, + 'footerImageUrl' => APP_EMAIL_FOOTER_IMAGE_URL, + 'twitterUrl' => APP_SOCIAL_TWITTER, + 'discordUrl' => APP_SOCIAL_DISCORD, + 'githubUrl' => APP_SOCIAL_GITHUB, + 'termsUrl' => APP_EMAIL_TERMS_URL, + 'privacyUrl' => APP_EMAIL_PRIVACY_URL, + 'websiteUrl' => 'https://' . APP_DOMAIN, +]; diff --git a/app/config/platforms.php b/app/config/sdks.php similarity index 100% rename from app/config/platforms.php rename to app/config/sdks.php diff --git a/app/config/specs/open-api3-1.8.x-client.json b/app/config/specs/open-api3-1.8.x-client.json index 5d645ac86e..fe3f2f50ad 100644 --- a/app/config/specs/open-api3-1.8.x-client.json +++ b/app/config/specs/open-api3-1.8.x-client.json @@ -62,6 +62,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -111,6 +112,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -196,6 +198,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -272,6 +275,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -342,6 +346,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -405,6 +410,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -454,6 +460,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -531,6 +538,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -601,6 +609,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -627,6 +636,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -652,7 +662,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -721,6 +732,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -749,6 +761,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -776,7 +789,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -857,6 +871,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -882,6 +897,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -906,7 +922,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -977,6 +994,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1003,6 +1021,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1028,7 +1047,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1105,6 +1125,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1133,6 +1154,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1160,7 +1182,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1239,6 +1262,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1261,6 +1285,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1282,7 +1307,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1336,6 +1362,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1358,6 +1385,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1379,7 +1407,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1431,6 +1460,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1453,6 +1483,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1474,7 +1505,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1526,6 +1558,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1548,6 +1581,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1569,7 +1603,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1623,6 +1658,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1693,6 +1729,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1768,6 +1805,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1844,6 +1882,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1893,6 +1932,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1966,6 +2006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2040,6 +2081,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2122,6 +2164,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2164,6 +2207,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2215,6 +2259,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2264,6 +2309,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2338,6 +2384,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2409,6 +2456,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2551,6 +2599,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2629,6 +2678,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2703,6 +2753,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2764,6 +2815,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2818,6 +2870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2881,6 +2934,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2931,6 +2985,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3010,6 +3065,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3081,6 +3137,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3146,6 +3203,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3228,6 +3286,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3305,6 +3364,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3450,6 +3510,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3524,6 +3585,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3545,7 +3607,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3568,6 +3631,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3642,6 +3706,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3665,7 +3730,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3690,6 +3756,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3775,6 +3842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3824,6 +3892,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3894,6 +3963,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4020,6 +4090,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4152,6 +4223,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4210,6 +4282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4698,6 +4771,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4780,6 +4854,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4872,6 +4947,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4964,6 +5040,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5715,6 +5792,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5780,6 +5858,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5848,6 +5927,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5910,6 +5990,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5986,6 +6067,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6050,6 +6132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6133,6 +6216,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -6243,6 +6327,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6277,6 +6362,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6401,6 +6487,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -6510,6 +6597,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6544,6 +6632,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6666,6 +6755,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -6776,6 +6866,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -6882,6 +6973,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -7008,6 +7100,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -7133,6 +7226,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7219,6 +7313,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7336,6 +7431,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7410,6 +7506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7462,6 +7559,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7514,6 +7612,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7566,6 +7665,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7618,6 +7718,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7670,6 +7771,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7722,6 +7824,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7774,6 +7877,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7826,6 +7930,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7878,6 +7983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7931,6 +8037,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8014,6 +8121,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8088,6 +8196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8185,6 +8294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8284,6 +8394,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8356,6 +8467,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8447,6 +8559,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8514,6 +8627,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8592,6 +8706,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8820,6 +8935,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8908,6 +9024,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8976,6 +9093,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9047,6 +9165,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9112,6 +9231,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9191,6 +9311,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9258,6 +9379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9344,6 +9466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9453,6 +9576,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -9482,7 +9606,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true } ], "auth": { @@ -9606,6 +9731,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9714,6 +9840,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -9742,7 +9869,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -9861,6 +9989,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9970,6 +10099,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10075,6 +10205,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10200,6 +10331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10321,6 +10453,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10408,6 +10541,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10493,6 +10627,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10555,6 +10690,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10629,6 +10765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10693,6 +10830,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10790,6 +10928,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10908,6 +11047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10980,6 +11120,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11074,6 +11215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11147,6 +11289,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11245,6 +11388,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11306,6 +11450,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/open-api3-1.8.x-console.json b/app/config/specs/open-api3-1.8.x-console.json index e6a6bdfee5..d436913e90 100644 --- a/app/config/specs/open-api3-1.8.x-console.json +++ b/app/config/specs/open-api3-1.8.x-console.json @@ -62,6 +62,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -110,6 +111,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -185,6 +187,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -234,6 +237,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -309,6 +313,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -378,6 +383,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -440,6 +446,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -489,6 +496,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -565,6 +573,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -634,6 +643,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -660,6 +670,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -685,7 +696,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -753,6 +765,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -781,6 +794,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -808,7 +822,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -888,6 +903,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -913,6 +929,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -937,7 +954,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1007,6 +1025,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1033,6 +1052,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1058,7 +1078,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1135,6 +1156,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1163,6 +1185,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1190,7 +1213,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1268,6 +1292,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1290,6 +1315,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1311,7 +1337,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1364,6 +1391,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1386,6 +1414,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1407,7 +1436,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1458,6 +1488,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1480,6 +1511,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1501,7 +1533,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1552,6 +1585,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1574,6 +1608,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1595,7 +1630,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1648,6 +1684,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1717,6 +1754,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1791,6 +1829,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1866,6 +1905,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1914,6 +1954,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1986,6 +2027,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2059,6 +2101,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2140,6 +2183,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2181,6 +2225,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2231,6 +2276,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2280,6 +2326,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2354,6 +2401,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2425,6 +2473,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2567,6 +2616,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2645,6 +2695,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2719,6 +2770,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2779,6 +2831,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2832,6 +2885,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2894,6 +2948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2943,6 +2998,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3021,6 +3077,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3091,6 +3148,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3155,6 +3213,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3237,6 +3296,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3314,6 +3374,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3459,6 +3520,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3533,6 +3595,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3554,7 +3617,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3577,6 +3641,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3650,6 +3715,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3673,7 +3739,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3698,6 +3765,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3782,6 +3850,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3830,6 +3899,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3899,6 +3969,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4025,6 +4096,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4157,6 +4229,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4215,6 +4288,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4703,6 +4777,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4785,6 +4860,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4877,6 +4953,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4969,6 +5046,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5711,6 +5789,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5771,6 +5850,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5846,6 +5926,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5894,6 +5975,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5920,6 +6002,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -6010,6 +6093,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6039,6 +6123,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6126,6 +6211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6191,6 +6277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6259,6 +6346,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6321,6 +6409,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6397,6 +6486,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6461,6 +6551,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6542,6 +6633,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6566,6 +6658,7 @@ ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/list-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6644,6 +6737,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6670,6 +6764,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6735,6 +6830,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6764,6 +6860,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6846,6 +6943,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6871,6 +6969,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6938,6 +7037,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -7036,6 +7136,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -7161,6 +7262,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -7234,6 +7336,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -7338,6 +7441,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -7413,6 +7517,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -7512,6 +7617,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7623,6 +7729,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7739,6 +7846,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7850,6 +7958,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -7966,6 +8075,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -8077,6 +8187,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -8193,6 +8304,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -8313,6 +8425,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -8438,6 +8551,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8561,6 +8675,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8689,6 +8804,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8812,6 +8928,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -8940,6 +9057,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -9051,6 +9169,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -9167,6 +9286,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -9280,6 +9400,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -9402,6 +9523,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -9515,6 +9637,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9637,6 +9760,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9750,6 +9874,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9872,6 +9997,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -10009,6 +10135,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -10131,6 +10258,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -10253,6 +10381,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -10364,6 +10493,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10511,6 +10641,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10586,6 +10717,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10670,6 +10802,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10786,6 +10919,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10896,6 +11030,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10930,6 +11065,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10961,6 +11097,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -11082,6 +11219,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11113,6 +11251,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11217,6 +11356,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -11321,6 +11461,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -11423,6 +11564,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11532,6 +11674,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11566,6 +11709,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11688,6 +11832,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11798,6 +11943,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11901,6 +12047,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRowLogs" @@ -12001,6 +12148,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -12127,6 +12275,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -12250,6 +12399,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -12347,6 +12497,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -12486,6 +12637,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -12561,6 +12713,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12645,6 +12798,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTableLogs" @@ -12732,6 +12886,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTableUsage" @@ -12828,6 +12983,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12855,6 +13011,7 @@ ], "description": "Get the database activity logs list by its unique ID.", "demo": "databases\/list-logs.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12934,6 +13091,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -12961,6 +13119,7 @@ ], "description": "Get usage metrics and statistics for a database. You can view the total number of collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/get-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -13049,6 +13208,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13133,6 +13293,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13427,6 +13588,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13477,6 +13639,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13526,6 +13689,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13718,6 +13882,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13778,6 +13943,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13850,6 +14016,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13909,6 +14076,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14200,6 +14368,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14261,6 +14430,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14341,6 +14511,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14435,6 +14606,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -14533,6 +14705,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14618,6 +14791,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14734,6 +14908,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14831,6 +15006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14893,6 +15069,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14958,6 +15135,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15047,6 +15225,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15120,6 +15299,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15206,6 +15386,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15323,6 +15504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15386,6 +15568,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15457,6 +15640,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15539,6 +15723,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15598,6 +15783,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15689,6 +15875,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15758,6 +15945,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15851,6 +16039,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15924,6 +16113,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15976,6 +16166,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16026,6 +16217,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16075,6 +16267,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16124,6 +16317,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16173,6 +16367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16233,6 +16428,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16282,6 +16478,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16331,6 +16528,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16393,6 +16591,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16455,6 +16654,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16528,6 +16728,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16590,6 +16791,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16678,6 +16880,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16740,6 +16943,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16802,6 +17006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16864,6 +17069,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16926,6 +17132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16988,6 +17195,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17050,6 +17258,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17112,6 +17321,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17174,6 +17384,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17223,6 +17434,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17272,6 +17484,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17323,6 +17536,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17375,6 +17589,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17427,6 +17642,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17479,6 +17695,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17531,6 +17748,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17583,6 +17801,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17635,6 +17854,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17687,6 +17907,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17738,6 +17959,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17825,6 +18047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17970,6 +18193,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18127,6 +18351,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18303,6 +18528,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18499,6 +18725,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18532,6 +18759,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18564,7 +18792,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -18677,6 +18906,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18709,6 +18939,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18740,7 +18971,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -18861,6 +19093,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18914,6 +19147,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18976,6 +19210,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19062,6 +19297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19148,6 +19384,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19235,6 +19472,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19269,6 +19507,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19302,7 +19541,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -19411,6 +19651,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19444,6 +19685,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19476,7 +19718,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -19589,6 +19832,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19619,6 +19863,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19648,7 +19893,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -19738,6 +19984,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19767,6 +20014,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19795,7 +20043,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -19888,6 +20137,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20005,6 +20255,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20125,6 +20376,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20221,6 +20473,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20320,6 +20573,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20426,6 +20680,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20535,6 +20790,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20641,6 +20897,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20750,6 +21007,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20791,6 +21049,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20831,7 +21090,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -20978,6 +21238,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21017,6 +21278,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21055,7 +21317,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -21206,6 +21469,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21302,6 +21566,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21401,6 +21666,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21497,6 +21763,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21596,6 +21863,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21692,6 +21960,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21791,6 +22060,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21887,6 +22157,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21986,6 +22257,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22039,6 +22311,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22101,6 +22374,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22187,6 +22461,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22273,6 +22548,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22358,6 +22634,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22441,6 +22718,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22501,6 +22779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22580,6 +22859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22642,6 +22922,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22728,6 +23009,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22825,6 +23107,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22913,6 +23196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22978,6 +23262,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23050,6 +23335,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23135,6 +23421,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23243,6 +23530,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23356,6 +23644,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23470,6 +23759,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23554,6 +23844,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23644,6 +23935,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23730,6 +24022,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23856,6 +24149,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24004,6 +24298,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24124,6 +24419,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24263,6 +24559,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24321,6 +24618,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24372,6 +24670,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24432,6 +24731,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24520,6 +24820,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24566,6 +24867,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24644,6 +24946,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24702,6 +25005,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24784,6 +25088,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24844,6 +25149,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24927,6 +25233,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25061,6 +25368,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25119,6 +25427,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25234,6 +25543,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25294,6 +25604,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25324,6 +25635,7 @@ ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", "demo": "projects\/update-api-status.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25353,7 +25665,8 @@ } ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", - "demo": "projects\/update-api-status.md" + "demo": "projects\/update-api-status.md", + "public": true } ], "auth": { @@ -25448,6 +25761,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25476,6 +25790,7 @@ ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", "demo": "projects\/update-api-status-all.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25503,7 +25818,8 @@ } ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", - "demo": "projects\/update-api-status-all.md" + "demo": "projects\/update-api-status-all.md", + "public": true } ], "auth": { @@ -25585,6 +25901,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25664,6 +25981,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25743,6 +26061,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25822,6 +26141,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25913,6 +26233,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25995,6 +26316,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26074,6 +26396,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26153,6 +26476,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26232,6 +26556,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26311,6 +26636,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26390,6 +26716,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26490,6 +26817,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26561,6 +26889,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26646,6 +26975,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26714,6 +27044,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26800,6 +27131,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26870,6 +27202,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27016,6 +27349,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27085,6 +27419,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27239,6 +27574,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27307,6 +27643,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27462,6 +27799,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27532,6 +27870,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27673,6 +28012,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27742,6 +28082,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27861,6 +28202,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27929,6 +28271,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28024,6 +28367,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28094,6 +28438,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28196,6 +28541,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28275,6 +28621,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28311,6 +28658,7 @@ ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", "demo": "projects\/update-smtp.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28346,7 +28694,8 @@ } ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", - "demo": "projects\/update-smtp.md" + "demo": "projects\/update-smtp.md", + "public": true } ], "auth": { @@ -28467,6 +28816,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28505,6 +28855,7 @@ ], "description": "Send a test email to verify SMTP configuration. ", "demo": "projects\/create-smtp-test.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28542,7 +28893,8 @@ } ], "description": "Send a test email to verify SMTP configuration. ", - "demo": "projects\/create-smtp-test.md" + "demo": "projects\/create-smtp-test.md", + "public": true } ], "auth": { @@ -28676,6 +29028,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28755,6 +29108,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28979,6 +29333,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29243,6 +29598,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29469,6 +29825,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29499,6 +29856,7 @@ ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", "demo": "projects\/get-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29528,7 +29886,8 @@ } ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", - "demo": "projects\/get-sms-template.md" + "demo": "projects\/get-sms-template.md", + "public": true } ], "auth": { @@ -29752,6 +30111,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29784,6 +30144,7 @@ ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", "demo": "projects\/update-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29815,7 +30176,8 @@ } ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", - "demo": "projects\/update-sms-template.md" + "demo": "projects\/update-sms-template.md", + "public": true } ], "auth": { @@ -30058,6 +30420,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30088,6 +30451,7 @@ ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", "demo": "projects\/delete-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30117,7 +30481,8 @@ } ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", - "demo": "projects\/delete-sms-template.md" + "demo": "projects\/delete-sms-template.md", + "public": true } ], "auth": { @@ -30343,6 +30708,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30412,6 +30778,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30527,6 +30894,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30595,6 +30963,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30711,6 +31080,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30781,6 +31151,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30851,6 +31222,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30936,6 +31308,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31003,6 +31376,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31081,6 +31455,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31194,6 +31569,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31272,6 +31648,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31323,6 +31700,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31383,6 +31761,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31443,6 +31822,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31527,6 +31907,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31779,6 +32160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31829,6 +32211,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31878,6 +32261,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32007,6 +32391,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32067,6 +32452,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32139,6 +32525,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32198,6 +32585,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32446,6 +32834,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32507,6 +32896,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32587,6 +32977,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32681,6 +33072,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -32785,6 +33177,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32865,6 +33258,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32981,6 +33375,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33079,6 +33474,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33141,6 +33537,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33206,6 +33603,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33295,6 +33693,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33366,6 +33765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33451,6 +33851,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33513,6 +33914,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33584,6 +33986,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33666,6 +34069,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33725,6 +34129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33816,6 +34221,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33885,6 +34291,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33978,6 +34385,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34049,6 +34457,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34133,6 +34542,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34266,6 +34676,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34325,6 +34736,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34455,6 +34867,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34518,6 +34931,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34615,6 +35029,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34714,6 +35129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34786,6 +35202,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34877,6 +35294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34944,6 +35362,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35022,6 +35441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35250,6 +35670,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35333,6 +35754,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35405,6 +35827,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35487,6 +35910,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35571,6 +35995,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35655,6 +36080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35723,6 +36149,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35794,6 +36221,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35859,6 +36287,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35938,6 +36367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36005,6 +36435,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36089,6 +36520,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "listUsage", @@ -36108,7 +36540,8 @@ } ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/list-usage.md" + "demo": "tablesdb\/list-usage.md", + "public": true } ], "auth": { @@ -36183,6 +36616,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36242,6 +36676,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36318,6 +36753,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36382,6 +36818,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36479,6 +36916,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36603,6 +37041,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36675,6 +37114,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36778,6 +37218,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36852,6 +37293,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36950,6 +37392,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37060,6 +37503,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37175,6 +37619,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37285,6 +37730,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37400,6 +37846,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37510,6 +37957,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37625,6 +38073,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37744,6 +38193,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37868,6 +38318,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37990,6 +38441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38117,6 +38569,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38239,6 +38692,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38366,6 +38820,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38476,6 +38931,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38591,6 +39047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38703,6 +39160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38824,6 +39282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38936,6 +39395,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39057,6 +39517,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39169,6 +39630,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39290,6 +39752,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39426,6 +39889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39547,6 +40011,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39668,6 +40133,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39778,6 +40244,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39924,6 +40391,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39998,6 +40466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40081,6 +40550,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40194,6 +40664,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40290,6 +40761,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40428,6 +40900,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40502,6 +40975,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40585,6 +41059,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40673,6 +41148,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40782,6 +41258,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -40811,7 +41288,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -40838,7 +41316,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -40959,6 +41438,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -40985,7 +41465,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -41089,6 +41570,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41192,6 +41674,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41293,6 +41776,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41401,6 +41885,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -41429,7 +41914,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -41548,6 +42034,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41657,6 +42144,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41759,6 +42247,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41858,6 +42347,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41983,6 +42473,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42105,6 +42596,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42200,6 +42692,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "getUsage", @@ -42222,7 +42715,8 @@ } ], "description": "Get usage metrics and statistics for a database. You can view the total number of tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/get-usage.md" + "demo": "tablesdb\/get-usage.md", + "public": true } ], "auth": { @@ -42309,6 +42803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42396,6 +42891,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42481,6 +42977,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42543,6 +43040,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42617,6 +43115,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42679,6 +43178,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42765,6 +43265,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42862,6 +43363,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42980,6 +43482,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43052,6 +43555,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43146,6 +43650,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43219,6 +43724,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43316,6 +43822,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43376,6 +43883,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43457,6 +43965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43551,6 +44060,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43640,6 +44150,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43700,6 +44211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43770,6 +44282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43831,6 +44344,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43915,6 +44429,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44005,6 +44520,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44090,6 +44606,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44175,6 +44692,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44254,6 +44772,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44315,6 +44834,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44400,6 +44920,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44485,6 +45006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44600,6 +45122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44703,6 +45226,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44808,6 +45332,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44880,6 +45405,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44932,6 +45458,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44993,6 +45520,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45073,6 +45601,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45155,6 +45684,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45238,6 +45768,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45323,6 +45854,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45419,6 +45951,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45447,6 +45980,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45474,7 +46008,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -45550,6 +46085,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45577,6 +46113,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45603,7 +46140,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -45682,6 +46220,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45708,6 +46247,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45733,7 +46273,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -45797,6 +46338,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45823,6 +46365,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45848,7 +46391,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -45910,6 +46454,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45936,6 +46481,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45961,7 +46507,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -46023,6 +46570,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -46049,6 +46597,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -46074,7 +46623,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -46138,6 +46688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46218,6 +46769,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46298,6 +46850,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46378,6 +46931,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46437,6 +46991,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46517,6 +47072,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46587,6 +47143,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46639,6 +47196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46693,6 +47251,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46764,6 +47323,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46845,6 +47405,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46929,6 +47490,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47039,6 +47601,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47109,6 +47672,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47198,6 +47762,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47269,6 +47834,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47351,6 +47917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47431,6 +47998,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47511,6 +48079,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47607,6 +48176,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47705,6 +48275,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47790,6 +48361,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47860,6 +48432,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47930,6 +48503,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48015,6 +48589,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48104,6 +48679,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48189,6 +48765,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48240,6 +48817,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/open-api3-1.8.x-server.json b/app/config/specs/open-api3-1.8.x-server.json index 1803b42b53..485766809e 100644 --- a/app/config/specs/open-api3-1.8.x-server.json +++ b/app/config/specs/open-api3-1.8.x-server.json @@ -62,6 +62,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -112,6 +113,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -197,6 +199,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -274,6 +277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -345,6 +349,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -409,6 +414,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -458,6 +464,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -536,6 +543,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -607,6 +615,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -634,6 +643,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -660,7 +670,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -730,6 +741,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -759,6 +771,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -787,7 +800,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -869,6 +883,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -895,6 +910,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -920,7 +936,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -992,6 +1009,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1018,6 +1036,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1043,7 +1062,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1120,6 +1140,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1149,6 +1170,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1177,7 +1199,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1257,6 +1280,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1280,6 +1304,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1302,7 +1327,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1357,6 +1383,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1380,6 +1407,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1402,7 +1430,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1455,6 +1484,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1478,6 +1508,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1500,7 +1531,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1553,6 +1585,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1576,6 +1609,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1598,7 +1632,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1653,6 +1688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1724,6 +1760,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1800,6 +1837,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1877,6 +1915,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1927,6 +1966,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2001,6 +2041,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2076,6 +2117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2159,6 +2201,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2202,6 +2245,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2254,6 +2298,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2303,6 +2348,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2377,6 +2423,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2455,6 +2502,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2533,6 +2581,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2607,6 +2656,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2669,6 +2719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2724,6 +2775,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2788,6 +2840,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2843,6 +2896,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2925,6 +2979,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3002,6 +3057,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3147,6 +3203,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3221,6 +3278,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3243,7 +3301,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3267,6 +3326,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3342,6 +3402,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3366,7 +3427,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3392,6 +3454,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3478,6 +3541,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3528,6 +3592,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3599,6 +3664,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3727,6 +3793,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3861,6 +3928,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3921,6 +3989,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4411,6 +4480,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4495,6 +4565,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4589,6 +4660,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4683,6 +4755,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -5434,6 +5507,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5461,6 +5535,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5552,6 +5627,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5582,6 +5658,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5670,6 +5747,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5737,6 +5815,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5807,6 +5886,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5871,6 +5951,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5949,6 +6030,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6015,6 +6097,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6098,6 +6181,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6125,6 +6209,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6191,6 +6276,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6221,6 +6307,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6304,6 +6391,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6330,6 +6418,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6398,6 +6487,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -6497,6 +6587,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -6623,6 +6714,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -6697,6 +6789,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -6802,6 +6895,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -6878,6 +6972,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -6978,6 +7073,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7090,6 +7186,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7207,6 +7304,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7319,6 +7417,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -7436,6 +7535,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -7548,6 +7648,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -7665,6 +7766,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -7786,6 +7888,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -7912,6 +8015,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8036,6 +8140,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8165,6 +8270,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8289,6 +8395,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -8418,6 +8525,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -8530,6 +8638,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -8647,6 +8756,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -8761,6 +8871,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -8884,6 +8995,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -8998,6 +9110,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9121,6 +9234,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9235,6 +9349,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9358,6 +9473,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -9496,6 +9612,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -9619,6 +9736,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -9742,6 +9860,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -9854,6 +9973,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10002,6 +10122,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10078,6 +10199,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10163,6 +10285,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10280,6 +10403,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10392,6 +10516,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10427,6 +10552,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10459,6 +10585,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -10582,6 +10709,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10614,6 +10742,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10719,6 +10848,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -10824,6 +10954,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -10927,6 +11058,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11038,6 +11170,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11073,6 +11206,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11197,6 +11331,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11309,6 +11444,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11417,6 +11553,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -11545,6 +11682,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -11670,6 +11808,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -11768,6 +11907,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -11908,6 +12048,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -11984,6 +12125,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12069,6 +12211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12154,6 +12297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12449,6 +12593,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12500,6 +12645,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12550,6 +12696,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12610,6 +12757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12902,6 +13050,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12964,6 +13113,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13045,6 +13195,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13140,6 +13291,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -13239,6 +13391,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13325,6 +13478,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13442,6 +13596,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13540,6 +13695,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13603,6 +13759,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13669,6 +13826,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13759,6 +13917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13833,6 +13992,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -13921,6 +14081,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14040,6 +14201,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14105,6 +14267,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14177,6 +14340,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14237,6 +14401,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14329,6 +14494,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14399,6 +14565,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14493,6 +14660,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14567,6 +14735,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14621,6 +14790,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14673,6 +14843,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14723,6 +14894,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14773,6 +14945,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14823,6 +14996,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14884,6 +15058,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14934,6 +15109,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14984,6 +15160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15047,6 +15224,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15110,6 +15288,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15184,6 +15363,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15247,6 +15427,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15336,6 +15517,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15399,6 +15581,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15462,6 +15645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15525,6 +15709,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15588,6 +15773,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15651,6 +15837,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15714,6 +15901,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15777,6 +15965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15840,6 +16029,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15890,6 +16080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15940,6 +16131,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15992,6 +16184,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16046,6 +16239,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16100,6 +16294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16154,6 +16349,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16208,6 +16404,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16262,6 +16459,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16316,6 +16514,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16370,6 +16569,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16423,6 +16623,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16511,6 +16712,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16657,6 +16859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16815,6 +17018,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16992,6 +17196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17189,6 +17394,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17223,6 +17429,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17256,7 +17463,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -17370,6 +17578,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17403,6 +17612,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17435,7 +17645,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -17557,6 +17768,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17611,6 +17823,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17674,6 +17887,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17761,6 +17975,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17848,6 +18063,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17936,6 +18152,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -17971,6 +18188,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -18005,7 +18223,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -18115,6 +18334,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18149,6 +18369,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18182,7 +18403,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -18296,6 +18518,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18327,6 +18550,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18357,7 +18581,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -18448,6 +18673,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18478,6 +18704,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18507,7 +18734,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -18601,6 +18829,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18719,6 +18948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18840,6 +19070,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18937,6 +19168,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19037,6 +19269,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19144,6 +19377,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19254,6 +19488,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19361,6 +19596,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19471,6 +19707,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19513,6 +19750,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19554,7 +19792,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -19702,6 +19941,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19742,6 +19982,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19781,7 +20022,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -19933,6 +20175,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20030,6 +20273,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20130,6 +20374,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20227,6 +20472,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20327,6 +20573,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20424,6 +20671,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20524,6 +20772,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20621,6 +20870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20721,6 +20971,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20775,6 +21026,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20838,6 +21090,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20925,6 +21178,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21012,6 +21266,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21098,6 +21353,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21182,6 +21438,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21243,6 +21500,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21323,6 +21581,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21386,6 +21645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21473,6 +21733,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21571,6 +21832,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21661,6 +21923,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21727,6 +21990,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21801,6 +22065,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21886,6 +22151,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22139,6 +22405,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22190,6 +22457,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22240,6 +22508,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22300,6 +22569,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22549,6 +22819,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22611,6 +22882,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22692,6 +22964,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22787,6 +23060,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -22892,6 +23166,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22973,6 +23248,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23090,6 +23366,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23189,6 +23466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23252,6 +23530,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23318,6 +23597,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23408,6 +23688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23480,6 +23761,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23566,6 +23848,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23629,6 +23912,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23701,6 +23985,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23761,6 +24046,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23853,6 +24139,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23923,6 +24210,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24017,6 +24305,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24089,6 +24378,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24174,6 +24464,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24308,6 +24599,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24368,6 +24660,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24499,6 +24792,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24563,6 +24857,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24662,6 +24957,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24763,6 +25059,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24837,6 +25134,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24930,6 +25228,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24999,6 +25298,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25079,6 +25379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25309,6 +25610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25394,6 +25696,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25479,6 +25782,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25564,6 +25868,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25634,6 +25939,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25707,6 +26013,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25774,6 +26081,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25855,6 +26163,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25924,6 +26233,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26007,6 +26317,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26067,6 +26378,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26144,6 +26456,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26209,6 +26522,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26307,6 +26621,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26432,6 +26747,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26505,6 +26821,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26609,6 +26926,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26684,6 +27002,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26783,6 +27102,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26894,6 +27214,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27010,6 +27331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27121,6 +27443,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27237,6 +27560,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27348,6 +27672,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27464,6 +27789,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27584,6 +27910,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27709,6 +28036,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27832,6 +28160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27960,6 +28289,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28083,6 +28413,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28211,6 +28542,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28322,6 +28654,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28438,6 +28771,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28551,6 +28885,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28673,6 +29008,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28786,6 +29122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28908,6 +29245,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29021,6 +29359,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29143,6 +29482,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29280,6 +29620,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29402,6 +29743,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29524,6 +29866,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29635,6 +29978,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29782,6 +30126,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29857,6 +30202,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29941,6 +30287,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30055,6 +30402,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30152,6 +30500,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30291,6 +30640,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30366,6 +30716,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30452,6 +30803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -30563,6 +30915,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -30593,7 +30946,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -30621,7 +30975,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -30744,6 +31099,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -30771,7 +31127,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -30876,6 +31233,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30980,6 +31338,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -31082,6 +31441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31192,6 +31552,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -31221,7 +31582,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -31342,6 +31704,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31453,6 +31816,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31560,6 +31924,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31687,6 +32052,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31810,6 +32176,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31899,6 +32266,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31986,6 +32354,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32050,6 +32419,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32126,6 +32496,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32192,6 +32563,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32291,6 +32663,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32411,6 +32784,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32485,6 +32859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32581,6 +32956,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32656,6 +33032,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32755,6 +33132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32817,6 +33195,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32900,6 +33279,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -32995,6 +33375,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33085,6 +33466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33146,6 +33528,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33217,6 +33600,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33279,6 +33663,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33364,6 +33749,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33455,6 +33841,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33541,6 +33928,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33627,6 +34015,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33707,6 +34096,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33769,6 +34159,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33855,6 +34246,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33941,6 +34333,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34057,6 +34450,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34161,6 +34555,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34267,6 +34662,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34320,6 +34716,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34382,6 +34779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34463,6 +34861,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34546,6 +34945,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34630,6 +35030,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34716,6 +35117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34813,6 +35215,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34842,6 +35245,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34870,7 +35274,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -34947,6 +35352,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -34975,6 +35381,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -35002,7 +35409,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -35082,6 +35490,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35109,6 +35518,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35135,7 +35545,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -35200,6 +35611,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35227,6 +35639,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35253,7 +35666,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35316,6 +35730,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35343,6 +35758,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35369,7 +35785,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -35432,6 +35849,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35459,6 +35877,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35485,7 +35904,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35550,6 +35970,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35631,6 +36052,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35712,6 +36134,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35793,6 +36216,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35853,6 +36277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35934,6 +36359,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36005,6 +36431,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36058,6 +36485,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36113,6 +36541,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36185,6 +36614,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36267,6 +36697,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36352,6 +36783,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36463,6 +36895,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36534,6 +36967,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36624,6 +37058,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36696,6 +37131,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36779,6 +37215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36860,6 +37297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] diff --git a/app/config/specs/open-api3-latest-client.json b/app/config/specs/open-api3-latest-client.json index 5d645ac86e..fe3f2f50ad 100644 --- a/app/config/specs/open-api3-latest-client.json +++ b/app/config/specs/open-api3-latest-client.json @@ -62,6 +62,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -111,6 +112,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -196,6 +198,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -272,6 +275,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -342,6 +346,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -405,6 +410,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -454,6 +460,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -531,6 +538,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -601,6 +609,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -627,6 +636,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -652,7 +662,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -721,6 +732,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -749,6 +761,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -776,7 +789,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -857,6 +871,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -882,6 +897,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -906,7 +922,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -977,6 +994,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1003,6 +1021,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1028,7 +1047,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1105,6 +1125,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1133,6 +1154,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1160,7 +1182,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1239,6 +1262,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1261,6 +1285,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1282,7 +1307,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1336,6 +1362,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1358,6 +1385,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1379,7 +1407,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1431,6 +1460,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1453,6 +1483,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1474,7 +1505,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1526,6 +1558,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1548,6 +1581,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1569,7 +1603,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1623,6 +1658,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1693,6 +1729,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1768,6 +1805,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1844,6 +1882,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1893,6 +1932,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1966,6 +2006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2040,6 +2081,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2122,6 +2164,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2164,6 +2207,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2215,6 +2259,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2264,6 +2309,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2338,6 +2384,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2409,6 +2456,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2551,6 +2599,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2629,6 +2678,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2703,6 +2753,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2764,6 +2815,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2818,6 +2870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2881,6 +2934,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2931,6 +2985,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3010,6 +3065,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3081,6 +3137,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3146,6 +3203,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3228,6 +3286,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3305,6 +3364,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3450,6 +3510,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3524,6 +3585,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3545,7 +3607,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3568,6 +3631,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3642,6 +3706,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3665,7 +3730,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3690,6 +3756,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3775,6 +3842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3824,6 +3892,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3894,6 +3963,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4020,6 +4090,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4152,6 +4223,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4210,6 +4282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4698,6 +4771,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4780,6 +4854,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4872,6 +4947,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4964,6 +5040,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5715,6 +5792,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5780,6 +5858,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5848,6 +5927,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5910,6 +5990,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5986,6 +6067,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6050,6 +6132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6133,6 +6216,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -6243,6 +6327,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6277,6 +6362,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6401,6 +6487,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -6510,6 +6597,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6544,6 +6632,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6666,6 +6755,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -6776,6 +6866,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -6882,6 +6973,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -7008,6 +7100,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -7133,6 +7226,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7219,6 +7313,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7336,6 +7431,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7410,6 +7506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7462,6 +7559,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7514,6 +7612,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7566,6 +7665,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7618,6 +7718,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7670,6 +7771,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7722,6 +7824,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7774,6 +7877,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7826,6 +7930,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7878,6 +7983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7931,6 +8037,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8014,6 +8121,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8088,6 +8196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8185,6 +8294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8284,6 +8394,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8356,6 +8467,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8447,6 +8559,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8514,6 +8627,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8592,6 +8706,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8820,6 +8935,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8908,6 +9024,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8976,6 +9093,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9047,6 +9165,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9112,6 +9231,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9191,6 +9311,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9258,6 +9379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9344,6 +9466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9453,6 +9576,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -9482,7 +9606,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true } ], "auth": { @@ -9606,6 +9731,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9714,6 +9840,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -9742,7 +9869,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -9861,6 +9989,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9970,6 +10099,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10075,6 +10205,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10200,6 +10331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10321,6 +10453,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10408,6 +10541,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10493,6 +10627,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10555,6 +10690,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10629,6 +10765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10693,6 +10830,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10790,6 +10928,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10908,6 +11047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10980,6 +11120,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11074,6 +11215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11147,6 +11289,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11245,6 +11388,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11306,6 +11450,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/open-api3-latest-console.json b/app/config/specs/open-api3-latest-console.json index e6a6bdfee5..d436913e90 100644 --- a/app/config/specs/open-api3-latest-console.json +++ b/app/config/specs/open-api3-latest-console.json @@ -62,6 +62,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -110,6 +111,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -185,6 +187,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -234,6 +237,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -309,6 +313,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -378,6 +383,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -440,6 +446,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -489,6 +496,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -565,6 +573,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -634,6 +643,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -660,6 +670,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -685,7 +696,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -753,6 +765,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -781,6 +794,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -808,7 +822,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -888,6 +903,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -913,6 +929,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -937,7 +954,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1007,6 +1025,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1033,6 +1052,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1058,7 +1078,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1135,6 +1156,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1163,6 +1185,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1190,7 +1213,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1268,6 +1292,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1290,6 +1315,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1311,7 +1337,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1364,6 +1391,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1386,6 +1414,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1407,7 +1436,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1458,6 +1488,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1480,6 +1511,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1501,7 +1533,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1552,6 +1585,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1574,6 +1608,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1595,7 +1630,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1648,6 +1684,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1717,6 +1754,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1791,6 +1829,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1866,6 +1905,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1914,6 +1954,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1986,6 +2027,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2059,6 +2101,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2140,6 +2183,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2181,6 +2225,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2231,6 +2276,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2280,6 +2326,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2354,6 +2401,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2425,6 +2473,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2567,6 +2616,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2645,6 +2695,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2719,6 +2770,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2779,6 +2831,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2832,6 +2885,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2894,6 +2948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2943,6 +2998,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3021,6 +3077,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3091,6 +3148,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3155,6 +3213,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3237,6 +3296,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3314,6 +3374,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3459,6 +3520,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3533,6 +3595,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3554,7 +3617,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3577,6 +3641,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3650,6 +3715,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3673,7 +3739,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3698,6 +3765,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3782,6 +3850,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3830,6 +3899,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3899,6 +3969,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4025,6 +4096,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4157,6 +4229,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4215,6 +4288,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4703,6 +4777,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4785,6 +4860,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4877,6 +4953,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4969,6 +5046,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5711,6 +5789,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5771,6 +5850,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5846,6 +5926,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5894,6 +5975,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5920,6 +6002,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -6010,6 +6093,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6039,6 +6123,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6126,6 +6211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6191,6 +6277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6259,6 +6346,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6321,6 +6409,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6397,6 +6486,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6461,6 +6551,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6542,6 +6633,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6566,6 +6658,7 @@ ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/list-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6644,6 +6737,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6670,6 +6764,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6735,6 +6830,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6764,6 +6860,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6846,6 +6943,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6871,6 +6969,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6938,6 +7037,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -7036,6 +7136,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -7161,6 +7262,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -7234,6 +7336,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -7338,6 +7441,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -7413,6 +7517,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -7512,6 +7617,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7623,6 +7729,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7739,6 +7846,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7850,6 +7958,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -7966,6 +8075,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -8077,6 +8187,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -8193,6 +8304,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -8313,6 +8425,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -8438,6 +8551,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8561,6 +8675,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8689,6 +8804,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8812,6 +8928,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -8940,6 +9057,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -9051,6 +9169,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -9167,6 +9286,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -9280,6 +9400,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -9402,6 +9523,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -9515,6 +9637,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9637,6 +9760,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9750,6 +9874,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9872,6 +9997,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -10009,6 +10135,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -10131,6 +10258,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -10253,6 +10381,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -10364,6 +10493,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10511,6 +10641,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10586,6 +10717,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10670,6 +10802,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10786,6 +10919,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10896,6 +11030,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10930,6 +11065,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10961,6 +11097,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -11082,6 +11219,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11113,6 +11251,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11217,6 +11356,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -11321,6 +11461,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -11423,6 +11564,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11532,6 +11674,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11566,6 +11709,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11688,6 +11832,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11798,6 +11943,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11901,6 +12047,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRowLogs" @@ -12001,6 +12148,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -12127,6 +12275,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -12250,6 +12399,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -12347,6 +12497,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -12486,6 +12637,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -12561,6 +12713,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12645,6 +12798,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTableLogs" @@ -12732,6 +12886,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTableUsage" @@ -12828,6 +12983,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12855,6 +13011,7 @@ ], "description": "Get the database activity logs list by its unique ID.", "demo": "databases\/list-logs.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12934,6 +13091,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -12961,6 +13119,7 @@ ], "description": "Get usage metrics and statistics for a database. You can view the total number of collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/get-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -13049,6 +13208,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13133,6 +13293,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13427,6 +13588,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13477,6 +13639,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13526,6 +13689,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13718,6 +13882,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13778,6 +13943,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13850,6 +14016,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13909,6 +14076,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14200,6 +14368,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14261,6 +14430,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14341,6 +14511,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14435,6 +14606,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -14533,6 +14705,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14618,6 +14791,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14734,6 +14908,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14831,6 +15006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14893,6 +15069,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14958,6 +15135,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15047,6 +15225,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15120,6 +15299,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15206,6 +15386,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15323,6 +15504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15386,6 +15568,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15457,6 +15640,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15539,6 +15723,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15598,6 +15783,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15689,6 +15875,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15758,6 +15945,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15851,6 +16039,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15924,6 +16113,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15976,6 +16166,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16026,6 +16217,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16075,6 +16267,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16124,6 +16317,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16173,6 +16367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16233,6 +16428,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16282,6 +16478,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16331,6 +16528,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16393,6 +16591,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16455,6 +16654,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16528,6 +16728,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16590,6 +16791,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16678,6 +16880,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16740,6 +16943,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16802,6 +17006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16864,6 +17069,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16926,6 +17132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16988,6 +17195,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17050,6 +17258,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17112,6 +17321,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17174,6 +17384,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17223,6 +17434,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17272,6 +17484,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17323,6 +17536,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17375,6 +17589,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17427,6 +17642,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17479,6 +17695,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17531,6 +17748,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17583,6 +17801,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17635,6 +17854,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17687,6 +17907,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17738,6 +17959,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17825,6 +18047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17970,6 +18193,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18127,6 +18351,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18303,6 +18528,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18499,6 +18725,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18532,6 +18759,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18564,7 +18792,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -18677,6 +18906,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18709,6 +18939,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18740,7 +18971,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -18861,6 +19093,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18914,6 +19147,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18976,6 +19210,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19062,6 +19297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19148,6 +19384,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19235,6 +19472,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19269,6 +19507,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19302,7 +19541,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -19411,6 +19651,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19444,6 +19685,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19476,7 +19718,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -19589,6 +19832,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19619,6 +19863,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19648,7 +19893,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -19738,6 +19984,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19767,6 +20014,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19795,7 +20043,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -19888,6 +20137,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20005,6 +20255,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20125,6 +20376,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20221,6 +20473,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20320,6 +20573,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20426,6 +20680,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20535,6 +20790,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20641,6 +20897,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20750,6 +21007,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20791,6 +21049,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20831,7 +21090,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -20978,6 +21238,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21017,6 +21278,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21055,7 +21317,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -21206,6 +21469,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21302,6 +21566,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21401,6 +21666,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21497,6 +21763,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21596,6 +21863,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21692,6 +21960,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21791,6 +22060,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21887,6 +22157,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21986,6 +22257,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22039,6 +22311,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22101,6 +22374,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22187,6 +22461,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22273,6 +22548,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22358,6 +22634,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22441,6 +22718,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22501,6 +22779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22580,6 +22859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22642,6 +22922,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22728,6 +23009,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22825,6 +23107,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22913,6 +23196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22978,6 +23262,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23050,6 +23335,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23135,6 +23421,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23243,6 +23530,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23356,6 +23644,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23470,6 +23759,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23554,6 +23844,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23644,6 +23935,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23730,6 +24022,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23856,6 +24149,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24004,6 +24298,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24124,6 +24419,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24263,6 +24559,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24321,6 +24618,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24372,6 +24670,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24432,6 +24731,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24520,6 +24820,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24566,6 +24867,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24644,6 +24946,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24702,6 +25005,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24784,6 +25088,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24844,6 +25149,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24927,6 +25233,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25061,6 +25368,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25119,6 +25427,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25234,6 +25543,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25294,6 +25604,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25324,6 +25635,7 @@ ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", "demo": "projects\/update-api-status.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25353,7 +25665,8 @@ } ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", - "demo": "projects\/update-api-status.md" + "demo": "projects\/update-api-status.md", + "public": true } ], "auth": { @@ -25448,6 +25761,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25476,6 +25790,7 @@ ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", "demo": "projects\/update-api-status-all.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25503,7 +25818,8 @@ } ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", - "demo": "projects\/update-api-status-all.md" + "demo": "projects\/update-api-status-all.md", + "public": true } ], "auth": { @@ -25585,6 +25901,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25664,6 +25981,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25743,6 +26061,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25822,6 +26141,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25913,6 +26233,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25995,6 +26316,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26074,6 +26396,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26153,6 +26476,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26232,6 +26556,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26311,6 +26636,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26390,6 +26716,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26490,6 +26817,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26561,6 +26889,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26646,6 +26975,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26714,6 +27044,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26800,6 +27131,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26870,6 +27202,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27016,6 +27349,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27085,6 +27419,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27239,6 +27574,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27307,6 +27643,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27462,6 +27799,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27532,6 +27870,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27673,6 +28012,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27742,6 +28082,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27861,6 +28202,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27929,6 +28271,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28024,6 +28367,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28094,6 +28438,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28196,6 +28541,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28275,6 +28621,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28311,6 +28658,7 @@ ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", "demo": "projects\/update-smtp.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28346,7 +28694,8 @@ } ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", - "demo": "projects\/update-smtp.md" + "demo": "projects\/update-smtp.md", + "public": true } ], "auth": { @@ -28467,6 +28816,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28505,6 +28855,7 @@ ], "description": "Send a test email to verify SMTP configuration. ", "demo": "projects\/create-smtp-test.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28542,7 +28893,8 @@ } ], "description": "Send a test email to verify SMTP configuration. ", - "demo": "projects\/create-smtp-test.md" + "demo": "projects\/create-smtp-test.md", + "public": true } ], "auth": { @@ -28676,6 +29028,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28755,6 +29108,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28979,6 +29333,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29243,6 +29598,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29469,6 +29825,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29499,6 +29856,7 @@ ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", "demo": "projects\/get-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29528,7 +29886,8 @@ } ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", - "demo": "projects\/get-sms-template.md" + "demo": "projects\/get-sms-template.md", + "public": true } ], "auth": { @@ -29752,6 +30111,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29784,6 +30144,7 @@ ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", "demo": "projects\/update-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29815,7 +30176,8 @@ } ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", - "demo": "projects\/update-sms-template.md" + "demo": "projects\/update-sms-template.md", + "public": true } ], "auth": { @@ -30058,6 +30420,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30088,6 +30451,7 @@ ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", "demo": "projects\/delete-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30117,7 +30481,8 @@ } ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", - "demo": "projects\/delete-sms-template.md" + "demo": "projects\/delete-sms-template.md", + "public": true } ], "auth": { @@ -30343,6 +30708,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30412,6 +30778,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30527,6 +30894,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30595,6 +30963,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30711,6 +31080,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30781,6 +31151,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30851,6 +31222,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30936,6 +31308,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31003,6 +31376,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31081,6 +31455,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31194,6 +31569,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31272,6 +31648,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31323,6 +31700,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31383,6 +31761,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31443,6 +31822,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31527,6 +31907,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31779,6 +32160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31829,6 +32211,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31878,6 +32261,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32007,6 +32391,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32067,6 +32452,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32139,6 +32525,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32198,6 +32585,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32446,6 +32834,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32507,6 +32896,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32587,6 +32977,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32681,6 +33072,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -32785,6 +33177,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32865,6 +33258,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32981,6 +33375,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33079,6 +33474,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33141,6 +33537,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33206,6 +33603,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33295,6 +33693,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33366,6 +33765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33451,6 +33851,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33513,6 +33914,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33584,6 +33986,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33666,6 +34069,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33725,6 +34129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33816,6 +34221,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33885,6 +34291,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33978,6 +34385,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34049,6 +34457,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34133,6 +34542,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34266,6 +34676,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34325,6 +34736,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34455,6 +34867,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34518,6 +34931,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34615,6 +35029,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34714,6 +35129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34786,6 +35202,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34877,6 +35294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34944,6 +35362,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35022,6 +35441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35250,6 +35670,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35333,6 +35754,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35405,6 +35827,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35487,6 +35910,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35571,6 +35995,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35655,6 +36080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35723,6 +36149,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35794,6 +36221,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35859,6 +36287,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35938,6 +36367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36005,6 +36435,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36089,6 +36520,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "listUsage", @@ -36108,7 +36540,8 @@ } ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/list-usage.md" + "demo": "tablesdb\/list-usage.md", + "public": true } ], "auth": { @@ -36183,6 +36616,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36242,6 +36676,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36318,6 +36753,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36382,6 +36818,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36479,6 +36916,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36603,6 +37041,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36675,6 +37114,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36778,6 +37218,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36852,6 +37293,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36950,6 +37392,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37060,6 +37503,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37175,6 +37619,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37285,6 +37730,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37400,6 +37846,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37510,6 +37957,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37625,6 +38073,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37744,6 +38193,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37868,6 +38318,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37990,6 +38441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38117,6 +38569,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38239,6 +38692,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38366,6 +38820,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38476,6 +38931,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38591,6 +39047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38703,6 +39160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38824,6 +39282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38936,6 +39395,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39057,6 +39517,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39169,6 +39630,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39290,6 +39752,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39426,6 +39889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39547,6 +40011,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39668,6 +40133,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39778,6 +40244,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39924,6 +40391,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39998,6 +40466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40081,6 +40550,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40194,6 +40664,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40290,6 +40761,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40428,6 +40900,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40502,6 +40975,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40585,6 +41059,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40673,6 +41148,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40782,6 +41258,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -40811,7 +41288,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -40838,7 +41316,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -40959,6 +41438,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -40985,7 +41465,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -41089,6 +41570,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41192,6 +41674,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41293,6 +41776,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41401,6 +41885,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -41429,7 +41914,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -41548,6 +42034,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41657,6 +42144,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41759,6 +42247,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41858,6 +42347,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41983,6 +42473,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42105,6 +42596,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42200,6 +42692,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "getUsage", @@ -42222,7 +42715,8 @@ } ], "description": "Get usage metrics and statistics for a database. You can view the total number of tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/get-usage.md" + "demo": "tablesdb\/get-usage.md", + "public": true } ], "auth": { @@ -42309,6 +42803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42396,6 +42891,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42481,6 +42977,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42543,6 +43040,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42617,6 +43115,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42679,6 +43178,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42765,6 +43265,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42862,6 +43363,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42980,6 +43482,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43052,6 +43555,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43146,6 +43650,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43219,6 +43724,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43316,6 +43822,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43376,6 +43883,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43457,6 +43965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43551,6 +44060,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43640,6 +44150,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43700,6 +44211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43770,6 +44282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43831,6 +44344,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43915,6 +44429,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44005,6 +44520,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44090,6 +44606,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44175,6 +44692,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44254,6 +44772,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44315,6 +44834,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44400,6 +44920,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44485,6 +45006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44600,6 +45122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44703,6 +45226,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44808,6 +45332,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44880,6 +45405,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44932,6 +45458,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44993,6 +45520,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45073,6 +45601,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45155,6 +45684,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45238,6 +45768,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45323,6 +45854,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45419,6 +45951,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45447,6 +45980,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45474,7 +46008,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -45550,6 +46085,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45577,6 +46113,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45603,7 +46140,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -45682,6 +46220,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45708,6 +46247,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45733,7 +46273,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -45797,6 +46338,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45823,6 +46365,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45848,7 +46391,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -45910,6 +46454,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45936,6 +46481,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45961,7 +46507,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -46023,6 +46570,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -46049,6 +46597,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -46074,7 +46623,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -46138,6 +46688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46218,6 +46769,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46298,6 +46850,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46378,6 +46931,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46437,6 +46991,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46517,6 +47072,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46587,6 +47143,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46639,6 +47196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46693,6 +47251,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46764,6 +47323,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46845,6 +47405,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46929,6 +47490,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47039,6 +47601,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47109,6 +47672,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47198,6 +47762,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47269,6 +47834,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47351,6 +47917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47431,6 +47998,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47511,6 +48079,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47607,6 +48176,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47705,6 +48275,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47790,6 +48361,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47860,6 +48432,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47930,6 +48503,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48015,6 +48589,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48104,6 +48679,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48189,6 +48765,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48240,6 +48817,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/open-api3-latest-server.json b/app/config/specs/open-api3-latest-server.json index 1803b42b53..485766809e 100644 --- a/app/config/specs/open-api3-latest-server.json +++ b/app/config/specs/open-api3-latest-server.json @@ -62,6 +62,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -112,6 +113,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -197,6 +199,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -274,6 +277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -345,6 +349,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -409,6 +414,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -458,6 +464,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -536,6 +543,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -607,6 +615,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -634,6 +643,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -660,7 +670,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -730,6 +741,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -759,6 +771,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -787,7 +800,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -869,6 +883,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -895,6 +910,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -920,7 +936,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -992,6 +1009,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1018,6 +1036,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1043,7 +1062,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1120,6 +1140,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1149,6 +1170,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1177,7 +1199,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1257,6 +1280,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1280,6 +1304,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1302,7 +1327,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1357,6 +1383,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1380,6 +1407,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1402,7 +1430,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1455,6 +1484,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1478,6 +1508,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1500,7 +1531,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1553,6 +1585,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1576,6 +1609,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1598,7 +1632,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1653,6 +1688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1724,6 +1760,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1800,6 +1837,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1877,6 +1915,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1927,6 +1966,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2001,6 +2041,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2076,6 +2117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2159,6 +2201,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2202,6 +2245,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2254,6 +2298,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2303,6 +2348,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2377,6 +2423,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2455,6 +2502,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2533,6 +2581,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2607,6 +2656,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2669,6 +2719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2724,6 +2775,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2788,6 +2840,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2843,6 +2896,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2925,6 +2979,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3002,6 +3057,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3147,6 +3203,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3221,6 +3278,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3243,7 +3301,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3267,6 +3326,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3342,6 +3402,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3366,7 +3427,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3392,6 +3454,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3478,6 +3541,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3528,6 +3592,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3599,6 +3664,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3727,6 +3793,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3861,6 +3928,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3921,6 +3989,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4411,6 +4480,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4495,6 +4565,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4589,6 +4660,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4683,6 +4755,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -5434,6 +5507,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5461,6 +5535,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5552,6 +5627,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5582,6 +5658,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5670,6 +5747,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5737,6 +5815,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5807,6 +5886,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5871,6 +5951,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5949,6 +6030,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6015,6 +6097,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6098,6 +6181,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6125,6 +6209,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6191,6 +6276,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6221,6 +6307,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6304,6 +6391,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6330,6 +6418,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6398,6 +6487,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -6497,6 +6587,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -6623,6 +6714,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -6697,6 +6789,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -6802,6 +6895,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -6878,6 +6972,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -6978,6 +7073,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7090,6 +7186,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7207,6 +7304,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7319,6 +7417,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -7436,6 +7535,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -7548,6 +7648,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -7665,6 +7766,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -7786,6 +7888,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -7912,6 +8015,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8036,6 +8140,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8165,6 +8270,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8289,6 +8395,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -8418,6 +8525,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -8530,6 +8638,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -8647,6 +8756,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -8761,6 +8871,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -8884,6 +8995,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -8998,6 +9110,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9121,6 +9234,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9235,6 +9349,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9358,6 +9473,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -9496,6 +9612,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -9619,6 +9736,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -9742,6 +9860,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -9854,6 +9973,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10002,6 +10122,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10078,6 +10199,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10163,6 +10285,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10280,6 +10403,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10392,6 +10516,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10427,6 +10552,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10459,6 +10585,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -10582,6 +10709,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10614,6 +10742,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10719,6 +10848,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -10824,6 +10954,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -10927,6 +11058,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11038,6 +11170,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11073,6 +11206,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11197,6 +11331,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11309,6 +11444,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11417,6 +11553,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -11545,6 +11682,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -11670,6 +11808,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -11768,6 +11907,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -11908,6 +12048,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -11984,6 +12125,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12069,6 +12211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12154,6 +12297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12449,6 +12593,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12500,6 +12645,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12550,6 +12696,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12610,6 +12757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12902,6 +13050,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12964,6 +13113,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13045,6 +13195,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13140,6 +13291,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -13239,6 +13391,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13325,6 +13478,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13442,6 +13596,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13540,6 +13695,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13603,6 +13759,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13669,6 +13826,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13759,6 +13917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13833,6 +13992,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -13921,6 +14081,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14040,6 +14201,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14105,6 +14267,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14177,6 +14340,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14237,6 +14401,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14329,6 +14494,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14399,6 +14565,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14493,6 +14660,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14567,6 +14735,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14621,6 +14790,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14673,6 +14843,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14723,6 +14894,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14773,6 +14945,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14823,6 +14996,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14884,6 +15058,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14934,6 +15109,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14984,6 +15160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15047,6 +15224,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15110,6 +15288,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15184,6 +15363,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15247,6 +15427,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15336,6 +15517,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15399,6 +15581,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15462,6 +15645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15525,6 +15709,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15588,6 +15773,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15651,6 +15837,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15714,6 +15901,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15777,6 +15965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15840,6 +16029,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15890,6 +16080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15940,6 +16131,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15992,6 +16184,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16046,6 +16239,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16100,6 +16294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16154,6 +16349,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16208,6 +16404,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16262,6 +16459,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16316,6 +16514,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16370,6 +16569,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16423,6 +16623,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16511,6 +16712,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16657,6 +16859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16815,6 +17018,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16992,6 +17196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17189,6 +17394,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17223,6 +17429,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17256,7 +17463,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -17370,6 +17578,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17403,6 +17612,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17435,7 +17645,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -17557,6 +17768,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17611,6 +17823,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17674,6 +17887,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17761,6 +17975,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17848,6 +18063,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17936,6 +18152,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -17971,6 +18188,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -18005,7 +18223,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -18115,6 +18334,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18149,6 +18369,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18182,7 +18403,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -18296,6 +18518,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18327,6 +18550,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18357,7 +18581,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -18448,6 +18673,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18478,6 +18704,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18507,7 +18734,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -18601,6 +18829,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18719,6 +18948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18840,6 +19070,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18937,6 +19168,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19037,6 +19269,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19144,6 +19377,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19254,6 +19488,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19361,6 +19596,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19471,6 +19707,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19513,6 +19750,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19554,7 +19792,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -19702,6 +19941,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19742,6 +19982,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19781,7 +20022,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -19933,6 +20175,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20030,6 +20273,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20130,6 +20374,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20227,6 +20472,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20327,6 +20573,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20424,6 +20671,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20524,6 +20772,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20621,6 +20870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20721,6 +20971,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20775,6 +21026,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20838,6 +21090,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20925,6 +21178,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21012,6 +21266,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21098,6 +21353,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21182,6 +21438,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21243,6 +21500,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21323,6 +21581,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21386,6 +21645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21473,6 +21733,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21571,6 +21832,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21661,6 +21923,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21727,6 +21990,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21801,6 +22065,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21886,6 +22151,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22139,6 +22405,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22190,6 +22457,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22240,6 +22508,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22300,6 +22569,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22549,6 +22819,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22611,6 +22882,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22692,6 +22964,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22787,6 +23060,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -22892,6 +23166,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22973,6 +23248,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23090,6 +23366,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23189,6 +23466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23252,6 +23530,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23318,6 +23597,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23408,6 +23688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23480,6 +23761,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23566,6 +23848,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23629,6 +23912,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23701,6 +23985,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23761,6 +24046,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23853,6 +24139,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23923,6 +24210,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24017,6 +24305,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24089,6 +24378,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24174,6 +24464,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24308,6 +24599,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24368,6 +24660,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24499,6 +24792,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24563,6 +24857,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24662,6 +24957,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24763,6 +25059,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24837,6 +25134,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24930,6 +25228,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24999,6 +25298,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25079,6 +25379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25309,6 +25610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25394,6 +25696,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25479,6 +25782,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25564,6 +25868,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25634,6 +25939,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25707,6 +26013,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25774,6 +26081,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25855,6 +26163,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25924,6 +26233,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26007,6 +26317,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26067,6 +26378,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26144,6 +26456,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26209,6 +26522,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26307,6 +26621,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26432,6 +26747,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26505,6 +26821,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26609,6 +26926,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26684,6 +27002,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26783,6 +27102,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26894,6 +27214,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27010,6 +27331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27121,6 +27443,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27237,6 +27560,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27348,6 +27672,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27464,6 +27789,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27584,6 +27910,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27709,6 +28036,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27832,6 +28160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27960,6 +28289,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28083,6 +28413,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28211,6 +28542,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28322,6 +28654,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28438,6 +28771,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28551,6 +28885,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28673,6 +29008,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28786,6 +29122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28908,6 +29245,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29021,6 +29359,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29143,6 +29482,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29280,6 +29620,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29402,6 +29743,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29524,6 +29866,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29635,6 +29978,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29782,6 +30126,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29857,6 +30202,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29941,6 +30287,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30055,6 +30402,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30152,6 +30500,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30291,6 +30640,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30366,6 +30716,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30452,6 +30803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -30563,6 +30915,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -30593,7 +30946,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -30621,7 +30975,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -30744,6 +31099,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -30771,7 +31127,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -30876,6 +31233,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30980,6 +31338,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -31082,6 +31441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31192,6 +31552,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -31221,7 +31582,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -31342,6 +31704,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31453,6 +31816,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31560,6 +31924,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31687,6 +32052,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31810,6 +32176,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31899,6 +32266,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31986,6 +32354,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32050,6 +32419,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32126,6 +32496,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32192,6 +32563,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32291,6 +32663,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32411,6 +32784,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32485,6 +32859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32581,6 +32956,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32656,6 +33032,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32755,6 +33132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32817,6 +33195,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32900,6 +33279,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -32995,6 +33375,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33085,6 +33466,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33146,6 +33528,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33217,6 +33600,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33279,6 +33663,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33364,6 +33749,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33455,6 +33841,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33541,6 +33928,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33627,6 +34015,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33707,6 +34096,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33769,6 +34159,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33855,6 +34246,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33941,6 +34333,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34057,6 +34450,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34161,6 +34555,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34267,6 +34662,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34320,6 +34716,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34382,6 +34779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34463,6 +34861,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34546,6 +34945,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34630,6 +35030,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34716,6 +35117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34813,6 +35215,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34842,6 +35245,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34870,7 +35274,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -34947,6 +35352,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -34975,6 +35381,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -35002,7 +35409,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -35082,6 +35490,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35109,6 +35518,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35135,7 +35545,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -35200,6 +35611,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35227,6 +35639,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35253,7 +35666,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35316,6 +35730,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35343,6 +35758,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35369,7 +35785,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -35432,6 +35849,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35459,6 +35877,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35485,7 +35904,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35550,6 +35970,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35631,6 +36052,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35712,6 +36134,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35793,6 +36216,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35853,6 +36277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35934,6 +36359,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36005,6 +36431,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36058,6 +36485,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36113,6 +36541,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36185,6 +36614,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36267,6 +36697,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36352,6 +36783,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36463,6 +36895,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36534,6 +36967,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36624,6 +37058,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36696,6 +37131,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36779,6 +37215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36860,6 +37297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] diff --git a/app/config/specs/swagger2-1.8.x-client.json b/app/config/specs/swagger2-1.8.x-client.json index aaa0ca3eba..e3d69b55ce 100644 --- a/app/config/specs/swagger2-1.8.x-client.json +++ b/app/config/specs/swagger2-1.8.x-client.json @@ -108,6 +108,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -159,6 +160,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -250,6 +252,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -328,6 +331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -399,6 +403,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -462,6 +467,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -511,6 +517,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -587,6 +594,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -660,6 +668,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -686,6 +695,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -711,7 +721,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -780,6 +791,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -808,6 +820,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -835,7 +848,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -917,6 +931,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -942,6 +957,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -966,7 +982,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1037,6 +1054,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1063,6 +1081,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1088,7 +1107,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1168,6 +1188,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1196,6 +1217,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1223,7 +1245,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1304,6 +1327,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1326,6 +1350,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1347,7 +1372,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1401,6 +1427,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1423,6 +1450,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1444,7 +1472,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1498,6 +1527,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1520,6 +1550,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1541,7 +1572,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1595,6 +1627,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1617,6 +1650,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1638,7 +1672,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1694,6 +1729,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1767,6 +1803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1846,6 +1883,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1924,6 +1962,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1975,6 +2014,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2051,6 +2091,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2129,6 +2170,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2214,6 +2256,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2260,6 +2303,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2313,6 +2357,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2364,6 +2409,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2442,6 +2488,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2519,6 +2566,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2656,6 +2704,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2738,6 +2787,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2814,6 +2864,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2875,6 +2926,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2931,6 +2983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2994,6 +3047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3046,6 +3100,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3130,6 +3185,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3202,6 +3258,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3267,6 +3324,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3354,6 +3412,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3439,6 +3498,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3579,6 +3639,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3657,6 +3718,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3678,7 +3740,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3701,6 +3764,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3778,6 +3842,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3801,7 +3866,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3826,6 +3892,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3915,6 +3982,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3966,6 +4034,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4044,6 +4113,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4168,6 +4238,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4298,6 +4369,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4360,6 +4432,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4846,6 +4919,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4928,6 +5002,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5018,6 +5093,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5108,6 +5184,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5819,6 +5896,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5884,6 +5962,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5952,6 +6031,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6013,6 +6093,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6090,6 +6171,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6153,6 +6235,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6232,6 +6315,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -6334,6 +6418,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6368,6 +6453,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6490,6 +6576,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -6591,6 +6678,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6625,6 +6713,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6743,6 +6832,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -6851,6 +6941,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -6951,6 +7042,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -7071,6 +7163,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -7188,6 +7281,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7270,6 +7364,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7388,6 +7483,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7459,6 +7555,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7532,6 +7629,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7603,6 +7701,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7654,6 +7753,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7705,6 +7805,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7756,6 +7857,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7807,6 +7909,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7858,6 +7961,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7909,6 +8013,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7960,6 +8065,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8014,6 +8120,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8098,6 +8205,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8167,6 +8275,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8258,6 +8367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8347,6 +8457,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8416,6 +8527,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8506,6 +8618,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8575,6 +8688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8653,6 +8767,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8859,6 +8974,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8940,6 +9056,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9008,6 +9125,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9079,6 +9197,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9143,6 +9262,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9223,6 +9343,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9289,6 +9410,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9371,6 +9493,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9472,6 +9595,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -9501,7 +9625,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true } ], "auth": { @@ -9623,6 +9748,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9723,6 +9849,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -9751,7 +9878,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -9866,6 +9994,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9973,6 +10102,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10072,6 +10202,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10191,6 +10322,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10304,6 +10436,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10387,6 +10520,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10476,6 +10610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10537,6 +10672,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10611,6 +10747,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10672,6 +10809,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10763,6 +10901,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10882,6 +11021,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10951,6 +11091,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11043,6 +11184,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11114,6 +11256,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11208,6 +11351,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11269,6 +11413,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/swagger2-1.8.x-console.json b/app/config/specs/swagger2-1.8.x-console.json index e1e66611a6..8bca9aa3d8 100644 --- a/app/config/specs/swagger2-1.8.x-console.json +++ b/app/config/specs/swagger2-1.8.x-console.json @@ -114,6 +114,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -164,6 +165,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -247,6 +249,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -298,6 +301,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -375,6 +379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -445,6 +450,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -507,6 +513,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -556,6 +563,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -631,6 +639,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -703,6 +712,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -729,6 +739,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -754,7 +765,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -822,6 +834,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -850,6 +863,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -877,7 +891,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -958,6 +973,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -983,6 +999,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -1007,7 +1024,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1077,6 +1095,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1103,6 +1122,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1128,7 +1148,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1208,6 +1229,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1236,6 +1258,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1263,7 +1286,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1343,6 +1367,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1365,6 +1390,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1386,7 +1412,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1439,6 +1466,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1461,6 +1489,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1482,7 +1511,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1535,6 +1565,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1557,6 +1588,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1578,7 +1610,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1631,6 +1664,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1653,6 +1687,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1674,7 +1709,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1729,6 +1765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1801,6 +1838,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1879,6 +1917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1956,6 +1995,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2006,6 +2046,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2081,6 +2122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2158,6 +2200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2242,6 +2285,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2287,6 +2331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2339,6 +2384,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2390,6 +2436,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2468,6 +2515,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2545,6 +2593,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2682,6 +2731,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2764,6 +2814,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2840,6 +2891,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2900,6 +2952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2955,6 +3008,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3017,6 +3071,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3068,6 +3123,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3151,6 +3207,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3222,6 +3279,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3286,6 +3344,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3373,6 +3432,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3458,6 +3518,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3598,6 +3659,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3676,6 +3738,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3697,7 +3760,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3720,6 +3784,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3796,6 +3861,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3819,7 +3885,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3844,6 +3911,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3932,6 +4000,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3982,6 +4051,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4059,6 +4129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4183,6 +4254,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4313,6 +4385,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4375,6 +4448,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4861,6 +4935,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4943,6 +5018,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5033,6 +5109,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5123,6 +5200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5835,6 +5913,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5898,6 +5977,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5969,6 +6049,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6017,6 +6098,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -6043,6 +6125,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -6130,6 +6213,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6159,6 +6243,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6248,6 +6333,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6313,6 +6399,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6381,6 +6468,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6442,6 +6530,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6519,6 +6608,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6582,6 +6672,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6660,6 +6751,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6684,6 +6776,7 @@ ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/list-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6760,6 +6853,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6786,6 +6880,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6851,6 +6946,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6880,6 +6976,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6964,6 +7061,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6989,6 +7087,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -7054,6 +7153,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -7147,6 +7247,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -7275,6 +7376,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -7346,6 +7448,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -7452,6 +7555,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -7523,6 +7627,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -7617,6 +7722,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7728,6 +7834,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7841,6 +7948,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7952,6 +8060,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -8065,6 +8174,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -8176,6 +8286,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -8289,6 +8400,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -8410,6 +8522,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -8533,6 +8646,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8658,6 +8772,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8785,6 +8900,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8910,6 +9026,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -9037,6 +9154,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -9148,6 +9266,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -9261,6 +9380,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -9366,6 +9486,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -9478,6 +9599,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -9583,6 +9705,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9695,6 +9818,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9800,6 +9924,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9912,6 +10037,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -10051,6 +10177,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -10175,6 +10302,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -10295,6 +10423,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -10406,6 +10535,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10548,6 +10678,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10621,6 +10752,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10701,6 +10833,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10810,6 +10943,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10912,6 +11046,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10946,6 +11081,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10977,6 +11113,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -11099,6 +11236,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11130,6 +11268,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11232,6 +11371,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -11335,6 +11475,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -11432,6 +11573,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11533,6 +11675,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11567,6 +11710,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11685,6 +11829,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11793,6 +11938,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11889,6 +12035,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRowLogs" @@ -11983,6 +12130,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -12103,6 +12251,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -12219,6 +12368,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -12311,6 +12461,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -12449,6 +12600,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -12522,6 +12674,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12600,6 +12753,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTableLogs" @@ -12682,6 +12836,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTableUsage" @@ -12772,6 +12927,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12799,6 +12955,7 @@ ], "description": "Get the database activity logs list by its unique ID.", "demo": "databases\/list-logs.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12875,6 +13032,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -12902,6 +13060,7 @@ ], "description": "Get usage metrics and statistics for a database. You can view the total number of collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/get-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -12986,6 +13145,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13067,6 +13227,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13379,6 +13540,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13429,6 +13591,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13478,6 +13641,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13662,6 +13826,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13720,6 +13885,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13790,6 +13956,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13849,6 +14016,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14157,6 +14325,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14218,6 +14387,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14295,6 +14465,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14384,6 +14555,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -14476,6 +14648,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14561,6 +14734,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14681,6 +14855,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14777,6 +14952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14839,6 +15015,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14906,6 +15083,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14991,6 +15169,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15059,6 +15238,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15141,6 +15321,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15259,6 +15440,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15322,6 +15504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15389,6 +15572,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15467,6 +15651,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15526,6 +15711,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15616,6 +15802,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15683,6 +15870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15777,6 +15965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15847,6 +16036,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15920,6 +16110,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15990,6 +16181,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16039,6 +16231,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16088,6 +16281,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16137,6 +16331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16195,6 +16390,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16244,6 +16440,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16293,6 +16490,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16353,6 +16551,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16413,6 +16612,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16482,6 +16682,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16542,6 +16743,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16626,6 +16828,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16686,6 +16889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16746,6 +16950,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16806,6 +17011,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16866,6 +17072,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16926,6 +17133,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16986,6 +17194,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17046,6 +17255,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17106,6 +17316,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17155,6 +17366,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17204,6 +17416,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17254,6 +17467,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17305,6 +17519,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17356,6 +17571,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17407,6 +17623,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17458,6 +17675,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17509,6 +17727,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17560,6 +17779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17611,6 +17831,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17662,6 +17883,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17746,6 +17968,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17905,6 +18128,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18071,6 +18295,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18268,6 +18493,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18480,6 +18706,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18513,6 +18740,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18545,7 +18773,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -18667,6 +18896,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18699,6 +18929,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18730,7 +18961,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -18853,6 +19085,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18908,6 +19141,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18968,6 +19202,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19049,6 +19284,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19130,6 +19366,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19214,6 +19451,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19248,6 +19486,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19281,7 +19520,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -19400,6 +19640,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19433,6 +19674,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19465,7 +19707,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -19583,6 +19826,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19613,6 +19857,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19642,7 +19887,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -19738,6 +19984,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19767,6 +20014,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19795,7 +20043,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -19889,6 +20138,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20018,6 +20268,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20145,6 +20396,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20249,6 +20501,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20351,6 +20604,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20467,6 +20721,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20581,6 +20836,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20697,6 +20953,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20811,6 +21068,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20852,6 +21110,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20892,7 +21151,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -21055,6 +21315,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21094,6 +21355,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21132,7 +21394,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -21294,6 +21557,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21398,6 +21662,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21500,6 +21765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21604,6 +21870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21706,6 +21973,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21810,6 +22078,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21912,6 +22181,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22016,6 +22286,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22116,6 +22387,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22171,6 +22443,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22231,6 +22504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22312,6 +22586,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22393,6 +22668,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22475,6 +22751,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22563,6 +22840,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22623,6 +22901,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22704,6 +22983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22764,6 +23044,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22845,6 +23126,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22936,6 +23218,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23022,6 +23305,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23086,6 +23370,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23154,6 +23439,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23236,6 +23522,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23348,6 +23635,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23456,6 +23744,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23581,6 +23870,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23671,6 +23961,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23763,6 +24054,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23848,6 +24140,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23982,6 +24275,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24117,6 +24411,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24244,6 +24539,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24370,6 +24666,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24428,6 +24725,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24481,6 +24779,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24539,6 +24838,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24621,6 +24921,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24669,6 +24970,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24750,6 +25052,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24808,6 +25111,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24893,6 +25197,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24951,6 +25256,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25031,6 +25337,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25178,6 +25485,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25236,6 +25544,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25361,6 +25670,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25421,6 +25731,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25451,6 +25762,7 @@ ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", "demo": "projects\/update-api-status.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25480,7 +25792,8 @@ } ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", - "demo": "projects\/update-api-status.md" + "demo": "projects\/update-api-status.md", + "public": true } ], "auth": { @@ -25575,6 +25888,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25603,6 +25917,7 @@ ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", "demo": "projects\/update-api-status-all.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25630,7 +25945,8 @@ } ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", - "demo": "projects\/update-api-status-all.md" + "demo": "projects\/update-api-status-all.md", + "public": true } ], "auth": { @@ -25711,6 +26027,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25789,6 +26106,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25867,6 +26185,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25945,6 +26264,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26037,6 +26357,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26118,6 +26439,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26196,6 +26518,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26274,6 +26597,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26352,6 +26676,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26430,6 +26755,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26508,6 +26834,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26603,6 +26930,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26673,6 +27001,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26756,6 +27085,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26822,6 +27152,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26908,6 +27239,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26976,6 +27308,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27120,6 +27453,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27187,6 +27521,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27340,6 +27675,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27406,6 +27742,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27562,6 +27899,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27630,6 +27968,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27771,6 +28110,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27838,6 +28178,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27958,6 +28299,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28024,6 +28366,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28121,6 +28464,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28189,6 +28533,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28291,6 +28636,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28369,6 +28715,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28405,6 +28752,7 @@ ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", "demo": "projects\/update-smtp.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28440,7 +28788,8 @@ } ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", - "demo": "projects\/update-smtp.md" + "demo": "projects\/update-smtp.md", + "public": true } ], "auth": { @@ -28572,6 +28921,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28610,6 +28960,7 @@ ], "description": "Send a test email to verify SMTP configuration. ", "demo": "projects\/create-smtp-test.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28647,7 +28998,8 @@ } ], "description": "Send a test email to verify SMTP configuration. ", - "demo": "projects\/create-smtp-test.md" + "demo": "projects\/create-smtp-test.md", + "public": true } ], "auth": { @@ -28788,6 +29140,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28864,6 +29217,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29084,6 +29438,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29347,6 +29702,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29567,6 +29923,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29597,6 +29954,7 @@ ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", "demo": "projects\/get-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29626,7 +29984,8 @@ } ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", - "demo": "projects\/get-sms-template.md" + "demo": "projects\/get-sms-template.md", + "public": true } ], "auth": { @@ -29846,6 +30205,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29878,6 +30238,7 @@ ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", "demo": "projects\/update-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29909,7 +30270,8 @@ } ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", - "demo": "projects\/update-sms-template.md" + "demo": "projects\/update-sms-template.md", + "public": true } ], "auth": { @@ -30147,6 +30509,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30177,6 +30540,7 @@ ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", "demo": "projects\/delete-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30206,7 +30570,8 @@ } ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", - "demo": "projects\/delete-sms-template.md" + "demo": "projects\/delete-sms-template.md", + "public": true } ], "auth": { @@ -30426,6 +30791,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30493,6 +30859,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30611,6 +30978,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30677,6 +31045,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30798,6 +31167,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30866,6 +31236,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30932,6 +31303,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31014,6 +31386,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31084,6 +31457,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31167,6 +31541,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31287,6 +31662,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31368,6 +31744,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31421,6 +31798,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31481,6 +31859,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31539,6 +31918,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31620,6 +32000,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31890,6 +32271,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31940,6 +32322,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31989,6 +32372,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32112,6 +32496,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32170,6 +32555,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32240,6 +32626,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32299,6 +32686,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32564,6 +32952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32625,6 +33014,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32702,6 +33092,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32791,6 +33182,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -32891,6 +33283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32970,6 +33363,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33090,6 +33484,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33187,6 +33582,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33249,6 +33645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33316,6 +33713,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33401,6 +33799,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33468,6 +33867,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33548,6 +33948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33612,6 +34013,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33679,6 +34081,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33757,6 +34160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33816,6 +34220,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33906,6 +34311,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33973,6 +34379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34067,6 +34474,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34134,6 +34542,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34215,6 +34624,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34359,6 +34769,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34418,6 +34829,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34558,6 +34970,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34618,6 +35031,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34709,6 +35123,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34798,6 +35213,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34867,6 +35283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34957,6 +35374,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35026,6 +35444,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35104,6 +35523,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35310,6 +35730,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35387,6 +35808,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35457,6 +35879,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35535,6 +35958,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35616,6 +36040,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35702,6 +36127,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35770,6 +36196,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35841,6 +36268,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35905,6 +36333,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35985,6 +36414,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36051,6 +36481,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36132,6 +36563,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "listUsage", @@ -36151,7 +36583,8 @@ } ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/list-usage.md" + "demo": "tablesdb\/list-usage.md", + "public": true } ], "auth": { @@ -36224,6 +36657,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36283,6 +36717,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36361,6 +36796,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36423,6 +36859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36515,6 +36952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36642,6 +37080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36712,6 +37151,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36817,6 +37257,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36887,6 +37328,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36980,6 +37422,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37090,6 +37533,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37202,6 +37646,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37312,6 +37757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37424,6 +37870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37534,6 +37981,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37646,6 +38094,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37766,6 +38215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37888,6 +38338,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38012,6 +38463,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38138,6 +38590,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38262,6 +38715,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38388,6 +38842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38498,6 +38953,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38610,6 +39066,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38714,6 +39171,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38825,6 +39283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38929,6 +39388,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39040,6 +39500,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39144,6 +39605,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39255,6 +39717,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39393,6 +39856,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39516,6 +39980,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39635,6 +40100,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39745,6 +40211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39886,6 +40353,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39958,6 +40426,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40037,6 +40506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40144,6 +40614,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40235,6 +40706,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40372,6 +40844,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40444,6 +40917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40521,6 +40995,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40603,6 +41078,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40704,6 +41180,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -40733,7 +41210,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -40760,7 +41238,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -40882,6 +41361,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -40908,7 +41388,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -41010,6 +41491,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41112,6 +41594,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41208,6 +41691,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41308,6 +41792,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -41336,7 +41821,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -41451,6 +41937,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41558,6 +42045,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41653,6 +42141,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41746,6 +42235,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41865,6 +42355,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41980,6 +42471,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42069,6 +42561,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "getUsage", @@ -42091,7 +42584,8 @@ } ], "description": "Get usage metrics and statistics for a database. You can view the total number of tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/get-usage.md" + "demo": "tablesdb\/get-usage.md", + "public": true } ], "auth": { @@ -42173,6 +42667,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42256,6 +42751,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42345,6 +42841,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42406,6 +42903,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42480,6 +42978,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42540,6 +43039,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42620,6 +43120,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42711,6 +43212,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42830,6 +43332,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42899,6 +43402,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42991,6 +43495,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43062,6 +43567,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43155,6 +43661,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43215,6 +43722,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43293,6 +43801,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43382,6 +43891,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43466,6 +43976,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43526,6 +44037,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43597,6 +44109,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43656,6 +44169,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43737,6 +44251,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43834,6 +44349,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43925,6 +44441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44014,6 +44531,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44092,6 +44610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44153,6 +44672,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44244,6 +44764,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44335,6 +44856,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44461,6 +44983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44573,6 +45096,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44683,6 +45207,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44753,6 +45278,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44807,6 +45333,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44868,6 +45395,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44947,6 +45475,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45029,6 +45558,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45109,6 +45639,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45189,6 +45720,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45280,6 +45812,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45308,6 +45841,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45335,7 +45869,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -45412,6 +45947,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45439,6 +45975,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45465,7 +46002,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -45540,6 +46078,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45566,6 +46105,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45591,7 +46131,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -45653,6 +46194,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45679,6 +46221,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45704,7 +46247,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -45766,6 +46310,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45792,6 +46337,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45817,7 +46363,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -45879,6 +46426,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -45905,6 +46453,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -45930,7 +46479,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -45994,6 +46544,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46073,6 +46624,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46152,6 +46704,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46229,6 +46782,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46288,6 +46842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46365,6 +46920,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46433,6 +46989,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46487,6 +47044,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46543,6 +47101,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46612,6 +47171,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46690,6 +47250,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46771,6 +47332,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46882,6 +47444,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46950,6 +47513,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47040,6 +47604,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47109,6 +47674,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47191,6 +47757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47270,6 +47837,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47349,6 +47917,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47444,6 +48013,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47537,6 +48107,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47620,6 +48191,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47686,6 +48258,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47752,6 +48325,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47835,6 +48409,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47919,6 +48494,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47999,6 +48575,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48052,6 +48629,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/swagger2-1.8.x-server.json b/app/config/specs/swagger2-1.8.x-server.json index cda8c7682f..d800d8bb6e 100644 --- a/app/config/specs/swagger2-1.8.x-server.json +++ b/app/config/specs/swagger2-1.8.x-server.json @@ -117,6 +117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -169,6 +170,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -260,6 +262,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -339,6 +342,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -411,6 +415,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -475,6 +480,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -524,6 +530,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -601,6 +608,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -675,6 +683,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -702,6 +711,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -728,7 +738,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -798,6 +809,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -827,6 +839,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -855,7 +868,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -938,6 +952,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -964,6 +979,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -989,7 +1005,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1061,6 +1078,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1087,6 +1105,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1112,7 +1131,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1192,6 +1212,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1221,6 +1242,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1249,7 +1271,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1331,6 +1354,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1354,6 +1378,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1376,7 +1401,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1431,6 +1457,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1454,6 +1481,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1476,7 +1504,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1531,6 +1560,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1554,6 +1584,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1576,7 +1607,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1631,6 +1663,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1654,6 +1687,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1676,7 +1710,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1733,6 +1768,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1807,6 +1843,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1887,6 +1924,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1966,6 +2004,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2018,6 +2057,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2095,6 +2135,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2174,6 +2215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2260,6 +2302,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2307,6 +2350,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2361,6 +2405,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2412,6 +2457,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2490,6 +2536,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2572,6 +2619,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2654,6 +2702,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2730,6 +2779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2792,6 +2842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2849,6 +2900,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2913,6 +2965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2970,6 +3023,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3057,6 +3111,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3142,6 +3197,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3282,6 +3338,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3360,6 +3417,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3382,7 +3440,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3406,6 +3465,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3484,6 +3544,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3508,7 +3569,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3534,6 +3596,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3624,6 +3687,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3676,6 +3740,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3755,6 +3820,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3881,6 +3947,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4013,6 +4080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4077,6 +4145,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4565,6 +4634,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4649,6 +4719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4741,6 +4812,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4833,6 +4905,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -5545,6 +5618,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5572,6 +5646,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5660,6 +5735,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5690,6 +5766,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5780,6 +5857,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5847,6 +5925,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5917,6 +5996,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5980,6 +6060,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6059,6 +6140,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6124,6 +6206,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6204,6 +6287,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6231,6 +6315,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6297,6 +6382,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6327,6 +6413,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6412,6 +6499,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6438,6 +6526,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6504,6 +6593,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -6598,6 +6688,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -6727,6 +6818,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -6799,6 +6891,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -6906,6 +6999,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -6978,6 +7072,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -7073,6 +7168,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7185,6 +7281,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7299,6 +7396,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7411,6 +7509,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -7525,6 +7624,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -7637,6 +7737,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -7751,6 +7852,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -7873,6 +7975,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -7997,6 +8100,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8123,6 +8227,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8251,6 +8356,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8377,6 +8483,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -8505,6 +8612,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -8617,6 +8725,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -8731,6 +8840,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -8837,6 +8947,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -8950,6 +9061,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -9056,6 +9168,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9169,6 +9282,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9275,6 +9389,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9388,6 +9503,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -9528,6 +9644,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -9653,6 +9770,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -9774,6 +9892,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -9886,6 +10005,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10029,6 +10149,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10103,6 +10224,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10184,6 +10306,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10294,6 +10417,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10398,6 +10522,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10433,6 +10558,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10465,6 +10591,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -10589,6 +10716,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10621,6 +10749,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10724,6 +10853,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -10828,6 +10958,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -10926,6 +11057,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11029,6 +11161,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11064,6 +11197,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11184,6 +11318,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11294,6 +11429,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11396,6 +11532,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -11518,6 +11655,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -11636,6 +11774,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -11729,6 +11868,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -11868,6 +12008,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -11942,6 +12083,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12021,6 +12163,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12103,6 +12246,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12416,6 +12560,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12467,6 +12612,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12517,6 +12663,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12577,6 +12724,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12886,6 +13034,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12948,6 +13097,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13026,6 +13176,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13116,6 +13267,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -13209,6 +13361,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13295,6 +13448,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13416,6 +13570,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13513,6 +13668,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13576,6 +13732,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13644,6 +13801,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13730,6 +13888,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13799,6 +13958,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -13883,6 +14043,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14003,6 +14164,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14068,6 +14230,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14136,6 +14299,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14196,6 +14360,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14287,6 +14452,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14355,6 +14521,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14450,6 +14617,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14521,6 +14689,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14596,6 +14765,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14668,6 +14838,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14718,6 +14889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14768,6 +14940,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14818,6 +14991,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14877,6 +15051,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14927,6 +15102,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14977,6 +15153,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15038,6 +15215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15099,6 +15277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15169,6 +15348,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15230,6 +15410,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15315,6 +15496,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15376,6 +15558,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15437,6 +15620,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15498,6 +15682,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15559,6 +15744,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15620,6 +15806,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15681,6 +15868,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15742,6 +15930,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15803,6 +15992,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15853,6 +16043,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15903,6 +16094,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15954,6 +16146,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16007,6 +16200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16060,6 +16254,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16113,6 +16308,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16166,6 +16362,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16219,6 +16416,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16272,6 +16470,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16325,6 +16524,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16378,6 +16578,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16463,6 +16664,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16623,6 +16825,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16790,6 +16993,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16988,6 +17192,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17201,6 +17406,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17235,6 +17441,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17268,7 +17475,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -17391,6 +17599,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17424,6 +17633,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17456,7 +17666,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -17580,6 +17791,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17636,6 +17848,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17697,6 +17910,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17779,6 +17993,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17861,6 +18076,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17946,6 +18162,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -17981,6 +18198,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -18015,7 +18233,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -18135,6 +18354,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18169,6 +18389,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18202,7 +18423,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -18321,6 +18543,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18352,6 +18575,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18382,7 +18606,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -18479,6 +18704,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18509,6 +18735,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18538,7 +18765,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -18633,6 +18861,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18763,6 +18992,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18891,6 +19121,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18996,6 +19227,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19099,6 +19331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19216,6 +19449,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19331,6 +19565,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19448,6 +19683,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19563,6 +19799,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19605,6 +19842,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19646,7 +19884,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -19810,6 +20049,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19850,6 +20090,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19889,7 +20130,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -20052,6 +20294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20157,6 +20400,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20260,6 +20504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20365,6 +20610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20468,6 +20714,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20573,6 +20820,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20676,6 +20924,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20781,6 +21030,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20882,6 +21132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20938,6 +21189,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20999,6 +21251,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21081,6 +21334,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21163,6 +21417,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21246,6 +21501,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21335,6 +21591,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21396,6 +21653,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21478,6 +21736,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21539,6 +21798,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21621,6 +21881,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21713,6 +21974,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21801,6 +22063,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21866,6 +22129,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21936,6 +22200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22018,6 +22283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22289,6 +22555,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22340,6 +22607,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22390,6 +22658,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22450,6 +22719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22716,6 +22986,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22778,6 +23049,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22856,6 +23128,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22946,6 +23219,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -23047,6 +23321,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23127,6 +23402,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23248,6 +23524,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23346,6 +23623,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23409,6 +23687,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23477,6 +23756,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23563,6 +23843,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23631,6 +23912,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23712,6 +23994,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23777,6 +24060,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23845,6 +24129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23905,6 +24190,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23996,6 +24282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24064,6 +24351,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24159,6 +24447,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24227,6 +24516,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24309,6 +24599,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24454,6 +24745,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24514,6 +24806,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24655,6 +24948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24716,6 +25010,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24809,6 +25104,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24900,6 +25196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24971,6 +25268,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25063,6 +25361,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25134,6 +25433,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25214,6 +25514,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25422,6 +25723,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25501,6 +25803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25583,6 +25886,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25670,6 +25974,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25740,6 +26045,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25813,6 +26119,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25879,6 +26186,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25961,6 +26269,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26029,6 +26338,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26109,6 +26419,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26169,6 +26480,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26248,6 +26560,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26311,6 +26624,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26404,6 +26718,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26532,6 +26847,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26603,6 +26919,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26709,6 +27026,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26780,6 +27098,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26874,6 +27193,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26985,6 +27305,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27098,6 +27419,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27209,6 +27531,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27322,6 +27645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27433,6 +27757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27546,6 +27871,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27667,6 +27993,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27790,6 +28117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27915,6 +28243,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28042,6 +28371,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28167,6 +28497,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28294,6 +28625,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28405,6 +28737,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28518,6 +28851,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28623,6 +28957,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28735,6 +29070,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28840,6 +29176,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28952,6 +29289,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29057,6 +29395,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29169,6 +29508,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29308,6 +29648,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29432,6 +29773,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29552,6 +29894,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29663,6 +30006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29805,6 +30149,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29878,6 +30223,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29958,6 +30304,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30066,6 +30413,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30158,6 +30506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30296,6 +30645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30369,6 +30719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30448,6 +30799,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -30551,6 +30903,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -30581,7 +30934,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -30609,7 +30963,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -30733,6 +31088,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -30760,7 +31116,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -30863,6 +31220,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30966,6 +31324,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -31063,6 +31422,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31165,6 +31525,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -31194,7 +31555,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -31311,6 +31673,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31420,6 +31783,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31521,6 +31885,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31642,6 +32007,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31757,6 +32123,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31842,6 +32209,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31933,6 +32301,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31996,6 +32365,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32072,6 +32442,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32135,6 +32506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32228,6 +32600,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32349,6 +32722,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32420,6 +32794,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32514,6 +32889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32587,6 +32963,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32682,6 +33059,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32744,6 +33122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32824,6 +33203,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -32914,6 +33294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -32999,6 +33380,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33060,6 +33442,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33132,6 +33515,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33192,6 +33576,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33274,6 +33659,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33372,6 +33758,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33464,6 +33851,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33554,6 +33942,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33633,6 +34022,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33695,6 +34085,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33787,6 +34178,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33879,6 +34271,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34006,6 +34399,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34119,6 +34513,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34230,6 +34625,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34285,6 +34681,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34347,6 +34744,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34427,6 +34825,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34510,6 +34909,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34591,6 +34991,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34672,6 +35073,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34764,6 +35166,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34793,6 +35196,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34821,7 +35225,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -34899,6 +35304,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -34927,6 +35333,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -34954,7 +35361,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -35030,6 +35438,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35057,6 +35466,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35083,7 +35493,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -35146,6 +35557,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35173,6 +35585,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35199,7 +35612,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35262,6 +35676,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35289,6 +35704,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35315,7 +35731,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -35378,6 +35795,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35405,6 +35823,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35431,7 +35850,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35496,6 +35916,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35576,6 +35997,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35656,6 +36078,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35734,6 +36157,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35794,6 +36218,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35872,6 +36297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35941,6 +36367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35996,6 +36423,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36053,6 +36481,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36123,6 +36552,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36202,6 +36632,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36284,6 +36715,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36396,6 +36828,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36465,6 +36898,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36556,6 +36990,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36626,6 +37061,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36709,6 +37145,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36789,6 +37226,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] diff --git a/app/config/specs/swagger2-latest-client.json b/app/config/specs/swagger2-latest-client.json index aaa0ca3eba..e3d69b55ce 100644 --- a/app/config/specs/swagger2-latest-client.json +++ b/app/config/specs/swagger2-latest-client.json @@ -108,6 +108,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -159,6 +160,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -250,6 +252,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -328,6 +331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -399,6 +403,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -462,6 +467,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -511,6 +517,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -587,6 +594,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -660,6 +668,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -686,6 +695,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -711,7 +721,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -780,6 +791,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -808,6 +820,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -835,7 +848,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -917,6 +931,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -942,6 +957,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -966,7 +982,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1037,6 +1054,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1063,6 +1081,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1088,7 +1107,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1168,6 +1188,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1196,6 +1217,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1223,7 +1245,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1304,6 +1327,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1326,6 +1350,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1347,7 +1372,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1401,6 +1427,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1423,6 +1450,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1444,7 +1472,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1498,6 +1527,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1520,6 +1550,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1541,7 +1572,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1595,6 +1627,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1617,6 +1650,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1638,7 +1672,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1694,6 +1729,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1767,6 +1803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1846,6 +1883,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1924,6 +1962,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1975,6 +2014,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2051,6 +2091,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2129,6 +2170,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2214,6 +2256,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2260,6 +2303,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2313,6 +2357,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2364,6 +2409,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2442,6 +2488,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2519,6 +2566,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2656,6 +2704,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2738,6 +2787,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2814,6 +2864,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2875,6 +2926,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2931,6 +2983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2994,6 +3047,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3046,6 +3100,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3130,6 +3185,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3202,6 +3258,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3267,6 +3324,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3354,6 +3412,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3439,6 +3498,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3579,6 +3639,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3657,6 +3718,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3678,7 +3740,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3701,6 +3764,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3778,6 +3842,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3801,7 +3866,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3826,6 +3892,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3915,6 +3982,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3966,6 +4034,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4044,6 +4113,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4168,6 +4238,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4298,6 +4369,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4360,6 +4432,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4846,6 +4919,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4928,6 +5002,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5018,6 +5093,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5108,6 +5184,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5819,6 +5896,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5884,6 +5962,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5952,6 +6031,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6013,6 +6093,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6090,6 +6171,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6153,6 +6235,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6232,6 +6315,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -6334,6 +6418,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6368,6 +6453,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -6490,6 +6576,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -6591,6 +6678,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6625,6 +6713,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -6743,6 +6832,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -6851,6 +6941,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -6951,6 +7042,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -7071,6 +7163,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -7188,6 +7281,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7270,6 +7364,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7388,6 +7483,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7459,6 +7555,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7532,6 +7629,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7603,6 +7701,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7654,6 +7753,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7705,6 +7805,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7756,6 +7857,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7807,6 +7909,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7858,6 +7961,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7909,6 +8013,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -7960,6 +8065,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8014,6 +8120,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8098,6 +8205,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8167,6 +8275,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8258,6 +8367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8347,6 +8457,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8416,6 +8527,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8506,6 +8618,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8575,6 +8688,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8653,6 +8767,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8859,6 +8974,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -8940,6 +9056,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9008,6 +9125,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9079,6 +9197,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9143,6 +9262,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9223,6 +9343,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9289,6 +9410,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9371,6 +9493,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9472,6 +9595,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -9501,7 +9625,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true } ], "auth": { @@ -9623,6 +9748,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9723,6 +9849,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -9751,7 +9878,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -9866,6 +9994,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -9973,6 +10102,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10072,6 +10202,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10191,6 +10322,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10304,6 +10436,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10387,6 +10520,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10476,6 +10610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10537,6 +10672,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10611,6 +10747,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10672,6 +10809,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10763,6 +10901,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10882,6 +11021,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -10951,6 +11091,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11043,6 +11184,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11114,6 +11256,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11208,6 +11351,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -11269,6 +11413,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/swagger2-latest-console.json b/app/config/specs/swagger2-latest-console.json index e1e66611a6..8bca9aa3d8 100644 --- a/app/config/specs/swagger2-latest-console.json +++ b/app/config/specs/swagger2-latest-console.json @@ -114,6 +114,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -164,6 +165,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -247,6 +249,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -298,6 +301,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -375,6 +379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -445,6 +450,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -507,6 +513,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -556,6 +563,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -631,6 +639,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -703,6 +712,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -729,6 +739,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -754,7 +765,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -822,6 +834,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -850,6 +863,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -877,7 +891,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -958,6 +973,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -983,6 +999,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -1007,7 +1024,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1077,6 +1095,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1103,6 +1122,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1128,7 +1148,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1208,6 +1229,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1236,6 +1258,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1263,7 +1286,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1343,6 +1367,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1365,6 +1390,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1386,7 +1412,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1439,6 +1466,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1461,6 +1489,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1482,7 +1511,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1535,6 +1565,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1557,6 +1588,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1578,7 +1610,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1631,6 +1664,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1653,6 +1687,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1674,7 +1709,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1729,6 +1765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1801,6 +1838,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1879,6 +1917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -1956,6 +1995,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2006,6 +2046,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2081,6 +2122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2158,6 +2200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2242,6 +2285,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2287,6 +2331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2339,6 +2384,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2390,6 +2436,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2468,6 +2515,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2545,6 +2593,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2682,6 +2731,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2764,6 +2814,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2840,6 +2891,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2900,6 +2952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2955,6 +3008,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3017,6 +3071,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3068,6 +3123,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3151,6 +3207,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3222,6 +3279,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3286,6 +3344,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3373,6 +3432,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3458,6 +3518,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3598,6 +3659,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3676,6 +3738,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3697,7 +3760,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3720,6 +3784,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3796,6 +3861,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3819,7 +3885,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3844,6 +3911,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3932,6 +4000,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3982,6 +4051,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4059,6 +4129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4183,6 +4254,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4313,6 +4385,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4375,6 +4448,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4861,6 +4935,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -4943,6 +5018,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5033,6 +5109,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5123,6 +5200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5835,6 +5913,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5898,6 +5977,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -5969,6 +6049,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6017,6 +6098,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -6043,6 +6125,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -6130,6 +6213,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6159,6 +6243,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -6248,6 +6333,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6313,6 +6399,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6381,6 +6468,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6442,6 +6530,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6519,6 +6608,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6582,6 +6672,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -6660,6 +6751,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6684,6 +6776,7 @@ ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/list-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listUsage" @@ -6760,6 +6853,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6786,6 +6880,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6851,6 +6946,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6880,6 +6976,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6964,6 +7061,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6989,6 +7087,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -7054,6 +7153,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -7147,6 +7247,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -7275,6 +7376,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -7346,6 +7448,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -7452,6 +7555,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -7523,6 +7627,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -7617,6 +7722,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7728,6 +7834,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7841,6 +7948,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7952,6 +8060,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -8065,6 +8174,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -8176,6 +8286,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -8289,6 +8400,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -8410,6 +8522,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -8533,6 +8646,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8658,6 +8772,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8785,6 +8900,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8910,6 +9026,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -9037,6 +9154,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -9148,6 +9266,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -9261,6 +9380,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -9366,6 +9486,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -9478,6 +9599,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -9583,6 +9705,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9695,6 +9818,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9800,6 +9924,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9912,6 +10037,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -10051,6 +10177,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -10175,6 +10302,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -10295,6 +10423,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -10406,6 +10535,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10548,6 +10678,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10621,6 +10752,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10701,6 +10833,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10810,6 +10943,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10912,6 +11046,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10946,6 +11081,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10977,6 +11113,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -11099,6 +11236,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11130,6 +11268,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -11232,6 +11371,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -11335,6 +11475,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -11432,6 +11573,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11533,6 +11675,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11567,6 +11710,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11685,6 +11829,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11793,6 +11938,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11889,6 +12035,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRowLogs" @@ -11983,6 +12130,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -12103,6 +12251,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -12219,6 +12368,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -12311,6 +12461,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -12449,6 +12600,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -12522,6 +12674,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12600,6 +12753,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTableLogs" @@ -12682,6 +12836,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTableUsage" @@ -12772,6 +12927,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12799,6 +12955,7 @@ ], "description": "Get the database activity logs list by its unique ID.", "demo": "databases\/list-logs.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listDatabaseLogs" @@ -12875,6 +13032,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -12902,6 +13060,7 @@ ], "description": "Get usage metrics and statistics for a database. You can view the total number of collections, documents, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", "demo": "databases\/get-usage.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getUsage" @@ -12986,6 +13145,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13067,6 +13227,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13379,6 +13540,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13429,6 +13591,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13478,6 +13641,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13662,6 +13826,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13720,6 +13885,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13790,6 +13956,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -13849,6 +14016,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14157,6 +14325,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14218,6 +14387,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14295,6 +14465,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14384,6 +14555,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -14476,6 +14648,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14561,6 +14734,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14681,6 +14855,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14777,6 +14952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14839,6 +15015,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14906,6 +15083,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -14991,6 +15169,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15059,6 +15238,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15141,6 +15321,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15259,6 +15440,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15322,6 +15504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15389,6 +15572,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15467,6 +15651,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15526,6 +15711,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15616,6 +15802,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15683,6 +15870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15777,6 +15965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15847,6 +16036,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15920,6 +16110,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -15990,6 +16181,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16039,6 +16231,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16088,6 +16281,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16137,6 +16331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16195,6 +16390,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16244,6 +16440,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16293,6 +16490,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16353,6 +16551,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16413,6 +16612,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16482,6 +16682,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16542,6 +16743,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16626,6 +16828,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16686,6 +16889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16746,6 +16950,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16806,6 +17011,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16866,6 +17072,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16926,6 +17133,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -16986,6 +17194,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17046,6 +17255,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17106,6 +17316,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17155,6 +17366,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17204,6 +17416,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17254,6 +17467,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17305,6 +17519,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17356,6 +17571,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17407,6 +17623,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17458,6 +17675,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17509,6 +17727,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17560,6 +17779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17611,6 +17831,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17662,6 +17883,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17746,6 +17968,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -17905,6 +18128,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18071,6 +18295,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18268,6 +18493,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18480,6 +18706,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18513,6 +18740,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -18545,7 +18773,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -18667,6 +18896,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18699,6 +18929,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -18730,7 +18961,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -18853,6 +19085,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18908,6 +19141,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -18968,6 +19202,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19049,6 +19284,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19130,6 +19366,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -19214,6 +19451,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19248,6 +19486,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -19281,7 +19520,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -19400,6 +19640,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19433,6 +19674,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -19465,7 +19707,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -19583,6 +19826,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19613,6 +19857,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -19642,7 +19887,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -19738,6 +19984,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19767,6 +20014,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -19795,7 +20043,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -19889,6 +20138,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20018,6 +20268,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20145,6 +20396,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20249,6 +20501,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20351,6 +20604,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20467,6 +20721,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20581,6 +20836,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20697,6 +20953,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -20811,6 +21068,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20852,6 +21110,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -20892,7 +21151,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -21055,6 +21315,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21094,6 +21355,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -21132,7 +21394,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -21294,6 +21557,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21398,6 +21662,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21500,6 +21765,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21604,6 +21870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21706,6 +21973,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21810,6 +22078,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -21912,6 +22181,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22016,6 +22286,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22116,6 +22387,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22171,6 +22443,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22231,6 +22504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22312,6 +22586,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22393,6 +22668,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22475,6 +22751,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22563,6 +22840,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22623,6 +22901,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22704,6 +22983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22764,6 +23044,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22845,6 +23126,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -22936,6 +23218,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23022,6 +23305,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23086,6 +23370,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23154,6 +23439,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23236,6 +23522,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23348,6 +23635,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23456,6 +23744,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23581,6 +23870,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23671,6 +23961,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23763,6 +24054,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23848,6 +24140,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -23982,6 +24275,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24117,6 +24411,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24244,6 +24539,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24370,6 +24666,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24428,6 +24725,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24481,6 +24779,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24539,6 +24838,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24621,6 +24921,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24669,6 +24970,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24750,6 +25052,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24808,6 +25111,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24893,6 +25197,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -24951,6 +25256,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25031,6 +25337,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25178,6 +25485,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25236,6 +25544,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25361,6 +25670,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25421,6 +25731,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25451,6 +25762,7 @@ ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", "demo": "projects\/update-api-status.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatus" @@ -25480,7 +25792,8 @@ } ], "description": "Update the status of a specific API type. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime.", - "demo": "projects\/update-api-status.md" + "demo": "projects\/update-api-status.md", + "public": true } ], "auth": { @@ -25575,6 +25888,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25603,6 +25917,7 @@ ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", "demo": "projects\/update-api-status-all.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateAPIStatusAll" @@ -25630,7 +25945,8 @@ } ], "description": "Update the status of all API types. Use this endpoint to enable or disable API types such as REST, GraphQL and Realtime all at once.", - "demo": "projects\/update-api-status-all.md" + "demo": "projects\/update-api-status-all.md", + "public": true } ], "auth": { @@ -25711,6 +26027,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25789,6 +26106,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25867,6 +26185,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -25945,6 +26264,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26037,6 +26357,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26118,6 +26439,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26196,6 +26518,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26274,6 +26597,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26352,6 +26676,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26430,6 +26755,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26508,6 +26834,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26603,6 +26930,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26673,6 +27001,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26756,6 +27085,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26822,6 +27152,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26908,6 +27239,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -26976,6 +27308,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27120,6 +27453,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27187,6 +27521,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27340,6 +27675,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27406,6 +27742,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27562,6 +27899,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27630,6 +27968,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27771,6 +28110,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27838,6 +28178,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -27958,6 +28299,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28024,6 +28366,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28121,6 +28464,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28189,6 +28533,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28291,6 +28636,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28369,6 +28715,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28405,6 +28752,7 @@ ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", "demo": "projects\/update-smtp.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMTP" @@ -28440,7 +28788,8 @@ } ], "description": "Update the SMTP configuration for your project. Use this endpoint to configure your project's SMTP provider with your custom settings for sending transactional emails. ", - "demo": "projects\/update-smtp.md" + "demo": "projects\/update-smtp.md", + "public": true } ], "auth": { @@ -28572,6 +28921,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28610,6 +28960,7 @@ ], "description": "Send a test email to verify SMTP configuration. ", "demo": "projects\/create-smtp-test.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.createSMTPTest" @@ -28647,7 +28998,8 @@ } ], "description": "Send a test email to verify SMTP configuration. ", - "demo": "projects\/create-smtp-test.md" + "demo": "projects\/create-smtp-test.md", + "public": true } ], "auth": { @@ -28788,6 +29140,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -28864,6 +29217,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29084,6 +29438,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29347,6 +29702,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -29567,6 +29923,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29597,6 +29954,7 @@ ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", "demo": "projects\/get-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.getSMSTemplate" @@ -29626,7 +29984,8 @@ } ], "description": "Get a custom SMS template for the specified locale and type returning it's contents.", - "demo": "projects\/get-sms-template.md" + "demo": "projects\/get-sms-template.md", + "public": true } ], "auth": { @@ -29846,6 +30205,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29878,6 +30238,7 @@ ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", "demo": "projects\/update-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.updateSMSTemplate" @@ -29909,7 +30270,8 @@ } ], "description": "Update a custom SMS template for the specified locale and type. Use this endpoint to modify the content of your SMS templates. ", - "demo": "projects\/update-sms-template.md" + "demo": "projects\/update-sms-template.md", + "public": true } ], "auth": { @@ -30147,6 +30509,7 @@ "console" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30177,6 +30540,7 @@ ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", "demo": "projects\/delete-sms-template.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "projects.deleteSMSTemplate" @@ -30206,7 +30570,8 @@ } ], "description": "Reset a custom SMS template to its default value. This endpoint removes any custom message and restores the template to its original state. ", - "demo": "projects\/delete-sms-template.md" + "demo": "projects\/delete-sms-template.md", + "public": true } ], "auth": { @@ -30426,6 +30791,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30493,6 +30859,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30611,6 +30978,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30677,6 +31045,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30798,6 +31167,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30866,6 +31236,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -30932,6 +31303,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31014,6 +31386,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31084,6 +31457,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31167,6 +31541,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31287,6 +31662,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31368,6 +31744,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31421,6 +31798,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31481,6 +31859,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31539,6 +31918,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31620,6 +32000,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31890,6 +32271,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31940,6 +32322,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -31989,6 +32372,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32112,6 +32496,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32170,6 +32555,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32240,6 +32626,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32299,6 +32686,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32564,6 +32952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32625,6 +33014,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32702,6 +33092,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32791,6 +33182,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [] } @@ -32891,6 +33283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -32970,6 +33363,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33090,6 +33484,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33187,6 +33582,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33249,6 +33645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33316,6 +33713,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33401,6 +33799,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33468,6 +33867,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33548,6 +33948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33612,6 +34013,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33679,6 +34081,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33757,6 +34160,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33816,6 +34220,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33906,6 +34311,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -33973,6 +34379,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34067,6 +34474,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34134,6 +34542,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34215,6 +34624,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34359,6 +34769,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34418,6 +34829,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34558,6 +34970,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34618,6 +35031,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34709,6 +35123,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34798,6 +35213,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34867,6 +35283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -34957,6 +35374,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35026,6 +35444,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35104,6 +35523,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35310,6 +35730,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35387,6 +35808,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35457,6 +35879,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35535,6 +35958,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35616,6 +36040,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35702,6 +36127,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35770,6 +36196,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35841,6 +36268,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35905,6 +36333,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -35985,6 +36414,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36051,6 +36481,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36132,6 +36563,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "listUsage", @@ -36151,7 +36583,8 @@ } ], "description": "List usage metrics and statistics for all databases in the project. You can view the total number of databases, tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/list-usage.md" + "demo": "tablesdb\/list-usage.md", + "public": true } ], "auth": { @@ -36224,6 +36657,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36283,6 +36717,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36361,6 +36796,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36423,6 +36859,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36515,6 +36952,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36642,6 +37080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36712,6 +37151,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36817,6 +37257,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36887,6 +37328,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -36980,6 +37422,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37090,6 +37533,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37202,6 +37646,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37312,6 +37757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37424,6 +37870,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37534,6 +37981,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37646,6 +38094,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37766,6 +38215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -37888,6 +38338,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38012,6 +38463,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38138,6 +38590,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38262,6 +38715,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38388,6 +38842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38498,6 +38953,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38610,6 +39066,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38714,6 +39171,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38825,6 +39283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -38929,6 +39388,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39040,6 +39500,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39144,6 +39605,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39255,6 +39717,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39393,6 +39856,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39516,6 +39980,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39635,6 +40100,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39745,6 +40211,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39886,6 +40353,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -39958,6 +40426,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40037,6 +40506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40144,6 +40614,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40235,6 +40706,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40372,6 +40844,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40444,6 +40917,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40521,6 +40995,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40603,6 +41078,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -40704,6 +41180,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -40733,7 +41210,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -40760,7 +41238,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -40882,6 +41361,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -40908,7 +41388,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -41010,6 +41491,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41112,6 +41594,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41208,6 +41691,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41308,6 +41792,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -41336,7 +41821,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -41451,6 +41937,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41558,6 +42045,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41653,6 +42141,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41746,6 +42235,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41865,6 +42355,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -41980,6 +42471,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42069,6 +42561,7 @@ "console" ], "packaging": false, + "public": true, "methods": [ { "name": "getUsage", @@ -42091,7 +42584,8 @@ } ], "description": "Get usage metrics and statistics for a database. You can view the total number of tables, rows, and storage usage. The response includes both current totals and historical data over time. Use the optional range parameter to specify the time window for historical data: 24h (last 24 hours), 30d (last 30 days), or 90d (last 90 days). If not specified, range defaults to 30 days.", - "demo": "tablesdb\/get-usage.md" + "demo": "tablesdb\/get-usage.md", + "public": true } ], "auth": { @@ -42173,6 +42667,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42256,6 +42751,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42345,6 +42841,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42406,6 +42903,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42480,6 +42978,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42540,6 +43039,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42620,6 +43120,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42711,6 +43212,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42830,6 +43332,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42899,6 +43402,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -42991,6 +43495,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43062,6 +43567,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43155,6 +43661,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43215,6 +43722,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43293,6 +43801,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43382,6 +43891,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43466,6 +43976,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43526,6 +44037,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43597,6 +44109,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43656,6 +44169,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43737,6 +44251,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43834,6 +44349,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -43925,6 +44441,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44014,6 +44531,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44092,6 +44610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44153,6 +44672,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44244,6 +44764,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44335,6 +44856,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44461,6 +44983,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44573,6 +45096,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44683,6 +45207,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44753,6 +45278,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44807,6 +45333,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44868,6 +45395,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -44947,6 +45475,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45029,6 +45558,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45109,6 +45639,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45189,6 +45720,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -45280,6 +45812,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45308,6 +45841,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -45335,7 +45869,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -45412,6 +45947,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45439,6 +45975,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -45465,7 +46002,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -45540,6 +46078,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45566,6 +46105,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -45591,7 +46131,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -45653,6 +46194,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45679,6 +46221,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -45704,7 +46247,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -45766,6 +46310,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45792,6 +46337,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -45817,7 +46363,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -45879,6 +46426,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -45905,6 +46453,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -45930,7 +46479,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -45994,6 +46544,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46073,6 +46624,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46152,6 +46704,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46229,6 +46782,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46288,6 +46842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46365,6 +46920,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46433,6 +46989,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46487,6 +47044,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46543,6 +47101,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46612,6 +47171,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46690,6 +47250,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46771,6 +47332,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46882,6 +47444,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -46950,6 +47513,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47040,6 +47604,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47109,6 +47674,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47191,6 +47757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47270,6 +47837,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47349,6 +47917,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47444,6 +48013,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47537,6 +48107,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47620,6 +48191,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47686,6 +48258,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47752,6 +48325,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47835,6 +48409,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47919,6 +48494,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -47999,6 +48575,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -48052,6 +48629,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [] } diff --git a/app/config/specs/swagger2-latest-server.json b/app/config/specs/swagger2-latest-server.json index cda8c7682f..d800d8bb6e 100644 --- a/app/config/specs/swagger2-latest-server.json +++ b/app/config/specs/swagger2-latest-server.json @@ -117,6 +117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -169,6 +170,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -260,6 +262,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -339,6 +342,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -411,6 +415,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -475,6 +480,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -524,6 +530,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -601,6 +608,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -675,6 +683,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -702,6 +711,7 @@ ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", "demo": "account\/create-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAAuthenticator" @@ -728,7 +738,8 @@ } ], "description": "Add an authenticator app to be used as an MFA factor. Verify the authenticator using the [verify authenticator](\/docs\/references\/cloud\/client-web\/account#updateMfaAuthenticator) method.", - "demo": "account\/create-mfa-authenticator.md" + "demo": "account\/create-mfa-authenticator.md", + "public": true } ], "auth": { @@ -798,6 +809,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -827,6 +839,7 @@ ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", "demo": "account\/update-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAAuthenticator" @@ -855,7 +868,8 @@ } ], "description": "Verify an authenticator app after adding it using the [add authenticator](\/docs\/references\/cloud\/client-web\/account#createMfaAuthenticator) method.", - "demo": "account\/update-mfa-authenticator.md" + "demo": "account\/update-mfa-authenticator.md", + "public": true } ], "auth": { @@ -938,6 +952,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -964,6 +979,7 @@ ], "description": "Delete an authenticator for a user by ID.", "demo": "account\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.deleteMFAAuthenticator" @@ -989,7 +1005,8 @@ } ], "description": "Delete an authenticator for a user by ID.", - "demo": "account\/delete-mfa-authenticator.md" + "demo": "account\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -1061,6 +1078,7 @@ "client" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1087,6 +1105,7 @@ ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", "demo": "account\/create-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFAChallenge" @@ -1112,7 +1131,8 @@ } ], "description": "Begin the process of MFA verification after sign-in. Finish the flow with [updateMfaChallenge](\/docs\/references\/cloud\/client-web\/account#updateMfaChallenge) method.", - "demo": "account\/create-mfa-challenge.md" + "demo": "account\/create-mfa-challenge.md", + "public": true } ], "auth": { @@ -1192,6 +1212,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1221,6 +1242,7 @@ ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/update-mfa-challenge.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFAChallenge" @@ -1249,7 +1271,8 @@ } ], "description": "Complete the MFA challenge by providing the one-time password. Finish the process of MFA verification by providing the one-time password. To begin the flow, use [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/update-mfa-challenge.md" + "demo": "account\/update-mfa-challenge.md", + "public": true } ], "auth": { @@ -1331,6 +1354,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1354,6 +1378,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "account\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.listMFAFactors" @@ -1376,7 +1401,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "account\/list-mfa-factors.md" + "demo": "account\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -1431,6 +1457,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1454,6 +1481,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", "demo": "account\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.getMFARecoveryCodes" @@ -1476,7 +1504,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to read recovery codes.", - "demo": "account\/get-mfa-recovery-codes.md" + "demo": "account\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1531,6 +1560,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1554,6 +1584,7 @@ ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", "demo": "account\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createMFARecoveryCodes" @@ -1576,7 +1607,8 @@ } ], "description": "Generate recovery codes as backup for MFA flow. It's recommended to generate and show then immediately after user successfully adds their authehticator. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method.", - "demo": "account\/create-mfa-recovery-codes.md" + "demo": "account\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1631,6 +1663,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1654,6 +1687,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", "demo": "account\/update-mfa-recovery-codes.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateMFARecoveryCodes" @@ -1676,7 +1710,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method. An OTP challenge is required to regenreate recovery codes.", - "demo": "account\/update-mfa-recovery-codes.md" + "demo": "account\/update-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -1733,6 +1768,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1807,6 +1843,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1887,6 +1924,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -1966,6 +2004,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2018,6 +2057,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2095,6 +2135,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2174,6 +2215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2260,6 +2302,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2307,6 +2350,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2361,6 +2405,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2412,6 +2457,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2490,6 +2536,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2572,6 +2619,7 @@ "client" ], "packaging": false, + "public": true, "deprecated": { "since": "1.6.0", "replaceWith": "account.createSession" @@ -2654,6 +2702,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -2730,6 +2779,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2792,6 +2842,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2849,6 +2900,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2913,6 +2965,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -2970,6 +3023,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3057,6 +3111,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3142,6 +3197,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3282,6 +3338,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [] } @@ -3360,6 +3417,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createEmailVerification", @@ -3382,7 +3440,8 @@ } ], "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" + "demo": "account\/create-email-verification.md", + "public": true }, { "name": "createVerification", @@ -3406,6 +3465,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.createEmailVerification" @@ -3484,6 +3544,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "updateEmailVerification", @@ -3508,7 +3569,8 @@ } ], "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" + "demo": "account\/update-email-verification.md", + "public": true }, { "name": "updateVerification", @@ -3534,6 +3596,7 @@ ], "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", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "account.updateEmailVerification" @@ -3624,6 +3687,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3676,6 +3740,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3755,6 +3820,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -3881,6 +3947,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4013,6 +4080,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4077,6 +4145,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4565,6 +4634,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4649,6 +4719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4741,6 +4812,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -4833,6 +4905,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -5545,6 +5618,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5572,6 +5646,7 @@ ], "description": "Get a list of all databases from the current Appwrite project. You can use the search parameter to filter your results.", "demo": "databases\/list.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.list" @@ -5660,6 +5735,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5690,6 +5766,7 @@ ], "description": "Create a new Database.\n", "demo": "databases\/create.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.create" @@ -5780,6 +5857,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5847,6 +5925,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5917,6 +5996,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -5980,6 +6060,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6059,6 +6140,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6124,6 +6206,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -6204,6 +6287,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6231,6 +6315,7 @@ ], "description": "Get a database by its unique ID. This endpoint response returns a JSON object with the database metadata.", "demo": "databases\/get.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.get" @@ -6297,6 +6382,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6327,6 +6413,7 @@ ], "description": "Update a database by its unique ID.", "demo": "databases\/update.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.update" @@ -6412,6 +6499,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6438,6 +6526,7 @@ ], "description": "Delete a database by its unique ID. Only API keys with with databases.write scope can delete a database.", "demo": "databases\/delete.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.delete" @@ -6504,6 +6593,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listTables" @@ -6598,6 +6688,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createTable" @@ -6727,6 +6818,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getTable" @@ -6799,6 +6891,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateTable" @@ -6906,6 +6999,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteTable" @@ -6978,6 +7072,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listColumns" @@ -7073,6 +7168,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createBooleanColumn" @@ -7185,6 +7281,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateBooleanColumn" @@ -7299,6 +7396,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createDatetimeColumn" @@ -7411,6 +7509,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateDatetimeColumn" @@ -7525,6 +7624,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEmailColumn" @@ -7637,6 +7737,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEmailColumn" @@ -7751,6 +7852,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createEnumColumn" @@ -7873,6 +7975,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateEnumColumn" @@ -7997,6 +8100,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createFloatColumn" @@ -8123,6 +8227,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateFloatColumn" @@ -8251,6 +8356,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIntegerColumn" @@ -8377,6 +8483,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIntegerColumn" @@ -8505,6 +8612,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIpColumn" @@ -8617,6 +8725,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateIpColumn" @@ -8731,6 +8840,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createLineColumn" @@ -8837,6 +8947,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateLineColumn" @@ -8950,6 +9061,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPointColumn" @@ -9056,6 +9168,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePointColumn" @@ -9169,6 +9282,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createPolygonColumn" @@ -9275,6 +9389,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updatePolygonColumn" @@ -9388,6 +9503,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRelationshipColumn" @@ -9528,6 +9644,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createStringColumn" @@ -9653,6 +9770,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateStringColumn" @@ -9774,6 +9892,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createUrlColumn" @@ -9886,6 +10005,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateUrlColumn" @@ -10029,6 +10149,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getColumn" @@ -10103,6 +10224,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteColumn" @@ -10184,6 +10306,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRelationshipColumn" @@ -10294,6 +10417,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listRows" @@ -10398,6 +10522,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10433,6 +10558,7 @@ ], "description": "Create a new Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRow" @@ -10465,6 +10591,7 @@ ], "description": "Create new Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/create-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createRows" @@ -10589,6 +10716,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10621,6 +10749,7 @@ ], "description": "Create or update Documents. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.\n", "demo": "databases\/upsert-documents.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRows" @@ -10724,6 +10853,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRows" @@ -10828,6 +10958,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRows" @@ -10926,6 +11057,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getRow" @@ -11029,6 +11161,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11064,6 +11197,7 @@ ], "description": "Create or update a Document. Before using this route, you should create a new collection resource using either a [server integration](https:\/\/appwrite.io\/docs\/server\/databases#databasesCreateCollection) API or directly from your database console.", "demo": "databases\/upsert-document.md", + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.upsertRow" @@ -11184,6 +11318,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.updateRow" @@ -11294,6 +11429,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteRow" @@ -11396,6 +11532,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.decrementRowColumn" @@ -11518,6 +11655,7 @@ "console" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.incrementRowColumn" @@ -11636,6 +11774,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.listIndexes" @@ -11729,6 +11868,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.createIndex" @@ -11868,6 +12008,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.getIndex" @@ -11942,6 +12083,7 @@ "server" ], "packaging": false, + "public": true, "deprecated": { "since": "1.8.0", "replaceWith": "tablesDB.deleteIndex" @@ -12021,6 +12163,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12103,6 +12246,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12416,6 +12560,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12467,6 +12612,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12517,6 +12663,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12577,6 +12724,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12886,6 +13034,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -12948,6 +13097,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13026,6 +13176,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13116,6 +13267,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -13209,6 +13361,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13295,6 +13448,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13416,6 +13570,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13513,6 +13668,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13576,6 +13732,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13644,6 +13801,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13730,6 +13888,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -13799,6 +13958,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -13883,6 +14043,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14003,6 +14164,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -14068,6 +14230,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14136,6 +14299,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14196,6 +14360,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14287,6 +14452,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14355,6 +14521,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14450,6 +14617,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14521,6 +14689,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14596,6 +14765,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14668,6 +14838,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14718,6 +14889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14768,6 +14940,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14818,6 +14991,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14877,6 +15051,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14927,6 +15102,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -14977,6 +15153,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15038,6 +15215,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15099,6 +15277,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15169,6 +15348,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15230,6 +15410,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15315,6 +15496,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15376,6 +15558,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15437,6 +15620,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15498,6 +15682,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15559,6 +15744,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15620,6 +15806,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15681,6 +15868,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15742,6 +15930,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15803,6 +15992,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15853,6 +16043,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15903,6 +16094,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -15954,6 +16146,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16007,6 +16200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16060,6 +16254,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16113,6 +16308,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16166,6 +16362,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16219,6 +16416,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16272,6 +16470,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16325,6 +16524,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -16378,6 +16578,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16463,6 +16664,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16623,6 +16825,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16790,6 +16993,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -16988,6 +17192,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17201,6 +17406,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17235,6 +17441,7 @@ ], "description": "Create a new SMS message.", "demo": "messaging\/create-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMS" @@ -17268,7 +17475,8 @@ } ], "description": "Create a new SMS message.", - "demo": "messaging\/create-sms.md" + "demo": "messaging\/create-sms.md", + "public": true } ], "auth": { @@ -17391,6 +17599,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17424,6 +17633,7 @@ ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", "demo": "messaging\/update-sms.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMS" @@ -17456,7 +17666,8 @@ } ], "description": "Update an SMS message by its unique ID. This endpoint only works on messages that are in draft status. Messages that are already processing, sent, or failed cannot be updated.\n", - "demo": "messaging\/update-sms.md" + "demo": "messaging\/update-sms.md", + "public": true } ], "auth": { @@ -17580,6 +17791,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17636,6 +17848,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17697,6 +17910,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17779,6 +17993,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17861,6 +18076,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -17946,6 +18162,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -17981,6 +18198,7 @@ ], "description": "Create a new Apple Push Notification service provider.", "demo": "messaging\/create-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createAPNSProvider" @@ -18015,7 +18233,8 @@ } ], "description": "Create a new Apple Push Notification service provider.", - "demo": "messaging\/create-apns-provider.md" + "demo": "messaging\/create-apns-provider.md", + "public": true } ], "auth": { @@ -18135,6 +18354,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18169,6 +18389,7 @@ ], "description": "Update a Apple Push Notification service provider by its unique ID.", "demo": "messaging\/update-apns-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateAPNSProvider" @@ -18202,7 +18423,8 @@ } ], "description": "Update a Apple Push Notification service provider by its unique ID.", - "demo": "messaging\/update-apns-provider.md" + "demo": "messaging\/update-apns-provider.md", + "public": true } ], "auth": { @@ -18321,6 +18543,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18352,6 +18575,7 @@ ], "description": "Create a new Firebase Cloud Messaging provider.", "demo": "messaging\/create-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createFCMProvider" @@ -18382,7 +18606,8 @@ } ], "description": "Create a new Firebase Cloud Messaging provider.", - "demo": "messaging\/create-fcm-provider.md" + "demo": "messaging\/create-fcm-provider.md", + "public": true } ], "auth": { @@ -18479,6 +18704,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18509,6 +18735,7 @@ ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", "demo": "messaging\/update-fcm-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateFCMProvider" @@ -18538,7 +18765,8 @@ } ], "description": "Update a Firebase Cloud Messaging provider by its unique ID.", - "demo": "messaging\/update-fcm-provider.md" + "demo": "messaging\/update-fcm-provider.md", + "public": true } ], "auth": { @@ -18633,6 +18861,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18763,6 +18992,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18891,6 +19121,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -18996,6 +19227,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19099,6 +19331,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19216,6 +19449,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19331,6 +19565,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19448,6 +19683,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -19563,6 +19799,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19605,6 +19842,7 @@ ], "description": "Create a new SMTP provider.", "demo": "messaging\/create-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.createSMTPProvider" @@ -19646,7 +19884,8 @@ } ], "description": "Create a new SMTP provider.", - "demo": "messaging\/create-smtp-provider.md" + "demo": "messaging\/create-smtp-provider.md", + "public": true } ], "auth": { @@ -19810,6 +20049,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19850,6 +20090,7 @@ ], "description": "Update a SMTP provider by its unique ID.", "demo": "messaging\/update-smtp-provider.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "messaging.updateSMTPProvider" @@ -19889,7 +20130,8 @@ } ], "description": "Update a SMTP provider by its unique ID.", - "demo": "messaging\/update-smtp-provider.md" + "demo": "messaging\/update-smtp-provider.md", + "public": true } ], "auth": { @@ -20052,6 +20294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20157,6 +20400,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20260,6 +20504,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20365,6 +20610,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20468,6 +20714,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20573,6 +20820,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20676,6 +20924,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20781,6 +21030,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20882,6 +21132,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20938,6 +21189,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -20999,6 +21251,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21081,6 +21334,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21163,6 +21417,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21246,6 +21501,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21335,6 +21591,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21396,6 +21653,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21478,6 +21736,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21539,6 +21798,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21621,6 +21881,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21713,6 +21974,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21801,6 +22063,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -21866,6 +22129,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "JWT": [] @@ -21936,6 +22200,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22018,6 +22283,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22289,6 +22555,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22340,6 +22607,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22390,6 +22658,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22450,6 +22719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22716,6 +22986,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22778,6 +23049,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22856,6 +23128,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -22946,6 +23219,7 @@ "server" ], "packaging": true, + "public": true, "auth": { "Project": [], "Key": [] @@ -23047,6 +23321,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23127,6 +23402,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23248,6 +23524,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23346,6 +23623,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23409,6 +23687,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23477,6 +23756,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23563,6 +23843,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23631,6 +23912,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23712,6 +23994,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23777,6 +24060,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23845,6 +24129,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23905,6 +24190,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -23996,6 +24282,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24064,6 +24351,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24159,6 +24447,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24227,6 +24516,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24309,6 +24599,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24454,6 +24745,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24514,6 +24806,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24655,6 +24948,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -24716,6 +25010,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24809,6 +25104,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24900,6 +25196,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -24971,6 +25268,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25063,6 +25361,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25134,6 +25433,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25214,6 +25514,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25422,6 +25723,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -25501,6 +25803,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25583,6 +25886,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25670,6 +25974,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25740,6 +26045,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25813,6 +26119,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25879,6 +26186,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -25961,6 +26269,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26029,6 +26338,7 @@ "client" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26109,6 +26419,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26169,6 +26480,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26248,6 +26560,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26311,6 +26624,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26404,6 +26718,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26532,6 +26847,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26603,6 +26919,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26709,6 +27026,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26780,6 +27098,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26874,6 +27193,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -26985,6 +27305,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27098,6 +27419,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27209,6 +27531,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27322,6 +27645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27433,6 +27757,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27546,6 +27871,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27667,6 +27993,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27790,6 +28117,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -27915,6 +28243,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28042,6 +28371,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28167,6 +28497,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28294,6 +28625,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28405,6 +28737,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28518,6 +28851,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28623,6 +28957,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28735,6 +29070,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28840,6 +29176,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -28952,6 +29289,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29057,6 +29395,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29169,6 +29508,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29308,6 +29648,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29432,6 +29773,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29552,6 +29894,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29663,6 +30006,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29805,6 +30149,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29878,6 +30223,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -29958,6 +30304,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30066,6 +30413,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30158,6 +30506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30296,6 +30645,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30369,6 +30719,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30448,6 +30799,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -30551,6 +30903,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "createRow", @@ -30581,7 +30934,8 @@ } ], "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" + "demo": "tablesdb\/create-row.md", + "public": true }, { "name": "createRows", @@ -30609,7 +30963,8 @@ } ], "description": "Create new Rows. 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-rows.md" + "demo": "tablesdb\/create-rows.md", + "public": true } ], "auth": { @@ -30733,6 +31088,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRows", @@ -30760,7 +31116,8 @@ } ], "description": "Create or update Rows. 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.\n", - "demo": "tablesdb\/upsert-rows.md" + "demo": "tablesdb\/upsert-rows.md", + "public": true } ], "auth": { @@ -30863,6 +31220,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -30966,6 +31324,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -31063,6 +31422,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31165,6 +31525,7 @@ "server" ], "packaging": false, + "public": true, "methods": [ { "name": "upsertRow", @@ -31194,7 +31555,8 @@ } ], "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" + "demo": "tablesdb\/upsert-row.md", + "public": true } ], "auth": { @@ -31311,6 +31673,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31420,6 +31783,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31521,6 +31885,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31642,6 +32007,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31757,6 +32123,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31842,6 +32209,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31933,6 +32301,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -31996,6 +32365,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32072,6 +32442,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32135,6 +32506,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32228,6 +32600,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32349,6 +32722,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32420,6 +32794,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32514,6 +32889,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32587,6 +32963,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32682,6 +33059,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32744,6 +33122,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Session": [] @@ -32824,6 +33203,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -32914,6 +33294,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -32999,6 +33380,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33060,6 +33442,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33132,6 +33515,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33192,6 +33576,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33274,6 +33659,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33372,6 +33758,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33464,6 +33851,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33554,6 +33942,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33633,6 +34022,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33695,6 +34085,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33787,6 +34178,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -33879,6 +34271,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34006,6 +34399,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34119,6 +34513,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34230,6 +34625,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34285,6 +34681,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34347,6 +34744,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34427,6 +34825,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34510,6 +34909,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34591,6 +34991,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34672,6 +35073,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -34764,6 +35166,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34793,6 +35196,7 @@ ], "description": "Enable or disable MFA on a user account.", "demo": "users\/update-mfa.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFA" @@ -34821,7 +35225,8 @@ } ], "description": "Enable or disable MFA on a user account.", - "demo": "users\/update-mfa.md" + "demo": "users\/update-mfa.md", + "public": true } ], "auth": { @@ -34899,6 +35304,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -34927,6 +35333,7 @@ ], "description": "Delete an authenticator app.", "demo": "users\/delete-mfa-authenticator.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.deleteMFAAuthenticator" @@ -34954,7 +35361,8 @@ } ], "description": "Delete an authenticator app.", - "demo": "users\/delete-mfa-authenticator.md" + "demo": "users\/delete-mfa-authenticator.md", + "public": true } ], "auth": { @@ -35030,6 +35438,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35057,6 +35466,7 @@ ], "description": "List the factors available on the account to be used as a MFA challange.", "demo": "users\/list-mfa-factors.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.listMFAFactors" @@ -35083,7 +35493,8 @@ } ], "description": "List the factors available on the account to be used as a MFA challange.", - "demo": "users\/list-mfa-factors.md" + "demo": "users\/list-mfa-factors.md", + "public": true } ], "auth": { @@ -35146,6 +35557,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35173,6 +35585,7 @@ ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/get-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.getMFARecoveryCodes" @@ -35199,7 +35612,8 @@ } ], "description": "Get recovery codes that can be used as backup for MFA flow by User ID. Before getting codes, they must be generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/get-mfa-recovery-codes.md" + "demo": "users\/get-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35262,6 +35676,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35289,6 +35704,7 @@ ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", "demo": "users\/update-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.updateMFARecoveryCodes" @@ -35315,7 +35731,8 @@ } ], "description": "Regenerate recovery codes that can be used as backup for MFA flow by User ID. Before regenerating codes, they must be first generated using [createMfaRecoveryCodes](\/docs\/references\/cloud\/client-web\/account#createMfaRecoveryCodes) method.", - "demo": "users\/update-mfa-recovery-codes.md" + "demo": "users\/update-mfa-recovery-codes.md", + "public": false } ], "auth": { @@ -35378,6 +35795,7 @@ "server" ], "packaging": false, + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35405,6 +35823,7 @@ ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", "demo": "users\/create-mfa-recovery-codes.md", + "public": false, "deprecated": { "since": "1.8.0", "replaceWith": "users.createMFARecoveryCodes" @@ -35431,7 +35850,8 @@ } ], "description": "Generate recovery codes used as backup for MFA flow for User ID. Recovery codes can be used as a MFA verification type in [createMfaChallenge](\/docs\/references\/cloud\/client-web\/account#createMfaChallenge) method by client SDK.", - "demo": "users\/create-mfa-recovery-codes.md" + "demo": "users\/create-mfa-recovery-codes.md", + "public": true } ], "auth": { @@ -35496,6 +35916,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35576,6 +35997,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35656,6 +36078,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35734,6 +36157,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35794,6 +36218,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35872,6 +36297,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35941,6 +36367,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -35996,6 +36423,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36053,6 +36481,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36123,6 +36552,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36202,6 +36632,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36284,6 +36715,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36396,6 +36828,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36465,6 +36898,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36556,6 +36990,7 @@ "console" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36626,6 +37061,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36709,6 +37145,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] @@ -36789,6 +37226,7 @@ "server" ], "packaging": false, + "public": true, "auth": { "Project": [], "Key": [] diff --git a/app/config/templates/site.php b/app/config/templates/site.php index c8bb019123..e330979597 100644 --- a/app/config/templates/site.php +++ b/app/config/templates/site.php @@ -1,5 +1,6 @@ 'crm-dashboard-react-admin', + 'name' => 'CRM dashboard with React Admin', + 'tagline' => 'A React-based admin dashboard template with CRM features.', + 'score' => 4, // 0 to 10 based on looks of screenshot (avoid 1,2,3,8,9,10 if possible) + 'useCases' => [UseCases::DASHBOARD], + 'screenshotDark' => $url . '/images/sites/templates/crm-dashboard-react-admin-dark.png', + 'screenshotLight' => $url . '/images/sites/templates/crm-dashboard-react-admin-light.png', + 'frameworks' => [ + getFramework('REACT', [ + 'providerRootDirectory' => './react/react-admin', + 'installCommand' => 'pnpm install', + 'buildCommand' => 'pnpm build && pnpm db-seed', + 'outputDirectory' => './dist', + ]), + ], + 'vcsProvider' => 'github', + 'providerRepositoryId' => 'templates-for-sites', + 'providerOwner' => 'appwrite', + 'providerVersion' => '0.7.*', + 'variables' => [ + [ + 'name' => 'VITE_APPWRITE_ENDPOINT', + 'description' => 'Endpoint of Appwrite server', + 'value' => '{apiEndpoint}', + 'placeholder' => '{apiEndpoint}', + 'required' => true, + 'type' => 'text' + ], + [ + 'name' => 'VITE_APPWRITE_PROJECT_ID', + 'description' => 'Your Appwrite project ID', + 'value' => '{projectId}', + 'placeholder' => '{projectId}', + 'required' => true, + 'type' => 'text' + ], + [ + 'name' => 'APPWRITE_API_KEY', + 'description' => 'Your Appwrite API key (for seeding only)', + 'value' => '', + 'placeholder' => 'a0b1...', + 'required' => true, + 'type' => 'password' + ], + [ + 'name' => 'VITE_APPWRITE_DATABASE_ID', + 'description' => 'Database ID (default: admin)', + 'value' => 'admin', + 'placeholder' => 'admin', + 'required' => false, + 'type' => 'text' + ], + [ + 'name' => 'VITE_APPWRITE_TABLE_REVIEWS', + 'description' => 'Table ID for reviews table', + 'value' => 'reviews', + 'placeholder' => 'reviews', + 'required' => false, + 'type' => 'text' + ], + [ + 'name' => 'VITE_APPWRITE_TABLE_INVOICES', + 'description' => 'Table ID for invoices table', + 'value' => 'invoices', + 'placeholder' => 'invoices', + 'required' => false, + 'type' => 'text' + ], + [ + 'name' => 'VITE_APPWRITE_TABLE_ORDERS', + 'description' => 'Table ID for orders table', + 'value' => 'orders', + 'placeholder' => 'orders', + 'required' => false, + 'type' => 'text' + ], + [ + 'name' => 'VITE_APPWRITE_TABLE_PRODUCTS', + 'description' => 'Table ID for products table', + 'value' => 'products', + 'placeholder' => 'products', + 'required' => false, + 'type' => 'text' + ], + [ + 'name' => 'VITE_APPWRITE_TABLE_CATEGORIES', + 'description' => 'Table ID for categories table', + 'value' => 'categories', + 'placeholder' => 'categories', + 'required' => false, + 'type' => 'text' + ], + [ + 'name' => 'VITE_APPWRITE_TABLE_CUSTOMERS', + 'description' => 'Table ID for customers table', + 'value' => 'customers', + 'placeholder' => 'customers', + 'required' => false, + 'type' => 'text' + ], + ] + ], + [ + 'key' => 'job-applications-formspree', + 'name' => 'Job applications form with Formspree', + 'tagline' => 'A simple form submission template using Formspree.', + 'score' => 4, // 0 to 10 based on looks of screenshot (avoid 1,2,3,8,9,10 if possible) + 'useCases' => [UseCases::FORMS], + 'screenshotDark' => $url . '/images/sites/templates/job-applications-formspree-dark.png', + 'screenshotLight' => $url . '/images/sites/templates/job-applications-formspree-light.png', + 'frameworks' => [ + getFramework('REACT', [ + 'providerRootDirectory' => './react/formspree', + ]), + ], + 'vcsProvider' => 'github', + 'providerRepositoryId' => 'templates-for-sites', + 'providerOwner' => 'appwrite', + 'providerVersion' => '0.7.*', + 'variables' => [ + [ + 'name' => 'VITE_FORMSPREE_FORM_ID', + 'description' => 'Your Formspree form ID', + 'value' => '', + 'placeholder' => 'xrgkpqld', + 'required' => true, + 'type' => 'text' + ], + ] + ] ]; diff --git a/app/config/variables.php b/app/config/variables.php index e1b707c553..408be8d54e 100644 --- a/app/config/variables.php +++ b/app/config/variables.php @@ -81,7 +81,7 @@ return [ ], [ 'name' => '_APP_DOMAIN', - 'description' => 'Your Appwrite domain address. When setting a public suffix domain, Appwrite will attempt to issue a valid SSL certificate automatically. When used with a dev domain, Appwrite will assign a self-signed SSL certificate. The default value is \'localhost\'.', + 'description' => 'Your Appwrite domain address. When setting a public suffix domain, Appwrite will attempt to issue a valid SSL certificate automatically. When used with a dev domain, Appwrite will assign a self-signed SSL certificate. The default value is \'localhost\'. Multiple domains can be separated by commas.', 'introduction' => '', 'default' => 'localhost', 'required' => true, diff --git a/app/controllers/api/account.php b/app/controllers/api/account.php index 6ffbe74046..ada4a98de9 100644 --- a/app/controllers/api/account.php +++ b/app/controllers/api/account.php @@ -64,11 +64,11 @@ use Utopia\Emails\Email; use Utopia\Locale\Locale; use Utopia\Storage\Validator\FileName; use Utopia\System\System; +use Utopia\Validator; use Utopia\Validator\ArrayList; use Utopia\Validator\Assoc; use Utopia\Validator\Boolean; use Utopia\Validator\Text; -use Utopia\Validator\URL; use Utopia\Validator\WhiteList; $oauthDefaultSuccess = '/console/auth/oauth2/success'; @@ -1283,13 +1283,14 @@ App::get('/v1/account/sessions/oauth2/:provider') ->label('abuse-limit', 50) ->label('abuse-key', 'ip:{ip}') ->param('provider', '', new WhiteList(\array_keys(Config::getParam('oAuthProviders')), true), 'OAuth2 Provider. Currently, supported providers are: ' . \implode(', ', \array_keys(\array_filter(Config::getParam('oAuthProviders'), fn ($node) => (!$node['mock'])))) . '.') - ->param('success', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project\'s 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.', true, ['platforms', 'devKey']) - ->param('failure', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project\'s 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.', true, ['platforms', 'devKey']) + ->param('success', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project\'s 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.', true, ['redirectValidator']) + ->param('failure', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project\'s 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.', true, ['redirectValidator']) ->param('scopes', [], new ArrayList(new Text(APP_LIMIT_ARRAY_ELEMENT_SIZE), APP_LIMIT_ARRAY_PARAMS_SIZE), 'A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' scopes are allowed, each ' . APP_LIMIT_ARRAY_ELEMENT_SIZE . ' characters long.', true) ->inject('request') ->inject('response') ->inject('project') - ->action(function (string $provider, string $success, string $failure, array $scopes, Request $request, Response $response, Document $project) use ($oauthDefaultSuccess, $oauthDefaultFailure) { + ->inject('platform') + ->action(function (string $provider, string $success, string $failure, array $scopes, Request $request, Response $response, Document $project, array $platform) use ($oauthDefaultSuccess, $oauthDefaultFailure) { $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; $port = $request->getPort(); $callbackBase = $protocol . '://' . $request->getHostname(); @@ -1324,7 +1325,7 @@ App::get('/v1/account/sessions/oauth2/:provider') throw new Exception(Exception::PROJECT_PROVIDER_UNSUPPORTED); } - $host = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $host = $platform['consoleHostname'] ?? ''; $redirectBase = $protocol . '://' . $host; if ($protocol === 'https' && $port !== '443') { $redirectBase .= ':' . $port; @@ -1443,7 +1444,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') ->inject('request') ->inject('response') ->inject('project') - ->inject('platforms') + ->inject('redirectValidator') ->inject('devKey') ->inject('user') ->inject('dbForProject') @@ -1452,7 +1453,7 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') ->inject('store') ->inject('proofForPassword') ->inject('proofForToken') - ->action(function (string $provider, string $code, string $state, string $error, string $error_description, Request $request, Response $response, Document $project, array $platforms, Document $devKey, User $user, Database $dbForProject, Reader $geodb, Event $queueForEvents, Store $store, ProofsPassword $proofForPassword, ProofsToken $proofForToken) use ($oauthDefaultSuccess) { + ->action(function (string $provider, string $code, string $state, string $error, string $error_description, Request $request, Response $response, Document $project, Validator $redirectValidator, Document $devKey, User $user, Database $dbForProject, Reader $geodb, Event $queueForEvents, Store $store, ProofsPassword $proofForPassword, ProofsToken $proofForToken) use ($oauthDefaultSuccess) { $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; $port = $request->getPort(); $callbackBase = $protocol . '://' . $request->getHostname(); @@ -1463,7 +1464,6 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') } $callback = $callbackBase . '/v1/account/sessions/oauth2/callback/' . $provider . '/' . $project->getId(); $defaultState = ['success' => $project->getAttribute('url', ''), 'failure' => '']; - $redirect = new Redirect($platforms); $appId = $project->getAttribute('oAuthProviders', [])[$provider . 'Appid'] ?? ''; $appSecret = $project->getAttribute('oAuthProviders', [])[$provider . 'Secret'] ?? '{}'; $providerEnabled = $project->getAttribute('oAuthProviders', [])[$provider . 'Enabled'] ?? false; @@ -1490,11 +1490,11 @@ App::get('/v1/account/sessions/oauth2/:provider/redirect') $state = $defaultState; } - if ($devKey->isEmpty() && !$redirect->isValid($state['success'])) { + if ($devKey->isEmpty() && !$redirectValidator->isValid($state['success'])) { throw new Exception(Exception::PROJECT_INVALID_SUCCESS_URL); } - if ($devKey->isEmpty() && !empty($state['failure']) && !$redirect->isValid($state['failure'])) { + if ($devKey->isEmpty() && !empty($state['failure']) && !$redirectValidator->isValid($state['failure'])) { throw new Exception(Exception::PROJECT_INVALID_FAILURE_URL); } $failure = []; @@ -1945,23 +1945,15 @@ App::get('/v1/account/tokens/oauth2/:provider') ->label('abuse-limit', 50) ->label('abuse-key', 'ip:{ip}') ->param('provider', '', new WhiteList(\array_keys(Config::getParam('oAuthProviders')), true), 'OAuth2 Provider. Currently, supported providers are: ' . \implode(', ', \array_keys(\array_filter(Config::getParam('oAuthProviders'), fn ($node) => (!$node['mock'])))) . '.') - ->param('success', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project\'s 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.', true, ['platforms', 'devKey']) - ->param('failure', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project\'s 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.', true, ['platforms', 'devKey']) + ->param('success', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project\'s 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.', true, ['redirectValidator']) + ->param('failure', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project\'s 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.', true, ['redirectValidator']) ->param('scopes', [], new ArrayList(new Text(APP_LIMIT_ARRAY_ELEMENT_SIZE), APP_LIMIT_ARRAY_PARAMS_SIZE), 'A list of custom OAuth2 scopes. Check each provider internal docs for a list of supported scopes. Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' scopes are allowed, each ' . APP_LIMIT_ARRAY_ELEMENT_SIZE . ' characters long.', true) ->inject('request') ->inject('response') ->inject('project') - ->action(function (string $provider, string $success, string $failure, array $scopes, Request $request, Response $response, Document $project) use ($oauthDefaultSuccess, $oauthDefaultFailure) { - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $port = $request->getPort(); - $callbackBase = $protocol . '://' . $request->getHostname(); - if ($protocol === 'https' && $port !== '443') { - $callbackBase .= ':' . $port; - } elseif ($protocol === 'http' && $port !== '80') { - $callbackBase .= ':' . $port; - } - - $callback = $callbackBase . '/v1/account/sessions/oauth2/callback/' . $provider . '/' . $project->getId(); + ->inject('platform') + ->action(function (string $provider, string $success, string $failure, array $scopes, Request $request, Response $response, Document $project, array $platform) use ($oauthDefaultSuccess, $oauthDefaultFailure) { + $callback = $platform['endpoint'] . '/account/sessions/oauth2/callback/' . $provider . '/' . $project->getId(); $providerEnabled = $project->getAttribute('oAuthProviders', [])[$provider . 'Enabled'] ?? false; if (!$providerEnabled) { @@ -1986,7 +1978,9 @@ App::get('/v1/account/tokens/oauth2/:provider') throw new Exception(Exception::PROJECT_PROVIDER_UNSUPPORTED); } - $host = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $host = $platform['consoleHostname'] ?? ''; + $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; + $port = $request->getPort(); $redirectBase = $protocol . '://' . $host; if ($protocol === 'https' && $port !== '443') { $redirectBase .= ':' . $port; @@ -2041,7 +2035,7 @@ App::post('/v1/account/tokens/magic-url') ->label('abuse-key', ['url:{url},email:{param-email}', 'url:{url},ip:{ip}']) ->param('userId', '', new CustomId(), 'Unique Id. Choose a custom ID or generate a random ID with `ID.unique()`. Valid chars are a-z, A-Z, 0-9, period, hyphen, and underscore. Can\'t start with a special char. Max length is 36 chars. If the email address has never been used, a new account is created using the provided userId. Otherwise, if the email address is already attached to an account, the user ID is ignored.') ->param('email', '', new EmailValidator(), 'User email.') - ->param('url', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect the user back to your app from the magic URL login. 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.', true, ['platforms', 'devKey']) + ->param('url', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect the user back to your app from the magic URL login. 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.', true, ['redirectValidator']) ->param('phrase', false, new Boolean(), 'Toggle for security phrase. If enabled, email will be send with a randomly generated phrase and the phrase will also be included in the response. Confirming phrases match increases the security of your authentication flow.', true) ->inject('request') ->inject('response') @@ -2052,7 +2046,8 @@ App::post('/v1/account/tokens/magic-url') ->inject('queueForEvents') ->inject('queueForMails') ->inject('proofForPassword') - ->action(function (string $userId, string $email, string $url, bool $phrase, Request $request, Response $response, User $user, Document $project, Database $dbForProject, Locale $locale, Event $queueForEvents, Mail $queueForMails, ProofsPassword $proofForPassword) { + ->inject('platform') + ->action(function (string $userId, string $email, string $url, bool $phrase, Request $request, Response $response, User $user, Document $project, Database $dbForProject, Locale $locale, Event $queueForEvents, Mail $queueForMails, ProofsPassword $proofForPassword, array $platform) { if (empty(System::getEnv('_APP_SMTP_HOST'))) { throw new Exception(Exception::GENERAL_SMTP_DISABLED, 'SMTP disabled'); } @@ -2158,7 +2153,7 @@ App::post('/v1/account/tokens/magic-url') if (empty($url)) { $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $host = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $host = $platform['consoleHostname'] ?? ''; $port = $request->getPort(); $callbackBase = $protocol . '://' . $host; if ($protocol === 'https' && $port !== '443') { @@ -2985,12 +2980,6 @@ App::get('/v1/account/logs') throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new EventAudit($dbForProject); $logs = $audit->getLogsByUser($user->getSequence(), $queries); @@ -3469,7 +3458,7 @@ App::post('/v1/account/recovery') ->label('abuse-limit', 10) ->label('abuse-key', ['url:{url},email:{param-email}', 'url:{url},ip:{ip}']) ->param('email', '', new EmailValidator(), 'User email.') - ->param('url', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect the user back to your app from the recovery 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']) + ->param('url', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect the user back to your app from the recovery 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, ['redirectValidator']) ->inject('request') ->inject('response') ->inject('user') @@ -3760,11 +3749,12 @@ App::post('/v1/account/verifications/email') since: '1.8.0', replaceWith: 'account.createEmailVerification' ), + public: false, ) ]) ->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 + ->param('url', '', fn ($redirectValidator) => $redirectValidator, '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, ['redirectValidator']) // TODO add built-in confirm page ->inject('request') ->inject('response') ->inject('project') @@ -3976,6 +3966,7 @@ App::put('/v1/account/verifications/email') since: '1.8.0', replaceWith: 'account.updateEmailVerification' ), + public: false, ) ]) ->label('abuse-limit', 10) diff --git a/app/controllers/api/console.php b/app/controllers/api/console.php index ec68f1050c..5bc8325794 100644 --- a/app/controllers/api/console.php +++ b/app/controllers/api/console.php @@ -43,9 +43,6 @@ App::get('/v1/console/variables') )) ->inject('response') ->action(function (Response $response) { - $validator = new Domain(System::getEnv('_APP_DOMAIN')); - $isDomainValid = !empty(System::getEnv('_APP_DOMAIN', '')) && $validator->isKnown() && !$validator->isTest(); - $validator = new Domain(System::getEnv('_APP_DOMAIN_TARGET_CNAME')); $isCNAMEValid = !empty(System::getEnv('_APP_DOMAIN_TARGET_CNAME', '')) && $validator->isKnown() && !$validator->isTest(); @@ -55,9 +52,7 @@ App::get('/v1/console/variables') $validator = new IP(IP::V6); $isAAAAValid = !empty(System::getEnv('_APP_DOMAIN_TARGET_AAAA', '')) && $validator->isValid(System::getEnv('_APP_DOMAIN_TARGET_AAAA')); - $isDomainEnabled = $isDomainValid && ( - $isAAAAValid || $isAValid || $isCNAMEValid - ); + $isDomainEnabled = $isAAAAValid || $isAValid || $isCNAMEValid; $isVcsEnabled = !empty(System::getEnv('_APP_VCS_GITHUB_APP_NAME', '')) && !empty(System::getEnv('_APP_VCS_GITHUB_PRIVATE_KEY', '')) diff --git a/app/controllers/api/messaging.php b/app/controllers/api/messaging.php index 58a0ffe42f..771dd0e6a5 100644 --- a/app/controllers/api/messaging.php +++ b/app/controllers/api/messaging.php @@ -339,6 +339,7 @@ App::post('/v1/messaging/providers/smtp') since: '1.8.0', replaceWith: 'messaging.createSMTPProvider', ), + public: false, ), new Method( namespace: 'messaging', @@ -872,6 +873,7 @@ App::post('/v1/messaging/providers/fcm') since: '1.8.0', replaceWith: 'messaging.createFCMProvider', ), + public: false, ), new Method( namespace: 'messaging', @@ -961,6 +963,7 @@ App::post('/v1/messaging/providers/apns') since: '1.8.0', replaceWith: 'messaging.createAPNSProvider', ), + public: false, ), new Method( namespace: 'messaging', @@ -1155,12 +1158,6 @@ App::get('/v1/messaging/providers/:providerId/logs') throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $resource = 'provider/' . $providerId; $logs = $audit->getLogsByResource($resource, $queries); @@ -1580,6 +1577,7 @@ App::patch('/v1/messaging/providers/smtp/:providerId') since: '1.8.0', replaceWith: 'messaging.updateSMTPProvider', ), + public: false, ), new Method( namespace: 'messaging', @@ -2171,6 +2169,7 @@ App::patch('/v1/messaging/providers/fcm/:providerId') since: '1.8.0', replaceWith: 'messaging.updateFCMProvider', ), + public: false, ), new Method( namespace: 'messaging', @@ -2266,6 +2265,7 @@ App::patch('/v1/messaging/providers/apns/:providerId') since: '1.8.0', replaceWith: 'messaging.updateAPNSProvider', ), + public: false, ), new Method( namespace: 'messaging', @@ -2562,12 +2562,6 @@ App::get('/v1/messaging/topics/:topicId/logs') throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $resource = 'topic/' . $topicId; $logs = $audit->getLogsByResource($resource, $queries); @@ -2985,12 +2979,6 @@ App::get('/v1/messaging/subscribers/:subscriberId/logs') throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $resource = 'subscriber/' . $subscriberId; $logs = $audit->getLogsByResource($resource, $queries); @@ -3343,6 +3331,7 @@ App::post('/v1/messaging/messages/sms') since: '1.8.0', replaceWith: 'messaging.createSMS', ), + public: false, ), new Method( namespace: 'messaging', @@ -3506,7 +3495,8 @@ App::post('/v1/messaging/messages/push') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, string $title, string $body, ?array $topics, ?array $users, ?array $targets, ?array $data, string $action, string $image, string $icon, string $sound, string $color, string $tag, int $badge, bool $draft, ?string $scheduledAt, bool $contentAvailable, bool $critical, string $priority, Event $queueForEvents, Database $dbForProject, Database $dbForPlatform, Document $project, Messaging $queueForMessaging, Response $response) { + ->inject('platform') + ->action(function (string $messageId, string $title, string $body, ?array $topics, ?array $users, ?array $targets, ?array $data, string $action, string $image, string $icon, string $sound, string $color, string $tag, int $badge, bool $draft, ?string $scheduledAt, bool $contentAvailable, bool $critical, string $priority, Event $queueForEvents, Database $dbForProject, Database $dbForPlatform, Document $project, Messaging $queueForMessaging, Response $response, array $platform) { $messageId = $messageId == 'unique()' ? ID::unique() : $messageId; @@ -3562,7 +3552,6 @@ App::post('/v1/messaging/messages/push') throw new Exception(Exception::STORAGE_FILE_TYPE_UNSUPPORTED); } - $host = System::getEnv('_APP_DOMAIN', 'localhost'); $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; $scheduleTime = $currentScheduledAt ?? $scheduledAt; @@ -3583,7 +3572,7 @@ App::post('/v1/messaging/messages/push') $image = [ 'bucketId' => $bucket->getId(), 'fileId' => $file->getId(), - 'url' => "{$protocol}://{$host}/v1/storage/buckets/{$bucket->getId()}/files/{$file->getId()}/push?project={$project->getId()}&jwt={$jwt}", + 'url' => "{$platform['endpoint']}/storage/buckets/{$bucket->getId()}/files/{$file->getId()}/push?project={$project->getId()}&jwt={$jwt}", ]; } @@ -3785,12 +3774,6 @@ App::get('/v1/messaging/messages/:messageId/logs') throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $resource = 'message/' . $messageId; $logs = $audit->getLogsByResource($resource, $queries); @@ -4192,6 +4175,7 @@ App::patch('/v1/messaging/messages/sms/:messageId') since: '1.8.0', replaceWith: 'messaging.updateSMS', ), + public: false, ), new Method( namespace: 'messaging', @@ -4394,7 +4378,8 @@ App::patch('/v1/messaging/messages/push/:messageId') ->inject('project') ->inject('queueForMessaging') ->inject('response') - ->action(function (string $messageId, ?array $topics, ?array $users, ?array $targets, ?string $title, ?string $body, ?array $data, ?string $action, ?string $image, ?string $icon, ?string $sound, ?string $color, ?string $tag, ?int $badge, ?bool $draft, ?string $scheduledAt, ?bool $contentAvailable, ?bool $critical, ?string $priority, Event $queueForEvents, Database $dbForProject, Database $dbForPlatform, Document $project, Messaging $queueForMessaging, Response $response) { + ->inject('platform') + ->action(function (string $messageId, ?array $topics, ?array $users, ?array $targets, ?string $title, ?string $body, ?array $data, ?string $action, ?string $image, ?string $icon, ?string $sound, ?string $color, ?string $tag, ?int $badge, ?bool $draft, ?string $scheduledAt, ?bool $contentAvailable, ?bool $critical, ?string $priority, Event $queueForEvents, Database $dbForProject, Database $dbForPlatform, Document $project, Messaging $queueForMessaging, Response $response, array $platform) { $message = $dbForProject->getDocument('messages', $messageId); if ($message->isEmpty()) { @@ -4562,9 +4547,6 @@ App::patch('/v1/messaging/messages/push/:messageId') throw new Exception(Exception::STORAGE_FILE_TYPE_UNSUPPORTED); } - $host = System::getEnv('_APP_DOMAIN', 'localhost'); - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $scheduleTime = $currentScheduledAt ?? $scheduledAt; if (!\is_null($scheduleTime)) { $expiry = (new \DateTime($scheduleTime))->add(new \DateInterval('P15D'))->format('U'); @@ -4583,7 +4565,7 @@ App::patch('/v1/messaging/messages/push/:messageId') $pushData['image'] = [ 'bucketId' => $bucket->getId(), 'fileId' => $file->getId(), - 'url' => "{$protocol}://{$host}/v1/storage/buckets/{$bucket->getId()}/files/{$file->getId()}/push?project={$project->getId()}&jwt={$jwt}" + 'url' => "{$platform['endpoint']}/storage/buckets/{$bucket->getId()}/files/{$file->getId()}/push?project={$project->getId()}&jwt={$jwt}", ]; } diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index b8761c2da9..37f7fdbc8b 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -563,6 +563,7 @@ App::patch('/v1/projects/:projectId/api') since: '1.8.0', replaceWith: 'projects.updateAPIStatus', ), + public: false, ), new Method( namespace: 'projects', @@ -620,6 +621,7 @@ App::patch('/v1/projects/:projectId/api/all') since: '1.8.0', replaceWith: 'projects.updateAPIStatusAll', ), + public: false, ), new Method( namespace: 'projects', @@ -2024,6 +2026,7 @@ App::patch('/v1/projects/:projectId/smtp') since: '1.8.0', replaceWith: 'projects.updateSMTP', ), + public: false, ), new Method( namespace: 'projects', @@ -2140,6 +2143,7 @@ App::post('/v1/projects/:projectId/smtp/tests') since: '1.8.0', replaceWith: 'projects.createSMTPTest', ), + public: false, ), new Method( namespace: 'projects', @@ -2234,6 +2238,7 @@ App::get('/v1/projects/:projectId/templates/sms/:type/:locale') since: '1.8.0', replaceWith: 'projects.getSMSTemplate', ), + public: false, ), new Method( namespace: 'projects', @@ -2400,6 +2405,7 @@ App::patch('/v1/projects/:projectId/templates/sms/:type/:locale') since: '1.8.0', replaceWith: 'projects.updateSMSTemplate', ), + public: false, ), new Method( namespace: 'projects', @@ -2524,6 +2530,7 @@ App::delete('/v1/projects/:projectId/templates/sms/:type/:locale') since: '1.8.0', replaceWith: 'projects.deleteSMSTemplate', ), + public: false, ), new Method( namespace: 'projects', diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 6628cec50a..5f45c38fed 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -58,7 +58,6 @@ use Utopia\Validator\ArrayList; use Utopia\Validator\Assoc; use Utopia\Validator\Boolean; use Utopia\Validator\Text; -use Utopia\Validator\URL; use Utopia\Validator\WhiteList; App::post('/v1/teams') @@ -486,7 +485,7 @@ App::post('/v1/teams/:teamId/memberships') } return new ArrayList(new Key(), APP_LIMIT_ARRAY_PARAMS_SIZE); }, 'Array of strings. Use this param to set the user roles in the team. A role can be any string. Learn more about [roles and permissions](https://appwrite.io/docs/permissions). Maximum of ' . APP_LIMIT_ARRAY_PARAMS_SIZE . ' roles are allowed, each 32 characters long.', false, ['project']) - ->param('url', '', fn ($platforms, $devKey) => $devKey->isEmpty() ? new Redirect($platforms) : new URL(), 'URL to redirect the user back to your app from the invitation email. This parameter is not required when an API key is supplied. 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.', true, ['platforms', 'devKey']) // TODO add our own built-in confirm page + ->param('url', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect the user back to your app from the invitation email. This parameter is not required when an API key is supplied. 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.', true, ['redirectValidator']) // TODO add our own built-in confirm page ->param('name', '', new Text(128), 'Name of the new team member. Max length: 128 chars.', true) ->inject('response') ->inject('project') @@ -1479,12 +1478,6 @@ App::get('/v1/teams/:teamId/logs') throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $resource = 'team/' . $team->getId(); $logs = $audit->getLogsByResource($resource, $queries); diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index ac8938273f..e49b0631d3 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -957,11 +957,7 @@ App::get('/v1/users/:userId/logs') } catch (QueryException $e) { throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); + $audit = new Audit($dbForProject); $logs = $audit->getLogsByUser($user->getSequence(), $queries); $output = []; @@ -1817,6 +1813,7 @@ App::patch('/v1/users/:userId/mfa') since: '1.8.0', replaceWith: 'users.updateMFA', ), + public: false, ), new Method( namespace: 'users', @@ -1876,6 +1873,7 @@ App::get('/v1/users/:userId/mfa/factors') since: '1.8.0', replaceWith: 'users.listMFAFactors', ), + public: false, ), new Method( namespace: 'users', @@ -1934,6 +1932,7 @@ App::get('/v1/users/:userId/mfa/recovery-codes') since: '1.8.0', replaceWith: 'users.getMFARecoveryCodes', ), + public: false, ), new Method( namespace: 'users', @@ -1998,6 +1997,7 @@ App::patch('/v1/users/:userId/mfa/recovery-codes') since: '1.8.0', replaceWith: 'users.createMFARecoveryCodes', ), + public: false, ), new Method( namespace: 'users', @@ -2069,6 +2069,7 @@ App::put('/v1/users/:userId/mfa/recovery-codes') since: '1.8.0', replaceWith: 'users.updateMFARecoveryCodes', ), + public: false, ), new Method( namespace: 'users', @@ -2081,7 +2082,8 @@ App::put('/v1/users/:userId/mfa/recovery-codes') code: Response::STATUS_CODE_OK, model: Response::MODEL_MFA_RECOVERY_CODES, ) - ] + ], + public: false, ) ]) ->param('userId', '', new UID(), 'User ID.') @@ -2140,6 +2142,7 @@ App::delete('/v1/users/:userId/mfa/authenticators/:type') since: '1.8.0', replaceWith: 'users.deleteMFAAuthenticator', ), + public: false, ), new Method( namespace: 'users', diff --git a/app/controllers/api/vcs.php b/app/controllers/api/vcs.php index c424e6884f..4249dbfd48 100644 --- a/app/controllers/api/vcs.php +++ b/app/controllers/api/vcs.php @@ -4,7 +4,6 @@ use Appwrite\Auth\OAuth2\Github as OAuth2Github; use Appwrite\Event\Build; use Appwrite\Event\Delete; use Appwrite\Extend\Exception; -use Appwrite\Network\Validator\Redirect; use Appwrite\SDK\AuthType; use Appwrite\SDK\ContentType; use Appwrite\SDK\Method; @@ -77,7 +76,7 @@ use Utopia\VCS\Exception\RepositoryNotFound; use function Swoole\Coroutine\batch; -$createGitDeployments = function (GitHub $github, string $providerInstallationId, array $repositories, string $providerBranch, string $providerBranchUrl, string $providerRepositoryName, string $providerRepositoryUrl, string $providerRepositoryOwner, string $providerCommitHash, string $providerCommitAuthor, string $providerCommitAuthorUrl, string $providerCommitMessage, string $providerCommitUrl, string $providerPullRequestId, bool $external, Database $dbForPlatform, Build $queueForBuilds, callable $getProjectDB, Request $request) { +$createGitDeployments = function (GitHub $github, string $providerInstallationId, array $repositories, string $providerBranch, string $providerBranchUrl, string $providerRepositoryName, string $providerRepositoryUrl, string $providerRepositoryOwner, string $providerCommitHash, string $providerCommitAuthor, string $providerCommitAuthorUrl, string $providerCommitMessage, string $providerCommitUrl, string $providerPullRequestId, bool $external, Database $dbForPlatform, Build $queueForBuilds, callable $getProjectDB, array $platform) { $errors = []; foreach ($repositories as $repository) { try { @@ -133,7 +132,7 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId $commentStatus = $isAuthorized ? 'waiting' : 'failed'; $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $hostname = $platform['consoleHostname'] ?? ''; $authorizeUrl = $protocol . '://' . $hostname . "/console/git/authorize-contributor?projectId={$projectId}&installationId={$installationId}&repositoryId={$repositoryId}&providerPullRequestId={$providerPullRequestId}"; @@ -175,7 +174,7 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId if ($lockAcquired) { // Wrap in try/finally to ensure lock file gets deleted try { - $comment = new Comment(); + $comment = new Comment($platform); $comment->parseComment($github->getComment($owner, $repositoryName, $latestCommentId)); $comment->addBuild($project, $resource, $resourceType, $commentStatus, $deploymentId, $action, ''); @@ -185,7 +184,7 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId } } } else { - $comment = new Comment(); + $comment = new Comment($platform); $comment->addBuild($project, $resource, $resourceType, $commentStatus, $deploymentId, $action, ''); $latestCommentId = \strval($github->createComment($owner, $repositoryName, $providerPullRequestId, $comment->generateComment())); @@ -246,7 +245,7 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId if ($lockAcquired) { // Wrap in try/finally to ensure lock file gets deleted try { - $comment = new Comment(); + $comment = new Comment($platform); $comment->parseComment($github->getComment($owner, $repositoryName, $latestCommentId)); $comment->addBuild($project, $resource, $resourceType, $commentStatus, $deploymentId, $action, ''); @@ -467,7 +466,7 @@ $createGitDeployments = function (GitHub $github, string $providerInstallationId $previewUrl = !empty($rule) ? ("{$protocol}://" . $rule->getAttribute('domain', '')) : ''; if (!empty($previewUrl)) { - $comment = new Comment(); + $comment = new Comment($platform); $comment->parseComment($github->getComment($owner, $repositoryName, $latestCommentId)); $comment->addBuild($project, $resource, $resourceType, $commentStatus, $deploymentId, $action, $previewUrl); $github->updateComment($owner, $repositoryName, $latestCommentId, $comment->generateComment()); @@ -542,12 +541,12 @@ App::get('/v1/vcs/github/authorize') type: MethodType::WEBAUTH, hide: true, )) - ->param('success', '', fn ($platforms) => new Redirect($platforms), 'URL to redirect back to console after a successful installation attempt.', true, ['platforms']) - ->param('failure', '', fn ($platforms) => new Redirect($platforms), 'URL to redirect back to console after a failed installation attempt.', true, ['platforms']) - ->inject('request') + ->param('success', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to console after a successful installation attempt.', true, ['redirectValidator']) + ->param('failure', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to console after a failed installation attempt.', true, ['redirectValidator']) ->inject('response') ->inject('project') - ->action(function (string $success, string $failure, Request $request, Response $response, Document $project) { + ->inject('platform') + ->action(function (string $success, string $failure, Response $response, Document $project, array $platform) { $state = \json_encode([ 'projectId' => $project->getId(), 'success' => $success, @@ -556,7 +555,7 @@ App::get('/v1/vcs/github/authorize') $appName = System::getEnv('_APP_VCS_GITHUB_APP_NAME'); $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $hostname = $platform['consoleHostname'] ?? ''; if (empty($appName)) { throw new Exception(Exception::GENERAL_SERVER_ERROR, 'GitHub App name is not configured. Please configure VCS (Version Control System) variables in .env file.'); @@ -585,10 +584,10 @@ App::get('/v1/vcs/github/callback') ->inject('gitHub') ->inject('user') ->inject('project') - ->inject('request') ->inject('response') ->inject('dbForPlatform') - ->action(function (string $providerInstallationId, string $setupAction, string $state, string $code, GitHub $github, Document $user, Document $project, Request $request, Response $response, Database $dbForPlatform) { + ->inject('platform') + ->action(function (string $providerInstallationId, string $setupAction, string $state, string $code, GitHub $github, Document $user, Document $project, Response $response, Database $dbForPlatform, array $platform) { if (empty($state)) { $error = 'Installation requests from organisation members for the Appwrite GitHub App are currently unsupported. To proceed with the installation, login to the Appwrite Console and install the GitHub App.'; throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $error); @@ -615,7 +614,7 @@ App::get('/v1/vcs/github/callback') $region = $project->getAttribute('region', 'default'); $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $hostname = $platform['consoleHostname'] ?? ''; $defaultState = [ 'success' => $protocol . '://' . $hostname . "/console/project-$region-$projectId/settings/git-installations", @@ -1479,8 +1478,9 @@ App::post('/v1/vcs/github/events') ->inject('dbForPlatform') ->inject('getProjectDB') ->inject('queueForBuilds') + ->inject('platform') ->action( - function (GitHub $github, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Build $queueForBuilds) use ($createGitDeployments) { + function (GitHub $github, Request $request, Response $response, Database $dbForPlatform, callable $getProjectDB, Build $queueForBuilds, array $platform) use ($createGitDeployments) { $payload = $request->getRawPayload(); $signatureRemote = $request->getHeader('x-hub-signature-256', ''); $signatureLocal = System::getEnv('_APP_VCS_GITHUB_WEBHOOK_SECRET', ''); @@ -1523,7 +1523,7 @@ App::post('/v1/vcs/github/events') // create new deployment only on push (not committed by us) and not when branch is created or deleted if ($providerCommitAuthorEmail !== APP_VCS_GITHUB_EMAIL && !$providerBranchCreated && !$providerBranchDeleted) { - $createGitDeployments($github, $providerInstallationId, $repositories, $providerBranch, $providerBranchUrl, $providerRepositoryName, $providerRepositoryUrl, $providerRepositoryOwner, $providerCommitHash, $providerCommitAuthorName, $providerCommitAuthorUrl, $providerCommitMessage, $providerCommitUrl, '', false, $dbForPlatform, $queueForBuilds, $getProjectDB, $request); + $createGitDeployments($github, $providerInstallationId, $repositories, $providerBranch, $providerBranchUrl, $providerRepositoryName, $providerRepositoryUrl, $providerRepositoryOwner, $providerCommitHash, $providerCommitAuthorName, $providerCommitAuthorUrl, $providerCommitMessage, $providerCommitUrl, '', false, $dbForPlatform, $queueForBuilds, $getProjectDB, $platform); } } elseif ($event == $github::EVENT_INSTALLATION) { if ($parsedPayload["action"] == "deleted") { @@ -1579,7 +1579,7 @@ App::post('/v1/vcs/github/events') Query::orderDesc('$createdAt') ])); - $createGitDeployments($github, $providerInstallationId, $repositories, $providerBranch, $providerBranchUrl, $providerRepositoryName, $providerRepositoryUrl, $providerRepositoryOwner, $providerCommitHash, $providerCommitAuthor, $providerCommitAuthorUrl, $providerCommitMessage, $providerCommitUrl, $providerPullRequestId, $external, $dbForPlatform, $queueForBuilds, $getProjectDB, $request); + $createGitDeployments($github, $providerInstallationId, $repositories, $providerBranch, $providerBranchUrl, $providerRepositoryName, $providerRepositoryUrl, $providerRepositoryOwner, $providerCommitHash, $providerCommitAuthor, $providerCommitAuthorUrl, $providerCommitMessage, $providerCommitUrl, $providerPullRequestId, $external, $dbForPlatform, $queueForBuilds, $getProjectDB, $platform); } elseif ($parsedPayload["action"] == "closed") { // Allowed external contributions cleanup @@ -1783,13 +1783,13 @@ App::patch('/v1/vcs/github/installations/:installationId/repositories/:repositor ->param('repositoryId', '', new Text(256), 'VCS Repository Id') ->param('providerPullRequestId', '', new Text(256), 'GitHub Pull Request Id') ->inject('gitHub') - ->inject('request') ->inject('response') ->inject('project') ->inject('dbForPlatform') ->inject('getProjectDB') ->inject('queueForBuilds') - ->action(function (string $installationId, string $repositoryId, string $providerPullRequestId, GitHub $github, Request $request, Response $response, Document $project, Database $dbForPlatform, callable $getProjectDB, Build $queueForBuilds) use ($createGitDeployments) { + ->inject('platform') + ->action(function (string $installationId, string $repositoryId, string $providerPullRequestId, GitHub $github, Response $response, Document $project, Database $dbForPlatform, callable $getProjectDB, Build $queueForBuilds, array $platform) use ($createGitDeployments) { $installation = $dbForPlatform->getDocument('installations', $installationId); if ($installation->isEmpty()) { @@ -1837,8 +1837,16 @@ App::patch('/v1/vcs/github/installations/:installationId/repositories/:repositor $providerBranch = \explode(':', $pullRequestResponse['head']['label'])[1] ?? ''; $providerCommitHash = $pullRequestResponse['head']['sha'] ?? ''; + $providerBranchUrl = $pullRequestResponse['head']['repo']['html_url'] ?? ''; + $providerRepositoryName = $pullRequestResponse['head']['repo']['name'] ?? ''; + $providerRepositoryUrl = $pullRequestResponse['head']['repo']['html_url'] ?? ''; + $providerRepositoryOwner = $pullRequestResponse['head']['repo']['owner']['login'] ?? ''; + $providerCommitAuthor = $pullRequestResponse['head']['user']['login'] ?? ''; + $providerCommitAuthorUrl = $pullRequestResponse['head']['user']['html_url'] ?? ''; + $providerCommitMessage = $pullRequestResponse['title'] ?? ''; + $providerCommitUrl = $pullRequestResponse['html_url'] ?? ''; - $createGitDeployments($github, $providerInstallationId, $repositories, $providerBranch, $providerCommitHash, $providerPullRequestId, true, $dbForPlatform, $queueForBuilds, $getProjectDB, $request); + $createGitDeployments($github, $providerInstallationId, $repositories, $providerBranch, $providerBranchUrl, $providerRepositoryName, $providerRepositoryUrl, $providerRepositoryOwner, $providerCommitHash, $providerCommitAuthor, $providerCommitAuthorUrl, $providerCommitMessage, $providerCommitUrl, $providerPullRequestId, true, $dbForPlatform, $queueForBuilds, $getProjectDB, $platform); $response->noContent(); }); diff --git a/app/controllers/general.php b/app/controllers/general.php index f034da6b24..30bb46ed9a 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -10,7 +10,7 @@ use Appwrite\Event\Event; use Appwrite\Event\Func; use Appwrite\Event\StatsUsage; use Appwrite\Extend\Exception as AppwriteException; -use Appwrite\Network\Validator\Origin; +use Appwrite\Network\Cors; use Appwrite\Platform\Appwrite; use Appwrite\SDK\Method; use Appwrite\SDK\Response as SDKResponse; @@ -39,6 +39,7 @@ use Utopia\Config\Config; use Utopia\Database\Database; use Utopia\Database\DateTime; use Utopia\Database\Document; +use Utopia\Database\Exception\Duplicate; use Utopia\Database\Helpers\ID; use Utopia\Database\Query; use Utopia\Database\Validator\Authorization; @@ -51,33 +52,36 @@ use Utopia\Logger\Log\User; use Utopia\Logger\Logger; use Utopia\Platform\Service; use Utopia\System\System; +use Utopia\Validator; use Utopia\Validator\Text; Config::setParam('domainVerification', false); Config::setParam('cookieDomain', 'localhost'); Config::setParam('cookieSamesite', Response::COOKIE_SAMESITE_NONE); -function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname, ?Key $apiKey) +function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, array $platform, string $previewHostname, ?Key $apiKey) { $host = $request->getHostname() ?? ''; if (!empty($previewHostname)) { $host = $previewHostname; } - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - if (System::getEnv('_APP_RULES_FORMAT') === 'md5') { - $rule = Authorization::skip(fn () => $dbForPlatform->getDocument('rules', md5($host))); - } else { - $rule = Authorization::skip( - fn () => $dbForPlatform->find('rules', [ - Query::equal('domain', [$host]), - Query::limit(1) - ]) - )[0] ?? new Document(); - } + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $rule = Authorization::skip(function () use ($dbForPlatform, $host, $isMd5) { + if ($isMd5) { + return $dbForPlatform->getDocument('rules', md5($host)); + } + + return $dbForPlatform->findOne('rules', [ + Query::equal('domain', [$host]), + ]) ?? new Document(); + }); $errorView = __DIR__ . '/../views/general/error.phtml'; - $url = (System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https') . '://' . System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; + $url = $protocol . '://' . $platform['consoleHostname']; + $platformHostnames = $platform['hostnames'] ?? []; if ($rule->isEmpty()) { $appDomainFunctionsFallback = System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''); @@ -98,10 +102,8 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw throw $exception; } - if (System::getEnv('_APP_OPTIONS_ROUTER_PROTECTION', 'disabled') === 'enabled') { - if ($host !== 'localhost' && $host !== APP_HOSTNAME_INTERNAL && $host !== System::getEnv('_APP_CONSOLE_DOMAIN', '')) { - throw new AppwriteException(AppwriteException::GENERAL_ACCESS_FORBIDDEN, 'Router protection does not allow accessing Appwrite over this domain. Please add it as custom domain to your project or disable _APP_OPTIONS_ROUTER_PROTECTION environment variable.', view: $errorView); - } + if (!in_array($host, $platformHostnames)) { + throw new AppwriteException(AppwriteException::GENERAL_ACCESS_FORBIDDEN, 'Router protection does not allow accessing Appwrite over this domain. Please add it as custom domain to your project or disable _APP_OPTIONS_ROUTER_PROTECTION environment variable.', view: $errorView); } // Act as API - no Proxy logic @@ -143,7 +145,7 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw if ($type === 'deployment') { if (System::getEnv('_APP_OPTIONS_ROUTER_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS - if ($request->getProtocol() !== 'https' && $request->getHostname() !== APP_HOSTNAME_INTERNAL) { + if ($request->getProtocol() !== 'https') { if ($request->getMethod() !== Request::METHOD_GET) { throw new AppwriteException(AppwriteException::GENERAL_PROTOCOL_UNSUPPORTED, 'Method unsupported over HTTP. Please use HTTPS instead.', view: $errorView); } @@ -268,7 +270,7 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw } if (!$authorized) { - $url = (System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https') . "://" . System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $url = $protocol . "://" . $platform['consoleHostname']; $response ->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0') ->addHeader('Pragma', 'no-cache') @@ -456,14 +458,10 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw $vars[$var->getAttribute('key')] = $var->getAttribute('value', ''); } - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_DOMAIN'); - $endpoint = $protocol . '://' . $hostname . "/v1"; - // Appwrite vars if ($type === 'function') { $vars = \array_merge($vars, [ - 'APPWRITE_FUNCTION_API_ENDPOINT' => $endpoint, + 'APPWRITE_FUNCTION_API_ENDPOINT' => $platform['endpoint'], 'APPWRITE_FUNCTION_ID' => $resource->getId(), 'APPWRITE_FUNCTION_NAME' => $resource->getAttribute('name'), 'APPWRITE_FUNCTION_DEPLOYMENT' => $deployment->getId(), @@ -475,7 +473,7 @@ function router(App $utopia, Database $dbForPlatform, callable $getProjectDB, Sw ]); } elseif ($type === 'site') { $vars = \array_merge($vars, [ - 'APPWRITE_SITE_API_ENDPOINT' => $endpoint, + 'APPWRITE_SITE_API_ENDPOINT' => $platform['endpoint'], 'APPWRITE_SITE_ID' => $resource->getId(), 'APPWRITE_SITE_NAME' => $resource->getAttribute('name'), 'APPWRITE_SITE_DEPLOYMENT' => $deployment->getId(), @@ -845,34 +843,31 @@ App::init() ->inject('request') ->inject('response') ->inject('log') - ->inject('console') ->inject('project') ->inject('dbForPlatform') ->inject('getProjectDB') ->inject('locale') ->inject('localeCodes') - ->inject('platforms') ->inject('geodb') ->inject('queueForStatsUsage') ->inject('queueForEvents') - ->inject('queueForCertificates') ->inject('queueForFunctions') ->inject('executor') + ->inject('platform') ->inject('isResourceBlocked') ->inject('previewHostname') ->inject('devKey') ->inject('apiKey') - ->inject('httpReferrer') - ->inject('httpReferrerSafe') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Document $console, Document $project, Database $dbForPlatform, callable $getProjectDB, Locale $locale, array $localeCodes, array $platforms, Reader $geodb, StatsUsage $queueForStatsUsage, Event $queueForEvents, Certificate $queueForCertificates, Func $queueForFunctions, Executor $executor, callable $isResourceBlocked, string $previewHostname, Document $devKey, ?Key $apiKey, string $httpReferrer, string $httpReferrerSafe) { + ->inject('cors') + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Document $project, Database $dbForPlatform, callable $getProjectDB, Locale $locale, array $localeCodes, Reader $geodb, StatsUsage $queueForStatsUsage, Event $queueForEvents, Func $queueForFunctions, Executor $executor, array $platform, callable $isResourceBlocked, string $previewHostname, Document $devKey, ?Key $apiKey, Cors $cors) { /* * Appwrite Router */ - $host = $request->getHostname() ?? ''; - $mainDomain = System::getEnv('_APP_DOMAIN', ''); + $hostname = $request->getHostname() ?? ''; + $platformHostnames = $platform['hostnames'] ?? []; // Only run Router when external domain - if ($host !== $mainDomain || !empty($previewHostname)) { - if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname, $apiKey)) { + if (!in_array($hostname, $platformHostnames) || !empty($previewHostname)) { + if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $apiKey)) { $utopia->getRoute()?->label('router', true); } } @@ -912,98 +907,12 @@ App::init() } } - $domain = $request->getHostname(); - $domains = Config::getParam('domains', []); - if (!array_key_exists($domain, $domains)) { - $domain = new Domain(!empty($domain) ? $domain : ''); - - if (empty($domain->get()) || !$domain->isKnown() || $domain->isTest()) { - $domains[$domain->get()] = false; - Console::warning($domain->get() . ' is not a publicly accessible domain. Skipping SSL certificate generation.'); - } elseif (str_starts_with($request->getURI(), '/.well-known/acme-challenge')) { - Console::warning('Skipping SSL certificates generation on ACME challenge.'); - } else { - Authorization::disable(); - - $envDomain = System::getEnv('_APP_DOMAIN', ''); - $mainDomain = null; - if (!empty($envDomain) && $envDomain !== 'localhost') { - $mainDomain = $envDomain; - } else { - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - if (System::getEnv('_APP_RULES_FORMAT') === 'md5') { - $domainDocument = $dbForPlatform->getDocument('rules', md5($envDomain)); - } else { - $domainDocument = $dbForPlatform->findOne('rules', [Query::orderAsc('$id')]); - } - $mainDomain = !$domainDocument->isEmpty() ? $domainDocument->getAttribute('domain') : $domain->get(); - } - - if ($mainDomain !== $domain->get()) { - Console::warning($domain->get() . ' is not a main domain. Skipping SSL certificate generation.'); - } else { - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - if (System::getEnv('_APP_RULES_FORMAT') === 'md5') { - $domainDocument = $dbForPlatform->getDocument('rules', md5($domain->get())); - } else { - $domainDocument = $dbForPlatform->findOne('rules', [ - Query::equal('domain', [$domain->get()]) - ]); - } - - $owner = ''; - $functionsDomainFallback = System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''); - $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); - $siteDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - if (!empty($functionsDomainFallback) && \str_ends_with($host, $functionsDomainFallback)) { - $functionsDomain = $functionsDomainFallback; - } - - if ( - (!empty($functionsDomain) && \str_ends_with($domain->get(), $functionsDomain)) || - (!empty($siteDomain) && \str_ends_with($domain->get(), $siteDomain)) - ) { - $owner = 'Appwrite'; - } - - if ($domainDocument->isEmpty()) { - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain->get()) : ID::unique(); - $domainDocument = new Document([ - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - '$id' => $ruleId, - 'domain' => $domain->get(), - 'type' => 'api', - 'status' => 'verifying', - 'projectId' => $console->getId(), - 'projectInternalId' => $console->getSequence(), - 'search' => implode(' ', [$ruleId, $domain->get()]), - 'owner' => $owner, - 'region' => $console->getAttribute('region') - ]); - - $domainDocument = $dbForPlatform->createDocument('rules', $domainDocument); - - Console::info('Issuing a TLS certificate for the main domain (' . $domain->get() . ') in a few seconds...'); - - $queueForCertificates - ->setDomain($domainDocument) - ->setSkipRenewCheck(true) - ->trigger(); - } - } - $domains[$domain->get()] = true; - - Authorization::reset(); // ensure authorization is re-enabled - } - Config::setParam('domains', $domains); - } - $localeParam = (string) $request->getParam('locale', $request->getHeader('x-appwrite-locale', '')); if (\in_array($localeParam, $localeCodes)) { $locale->setDefault($localeParam); } - $origin = \parse_url($request->getOrigin($httpReferrer), PHP_URL_HOST); + $origin = \parse_url($request->getOrigin($request->getReferer('')), PHP_URL_HOST); $selfDomain = new Domain($request->getHostname()); $endDomain = new Domain((string)$origin); Config::setParam( @@ -1032,8 +941,8 @@ App::init() $warnings = []; /* - * Response format - */ + * Response format + */ $responseFormat = $request->getHeader('x-appwrite-response-format', System::getEnv('_APP_SYSTEM_RESPONSE_FORMAT', '')); if ($responseFormat) { if (version_compare($responseFormat, '1.4.0', '<')) { @@ -1053,14 +962,13 @@ App::init() } } - /* - * Security Headers - * - * As recommended at: - * @see https://www.owasp.org/index.php/List_of_useful_HTTP_headers - */ + // Add Appwrite warning headers + if (!empty($warnings)) { + $response->addHeader('X-Appwrite-Warning', implode(';', $warnings)); + } + if (System::getEnv('_APP_OPTIONS_FORCE_HTTPS', 'disabled') === 'enabled') { // Force HTTPS - if ($request->getProtocol() !== 'https' && ($swooleRequest->header['host'] ?? '') !== 'localhost' && ($swooleRequest->header['host'] ?? '') !== APP_HOSTNAME_INTERNAL) { // localhost allowed for proxy, APP_HOSTNAME_INTERNAL allowed for migrations + if ($request->getProtocol() !== 'https' && ($swooleRequest->header['host'] ?? '') !== 'localhost') { // localhost allowed for proxy, APP_HOSTNAME_INTERNAL allowed for migrations if ($request->getMethod() !== Request::METHOD_GET) { throw new AppwriteException(AppwriteException::GENERAL_PROTOCOL_UNSUPPORTED, 'Method unsupported over HTTP. Please use HTTPS instead.'); } @@ -1068,49 +976,151 @@ App::init() return $response->redirect('https://' . $request->getHostname() . $request->getURI()); } } + }); - if ($request->getProtocol() === 'https') { - $response->addHeader('Strict-Transport-Security', 'max-age=' . (60 * 60 * 24 * 126)); // 126 days +/** + * Security headers + * + * @see https://www.owasp.org/index.php/List_of_useful_HTTP_headers + */ +App::init() + ->groups(['api', 'web']) + ->inject('request') + ->inject('response') + ->inject('cors') + ->inject('devKey') + ->inject('originValidator') + ->action(function (Request $request, Response $response, Cors $cors, Document $devKey, Validator $originValidator) { + // CORS headers + foreach ($cors->headers($request->getOrigin()) as $name => $value) { + $response->addHeader($name, $value); } + // Security headers $response ->addHeader('Server', 'Appwrite') - ->addHeader('X-Content-Type-Options', 'nosniff') - ->addHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE') - ->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Dev-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Forwarded-For, X-Forwarded-User-Agent') - ->addHeader('Access-Control-Expose-Headers', 'X-Appwrite-Session, X-Fallback-Cookies') - ->addHeader('Access-Control-Allow-Origin', $httpReferrerSafe) - ->addHeader('Access-Control-Allow-Credentials', 'true'); + ->addHeader('X-Content-Type-Options', 'nosniff'); - if (!$devKey->isEmpty()) { - $response->addHeader('Access-Control-Allow-Origin', '*'); + if ($request->getProtocol() === 'https') { + $maxAge = 60 * 60 * 24 * 126; // 126 days + $response->addHeader('Strict-Transport-Security', "max-age=$maxAge"); } - if (!empty($warnings)) { - $response->addHeader('X-Appwrite-Warning', implode(';', $warnings)); + // Application level CSRF protection + $origin = $request->getOrigin(); + if (empty($origin) || !$devKey->isEmpty() || !empty($request->getHeader('x-appwrite-key'))) { + return; } - - /* - * Validate Client Domain - Check to avoid CSRF attack - * Adding Appwrite API domains to allow XDOMAIN communication - * Skip this check for non-web platforms which are not required to send an origin header - */ - $origin = $request->getOrigin($request->getReferer('')); - $originValidator = new Origin($platforms); - - if ( - $devKey->isEmpty() - && !empty($origin) - && !$originValidator->isValid($origin) - && \in_array($request->getMethod(), [Request::METHOD_POST, Request::METHOD_PUT, Request::METHOD_PATCH, Request::METHOD_DELETE]) - && $route->getLabel('origin', false) !== '*' - && empty($request->getHeader('x-appwrite-key', '')) - && \parse_url($httpReferrerSafe, PHP_URL_HOST) === 'localhost' - ) { + $route = $request->getRoute(); + if ($route->getLabel('origin', false) === '*') { + return; + } + if (!$originValidator->isValid($origin)) { throw new AppwriteException(AppwriteException::GENERAL_UNKNOWN_ORIGIN, $originValidator->getDescription()); } }); +/** + * Automatic certificate generation + */ +App::init() + ->groups(['api', 'web']) + ->inject('request') + ->inject('console') + ->inject('dbForPlatform') + ->inject('queueForCertificates') + ->inject('platform') + ->action(function (Request $request, Document $console, Database $dbForPlatform, Certificate $queueForCertificates, array $platform) { + $hostname = $request->getHostname(); + $cache = Config::getParam('hostnames', []); + $platformHostnames = $platform['hostnames'] ?? []; + + // 1. Cache hit + if (array_key_exists($hostname, $cache)) { + return; + } + + // 2. Domain validation + $domain = new Domain(!empty($hostname) ? $hostname : ''); + if (empty($domain->get()) || !$domain->isKnown() || $domain->isTest()) { + $cache[$domain->get()] = false; + Config::setParam('hostnames', $cache); + Console::warning($domain->get() . ' is not a publicly accessible domain. Skipping SSL certificate generation.'); + return; + } + + if (str_starts_with($request->getURI(), '/.well-known/acme-challenge')) { + Console::warning('Skipping SSL certificates generation on ACME challenge.'); + return; + } + + // 3. Check if domain is a main domain + if (!in_array($domain->get(), $platformHostnames)) { + Console::warning($domain->get() . ' is not a main domain. Skipping SSL certificate generation.'); + return; + } + + // 4. Check/create rule (requires DB access) + Authorization::disable(); + try { + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $document = $isMd5 + ? $dbForPlatform->getDocument('rules', md5($domain->get())) + : $dbForPlatform->findOne('rules', [ + Query::equal('domain', [$domain->get()]), + ]); + + if (!$document->isEmpty()) { + return; + } + + // 5. Create new rule + $owner = ''; + $fallback = System::getEnv('_APP_DOMAIN_FUNCTIONS_FALLBACK', ''); + $funcDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); + $siteDomain = System::getEnv('_APP_DOMAIN_SITES', ''); + + if (!empty($fallback) && \str_ends_with($domain->get(), $fallback)) { + $funcDomain = $fallback; + } + + if ( + (!empty($funcDomain) && \str_ends_with($domain->get(), $funcDomain)) || + (!empty($siteDomain) && \str_ends_with($domain->get(), $siteDomain)) + ) { + $owner = 'Appwrite'; + } + + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); + $document = new Document([ + '$id' => $ruleId, + 'domain' => $domain->get(), + 'type' => 'api', + 'status' => 'verifying', + 'projectId' => $console->getId(), + 'projectInternalId' => $console->getSequence(), + 'search' => implode(' ', [$ruleId, $domain->get()]), + 'owner' => $owner, + 'region' => $console->getAttribute('region') + ]); + + $dbForPlatform->createDocument('rules', $document); + + Console::info('Issuing a TLS certificate for the main domain (' . $domain->get() . ') in a few seconds...'); + $queueForCertificates + ->setDomain($document) + ->setSkipRenewCheck(true) + ->trigger(); + } catch (Duplicate $e) { + Console::info('Certificate already exists'); + } finally { + $cache[$domain->get()] = true; + Config::setParam('hostnames', $cache); + Authorization::reset(); + } + }); + App::options() ->inject('utopia') ->inject('swooleRequest') @@ -1125,38 +1135,32 @@ App::options() ->inject('executor') ->inject('geodb') ->inject('isResourceBlocked') + ->inject('platform') ->inject('previewHostname') ->inject('project') ->inject('devKey') ->inject('apiKey') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname, Document $project, Document $devKey, ?Key $apiKey) { + ->inject('cors') + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, array $platform, string $previewHostname, Document $project, Document $devKey, ?Key $apiKey, Cors $cors) { /* * Appwrite Router */ - $host = $request->getHostname() ?? ''; - $mainDomain = System::getEnv('_APP_DOMAIN', ''); + $platformHostnames = $platform['hostnames'] ?? []; // Only run Router when external domain - if ($host !== $mainDomain || !empty($previewHostname)) { - if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname, $apiKey)) { + if (!in_array($request->getHostname(), $platformHostnames) || !empty($previewHostname)) { + if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $apiKey)) { $utopia->getRoute()?->label('router', true); } } - $origin = $request->getOrigin(); + foreach ($cors->headers($request->getOrigin()) as $name => $value) { + $response->addHeader($name, $value); + } $response ->addHeader('Server', 'Appwrite') - ->addHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE') - ->addHeader('Access-Control-Allow-Headers', 'Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Dev-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Appwrite-Session, X-Fallback-Cookies, X-Forwarded-For, X-Forwarded-User-Agent') - ->addHeader('Access-Control-Expose-Headers', 'X-Appwrite-Session, X-Fallback-Cookies') - ->addHeader('Access-Control-Allow-Origin', $origin) - ->addHeader('Access-Control-Allow-Credentials', 'true') ->noContent(); - if (!$devKey->isEmpty()) { - $response->addHeader('Access-Control-Allow-Origin', '*'); - } - /** OPTIONS requests in utopia do not execute shutdown handlers, as a result we need to track the OPTIONS requests explicitly * @see https://github.com/utopia-php/http/blob/0.33.16/src/App.php#L825-L855 */ @@ -1443,18 +1447,16 @@ App::get('/robots.txt') ->inject('executor') ->inject('geodb') ->inject('isResourceBlocked') + ->inject('platform') ->inject('previewHostname') ->inject('apiKey') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname, ?Key $apiKey) { - $host = $request->getHostname() ?? ''; - $consoleDomain = System::getEnv('_APP_CONSOLE_DOMAIN', ''); - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - - if (($host === $consoleDomain || $host === $mainDomain || $host === 'localhost') && empty($previewHostname)) { + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, array $platform, string $previewHostname, ?Key $apiKey) { + $platformHostnames = $platform['hostnames'] ?? []; + if (in_array($request->getHostname(), $platformHostnames) || !empty($previewHostname)) { $template = new View(__DIR__ . '/../views/general/robots.phtml'); $response->text($template->render(false)); } else { - if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname, $apiKey)) { + if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $apiKey)) { $utopia->getRoute()?->label('router', true); } } @@ -1477,18 +1479,16 @@ App::get('/humans.txt') ->inject('executor') ->inject('geodb') ->inject('isResourceBlocked') + ->inject('platform') ->inject('previewHostname') ->inject('apiKey') - ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, string $previewHostname, ?Key $apiKey) { - $host = $request->getHostname() ?? ''; - $consoleDomain = System::getEnv('_APP_CONSOLE_DOMAIN', ''); - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - - if (($host === $consoleDomain || $host === $mainDomain || $host === 'localhost') && empty($previewHostname)) { + ->action(function (App $utopia, SwooleRequest $swooleRequest, Request $request, Response $response, Log $log, Database $dbForPlatform, callable $getProjectDB, Event $queueForEvents, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Executor $executor, Reader $geodb, callable $isResourceBlocked, array $platform, string $previewHostname, ?Key $apiKey) { + $platformHostnames = $platform['hostnames'] ?? []; + if (in_array($request->getHostname(), $platformHostnames) || !empty($previewHostname)) { $template = new View(__DIR__ . '/../views/general/humans.phtml'); $response->text($template->render(false)); } else { - if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $previewHostname, $apiKey)) { + if (router($utopia, $dbForPlatform, $getProjectDB, $swooleRequest, $request, $response, $log, $queueForEvents, $queueForStatsUsage, $queueForFunctions, $executor, $geodb, $isResourceBlocked, $platform, $previewHostname, $apiKey)) { $utopia->getRoute()?->label('router', true); } } diff --git a/app/controllers/mock.php b/app/controllers/mock.php index 40ddae8f30..d78bb61481 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -15,7 +15,6 @@ use Utopia\Database\Helpers\Role; use Utopia\Database\Validator\UID; use Utopia\Locale\Locale; use Utopia\System\System; -use Utopia\Validator\Host; use Utopia\Validator\Text; use Utopia\Validator\WhiteList; use Utopia\VCS\Adapter\Git\GitHub; @@ -27,7 +26,7 @@ App::get('/v1/mock/tests/general/oauth2') ->label('docs', false) ->label('mock', true) ->param('client_id', '', new Text(100), 'OAuth2 Client ID.') - ->param('redirect_uri', '', new Host(['localhost']), 'OAuth2 Redirect URI.') // Important to deny an open redirect attack + ->param('redirect_uri', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to your app after a failed login attempt. Only URLs from hostnames in your project\'s 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.', true, ['redirectValidator']) // Important to deny an open redirect attack ->param('scope', '', new Text(100), 'OAuth2 scope list.') ->param('state', '', new Text(1024), 'OAuth2 state.') ->inject('response') @@ -64,7 +63,7 @@ App::get('/v1/mock/tests/general/oauth2/token') ->param('client_id', '', new Text(100), 'OAuth2 Client ID.') ->param('client_secret', '', new Text(100), 'OAuth2 scope list.') ->param('grant_type', 'authorization_code', new WhiteList(['refresh_token', 'authorization_code']), 'OAuth2 Grant Type.', true) - ->param('redirect_uri', '', new Host(['localhost']), 'OAuth2 Redirect URI.', true) + ->param('redirect_uri', '', fn ($redirectValidator) => $redirectValidator, 'URL to redirect back to your app after a successful login attempt. Only URLs from hostnames in your project\'s 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.', true, ['redirectValidator']) ->param('code', '', new Text(100), 'OAuth2 state.', true) ->param('refresh_token', '', new Text(100), 'OAuth2 refresh token.', true) ->inject('response') diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index 16d44481b6..8467468ed6 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -8,7 +8,9 @@ use Appwrite\Event\Database as EventDatabase; use Appwrite\Event\Delete; use Appwrite\Event\Event; use Appwrite\Event\Func; +use Appwrite\Event\Mail; use Appwrite\Event\Messaging; +use Appwrite\Event\Migration; use Appwrite\Event\Realtime; use Appwrite\Event\StatsUsage; use Appwrite\Event\Webhook; @@ -495,6 +497,9 @@ App::init() ->inject('queueForDatabase') ->inject('queueForBuilds') ->inject('queueForStatsUsage') + ->inject('queueForFunctions') + ->inject('queueForMails') + ->inject('queueForMigrations') ->inject('dbForProject') ->inject('timelimit') ->inject('resourceToken') @@ -503,7 +508,8 @@ App::init() ->inject('plan') ->inject('devKey') ->inject('telemetry') - ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Publisher $publisher, Publisher $publisherFunctions, Publisher $publisherWebhooks, Event $queueForEvents, Messaging $queueForMessaging, Audit $queueForAudits, Delete $queueForDeletes, EventDatabase $queueForDatabase, Build $queueForBuilds, StatsUsage $queueForStatsUsage, Database $dbForProject, callable $timelimit, Document $resourceToken, string $mode, ?Key $apiKey, array $plan, Document $devKey, Telemetry $telemetry) use ($usageDatabaseListener, $eventDatabaseListener) { + ->inject('platform') + ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Publisher $publisher, Publisher $publisherFunctions, Publisher $publisherWebhooks, Event $queueForEvents, Messaging $queueForMessaging, Audit $queueForAudits, Delete $queueForDeletes, EventDatabase $queueForDatabase, Build $queueForBuilds, StatsUsage $queueForStatsUsage, Func $queueForFunctions, Mail $queueForMails, Migration $queueForMigrations, Database $dbForProject, callable $timelimit, Document $resourceToken, string $mode, ?Key $apiKey, array $plan, Document $devKey, Telemetry $telemetry, array $platform) use ($usageDatabaseListener, $eventDatabaseListener) { $route = $utopia->getRoute(); @@ -577,6 +583,10 @@ App::init() } } + /** + * TODO: (@loks0n) + * Avoid mutating the message across file boundaries - it's difficult to reason about at scale. + */ /* * Background Jobs */ @@ -607,10 +617,18 @@ App::init() } } + /* Auto-set projects */ $queueForDeletes->setProject($project); $queueForDatabase->setProject($project); - $queueForBuilds->setProject($project); $queueForMessaging->setProject($project); + $queueForFunctions->setProject($project); + $queueForBuilds->setProject($project); + + /* Auto-set platforms */ + $queueForFunctions->setPlatform($platform); + $queueForBuilds->setPlatform($platform); + $queueForMails->setPlatform($platform); + $queueForMigrations->setPlatform($platform); // Clone the queues, to prevent events triggered by the database listener // from overwriting the events that are supposed to be triggered in the shutdown hook. diff --git a/app/controllers/web/home.php b/app/controllers/web/home.php index 27b2614c37..63dbed8d32 100644 --- a/app/controllers/web/home.php +++ b/app/controllers/web/home.php @@ -10,7 +10,7 @@ App::get('/versions') ->label('scope', 'public') ->inject('response') ->action(function (Response $response) { - $platforms = Config::getParam('platforms'); + $platforms = Config::getParam('sdks'); $versions = [ 'server' => APP_VERSION_STABLE, diff --git a/app/init/configs.php b/app/init/configs.php index 6fa3b576d5..19be7755dd 100644 --- a/app/init/configs.php +++ b/app/init/configs.php @@ -15,7 +15,8 @@ Config::load('auth', __DIR__ . '/../config/auth.php', $configAdapter); Config::load('apis', __DIR__ . '/../config/apis.php', $configAdapter); // List of APIs Config::load('errors', __DIR__ . '/../config/errors.php', $configAdapter); Config::load('oAuthProviders', __DIR__ . '/../config/oAuthProviders.php', $configAdapter); -Config::load('platforms', __DIR__ . '/../config/platforms.php', $configAdapter); +Config::load('sdks', __DIR__ . '/../config/sdks.php', $configAdapter); +Config::load('platform', __DIR__ . '/../config/platform.php', $configAdapter); Config::load('console', __DIR__ . '/../config/console.php', $configAdapter); Config::load('collections', __DIR__ . '/../config/collections.php', $configAdapter); Config::load('frameworks', __DIR__ . '/../config/frameworks.php', $configAdapter); diff --git a/app/init/constants.php b/app/init/constants.php index ea5c0fb2c5..9c771edb0a 100644 --- a/app/init/constants.php +++ b/app/init/constants.php @@ -4,12 +4,17 @@ use Appwrite\Platform\Modules\Compute\Specification; const APP_NAME = 'Appwrite'; const APP_DOMAIN = 'appwrite.io'; + +// Email const APP_EMAIL_TEAM = 'team@localhost.test'; // Default email address const APP_EMAIL_SECURITY = ''; // Default security email address const APP_EMAIL_LOGO_URL = 'https://cloud.appwrite.io/images/mails/logo.png'; const APP_EMAIL_ACCENT_COLOR = '#fd366e'; const APP_EMAIL_TERMS_URL = 'https://appwrite.io/terms'; const APP_EMAIL_PRIVACY_URL = 'https://appwrite.io/privacy'; +const APP_EMAIL_PLATFORM_NAME = 'Appwrite'; +const APP_EMAIL_FOOTER_IMAGE_URL = 'https://appwrite.io/email/footer.png'; + const APP_USERAGENT = APP_NAME . '-Server v%s. Please report abuse at %s'; const APP_MODE_DEFAULT = 'default'; const APP_MODE_ADMIN = 'admin'; @@ -81,7 +86,6 @@ const APP_SOCIAL_DISCORD_CHANNEL = '564160730845151244'; const APP_SOCIAL_DEV = 'https://dev.to/appwrite'; const APP_SOCIAL_STACKSHARE = 'https://stackshare.io/appwrite'; const APP_SOCIAL_YOUTUBE = 'https://www.youtube.com/c/appwrite?sub_confirmation=1'; -const APP_HOSTNAME_INTERNAL = 'appwrite'; const APP_COMPUTE_CPUS_DEFAULT = 0.5; const APP_COMPUTE_MEMORY_DEFAULT = 512; const APP_COMPUTE_SPECIFICATION_DEFAULT = Specification::S_1VCPU_512MB; diff --git a/app/init/resources.php b/app/init/resources.php index 98162d3a2b..2a2852d4e9 100644 --- a/app/init/resources.php +++ b/app/init/resources.php @@ -20,8 +20,10 @@ use Appwrite\Event\StatsUsage; use Appwrite\Event\Webhook; use Appwrite\Extend\Exception; use Appwrite\GraphQL\Schema; +use Appwrite\Network\Cors; use Appwrite\Network\Platform; use Appwrite\Network\Validator\Origin; +use Appwrite\Network\Validator\Redirect; use Appwrite\Utopia\Database\Documents\User; use Appwrite\Utopia\Request; use Appwrite\Utopia\Response; @@ -43,7 +45,6 @@ use Utopia\Database\Adapter\Pool as DatabasePool; use Utopia\Database\Database; use Utopia\Database\DateTime as DatabaseDateTime; use Utopia\Database\Document; -use Utopia\Database\Helpers\ID; use Utopia\Database\Query; use Utopia\Database\Validator\Authorization; use Utopia\DSN\DSN; @@ -64,7 +65,7 @@ use Utopia\Storage\Storage; use Utopia\System\System; use Utopia\Telemetry\Adapter as Telemetry; use Utopia\Telemetry\Adapter\None as NoTelemetry; -use Utopia\Validator\Hostname; +use Utopia\Validator\URL; use Utopia\Validator\WhiteList; use Utopia\VCS\Adapter\Git\GitHub as VcsGitHub; @@ -159,79 +160,164 @@ 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, Database $dbForPlatform) { - $console->setAttribute('platforms', [ // Always allow current host - '$collection' => ID::custom('platforms'), - 'name' => 'Current Host', - 'type' => Platform::TYPE_WEB, - 'hostname' => $request->getHostname(), - ], Document::SET_TYPE_APPEND); - $hostnames = explode(',', System::getEnv('_APP_CONSOLE_HOSTNAMES', '')); - $validator = new Hostname(); - foreach ($hostnames as $hostname) { - $hostname = trim($hostname); - if (!$validator->isValid($hostname)) { - continue; - } - $console->setAttribute('platforms', [ - '$collection' => ID::custom('platforms'), - 'type' => Platform::TYPE_WEB, - 'name' => $hostname, - 'hostname' => $hostname, - ], Document::SET_TYPE_APPEND); +/** + * Platform configuration + */ +App::setResource('platform', function (Request $request) { + $platform = Config::getParam('platform', []); + $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; + + $port = ''; + if ($request->getPort() === '443' && $protocol !== 'https') { + $port = ':443'; } + if ($request->getPort() === '80' && $protocol !== 'http') { + $port = ':80'; + } + $platform['endpoint'] = "$protocol://{$platform['apiHostname']}{$port}/v1"; - // Add `exp` and `appwrite-callback-{projectId}` schemes + return $platform; +}, ['request']); + +/** + * List of allowed request hostnames for the request. + */ +App::setResource('allowedHostnames', function (array $platform, Document $project, Document $rule, Document $devKey, Request $request) { + $allowed = [...($platform['hostnames'] ?? [])]; + + /* Add platform configured hostnames */ if (!$project->isEmpty() && $project->getId() !== 'console') { - $project->setAttribute('platforms', [ - '$collection' => ID::custom('platforms'), - 'type' => Platform::TYPE_SCHEME, - 'name' => 'Expo', - 'key' => 'exp', - ], Document::SET_TYPE_APPEND); - $project->setAttribute('platforms', [ - '$collection' => ID::custom('platforms'), - 'type' => Platform::TYPE_SCHEME, - 'name' => 'Appwrite Callback', - 'key' => 'appwrite-callback-' . $project->getId(), - ], Document::SET_TYPE_APPEND); + $platforms = $project->getAttribute('platforms', []); + $hostnames = Platform::getHostnames($platforms); + $allowed = [...$allowed, ...$hostnames]; } - $origin = \parse_url($request->getOrigin(), PHP_URL_HOST); - - if (empty($origin)) { - $origin = \parse_url($request->getReferer(), PHP_URL_HOST); + /* Add the request hostname if a dev key is found */ + if (!$devKey->isEmpty()) { + $allowed[] = $request->getHostname(); } - // 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(); + /* Allow the request origin if a dev key or rule is found */ + $originHostname = parse_url($request->getOrigin(), PHP_URL_HOST); + if ((!$rule->isEmpty() || !$devKey->isEmpty()) && !empty($originHostname)) { + $allowed[] = $originHostname; + } + + return array_unique($allowed); +}, ['platform', 'project', 'rule', 'devKey', 'request']); + +/** + * List of allowed request schemes for the request. + */ +App::setResource('allowedSchemes', function (Document $project) { + $allowed = []; + + if (!$project->isEmpty() && $project->getId() !== 'console') { + /* Add hardcoded schemes */ + $allowed[] = 'exp'; + $allowed[] = 'appwrite-callback-' . $project->getId(); + + /* Add platform configured schemes */ + $platforms = $project->getAttribute('platforms', []); + $schemes = Platform::getSchemes($platforms); + $allowed = [...$allowed, ...$schemes]; + } + + return array_unique($allowed); +}, ['project']); + +/** + * Rule associated with a request origin. + */ +App::setResource('rule', function (Request $request, Database $dbForPlatform, Document $project) { + $domain = \parse_url($request->getOrigin(), PHP_URL_HOST); + if (empty($domain)) { + return new Document(); + } + + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $rule = Authorization::skip(function () use ($dbForPlatform, $domain, $isMd5) { + if ($isMd5) { + return $dbForPlatform->getDocument('rules', md5($domain)); } - 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 $dbForPlatform->findOne('rules', [ + Query::equal('domain', [$domain]), + ]) ?? new Document(); + }); + + if ($rule->getAttribute('projectInternalId') !== $project->getSequence()) { + return new Document(); } - return [ - ...$console->getAttribute('platforms', []), - ...$project->getAttribute('platforms', []), - ]; -}, ['request', 'console', 'project', 'dbForPlatform']); + return $rule; +}, ['request', 'dbForPlatform', 'project']); + +/** + * CORS service + */ +App::setResource('cors', fn (array $allowedHostnames) => new Cors( + $allowedHostnames, + allowedMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'], + allowedHeaders: [ + 'Accept', + 'Origin', + 'Cookie', + 'Set-Cookie', + // Content + 'Content-Type', + 'Content-Range', + // Appwrite + 'X-Appwrite-Project', + 'X-Appwrite-Key', + 'X-Appwrite-Dev-Key', + 'X-Appwrite-Locale', + 'X-Appwrite-Mode', + 'X-Appwrite-JWT', + 'X-Appwrite-Response-Format', + 'X-Appwrite-Timeout', + 'X-Appwrite-ID', + 'X-Appwrite-Timestamp', + 'X-Appwrite-Session', + // SDK generator + 'X-SDK-Version', + 'X-SDK-Name', + 'X-SDK-Language', + 'X-SDK-Platform', + 'X-SDK-GraphQL', + // Caching + 'Range', + 'Cache-Control', + 'Expires', + 'Pragma', + // Server to server + 'X-Fallback-Cookies', + 'X-Requested-With', + 'X-Forwarded-For', + 'X-Forwarded-User-Agent', + ], + allowCredentials: true, + exposedHeaders: [ + 'X-Appwrite-Session', + 'X-Fallback-Cookies', + ], +), ['allowedHostnames']); + +App::setResource('originValidator', function (Document $devKey, array $allowedHostnames, array $allowedSchemes) { + if (!$devKey->isEmpty()) { + return new URL(); + } + return new Origin($allowedHostnames, $allowedSchemes); +}, ['devKey', 'allowedHostnames', 'allowedSchemes']); + +App::setResource('redirectValidator', function (Document $devKey, array $allowedHostnames, array $allowedSchemes) { + if (!$devKey->isEmpty()) { + return new URL(); + } + return new Redirect($allowedHostnames, $allowedSchemes); +}, ['devKey', 'allowedHostnames', 'allowedSchemes']); App::setResource('user', function (string $mode, Document $project, Document $console, Request $request, Response $response, Database $dbForProject, Database $dbForPlatform, Store $store, Token $proofForToken) { /** @@ -738,7 +824,7 @@ App::setResource('passwordsDictionary', function ($register) { App::setResource('servers', function () { - $platforms = Config::getParam('platforms'); + $platforms = Config::getParam('sdks'); $server = $platforms[APP_PLATFORM_SERVER]; $languages = array_map(function ($language) { @@ -839,24 +925,6 @@ App::setResource('schema', function ($utopia, $dbForProject) { ); }, ['utopia', 'dbForProject']); -App::setResource('contributors', function () { - $path = 'app/config/contributors.json'; - $list = (file_exists($path)) ? json_decode(file_get_contents($path), true) : []; - return $list; -}); - -App::setResource('employees', function () { - $path = 'app/config/employees.json'; - $list = (file_exists($path)) ? json_decode(file_get_contents($path), true) : []; - return $list; -}); - -App::setResource('heroes', function () { - $path = 'app/config/heroes.json'; - $list = (file_exists($path)) ? json_decode(file_get_contents($path), true) : []; - return $list; -}); - App::setResource('gitHub', function (Cache $cache) { return new VcsGitHub($cache); }, ['cache']); @@ -923,6 +991,7 @@ App::setResource('devKey', function (Request $request, Document $project, array $dbForPlatform->purgeCachedDocument('projects', $project->getId()); } } + return $key; }, ['request', 'project', 'servers', 'dbForPlatform']); @@ -1063,37 +1132,6 @@ App::setResource('resourceToken', function ($project, $dbForProject, $request) { return new Document([]); }, ['project', 'dbForProject', 'request']); -App::setResource('httpReferrer', function (Request $request): string { - $referrer = $request->getReferer(); - return $referrer; -}, ['request']); - -App::setResource('httpReferrerSafe', function (Request $request, string $httpReferrer, array $platforms, Database $dbForPlatform, Document $project, App $utopia): string { - $origin = \parse_url($request->getOrigin($httpReferrer), PHP_URL_HOST); - $protocol = \parse_url($request->getOrigin($httpReferrer), PHP_URL_SCHEME); - $port = \parse_url($request->getOrigin($httpReferrer), PHP_URL_PORT); - $referrer = (!empty($protocol) ? $protocol : $request->getProtocol()) . '://' . $origin . (!empty($port) ? ':' . $port : ''); - - // Safe if route is publicly accessible - $route = $utopia->getRoute(); - if ($route->getLabel('origin', false)) { - return $referrer; - } - - // Safe if added as web platform - $originValidator = new Origin($platforms); - if ($originValidator->isValid($request->getOrigin($httpReferrer))) { - return $referrer; - } - - // Unsafe; Localhost is always safe for ease of local development - $origin = 'localhost'; - $protocol = \parse_url($request->getOrigin($httpReferrer), PHP_URL_SCHEME); - $port = \parse_url($request->getOrigin($httpReferrer), PHP_URL_PORT); - $referrer = (!empty($protocol) ? $protocol : $request->getProtocol()) . '://' . $origin . (!empty($port) ? ':' . $port : ''); - return $referrer; -}, ['request', 'httpReferrer', 'platforms', 'dbForPlatform', 'project', 'utopia']); - App::setResource('transactionState', function (Database $dbForProject) { return new TransactionState($dbForProject); }, ['dbForProject']); diff --git a/app/realtime.php b/app/realtime.php index 734dcd70bb..fab0ce7561 100644 --- a/app/realtime.php +++ b/app/realtime.php @@ -543,7 +543,6 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, } $timelimit = $app->getResource('timelimit'); - $platforms = $app->getResource('platforms'); $user = $app->getResource('user'); /** @var User $user */ /* @@ -568,7 +567,7 @@ $server->onOpen(function (int $connection, SwooleRequest $request) use ($server, * Skip this check for non-web platforms which are not required to send an origin header. */ $origin = $request->getOrigin(); - $originValidator = new Origin($platforms); + $originValidator = $app->getResource('originValidator'); if (!empty($origin) && !$originValidator->isValid($origin) && $project->getId() !== 'console') { throw new Exception(Exception::REALTIME_POLICY_VIOLATION, $originValidator->getDescription()); diff --git a/app/views/general/error.phtml b/app/views/general/error.phtml index 9e74be67e2..e250e6114f 100644 --- a/app/views/general/error.phtml +++ b/app/views/general/error.phtml @@ -1,4 +1,5 @@ getParam('development', false); @@ -15,7 +16,8 @@ $labelClass = ''; $buttons = []; $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; -$hostname = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); +$platform = Config::getParam('platform', []); +$hostname = $platform['consoleHostname'] ?? ''; // TODO: remove this later if (System::getEnv('_APP_ENV') === 'development') { $hostname = 'localhost'; @@ -537,4 +539,4 @@ switch ($type) { - \ No newline at end of file + diff --git a/docker-compose.yml b/docker-compose.yml index 6cf8070691..f246dbb456 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,9 +38,15 @@ services: depends_on: - appwrite networks: - - gateway - - appwrite - - runtimes + appwrite: + aliases: + - appwrite.test + gateway: + aliases: + - appwrite.test + runtimes: + aliases: + - appwrite.test appwrite: container_name: appwrite @@ -1084,13 +1090,26 @@ services: # GraphQl Explorer - A nice UI for exploring GraphQL API maildev: # used mainly for dev tests - image: appwrite/mailcatcher:1.0.0 + image: appwrite/mailcatcher:1.1.1 container_name: appwrite-mailcatcher <<: *x-logging ports: - "9503:1080" networks: - appwrite + - gateway + labels: + - "traefik.enable=true" + - "traefik.constraint-label-stack=appwrite" + - "traefik.docker.network=gateway" + - "traefik.http.services.appwrite_maildev.loadbalancer.server.port=1080" + - "traefik.http.routers.appwrite_maildev_http.entrypoints=appwrite_web" + - "traefik.http.routers.appwrite_maildev_http.rule=Host(`mail.localhost`)" + - "traefik.http.routers.appwrite_maildev_http.service=appwrite_maildev" + - "traefik.http.routers.appwrite_maildev_https.entrypoints=appwrite_websecure" + - "traefik.http.routers.appwrite_maildev_https.rule=Host(`mail.localhost`)" + - "traefik.http.routers.appwrite_maildev_https.service=appwrite_maildev" + - "traefik.http.routers.appwrite_maildev_https.tls=true" request-catcher-webhook: # used mainly for dev tests (mock HTTP webhook) image: appwrite/requestcatcher:1.0.0 @@ -1119,14 +1138,54 @@ services: - 9506:8080 networks: - appwrite + - gateway + environment: + - ADMINER_DESIGN=pepa-linha + - ADMINER_DEFAULT_SERVER=mariadb + - ADMINER_DEFAULT_USERNAME=root + - ADMINER_DEFAULT_PASSWORD=rootsecretpassword + - ADMINER_DEFAULT_DB=appwrite + configs: + - source: adminer-index.php + target: /var/www/html/index.php + mode: 0755 + labels: + - "traefik.enable=true" + - "traefik.constraint-label-stack=appwrite" + - "traefik.docker.network=gateway" + - "traefik.http.services.appwrite_adminer.loadbalancer.server.port=8080" + - "traefik.http.routers.appwrite_adminer_http.entrypoints=appwrite_web" + - "traefik.http.routers.appwrite_adminer_http.rule=Host(`mysql.localhost`)" + - "traefik.http.routers.appwrite_adminer_http.service=appwrite_adminer" + - "traefik.http.routers.appwrite_adminer_https.entrypoints=appwrite_websecure" + - "traefik.http.routers.appwrite_adminer_https.rule=Host(`mysql.localhost`)" + - "traefik.http.routers.appwrite_adminer_https.service=appwrite_adminer" + - "traefik.http.routers.appwrite_adminer_https.tls=true" redis-insight: image: redis/redisinsight:latest restart: unless-stopped networks: - appwrite + - gateway environment: - - REDIS_HOSTS=redis + - RI_PRE_SETUP_DATABASES_PATH=/mnt/connections.json + configs: + - source: redisinsight-connections.json + target: /mnt/connections.json + mode: 0755 + labels: + - "traefik.enable=true" + - "traefik.constraint-label-stack=appwrite" + - "traefik.docker.network=gateway" + - "traefik.http.services.appwrite_redisinsight.loadbalancer.server.port=5540" + - "traefik.http.routers.appwrite_redisinsight_http.entrypoints=appwrite_web" + - "traefik.http.routers.appwrite_redisinsight_http.rule=Host(`redis.localhost`)" + - "traefik.http.routers.appwrite_redisinsight_http.service=appwrite_redisinsight" + - "traefik.http.routers.appwrite_redisinsight_https.entrypoints=appwrite_websecure" + - "traefik.http.routers.appwrite_redisinsight_https.rule=Host(`redis.localhost`)" + - "traefik.http.routers.appwrite_redisinsight_https.service=appwrite_redisinsight" + - "traefik.http.routers.appwrite_redisinsight_https.tls=true" ports: - "8081:5540" @@ -1151,6 +1210,61 @@ networks: runtimes: name: runtimes +configs: + redisinsight-connections.json: + content: | + [ + { + "compressor": "NONE", + "id": "104dc90a-21ef-4d5e-8912-b30baabb152f", + "host": "redis", + "port": 6379, + "name": "redis:6379", + "db": 0, + "username": "default", + "password": null, + "connectionType": "STANDALONE", + "nameFromProvider": null, + "provider": "REDIS", + "lastConnection": "2025-10-16T09:22:02.591Z", + "modules": [ + { + "name": "ReJSON", + "version": 20808, + "semanticVersion": "2.8.8" + }, + { + "name": "search", + "version": 21015, + "semanticVersion": "2.10.15" + } + ], + "tls": false, + "tlsServername": null, + "verifyServerCert": null, + "caCert": null, + "clientCert": null, + "ssh": false, + "sshOptions": null, + "forceStandalone": false, + "tags": [] + } + ] + + adminer-index.php: + content: | + $$_ENV['ADMINER_DEFAULT_SERVER'], + 'driver' => 'server', /* seems to autodetect the driver from server settings */ + 'username' => $$_ENV['ADMINER_DEFAULT_USERNAME'], + 'password' => $$_ENV['ADMINER_DEFAULT_PASSWORD'], + 'db' => $$_ENV['ADMINER_DEFAULT_DB'], + ]; + } + include './adminer.php'; + volumes: appwrite-mariadb: appwrite-redis: diff --git a/public/images/banner.png b/public/images/banner.png index 0ba08f5b6b..f5d7a28533 100644 Binary files a/public/images/banner.png and b/public/images/banner.png differ diff --git a/public/images/github.png b/public/images/github.png index 07d5ecea76..b32f7690b6 100644 Binary files a/public/images/github.png and b/public/images/github.png differ diff --git a/public/images/sites/templates/crm-dashboard-react-admin-dark.png b/public/images/sites/templates/crm-dashboard-react-admin-dark.png new file mode 100644 index 0000000000..467f6c4ed2 Binary files /dev/null and b/public/images/sites/templates/crm-dashboard-react-admin-dark.png differ diff --git a/public/images/sites/templates/crm-dashboard-react-admin-light.png b/public/images/sites/templates/crm-dashboard-react-admin-light.png new file mode 100644 index 0000000000..467f6c4ed2 Binary files /dev/null and b/public/images/sites/templates/crm-dashboard-react-admin-light.png differ diff --git a/public/images/sites/templates/job-applications-formspree-dark.png b/public/images/sites/templates/job-applications-formspree-dark.png new file mode 100644 index 0000000000..4f263ff9e5 Binary files /dev/null and b/public/images/sites/templates/job-applications-formspree-dark.png differ diff --git a/public/images/sites/templates/job-applications-formspree-light.png b/public/images/sites/templates/job-applications-formspree-light.png new file mode 100644 index 0000000000..4f263ff9e5 Binary files /dev/null and b/public/images/sites/templates/job-applications-formspree-light.png differ diff --git a/src/Appwrite/Event/Build.php b/src/Appwrite/Event/Build.php index 9ea163174f..79437c3e58 100644 --- a/src/Appwrite/Event/Build.php +++ b/src/Appwrite/Event/Build.php @@ -115,7 +115,8 @@ class Build extends Event 'resource' => $this->resource, 'deployment' => $this->deployment, 'type' => $this->type, - 'template' => $this->template + 'template' => $this->template, + 'platform' => $this->platform ]; } @@ -130,6 +131,7 @@ class Build extends Event $this->resource = null; $this->deployment = null; $this->template = null; + $this->platform = []; parent::reset(); return $this; diff --git a/src/Appwrite/Event/Event.php b/src/Appwrite/Event/Event.php index 16fe76bf8a..f8fb012075 100644 --- a/src/Appwrite/Event/Event.php +++ b/src/Appwrite/Event/Event.php @@ -52,9 +52,11 @@ class Event protected array $sensitive = []; protected array $payload = []; protected array $context = []; + protected array $platform = []; protected ?Document $project = null; protected ?Document $user = null; protected ?string $userId = null; + protected bool $paused = false; /** @var bool Non-critical events will not throw an exception when enqueuing of the event fails. */ @@ -153,6 +155,28 @@ class Event return $this->project; } + /** + * Set platform for this event. + * + * @param array $platform + * @return self + */ + public function setPlatform(array $platform): self + { + $this->platform = $platform; + return $this; + } + + /** + * Get platform for this event. + * + * @return array + */ + public function getPlatform(): array + { + return $this->platform; + } + /** * Set user for this event. * diff --git a/src/Appwrite/Event/Func.php b/src/Appwrite/Event/Func.php index ae316c84e5..380a28f1db 100644 --- a/src/Appwrite/Event/Func.php +++ b/src/Appwrite/Event/Func.php @@ -161,7 +161,7 @@ class Func extends Event /** * Sets custom headers for the function event. * - * @param string $headers + * @param array $headers * @return self */ public function setHeaders(array $headers): self @@ -217,6 +217,7 @@ class Func extends Event 'path' => $this->path, 'headers' => $this->headers, 'method' => $this->method, + 'platform' => $this->platform ]; } } diff --git a/src/Appwrite/Event/Migration.php b/src/Appwrite/Event/Migration.php index bbb8d77c73..ca54310ce6 100644 --- a/src/Appwrite/Event/Migration.php +++ b/src/Appwrite/Event/Migration.php @@ -77,6 +77,7 @@ class Migration extends Event 'project' => $this->project, 'user' => $this->user, 'migration' => $this->migration, + 'platform' => $this->platform, ]; } } diff --git a/src/Appwrite/Extend/Exception.php b/src/Appwrite/Extend/Exception.php index 5ecc54b86a..33c0942b2d 100644 --- a/src/Appwrite/Extend/Exception.php +++ b/src/Appwrite/Extend/Exception.php @@ -389,7 +389,8 @@ class Exception extends \Exception string $message = null, int|string $code = null, \Throwable $previous = null, - ?string $view = null + ?string $view = null, + array $params = [] ) { $this->errors = Config::getParam('errors'); $this->type = $type; @@ -405,7 +406,13 @@ class Exception extends \Exception } } - $this->message = $message ?? $this->errors[$type]['description']; + // Format message with params if provided + if (!empty($params) && $message === null) { + $description = $this->errors[$type]['description'] ?? ''; + $this->message = !empty($description) ? sprintf($description, ...$params) : ''; + } else { + $this->message = $message ?? $this->errors[$type]['description']; + } $this->publish = $this->errors[$type]['publish'] ?? ($this->code >= 500); diff --git a/src/Appwrite/Network/Cors.php b/src/Appwrite/Network/Cors.php new file mode 100644 index 0000000000..88d0158379 --- /dev/null +++ b/src/Appwrite/Network/Cors.php @@ -0,0 +1,88 @@ + $allowedHosts Array of allowed hosts + * @param array $allowedMethods Array of allowed methods + * @param array $allowedHeaders Array of allowed header + * @param array $exposedHeaders Array of exposed headers + * @param bool $allowCredentials Whether to allow credentials (default: false) + * @param int $maxAge Maximum age of the preflight response (default: 86400 seconds) + */ + public function __construct( + private array $allowedHosts, + private array $allowedMethods, + private array $allowedHeaders, + private array $exposedHeaders, + private bool $allowCredentials = false, + private int $maxAge = 86400, + ) { + $this->allowedHosts = \array_map('strtolower', $this->allowedHosts); + + if ($this->allowedHosts === ['*'] && $allowCredentials === true) { + throw new \InvalidArgumentException( + 'CORS invariant violated: cannot use wildcard origin "*" when credentials are enabled.' + ); + } + } + + /** + * Build CORS headers for a given request origin. + * + * @return array + */ + public function headers(string $origin): array + { + $headers = [ + self::HEADER_ALLOW_METHODS => implode(', ', $this->allowedMethods), + self::HEADER_ALLOW_HEADERS => implode(', ', $this->allowedHeaders), + self::HEADER_EXPOSE_HEADERS => implode(', ', $this->exposedHeaders), + self::HEADER_ALLOW_CREDENTIALS => $this->allowCredentials ? 'true' : 'false', + self::HEADER_MAX_AGE => $this->maxAge, + ]; + + // Wildcard allow-all + if ($this->allowedHosts === ['*']) { + $headers[self::HEADER_ALLOW_ORIGIN] = $origin; + return $headers; + } + + // Normal origin handling + $origin = strtolower(trim($origin)); + if ($origin === '') { + return $headers; + } + + $host = parse_url($origin, PHP_URL_HOST); + if (!\is_string($host) || $host === '') { + return $headers; + } + + // Match only by host + if (!\in_array($host, $this->allowedHosts, true)) { + return $headers; + } + + // Accepted + $headers[self::HEADER_ALLOW_ORIGIN] = $origin; + + return $headers; + } +} diff --git a/src/Appwrite/Network/Validator/Origin.php b/src/Appwrite/Network/Validator/Origin.php index 7843a17f1c..02d5d8e83d 100644 --- a/src/Appwrite/Network/Validator/Origin.php +++ b/src/Appwrite/Network/Validator/Origin.php @@ -8,8 +8,6 @@ use Utopia\Validator\Hostname; class Origin extends Validator { - protected array $hostnames = []; - protected array $schemes = []; protected ?string $scheme = null; protected ?string $host = null; protected string $origin = ''; @@ -17,12 +15,11 @@ class Origin extends Validator /** * Constructor * - * @param array<\Utopia\Database\Document> $platforms + * @param array $allowedHostnames + * @param array $allowedSchemes */ - public function __construct(array $platforms) + public function __construct(protected array $allowedHostnames, protected array $allowedSchemes) { - $this->hostnames = Platform::getHostnames($platforms); - $this->schemes = Platform::getSchemes($platforms); } @@ -53,11 +50,11 @@ class Origin extends Validator Platform::SCHEME_EDGE_EXTENSION, ]; if (in_array($this->scheme, $webPlatforms, true)) { - $validator = new Hostname($this->hostnames); + $validator = new Hostname($this->allowedHostnames); return $validator->isValid($this->host); } - if (!empty($this->scheme) && in_array($this->scheme, $this->schemes, true)) { + if (!empty($this->scheme) && in_array($this->scheme, $this->allowedSchemes, true)) { return true; } diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Create.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Create.php index 2d83599964..c2825ce9d1 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Create.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Create.php @@ -60,6 +60,7 @@ class Create extends Action since: '1.8.0', replaceWith: 'account.createMFAAuthenticator', ), + public: false, ), new Method( namespace: 'account', diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Delete.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Delete.php index 5c92bfff5c..3244bc662b 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Delete.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Delete.php @@ -57,6 +57,7 @@ class Delete extends Action since: '1.8.0', replaceWith: 'account.deleteMFAAuthenticator', ), + public: false, ), new Method( namespace: 'account', diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Update.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Update.php index b68a55c20b..34656a6428 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Update.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Authenticators/Update.php @@ -59,6 +59,7 @@ class Update extends Action since: '1.8.0', replaceWith: 'account.updateMFAAuthenticator', ), + public: false, ), new Method( namespace: 'account', diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Create.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Create.php index 10230df7af..c392d02d80 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Create.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Create.php @@ -72,6 +72,7 @@ class Create extends Action since: '1.8.0', replaceWith: 'account.createMFAChallenge', ), + public: false, ), new Method( namespace: 'account', @@ -332,6 +333,8 @@ class Create extends Action ->setParam('userId', $user->getId()) ->setParam('challengeId', $challenge->getId()); - $response->dynamic($challenge, Response::MODEL_MFA_CHALLENGE); + $response + ->setStatusCode(Response::STATUS_CODE_CREATED) + ->dynamic($challenge, Response::MODEL_MFA_CHALLENGE); } } diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Update.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Update.php index 40d17afa18..927cd86e38 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Update.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Challenges/Update.php @@ -59,6 +59,7 @@ class Update extends Action since: '1.8.0', replaceWith: 'account.updateMFAChallenge', ), + public: false, ), new Method( namespace: 'account', @@ -109,7 +110,7 @@ class Update extends Action $recoveryCodeChallenge = function (Document $challenge, Document $user, string $otp) use ($dbForProject) { if ( $challenge->isSet('type') && - $challenge->getAttribute('type') === \strtolower(Type::RECOVERY_CODE) + $challenge->getAttribute('type') === Type::RECOVERY_CODE ) { $mfaRecoveryCodes = $user->getAttribute('mfaRecoveryCodes', []); if (\in_array($otp, $mfaRecoveryCodes)) { @@ -131,7 +132,7 @@ class Update extends Action Type::TOTP => Challenge\TOTP::challenge($challenge, $user, $otp), Type::PHONE => Challenge\Phone::challenge($challenge, $user, $otp), Type::EMAIL => Challenge\Email::challenge($challenge, $user, $otp), - \strtolower(Type::RECOVERY_CODE) => $recoveryCodeChallenge($challenge, $user, $otp), + Type::RECOVERY_CODE => $recoveryCodeChallenge($challenge, $user, $otp), default => false }); diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Factors/XList.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Factors/XList.php index c60f599cfc..e19d7dc59c 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Factors/XList.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/Factors/XList.php @@ -49,6 +49,7 @@ class XList extends Action since: '1.8.0', replaceWith: 'account.listMFAFactors', ), + public: false, ), new Method( namespace: 'account', diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Create.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Create.php index fc26142991..b44894014f 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Create.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Create.php @@ -55,6 +55,7 @@ class Create extends Action since: '1.8.0', replaceWith: 'account.createMFARecoveryCodes', ), + public: false, ), new Method( namespace: 'account', @@ -100,6 +101,8 @@ class Create extends Action 'recoveryCodes' => $mfaRecoveryCodes ]); - $response->dynamic($document, Response::MODEL_MFA_RECOVERY_CODES); + $response + ->setStatusCode(Response::STATUS_CODE_CREATED) + ->dynamic($document, Response::MODEL_MFA_RECOVERY_CODES); } } diff --git a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Get.php b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Get.php index 8a85c361ca..8ba5cb31e6 100644 --- a/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Get.php +++ b/src/Appwrite/Platform/Modules/Account/Http/Account/MFA/RecoveryCodes/Get.php @@ -48,6 +48,7 @@ class Get extends Action since: '1.8.0', replaceWith: 'account.getMFARecoveryCodes', ), + public: false, ), new Method( namespace: 'account', diff --git a/src/Appwrite/Platform/Modules/Compute/Base.php b/src/Appwrite/Platform/Modules/Compute/Base.php index a538eb1497..47afc90986 100644 --- a/src/Appwrite/Platform/Modules/Compute/Base.php +++ b/src/Appwrite/Platform/Modules/Compute/Base.php @@ -235,8 +235,9 @@ class Base extends Action $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $domain = ID::unique() . "." . $sitesDomain; - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain) : ID::unique(); Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ diff --git a/src/Appwrite/Platform/Modules/Console/Http/Resources/Get.php b/src/Appwrite/Platform/Modules/Console/Http/Resources/Get.php index b67a42adb1..aa43b12125 100644 --- a/src/Appwrite/Platform/Modules/Console/Http/Resources/Get.php +++ b/src/Appwrite/Platform/Modules/Console/Http/Resources/Get.php @@ -59,6 +59,7 @@ class Get extends Action ->param('type', '', new WhiteList(['rules']), 'Resource type.') ->inject('response') ->inject('dbForPlatform') + ->inject('platform') ->callback($this->action(...)); } @@ -66,8 +67,10 @@ class Get extends Action string $value, string $type, Response $response, - Database $dbForPlatform + Database $dbForPlatform, + array $platform ) { + $domains = $platform['hostnames'] ?? []; if ($type === 'rules') { $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); @@ -89,13 +92,7 @@ class Get extends Action throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'This domain name is not allowed. Please use a different domain.'); } - $deniedDomains = [ - 'localhost', - APP_HOSTNAME_INTERNAL - ]; - - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - $deniedDomains[] = $mainDomain; + $deniedDomains = [...$domains]; if (!empty($sitesDomain)) { $deniedDomains[] = $sitesDomain; diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Action.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Action.php index 48124e2a11..83a401a35e 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Action.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Action.php @@ -307,19 +307,19 @@ abstract class Action extends UtopiaAction $options = $attribute->getAttribute('options', []); if (in_array($type, Database::SPATIAL_TYPES) && !$dbForProject->getAdapter()->getSupportForSpatialAttributes()) { - throw new Exception($this->getSpatialTypeNotSupportedException()); + throw new Exception($this->getSpatialTypeNotSupportedException(), params: [$type]); } $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $db->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } if (!empty($format)) { @@ -382,9 +382,9 @@ abstract class Action extends UtopiaAction $dbForProject->checkAttribute($collection, $attribute); $attribute = $dbForProject->createDocument('attributes', $attribute); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$key]); } catch (LimitException) { - throw new Exception($this->getLimitException()); + throw new Exception($this->getLimitException(), params: [$collectionId]); } catch (StructureException $e) { throw new Exception($this->getStructureException(), $e->getMessage()); } catch (Throwable $e) { @@ -426,9 +426,9 @@ abstract class Action extends UtopiaAction $dbForProject->checkAttribute($relatedCollection, $twoWayAttribute); $dbForProject->createDocument('attributes', $twoWayAttribute); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$twoWayKey]); } catch (LimitException) { - throw new Exception($this->getLimitException()); + throw new Exception($this->getLimitException(), params: [$relatedCollection->getId()]); } catch (StructureException) { throw new Exception($this->getStructureException()); } catch (Throwable $e) { @@ -477,19 +477,19 @@ abstract class Action extends UtopiaAction $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $db->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $attribute = $dbForProject->getDocument('attributes', $db->getSequence() . '_' . $collection->getSequence() . '_' . $key); if ($attribute->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$key]); } if ($attribute->getAttribute('status') !== 'available') { @@ -590,7 +590,7 @@ abstract class Action extends UtopiaAction } catch (IndexException) { throw new Exception(Exception::INDEX_INVALID); } catch (LimitException) { - throw new Exception($this->getLimitException()); + throw new Exception($this->getLimitException(), params: [$collectionId]); } catch (RelationshipException $e) { throw new Exception(Exception::RELATIONSHIP_VALUE_INVALID, $e->getMessage()); } catch (StructureException $e) { @@ -624,11 +624,11 @@ abstract class Action extends UtopiaAction newKey: $newKey ?? null ); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$key]); } catch (IndexException $e) { throw new Exception($this->getInvalidIndexException(), $e->getMessage()); } catch (LimitException) { - throw new Exception($this->getLimitException()); + throw new Exception($this->getLimitException(), params: [$collectionId]); } catch (TruncateException) { throw new Exception($this->getInvalidResizeException()); } @@ -644,7 +644,7 @@ abstract class Action extends UtopiaAction try { $dbForProject->updateDocument('attributes', $originalUid, $attribute); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$newKey]); } /** diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Delete.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Delete.php index eb51044323..23c21fecee 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Delete.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Delete.php @@ -74,17 +74,17 @@ class Delete extends Action { $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $db->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $attribute = $dbForProject->getDocument('attributes', $db->getSequence() . '_' . $collection->getSequence() . '_' . $key); if ($attribute->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$key]); } $validator = new IndexDependencyValidator( @@ -93,7 +93,7 @@ class Delete extends Action ); if (!$validator->isValid($attribute)) { - throw new Exception($this->getIndexDependencyException()); + throw new Exception($this->getIndexDependencyException(), params: [$key]); } if ($attribute->getAttribute('status') === 'available') { @@ -108,12 +108,12 @@ class Delete extends Action if ($options['twoWay']) { $relatedCollection = $dbForProject->getDocument('database_' . $db->getSequence(), $options['relatedCollection']); if ($relatedCollection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$options['relatedCollection']]); } $relatedAttribute = $dbForProject->getDocument('attributes', $db->getSequence() . '_' . $relatedCollection->getSequence() . '_' . $options['twoWayKey']); if ($relatedAttribute->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$options['twoWayKey']]); } if ($relatedAttribute->getAttribute('status') === 'available') { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Get.php index 91fa3582f7..c11dd1c63b 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Get.php @@ -75,17 +75,17 @@ class Get extends Action { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $attribute = $dbForProject->getDocument('attributes', $database->getSequence() . '_' . $collection->getSequence() . '_' . $key); if ($attribute->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$key]); } $type = $attribute->getAttribute('type'); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Relationship/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Relationship/Create.php index 6fc27a9836..76cc17e2f7 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Relationship/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/Relationship/Create.php @@ -89,23 +89,24 @@ class Create extends Action public function action(string $databaseId, string $collectionId, string $relatedCollectionId, string $type, bool $twoWay, ?string $key, ?string $twoWayKey, string $onDelete, UtopiaResponse $response, Database $dbForProject, EventDatabase $queueForDatabase, Event $queueForEvents): void { $key ??= $relatedCollectionId; + $twoWayKeyWasProvided = $twoWayKey !== null; $twoWayKey ??= $collectionId; $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); $collection = $dbForProject->getCollection('database_' . $database->getSequence() . '_collection_' . $collection->getSequence()); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $relatedCollectionDocument = $dbForProject->getDocument('database_' . $database->getSequence(), $relatedCollectionId); $relatedCollection = $dbForProject->getCollection('database_' . $database->getSequence() . '_collection_' . $relatedCollectionDocument->getSequence()); if ($relatedCollection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$relatedCollectionId]); } $attributes = $collection->getAttribute('attributes', []); @@ -115,14 +116,17 @@ class Create extends Action } if (\strtolower($attribute->getId()) === \strtolower($key)) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$key]); } if ( \strtolower($attribute->getAttribute('options')['twoWayKey']) === \strtolower($twoWayKey) && $attribute->getAttribute('options')['relatedCollection'] === $relatedCollection->getId() ) { - throw new Exception($this->getDuplicateException(), 'Attribute with the requested key already exists. Attribute keys must be unique, try again with a different key.'); + // If user explicitly provided twoWayKey, report that. + // Otherwise report the key that they're trying to create. + $conflictingKey = $twoWayKeyWasProvided ? $twoWayKey : $key; + throw new Exception($this->getDuplicateException(), params: [$conflictingKey]); } if ( diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/XList.php index c2af3ac945..065cb333db 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Attributes/XList.php @@ -71,12 +71,12 @@ class XList extends Action { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } try { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php index f44efad298..d285c1ac13 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Create.php @@ -93,7 +93,7 @@ class Create extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collectionId = $collectionId === 'unique()' ? ID::unique() : $collectionId; @@ -113,11 +113,11 @@ class Create extends Action 'search' => \implode(' ', [$collectionId, $name]), ])); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$collectionId]); } catch (LimitException) { - throw new Exception($this->getLimitException()); + throw new Exception($this->getLimitException(), params: [$databaseId]); } catch (NotFoundException) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collectionKey = 'database_' . $database->getSequence() . '_collection_' . $collection->getSequence(); @@ -205,13 +205,13 @@ class Create extends Action ); } catch (DuplicateException) { $dbForProject->deleteDocument($databaseKey, $collection->getId()); - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$collectionId]); } catch (IndexException $e) { $dbForProject->deleteDocument($databaseKey, $collection->getId()); throw new Exception($this->getInvalidIndexException(), $e->getMessage()); } catch (LimitException) { $dbForProject->deleteDocument($databaseKey, $collection->getId()); - throw new Exception($this->getLimitException()); + throw new Exception($this->getLimitException(), params: [$collectionId]); } catch (\Throwable $e) { $dbForProject->deleteDocument($databaseKey, $collection->getId()); throw $e; @@ -227,7 +227,7 @@ class Create extends Action } } catch (DuplicateException) { $this->cleanup($dbForProject, $databaseKey, $collectionKey, $collection->getId()); - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$collectionId]); } catch (\Throwable $e) { $this->cleanup($dbForProject, $databaseKey, $collectionKey, $collection->getId()); throw $e; diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Delete.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Delete.php index d124a47289..bf0f83bb11 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Delete.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Delete.php @@ -71,12 +71,12 @@ class Delete extends Action { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$collectionId]); } if (!$dbForProject->deleteDocument('database_' . $database->getSequence(), $collectionId)) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Decrement.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Decrement.php index a5c2d1f6a8..38e7f8f231 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Decrement.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Decrement.php @@ -95,12 +95,12 @@ class Decrement extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } // Handle transaction staging diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Increment.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Increment.php index 415d3f359e..10dadae824 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Increment.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Attribute/Increment.php @@ -95,12 +95,12 @@ class Increment extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } // Handle transaction staging diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Delete.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Delete.php index fdc4c96fe4..070ee09450 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Delete.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Delete.php @@ -88,12 +88,12 @@ class Delete extends Action { $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $hasRelationships = \array_filter( diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Update.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Update.php index 4adf11311e..2d55cd54f4 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Update.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Update.php @@ -100,12 +100,12 @@ class Update extends Action $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } if ($transactionId === null) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php index d30135de75..45db6cc96b 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Bulk/Upsert.php @@ -90,12 +90,12 @@ class Upsert extends Action { $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $hasRelationships = \array_filter( @@ -180,7 +180,7 @@ class Upsert extends Action } catch (ConflictException) { throw new Exception($this->getConflictException()); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: ['multiple']); } catch (RelationshipException $e) { throw new Exception(Exception::RELATIONSHIP_VALUE_INVALID, $e->getMessage()); } catch (StructureException $e) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Create.php index 02172d9bc3..a7fb81a486 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Create.php @@ -187,12 +187,12 @@ class Create extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty() || (!$database->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty() || (!$collection->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $hasRelationships = \array_filter( @@ -372,7 +372,7 @@ class Create extends Action ? Authorization::skip(fn () => $dbForProject->getDocument('transactions', $transactionId)) : $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } if ($transaction->getAttribute('status', '') !== 'pending') { throw new Exception(Exception::TRANSACTION_NOT_READY); @@ -444,9 +444,9 @@ class Create extends Action ) ); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$documentId]); } catch (NotFoundException) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } catch (RelationshipException $e) { throw new Exception(Exception::RELATIONSHIP_VALUE_INVALID, $e->getMessage()); } catch (StructureException $e) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Delete.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Delete.php index d88e005af7..14a51c0fac 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Delete.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Delete.php @@ -105,13 +105,13 @@ class Delete extends Action $isPrivilegedUser = User::isPrivileged(Authorization::getRoles()); if ($database->isEmpty() || (!$database->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty() || (!$collection->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } // Read permission should not be required for delete @@ -125,7 +125,7 @@ class Delete extends Action } if ($document->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$documentId]); } // Handle transaction staging @@ -134,7 +134,7 @@ class Delete extends Action ? Authorization::skip(fn () => $dbForProject->getDocument('transactions', $transactionId)) : $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } if ($transaction->getAttribute('status', '') !== 'pending') { throw new Exception(Exception::TRANSACTION_NOT_READY); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Get.php index 5f2a966220..62919488e6 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Get.php @@ -80,13 +80,13 @@ class Get extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty() || (!$database->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty() || (!$collection->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } try { @@ -114,7 +114,7 @@ class Get extends Action } if ($document->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$documentId]); } $operations = 0; diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Logs/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Logs/XList.php index 241b0c4ede..47f5247831 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Logs/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Logs/XList.php @@ -14,7 +14,6 @@ use Appwrite\Utopia\Response as UtopiaResponse; use MaxMind\Db\Reader; use Utopia\Audit\Audit; use Utopia\Database\Database; -use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Query; @@ -80,17 +79,17 @@ class XList extends Action { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } $document = $dbForProject->getDocument('database_' . $database->getSequence() . '_collection_' . $collection->getSequence(), $documentId); if ($document->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$documentId]); } try { @@ -99,12 +98,6 @@ class XList extends Action throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $type = $this->getCollectionsEventsContext(); $context = $this->getContext(); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Update.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Update.php index 428c7a45c1..d2b67665a7 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Update.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Update.php @@ -104,13 +104,13 @@ class Update extends Action $isPrivilegedUser = User::isPrivileged(Authorization::getRoles()); if ($database->isEmpty() || (!$database->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty() || (!$collection->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } if ($transactionId === null) { @@ -129,7 +129,7 @@ class Update extends Action } if ($document->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$documentId]); } // Map aggregate permissions into the multiple permissions they represent. @@ -252,7 +252,7 @@ class Update extends Action ? Authorization::skip(fn () => $dbForProject->getDocument('transactions', $transactionId)) : $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } if ($transaction->getAttribute('status', '') !== 'pending') { throw new Exception(Exception::TRANSACTION_NOT_READY); @@ -326,7 +326,7 @@ class Update extends Action } catch (ConflictException) { throw new Exception($this->getConflictException()); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$documentId]); } catch (RelationshipException $e) { throw new Exception(Exception::RELATIONSHIP_VALUE_INVALID, $e->getMessage()); } catch (StructureException $e) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php index 76b1099f6b..d85fb17842 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/Upsert.php @@ -111,12 +111,12 @@ class Upsert extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty() || (!$database->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty() || (!$collection->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } if ($transactionId === null) { @@ -262,7 +262,7 @@ class Upsert extends Action ? Authorization::skip(fn () => $dbForProject->getDocument('transactions', $transactionId)) : $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } if ($transaction->getAttribute('status', '') !== 'pending') { throw new Exception(Exception::TRANSACTION_NOT_READY); @@ -335,7 +335,7 @@ class Upsert extends Action } catch (ConflictException) { throw new Exception($this->getConflictException()); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$documentId]); } catch (RelationshipException $e) { throw new Exception(Exception::RELATIONSHIP_VALUE_INVALID, $e->getMessage()); } catch (StructureException $e) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php index 8bbaecedc9..b14a4f9983 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Documents/XList.php @@ -84,12 +84,12 @@ class XList extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty() || (!$database->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId)); if ($collection->isEmpty() || (!$collection->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception($this->getParentNotFoundException()); + throw new Exception($this->getParentNotFoundException(), params: [$collectionId]); } try { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php index 89739570c7..22d1333cc4 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Get.php @@ -65,13 +65,13 @@ class Get extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$collectionId]); } $response->dynamic($collection, $this->getResponseModel()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Create.php index 812bae16e2..b132aff8ef 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Create.php @@ -87,14 +87,14 @@ class Create extends Action $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $db->getSequence(), $collectionId); if ($collection->isEmpty()) { // table or collection. - throw new Exception($this->getGrandParentNotFoundException()); + throw new Exception($this->getGrandParentNotFoundException(), params: [$collectionId]); } $count = $dbForProject->count('indexes', [ @@ -105,7 +105,7 @@ class Create extends Action $limit = $dbForProject->getLimitForIndexes(); if ($count >= $limit) { - throw new Exception($this->getLimitException(), 'Index limit exceeded'); + throw new Exception($this->getLimitException(), params: [$collectionId]); } $oldAttributes = \array_map( @@ -148,7 +148,7 @@ class Create extends Action $attributeIndex = \array_search($attribute, array_column($oldAttributes, 'key')); if ($attributeIndex === false) { - throw new Exception($this->getParentUnknownException(), "Unknown $contextType: " . $attribute . ". Verify the $contextType name or create the $contextType."); + throw new Exception($this->getParentUnknownException(), params: [$attribute]); } $attributeStatus = $oldAttributes[$attributeIndex]['status']; @@ -160,8 +160,7 @@ class Create extends Action } if ($attributeStatus !== 'available') { - $contextType = ucfirst($contextType); - throw new Exception($this->getParentNotAvailableException(), "$contextType not available: " . $oldAttributes[$attributeIndex]['key']); + throw new Exception($this->getParentNotAvailableException(), params: [$oldAttributes[$attributeIndex]['key']]); } if (empty($lengths[$i])) { @@ -209,7 +208,7 @@ class Create extends Action try { $index = $dbForProject->createDocument('indexes', $index); } catch (DuplicateException) { - throw new Exception($this->getDuplicateException()); + throw new Exception($this->getDuplicateException(), params: [$key]); } $dbForProject->purgeCachedDocument('database_' . $db->getSequence(), $collectionId); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Delete.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Delete.php index 2bccfdfb52..57198cc53c 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Delete.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Delete.php @@ -78,19 +78,19 @@ class Delete extends Action $db = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($db->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $db->getSequence(), $collectionId); if ($collection->isEmpty()) { // table or collection. - throw new Exception($this->getGrandParentNotFoundException()); + throw new Exception($this->getGrandParentNotFoundException(), params: [$collectionId]); } $index = $dbForProject->getDocument('indexes', $db->getSequence() . '_' . $collection->getSequence() . '_' . $key); if (empty($index->getId())) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$key]); } // Only update status if removing available index diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Get.php index 3d118d1922..c03e80dedc 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/Get.php @@ -67,18 +67,18 @@ class Get extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { // table or collection. - throw new Exception($this->getGrandParentNotFoundException()); + throw new Exception($this->getGrandParentNotFoundException(), params: [$collectionId]); } $index = $collection->find('key', $key, 'indexes'); if (empty($index)) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$key]); } $response->dynamic($index, $this->getResponseModel()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php index 88b3a32e0b..ec4bc94a66 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Indexes/XList.php @@ -75,14 +75,14 @@ class XList extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { // table or collection. - throw new Exception($this->getGrandParentNotFoundException()); + throw new Exception($this->getGrandParentNotFoundException(), params: [$collectionId]); } try { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Logs/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Logs/XList.php index b202120bad..a45daa32a4 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Logs/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Logs/XList.php @@ -14,7 +14,6 @@ use DeviceDetector\DeviceDetector as Detector; use MaxMind\Db\Reader; use Utopia\Audit\Audit; use Utopia\Database\Database; -use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Query; @@ -80,14 +79,14 @@ class XList extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collectionDocument = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); $collection = $dbForProject->getCollection('database_' . $database->getSequence() . '_collection_' . $collectionDocument->getSequence()); if ($collection->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$collectionId]); } try { @@ -96,12 +95,6 @@ class XList extends Action throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $context = $this->getContext(); $resource = "database/$databaseId/$context/$collectionId"; diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php index 7575c9803b..bbad2a7f22 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Update.php @@ -78,12 +78,12 @@ class Update extends Action { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $collection = $dbForProject->getDocument('database_' . $database->getSequence(), $collectionId); if ($collection->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$collectionId]); } $permissions ??= $collection->getPermissions(); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Usage/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Usage/Get.php index 9cf7b85267..c4a46650c9 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Usage/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/Usage/Get.php @@ -73,7 +73,7 @@ class Get extends Action $collection = $dbForProject->getCollection('database_' . $database->getSequence() . '_collection_' . $collectionDocument->getSequence()); if ($collection->isEmpty()) { - throw new Exception($this->getNotFoundException()); + throw new Exception($this->getNotFoundException(), params: [$collectionId]); } $periods = Config::getParam('usage', []); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php index 286e48420a..e1985b0fa9 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Collections/XList.php @@ -75,7 +75,7 @@ class XList extends Action $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } try { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Create.php index 110ec99a9d..009b499ea8 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Create.php @@ -84,7 +84,7 @@ class Create extends Action 'type' => $this->getDatabaseType(), ])); } catch (DuplicateException) { - throw new Exception(Exception::DATABASE_ALREADY_EXISTS); + throw new Exception(Exception::DATABASE_ALREADY_EXISTS, params: [$databaseId]); } catch (StructureException $e) { throw new Exception(Exception::DOCUMENT_INVALID_STRUCTURE, $e->getMessage()); } @@ -109,13 +109,13 @@ class Create extends Action try { $dbForProject->createCollection('database_' . $database->getSequence(), $attributes, $indexes); } catch (DuplicateException) { - throw new Exception(Exception::DATABASE_ALREADY_EXISTS); - } catch (IndexException) { + throw new Exception(Exception::DATABASE_ALREADY_EXISTS, params: [$databaseId]); + } catch (IndexException $e) { throw new Exception(Exception::INDEX_INVALID); } catch (LimitException) { // TODO: @Jake, how do we handle this collection/table? // there's no context awareness at this level on what the api is. - throw new Exception(Exception::COLLECTION_LIMIT_EXCEEDED); + throw new Exception(Exception::COLLECTION_LIMIT_EXCEEDED, params: [$databaseId]); } $queueForEvents->setParam('databaseId', $database->getId()); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Delete.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Delete.php index 7be96fa883..76b36b5df9 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Delete.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Delete.php @@ -69,7 +69,7 @@ class Delete extends Action $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } if (!$dbForProject->deleteDocument('databases', $databaseId)) { diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Get.php index c4626c804c..2eb09955c1 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Get.php @@ -61,7 +61,7 @@ class Get extends Action $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $response->dynamic($database, UtopiaResponse::MODEL_DATABASE); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Logs/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Logs/XList.php index fd6ae05335..a794ec325e 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Logs/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Logs/XList.php @@ -13,7 +13,6 @@ use DeviceDetector\DeviceDetector as Detector; use MaxMind\Db\Reader; use Utopia\Audit\Audit; use Utopia\Database\Database; -use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; @@ -76,7 +75,7 @@ class XList extends Action $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } try { @@ -85,12 +84,6 @@ class XList extends Action throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $resource = 'database/' . $databaseId; $logs = $audit->getLogsByResource($resource, $queries); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Delete.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Delete.php index a5d2562572..b018743f36 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Delete.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Delete.php @@ -60,7 +60,7 @@ class Delete extends Action $transaction = $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } $dbForProject->deleteDocument('transactions', $transactionId); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Get.php index 1d4d22baa1..78d19ec4eb 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Get.php @@ -58,7 +58,7 @@ class Get extends Action $transaction = $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } $response diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php index 61da52e830..765e663911 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Operations/Create.php @@ -80,7 +80,7 @@ class Create extends Action ? Authorization::skip(fn () => $dbForProject->getDocument('transactions', $transactionId)) : $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } if ($transaction->getAttribute('status', '') !== 'pending') { throw new Exception(Exception::GENERAL_BAD_REQUEST, 'Invalid or non‑pending transaction'); @@ -115,14 +115,14 @@ class Create extends Action $database = $databases[$operation['databaseId']] ??= Authorization::skip(fn () => $dbForProject->getDocument('databases', $operation['databaseId'])); if ($database->isEmpty() || (!$database->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$operation['databaseId']]); } $collection = $collections[$operation[$this->getGroupId()]] ??= Authorization::skip(fn () => $dbForProject->getDocument('database_' . $database->getSequence(), $operation[$this->getGroupId()])); if ($collection->isEmpty() || (!$collection->getAttribute('enabled', false) && !$isAPIKey && !$isPrivilegedUser)) { - throw new Exception(Exception::COLLECTION_NOT_FOUND); + throw new Exception(Exception::COLLECTION_NOT_FOUND, params: [$operation[$this->getGroupId()]]); } if (\in_array($operation['action'], ['bulkCreate', 'bulkUpdate', 'bulkUpsert', 'bulkDelete'])) { @@ -148,7 +148,7 @@ class Create extends Action $document = $transactionState->getDocument($collectionKey, $documentId, $transactionId); if ($document->isEmpty() && !$isDependant && $operation['action'] !== 'upsert') { - throw new Exception(Exception::DOCUMENT_NOT_FOUND); + throw new Exception(Exception::DOCUMENT_NOT_FOUND, params: [$documentId]); } } diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php index aec72a029a..70e670144d 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Transactions/Update.php @@ -118,7 +118,7 @@ class Update extends Action ? Authorization::skip(fn () => $dbForProject->getDocument('transactions', $transactionId)) : $dbForProject->getDocument('transactions', $transactionId); if ($transaction->isEmpty()) { - throw new Exception(Exception::TRANSACTION_NOT_FOUND); + throw new Exception(Exception::TRANSACTION_NOT_FOUND, params: [$transactionId]); } if ($transaction->getAttribute('status', '') !== 'pending') { throw new Exception(Exception::TRANSACTION_NOT_READY); @@ -135,9 +135,10 @@ class Update extends Action $operations = []; $totalOperations = 0; $databaseOperations = []; + $currentDocumentId = null; try { - $dbForProject->withTransaction(function () use ($dbForProject, $transactionState, $queueForDeletes, $transactionId, &$transaction, &$operations, &$totalOperations, &$databaseOperations, $queueForEvents, $queueForStatsUsage, $queueForRealtime, $queueForFunctions, $queueForWebhooks) { + $dbForProject->withTransaction(function () use ($dbForProject, $transactionState, $queueForDeletes, $transactionId, &$transaction, &$operations, &$totalOperations, &$databaseOperations, &$currentDocumentId, $queueForEvents, $queueForStatsUsage, $queueForRealtime, $queueForFunctions, $queueForWebhooks) { Authorization::skip(fn () => $dbForProject->updateDocument('transactions', $transactionId, new Document([ 'status' => 'committing', ]))); @@ -156,6 +157,7 @@ class Update extends Action $collectionInternalId = $operation['collectionInternalId']; $collectionId = "database_{$databaseInternalId}_collection_{$collectionInternalId}"; $documentId = $operation['documentId']; + $currentDocumentId = $documentId; $createdAt = new \DateTime($operation['$createdAt']); $action = $operation['action']; $data = $operation['data']; @@ -244,7 +246,8 @@ class Update extends Action Authorization::skip(fn () => $dbForProject->updateDocument('transactions', $transactionId, new Document([ 'status' => 'failed', ]))); - throw new Exception(Exception::DOCUMENT_NOT_FOUND, previous: $e); + + throw new Exception(Exception::DOCUMENT_NOT_FOUND, previous: $e, params: [$currentDocumentId ?? 'unknown']); } catch (DuplicateException | ConflictException $e) { Authorization::skip(fn () => $dbForProject->updateDocument('transactions', $transactionId, new Document([ 'status' => 'failed', diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Update.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Update.php index d3057c1ca5..9f2ce06db4 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Update.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Update.php @@ -70,7 +70,7 @@ class Update extends Action $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $database = $dbForProject->updateDocument('databases', $databaseId, $database diff --git a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Usage/Get.php b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Usage/Get.php index c9de9d5217..a717b00ae4 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/Databases/Usage/Get.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/Databases/Usage/Get.php @@ -67,7 +67,7 @@ class Get extends Action $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } $periods = Config::getParam('usage', []); diff --git a/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Logs/XList.php b/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Logs/XList.php index 02403fe472..53476dbae1 100644 --- a/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Logs/XList.php +++ b/src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Logs/XList.php @@ -12,7 +12,6 @@ use DeviceDetector\DeviceDetector as Detector; use MaxMind\Db\Reader; use Utopia\Audit\Audit; use Utopia\Database\Database; -use Utopia\Database\DateTime; use Utopia\Database\Document; use Utopia\Database\Exception\Query as QueryException; use Utopia\Database\Helpers\ID; @@ -71,7 +70,7 @@ class XList extends Action $database = $dbForProject->getDocument('databases', $databaseId); if ($database->isEmpty()) { - throw new Exception(Exception::DATABASE_NOT_FOUND); + throw new Exception(Exception::DATABASE_NOT_FOUND, params: [$databaseId]); } try { @@ -80,12 +79,6 @@ class XList extends Action throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage()); } - // Temp fix for logs - $queries[] = Query::or([ - Query::greaterThan('$createdAt', DateTime::format(new \DateTime('2025-02-26T01:30+00:00'))), - Query::lessThan('$createdAt', DateTime::format(new \DateTime('2025-02-13T00:00+00:00'))), - ]); - $audit = new Audit($dbForProject); $resource = 'database/' . $databaseId; $logs = $audit->getLogsByResource($resource, $queries); diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php b/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php index 1367cf337f..5467d88641 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Executions/Create.php @@ -98,6 +98,7 @@ class Create extends Base ->inject('store') ->inject('proofForToken') ->inject('executor') + ->inject('platform') ->callback($this->action(...)); } @@ -121,7 +122,8 @@ class Create extends Base Reader $geodb, Store $store, Token $proofForToken, - Executor $executor + Executor $executor, + array $platform ) { $async = \strval($async) === 'true' || \strval($async) === '1'; @@ -366,13 +368,9 @@ class Create extends Base $vars[$var->getAttribute('key')] = $var->getAttribute('value', ''); } - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_DOMAIN'); - $endpoint = $protocol . '://' . $hostname . "/v1"; - // Appwrite vars $vars = \array_merge($vars, [ - 'APPWRITE_FUNCTION_API_ENDPOINT' => $endpoint, + 'APPWRITE_FUNCTION_API_ENDPOINT' => $platform['endpoint'], 'APPWRITE_FUNCTION_ID' => $functionId, 'APPWRITE_FUNCTION_NAME' => $function->getAttribute('name'), 'APPWRITE_FUNCTION_DEPLOYMENT' => $deployment->getId(), diff --git a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php index ec2a4baac5..09d471515d 100644 --- a/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php +++ b/src/Appwrite/Platform/Modules/Functions/Http/Functions/Create.php @@ -362,8 +362,9 @@ class Create extends Base if (!empty($functionsDomain)) { $routeSubdomain = ID::unique(); $domain = "{$routeSubdomain}.{$functionsDomain}"; - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain) : ID::unique(); $rule = Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ diff --git a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php index d46a3b4986..43e28b011b 100644 --- a/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php +++ b/src/Appwrite/Platform/Modules/Functions/Workers/Builds.php @@ -129,6 +129,8 @@ class Builds extends Action $resource = new Document($payload['resource'] ?? []); $deployment = new Document($payload['deployment'] ?? []); $template = new Document($payload['template'] ?? []); + $platform = $payload['platform'] ?? []; + $log->addTag('projectId', $project->getId()); $log->addTag('type', $type); @@ -157,7 +159,8 @@ class Builds extends Action $isResourceBlocked, $log, $executor, - $plan + $plan, + $platform ); break; @@ -209,7 +212,8 @@ class Builds extends Action callable $isResourceBlocked, Log $log, Executor $executor, - array $plan + array $plan, + array $platform ): void { Console::info('Deployment action started'); @@ -532,7 +536,7 @@ class Builds extends Action Console::log('Git source uploaded'); - $this->runGitAction('processing', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime); + $this->runGitAction('processing', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime, $platform); } Console::log('Status marked as building'); @@ -550,7 +554,7 @@ class Builds extends Action ->trigger(); if ($isVcsEnabled) { - $this->runGitAction('building', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime); + $this->runGitAction('building', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime, $platform); } $deploymentModel = new Deployment(); @@ -612,10 +616,6 @@ class Builds extends Action 'scopes' => $resource->getAttribute('scopes', []) ]); - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_DOMAIN'); - $endpoint = $protocol . '://' . $hostname . "/v1"; - // Appwrite vars $vars = \array_merge($vars, [ 'APPWRITE_VERSION' => APP_VERSION_STABLE, @@ -639,7 +639,7 @@ class Builds extends Action case 'functions': $vars = [ ...$vars, - 'APPWRITE_FUNCTION_API_ENDPOINT' => $endpoint, + 'APPWRITE_FUNCTION_API_ENDPOINT' => $platform['endpoint'], 'APPWRITE_FUNCTION_API_KEY' => API_KEY_DYNAMIC . '_' . $apiKey, 'APPWRITE_FUNCTION_ID' => $resource->getId(), 'APPWRITE_FUNCTION_NAME' => $resource->getAttribute('name'), @@ -654,7 +654,7 @@ class Builds extends Action case 'sites': $vars = [ ...$vars, - 'APPWRITE_SITE_API_ENDPOINT' => $endpoint, + 'APPWRITE_SITE_API_ENDPOINT' => $platform['endpoint'], 'APPWRITE_SITE_API_KEY' => API_KEY_DYNAMIC . '_' . $apiKey, 'APPWRITE_SITE_ID' => $resource->getId(), 'APPWRITE_SITE_NAME' => $resource->getAttribute('name'), @@ -1108,7 +1108,7 @@ class Builds extends Action } if ($isVcsEnabled) { - $this->runGitAction('ready', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime); + $this->runGitAction('ready', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime, $platform); } /** Set auto deploy */ @@ -1337,7 +1337,7 @@ class Builds extends Action ->trigger(); if ($isVcsEnabled) { - $this->runGitAction('failed', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime); + $this->runGitAction('failed', $github, $providerCommitHash, $owner, $repositoryName, $project, $resource, $deployment->getId(), $dbForProject, $dbForPlatform, $queueForRealtime, $platform); } } finally { $queueForRealtime @@ -1489,6 +1489,8 @@ class Builds extends Action * @param string $deploymentId * @param Database $dbForProject * @param Database $dbForPlatform + * @param Realtime $queueForRealtime + * @param array $platform * @return void * @throws Structure * @throws \Utopia\Database\Exception @@ -1508,6 +1510,7 @@ class Builds extends Action Database $dbForProject, Database $dbForPlatform, Realtime $queueForRealtime, + array $platform ): void { try { if ($resource->getAttribute('providerSilentMode', false) === true) { @@ -1593,7 +1596,7 @@ class Builds extends Action default => throw new \Exception('Invalid resource type') }; - $comment = new Comment(); + $comment = new Comment($platform); $comment->parseComment($github->getComment($owner, $repositoryName, $commentId)); $comment->addBuild($project, $resource, $resourceType, $status, $deployment->getId(), ['type' => 'logs'], $previewUrl); $github->updateComment($owner, $repositoryName, $commentId, $comment->generateComment()); diff --git a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/API/Create.php b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/API/Create.php index ff92b3a408..e6805f0759 100644 --- a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/API/Create.php +++ b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/API/Create.php @@ -67,11 +67,13 @@ class Create extends Action ->inject('queueForCertificates') ->inject('queueForEvents') ->inject('dbForPlatform') + ->inject('platform') ->callback($this->action(...)); } - public function action(string $domain, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform) + public function action(string $domain, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, array $platform) { + $domains = $platform['hostnames'] ?? []; $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); @@ -90,13 +92,7 @@ class Create extends Action throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'This domain name is not allowed. Please use a different domain.'); } - $deniedDomains = [ - 'localhost', - APP_HOSTNAME_INTERNAL - ]; - - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - $deniedDomains[] = $mainDomain; + $deniedDomains = [...$domains]; if (!empty($sitesDomain)) { $deniedDomains[] = $sitesDomain; @@ -125,8 +121,9 @@ class Create extends Action throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'Domain may not start with http:// or https://.'); } - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain->get()) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); $status = 'created'; if (\str_ends_with($domain->get(), $functionsDomain) || \str_ends_with($domain->get(), $sitesDomain)) { diff --git a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Function/Create.php b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Function/Create.php index 6e6d9905a8..575ac9b832 100644 --- a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Function/Create.php +++ b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Function/Create.php @@ -72,11 +72,13 @@ class Create extends Action ->inject('queueForEvents') ->inject('dbForPlatform') ->inject('dbForProject') + ->inject('platform') ->callback($this->action(...)); } - public function action(string $domain, string $functionId, string $branch, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, Database $dbForProject) + public function action(string $domain, string $functionId, string $branch, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, Database $dbForProject, array $platform) { + $domains = $platform['hostnames'] ?? []; $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); @@ -95,13 +97,7 @@ class Create extends Action throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'This domain name is not allowed. Please use a different domain.'); } - $deniedDomains = [ - 'localhost', - APP_HOSTNAME_INTERNAL - ]; - - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - $deniedDomains[] = $mainDomain; + $deniedDomains = [...$domains]; if (!empty($sitesDomain)) { $deniedDomains[] = $sitesDomain; @@ -137,8 +133,9 @@ class Create extends Action $deployment = $dbForProject->getDocument('deployments', $function->getAttribute('deploymentId', '')); - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain->get()) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); $status = 'created'; if (\str_ends_with($domain->get(), $functionsDomain) || \str_ends_with($domain->get(), $sitesDomain)) { diff --git a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Redirect/Create.php b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Redirect/Create.php index e2cc51d91f..50b1a4e2df 100644 --- a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Redirect/Create.php +++ b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Redirect/Create.php @@ -75,11 +75,13 @@ class Create extends Action ->inject('queueForEvents') ->inject('dbForPlatform') ->inject('dbForProject') + ->inject('platform') ->callback($this->action(...)); } - public function action(string $domain, string $url, int $statusCode, string $resourceId, string $resourceType, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, Database $dbForProject) + public function action(string $domain, string $url, int $statusCode, string $resourceId, string $resourceType, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, Database $dbForProject, array $platform) { + $domains = $platform['hostnames'] ?? []; $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); @@ -98,13 +100,7 @@ class Create extends Action throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'This domain name is not allowed. Please use a different domain.'); } - $deniedDomains = [ - 'localhost', - APP_HOSTNAME_INTERNAL - ]; - - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - $deniedDomains[] = $mainDomain; + $deniedDomains = [...$domains]; if (!empty($sitesDomain)) { $deniedDomains[] = $sitesDomain; @@ -142,8 +138,9 @@ class Create extends Action throw new Exception(Exception::RULE_RESOURCE_NOT_FOUND); } - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain->get()) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); $status = 'created'; if (\str_ends_with($domain->get(), $functionsDomain) || \str_ends_with($domain->get(), $sitesDomain)) { diff --git a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Site/Create.php b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Site/Create.php index 5154a82e16..2071477eec 100644 --- a/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Site/Create.php +++ b/src/Appwrite/Platform/Modules/Proxy/Http/Rules/Site/Create.php @@ -72,11 +72,13 @@ class Create extends Action ->inject('queueForEvents') ->inject('dbForPlatform') ->inject('dbForProject') + ->inject('platform') ->callback($this->action(...)); } - public function action(string $domain, string $siteId, string $branch, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, Database $dbForProject) + public function action(string $domain, string $siteId, string $branch, Response $response, Document $project, Certificate $queueForCertificates, Event $queueForEvents, Database $dbForPlatform, Database $dbForProject, array $platform) { + $domains = $platform['hostnames'] ?? []; $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); @@ -95,13 +97,7 @@ class Create extends Action throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, 'This domain name is not allowed. Please use a different domain.'); } - $deniedDomains = [ - 'localhost', - APP_HOSTNAME_INTERNAL - ]; - - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - $deniedDomains[] = $mainDomain; + $deniedDomains = [...$domains]; if (!empty($sitesDomain)) { $deniedDomains[] = $sitesDomain; @@ -137,8 +133,9 @@ class Create extends Action $deployment = $dbForProject->getDocument('deployments', $site->getAttribute('deploymentId', '')); - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain->get()) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain->get()) : ID::unique(); $status = 'created'; if (\str_ends_with($domain->get(), $functionsDomain) || \str_ends_with($domain->get(), $sitesDomain)) { diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php index aa622d8d84..7d4717c205 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Create.php @@ -272,8 +272,9 @@ class Create extends Action $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $domain = ID::unique() . "." . $sitesDomain; - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain) : ID::unique(); Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Duplicate/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Duplicate/Create.php index 065dd13e88..f80f643fae 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Duplicate/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Duplicate/Create.php @@ -143,8 +143,9 @@ class Create extends Action $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); $domain = ID::unique() . "." . $sitesDomain; - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - $ruleId = System::getEnv('_APP_RULES_FORMAT') === 'md5' ? md5($domain) : ID::unique(); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $ruleId = $isMd5 ? md5($domain) : ID::unique(); Authorization::skip( fn () => $dbForPlatform->createDocument('rules', new Document([ diff --git a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php index dc7d4c4ace..480a0cae3b 100644 --- a/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php +++ b/src/Appwrite/Platform/Modules/Sites/Http/Deployments/Template/Create.php @@ -53,7 +53,7 @@ class Create extends Base name: 'createTemplateDeployment', description: << $dbForPlatform->createDocument('rules', new Document([ diff --git a/src/Appwrite/Platform/Tasks/Maintenance.php b/src/Appwrite/Platform/Tasks/Maintenance.php index f5785d0bb4..9c88bc4d4e 100644 --- a/src/Appwrite/Platform/Tasks/Maintenance.php +++ b/src/Appwrite/Platform/Tasks/Maintenance.php @@ -129,15 +129,16 @@ class Maintenance extends Action if (\count($certificates) > 0) { Console::info("[{$time}] Found " . \count($certificates) . " certificates for renewal, scheduling jobs."); + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + foreach ($certificates as $certificate) { $domain = $certificate->getAttribute('domain'); - if (System::getEnv('_APP_RULES_FORMAT') === 'md5') { - $rule = $dbForPlatform->getDocument('rules', md5($domain)); - } else { - $rule = $dbForPlatform->findOne('rules', [ + $rule = $isMd5 + ? $dbForPlatform->getDocument('rules', md5($domain)) + : $dbForPlatform->findOne('rules', [ Query::equal('domain', [$domain]), ]); - } if ($rule->isEmpty() || $rule->getAttribute('region') !== System::getEnv('_APP_REGION', 'default')) { continue; diff --git a/src/Appwrite/Platform/Tasks/SDKs.php b/src/Appwrite/Platform/Tasks/SDKs.php index d3c605655f..b1dcc522e6 100644 --- a/src/Appwrite/Platform/Tasks/SDKs.php +++ b/src/Appwrite/Platform/Tasks/SDKs.php @@ -107,7 +107,7 @@ class SDKs extends Action throw new \Exception('Unknown version given'); } - $platforms = Config::getParam('platforms'); + $platforms = Config::getParam('sdks'); foreach ($platforms as $key => $platform) { if ($selectedPlatform !== $key && $selectedPlatform !== '*' && ($sdks === null)) { continue; diff --git a/src/Appwrite/Platform/Tasks/Screenshot.php b/src/Appwrite/Platform/Tasks/Screenshot.php index 94609de01e..7ad95c6e72 100644 --- a/src/Appwrite/Platform/Tasks/Screenshot.php +++ b/src/Appwrite/Platform/Tasks/Screenshot.php @@ -3,6 +3,7 @@ namespace Appwrite\Platform\Tasks; // Example usage: docker compose exec appwrite screenshot --templateId="playground-for-tanstack-start" +// Example of env vars flag: --variables="{\"VITE_FORMSPREE_FORM_ID\":\"xvgkbzll\", \"VITE_FORMSPREE_FORM_SECRET\":\"some_secret\"}" // Expected output: public/images/sites/templates/playground-for-tanstack-start-light.png (and dark.png) use Appwrite\ID; @@ -10,6 +11,7 @@ use Tests\E2E\Client; use Utopia\CLI\Console; use Utopia\Config\Config; use Utopia\Platform\Action; +use Utopia\System\System; use Utopia\Validator\Text; class Screenshot extends Action @@ -24,11 +26,24 @@ class Screenshot extends Action $this ->desc('Create Site template screenshot') ->param('templateId', '', new Text(128), 'Template ID.') + ->param('variables', '', new Text(16384), 'JSON of env variables to use when setting up the site.') ->callback($this->action(...)); } - public function action(string $templateId): void + public function action(string $templateId, string $variables): void { + if (empty($variables)) { + $variables = []; + } else { + $variables = \json_decode($variables, true); + if (!\is_array($variables)) { + throw new \Exception('Invalid JSON in --variables flag'); + } + } + if ($variables === null) { + throw new \Exception('Invalid JSON in --variables flag'); + } + $templates = Config::getParam('templates-site', []); $allowedTemplates = \array_filter($templates, function ($item) use ($templateId) { @@ -133,6 +148,11 @@ class Screenshot extends Action $framework = $template['frameworks'][0]; + // Use best specifications to prevent out-of-memory during build + $specifications = Config::getParam('specifications', []); + $specifications = array_keys($specifications); + $specification = \end($specifications); + // Create site $site = $client->call(Client::METHOD_POST, '/sites', [ 'content-type' => 'application/json', @@ -141,6 +161,7 @@ class Screenshot extends Action 'cookie' => $cookieConsole ], [ 'siteId' => ID::unique(), + 'specification' => $specification, 'name' => $template["name"], 'framework' => $framework['key'], 'adapter' => $framework['adapter'], @@ -162,21 +183,48 @@ class Screenshot extends Action $siteId = $site['body']['$id']; + // Prepare API key, incase it's needed as variable + $response = $client->call(Client::METHOD_POST, '/projects/' . $projectId . '/keys', [ + 'content-type' => 'application/json', + 'x-appwrite-project' => 'console', + 'cookie' => $cookieConsole + ], [ + 'name' => 'Screenshot API key', + 'scopes' => \array_keys(Config::getParam('scopes', [])) + ]); + + if ($response['headers']['status-code'] !== 201) { + Console::error(\json_encode($response)); + throw new \Exception("Failed to create API key"); + } + + $apiKey = $response['body']['secret']; + + Console::info("API key created"); + + $variables['APPWRITE_API_KEY'] = $apiKey; + // Create variables if (!empty($template['variables'] ?? [])) { foreach ($template['variables'] as $variable) { - if (empty($variable['value'] ?? '')) { - if (($variable['required'] ?? false) === true) { - throw new \Exception("Missing required variable: {$variable['name']}"); - } - - continue; - } + $name = $variable['name']; $value = $variable['value']; $value = \str_replace('{projectName}', $projectName, $value); $value = \str_replace('{projectId}', $projectId, $value); - $value = \str_replace('{apiEndpoint}', 'http://localhost/v1', $value); + $value = \str_replace('{apiEndpoint}', 'http://' . System::getEnv('_APP_DOMAIN', '') . '/v1', $value); + + if (\array_key_exists($name, $variables)) { + $value = $variables[$name]; + } + + if (empty($value)) { + if (($variable['required'] ?? false) === true) { + throw new \Exception("Missing required variable: {$variable['name']}. Provide it using the --variables flag to resolve this."); + } + + continue; + } $response = $client->call(Client::METHOD_POST, '/sites/' . $siteId . '/variables', [ 'content-type' => 'application/json', @@ -207,7 +255,8 @@ class Screenshot extends Action 'owner' => $template['providerOwner'], 'repository' => $template['providerRepositoryId'], 'rootDirectory' => $framework['providerRootDirectory'], - 'version' => $template['providerVersion'], + 'reference' => $template['providerVersion'], + 'type' => 'tag', 'activate' => true, ]); diff --git a/src/Appwrite/Platform/Workers/Certificates.php b/src/Appwrite/Platform/Workers/Certificates.php index ac3deb31af..9dc6322163 100644 --- a/src/Appwrite/Platform/Workers/Certificates.php +++ b/src/Appwrite/Platform/Workers/Certificates.php @@ -430,14 +430,13 @@ class Certificates extends Action Func $queueForFunctions, Realtime $queueForRealtime ): void { - // TODO: @christyjacob remove once we migrate the rules in 1.7.x - if (System::getEnv('_APP_RULES_FORMAT') === 'md5') { - $rule = $dbForPlatform->getDocument('rules', md5($domain)); - } else { - $rule = $dbForPlatform->findOne('rules', [ + // TODO: (@Meldiron) Remove after 1.7.x migration + $isMd5 = System::getEnv('_APP_RULES_FORMAT') === 'md5'; + $rule = $isMd5 + ? $dbForPlatform->getDocument('rules', md5($domain)) + : $dbForPlatform->findOne('rules', [ Query::equal('domain', [$domain]), ]); - } if (!$rule->isEmpty()) { $rule->setAttribute('certificateId', $certificateId); diff --git a/src/Appwrite/Platform/Workers/Functions.php b/src/Appwrite/Platform/Workers/Functions.php index df1833ad33..4922ce0372 100644 --- a/src/Appwrite/Platform/Workers/Functions.php +++ b/src/Appwrite/Platform/Workers/Functions.php @@ -87,6 +87,7 @@ class Functions extends Action $events = $payload['events'] ?? []; $data = $payload['body'] ?? ''; $eventData = $payload['payload'] ?? ''; + $platform = $payload['platform'] ?? ''; $function = new Document($payload['function'] ?? []); $functionId = $payload['functionId'] ?? ''; $user = new Document($payload['user'] ?? []); @@ -166,6 +167,7 @@ class Functions extends Action 'user-agent' => 'Appwrite/' . APP_VERSION_STABLE, 'content-type' => 'application/json' ], + platform: $platform, data: null, user: $user, jwt: null, @@ -206,6 +208,7 @@ class Functions extends Action path: $path, method: $method, headers: $headers, + platform: $platform, data: $data, user: $user, jwt: $jwt, @@ -231,6 +234,7 @@ class Functions extends Action path: $path, method: $method, headers: $headers, + platform: $platform, data: $data, user: $user, jwt: $jwt, @@ -346,6 +350,7 @@ class Functions extends Action string $path, string $method, array $headers, + array $platform, string $data = null, ?Document $user = null, string $jwt = null, @@ -486,13 +491,9 @@ class Functions extends Action $vars[$var->getAttribute('key')] = $var->getAttribute('value', ''); } - $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_DOMAIN'); - $endpoint = $protocol . '://' . $hostname . "/v1"; - // Appwrite vars $vars = \array_merge($vars, [ - 'APPWRITE_FUNCTION_API_ENDPOINT' => $endpoint, + 'APPWRITE_FUNCTION_API_ENDPOINT' => $platform['endpoint'], 'APPWRITE_FUNCTION_ID' => $functionId, 'APPWRITE_FUNCTION_NAME' => $function->getAttribute('name'), 'APPWRITE_FUNCTION_DEPLOYMENT' => $deploymentId, diff --git a/src/Appwrite/Platform/Workers/Mails.php b/src/Appwrite/Platform/Workers/Mails.php index 5664628754..ccc665ad85 100644 --- a/src/Appwrite/Platform/Workers/Mails.php +++ b/src/Appwrite/Platform/Workers/Mails.php @@ -71,7 +71,7 @@ class Mails extends Action $log->addTag('type', empty($smtp) ? 'cloud' : 'smtp'); $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') == 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_DOMAIN'); + $hostname = System::getEnv('_APP_CONSOLE_DOMAIN'); $recipient = $payload['recipient']; $subject = $payload['subject']; diff --git a/src/Appwrite/Platform/Workers/Migrations.php b/src/Appwrite/Platform/Workers/Migrations.php index e7b12c5d9d..a10ddc4904 100644 --- a/src/Appwrite/Platform/Workers/Migrations.php +++ b/src/Appwrite/Platform/Workers/Migrations.php @@ -52,6 +52,8 @@ class Migrations extends Action protected array $plan; + protected array $platform; + /** * @var array */ @@ -106,6 +108,7 @@ class Migrations extends Action $this->deviceForMigrations = $deviceForMigrations; $this->deviceForFiles = $deviceForFiles; $this->plan = $plan; + $this->platform = $payload['platform'] ?? []; if (empty($payload)) { throw new Exception('Missing payload'); @@ -141,6 +144,7 @@ class Migrations extends Action $credentials = $migration->getAttribute('credentials'); $migrationOptions = $migration->getAttribute('options'); $dataSource = Appwrite::SOURCE_API; + $endpoint = $this->platform['endpoint'] ?: ($credentials['endpoint'] ?? 'http://appwrite.test/v1'); $database = null; $queries = []; @@ -174,7 +178,7 @@ class Migrations extends Action ), SourceAppwrite::getName() => new SourceAppwrite( $credentials['projectId'], - $credentials['endpoint'] === 'http://localhost/v1' ? 'http://appwrite/v1' : $credentials['endpoint'], + $endpoint, $credentials['apiKey'], $dataSource, $database, @@ -205,7 +209,7 @@ class Migrations extends Action return match ($destination) { DestinationAppwrite::getName() => new DestinationAppwrite( $this->project->getId(), - 'http://appwrite/v1', + $this->platform['endpoint'], $apiKey, $this->dbForProject, Config::getParam('collections', [])['databases']['collections'], @@ -309,7 +313,7 @@ class Migrations extends Action ) { $credentials = $migration->getAttribute('credentials', []); $credentials['projectId'] = $credentials['projectId'] ?? $project->getId(); - $credentials['endpoint'] = $credentials['endpoint'] ?? 'http://appwrite/v1'; + $credentials['endpoint'] = $credentials['endpoint'] ?? $this->platform['endpoint']; $credentials['apiKey'] = $credentials['apiKey'] ?? $tempAPIKey; $migration->setAttribute('credentials', $credentials); } diff --git a/src/Appwrite/SDK/Method.php b/src/Appwrite/SDK/Method.php index 8d11b07198..3cf96b5413 100644 --- a/src/Appwrite/SDK/Method.php +++ b/src/Appwrite/SDK/Method.php @@ -31,6 +31,7 @@ class Method * @param array $parameters * @param array $additionalParameters * @param string $desc + * @param bool $public Whether this method should be rendered on the website/documentation */ public function __construct( protected string $namespace, @@ -47,7 +48,8 @@ class Method protected ContentType $requestType = ContentType::JSON, protected array $parameters = [], protected array $additionalParameters = [], - protected string $desc = '' + protected string $desc = '', + protected bool $public = true ) { $this->validateMethod($name, $namespace); $this->validateAuthTypes($auth); @@ -307,6 +309,17 @@ class Method return $this; } + public function isPublic(): bool + { + return $this->public; + } + + public function setPublic(bool $public): self + { + $this->public = $public; + return $this; + } + public static function getErrors(): array { return self::$errors; diff --git a/src/Appwrite/SDK/Specification/Format/OpenAPI3.php b/src/Appwrite/SDK/Specification/Format/OpenAPI3.php index bfa33e19f3..e5790484c1 100644 --- a/src/Appwrite/SDK/Specification/Format/OpenAPI3.php +++ b/src/Appwrite/SDK/Specification/Format/OpenAPI3.php @@ -165,7 +165,8 @@ class OpenAPI3 extends Format 'rate-key' => $route->getLabel('abuse-key', 'url:{url},ip:{ip}'), 'scope' => $route->getLabel('scope', ''), 'platforms' => $sdkPlatforms, - 'packaging' => $sdk->isPackaging() + 'packaging' => $sdk->isPackaging(), + 'public' => $sdk->isPublic(), ], ]; @@ -225,6 +226,7 @@ class OpenAPI3 extends Format 'responses' => [], 'description' => ($desc) ? \file_get_contents($desc) : '', 'demo' => \strtolower($namespace) . '/' . Template::fromCamelCaseToDash($methodObj->getMethodName()) . '.md', + 'public' => $methodObj->isPublic(), ]; // add deprecation only if method has it! diff --git a/src/Appwrite/SDK/Specification/Format/Swagger2.php b/src/Appwrite/SDK/Specification/Format/Swagger2.php index b0deb034b4..51b972ca0b 100644 --- a/src/Appwrite/SDK/Specification/Format/Swagger2.php +++ b/src/Appwrite/SDK/Specification/Format/Swagger2.php @@ -170,6 +170,7 @@ class Swagger2 extends Format 'scope' => $route->getLabel('scope', ''), 'platforms' => $sdkPlatforms, 'packaging' => $sdk->isPackaging(), + 'public' => $sdk->isPublic(), ], ]; @@ -234,6 +235,7 @@ class Swagger2 extends Format 'responses' => [], 'description' => ($desc) ? \file_get_contents($desc) : '', 'demo' => \strtolower($namespace) . '/' . Template::fromCamelCaseToDash($methodObj->getMethodName()) . '.md', + 'public' => $methodObj->isPublic(), ]; // add deprecation only if method has it! diff --git a/src/Appwrite/Vcs/Comment.php b/src/Appwrite/Vcs/Comment.php index 57a36ec164..90f9c8f95d 100644 --- a/src/Appwrite/Vcs/Comment.php +++ b/src/Appwrite/Vcs/Comment.php @@ -9,6 +9,11 @@ use Utopia\System\System; class Comment { + public function __construct( + private array $platform + ) { + } + // TODO: Add more tips protected array $tips = [ 'Appwrite has crossed the 50K GitHub stars milestone with hundreds of active contributors', @@ -114,7 +119,7 @@ class Comment $i = 0; foreach ($projects as $projectId => $project) { $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $hostname = $this->platform['consoleHostname'] ?? ''; $text .= "## {$project['name']}\n\n"; $text .= "Project ID: `{$projectId}`\n\n"; @@ -228,7 +233,7 @@ class Comment public function generatImage(string $pathLight, string $pathDark, string $alt, int $width): string { $protocol = System::getEnv('_APP_OPTIONS_FORCE_HTTPS') === 'disabled' ? 'http' : 'https'; - $hostname = System::getEnv('_APP_CONSOLE_DOMAIN', System::getEnv('_APP_DOMAIN', '')); + $hostname = $this->platform['consoleHostname'] ?? ''; $imageLight = $protocol . '://' . $hostname . $pathLight; $imageDark = $protocol . '://' . $hostname . $pathDark; diff --git a/src/Executor/Executor.php b/src/Executor/Executor.php index 30c6132b76..c891fb82e0 100644 --- a/src/Executor/Executor.php +++ b/src/Executor/Executor.php @@ -200,10 +200,6 @@ class Executor ?int $requestTimeout = null, string $responseFormat = self::RESPONSE_FORMAT_OBJECT_HEADERS ) { - if (empty($headers['host'])) { - $headers['host'] = System::getEnv('_APP_DOMAIN', ''); - } - $runtimeId = "$projectId-$deploymentId"; $route = '/runtimes/' . $runtimeId . '/executions'; diff --git a/tests/e2e/General/CompressionTest.php b/tests/e2e/General/CompressionTest.php index 9affacfe0a..cff23b1201 100644 --- a/tests/e2e/General/CompressionTest.php +++ b/tests/e2e/General/CompressionTest.php @@ -75,7 +75,9 @@ class CompressionTest extends Scope $this->assertEquals(200, $response['headers']['status-code']); $this->assertArrayHasKey('content-encoding', $response['headers'], 'Content encoding should be gzip, headers received: ' . json_encode($response['headers'], JSON_PRETTY_PRINT)); - $this->assertLessThan(2000, intval($response['headers']['content-length'])); + $this->assertArrayHasKey('content-length', $response['headers'], 'Compressed response should provide content length, headers received: ' . json_encode($response['headers'], JSON_PRETTY_PRINT)); + $this->assertLessThan(2000, \intval($response['headers']['content-length'])); + $this->assertArrayNotHasKey('transfer-encoding', $response['headers'], 'Compressed response should not be chunked, headers received: ' . json_encode($response['headers'], JSON_PRETTY_PRINT)); // get prefs without compression $response = $this->client->call(Client::METHOD_GET, '/users/' . $userId . '/prefs', array_merge([ @@ -83,8 +85,15 @@ class CompressionTest extends Scope ], $this->getHeaders())); $this->assertEquals(200, $response['headers']['status-code']); - $this->assertGreaterThanOrEqual(2000, intval($response['headers']['content-length'])); $this->assertArrayNotHasKey('content-encoding', $response['headers']); + $this->assertEquals('chunked', $response['headers']['transfer-encoding'] ?? null, 'Uncompressed response should use chunked transfer, headers received: ' . json_encode($response['headers'], JSON_PRETTY_PRINT)); + $this->assertArrayNotHasKey('content-length', $response['headers'], 'Uncompressed response should not send content length when chunked.'); + + $this->assertArrayHasKey('longValue', $response['body'], 'Prefs payload should expose longValue at the top level, body received: ' . json_encode($response['body'], JSON_PRETTY_PRINT)); + + $prefsPayload = $response['body']['longValue']; + $payloadLength = \strlen($prefsPayload); + $this->assertGreaterThanOrEqual(2000, $payloadLength, 'Prefs payload should be at least 2000 bytes.'); } public function testImageResponse() diff --git a/tests/e2e/General/HTTPTest.php b/tests/e2e/General/HTTPTest.php index 4657e6f2ad..35d7ad0919 100644 --- a/tests/e2e/General/HTTPTest.php +++ b/tests/e2e/General/HTTPTest.php @@ -15,7 +15,7 @@ class HTTPTest extends Scope public function setUp(): void { parent::setUp(); - $this->client->setEndpoint('http://traefik'); + $this->client->setEndpoint('http://appwrite.test'); } public function testOptions() @@ -31,7 +31,7 @@ class HTTPTest extends Scope $this->assertEquals(204, $response['headers']['status-code']); $this->assertEquals('Appwrite', $response['headers']['server']); $this->assertEquals('GET, POST, PUT, PATCH, DELETE', $response['headers']['access-control-allow-methods']); - $this->assertEquals('Origin, Cookie, Set-Cookie, X-Requested-With, Content-Type, Access-Control-Allow-Origin, Access-Control-Request-Headers, Accept, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Dev-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, X-Appwrite-ID, X-Appwrite-Timestamp, Content-Range, Range, Cache-Control, Expires, Pragma, X-Appwrite-Session, X-Fallback-Cookies, X-Forwarded-For, X-Forwarded-User-Agent', $response['headers']['access-control-allow-headers']); + $this->assertEquals('Accept, Origin, Cookie, Set-Cookie, Content-Type, Content-Range, X-Appwrite-Project, X-Appwrite-Key, X-Appwrite-Dev-Key, X-Appwrite-Locale, X-Appwrite-Mode, X-Appwrite-JWT, X-Appwrite-Response-Format, X-Appwrite-Timeout, X-Appwrite-ID, X-Appwrite-Timestamp, X-Appwrite-Session, X-SDK-Version, X-SDK-Name, X-SDK-Language, X-SDK-Platform, X-SDK-GraphQL, Range, Cache-Control, Expires, Pragma, X-Fallback-Cookies, X-Requested-With, X-Forwarded-For, X-Forwarded-User-Agent', $response['headers']['access-control-allow-headers']); $this->assertEquals('X-Appwrite-Session, X-Fallback-Cookies', $response['headers']['access-control-expose-headers']); $this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']); $this->assertEquals('true', $response['headers']['access-control-allow-credentials']); @@ -66,16 +66,10 @@ class HTTPTest extends Scope public function testAcmeChallenge() { - // Preparation - $previousEndpoint = $this->client->getEndpoint(); - $this->client->setEndpoint("http://localhost"); - /** * Test for SUCCESS */ - $response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/8DdIKX257k6Dih5s_saeVMpTnjPJdKO5Ase0OCiJrIg', \array_merge([ - 'origin' => 'http://localhost', - ])); + $response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/8DdIKX257k6Dih5s_saeVMpTnjPJdKO5Ase0OCiJrIg'); // 'Unknown path', but validation passed $this->assertEquals(404, $response['headers']['status-code']); @@ -83,15 +77,10 @@ class HTTPTest extends Scope /** * Test for FAILURE */ - $response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/../../../../../../../etc/passwd', \array_merge([ - 'origin' => 'http://localhost', - ])); + $response = $this->client->call(Client::METHOD_GET, '/.well-known/acme-challenge/../../../../../../../etc/passwd'); - // Check for too many path segments - $this->assertEquals(400, $response['headers']['status-code']); - - // Cleanup - $this->client->setEndpoint($previousEndpoint); + // 'Unknown path', but validation passed + $this->assertEquals(404, $response['headers']['status-code']); } public function testSpecs() @@ -172,48 +161,30 @@ class HTTPTest extends Scope public function testCors() { - /** - * Test for SUCCESS - */ $endpoint = '/v1/projects'; // Can be any non-404 route - $response = $this->client->call(Client::METHOD_GET, $endpoint); - - $this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']); - + /** + * Test for SUCCESS + */ $response = $this->client->call(Client::METHOD_GET, $endpoint, [ 'origin' => 'http://localhost', ]); - $this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']); - $response = $this->client->call(Client::METHOD_GET, $endpoint, [ - 'origin' => 'http://appwrite.io', - ]); - - $this->assertEquals('http://appwrite.io', $response['headers']['access-control-allow-origin']); - - $response = $this->client->call(Client::METHOD_GET, $endpoint, [ - 'origin' => 'https://appwrite.io', - ]); - - $this->assertEquals('https://appwrite.io', $response['headers']['access-control-allow-origin']); - - $response = $this->client->call(Client::METHOD_GET, $endpoint, [ - 'origin' => 'http://cloud.appwrite.io', - ]); - - $this->assertEquals('http://cloud.appwrite.io', $response['headers']['access-control-allow-origin']); - /** * Test for FAILURE */ + // you should not return a fallback origin for a no host + $response = $this->client->call(Client::METHOD_GET, $endpoint); + $this->assertNull($response['headers']['access-control-allow-origin'] ?? null); + + // you should not return a fallback origin for a no host $response = $this->client->call(Client::METHOD_GET, $endpoint, [ 'origin' => 'http://google.com', ]); + $this->assertNull($response['headers']['access-control-allow-origin'] ?? null); - $this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']); } public function testConsoleRedirect() diff --git a/tests/e2e/General/HooksTest.php b/tests/e2e/General/HooksTest.php index af6ccab0d5..1e7d87608f 100644 --- a/tests/e2e/General/HooksTest.php +++ b/tests/e2e/General/HooksTest.php @@ -17,7 +17,7 @@ class HooksTest extends Scope public function setUp(): void { parent::setUp(); - $this->client->setEndpoint('http://traefik'); + $this->client->setEndpoint('http://appwrite.test'); } public function testProjectHooks() diff --git a/tests/e2e/Scopes/Scope.php b/tests/e2e/Scopes/Scope.php index 5b7f1a8771..8731a29672 100644 --- a/tests/e2e/Scopes/Scope.php +++ b/tests/e2e/Scopes/Scope.php @@ -18,7 +18,7 @@ abstract class Scope extends TestCase public const REQUEST_TYPE_SMS = 'sms'; protected ?Client $client = null; - protected string $endpoint = 'http://localhost/v1'; + protected string $endpoint = 'http://appwrite.test/v1'; protected function setUp(): void { diff --git a/tests/e2e/Services/Account/AccountBase.php b/tests/e2e/Services/Account/AccountBase.php index b217608395..13b5015241 100644 --- a/tests/e2e/Services/Account/AccountBase.php +++ b/tests/e2e/Services/Account/AccountBase.php @@ -50,21 +50,6 @@ trait AccountBase /** * Test for FAILURE */ - // Deny request from blocked IP - $response = $this->client->call(Client::METHOD_POST, '/account', array_merge([ - 'origin' => 'http://localhost', - 'content-type' => 'application/json', - 'x-appwrite-project' => 'console', - 'x-forwarded-for' => '31.6.14.220' // Test IP for denied access region - ]), [ - 'userId' => ID::unique(), - 'email' => $email, - 'password' => $password, - 'name' => $name, - ]); - - $this->assertEquals(451, $response['headers']['status-code']); - $response = $this->client->call(Client::METHOD_POST, '/account', array_merge([ 'origin' => 'http://localhost', 'content-type' => 'application/json', diff --git a/tests/e2e/Services/Account/AccountCustomClientTest.php b/tests/e2e/Services/Account/AccountCustomClientTest.php index 0163f1b842..457799f991 100644 --- a/tests/e2e/Services/Account/AccountCustomClientTest.php +++ b/tests/e2e/Services/Account/AccountCustomClientTest.php @@ -2130,10 +2130,15 @@ class AccountCustomClientTest extends Scope 'failure' => 'http://localhost/v1/mock/tests/general/oauth2/failure', ]); - $session = $response['cookies']['a_session_' . $this->getProject()['$id']]; - $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals('success', $response['body']['result']); + + $sessionCookieKey = 'a_session_' . $this->getProject()['$id']; + $this->assertArrayHasKey( + $sessionCookieKey, + $response['cookies'], + "Failed asserting that session cookie '$sessionCookieKey' is set. Cookies: " . json_encode($response['cookies']) + ); + $session = $response['cookies'][$sessionCookieKey]; $response = $this->client->call(Client::METHOD_GET, '/account', array_merge([ 'origin' => 'http://localhost', @@ -3090,4 +3095,83 @@ class AccountCustomClientTest extends Scope $this->assertEquals('test-identifier-updated', $response['body']['identifier']); $this->assertEquals(false, $response['body']['expired']); } + + public function testMFARecoveryCodeChallenge(): void + { + // Generate recovery codes using existing authenticated session + $response = $this->client->call(Client::METHOD_POST, '/account/mfa/recovery-codes', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), []); + + $this->assertEquals(201, $response['headers']['status-code']); + $this->assertNotEmpty($response['body']['recoveryCodes']); + $recoveryCodes = $response['body']['recoveryCodes']; + $this->assertGreaterThan(0, count($recoveryCodes)); + + // Create recovery code challenge + $challenge = $this->client->call(Client::METHOD_POST, '/account/mfa/challenge', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'factor' => 'recoveryCode' + ]); + + $this->assertEquals(201, $challenge['headers']['status-code']); + $this->assertNotEmpty($challenge['body']['$id']); + $challengeId = $challenge['body']['$id']; + + // Test SUCCESS: Verify with valid recovery code (this tests the bug fix) + $verification = $this->client->call(Client::METHOD_PUT, '/account/mfa/challenge', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'challengeId' => $challengeId, + 'otp' => $recoveryCodes[0] + ]); + + $this->assertEquals(200, $verification['headers']['status-code']); + $this->assertArrayHasKey('factors', $verification['body']); + $this->assertContains('recoveryCode', $verification['body']['factors']); + + // Test that the code was consumed (can't use again) + $challenge2 = $this->client->call(Client::METHOD_POST, '/account/mfa/challenge', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'factor' => 'recoveryCode' + ]); + + $this->assertEquals(201, $challenge2['headers']['status-code']); + + $verification2 = $this->client->call(Client::METHOD_PUT, '/account/mfa/challenge', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'challengeId' => $challenge2['body']['$id'], + 'otp' => $recoveryCodes[0] // Same code should fail + ]); + + $this->assertEquals(401, $verification2['headers']['status-code']); + + // Test FAILURE: Invalid recovery code + $challenge3 = $this->client->call(Client::METHOD_POST, '/account/mfa/challenge', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'factor' => 'recoveryCode' + ]); + + $this->assertEquals(201, $challenge3['headers']['status-code']); + + $verification3 = $this->client->call(Client::METHOD_PUT, '/account/mfa/challenge', array_merge([ + 'content-type' => 'application/json', + 'x-appwrite-project' => $this->getProject()['$id'], + ], $this->getHeaders()), [ + 'challengeId' => $challenge3['body']['$id'], + 'otp' => 'invalid-code-123' + ]); + + $this->assertEquals(401, $verification3['headers']['status-code']); + } } diff --git a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php index 12981ff262..d43d183e5a 100644 --- a/tests/e2e/Services/Databases/Legacy/DatabasesBase.php +++ b/tests/e2e/Services/Databases/Legacy/DatabasesBase.php @@ -1392,7 +1392,7 @@ trait DatabasesBase ]); $this->assertEquals(400, $unknown['headers']['status-code']); - $this->assertEquals('Unknown attribute: Unknown. Verify the attribute name or create the attribute.', $unknown['body']['message']); + $this->assertEquals('The attribute \'Unknown\' required for the index could not be found. Please confirm all your attributes are in the available state.', $unknown['body']['message']); $index1 = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $data['moviesId'] . '/indexes', array_merge([ 'content-type' => 'application/json', diff --git a/tests/e2e/Services/Databases/Legacy/DatabasesCustomClientTest.php b/tests/e2e/Services/Databases/Legacy/DatabasesCustomClientTest.php index 699a2b8f25..0fe5d21da1 100644 --- a/tests/e2e/Services/Databases/Legacy/DatabasesCustomClientTest.php +++ b/tests/e2e/Services/Databases/Legacy/DatabasesCustomClientTest.php @@ -398,7 +398,7 @@ class DatabasesCustomClientTest extends Scope \sleep(2); $this->assertEquals(409, $relation['body']['code']); - $this->assertEquals('Attribute with the requested key already exists. Attribute keys must be unique, try again with a different key.', $relation['body']['message']); + $this->assertEquals('Attribute with the requested key \'same_key\' already exists. Attribute keys must be unique, try again with a different key.', $relation['body']['message']); // twoWayKey is null TwoWayKey is default $relation = $this->client->call(Client::METHOD_POST, '/databases/' . $databaseId . '/collections/' . $collection1['body']['$id'] . '/attributes/relationship', array_merge([ @@ -433,7 +433,7 @@ class DatabasesCustomClientTest extends Scope \sleep(2); - $this->assertEquals('Attribute with the requested key already exists. Attribute keys must be unique, try again with a different key.', $relation['body']['message']); + $this->assertEquals('Attribute with the requested key \'attr4\' already exists. Attribute keys must be unique, try again with a different key.', $relation['body']['message']); $this->assertEquals(409, $relation['body']['code']); // RelationshipManyToMany diff --git a/tests/e2e/Services/Databases/Legacy/DatabasesCustomServerTest.php b/tests/e2e/Services/Databases/Legacy/DatabasesCustomServerTest.php index ef7091d771..7e960d82d5 100644 --- a/tests/e2e/Services/Databases/Legacy/DatabasesCustomServerTest.php +++ b/tests/e2e/Services/Databases/Legacy/DatabasesCustomServerTest.php @@ -1567,7 +1567,7 @@ class DatabasesCustomServerTest extends Scope ]); $this->assertEquals(400, $tooMany['headers']['status-code']); - $this->assertEquals('Index limit exceeded', $tooMany['body']['message']); + $this->assertEquals("The maximum number of indexes for collection '$collectionId' has been reached.", $tooMany['body']['message']); $collection = $this->client->call(Client::METHOD_DELETE, '/databases/' . $databaseId . '/collections/' . $collectionId, array_merge([ 'content-type' => 'application/json', diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php index f2df01ebb0..e74431c779 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesBase.php @@ -1374,7 +1374,7 @@ trait DatabasesBase ]); $this->assertEquals(400, $unknown['headers']['status-code']); - $this->assertEquals('Unknown column: Unknown. Verify the column name or create the column.', $unknown['body']['message']); + $this->assertEquals('The column \'Unknown\' required for the index could not be found. Please confirm all your columns are in the available state.', $unknown['body']['message']); $index1 = $this->client->call(Client::METHOD_POST, '/tablesdb/' . $databaseId . '/tables/' . $data['moviesId'] . '/indexes', array_merge([ 'content-type' => 'application/json', diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesCustomClientTest.php b/tests/e2e/Services/Databases/TablesDB/DatabasesCustomClientTest.php index f986b5dd03..dc7c3a47b6 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesCustomClientTest.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesCustomClientTest.php @@ -398,7 +398,7 @@ class DatabasesCustomClientTest extends Scope \sleep(2); $this->assertEquals(409, $relation['body']['code']); - $this->assertEquals('Attribute with the requested key already exists. Attribute keys must be unique, try again with a different key.', $relation['body']['message']); + $this->assertEquals('Column with the requested key \'same_key\' already exists. Column keys must be unique, try again with a different key.', $relation['body']['message']); // twoWayKey is null TwoWayKey is default $relation = $this->client->call(Client::METHOD_POST, '/tablesdb/' . $databaseId . '/tables/' . $table1['body']['$id'] . '/columns/relationship', array_merge([ @@ -433,7 +433,7 @@ class DatabasesCustomClientTest extends Scope \sleep(2); - $this->assertEquals('Attribute with the requested key already exists. Attribute keys must be unique, try again with a different key.', $relation['body']['message']); + $this->assertEquals('Column with the requested key \'attr4\' already exists. Column keys must be unique, try again with a different key.', $relation['body']['message']); $this->assertEquals(409, $relation['body']['code']); // RelationshipManyToMany diff --git a/tests/e2e/Services/Databases/TablesDB/DatabasesCustomServerTest.php b/tests/e2e/Services/Databases/TablesDB/DatabasesCustomServerTest.php index 7b84420640..b0b80ce3b6 100644 --- a/tests/e2e/Services/Databases/TablesDB/DatabasesCustomServerTest.php +++ b/tests/e2e/Services/Databases/TablesDB/DatabasesCustomServerTest.php @@ -1496,7 +1496,7 @@ class DatabasesCustomServerTest extends Scope ]); $this->assertEquals(400, $tooMany['headers']['status-code']); - $this->assertEquals('Index limit exceeded', $tooMany['body']['message']); + $this->assertEquals("The maximum number of indexes for table '$tableId' has been reached.", $tooMany['body']['message']); $table = $this->client->call(Client::METHOD_DELETE, '/tablesdb/' . $databaseId . '/tables/' . $tableId, array_merge([ 'content-type' => 'application/json', diff --git a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php index 8cc986b072..35bdf90347 100644 --- a/tests/e2e/Services/Functions/FunctionsCustomServerTest.php +++ b/tests/e2e/Services/Functions/FunctionsCustomServerTest.php @@ -459,7 +459,7 @@ class FunctionsCustomServerTest extends Scope $this->assertEquals("completed", $execution['body']['status']); $this->assertEquals(200, $execution['body']['responseStatusCode']); $this->assertEquals("Pong", $execution['body']['responseBody']); - $this->assertEmpty($execution['body']['errors']); + $this->assertEmpty($execution['body']['errors'], 'Failed to execute function, ' . json_encode($execution['body']['errors'])); // Test execution logged correct total users $users = $this->client->call(Client::METHOD_GET, '/users', array_merge([ diff --git a/tests/e2e/Services/GraphQL/Legacy/AuthTest.php b/tests/e2e/Services/GraphQL/Legacy/AuthTest.php index 560f0693ea..7c1086b075 100644 --- a/tests/e2e/Services/GraphQL/Legacy/AuthTest.php +++ b/tests/e2e/Services/GraphQL/Legacy/AuthTest.php @@ -199,7 +199,8 @@ class AuthTest extends Scope ], $gqlPayload); $this->assertArrayHasKey('errors', $document['body']); - $this->assertEquals('Document with the requested ID could not be found.', $document['body']['errors'][0]['message']); + $documentId = $gqlPayload['variables']['documentId']; + $this->assertEquals("Document with the requested ID '$documentId' could not be found.", $document['body']['errors'][0]['message']); } public function testValidAuth() diff --git a/tests/e2e/Services/GraphQL/ScopeTest.php b/tests/e2e/Services/GraphQL/ScopeTest.php index 4020e8330a..f3c80a7418 100644 --- a/tests/e2e/Services/GraphQL/ScopeTest.php +++ b/tests/e2e/Services/GraphQL/ScopeTest.php @@ -33,7 +33,7 @@ class ScopeTest extends Scope 'x-appwrite-key' => $apiKey, ], $gqlPayload); - $message = "app.{$projectId}@service.localhost (role: applications) missing scopes ([\"databases.write\"])"; + $message = "app.{$projectId}@service.appwrite.test (role: applications) missing scopes ([\"databases.write\"])"; $this->assertArrayHasKey('errors', $database['body']); $this->assertEquals($message, $database['body']['errors'][0]['message']); } diff --git a/tests/e2e/Services/GraphQL/TablesDB/AuthTest.php b/tests/e2e/Services/GraphQL/TablesDB/AuthTest.php index 5b5e721323..ded79a4a71 100644 --- a/tests/e2e/Services/GraphQL/TablesDB/AuthTest.php +++ b/tests/e2e/Services/GraphQL/TablesDB/AuthTest.php @@ -199,7 +199,8 @@ class AuthTest extends Scope ], $gqlPayload); $this->assertArrayHasKey('errors', $row['body']); - $this->assertEquals('Row with the requested ID could not be found.', $row['body']['errors'][0]['message']); + $rowId = $gqlPayload['variables']['rowId']; + $this->assertEquals("Row with the requested ID '$rowId' could not be found.", $row['body']['errors'][0]['message']); } public function testValidAuth() diff --git a/tests/e2e/Services/Migrations/MigrationsBase.php b/tests/e2e/Services/Migrations/MigrationsBase.php index 490ac026b5..bed7a7e542 100644 --- a/tests/e2e/Services/Migrations/MigrationsBase.php +++ b/tests/e2e/Services/Migrations/MigrationsBase.php @@ -89,7 +89,7 @@ trait MigrationsBase { $response = $this->performMigrationSync([ 'resources' => Appwrite::getSupportedResources(), - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -126,7 +126,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_USER, ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -188,7 +188,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_USER, ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -277,7 +277,7 @@ trait MigrationsBase Resource::TYPE_TEAM, Resource::TYPE_MEMBERSHIP, ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -393,7 +393,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_DATABASE, ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -484,7 +484,7 @@ trait MigrationsBase Resource::TYPE_TABLE, Resource::TYPE_COLUMN, ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -571,7 +571,7 @@ trait MigrationsBase Resource::TYPE_COLUMN, Resource::TYPE_ROW, ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -651,7 +651,7 @@ trait MigrationsBase 'resources' => [ Resource::TYPE_BUCKET ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -747,7 +747,7 @@ trait MigrationsBase Resource::TYPE_BUCKET, Resource::TYPE_FILE ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -818,7 +818,7 @@ trait MigrationsBase Resource::TYPE_FUNCTION, Resource::TYPE_DEPLOYMENT ], - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'projectId' => $this->getProject()['$id'], 'apiKey' => $this->getProject()['apiKey'], ]); @@ -1119,7 +1119,7 @@ trait MigrationsBase // all data exists, pass. $migration = $this->performCsvMigration( [ - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'fileId' => $fileIds['default'], 'bucketId' => $bucketIds['default'], 'resourceId' => $databaseId . ':' . $tableId, @@ -1161,7 +1161,7 @@ trait MigrationsBase // all data exists and includes internals, pass. $migration = $this->performCsvMigration( [ - 'endpoint' => 'http://localhost/v1', + 'endpoint' => $this->endpoint, 'fileId' => $fileIds['documents-internals'], 'bucketId' => $bucketIds['documents-internals'], 'resourceId' => $databaseId . ':' . $tableId, diff --git a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php index 91dce5c09c..9526c5a4da 100644 --- a/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php +++ b/tests/e2e/Services/Projects/ProjectsConsoleClientTest.php @@ -4889,7 +4889,8 @@ class ProjectsConsoleClientTest extends Scope $this->assertEquals(403, $response['headers']['status-code']); $this->assertNotEquals($origin, $response['headers']['access-control-allow-origin'] ?? null); - $this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin'] ?? null); + // you should not return a fallback origin for a disallowed host + $this->assertNull($response['headers']['access-control-allow-origin'] ?? null); /** @@ -4906,7 +4907,7 @@ class ProjectsConsoleClientTest extends Scope ]); $this->assertEquals(401, $response['headers']['status-code']); - $this->assertEquals('*', $response['headers']['access-control-allow-origin'] ?? null); + $this->assertEquals($origin, $response['headers']['access-control-allow-origin'] ?? null); } /** diff --git a/tests/e2e/Services/Projects/ProjectsCustomServerTest.php b/tests/e2e/Services/Projects/ProjectsCustomServerTest.php index 68ff53ae55..b2cf57ddc4 100644 --- a/tests/e2e/Services/Projects/ProjectsCustomServerTest.php +++ b/tests/e2e/Services/Projects/ProjectsCustomServerTest.php @@ -81,16 +81,11 @@ class ProjectsCustomServerTest extends Scope $this->assertEquals(400, $response['headers']['status-code']); - $mainDomain = System::getEnv('_APP_DOMAIN', ''); - $sitesDomain = System::getEnv('_APP_DOMAIN_SITES', ''); - $functionsDomain = System::getEnv('_APP_DOMAIN_FUNCTIONS', ''); - $deniedDomains = [ - $mainDomain, - $sitesDomain, - $functionsDomain, - 'localhost', - APP_HOSTNAME_INTERNAL, + 'sites.localhost', + 'functions.localhost', + 'appwrite.test', + 'localhost' ]; foreach ($deniedDomains as $deniedDomain) { diff --git a/tests/e2e/Services/Proxy/ProxyCustomServerTest.php b/tests/e2e/Services/Proxy/ProxyCustomServerTest.php index 5a1cd1dea6..3fbbb7d5e9 100644 --- a/tests/e2e/Services/Proxy/ProxyCustomServerTest.php +++ b/tests/e2e/Services/Proxy/ProxyCustomServerTest.php @@ -103,12 +103,11 @@ class ProxyCustomServerTest extends Scope $domain = \uniqid() . '-api.custom.localhost'; $proxyClient = new Client(); - $proxyClient->setEndpoint('http://' . $domain); + $proxyClient->setEndpoint('http://appwrite.test'); + $proxyClient->addHeader('x-appwrite-hostname', $domain); - // We should ideally assert 400, but server allows unknown domains, and serves API by default $response = $proxyClient->call(Client::METHOD_GET, '/versions'); - $this->assertEquals(200, $response['headers']['status-code']); - $this->assertEquals(APP_VERSION_STABLE, $response['body']['server']); + $this->assertEquals(401, $response['headers']['status-code']); $ruleId = $this->setupAPIRule($domain); @@ -138,11 +137,11 @@ class ProxyCustomServerTest extends Scope $domain = \uniqid() . '-redirect.custom.localhost'; $proxyClient = new Client(); - $proxyClient->setEndpoint('http://appwrite'); + $proxyClient->setEndpoint('http://appwrite.test'); $proxyClient->addHeader('x-appwrite-hostname', $domain); $response = $proxyClient->call(Client::METHOD_GET, '/todos/1'); - $this->assertEquals(404, $response['headers']['status-code']); + $this->assertEquals(401, $response['headers']['status-code']); $siteId = $this->setupSite()['siteId']; @@ -166,7 +165,7 @@ class ProxyCustomServerTest extends Scope $this->assertNotEmpty($ruleId); $proxyClient = new Client(); - $proxyClient->setEndpoint('http://appwrite'); + $proxyClient->setEndpoint('http://appwrite.test'); $proxyClient->addHeader('x-appwrite-hostname', $domain); $response = $proxyClient->call(Client::METHOD_GET, '/', followRedirects: false); @@ -193,11 +192,11 @@ class ProxyCustomServerTest extends Scope $domain = \uniqid() . '-function.custom.localhost'; $proxyClient = new Client(); - $proxyClient->setEndpoint('http://appwrite'); + $proxyClient->setEndpoint('http://appwrite.test'); $proxyClient->addHeader('x-appwrite-hostname', $domain); $response = $proxyClient->call(Client::METHOD_GET, '/ping'); - $this->assertEquals(404, $response['headers']['status-code']); + $this->assertEquals(401, $response['headers']['status-code']); $setup = $this->setupFunction(); $functionId = $setup['functionId']; @@ -248,11 +247,11 @@ class ProxyCustomServerTest extends Scope $domain = \uniqid() . '-site.custom.localhost'; $proxyClient = new Client(); - $proxyClient->setEndpoint('http://appwrite'); + $proxyClient->setEndpoint('http://appwrite.test'); $proxyClient->addHeader('x-appwrite-hostname', $domain); $response = $proxyClient->call(Client::METHOD_GET, '/contact'); - $this->assertEquals(404, $response['headers']['status-code']); + $this->assertEquals(401, $response['headers']['status-code']); $setup = $this->setupSite(); $siteId = $setup['siteId']; diff --git a/tests/e2e/Services/Realtime/RealtimeBase.php b/tests/e2e/Services/Realtime/RealtimeBase.php index e9b60c4067..89bd1898c4 100644 --- a/tests/e2e/Services/Realtime/RealtimeBase.php +++ b/tests/e2e/Services/Realtime/RealtimeBase.php @@ -22,7 +22,7 @@ trait RealtimeBase ]; return new WebSocketClient( - "ws://appwrite-traefik/v1/realtime?" . http_build_query($query), + "ws://appwrite.test/v1/realtime?" . http_build_query($query), [ "headers" => $headers, "timeout" => 30, diff --git a/tests/e2e/Services/Sites/SitesCustomClientTest.php b/tests/e2e/Services/Sites/SitesCustomClientTest.php index 0434e4338b..d576062c8f 100644 --- a/tests/e2e/Services/Sites/SitesCustomClientTest.php +++ b/tests/e2e/Services/Sites/SitesCustomClientTest.php @@ -6,7 +6,6 @@ use Tests\E2E\Client; use Tests\E2E\Scopes\ProjectCustom; use Tests\E2E\Scopes\Scope; use Tests\E2E\Scopes\SideClient; -use Utopia\System\System; class SitesCustomClientTest extends Scope { @@ -122,7 +121,6 @@ class SitesCustomClientTest extends Scope * Test for SUCCESS */ $template = $this->getTemplate('starter-for-react'); - $hostname = System::getEnv('_APP_DOMAIN') ?: ''; $this->assertEquals(200, $template['headers']['status-code']); $this->assertIsArray($template['body']); $this->assertEquals('starter-for-react', $template['body']['key']); diff --git a/tests/e2e/Services/Sites/SitesCustomServerTest.php b/tests/e2e/Services/Sites/SitesCustomServerTest.php index b7dc9e7334..22a33fbf4d 100644 --- a/tests/e2e/Services/Sites/SitesCustomServerTest.php +++ b/tests/e2e/Services/Sites/SitesCustomServerTest.php @@ -1962,7 +1962,7 @@ class SitesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => $this->getProject()['$id'], 'referer' => $url, - 'origin' => $url + 'origin' => $url, ])); $this->assertEquals($url, $response['headers']['access-control-allow-origin']); @@ -1971,11 +1971,10 @@ class SitesCustomServerTest extends Scope 'content-type' => 'application/json', 'x-appwrite-project' => 'unknown', 'referer' => $url, - 'origin' => $url + 'origin' => $url, ])); - $this->assertNotEquals($url, $response['headers']['access-control-allow-origin']); - $this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']); + $this->assertArrayNotHasKey('access-control-allow-origin', $response['headers']); $response = $this->client->call(Client::METHOD_GET, '/account', array_merge([ 'content-type' => 'application/json', @@ -1984,8 +1983,7 @@ class SitesCustomServerTest extends Scope 'origin' => 'http://unknown.com' ])); - $this->assertNotEquals($url, $response['headers']['access-control-allow-origin']); - $this->assertEquals('http://localhost', $response['headers']['access-control-allow-origin']); + $this->assertArrayNotHasKey('access-control-allow-origin', $response['headers']); } public function testSiteDownload(): void diff --git a/tests/e2e/Services/Webhooks/WebhooksCustomClientTest.php b/tests/e2e/Services/Webhooks/WebhooksCustomClientTest.php index bcc4ede30a..0ffdf50e76 100644 --- a/tests/e2e/Services/Webhooks/WebhooksCustomClientTest.php +++ b/tests/e2e/Services/Webhooks/WebhooksCustomClientTest.php @@ -197,7 +197,6 @@ class WebhooksCustomClientTest extends Scope $this->assertNotEmpty($webhook['data']['$id']); $this->assertNotEmpty($webhook['data']['userId']); $this->assertEquals(true, (new DatetimeValidator())->isValid($webhook['data']['expire'])); - $this->assertEquals($webhook['data']['ip'], '127.0.0.1'); $this->assertNotEmpty($webhook['data']['osCode']); $this->assertIsString($webhook['data']['osCode']); $this->assertNotEmpty($webhook['data']['osName']); @@ -286,7 +285,6 @@ class WebhooksCustomClientTest extends Scope $this->assertNotEmpty($webhook['data']['$id']); $this->assertNotEmpty($webhook['data']['userId']); $this->assertIsString($webhook['data']['expire']); - $this->assertEquals($webhook['data']['ip'], '127.0.0.1'); $this->assertNotEmpty($webhook['data']['osCode']); $this->assertIsString($webhook['data']['osCode']); $this->assertNotEmpty($webhook['data']['osName']); @@ -372,7 +370,6 @@ class WebhooksCustomClientTest extends Scope $this->assertNotEmpty($webhook['data']['$id']); $this->assertNotEmpty($webhook['data']['userId']); $this->assertEquals(true, (new DatetimeValidator())->isValid($webhook['data']['expire'])); - $this->assertEquals($webhook['data']['ip'], '127.0.0.1'); $this->assertNotEmpty($webhook['data']['osCode']); $this->assertIsString($webhook['data']['osCode']); $this->assertNotEmpty($webhook['data']['osName']); diff --git a/tests/unit/Network/CorsTest.php b/tests/unit/Network/CorsTest.php new file mode 100644 index 0000000000..521bf21f1e --- /dev/null +++ b/tests/unit/Network/CorsTest.php @@ -0,0 +1,150 @@ +expectException(InvalidArgumentException::class); + + new Cors( + allowedHosts: ['*'], + allowedMethods: ['GET'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: true + ); + } + + public function testWildcardAllowsAnyOrigin(): void + { + $cors = new Cors( + allowedHosts: ['*'], + allowedMethods: ['GET'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: false + ); + + $result = $cors->headers('https://foo.com'); + + $this->assertSame('https://foo.com', $result[Cors::HEADER_ALLOW_ORIGIN]); + } + + public function testEmptyOriginReturnsStaticHeadersOnly(): void + { + $cors = new Cors( + allowedHosts: ['example.com'], + allowedMethods: ['GET'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: false + ); + + $result = $cors->headers(''); + + $this->assertArrayNotHasKey(Cors::HEADER_ALLOW_ORIGIN, $result); + $this->assertSame('false', $result[Cors::HEADER_ALLOW_CREDENTIALS]); + $this->assertSame('GET', $result[Cors::HEADER_ALLOW_METHODS]); + } + + public function testInvalidOriginReturnsStaticHeadersOnly(): void + { + $cors = new Cors( + allowedHosts: ['example.com'], + allowedMethods: ['GET'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: false + ); + + $result = $cors->headers('%%%not-a-url%%%'); + + $this->assertArrayNotHasKey(Cors::HEADER_ALLOW_ORIGIN, $result); + } + + public function testUnlistedOriginReturnsStaticHeadersOnly(): void + { + $cors = new Cors( + allowedHosts: ['allowed.com'], + allowedMethods: ['GET'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: false + ); + + $result = $cors->headers('https://forbidden.com'); + + $this->assertArrayNotHasKey(Cors::HEADER_ALLOW_ORIGIN, $result); + } + + public function testAllowedOriginIsReturned(): void + { + $cors = new Cors( + allowedHosts: ['example.com'], + allowedMethods: ['POST'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: true + ); + + $result = $cors->headers('https://example.com'); + + $this->assertSame('https://example.com', $result[Cors::HEADER_ALLOW_ORIGIN]); + } + + public function testOriginIsLowercasedForMatching(): void + { + $cors = new Cors( + allowedHosts: ['example.com'], + allowedMethods: ['GET'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: false + ); + + $result = $cors->headers('HTTPS://EXAMPLE.COM'); + + // Lowercase logic is in the class + $this->assertSame('https://example.com', $result[Cors::HEADER_ALLOW_ORIGIN]); + } + + public function testHeaderFormatting(): void + { + $cors = new Cors( + allowedHosts: ['example.com'], + allowedMethods: ['GET', 'POST'], + allowedHeaders: ['X-A', 'X-B'], + exposedHeaders: ['E1', 'E2'], + allowCredentials: true + ); + + $result = $cors->headers('https://example.com'); + + $this->assertSame('GET, POST', $result[Cors::HEADER_ALLOW_METHODS]); + $this->assertSame('X-A, X-B', $result[Cors::HEADER_ALLOW_HEADERS]); + $this->assertSame('E1, E2', $result[Cors::HEADER_EXPOSE_HEADERS]); + $this->assertSame('true', $result[Cors::HEADER_ALLOW_CREDENTIALS]); + } + + public function testMaxAgeIncluded(): void + { + $cors = new Cors( + allowedHosts: ['example.com'], + allowedMethods: ['GET'], + allowedHeaders: ['X-Test'], + exposedHeaders: [], + allowCredentials: false, + maxAge: 999 + ); + + $result = $cors->headers('https://example.com'); + + $this->assertSame(999, $result[Cors::HEADER_MAX_AGE]); + } +} diff --git a/tests/unit/Network/Validators/OriginTest.php b/tests/unit/Network/Validators/OriginTest.php index d312f8c5a5..a4c235f755 100644 --- a/tests/unit/Network/Validators/OriginTest.php +++ b/tests/unit/Network/Validators/OriginTest.php @@ -2,53 +2,17 @@ namespace Tests\Unit\Network\Validators; -use Appwrite\Network\Platform; use Appwrite\Network\Validator\Origin; use PHPUnit\Framework\TestCase; -use Utopia\Database\Helpers\ID; class OriginTest extends TestCase { public function testValues(): void { - $validator = new Origin([ - [ - '$collection' => ID::custom('platforms'), - 'name' => 'Production', - 'type' => Platform::TYPE_WEB, - 'hostname' => 'appwrite.io', - ], - [ - '$collection' => ID::custom('platforms'), - 'name' => 'Development', - 'type' => Platform::TYPE_WEB, - 'hostname' => 'appwrite.test', - ], - [ - '$collection' => ID::custom('platforms'), - 'name' => 'Localhost', - 'type' => Platform::TYPE_WEB, - 'hostname' => 'localhost', - ], - [ - '$collection' => ID::custom('platforms'), - 'name' => 'Flutter', - 'type' => Platform::TYPE_FLUTTER_WEB, - 'hostname' => 'appwrite.flutter', - ], - [ - '$collection' => ID::custom('platforms'), - 'name' => 'Expo', - 'type' => Platform::TYPE_SCHEME, - 'key' => 'exp', - ], - [ - '$collection' => ID::custom('platforms'), - 'name' => 'Appwrite Callback', - 'type' => Platform::TYPE_SCHEME, - 'key' => 'appwrite-callback-123', - ], - ]); + $validator = new Origin( + allowedHostnames: ['appwrite.io', 'appwrite.test', 'localhost', 'appwrite.flutter'], + allowedSchemes: ['exp', 'appwrite-callback-123'] + ); $this->assertEquals(false, $validator->isValid('')); $this->assertEquals(false, $validator->isValid('/'));