diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 0a15e43a4..0bf2be972 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,12 @@ # These are supported funding model platforms -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +github: mgilangjanuar patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username +open_collective: teledrive ko_fi: # Replace with a single Ko-fi username tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry liberapay: # Replace with a single Liberapay username issuehunt: # Replace with a single IssueHunt username otechie: # Replace with a single Otechie username -custom: ['https://paypal.me/mgilangjanuar', 'https://www.buymeacoffee.com/mgilangjanuar'] +custom: ['https://paypal.me/mgilangjanuar'] diff --git a/package.json b/package.json index 12d8222e9..286f4e872 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "teledrive", - "version": "1.0.0", + "version": "1.0.3", "repository": "git@github.com:mgilangjanuar/teledrive.git", "author": "M Gilang Januar ", "license": "MIT", diff --git a/server/.env-example b/server/.env-example index 7f6dee9f3..4d10e99c8 100644 --- a/server/.env-example +++ b/server/.env-example @@ -20,4 +20,8 @@ PAYPAL_CLIENT_ID= PAYPAL_CLIENT_SECRET= PAYPAL_PLAN_PREMIUM_ID= +MIDTRANS_MERCHANT_ID= +MIDTRANS_CLIENT_KEY= +MIDTRANS_SERVER_KEY= + IS_MAINTENANCE= \ No newline at end of file diff --git a/server/package.json b/server/package.json index ca6fa8191..5ca0a5a06 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "server", - "version": "1.0.0", + "version": "1.0.3", "main": "dist/index.js", "license": "MIT", "private": true, @@ -9,7 +9,7 @@ "build": "rimraf dist && eslint --fix -c .eslintrc.js --ext .ts . && tsc" }, "dependencies": { - "@mgilangjanuar/telegram": "2.0.11", + "@mgilangjanuar/telegram": "2.0.15", "@sentry/node": "^6.14.1", "@sentry/tracing": "^6.14.1", "@types/moment": "^2.13.0", diff --git a/server/src/api/v1/Documents.ts b/server/src/api/v1/Documents.ts index 9b53d1606..80d9f90d4 100644 --- a/server/src/api/v1/Documents.ts +++ b/server/src/api/v1/Documents.ts @@ -177,92 +177,118 @@ Some of the features of this Site may allow Users to view, post, publish, share, You agree not to circumvent, disable or otherwise interfere with the security-related features of this Site (including without limitation those features that prevent or restrict use or copying of any Companies Content or User Content) or enforce limitations on the use of this Site, the Companies Content or the User Content therein. -## 6. COMPANIES USE OF USER CONTENT -The provisions in this Section apply specifically to Companies use of User Content posted to Site. -You shall be solely responsible for any and all of your User Content or User Content that is submitted by you, and the consequences of, and requirements for, distributing it. -With Respect to User Submissions, you acknowledge and agree that: -- Your User Submissions are entirely voluntary. -- Your User Submissions do not establish a confidential relationship or obligate Company to treat your User Submissions as confidential or secret. -- Company has no obligation, either express or implied, to develop or use your User Submissions, and no compensation is due to you or to anyone else for any intentional or unintentional use of your User Submissions. - -Company shall own exclusive rights (including all intellectual property and other proprietary rights) to any User Submissions posted to this Site, and shall be entitled to the unrestricted use and dissemination of any User Submissions posted to this Site for any purpose, commercial or otherwise, without acknowledgment or compensation to you or to anyone else. -With Respect to User Content, by posting or publishing User Content to this Site, you authorize Company to use the intellectual property and other proprietary rights in and to your User Content to enable inclusion and use of the User Content in the manner contemplated by this Site and this Agreement. -You hereby grant Company a worldwide, non-exclusive, royalty-free, sublicensable, and transferable license to use, reproduce, distribute, prepare derivative works of, combine with other works, display, and perform your User Content in connection with this Site, including without limitation for promoting and redistributing all or part of this Site in any media formats and through any media channels without restrictions of any kind and without payment or other consideration of any kind, or permission or notification, to you or any third party. You also hereby grant each User of this Site a non-exclusive license to access your User Content through this Site, and to use, reproduce, distribute, prepare derivative works of, combine with other works, display, and perform your User Content as permitted through the functionality of this Site and under this Agreement. -The above licenses granted by you in your User Content terminate within a commercially reasonable time after you remove or delete your User Content from this Site. You understand and agree, however, that Company may retain (but not distribute, display, or perform) server copies of your User Content that have been removed or deleted. The above licenses granted by you in your User Content are perpetual and irrevocable. -Company generally does not pre-screen User Content but reserves the right (but undertakes no duty) to do so and decide whether any item of User Content is appropriate and/or complies with this Agreement. Company may remove any item of User Content if it violating this Agreement, at any time and without prior notice. - - - -## 7. LINKS TO THIRD-PARTY WEBSITES +## 6. LINKS TO THIRD-PARTY WEBSITES This Site may contain links to third-party websites that are not owned or controlled by Company. Company assumes no responsibility for the content, terms and conditions, privacy policies, or practices of any third-party websites. In addition, Company does not censor or edit the content of any third-party websites. By using this Site you expressly release Company from any and all liability arising from your use of any third-party website. Accordingly, Company encourages you to be aware when you leave this Site and to review the terms and conditions, privacy policies, and other governing documents of each other website that you may visit. -## 8. DISCLAIMER OF REPRESENTATIONS AND WARRANTIES +## 7. DISCLAIMER OF REPRESENTATIONS AND WARRANTIES YOU SPECIFICALLY ACKNOWLEDGE AND AGREE THAT YOUR USE OF THIS SITE SHALL BE AT YOUR OWN RISK AND THAT THIS SITE ARE PROVIDED "AS IS", "AS AVAILABLE" AND "WITH ALL FAULTS". COMPANY, ITS OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, DISCLAIM ALL WARRANTIES, STATUTORY, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. COMPANY, ITS OFFICERS, DIRECTORS, EMPLOYEES, AND AGENTS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT (I) THE ACCURACY, COMPLETENESS, OR CONTENT OF THIS SITE, (II) THE ACCURACY, COMPLETENESS, OR CONTENT OF ANY SITES LINKED (THROUGH HYPERLINKS, BANNER ADVERTISING OR OTHERWISE) TO THIS SITE, AND/OR (III) THE SERVICES FOUND AT THIS SITE OR ANY SITES LINKED (THROUGH HYPERLINKS, BANNER ADVERTISING OR OTHERWISE) TO THIS SITE, AND COMPANY ASSUMES NO LIABILITY OR RESPONSIBILITY FOR THE SAME. IN ADDITION, YOU SPECIFICALLY ACKNOWLEDGE AND AGREE THAT NO ORAL OR WRITTEN INFORMATION OR ADVICE PROVIDED BY COMPANY, ITS OFFICERS, DIRECTORS, EMPLOYEES, OR AGENTS, AND THIRD-PARTY SERVICE PROVIDERS WILL (I) CONSTITUTE LEGAL OR FINANCIAL ADVICE OR (II) CREATE A WARRANTY OF ANY KIND WITH RESPECT TO THIS SITE OR THE SERVICES FOUND AT THIS SITE, AND USERS SHOULD NOT RELY ON ANY SUCH INFORMATION OR ADVICE. THE FOREGOING DISCLAIMER OF REPRESENTATIONS AND WARRANTIES SHALL APPLY TO THE FULLEST EXTENT PERMITTED BY LAW, and shall survive any termination or expiration of this Agreement or your use of this Site or the Services found at this Site. -## 9. LIMITATION OF LIABILITY +## 8. LIMITATION OF LIABILITY IN NO EVENT SHALL COMPANY, ITS OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, AND ALL THIRD PARTY SERVICE PROVIDERS, BE LIABLE TO YOU OR ANY OTHER PERSON OR ENTITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES WHATSOEVER, INCLUDING ANY DAMAGES THAT MAY RESULT FROM (I) THE ACCURACY, COMPLETENESS, OR CONTENT OF THIS SITE, (II) THE ACCURACY, COMPLETENESS, OR CONTENT OF ANY SITES LINKED (THROUGH HYPERLINKS, BANNER ADVERTISING OR OTHERWISE) TO THIS SITE, (III) THE SERVICES FOUND AT THIS SITE OR ANY SITES LINKED (THROUGH HYPERLINKS, BANNER ADVERTISING OR OTHERWISE) TO THIS SITE, (IV) PERSONAL INJURY OR PROPERTY DAMAGE OF ANY NATURE WHATSOEVER, (V) THIRD-PARTY CONDUCT OF ANY NATURE WHATSOEVER, (VI) ANY INTERRUPTION OR CESSATION OF SERVICES TO OR FROM THIS SITE OR ANY SITES LINKED (THROUGH HYPERLINKS, BANNER ADVERTISING OR OTHERWISE) TO THIS SITE, (VII) ANY VIRUSES, WORMS, BUGS, TROJAN HORSES, OR THE LIKE, WHICH MAY BE TRANSMITTED TO OR FROM THIS SITE OR ANY SITES LINKED (THROUGH HYPERLINKS, BANNER ADVERTISING OR OTHERWISE) TO THIS SITE, (VIII) ANY USER CONTENT OR CONTENT THAT IS DEFAMATORY, HARASSING, ABUSIVE, HARMFUL TO MINORS OR ANY PROTECTED CLASS, PORNOGRAPHIC, "X-RATED", OBSCENE OR OTHERWISE OBJECTIONABLE, AND/OR (IX) ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF YOUR USE OF THIS SITE OR THE SERVICES FOUND AT THIS SITE, WHETHER BASED ON WARRANTY, CONTRACT, TORT, OR ANY OTHER LEGAL OR EQUITABLE THEORY, AND WHETHER OR NOT COMPANY IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN ADDITION, You SPECIFICALLY ACKNOWLEDGE AND agree that any cause of action arising out of or related to this Site or the Services found at this Site must be commenced within one (1) year after the cause of action accrues, otherwise such cause of action shall be permanently barred. THE FOREGOING LIMITATION OF LIABILITY SHALL APPLY TO THE FULLEST EXTENT PERMITTED BY LAW, AND shall survive any termination or expiration of this Agreement or your use of this Site or the Services found at this Site. -## 10. INDEMNITY +## 9. INDEMNITY You agree to protect, defend, indemnify and hold harmless Company and its officers, directors, employees, agents from and against any and all claims, demands, costs, expenses, losses, liabilities and damages of every kind and nature (including, without limitation, reasonable attorneys’ fees) imposed upon or incurred by Company directly or indirectly arising from (i) your use of and access to this Site; (ii) your violation of any provision of this Agreement or the policies or agreements which are incorporated herein; and/or (iii) your violation of any third-party right, including without limitation any intellectual property or other proprietary right. The indemnification obligations under this section shall survive any termination or expiration of this Agreement or your use of this Site or the Services found at this Site. -## 11. DATA TRANSFER +## 10. DATA TRANSFER If you are visiting this Site from a country other than the country in which our servers are located, your communications with us may result in the transfer of information across international boundaries. By visiting this Site and communicating electronically with us, you consent to such transfers. -## 12. AVAILABILITY OF WEBSITE +## 11. AVAILABILITY OF WEBSITE Subject to the terms and conditions of this Agreement and our policies, we shall use commercially reasonable efforts to attempt to provide this Site on 24/7 basis. You acknowledge and agree that from time to time this Site may be inaccessible for any reason including, but not limited to, periodic maintenance, repairs or replacements that we undertake from time to time, or other causes beyond our control including, but not limited to, interruption or failure of telecommunication or digital transmission links or other failures. You acknowledge and agree that we have no control over the availability of this Site on a continuous or uninterrupted basis, and that we assume no liability to you or any other party with regard thereto. -## 13. DISCONTINUED SERVICES +## 12. DISCONTINUED SERVICES Company reserves the right to cease offering or providing any of the Services at any time, for any or no reason, and without prior notice. Although Company makes great effort to maximize the lifespan of all its Services, there are times when a Service we offer will be discontinued. If that is the case, that product or service will no longer be supported by Company. In such case, Company will either offer a comparable Service for you to migrate to or a refund. Company will not be liable to you or any third party for any modification, suspension, or discontinuance of any of the Services we may offer or facilitate access to. -## 14. FEES AND PAYMENTS +## 13. FEES AND PAYMENTS You acknowledge and agree that your payment will be charged and processed by TeleDrive. You agree to pay any and all prices and fees due for Services purchased or obtained at this Site at the time you order the Services. Company expressly reserves the right to change or modify its prices and fees at any time, and such changes or modifications shall be posted online at this Site and effective immediately without need for further notice to you. Refund Policy: for products and services eligible for a refund, you may request a refund under the terms and conditions of our Refund Policy which can be accessed [here.](https://portal.termshub.com/teledrive.vercel.app#refund_policy) -## 15. NO THIRD-PARTY BENEFICIARIES +## 14. NO THIRD-PARTY BENEFICIARIES Nothing in this Agreement shall be deemed to confer any third-party rights or benefits. -## 16. COMPLIANCE WITH LOCAL LAWS +## 15. COMPLIANCE WITH LOCAL LAWS Company makes no representation or warranty that the content available on this Site are appropriate in every country or jurisdiction, and access to this Site from countries or jurisdictions where its content is illegal is prohibited. Users who choose to access this Site are responsible for compliance with all local laws, rules and regulations. -## 17. GOVERNING LAW +## 16. GOVERNING LAW This Agreement and any dispute or claim arising out of or in connection with it or its subject matter or formation shall be governed by and construed in accordance with the laws of Indonesia, DKI Jakarta, to the exclusion of conflict of law rules. -## 18. DISPUTE RESOLUTION +## 17. DISPUTE RESOLUTION Any controversy or claim arising out of or relating to these Terms of Services will be settled by binding arbitration. Any such controversy or claim must be arbitrated on an individual basis, and must not be consolidated in any arbitration with any claim or controversy of any other party. The arbitration must be conducted in Indonesia, DKI Jakarta, and judgment on the arbitration award may be entered into any court having jurisdiction thereof. -## 19. TITLES AND HEADINGS +## 18. TITLES AND HEADINGS The titles and headings of this Agreement are for convenience and ease of reference only and shall not be utilized in any way to construe or interpret the agreement of the parties as otherwise set forth herein. -## 20. SEVERABILITY +## 19. SEVERABILITY Each covenant and agreement in this Agreement shall be construed for all purposes to be a separate and independent covenant or agreement. If a court of competent jurisdiction holds any provision (or portion of a provision) of this Agreement to be illegal, invalid, or otherwise unenforceable, the remaining provisions (or portions of provisions) of this Agreement shall not be affected thereby and shall be found to be valid and enforceable to the fullest extent permitted by law. -## 21. CONTACT INFORMATION +## 20. CONTACT INFORMATION If you have any questions about this Agreement, please contact us by email or regular mail at the following address: TeleDrive South Jakarta, Indonesia Indonesia mgilangjanuar@gmail.com` }) } -} \ No newline at end of file + + @Endpoint.GET() + public async refund(_: Request, res: Response): Promise { + return res.send({ document: `# REFUND POLICY + +All our clients are very important to us, that's why TeleDrive ("Company"), has created the following Refund Policy to let You know how we handle the refunds for the goods ordered and bought on our website https://teledriveapp.com ("Website"). +The terms "You," "Your," and "Yours" refer to the entity/ person/ organization using our Website. When this Policy mentions "we", "us,", and "our" it refers to the Company and its subsidiaries or /and affiliates. The term "goods" refer to any product or item bought on our Website by You. +This Refund Policy is governed by our [Terms of Services](https://teledriveapp.com/terms). +For any questions regarding this Refund Policy or any requests regarding the refunds and returns, please contact us by email mgilangjanuar@gmail.com, phone +6289676721188 or other contacts provided below. +You have the right, without giving a reason, to return the goods within 14 days, if it has not been used, damaged or its appearance has not substantially changed, that is, the appearance of the product or its packaging has been made only such alterations as were necessary to inspect the goods received. +The right to withdraw from a distance contract within 14 days without giving a reason does not apply to legal persons (e.g. companies, entrepreneurs). +This Return policy does not limit Your statutory rights to withdraw or rights You may have in relation to incorrect, damaged or defective goods. + + +## Standard Returns +Any goods that You wish to return must be in the original packaging and unopened, in a condition fit for resale. If the Goods to be returned do not meet these conditions, we will be unable to offer a refund. +You must place your refund request within 14 days of delivery of the item. +Please contact our Support to begin the return and refund process, Support team will walk you through the process and help you. +In case of the return of the goods, you will be responsible for paying the return shipping costs. +You must exercise return right responsibly and return the product in the original neat packaging, as well as return all complete parts of the product. You are responsible for the complete set of the returned goods. If the goods are not complete, we won't be able to accept the returned goods and issue a refund. +Once the Goods have been received and checked by our staff, a refund will be authorised by the same method that the payment was made. Depending on your financial institution, refunds can take up to 30 days to be credited to your original payment method. In all cases we have the right to suspend the refund until the good are received back and inspected. +If You fail to meet the deadlines of our Return policy, we will be unable to offer a refund. + + +## Defective goods +In certain cases, such as defective, damaged or wrong goods, you may be required to provide evidence of the issue, such as a photo or video, or to return the item to receive a refund. +You must contact our company at mgilangjanuar@gmail.com within 14 days upon purchase and provide detailed information, such as: + + - Proof of purchase + - Order number + +When submitting a complaint, You must indicate how You wish the claim to be resolved: + + - To refund the money paid + +In case You are required to return the goods back to us, You will be responsible for paying the return shipping costs. +The goods must be returned in the original packaging (with instructions and/or warranty card, if they were delivered with the product). + + +## Further information +This Policy was created with the help of the [TermsHub.io](https://termshub.io?utm_source=referral&utm_medium=generated_documents&utm_campaign=referral_documents&utm_content=pp_th_text) and the [Refund & Return Policy Generator](https://termshub.io/refund-policy) and applies only to the refunds for the goods and services sold by our Company. Our Policy does not apply to the refunds for the goods and services offered by other companies or individuals.` }) + } +} diff --git a/server/src/model/entities/Users.ts b/server/src/model/entities/Users.ts index 111029a05..5f422bc9e 100644 --- a/server/src/model/entities/Users.ts +++ b/server/src/model/entities/Users.ts @@ -23,6 +23,9 @@ export class Users extends BaseModelWithID { @Column({ default: null }) subscription_id?: string + @Column({ default: null }) + midtrans_id?: string + @Column({ default: null }) plan_expired_at?: Date diff --git a/web/package.json b/web/package.json index 439518751..4cf8d5bd3 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "web", - "version": "1.0.0", + "version": "1.0.3", "private": true, "dependencies": { "@craco/craco": "^6.3.0", diff --git a/web/src/App.tsx b/web/src/App.tsx index 9d908478a..b94f3946e 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -22,6 +22,9 @@ const Login = lazy( const Terms = lazy( () => import(/* webpackChunkName: 'TermsPage' */ './pages/Terms') ) +const Refund = lazy( + () => import(/* webpackChunkName: 'RefundPage' */ './pages/Refund') +) const Privacy = lazy( () => import(/* webpackChunkName: 'PrivacyPage' */ './pages/Privacy') ) @@ -58,6 +61,7 @@ function App(): React.ReactElement { + diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 1b183e2d6..54c51af32 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -161,12 +161,17 @@ const Home: React.FC = () => { Our Sponsor - + + + + + + diff --git a/web/src/pages/Pricing.tsx b/web/src/pages/Pricing.tsx index c92464316..d6769395f 100644 --- a/web/src/pages/Pricing.tsx +++ b/web/src/pages/Pricing.tsx @@ -1,5 +1,5 @@ import { ArrowRightOutlined } from '@ant-design/icons' -import { Button, Card, Col, Divider, Layout, Row, Typography } from 'antd' +import { Button, Card, Col, Divider, Layout, notification, Row, Switch, Typography } from 'antd' import React, { useState } from 'react' import { useHistory } from 'react-router' import { Link } from 'react-router-dom' @@ -12,6 +12,7 @@ const Pricing: React.FC = () => { const history = useHistory() const { data: me } = useSWRImmutable('/users/me', fetcher) const [loading, setLoading] = useState() + const [isIDR, setIsIDR] = useState(false) const select = (plan: 'free' | 'premium' | 'professional' | 'donation') => { if (plan === 'free' || me?.user.plan === plan) { @@ -43,10 +44,13 @@ const Pricing: React.FC = () => { - const Premium = () => Subscribe with PayPal ]} onClick={() => select('premium')}> + const Premium = () => {isIDR ? <>Powered by Midtrans : <>Subscribe with PayPal} ]} onClick={() => isIDR ? notification.info({ message: 'Coming soon', description: 'Please wait, we\'re on it.' }) : select('premium')}> - $ - 10 + {isIDR ? <> + Rp 144k + : <> + $ 10 + } /year
    @@ -59,12 +63,12 @@ const Pricing: React.FC = () => { const Donation = () =>
    - Support us to keep this service running 🚀 + Support us to keep this service running
    - - Buy Me A Coffee + + @@ -74,6 +78,7 @@ const Pricing: React.FC = () => { Feel free to contact us if you have any questions or become a sponsor — or if you would like to help us in other ways. + {/* */}
    return <> @@ -81,6 +86,9 @@ const Pricing: React.FC = () => { + + USD 🇺🇸   setIsIDR(e)} />   IDR 🇮🇩 + diff --git a/web/src/pages/Refund.tsx b/web/src/pages/Refund.tsx new file mode 100644 index 000000000..f30aa194c --- /dev/null +++ b/web/src/pages/Refund.tsx @@ -0,0 +1,29 @@ +import { Col, Layout, Row } from 'antd' +import React from 'react' +import ReactMarkdown from 'react-markdown' +import remarkGfm from 'remark-gfm' +import useSWRImmutable from 'swr/immutable' +import { fetcher } from '../utils/Fetcher' +import Footer from './components/Footer' +import Navbar from './components/Navbar' + +const Terms: React.FC = () => { + const { data } = useSWRImmutable('/documents/refund', fetcher) + const { data: me } = useSWRImmutable('/users/me', fetcher) + + return <> + + + + + + {data?.document} + + + + +