diff --git a/lnbits/extensions/tpos/README.md b/lnbits/extensions/tpos/README.md
deleted file mode 100644
index c7e3481d2..000000000
--- a/lnbits/extensions/tpos/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# TPoS
-
-## A Shareable PoS (Point of Sale) that doesn't need to be installed and can run in the browser!
-
-An easy, fast and secure way to accept Bitcoin, over Lightning Network, at your business. The PoS is isolated from the wallet, so it's safe for any employee to use. You can create as many TPOS's as you need, for example one for each employee, or one for each branch of your business.
-
-### Usage
-
-1. Enable extension
-2. Create a TPOS\
- 
-3. Open TPOS on the browser\
- 
-4. Present invoice QR to customer\
- 
diff --git a/lnbits/extensions/tpos/__init__.py b/lnbits/extensions/tpos/__init__.py
deleted file mode 100644
index c1b5a7ddd..000000000
--- a/lnbits/extensions/tpos/__init__.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import asyncio
-
-from fastapi import APIRouter
-from fastapi.staticfiles import StaticFiles
-
-from lnbits.db import Database
-from lnbits.helpers import template_renderer
-from lnbits.tasks import catch_everything_and_restart
-
-db = Database("ext_tpos")
-
-tpos_ext: APIRouter = APIRouter(prefix="/tpos", tags=["TPoS"])
-
-tpos_static_files = [
- {
- "path": "/tpos/static",
- "app": StaticFiles(directory="lnbits/extensions/tpos/static"),
- "name": "tpos_static",
- }
-]
-
-
-def tpos_renderer():
- return template_renderer(["lnbits/extensions/tpos/templates"])
-
-
-from .tasks import wait_for_paid_invoices
-from .views import * # noqa
-from .views_api import * # noqa
-
-
-def tpos_start():
- loop = asyncio.get_event_loop()
- loop.create_task(catch_everything_and_restart(wait_for_paid_invoices))
diff --git a/lnbits/extensions/tpos/config.json b/lnbits/extensions/tpos/config.json
deleted file mode 100644
index 0c118e1a5..000000000
--- a/lnbits/extensions/tpos/config.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "TPoS",
- "short_description": "A shareable PoS terminal!",
- "tile": "/tpos/static/image/tpos.png",
- "contributors": ["talvasconcelos", "arcbtc", "leesalminen"]
-}
diff --git a/lnbits/extensions/tpos/crud.py b/lnbits/extensions/tpos/crud.py
deleted file mode 100644
index 94e2c0068..000000000
--- a/lnbits/extensions/tpos/crud.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from typing import List, Optional, Union
-
-from lnbits.helpers import urlsafe_short_hash
-
-from . import db
-from .models import CreateTposData, TPoS
-
-
-async def create_tpos(wallet_id: str, data: CreateTposData) -> TPoS:
- tpos_id = urlsafe_short_hash()
- await db.execute(
- """
- INSERT INTO tpos.tposs (id, wallet, name, currency, tip_options, tip_wallet)
- VALUES (?, ?, ?, ?, ?, ?)
- """,
- (
- tpos_id,
- wallet_id,
- data.name,
- data.currency,
- data.tip_options,
- data.tip_wallet,
- ),
- )
-
- tpos = await get_tpos(tpos_id)
- assert tpos, "Newly created tpos couldn't be retrieved"
- return tpos
-
-
-async def get_tpos(tpos_id: str) -> Optional[TPoS]:
- row = await db.fetchone("SELECT * FROM tpos.tposs WHERE id = ?", (tpos_id,))
- return TPoS(**row) if row else None
-
-
-async def get_tposs(wallet_ids: Union[str, List[str]]) -> List[TPoS]:
- if isinstance(wallet_ids, str):
- wallet_ids = [wallet_ids]
-
- q = ",".join(["?"] * len(wallet_ids))
- rows = await db.fetchall(
- f"SELECT * FROM tpos.tposs WHERE wallet IN ({q})", (*wallet_ids,)
- )
-
- return [TPoS(**row) for row in rows]
-
-
-async def delete_tpos(tpos_id: str) -> None:
- await db.execute("DELETE FROM tpos.tposs WHERE id = ?", (tpos_id,))
diff --git a/lnbits/extensions/tpos/migrations.py b/lnbits/extensions/tpos/migrations.py
deleted file mode 100644
index 565c05abf..000000000
--- a/lnbits/extensions/tpos/migrations.py
+++ /dev/null
@@ -1,36 +0,0 @@
-async def m001_initial(db):
- """
- Initial tposs table.
- """
- await db.execute(
- """
- CREATE TABLE tpos.tposs (
- id TEXT PRIMARY KEY,
- wallet TEXT NOT NULL,
- name TEXT NOT NULL,
- currency TEXT NOT NULL
- );
- """
- )
-
-
-async def m002_addtip_wallet(db):
- """
- Add tips to tposs table
- """
- await db.execute(
- """
- ALTER TABLE tpos.tposs ADD tip_wallet TEXT NULL;
- """
- )
-
-
-async def m003_addtip_options(db):
- """
- Add tips to tposs table
- """
- await db.execute(
- """
- ALTER TABLE tpos.tposs ADD tip_options TEXT NULL;
- """
- )
diff --git a/lnbits/extensions/tpos/models.py b/lnbits/extensions/tpos/models.py
deleted file mode 100644
index f6522adda..000000000
--- a/lnbits/extensions/tpos/models.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from sqlite3 import Row
-from typing import Optional
-
-from fastapi import Query
-from pydantic import BaseModel
-
-
-class CreateTposData(BaseModel):
- name: str
- currency: str
- tip_options: str = Query(None)
- tip_wallet: str = Query(None)
-
-
-class TPoS(BaseModel):
- id: str
- wallet: str
- name: str
- currency: str
- tip_options: Optional[str]
- tip_wallet: Optional[str]
-
- @classmethod
- def from_row(cls, row: Row) -> "TPoS":
- return cls(**dict(row))
-
-
-class PayLnurlWData(BaseModel):
- lnurl: str
diff --git a/lnbits/extensions/tpos/static/image/tpos.png b/lnbits/extensions/tpos/static/image/tpos.png
deleted file mode 100644
index c663032d9..000000000
Binary files a/lnbits/extensions/tpos/static/image/tpos.png and /dev/null differ
diff --git a/lnbits/extensions/tpos/tasks.py b/lnbits/extensions/tpos/tasks.py
deleted file mode 100644
index 4b7bd9f9c..000000000
--- a/lnbits/extensions/tpos/tasks.py
+++ /dev/null
@@ -1,64 +0,0 @@
-import asyncio
-
-from loguru import logger
-
-from lnbits.core.models import Payment
-from lnbits.core.services import create_invoice, pay_invoice, websocketUpdater
-from lnbits.helpers import get_current_extension_name
-from lnbits.tasks import register_invoice_listener
-
-from .crud import get_tpos
-
-
-async def wait_for_paid_invoices():
- invoice_queue = asyncio.Queue()
- register_invoice_listener(invoice_queue, get_current_extension_name())
-
- while True:
- payment = await invoice_queue.get()
- await on_invoice_paid(payment)
-
-
-async def on_invoice_paid(payment: Payment) -> None:
- if payment.extra.get("tag") != "tpos":
- return
-
- tipAmount = payment.extra.get("tipAmount")
-
- strippedPayment = {
- "amount": payment.amount,
- "fee": payment.fee,
- "checking_id": payment.checking_id,
- "payment_hash": payment.payment_hash,
- "bolt11": payment.bolt11,
- }
-
- tpos_id = payment.extra.get("tposId")
- assert tpos_id
-
- tpos = await get_tpos(tpos_id)
- assert tpos
-
- await websocketUpdater(tpos_id, str(strippedPayment))
-
- if not tipAmount:
- # no tip amount
- return
-
- wallet_id = tpos.tip_wallet
- assert wallet_id
-
- payment_hash, payment_request = await create_invoice(
- wallet_id=wallet_id,
- amount=int(tipAmount),
- internal=True,
- memo=f"tpos tip",
- )
- logger.debug(f"tpos: tip invoice created: {payment_hash}")
-
- checking_id = await pay_invoice(
- payment_request=payment_request,
- wallet_id=payment.wallet_id,
- extra={**payment.extra, "tipSplitted": True},
- )
- logger.debug(f"tpos: tip invoice paid: {checking_id}")
diff --git a/lnbits/extensions/tpos/templates/tpos/_api_docs.html b/lnbits/extensions/tpos/templates/tpos/_api_docs.html
deleted file mode 100644
index cbb21be13..000000000
--- a/lnbits/extensions/tpos/templates/tpos/_api_docs.html
+++ /dev/null
@@ -1,79 +0,0 @@
-
- Thiago's Point of Sale is a secure, mobile-ready, instant and shareable
- point of sale terminal (PoS) for merchants. The PoS is linked to your
- LNbits wallet but completely air-gapped so users can ONLY create
- invoices. To share the TPoS hit the hash on the terminal.
- GET /tpos/api/v1/tposs
- Headers
- {"X-Api-Key": <invoice_key>}
- Body (application/json)
-
- Returns 200 OK (application/json)
-
- [<tpos_object>, ...]
- Curl example
- curl -X GET {{ request.base_url }}tpos/api/v1/tposs -H "X-Api-Key:
- <invoice_key>"
-
- POST /tpos/api/v1/tposs
- Headers
- {"X-Api-Key": <invoice_key>}
- Body (application/json)
- {"name": <string>, "currency": <string*ie USD*>}
-
- Returns 201 CREATED (application/json)
-
- {"currency": <string>, "id": <string>, "name":
- <string>, "wallet": <string>}
- Curl example
- curl -X POST {{ request.base_url }}tpos/api/v1/tposs -d '{"name":
- <string>, "currency": <string>}' -H "Content-type:
- application/json" -H "X-Api-Key: <admin_key>"
-
- DELETE
- /tpos/api/v1/tposs/<tpos_id>
- Headers
- {"X-Api-Key": <admin_key>}
- Returns 204 NO CONTENT
-
-
Curl example
- curl -X DELETE {{ request.base_url
- }}tpos/api/v1/tposs/<tpos_id> -H "X-Api-Key: <admin_key>"
-
-
- {{ tpos.name }}
{{ request.url }}
-