{
  "manifest_version": "1.0.0",
  "template": {
    "id": "e99c6f39-bce2-42dc-8a20-08c5a4d1c0be",
    "slug": "teamx-appwrite",
    "name": "TeamX - Appwrite",
    "description": "Deploy Team Collaboration with Appwrite, ElevenLabs, Resend & Firecrawl",
    "url": "https://railway.com/deploy/teamx-appwrite",
    "upstream": {
      "image": "ghcr.io/railwayapp/function-bun:1.2.16"
    }
  },
  "status": "unvalidated",
  "validated_at": null,
  "success_rate_30d": null,
  "services": [
    {
      "name": "Resend",
      "source": {
        "image": "ghcr.io/railwayapp/function-bun:1.2.16"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "OpenAI+ElevenLabs TTS",
      "source": {
        "image": "ghcr.io/railwayapp/function-bun:1.2.16"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "Firecrawl Extract",
      "source": {
        "image": "ghcr.io/railwayapp/function-bun:1.2.16"
      },
      "needs_volume": false,
      "http": true
    },
    {
      "name": "TeamX",
      "source": {
        "repo": "https://github.com/akdeepankar/TeamX"
      },
      "needs_volume": false,
      "http": true
    }
  ],
  "required_inputs": [
    {
      "key": "RESEND_FROM",
      "service": "Resend",
      "description": "onboarding@resend.dev is the Default.",
      "secret": false,
      "strategy": "default",
      "default": "onboarding@resend.dev"
    },
    {
      "key": "RESEND_API_KEY",
      "service": "Resend",
      "description": "visit resend.com to get the API Key.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "OPENAI_API_KEY",
      "service": "OpenAI+ElevenLabs TTS",
      "description": "Get the API Key from OpenAI Platform.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ELEVENLABS_API_KEY",
      "service": "OpenAI+ElevenLabs TTS",
      "description": "Get the API Key from Eleven Labs.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "ELEVENLABS_VOICE_ID",
      "service": "OpenAI+ElevenLabs TTS",
      "description": "Get the Voice ID from Eleven Labs.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "FIRECRAWL_API_KEY",
      "service": "Firecrawl Extract",
      "description": "visit firecrawl.dev to get the API Key.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "APPWRITE_API_KEY",
      "service": "TeamX",
      "description": "Get the API Key in the Appwrite Project.",
      "secret": true,
      "strategy": "generate",
      "generate": "random_base64_32"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_DB_ID",
      "service": "TeamX",
      "description": "Get the ID in the Appwrite Project.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_ENDPOINT",
      "service": "TeamX",
      "description": "Get the Value in the Appwrite Project.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_AUDIO_SERVICE_URL",
      "service": "TeamX",
      "description": "Deployed link of the ElevenLabs TTS",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_BUCKET_ID",
      "service": "TeamX",
      "description": "Get the Value in the Appwrite Project.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_RESEND_SERVICE_URL",
      "service": "TeamX",
      "description": "Deployed link of the Resend Service",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_PROJECT_ID",
      "service": "TeamX",
      "description": "Get the Value in the Appwrite Project.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_FIRECRAWL_SERVICE_URL",
      "service": "TeamX",
      "description": "Deployed link of the Firecrawl",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_OUTBOX_COLL_ID",
      "service": "TeamX",
      "description": "Get the Value in the Appwrite Project Collection.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_MESSAGES_COLL_ID",
      "service": "TeamX",
      "description": "Get the Value in the Appwrite Project Collection.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_ACTIVITIES_COLL_ID",
      "service": "TeamX",
      "description": "Get the Value in the Appwrite Project Collection.",
      "secret": false,
      "strategy": "ask_user"
    },
    {
      "key": "NEXT_PUBLIC_APPWRITE_JOIN_TEAM_FUNCTION_ID",
      "service": "TeamX",
      "description": "Get the Value in the Appwrite Project Function.",
      "secret": false,
      "strategy": "ask_user"
    }
  ],
  "deploy": {
    "mcp": {
      "server": "railway",
      "tool": "deploy_template",
      "args": {
        "template_code": "teamx-appwrite"
      }
    },
    "cli": "railway deploy --template teamx-appwrite",
    "api": {
      "method": "POST",
      "path": "/graphql/v2",
      "body": {
        "query": "mutation templateDeploy($input: TemplateDeployV2Input!) { templateDeployV2(input: $input) { projectId workflowId } }",
        "variables": {
          "input": {
            "templateId": "e99c6f39-bce2-42dc-8a20-08c5a4d1c0be",
            "serializedConfig": {
              "services": {
                "3204ef1d-b8cf-4732-bfeb-bd1312b63187": {
                  "icon": null,
                  "name": "Resend",
                  "deploy": {
                    "startCommand": "./run.sh aW1wb3J0IHsgSG9ubyB9IGZyb20gImhvbm9ANCI7CmltcG9ydCB7IGNvcnMgfSBmcm9tICJob25vL2NvcnMiOwoKY29uc3QgYXBwID0gbmV3IEhvbm8oKTsKCmFwcC51c2UoIi8qIiwgY29ycygpKTsKCmFwcC5nZXQoIi8iLCAoYykgPT4gYy50ZXh0KCJyZXNlbmQtc2VydmljZSAoQnVuICsgSG9ubykiKSk7CgovLyBLZWVwIGJvdGggL2hlYWx0aCBhbmQgL2FwaS9oZWFsdGggZm9yIGNvbXBhdGliaWxpdHkKYXBwLmdldCgiL2hlYWx0aCIsIChjKSA9PiBjLmpzb24oeyBzdGF0dXM6ICJvayIgfSkpOwphcHAuZ2V0KCIvYXBpL2hlYWx0aCIsIChjKSA9PiBjLmpzb24oeyBzdGF0dXM6ICJvayIgfSkpOwoKYXBwLmdldCgiL3Rlc3QiLCAoYykgPT4gewogIGNvbnN0IGFwaUtleSA9IEJ1bi5lbnYuUkVTRU5EX0FQSV9LRVk7CiAgY29uc3QgZnJvbUFkZHJlc3MgPSBCdW4uZW52LlJFU0VORF9GUk9NOwogIGlmICghYXBpS2V5IHx8ICFmcm9tQWRkcmVzcykgewogICAgcmV0dXJuIGMuanNvbigKICAgICAgeyBvazogZmFsc2UsIGVycm9yOiAiTWlzc2luZyBSRVNFTkRfQVBJX0tFWSBvciBSRVNFTkRfRlJPTSIgfSwKICAgICAgNTAwCiAgICApOwogIH0KICByZXR1cm4gYy5qc29uKHsgb2s6IHRydWUsIGZyb206IGZyb21BZGRyZXNzIH0pOwp9KTsKCmFwcC5wb3N0KCIvc2VuZCIsIGFzeW5jIChjKSA9PiB7CiAgdHJ5IHsKICAgIGNvbnN0IGFwaUtleSA9IEJ1bi5lbnYuUkVTRU5EX0FQSV9LRVk7CiAgICBpZiAoIWFwaUtleSkgewogICAgICByZXR1cm4gYy5qc29uKHsgZXJyb3I6ICJTZXJ2ZXIgbWlzc2luZyBSRVNFTkRfQVBJX0tFWSIgfSwgNTAwKTsKICAgIH0KCiAgICBjb25zdCBmcm9tQWRkcmVzcyA9IChCdW4uZW52LlJFU0VORF9GUk9NID8/ICIiKS50cmltKCk7CiAgICBpZiAoIWZyb21BZGRyZXNzKSB7CiAgICAgIHJldHVybiBjLmpzb24oCiAgICAgICAgewogICAgICAgICAgZXJyb3I6CiAgICAgICAgICAgICJTZXJ2ZXIgbWlzc2luZyBSRVNFTkRfRlJPTSAobXVzdCBiZSBhIHZlcmlmaWVkIHNlbmRlci9kb21haW4pIiwKICAgICAgICB9LAogICAgICAgIDUwMAogICAgICApOwogICAgfQoKICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjLnJlcS5qc29uKCkuY2F0Y2goKCkgPT4gKHt9KSk7CgogICAgY29uc3QgdG9SYXc6IHVua25vd24gPSBib2R5Py50byA/PyBbXTsKICAgIGNvbnN0IHN1YmplY3RSYXc6IHVua25vd24gPSBib2R5Py5zdWJqZWN0ID8/ICIiOwogICAgY29uc3QgaHRtbFJhdzogdW5rbm93biA9IGJvZHk/Lmh0bWwgPz8gIiI7CgogICAgY29uc3QgdG9MaXN0OiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkodG9SYXcpCiAgICAgID8gdG9SYXcKICAgICAgOiB0eXBlb2YgdG9SYXcgPT09ICJzdHJpbmciICYmIHRvUmF3LnRyaW0oKQogICAgICA/IFt0b1Jhdy50cmltKCldCiAgICAgIDogW107CiAgICBjb25zdCBzdWJqZWN0OiBzdHJpbmcgPQogICAgICB0eXBlb2Ygc3ViamVjdFJhdyA9PT0gInN0cmluZyIgPyBzdWJqZWN0UmF3LnRyaW0oKSA6ICIiOwogICAgY29uc3QgaHRtbDogc3RyaW5nID0gdHlwZW9mIGh0bWxSYXcgPT09ICJzdHJpbmciID8gaHRtbFJhdy50cmltKCkgOiAiIjsKCiAgICBpZiAoIXRvTGlzdC5sZW5ndGggfHwgIXN1YmplY3QgfHwgIWh0bWwpIHsKICAgICAgcmV0dXJuIGMuanNvbih7IGVycm9yOiAidG8sIHN1YmplY3QsIGh0bWwgYXJlIHJlcXVpcmVkIiB9LCA0MDApOwogICAgfQoKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goImh0dHBzOi8vYXBpLnJlc2VuZC5jb20vZW1haWxzIiwgewogICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgaGVhZGVyczogewogICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthcGlLZXl9YCwKICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICB9LAogICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgZnJvbTogZnJvbUFkZHJlc3MsCiAgICAgICAgdG86IHRvTGlzdCwKICAgICAgICBzdWJqZWN0LAogICAgICAgIGh0bWwsCiAgICAgIH0pLAogICAgfSk7CgogICAgY29uc3QgZGF0YTogdW5rbm93biA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpOwoKICAgIGNvbnN0IGlzT2JqZWN0ID0gKHZhbDogdW5rbm93bik6IHZhbCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PgogICAgICB0eXBlb2YgdmFsID09PSAib2JqZWN0IiAmJiB2YWwgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsKTsKCiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgIGNvbnN0IGVycm9yUGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiB7fTsKICAgICAgcmV0dXJuIGMuanNvbigKICAgICAgICB7CiAgICAgICAgICBlcnJvcjogIlJlc2VuZEVycm9yIiwKICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLAogICAgICAgICAgLi4uZXJyb3JQYXlsb2FkLAogICAgICAgIH0sCiAgICAgICAgNTAyCiAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIGMuanNvbihpc09iamVjdChkYXRhKSA/IGRhdGEgOiB7fSk7CiAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7CiAgICAvLyBUcnkgdG8gdW53cmFwIGVycm9yIGRldGFpbHMgc2ltaWxhcmx5IHRvIHRoZSBGbGFzayB2ZXJzaW9uCiAgICBjb25zdCBlcnJvciA9IGVyciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsKICAgIGNvbnN0IG1lc3NhZ2UgPSAoZXJyb3I/Lm1lc3NhZ2UgYXMgc3RyaW5nKSB8fCBTdHJpbmcoZXJyKTsKICAgIGNvbnN0IG5hbWUgPSAoZXJyb3I/Lm5hbWUgYXMgc3RyaW5nKSB8fCAiRXJyb3IiOwogICAgcmV0dXJuIGMuanNvbih7IGVycm9yOiBuYW1lLCBtZXNzYWdlIH0sIDUwMCk7CiAgfQp9KTsKCkJ1bi5zZXJ2ZSh7CiAgcG9ydDogKGltcG9ydC5tZXRhIGFzIGFueSkuZW52Py5QT1JUID8/IEJ1bi5lbnYuUE9SVCA/PyAzMDAwLAogIGZldGNoOiBhcHAuZmV0Y2gsCn0pOwo=",
                    "healthcheckPath": null
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp/function-bun:1.2.16"
                  },
                  "variables": {
                    "RESEND_FROM": {
                      "isOptional": false,
                      "description": "onboarding@resend.dev is the Default.",
                      "defaultValue": "onboarding@resend.dev"
                    },
                    "RESEND_API_KEY": {
                      "isOptional": false,
                      "description": "visit resend.com to get the API Key.",
                      "defaultValue": "{{RESEND_API_KEY}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                },
                "51341dbb-cffa-4811-8d97-64c56ecec5c5": {
                  "icon": null,
                  "name": "OpenAI+ElevenLabs TTS",
                  "deploy": {
                    "startCommand": "./run.sh Ly8gaW5kZXgudHMKaW1wb3J0IE9wZW5BSSBmcm9tICJvcGVuYWkiOwoKY29uc3Qgb3BlbmFpID0gbmV3IE9wZW5BSSh7CiAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSEsCn0pOwoKY29uc3QgRUxFVkVOTEFCU19BUElfS0VZID0gcHJvY2Vzcy5lbnYuRUxFVkVOTEFCU19BUElfS0VZITsKY29uc3QgRUxFVkVOTEFCU19WT0lDRV9JRCA9IHByb2Nlc3MuZW52LkVMRVZFTkxBQlNfVk9JQ0VfSUQhOwpjb25zdCBFTEVWRU5MQUJTX01PREVMX0lEID0KICBwcm9jZXNzLmVudi5FTEVWRU5MQUJTX01PREVMX0lEIHx8ICJlbGV2ZW5fbXVsdGlsaW5ndWFsX3YyIjsKY29uc3QgT1BFTkFJX01PREVMID0gcHJvY2Vzcy5lbnYuT1BFTkFJX01PREVMIHx8ICJncHQtNG8tbWluaSI7Cgpjb25zdCBNSU5fRFVSQVRJT05fTUlOID0gMC41Owpjb25zdCBNQVhfRFVSQVRJT05fTUlOID0gMi4wOwoKaW50ZXJmYWNlIEdlbmVyYXRlUmVxdWVzdCB7CiAgcHJvbXB0OiBzdHJpbmc7CiAgZHVyYXRpb25fbWludXRlcz86IG51bWJlcjsKfQoKZnVuY3Rpb24gc2FuaXRpemVEdXJhdGlvbk1pbnV0ZXMocmF3VmFsdWU6IGFueSk6IG51bWJlciB7CiAgbGV0IG1pbnV0ZXMgPSBOdW1iZXIocmF3VmFsdWUpOwogIGlmIChpc05hTihtaW51dGVzKSkgbWludXRlcyA9IDEuMDsKICBpZiAobWludXRlcyA8IE1JTl9EVVJBVElPTl9NSU4pIHJldHVybiBNSU5fRFVSQVRJT05fTUlOOwogIGlmIChtaW51dGVzID4gTUFYX0RVUkFUSU9OX01JTikgcmV0dXJuIE1BWF9EVVJBVElPTl9NSU47CiAgcmV0dXJuIG1pbnV0ZXM7Cn0KCmZ1bmN0aW9uIHdpdGhDb3JzSGVhZGVycyhoZWFkZXJzOiBIZWFkZXJzID0gbmV3IEhlYWRlcnMoKSkgewogIGhlYWRlcnMuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4iLCAiKiIpOyAvLyBvciB5b3VyIGZyb250ZW5kIGRvbWFpbgogIGhlYWRlcnMuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIiwgIkdFVCwgUE9TVCwgT1BUSU9OUyIpOwogIGhlYWRlcnMuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzIiwgIkNvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvbiIpOwogIHJldHVybiBoZWFkZXJzOwp9Cgphc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVN0b3J5V2l0aE9wZW5BSSgKICBwcm9tcHQ6IHN0cmluZywKICBkdXJhdGlvbk1pbnV0ZXM6IG51bWJlcgopOiBQcm9taXNlPHN0cmluZz4gewogIGNvbnN0IHdvcmRzUGVyTWludXRlID0gMTUwOwogIGNvbnN0IHRhcmdldFdvcmRzID0gTWF0aC5tYXgoCiAgICAxNTAsCiAgICBNYXRoLm1pbigzMDAwLCBNYXRoLmZsb29yKGR1cmF0aW9uTWludXRlcyAqIHdvcmRzUGVyTWludXRlKSkKICApOwogIGNvbnN0IHN5c3RlbSA9IGBZb3UgYXJlIGFuIGV4cGVydCBhdWRpb2Jvb2sgc2NyaXB0IHdyaXRlci4gQ3JhZnQgYSBjb2hlc2l2ZSwgZW5nYWdpbmcsIGFuZCB2aXZpZCBtaW5pIGF1ZGlvYm9vayBzY3JpcHQuIFdyaXRlIGluIGNsZWFyIHBhcmFncmFwaHMgc3VpdGFibGUgZm9yIG5hcnJhdGlvbi4gRG8gbm90IGluY2x1ZGUgc3RhZ2UgZGlyZWN0aW9ucyBvciBoZWFkaW5ncy4gQWltIGZvciByb3VnaGx5ICR7dGFyZ2V0V29yZHN9IHdvcmRzIHNvIGl0IGZpdHMgYWJvdXQgJHtkdXJhdGlvbk1pbnV0ZXN9IG1pbnV0ZXMgYXQgfjE1MCBXUE0uIFJldHVybiBvbmx5IHRoZSBzY3JpcHQgdGV4dC5gOwogIGNvbnN0IHVzZXIgPSBgVG9waWMvUHJvbXB0OiAke3Byb21wdH1cblxuUGxlYXNlIHByb2R1Y2Ugb25seSBwbGFpbiB0ZXh0IHBhcmFncmFwaHMuYDsKCiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvcGVuYWkuY2hhdC5jb21wbGV0aW9ucy5jcmVhdGUoewogICAgbW9kZWw6IE9QRU5BSV9NT0RFTCwKICAgIG1lc3NhZ2VzOiBbCiAgICAgIHsgcm9sZTogInN5c3RlbSIsIGNvbnRlbnQ6IHN5c3RlbSB9LAogICAgICB7IHJvbGU6ICJ1c2VyIiwgY29udGVudDogdXNlciB9LAogICAgXSwKICAgIHRlbXBlcmF0dXJlOiAwLjksCiAgICBtYXhfdG9rZW5zOiAyMDQ4LAogIH0pOwoKICByZXR1cm4gKHJlc3BvbnNlLmNob2ljZXNbMF0ubWVzc2FnZT8uY29udGVudCB8fCAiIikudHJpbSgpOwp9Cgphc3luYyBmdW5jdGlvbiBzeW50aGVzaXplV2l0aEVsZXZlbkxhYnModGV4dDogc3RyaW5nKTogUHJvbWlzZTxVaW50OEFycmF5PiB7CiAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXBpLmVsZXZlbmxhYnMuaW8vdjEvdGV4dC10by1zcGVlY2gvJHtFTEVWRU5MQUJTX1ZPSUNFX0lEfS9zdHJlYW1gOwoKICBjb25zdCByZXNwID0gYXdhaXQgZmV0Y2godXJsLCB7CiAgICBtZXRob2Q6ICJQT1NUIiwKICAgIGhlYWRlcnM6IHsKICAgICAgInhpLWFwaS1rZXkiOiBFTEVWRU5MQUJTX0FQSV9LRVksCiAgICAgIGFjY2VwdDogImF1ZGlvL21wZWciLAogICAgICAiY29udGVudC10eXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgfSwKICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgdGV4dCwKICAgICAgbW9kZWxfaWQ6IEVMRVZFTkxBQlNfTU9ERUxfSUQsCiAgICAgIHZvaWNlX3NldHRpbmdzOiB7CiAgICAgICAgc3RhYmlsaXR5OiAwLjUsCiAgICAgICAgc2ltaWxhcml0eV9ib29zdDogMC43NSwKICAgICAgfSwKICAgIH0pLAogIH0pOwoKICBpZiAoIXJlc3Aub2spIHsKICAgIHRocm93IG5ldyBFcnJvcihgRWxldmVuTGFicyBlcnJvcjogJHtyZXNwLnN0YXR1c30gJHthd2FpdCByZXNwLnRleHQoKX1gKTsKICB9CgogIHJldHVybiBuZXcgVWludDhBcnJheShhd2FpdCByZXNwLmFycmF5QnVmZmVyKCkpOwp9CgpleHBvcnQgZGVmYXVsdCB7CiAgYXN5bmMgZmV0Y2gocmVxOiBSZXF1ZXN0KSB7CiAgICBjb25zdCB7IHBhdGhuYW1lIH0gPSBuZXcgVVJMKHJlcS51cmwpOwoKICAgIC8vIEhhbmRsZSBDT1JTIHByZWZsaWdodCByZXF1ZXN0cwogICAgaWYgKHJlcS5tZXRob2QgPT09ICJPUFRJT05TIikgewogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsgc3RhdHVzOiAyMDQsIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygpIH0pOwogICAgfQoKICAgIGlmIChwYXRobmFtZSA9PT0gIi9oZWFsdGgiIHx8IHBhdGhuYW1lID09PSAiLyIpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHN0YXR1czogIm9rIiwgc2VydmljZTogImF1ZGlvLXNlcnZpY2UiIH0pLAogICAgICAgIHsKICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgbmV3IEhlYWRlcnMoeyAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iIH0pCiAgICAgICAgICApLAogICAgICAgIH0KICAgICAgKTsKICAgIH0KCiAgICBpZiAocGF0aG5hbWUgPT09ICIvZ2VuZXJhdGUiICYmIHJlcS5tZXRob2QgPT09ICJQT1NUIikgewogICAgICB0cnkgewogICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVxLmpzb24oKSkgYXMgR2VuZXJhdGVSZXF1ZXN0OwogICAgICAgIGNvbnN0IHByb21wdCA9IChkYXRhLnByb21wdCB8fCAiIikudHJpbSgpOwogICAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IHNhbml0aXplRHVyYXRpb25NaW51dGVzKAogICAgICAgICAgZGF0YS5kdXJhdGlvbl9taW51dGVzID8/IDEuMAogICAgICAgICk7CgogICAgICAgIGlmICghcHJvbXB0KSB7CiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6ICJwcm9tcHQgaXMgcmVxdWlyZWQiIH0pLCB7CiAgICAgICAgICAgIHN0YXR1czogNDAwLAogICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29yc0hlYWRlcnMoCiAgICAgICAgICAgICAgbmV3IEhlYWRlcnMoeyAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iIH0pCiAgICAgICAgICAgICksCiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGlmICghcHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVkpIHsKICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6ICJTZXJ2ZXIgbWlzc2luZyBPUEVOQUlfQVBJX0tFWSIgfSksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0dXM6IDUwMCwKICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29yc0hlYWRlcnMoCiAgICAgICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICAgICApLAogICAgICAgICAgICB9CiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoIUVMRVZFTkxBQlNfQVBJX0tFWSkgewogICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogIlNlcnZlciBtaXNzaW5nIEVMRVZFTkxBQlNfQVBJX0tFWSIgfSksCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0dXM6IDUwMCwKICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29yc0hlYWRlcnMoCiAgICAgICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICAgICApLAogICAgICAgICAgICB9CiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoIUVMRVZFTkxBQlNfVk9JQ0VfSUQpIHsKICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsgZXJyb3I6ICJTZXJ2ZXIgbWlzc2luZyBFTEVWRU5MQUJTX1ZPSUNFX0lEIiB9KSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0YXR1czogNTAwLAogICAgICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgICAgIG5ldyBIZWFkZXJzKHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiB9KQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIH0KICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBjb25zdCB0cmFuc2NyaXB0ID0gYXdhaXQgZ2VuZXJhdGVTdG9yeVdpdGhPcGVuQUkoCiAgICAgICAgICBwcm9tcHQsCiAgICAgICAgICBkdXJhdGlvbk1pbnV0ZXMKICAgICAgICApOwogICAgICAgIGlmICghdHJhbnNjcmlwdCkgewogICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogIk9wZW5BSSByZXR1cm5lZCBlbXB0eSBjb250ZW50IiB9KSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0YXR1czogNTAwLAogICAgICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgICAgIG5ldyBIZWFkZXJzKHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiB9KQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIH0KICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBhdWRpb0J5dGVzID0gYXdhaXQgc3ludGhlc2l6ZVdpdGhFbGV2ZW5MYWJzKHRyYW5zY3JpcHQpOwogICAgICAgIGNvbnN0IGF1ZGlvQmFzZTY0ID0gQnVmZmVyLmZyb20oYXVkaW9CeXRlcykudG9TdHJpbmcoImJhc2U2NCIpOwoKICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICBhdWRpb19iYXNlNjQ6IGF1ZGlvQmFzZTY0LAogICAgICAgICAgICB0cmFuc2NyaXB0LAogICAgICAgICAgICBtaW1lOiAiYXVkaW8vbXBlZyIsCiAgICAgICAgICAgIGdlbmVyYXRvcjogIm9wZW5haSIsCiAgICAgICAgICAgIG9wZW5haV9tb2RlbDogT1BFTkFJX01PREVMLAogICAgICAgICAgfSksCiAgICAgICAgICB7CiAgICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICAgKSwKICAgICAgICAgIH0KICAgICAgICApOwogICAgICB9IGNhdGNoIChlcnI6IGFueSkgewogICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGVycm9yOiBlcnIubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSB9KSwKICAgICAgICAgIHsKICAgICAgICAgICAgc3RhdHVzOiA1MDAsCiAgICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICAgKSwKICAgICAgICAgIH0KICAgICAgICApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeSh7IGVycm9yOiAiTm90IEZvdW5kIiB9KSwgewogICAgICBzdGF0dXM6IDQwNCwKICAgICAgaGVhZGVyczogd2l0aENvcnNIZWFkZXJzKAogICAgICAgIG5ldyBIZWFkZXJzKHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiB9KQogICAgICApLAogICAgfSk7CiAgfSwKfTsK",
                    "healthcheckPath": null
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp/function-bun:1.2.16"
                  },
                  "variables": {
                    "OPENAI_API_KEY": {
                      "isOptional": false,
                      "description": "Get the API Key from OpenAI Platform.",
                      "defaultValue": "{{OPENAI_API_KEY}}"
                    },
                    "ELEVENLABS_API_KEY": {
                      "isOptional": false,
                      "description": "Get the API Key from Eleven Labs.",
                      "defaultValue": "{{ELEVENLABS_API_KEY}}"
                    },
                    "ELEVENLABS_VOICE_ID": {
                      "isOptional": false,
                      "description": "Get the Voice ID from Eleven Labs.",
                      "defaultValue": "{{ELEVENLABS_VOICE_ID}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                },
                "552e6926-29ac-4aca-8e86-7ac5b802bbae": {
                  "icon": null,
                  "name": "Firecrawl Extract",
                  "deploy": {
                    "startCommand": "./run.sh aW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAiYnVmZmVyIjsKCmNvbnN0IEZJUkVDUkFXTF9BUElfS0VZID0gcHJvY2Vzcy5lbnYuRklSRUNSQVdMX0FQSV9LRVkhOwpjb25zdCBGSVJFQ1JBV0xfQVBJX1VSTCA9ICJodHRwczovL2FwaS5maXJlY3Jhd2wuZGV2L3YxL2V4dHJhY3QiOwoKaW50ZXJmYWNlIEV4dHJhY3RSZXF1ZXN0IHsKICB1cmw6IHN0cmluZzsKICBwcm9tcHQ/OiBzdHJpbmc7Cn0KCmZ1bmN0aW9uIHdpdGhDb3JzSGVhZGVycyhoZWFkZXJzOiBIZWFkZXJzID0gbmV3IEhlYWRlcnMoKSkgewogIGhlYWRlcnMuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4iLCAiKiIpOyAvLyBvciB5b3VyIGZyb250ZW5kIGRvbWFpbgogIGhlYWRlcnMuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzIiwgIkdFVCwgUE9TVCwgT1BUSU9OUyIpOwogIGhlYWRlcnMuc2V0KCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzIiwgIkNvbnRlbnQtVHlwZSwgQXV0aG9yaXphdGlvbiIpOwogIHJldHVybiBoZWFkZXJzOwp9Cgphc3luYyBmdW5jdGlvbiBwb2xsRmlyZWNyYXdsUmVzdWx0KGpvYklkOiBzdHJpbmcpIHsKICBjb25zdCBQT0xMX0lOVEVSVkFMX01TID0gMzAwMDsKCiAgd2hpbGUgKHRydWUpIHsKICAgIGNvbnN0IHBvbGxSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke0ZJUkVDUkFXTF9BUElfVVJMfS8ke2pvYklkfWAsIHsKICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoewogICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtGSVJFQ1JBV0xfQVBJX0tFWX1gLAogICAgICB9KSwKICAgIH0pOwoKICAgIGlmICghcG9sbFJlc3BvbnNlLm9rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICBgRmlyZWNyYXdsIHBvbGxpbmcgZXJyb3I6ICR7CiAgICAgICAgICBwb2xsUmVzcG9uc2Uuc3RhdHVzCiAgICAgICAgfSAke2F3YWl0IHBvbGxSZXNwb25zZS50ZXh0KCl9YAogICAgICApOwogICAgfQoKICAgIGNvbnN0IHBvbGxKc29uOiBhbnkgPSBhd2FpdCBwb2xsUmVzcG9uc2UuanNvbigpOwoKICAgIGlmIChwb2xsSnNvbi5zdGF0dXMgPT09ICJjb21wbGV0ZWQiKSB7CiAgICAgIHJldHVybiBwb2xsSnNvbi5kYXRhOwogICAgfSBlbHNlIGlmICgKICAgICAgcG9sbEpzb24uc3RhdHVzID09PSAiZmFpbGVkIiB8fAogICAgICBwb2xsSnNvbi5zdGF0dXMgPT09ICJjYW5jZWxsZWQiCiAgICApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaXJlY3Jhd2wgam9iICR7cG9sbEpzb24uc3RhdHVzfWApOwogICAgfQoKICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIFBPTExfSU5URVJWQUxfTVMpKTsKICB9Cn0KCmV4cG9ydCBkZWZhdWx0IHsKICBhc3luYyBmZXRjaChyZXE6IFJlcXVlc3QpIHsKICAgIGNvbnN0IHsgcGF0aG5hbWUgfSA9IG5ldyBVUkwocmVxLnVybCk7CgogICAgaWYgKHJlcS5tZXRob2QgPT09ICJPUFRJT05TIikgewogICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsKICAgICAgICBzdGF0dXM6IDIwNCwKICAgICAgICBoZWFkZXJzOiB3aXRoQ29yc0hlYWRlcnMobmV3IEhlYWRlcnMoKSksCiAgICAgIH0pOwogICAgfQoKICAgIGlmIChwYXRobmFtZSA9PT0gIi9oZWFsdGgiIHx8IHBhdGhuYW1lID09PSAiLyIpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHN0YXR1czogIm9rIiwgc2VydmljZTogImZpcmVjcmF3bC1wcm94eSIgfSksCiAgICAgICAgewogICAgICAgICAgaGVhZGVyczogd2l0aENvcnNIZWFkZXJzKAogICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICksCiAgICAgICAgfQogICAgICApOwogICAgfQoKICAgIGlmIChwYXRobmFtZSA9PT0gIi9leHRyYWN0IiAmJiByZXEubWV0aG9kID09PSAiUE9TVCIpIHsKICAgICAgdHJ5IHsKICAgICAgICAvLyBSZW5hbWUgdG8gYXZvaWQgcmVkZWNsYXJpbmcgJ2RhdGEnCiAgICAgICAgY29uc3QgcmVxdWVzdERhdGEgPSAoYXdhaXQgcmVxLmpzb24oKSkgYXMgRXh0cmFjdFJlcXVlc3Q7CiAgICAgICAgY29uc3QgdXJsID0gKHJlcXVlc3REYXRhLnVybCB8fCAiIikudHJpbSgpOwogICAgICAgIGNvbnN0IHByb21wdCA9CiAgICAgICAgICByZXF1ZXN0RGF0YS5wcm9tcHQ/LnRyaW0oKSB8fAogICAgICAgICAgIkV4dHJhY3QgYSBjb25jaXNlIDYtMTAgc2VudGVuY2Ugc3VtbWFyeSBvZiB0aGUgbWFpbiBjb250ZW50IG9uIHRoZSBwYWdlLiBJZ25vcmUgbmF2aWdhdGlvbiBhbmQgYm9pbGVycGxhdGUuIjsKCiAgICAgICAgaWYgKCF1cmwpIHsKICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogInVybCBpcyByZXF1aXJlZCIgfSksIHsKICAgICAgICAgICAgc3RhdHVzOiA0MDAsCiAgICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICAgKSwKICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFGSVJFQ1JBV0xfQVBJX0tFWSkgewogICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgKICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBlcnJvcjogIlNlcnZlciBtaXNzaW5nIEZJUkVDUkFXTF9BUElfS0VZIiB9KSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0YXR1czogNTAwLAogICAgICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgICAgIG5ldyBIZWFkZXJzKHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiB9KQogICAgICAgICAgICAgICksCiAgICAgICAgICAgIH0KICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgdXJsczogW3VybF0sCiAgICAgICAgICBwcm9tcHQsCiAgICAgICAgfSk7CgogICAgICAgIGNvbnNvbGUubG9nKCJTZW5kaW5nIEZpcmVjcmF3bCByZXF1ZXN0IGJvZHk6IiwgYm9keSk7CgogICAgICAgIC8vIFN0YXJ0IGV4dHJhY3Rpb24gam9iCiAgICAgICAgY29uc3Qgc3RhcnRSZXNwb25zZSA9IGF3YWl0IGZldGNoKEZJUkVDUkFXTF9BUElfVVJMLCB7CiAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgbmV3IEhlYWRlcnMoewogICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtGSVJFQ1JBV0xfQVBJX0tFWX1gLAogICAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgIH0pCiAgICAgICAgICApLAogICAgICAgICAgYm9keSwKICAgICAgICB9KTsKCiAgICAgICAgaWYgKCFzdGFydFJlc3BvbnNlLm9rKSB7CiAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCBzdGFydFJlc3BvbnNlLnRleHQoKTsKICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICBlcnJvcjogYEZpcmVjcmF3bCBBUEkgZXJyb3I6ICR7c3RhcnRSZXNwb25zZS5zdGF0dXN9ICR7ZXJyb3JUZXh0fWAsCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RhdHVzOiBzdGFydFJlc3BvbnNlLnN0YXR1cywKICAgICAgICAgICAgICBoZWFkZXJzOiB3aXRoQ29yc0hlYWRlcnMoCiAgICAgICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICAgICApLAogICAgICAgICAgICB9CiAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgY29uc3Qgc3RhcnRKc29uOiBhbnkgPSBhd2FpdCBzdGFydFJlc3BvbnNlLmpzb24oKTsKCiAgICAgICAgY29uc29sZS5sb2coCiAgICAgICAgICAiRmlyZWNyYXdsIGluaXRpYWwgcmVzcG9uc2UgSlNPTjoiLAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc3RhcnRKc29uLCBudWxsLCAyKQogICAgICAgICk7CgogICAgICAgIC8vIFBvbGwgZm9yIGpvYiBjb21wbGV0aW9uIHVzaW5nIGpvYiBJRAogICAgICAgIGNvbnN0IGV4dHJhY3RlZERhdGEgPSBhd2FpdCBwb2xsRmlyZWNyYXdsUmVzdWx0KHN0YXJ0SnNvbi5pZCk7CgogICAgICAgIC8vIEV4dHJhY3Qgc3VtbWFyeSBzYWZlbHkKICAgICAgICBsZXQgc3VtbWFyeSA9ICIiOwogICAgICAgIGNvbnN0IGRhdGFGaWVsZCA9IGV4dHJhY3RlZERhdGE7CgogICAgICAgIGlmIChkYXRhRmllbGQgJiYgdHlwZW9mIGRhdGFGaWVsZCA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFGaWVsZCkgJiYgZGF0YUZpZWxkLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBkYXRhRmllbGRbMF07CiAgICAgICAgICAgIGlmIChmaXJzdCAmJiB0eXBlb2YgZmlyc3QgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICAgICAgY29uc3QgZmlyc3RPYmogPSBmaXJzdCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+OwogICAgICAgICAgICAgIHN1bW1hcnkgPQogICAgICAgICAgICAgICAgZmlyc3RPYmouc3VtbWFyeT8udHJpbSgpIHx8CiAgICAgICAgICAgICAgICBmaXJzdE9iai5jb250ZW50Py50cmltKCkgfHwKICAgICAgICAgICAgICAgIGZpcnN0T2JqLnRleHQ/LnRyaW0oKSB8fAogICAgICAgICAgICAgICAgIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGRhdGFGaWVsZCBpcyBvYmplY3QKICAgICAgICAgICAgY29uc3Qgb2JqID0gZGF0YUZpZWxkIGFzIFJlY29yZDxzdHJpbmcsIGFueT47CiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIFsic3VtbWFyeSIsICJjb250ZW50IiwgInRleHQiXSkgewogICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICJzdHJpbmciICYmIG9ialtrZXldLnRyaW0oKS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICBzdW1tYXJ5ID0gb2JqW2tleV0udHJpbSgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBGYWxsYmFjayB0byByYXcgZGF0YSBzdHJpbmcgaWYgbm8gc3VtbWFyeSBmb3VuZAogICAgICAgIGlmICghc3VtbWFyeSkgewogICAgICAgICAgc3VtbWFyeSA9IEpTT04uc3RyaW5naWZ5KGV4dHJhY3RlZERhdGEpLnNsaWNlKDAsIDUwMDApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeSh7IHN1bW1hcnkgfSksIHsKICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgbmV3IEhlYWRlcnMoeyAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iIH0pCiAgICAgICAgICApLAogICAgICAgIH0pOwogICAgICB9IGNhdGNoIChlcnI6IGFueSkgewogICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IGVycm9yOiBlcnIubWVzc2FnZSB8fCBTdHJpbmcoZXJyKSB9KSwKICAgICAgICAgIHsKICAgICAgICAgICAgc3RhdHVzOiA1MDAsCiAgICAgICAgICAgIGhlYWRlcnM6IHdpdGhDb3JzSGVhZGVycygKICAgICAgICAgICAgICBuZXcgSGVhZGVycyh7ICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIgfSkKICAgICAgICAgICAgKSwKICAgICAgICAgIH0KICAgICAgICApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBSZXNwb25zZShKU09OLnN0cmluZ2lmeSh7IGVycm9yOiAiTm90IEZvdW5kIiB9KSwgewogICAgICBzdGF0dXM6IDQwNCwKICAgICAgaGVhZGVyczogd2l0aENvcnNIZWFkZXJzKAogICAgICAgIG5ldyBIZWFkZXJzKHsgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIiB9KQogICAgICApLAogICAgfSk7CiAgfSwKfTsK",
                    "healthcheckPath": null
                  },
                  "source": {
                    "image": "ghcr.io/railwayapp/function-bun:1.2.16"
                  },
                  "variables": {
                    "FIRECRAWL_API_KEY": {
                      "isOptional": false,
                      "description": "visit firecrawl.dev to get the API Key.",
                      "defaultValue": "{{FIRECRAWL_API_KEY}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                },
                "bb1b0768-e5b7-49b9-9a7e-1c273f3acc2d": {
                  "icon": null,
                  "name": "TeamX",
                  "deploy": {
                    "startCommand": "npm run start",
                    "healthcheckPath": null
                  },
                  "source": {
                    "repo": "https://github.com/akdeepankar/TeamX",
                    "rootDirectory": null
                  },
                  "variables": {
                    "APPWRITE_API_KEY": {
                      "isOptional": false,
                      "description": "Get the API Key in the Appwrite Project.",
                      "defaultValue": "{{APPWRITE_API_KEY}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_DB_ID": {
                      "isOptional": false,
                      "description": "Get the ID in the Appwrite Project.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_DB_ID}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_ENDPOINT": {
                      "isOptional": false,
                      "description": "Get the Value in the Appwrite Project.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_ENDPOINT}}"
                    },
                    "NEXT_PUBLIC_AUDIO_SERVICE_URL": {
                      "isOptional": false,
                      "description": "Deployed link of the ElevenLabs TTS",
                      "defaultValue": "{{NEXT_PUBLIC_AUDIO_SERVICE_URL}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_BUCKET_ID": {
                      "isOptional": false,
                      "description": "Get the Value in the Appwrite Project.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_BUCKET_ID}}"
                    },
                    "NEXT_PUBLIC_RESEND_SERVICE_URL": {
                      "isOptional": false,
                      "description": "Deployed link of the Resend Service",
                      "defaultValue": "{{NEXT_PUBLIC_RESEND_SERVICE_URL}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_PROJECT_ID": {
                      "isOptional": false,
                      "description": "Get the Value in the Appwrite Project.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_PROJECT_ID}}"
                    },
                    "NEXT_PUBLIC_FIRECRAWL_SERVICE_URL": {
                      "isOptional": false,
                      "description": "Deployed link of the Firecrawl",
                      "defaultValue": "{{NEXT_PUBLIC_FIRECRAWL_SERVICE_URL}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_OUTBOX_COLL_ID": {
                      "isOptional": false,
                      "description": "Get the Value in the Appwrite Project Collection.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_OUTBOX_COLL_ID}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_MESSAGES_COLL_ID": {
                      "isOptional": false,
                      "description": "Get the Value in the Appwrite Project Collection.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_MESSAGES_COLL_ID}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_ACTIVITIES_COLL_ID": {
                      "isOptional": false,
                      "description": "Get the Value in the Appwrite Project Collection.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_ACTIVITIES_COLL_ID}}"
                    },
                    "NEXT_PUBLIC_APPWRITE_JOIN_TEAM_FUNCTION_ID": {
                      "isOptional": false,
                      "description": "Get the Value in the Appwrite Project Function.",
                      "defaultValue": "{{NEXT_PUBLIC_APPWRITE_JOIN_TEAM_FUNCTION_ID}}"
                    }
                  },
                  "networking": {
                    "serviceDomains": {
                      "<hasDomain>": {}
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "post_deploy": {},
  "resources": {
    "expected_services": 4,
    "needs_volume": false
  },
  "generated_at": "2026-09-12T22:14:39.841Z",
  "generator_version": "0.1.0"
}
