本倉庫是關於產品、開发與社群規則的文檔和討論的主入口。這里也包含不屬於其他倉庫的issue,例如需要前後端耦合的新功能提案。也歡迎加入 Matters 第三方社区 Discord。
一些本倉庫內的有用資源:
Matters 使用 GraphQL 作為 API 接口,詳情見簡介文章。開發者可以在 Apollo Playground 中查閱文檔、進行調試。
C4Context
title Matters System Architecture
Container_Ext(cloudflare, "Cloudflare", "CDN + WAF", "Protects and accelerates traffic")
Boundary(feBoundary, "Frontend", "") {
Boundary(mattersWebBoundary, "matters.town", "thematters/matters-web") {
Container(ssrServer, "SSR Server", "Elastic Beanstalk", "Next.js, Apollo Client")
}
}
Boundary(beBoundary, "Backend", "") {
Boundary(mattersServerBoundary, "matters-server", "thematters/matters-server") {
Container(apiServer, "API Server","Elastic Beanstalk", "Handles GraphQL requests and Payment/Oauth callbacks")
ContainerQueue(queues, "Job Queue", "SQS", "")
Container(queuejob, "Job Worker", "Lambda", "Processes jobs from queues")
Container(cronjob, "Cronjob", "Lambda", "Handles cronjob")
}
Boundary(thirdPartiesBoundary, "Third Party Providers", "") {
Container_Ext(stripe, "Stripe", "", "Supports fiat payment")
Container_Ext(likecoin, "Likecoin", "", "Supports likecoin payment")
Container_Ext(sendgrid, "SendGrid", "", "Sends Emails")
Container_Ext(gcp, "GCP", "", "Support translation")
Container_Ext(opensea, "OpenSea", "", "Support NFT queries for users")
Container_Ext(sentry, "Sentry", "", "Monitors logging")
}
}
Boundary(storageBoundary, "Storage", "") {
ContainerDb(databases, "Postgres", "RDS", "Stores application data")
Container(cache, "Cache", "Elasticache", "Improves read performance")
Container(image, "Images Storage", "Cloudflare Images", "Serves images through CDN")
Container(audio, "Audio Storage", "S3 + CloudFront", "Serves Audio files")
Container(search, "Search Server", "EC2, Postgresql", "Fulltext search")
Container_Ext(ipfs, "IPFS/IPNS", "Storacha, Pinata", "Articles IPFS/IPNS storage")
ContainerDb(bigquery, "BigQuery", "BigQuery", "Stores analytics data and audit logs")
}
Rel(cloudflare, ssrServer, "Filtered traffic", "HTTPS")
Rel(ssrServer, apiServer, "GraphQL queries", "HTTPS")
Rel(apiServer, queues, "Events", "")
Rel(queues, queuejob, "Trigger", "")
以下為 Matters Lab 代碼倉庫結構與分工。
- server: Matters 服務器主倉庫。使用 Typescript,基於 Apollo Server建構 GraphQL API。
- contracts: 智能合約。
- lambda functions: 隊列與定時任務。
- query cache: 用於緩存控制與清理的 GraphQL directives 及 Apollo Server 插件。
- web: Matters 網頁客戶端主倉庫。使用 Typescript,基於 React,Nextjs 與 Apollo Client。
- editor: Matters.Town 所見即所得編輯器,基於 Tiptap。
- upload client: GraphQL文件上傳組件。Fork 自 apollo-upload-client,支持 persistence query。
- slugify: 支持 CJK charset 的 slugify。
- docker: Matters Lab 使用的 docker 鏡像。
- slack notification: slack 通知服務 AWS lambda 函數,用於開發操作流程中的通知。
Matters 在持續探索更好的點對點信息分發的機制和協議。以下是一些相關客戶端。
- Hypha Publication: 實驗性項目,對接 Matters 服務器的點對點客戶端。
- Hypha Desktop: 桌面版客戶端,基於Election.js 與 IPFS 。可以直接下載作爲IPFS瀏覽器使用。
- Hypha Extension: 瀏覽器插件客戶端,基於 js-ipfs 與 orbit-db。可用於加密的點對點通信等功能。目前尚未完工。
- Beaker Browser: 一個較爲成熟的點對點瀏覽器,支持
://dat協議。目前有關於將 Matters 通過unwalled.garden 協議 與 Hyperdrive 適配到Beaker Browser的討論與實驗。
- MatREQ: 向 Matters 用戶請求特定主題的文章。
- matters 消音器: 瀏覽器插件,用於屏蔽特定用戶,支持共享黑名單。有Chrome 與 Firefox 兩個版本,代碼開源。
- matters2ipfs: 將 Matters 文章轉為 ipfs 鏈接,可以在墻內打開,代碼開源.
- matters 個人網站: 通過 Matters.Town 備份的個人網站,代碼開源。
感謝以下貢獻者的協助,讓我們的產品更加安全。你可以通過拉取請求來加入自己的名字。
- huli (GitHub, HitCon)
- CORS misconfiguration
- 圖片 src XSS
- iframe open redirect
- 登陸頁重定向 XSS
- catding (GitHub, Matters)
- 上傳文件至 IPFS 時缺少大小或者域名檢查
- Aidil Arief
- 登陸頁重定向 XSS