From 3f916b4fbd27b619017a66c8cceb83ff6d016ed6 Mon Sep 17 00:00:00 2001 From: mrxcell <42675247+mrxcell@users.noreply.github.com> Date: Tue, 20 Dec 2022 21:50:48 -0500 Subject: Update and rename de.json to esp.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi Guys, i´ve made a couple of changes. Let me know if there is a way to preview the website in spanish so i can make some adjustments. Regards! Yulian R. --- src/locales/de.json | 277 -------------------------------------------------- src/locales/esp.json | 282 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 282 insertions(+), 277 deletions(-) delete mode 100644 src/locales/de.json create mode 100644 src/locales/esp.json (limited to 'src') diff --git a/src/locales/de.json b/src/locales/de.json deleted file mode 100644 index 2262dea3..00000000 --- a/src/locales/de.json +++ /dev/null @@ -1,277 +0,0 @@ -{ - "404": { - "404": "404", - "pageNotFound": "Diese Seite konnte nicht gefunden werden." - }, - "about": { - "header": "Über uns", - "p1": "Coinos ist eine Open-Source-Bitcoin-Bezahl-App. Im September 2012 starteten wir die Entwicklung in Vancouver, um lokalen Händlern eine bequeme Möglichkeit zu bieten, Bitcoin-Zahlungen zu akzeptieren.", - "p2": "Sie können den Quellcode herunterladen, um die Coinos-App mit Ihrem eigenen Bitcoin- und Lightning-Node zu verbinden. Gerne helfen wir Ihnen dabei, ein wertvoller Dienstleister sowie Zahlungsanbieter für Ihre Kunden zu werden.", - "p3": "Transaktionen zwischen Nutzerkonten auf unserem Server werden Off-Chain durchgeführt. Diese werden sofort abgewickelt und sind völlig kostenlos sowie unlimitiert.", - "team": { - "header": "Das Team", - "adam": { - "name": "Adam Soltys", - "position": "Chief Technical Officer", - "bio": "Adam ist ein Webentwickler und Bitcoin-Enthusiast, der davon überzeugt ist, dass hartes Geld der Schlüssel zur Steigerung des globalen Wohlstands ist. Er lebt mit seiner Frau Chelsea und seinen zwei Kindern in North Vancouver." - }, - "secondl1ght": { - "name": "secondl1ght", - "position": "Web Developer", - "bio": "Secondl1ght hat sich das Programmieren selbst beigebracht, ist kopfüber in den Bitcoin-Kaninchenbau gesprungen und hat seinen Fiat-Job aufgegeben, um sich voll und ganz auf die Bitcoin-Entwicklung zu konzentrieren. Er wirkt bei Open-Source-Projekten mit, ist ein Verfechter der Privatsphäre und ein Freiheitsliebhaber." - }, - - "karnage": { - "name": "Karnage", - "position": "Product Designer", - "bio": "Meine Mission ist es, Startup-Gründern zum Erfolg zu verhelfen. Ich entwickle Produkte, die dabei helfen, dieses Ziel zu erreichen." - }, - "shauna": { - "name": "Shauna", - "position": "Operations & Marketing", - "bio": "Strategie- & Projektmanagement. Unser Universalgenie in allen Bereichen. Findet immer Zeit, um sich auf einen Kaffee zu treffen." - }, - "cole": { - "name": "Cole", - "position": "Bitcoin Experte", - "bio": "Als zertifizierter Bitcoin-Experte ist Cole ein engagierter Mensch mit großer Leidenschaft für Freiheit. Er entdeckte Bitcoin im Jahr 2016 und beschäftigte sich eingehend damit. Jetzt möchte er das Lightning-Netzwerk so vielen Nutzern wie möglich näherbringen." - }, - "john": { - "name": "John Barratt", - "position": "Full Stack Web Developer", - "bio": "Wenn er nicht gerade programmiert, findet man John in der Natur beim Entdecken der vielen, großartigen Wanderwege, die BC zu bieten hat." - } - }, - "locations": { - "header": "Standorte", - "description": "Hier finden Sie einige Unternehmen, welche bereits Zahlungen mit Bitcoin über Coinos akzeptieren. Wir hoffen, dass Ihr Unternehmen das nächste sein wird!" - } - }, - "error": { - "header": "Error", - "message": "Bitte versuchen Sie es erneut oder kontaktieren Sie unseren Support.", - "signIn": "Bitte melden Sie sich an, um fortzufahren." - }, - "faq": { - "header": "FAQ", - "cost": { - "question": "Welche Gebühren fallen an?", - "answer": "Die Registrierung eines Kontos sowie Zahlungen über das Lightning-Netzwerk zu erhalten ist vollkommen kostenlos. Wir erheben eine Gebühr von 0.1%, um Lightning-Bitcoin in Bitcoin umzuwandeln." - }, - "compatibility": { - "question": "Benötige ich ein bestimmtes Gerät oder eine spezielle Software dafür?", - "answer": "Nein. Coinos ist web-basiert, das bedeutet, solange Sie über eine aktive Internetverbindung verfügen, können Sie Coinos auf jedem Endgerät nutzen. Einzelhändlern empfehlen wir, ein Telefon oder Tablet zu verwenden." - }, - "safety": { - "question": "Wann wird mein Guthaben ausgezahlt?", - "answer": "Lightning-Zahlungen werden sofort abgewickelt. Sie können Ihr Guthaben somit unmittelbar nach Zahlungseingang auf eine andere Wallet übertragen." - } - }, - "footer": { - "company": "Unternehmen", - "followUs": "Folge uns", - "github": "GitHub", - "jobs": "Jobs", - "support": "Support", - "telegram": "Telegram", - "twitter": "Twitter", - "news": "Neuigkeiten" - }, - "howItWorks": { - "header": "So funktioniert's", - "step1": { - "header": "1. Erstellen Sie Ihr Konto", - "description": "Sie benötigen nur einen Benutzernamen und ein Passwort - und schon geht's los!" - }, - "step2": { - "header": "2. Zahlungen anfordern", - "description": "Ganz gleich, wie Sie es normalerweise machen würden, allerdings mit Bitcoin." - }, - "step3": { - "header": "3. Das war's!", - "description": "Bezahlen Sie mit Ihrem Bitcoin-Bestand bei anderen Händlern oder sparen Sie diese für schlechtere Zeiten - Sie allein haben die Wahl." - } - }, - "invoice": { - "addTip": "Trinkgeld hinzufügen", - "addTipq": "Trinkgeld hinzufügen?", - "done": "Fertig", - "paymentSuccessful": "Zahlung erhalten!", - "invoice": "Rechnung", - "total": "Gesamtbetrag", - "tip": "Trinkgeld" - }, - "jobs": { - "header": "Jobs", - "subheader": "Offene Stellen", - "pitch1": "Wir sind stets auf der Suche nach Entwicklern, die unser wachsendes Team verstärken möchten (Vollzeit oder Teilzeit, Homeoffice möglich).", - "pitch2": "Möchten Sie mit uns an Open-Source-Bitcoin-Projekten arbeiten? Dann werfen Sie doch einen Blick auf unsere offenen Stellen auf", - "github": "GitHub", - "pitch3": "Wenn wir Ihr Interesse geweckt haben, würden wir uns freuen, von Ihnen zu hören. Schicken Sie uns gerne Ihren Lebenslauf an" - }, - "landing": { - "header_before_icon": "Der", - "header_with_icon": "einfachste", - "header_after_icon": "Weg um Bitcoin in Ihrem Unternehmen zu akzeptieren.", - "subheader": "Erweitern Sie Ihren Kundenstamm und Ihren Umsatz, indem Sie Bitcoin mit einer einfach zu bedienenden Web-App akzeptieren. Keine Software oder Hardware ist dafür erforderlich.", - "info1": { - "title": "Sofortzahlungen über Lightning", - "description": "Unmittelbar nachdem die Zahlung von Ihrem Kunden abgeschlossen wurde, ist diese auch bei Ihnen ersichtlich. Sie müssen sich weder um Rücklastschriften kümmern, noch auf Banküberweisungen warten. Sekundenschnelle Abrechnung - und das Beste daran: Es fallen keine 3% Kreditkartenbearbeitungsgebühren an." - }, - "info2": { - "title": "Einfache Handhabung", - "description1": "Geben Sie einfach einen Betrag in Ihrer Landeswährung ein, teilen Sie den QR-Code mit Ihrem Kunden und schon sind Sie fertig.", - "description2": "Wir nehmen Ihnen die ganze Arbeit ab, damit Sie sich auf Ihr Geschäft konzentrieren können.", - "description3": "Sie haben jederzeit die Möglichkeit, selbst über Ihr Geld zu verfügen und es sofort abzuheben." - }, - "info3": { - "title": "Gestalten Sie Ihre Übersicht nach Ihrem Geschmack", - "description": "Passen Sie die Übersicht dem Branding Ihres Unternehmens an oder nutzen Sie unser Standard-Design." - } - }, - "login": { - "optional": "Optional", - "token": "2FA Token", - "username": "Benutzername", - "password": "Passwort", - "email": "E-Mail", - "passwordRecommendation": "Wir empfehlen ein langes, zufälliges Passwort, welches mit einem Passwortgenerator erstellt wurde.", - "forgotUserOrPassword": "Benutzername oder Passwort vergessen?", - "haveAccount": "Bereits registriert?", - "noAccount": "Noch nicht registriert?", - "register": "Registrieren", - "signIn": "Einloggen", - "failed": "Login fehlgeschlagen" - }, - "nav": { - "profile": "Profil", - "startInSeconds": "Jetzt loslegen", - "account": "Konto", - "signIn": "Einloggen", - "signOut": "Ausloggen", - "dashboard": "Übersicht", - "settings": "Einstellungen", - "support": "Support" - }, - "newSiteHeader": "Kommen Sie zu unserer Eröffnungsfeier in Vancouver am 26. Oktober! Auf der Suche nach der alten Coinos-Version? Besuchen Sie classic.coinos.io", - "news": { - "header": "News", - "subheader": "Letzte Updates", - "update1": "" - }, - "user": { - "bitcoin": "Bitcoin", - "lightning": "Lightning", - "invoice": "Rechnung", - "unfollow": "Nicht mehr folgen", - "following": "Folgen", - "follow": "Folgen", - "remove": "Entfernen", - "scanToPayBTC": "Den QR-Code scannen um mit Bitcoin zu zahlen", - "this": "Das", - "lightningAddress": "Lightning Adresse", - "likeAnEmail": "ist wie eine E-Mail Adresse für Bitcoin. Sie können diese auf Ihrer Website oder auf Ihren Visitenkarten veröffentlichen und mehrfach verwenden.", - "dashboard": { - "go": "Los", - "dashboard": "Übersicht", - "accountBalance": "Kontostand", - "bitcoinPrice": "Bitcoin Preis:", - "conversionFeeWarning": "Es wird eine Abhebungsgebühr von 1% des Gesambetrags erhoben.", - "dataFromBinance": "Daten von Binance.", - "fetchingRate": "Abfragen...", - "optionalNote": "Notiz (optional)", - "send": "Senden", - "receive": "Erhalten", - "withdraw": "Senden", - "deposit": "Einzahlung", - "voucher": "Beleg" - }, - "receive": { - "lessThan1BTCWarning": "Bitte geben Sie einen Betrag unter 1 Bitcoin ein.", - "showQR": "QR-Code zeigen" - }, - "send": { - "contacts": "Kontakte", - "scan": "Scannen", - "paste": "Einfügen", - "next": "Weiter", - "placeholder": "Geben Sie eine Bitcoin-Adresse, eine Lightning-Rechnung oder einen Coinos-Benutzernamen ein" - }, - "settings": { - "bannerImage": "Logo", - "profileImage": "Profilbild", - "oneTimeCode": "Code eingeben", - "accountId": "Kontoverbindung", - "header": "Einstellungen", - "ACCOUNT": "KONTO", - "POINT_OF_SALE": "VERKAUFSSTELLE", - "SECURITY": "SICHERHEIT", - "locale": "Sprache", - "username": "Benutzername", - "email": "E-Mail", - "newPassword": "Neues Passwort", - "businessAddress": "Unternehmensadresse", - "emailNotifications": "E-Mail-Benachrichtigungen", - "emailNotificationsDescription": "Sie werden per E-Mail benachrichtigt, wenn eine Änderung auf Ihrem Konto vorgenommen wurde oder Ihnen jemand Zahlungen sendet.", - "smsNotifications": "SMS-Benachrichtigungen", - "smsNotificationsDescription": "Coinos wird Benachrichtigungen per SMS zusenden, wenn diese Funktion aktiviert ist.", - "theme": "Farbdesign", - "themeDescription": "Wählen Sie aus unseren Standard-Farbdesigns.", - "localCurrency": "Landeswährung", - "btcUnit": "Bitcoin anzeigen in:", - "bitcoin": "Bitcoin", - "satoshis": "Satoshis", - "securityPIN": "Sicherheitscode", - "securityPINDescription": "Legen Sie einen Sicherheitscode fest, der zum Entsperren Ihrer Einstellungen und zum Senden ausgehender Zahlungen verwendet wird.", - "setPIN": "Set PIN", - "autoLock": "Timer für automatische Sperre", - "autoLockDescription": "Ihr Konto wird nach einer bestimmten Zeit automatisch in einen sicheren Modus versetzt:", - "twofa": "2-Faktor Authentifizierung", - "twofaDescription": "Erhöhen Sie das Sicherheitslevel Ihres Geräts, indem Sie die 2-Faktor-Authentifizierung aktivieren.", - "twofaSetup": "2FA einrichten", - "twofaDisable": "2FA deaktivieren", - "select": "Auswählen", - "verifyPIN": "Sicherheitscode verifizieren", - "enablePIN": "PIN aktivieren", - "disablePIN": "PIN deaktivieren" - }, - "support": { - "header": "Support", - "email": "E-Mail", - "accountName": "Kontoname", - "message": "Nachricht", - "send": "Senden" - } - }, - "transactions": { - "header": "Transaktionen", - "AMOUNT": "GESAMTBETRAG", - "TYPE": "TYP", - "TIME": "ZEIT", - "sent": "Gesendet", - "received": "Erhalten", - "empty": "Noch keine Transaktionen erhalten.", - "send": "Senden", - "next": "Weiter", - "sendersChoice": "Absender", - "sendTo": "Senden an", - "to": "an", - "pay": "Bezahlen", - "requesting": "ersucht um", - "sentInvoiceTo": "Rechnung senden an", - "sentRequestTo": "Anfrage senden an", - "pleasePay": "Bitte bezahlen Sie", - "day": "Tag", - "week": "Woche", - "month": "Monat", - "all": "Alles", - "export": "Exportieren", - "invoice": "Rechnung", - "readyToPay": "Steht zur Zahlung bereit", - "describeOrder": "Benutzen Sie dieses Feld um Ihre Bestellung zu beschreiben", - "requestAnInvoice": "Rechnung anfordern", - "submit": "Übermitteln", - "isRequesting": "Anfragen", - "awaiting": "Warten auf" - } -} diff --git a/src/locales/esp.json b/src/locales/esp.json new file mode 100644 index 00000000..87de05d2 --- /dev/null +++ b/src/locales/esp.json @@ -0,0 +1,282 @@ +{ + "404": { + "404": "404", + "pageNotFound": "Pagina no encontrada." + }, + "about": { + "header": "Sobre Nosotros", + "p1": "Coinos es una aplicación de pagos en bitcoin de código abierto. Este desarrollo comenzó en septiembre de 2012 en Vancouver como una forma de proporcionar a los comerciantes locales una forma conveniente de aceptar pagos con bitcoin.", + "p2": "Descarga el código fuente para ejecutar una instancia y conectarla a tu propio nodo bitcoin y lightning. Te ayudaremos a convertirte en un excelente custodio y proveedor de pagos para tu comunidad.", + "p3": "Las transferencias de bitcoin entre usuarios en nuestro servidor se realizan off-chain, por lo que son completamente gratuitas, instantáneas e ilimitadas.", + "team": { + "header": "Nuestro Equipo", + "adam": { + "name": "Adam Soltys", + "position": "Director de Tecnología", + "bio": "Adam es un desarrollador web y un entusiasta de bitcoin que cree que el dinero sólido es clave para aumentar la prosperidad global. Vive en la ciudad de North Vancouver con su esposa Chelsea y sus dos hijos." + }, + "secondl1ght": { + "name": "secondl1ght", + "position": "Desarrollador Web", + "bio": "Desarrollador web autodidacta, se sumergió de cabeza en con el bitcoin y dejó su trabajo fiduciario para concentrarse en el desarrollo de bitcoin a tiempo completo. Contribuye en proyectos de código abierto, es un defensor de la privacidad y un amante de la libertad." + }, + + "karnage": { + "name": "Karnage", + "position": "Diseñador de Producto", + "bio": "Mi misión es ayudar a los fundadores de startups a tener éxito. Creo productos para lograr estos objetivos. Diseño de producto con píxeles perfectos. Haz que te lo envíen." + }, + "shauna": { + "name": "Shauna", + "position": "Operaciones y Mercadeo", + "bio": "Gestión Estratégica y de Proyectos. Sé un poco de todo. Siempre habrá tiempo para compartir un buen café." + }, + "cole": { + "name": "Cole", + "position": "Profesional de Bitcoin", + "bio": "Como profesional certificado de Bitcoin, Cole es una persona motivada y apasionada por la libertad. Conoció el bitcoin en 2016 y lo estudió en profundidad. Ahora quiere presentarle la Red Lightning a tantos usuarios como sea posible." + }, + "john": { + "name": "John Barratt", + "position": "Desarrollador Web Full Stack", + "bio": "Cuando no está programando, podemos encontrar a John en el bosque recorriendo todos los grandes senderos que British Columbia tiene para ofrecer." + } + }, + "locations": { + "header": "Locaciones", + "description": "Aquí algunas empresas que aceptan bitcoin con Coinos. ¡Esperamos que el tuyo sea el próximo!" + } + }, + "error": { + "header": "Error", + "message": "Vuelva a intentarlo o póngase en contacto con el soporte.", + "signIn": "Por favor inicie sesión para continuar." + }, + "faq": { + "header": "FAQ", + "cost": { + "question": "¿Cuánto cuesta?", + "answer": "Registrar una cuenta y recibir pagos a través de Red Lightning es gratis. Cobramos una tarifa del 0,1% por convertir de lightning a bitcoin." + }, + "compatibility": { + "question": "¿Necesito algún dispositivo o software especial?", + "answer": "No. Coinos es una aplicación web, por lo que siempre que tenga conexión a Internet, podrá usarlo desde cualquier dispositivo. Las tiendas minoristas pueden usarlo desde un teléfono o una tableta." + }, + "safety": { + "question": "¿Cuándo se liquidan mis fondos?", + "answer": "Los pagos en Red Lightning se liquidan al instante. Puede retirar su saldo a otra billetera o exchange inmediatamente después de recibir el pago." + } + }, + "footer": { + "company": "Empresa", + "followUs": "Síguenos", + "github": "GitHub", + "jobs": "Trabaje con nosotros", + "support": "Soporte", + "telegram": "Telegram", + "twitter": "Twitter", + "news": "Noticias" + }, + "howItWorks": { + "header": "Cómo funciona", + "step1": { + "header": "1. Crea tu cuenta", + "description": "Un nombre de usuario y una contraseña es todo lo que necesita para comenzar." + }, + "step2": { + "header": "2. Cobra tus pagos", + "description": "Lo mismo que harías normalmente, pero con bitcoin." + }, + "step3": { + "header": "3. ¡Eso es todo!", + "description": "Haz pagos con otros comerciantes o guarda tu bitcoin para días difíciles, la elección es tuya." + } + }, + "invoice": { + "addTip": "Añadir propina, + "addTipq": "Añadir propina?", + "done": "Hecho", + "paymentSuccessful": "¡Pago recibido!", + "invoice": "Factura", + "total": "Total", + "tip": "Propina" + }, + "jobs": { + "header": "Trabaje con nosotros", + "subheader": "Ofertas de Trabajo", + "pitch1": "Coinos está activamente buscando desarrolladores para unirse a nuestro equipo en crecimiento (tiempo completo o medio tiempo, trabajo remoto OK).", + "pitch2": "¿Emocionado por trabajar en bitcoin de código abierto? Entonces eche un vistazo a nuestros repositorios en", + "github": "GitHub", + "pitch3": "Si crees que puedes generar impacto, nos encantaría saber de ti. Envíanos tu currículum a" + }, + "landing": { + "header_before_icon": "La", + "header_with_icon": "manera", + "header_after_icon": "más fácil de aceptar bitcoins en tu tienda.", + "subheader": "Aumenta tu número de clientes e ingresos al aceptar bitcoin con una aplicación web fácil de usar. No requiere software ni hardware.", + "info1": { + "title": "Pagos instantáneos a través de Lightning", + "description": "El momento en que su cliente envía un pago, este llega inmediatamente. Sin esperar liquidaciones bancarias ni preocuparse por cargos extras. Liquidación instantánea, en segundos. Diga adiós a los cargos del 3% de las tarifas en tarjetas de crédito." + }, + "info2": { + "title": "Fácil de usar", + "description1": "Solo ingrese una cantidad en su moneda local, comparta el código QR y listo.", + "description2": "Hacemos todo el trabajo pesado para que pueda concentrarse en su negocio.", + "description3": "Siempre tiene la opción de tomar la custodia de sus fondos al retirarlos instantáneamente en cualquier momento"." + }, + "info3": { + "title": "Maneja tu marca a tu manera!", + "description": "Personalice la apariencia y el estilo del punto de venta de tu negocio a tu gusto: depende totalmente de ti." + } + }, + "login": { + "optional": "Opcional", + "token": "Token 2FA", + "username": "Usuario", + "password": "Contraseña", + "email": "Correo", + "passwordRecommendation": "Recomendamos una contraseña larga y aleatoria generada con un administrador de contraseñas.", + "forgotUserOrPassword": "¿Olvidaste tu nombre de usuario o contraseña?", + "haveAccount": "¿Ya tienes una cuenta?", + "noAccount": "¿No tienes una cuenta?", + "register": "Registro", + "signIn": "Registrarse", + "failed": "Fallo en Inicio" + }, + "nav": { + "profile": "Perfil", + "startInSeconds": "Comience en segundos", + "account": "Cuenta", + "signIn": "Registrarse", + "signOut": "Desconectar", + "dashboard": "Panel", + "settings": "Ajustes", + "support": "Soporte" + }, + "newSiteHeader": "Acompañanos en nuestra launch party en Vancouver el 26 de Octubre! Buscando la version anterior de coinos? Visita classic.coinos.io", + "news": { + "header": "Noticias", + "subheader": "Últimas Actualizaciones", + "update1": "" + }, + "user": { + "bitcoin": "Bitcoin", + "lightning": "Lightning", + "invoice": "Factura", + "unfollow": "Dejar de seguir", + "following": "Siguiendo", + "follow": "Seguir", + "remove": "Eliminar", + "scanToPayBTC": "Escanear para pagar con bitcoin", + "this": "Esta", + "lightningAddress": "dirección lightning", + "likeAnEmail": "es como un correo electrónico para bitcoin. Puede publicarlo en su sitio web o tarjetas de presentación y usarlo múltiples veces.", + "dashboard": { + "go": "Ir", + "dashboard": "Panel", + "accountBalance": "Saldo de la cuenta", + "bitcoinPrice": "Precio de Bitcoin:", + "conversionFeeWarning": "Se le cobrará una tarifa de retiro del 1% sobre el monto.", + "dataFromBinance": "Datos de Binance.", + "fetchingRate": "calculando tasa...", + "optionalNote": "Nota (Opcional)", + "send": "Enviar", + "receive": "Recibir", + "withdraw": "Retirar", + "deposit": "Depositar", + "voucher": "Comprobante" + }, + "receive": { + "lessThan1BTCWarning": "Introduzca una cantidad inferior a 1 bitcoin.", + "showQR": "Mostrar código QR" + }, + "send": { + "contacts": "Contactos", + "scan": "Escanear", + "paste": "Pegar", + "next": "Siguiente", + "placeholder": "Asigne una dirección de bitcoin, una factura lightning o un usuario de coinos" + }, + "settings": { + "bannerImage": "Imagen del Banner", + "profileImage": "Imagen de perfil", + "oneTimeCode": "Ingrese el código de un solo uso", + "accountId": "Id Cuenta", + "header": "Ajustes", + "ACCOUNT": "CUENTA", + "POINT_OF_SALE": "PUNTO DE VENTA", + "SECURITY": "SEGURIDAD", + "locale": "Idioma", + "username": "Usuario", + "email": "Correo", + "newPassword": "Nueva contraseña", + "businessAddress": "Dirección Negocio", + "emailNotifications": "Notificaciones de Correo Electrónico", + "emailNotificationsDescription": "Reciba notificaciones por correo electrónico cuando se produzca un cambio en su cuenta o cuando las personas le envíen pagos.", + "smsNotifications": "Notificaciones SMS", + "smsNotificationsDescription": "Coinos enviará notificaciones de texto cuando esto esté habilitado.", + "theme": "Color Tema", + "themeDescription": "Seleccione entre los temas de color predeterminados.", + "localCurrency": "Moneda Local", + "btcUnit": "Ver bitcoin en:", + "bitcoin": "bitcoin", + "satoshis": "Satoshis", + "securityPIN": "PIN de Seguridad", + "securityPINDescription": "Establezca un pin de seguridad para desbloquear la configuración y enviar pagos.", + "setPIN": "Establecer PIN", + "autoLock": "Temporizador de bloqueo automático", + "autoLockDescription": "Su cuenta entrará en modo seguro automáticamente después del tiempo especificado:", + "twofa": "Autenticación de 2 factores", + "twofaDescription": "Agregue una capa extra de seguridad a su dispositivo habilitando la autenticación de 2 factores.", + "twofaSetup": "Configurar 2FA", + "twofaDisable": "Deshabilitar 2FA", + "select": "Seleccionar", + "verifyPIN": "Verificar PIN", + "enablePIN": "Habilitar PIN", + "disablePIN": "Deshabilitar PIN" + }, + "support": { + "header": "Soporte", + "email": "Correo", + "accountName": "Nombre Cuenta", + "message": "Mensaje", + "send": "Enviar" + } + }, + "transactions": { + "header": "Transacciones", + "AMOUNT": "CANTIDAD", + "TYPE": "TIPO", + "TIME": "HORA", + "sent": "Enviado", + "received": "Recibido", + "empty": "Aún no hay transacciones.", + "send": "Enviado", + "next": "Siguiente", + "sendersChoice": "Sender's choice", + "sendTo": "Enviar a", + "to": "para", + "pay": "Pagar", + "requesting": "está solicitando", + "sentInvoiceTo": "Enviar factura a", + "sentRequestTo": "Enviar solicitud a", + "pleasePay": "Por favor pague", + "day": "Día", + "week": "Semana", + "month": "Mes", + "all": "Todo", + "export": "Exportar", + "invoice": "Factura", + "readyToPay": "está listo para pagar", + "describeOrder": "Utilice este campo para describir su orden", + "requestAnInvoice": "Solicitar factura", + "submit": "Enviar", + "isRequesting": "está solicitando", + "awaiting": "Esperando", + "tapAnywhere": "Toca en cualquier lugar", + "from": "de", + "redeem": "Redimir", + "redeemed": "Redimido", + "redeemedBy": "Redimido por" + } +} -- cgit v1.2.3 From 055119feb0f856069ce4210a90fabcffb1454dd1 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 20 Dec 2022 23:00:12 -0800 Subject: restore de translation --- src/locales/de.json | 277 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/locales/es.json | 257 ++++++++++++++++++++++++------------------------ 2 files changed, 409 insertions(+), 125 deletions(-) create mode 100644 src/locales/de.json (limited to 'src') diff --git a/src/locales/de.json b/src/locales/de.json new file mode 100644 index 00000000..2262dea3 --- /dev/null +++ b/src/locales/de.json @@ -0,0 +1,277 @@ +{ + "404": { + "404": "404", + "pageNotFound": "Diese Seite konnte nicht gefunden werden." + }, + "about": { + "header": "Über uns", + "p1": "Coinos ist eine Open-Source-Bitcoin-Bezahl-App. Im September 2012 starteten wir die Entwicklung in Vancouver, um lokalen Händlern eine bequeme Möglichkeit zu bieten, Bitcoin-Zahlungen zu akzeptieren.", + "p2": "Sie können den Quellcode herunterladen, um die Coinos-App mit Ihrem eigenen Bitcoin- und Lightning-Node zu verbinden. Gerne helfen wir Ihnen dabei, ein wertvoller Dienstleister sowie Zahlungsanbieter für Ihre Kunden zu werden.", + "p3": "Transaktionen zwischen Nutzerkonten auf unserem Server werden Off-Chain durchgeführt. Diese werden sofort abgewickelt und sind völlig kostenlos sowie unlimitiert.", + "team": { + "header": "Das Team", + "adam": { + "name": "Adam Soltys", + "position": "Chief Technical Officer", + "bio": "Adam ist ein Webentwickler und Bitcoin-Enthusiast, der davon überzeugt ist, dass hartes Geld der Schlüssel zur Steigerung des globalen Wohlstands ist. Er lebt mit seiner Frau Chelsea und seinen zwei Kindern in North Vancouver." + }, + "secondl1ght": { + "name": "secondl1ght", + "position": "Web Developer", + "bio": "Secondl1ght hat sich das Programmieren selbst beigebracht, ist kopfüber in den Bitcoin-Kaninchenbau gesprungen und hat seinen Fiat-Job aufgegeben, um sich voll und ganz auf die Bitcoin-Entwicklung zu konzentrieren. Er wirkt bei Open-Source-Projekten mit, ist ein Verfechter der Privatsphäre und ein Freiheitsliebhaber." + }, + + "karnage": { + "name": "Karnage", + "position": "Product Designer", + "bio": "Meine Mission ist es, Startup-Gründern zum Erfolg zu verhelfen. Ich entwickle Produkte, die dabei helfen, dieses Ziel zu erreichen." + }, + "shauna": { + "name": "Shauna", + "position": "Operations & Marketing", + "bio": "Strategie- & Projektmanagement. Unser Universalgenie in allen Bereichen. Findet immer Zeit, um sich auf einen Kaffee zu treffen." + }, + "cole": { + "name": "Cole", + "position": "Bitcoin Experte", + "bio": "Als zertifizierter Bitcoin-Experte ist Cole ein engagierter Mensch mit großer Leidenschaft für Freiheit. Er entdeckte Bitcoin im Jahr 2016 und beschäftigte sich eingehend damit. Jetzt möchte er das Lightning-Netzwerk so vielen Nutzern wie möglich näherbringen." + }, + "john": { + "name": "John Barratt", + "position": "Full Stack Web Developer", + "bio": "Wenn er nicht gerade programmiert, findet man John in der Natur beim Entdecken der vielen, großartigen Wanderwege, die BC zu bieten hat." + } + }, + "locations": { + "header": "Standorte", + "description": "Hier finden Sie einige Unternehmen, welche bereits Zahlungen mit Bitcoin über Coinos akzeptieren. Wir hoffen, dass Ihr Unternehmen das nächste sein wird!" + } + }, + "error": { + "header": "Error", + "message": "Bitte versuchen Sie es erneut oder kontaktieren Sie unseren Support.", + "signIn": "Bitte melden Sie sich an, um fortzufahren." + }, + "faq": { + "header": "FAQ", + "cost": { + "question": "Welche Gebühren fallen an?", + "answer": "Die Registrierung eines Kontos sowie Zahlungen über das Lightning-Netzwerk zu erhalten ist vollkommen kostenlos. Wir erheben eine Gebühr von 0.1%, um Lightning-Bitcoin in Bitcoin umzuwandeln." + }, + "compatibility": { + "question": "Benötige ich ein bestimmtes Gerät oder eine spezielle Software dafür?", + "answer": "Nein. Coinos ist web-basiert, das bedeutet, solange Sie über eine aktive Internetverbindung verfügen, können Sie Coinos auf jedem Endgerät nutzen. Einzelhändlern empfehlen wir, ein Telefon oder Tablet zu verwenden." + }, + "safety": { + "question": "Wann wird mein Guthaben ausgezahlt?", + "answer": "Lightning-Zahlungen werden sofort abgewickelt. Sie können Ihr Guthaben somit unmittelbar nach Zahlungseingang auf eine andere Wallet übertragen." + } + }, + "footer": { + "company": "Unternehmen", + "followUs": "Folge uns", + "github": "GitHub", + "jobs": "Jobs", + "support": "Support", + "telegram": "Telegram", + "twitter": "Twitter", + "news": "Neuigkeiten" + }, + "howItWorks": { + "header": "So funktioniert's", + "step1": { + "header": "1. Erstellen Sie Ihr Konto", + "description": "Sie benötigen nur einen Benutzernamen und ein Passwort - und schon geht's los!" + }, + "step2": { + "header": "2. Zahlungen anfordern", + "description": "Ganz gleich, wie Sie es normalerweise machen würden, allerdings mit Bitcoin." + }, + "step3": { + "header": "3. Das war's!", + "description": "Bezahlen Sie mit Ihrem Bitcoin-Bestand bei anderen Händlern oder sparen Sie diese für schlechtere Zeiten - Sie allein haben die Wahl." + } + }, + "invoice": { + "addTip": "Trinkgeld hinzufügen", + "addTipq": "Trinkgeld hinzufügen?", + "done": "Fertig", + "paymentSuccessful": "Zahlung erhalten!", + "invoice": "Rechnung", + "total": "Gesamtbetrag", + "tip": "Trinkgeld" + }, + "jobs": { + "header": "Jobs", + "subheader": "Offene Stellen", + "pitch1": "Wir sind stets auf der Suche nach Entwicklern, die unser wachsendes Team verstärken möchten (Vollzeit oder Teilzeit, Homeoffice möglich).", + "pitch2": "Möchten Sie mit uns an Open-Source-Bitcoin-Projekten arbeiten? Dann werfen Sie doch einen Blick auf unsere offenen Stellen auf", + "github": "GitHub", + "pitch3": "Wenn wir Ihr Interesse geweckt haben, würden wir uns freuen, von Ihnen zu hören. Schicken Sie uns gerne Ihren Lebenslauf an" + }, + "landing": { + "header_before_icon": "Der", + "header_with_icon": "einfachste", + "header_after_icon": "Weg um Bitcoin in Ihrem Unternehmen zu akzeptieren.", + "subheader": "Erweitern Sie Ihren Kundenstamm und Ihren Umsatz, indem Sie Bitcoin mit einer einfach zu bedienenden Web-App akzeptieren. Keine Software oder Hardware ist dafür erforderlich.", + "info1": { + "title": "Sofortzahlungen über Lightning", + "description": "Unmittelbar nachdem die Zahlung von Ihrem Kunden abgeschlossen wurde, ist diese auch bei Ihnen ersichtlich. Sie müssen sich weder um Rücklastschriften kümmern, noch auf Banküberweisungen warten. Sekundenschnelle Abrechnung - und das Beste daran: Es fallen keine 3% Kreditkartenbearbeitungsgebühren an." + }, + "info2": { + "title": "Einfache Handhabung", + "description1": "Geben Sie einfach einen Betrag in Ihrer Landeswährung ein, teilen Sie den QR-Code mit Ihrem Kunden und schon sind Sie fertig.", + "description2": "Wir nehmen Ihnen die ganze Arbeit ab, damit Sie sich auf Ihr Geschäft konzentrieren können.", + "description3": "Sie haben jederzeit die Möglichkeit, selbst über Ihr Geld zu verfügen und es sofort abzuheben." + }, + "info3": { + "title": "Gestalten Sie Ihre Übersicht nach Ihrem Geschmack", + "description": "Passen Sie die Übersicht dem Branding Ihres Unternehmens an oder nutzen Sie unser Standard-Design." + } + }, + "login": { + "optional": "Optional", + "token": "2FA Token", + "username": "Benutzername", + "password": "Passwort", + "email": "E-Mail", + "passwordRecommendation": "Wir empfehlen ein langes, zufälliges Passwort, welches mit einem Passwortgenerator erstellt wurde.", + "forgotUserOrPassword": "Benutzername oder Passwort vergessen?", + "haveAccount": "Bereits registriert?", + "noAccount": "Noch nicht registriert?", + "register": "Registrieren", + "signIn": "Einloggen", + "failed": "Login fehlgeschlagen" + }, + "nav": { + "profile": "Profil", + "startInSeconds": "Jetzt loslegen", + "account": "Konto", + "signIn": "Einloggen", + "signOut": "Ausloggen", + "dashboard": "Übersicht", + "settings": "Einstellungen", + "support": "Support" + }, + "newSiteHeader": "Kommen Sie zu unserer Eröffnungsfeier in Vancouver am 26. Oktober! Auf der Suche nach der alten Coinos-Version? Besuchen Sie classic.coinos.io", + "news": { + "header": "News", + "subheader": "Letzte Updates", + "update1": "" + }, + "user": { + "bitcoin": "Bitcoin", + "lightning": "Lightning", + "invoice": "Rechnung", + "unfollow": "Nicht mehr folgen", + "following": "Folgen", + "follow": "Folgen", + "remove": "Entfernen", + "scanToPayBTC": "Den QR-Code scannen um mit Bitcoin zu zahlen", + "this": "Das", + "lightningAddress": "Lightning Adresse", + "likeAnEmail": "ist wie eine E-Mail Adresse für Bitcoin. Sie können diese auf Ihrer Website oder auf Ihren Visitenkarten veröffentlichen und mehrfach verwenden.", + "dashboard": { + "go": "Los", + "dashboard": "Übersicht", + "accountBalance": "Kontostand", + "bitcoinPrice": "Bitcoin Preis:", + "conversionFeeWarning": "Es wird eine Abhebungsgebühr von 1% des Gesambetrags erhoben.", + "dataFromBinance": "Daten von Binance.", + "fetchingRate": "Abfragen...", + "optionalNote": "Notiz (optional)", + "send": "Senden", + "receive": "Erhalten", + "withdraw": "Senden", + "deposit": "Einzahlung", + "voucher": "Beleg" + }, + "receive": { + "lessThan1BTCWarning": "Bitte geben Sie einen Betrag unter 1 Bitcoin ein.", + "showQR": "QR-Code zeigen" + }, + "send": { + "contacts": "Kontakte", + "scan": "Scannen", + "paste": "Einfügen", + "next": "Weiter", + "placeholder": "Geben Sie eine Bitcoin-Adresse, eine Lightning-Rechnung oder einen Coinos-Benutzernamen ein" + }, + "settings": { + "bannerImage": "Logo", + "profileImage": "Profilbild", + "oneTimeCode": "Code eingeben", + "accountId": "Kontoverbindung", + "header": "Einstellungen", + "ACCOUNT": "KONTO", + "POINT_OF_SALE": "VERKAUFSSTELLE", + "SECURITY": "SICHERHEIT", + "locale": "Sprache", + "username": "Benutzername", + "email": "E-Mail", + "newPassword": "Neues Passwort", + "businessAddress": "Unternehmensadresse", + "emailNotifications": "E-Mail-Benachrichtigungen", + "emailNotificationsDescription": "Sie werden per E-Mail benachrichtigt, wenn eine Änderung auf Ihrem Konto vorgenommen wurde oder Ihnen jemand Zahlungen sendet.", + "smsNotifications": "SMS-Benachrichtigungen", + "smsNotificationsDescription": "Coinos wird Benachrichtigungen per SMS zusenden, wenn diese Funktion aktiviert ist.", + "theme": "Farbdesign", + "themeDescription": "Wählen Sie aus unseren Standard-Farbdesigns.", + "localCurrency": "Landeswährung", + "btcUnit": "Bitcoin anzeigen in:", + "bitcoin": "Bitcoin", + "satoshis": "Satoshis", + "securityPIN": "Sicherheitscode", + "securityPINDescription": "Legen Sie einen Sicherheitscode fest, der zum Entsperren Ihrer Einstellungen und zum Senden ausgehender Zahlungen verwendet wird.", + "setPIN": "Set PIN", + "autoLock": "Timer für automatische Sperre", + "autoLockDescription": "Ihr Konto wird nach einer bestimmten Zeit automatisch in einen sicheren Modus versetzt:", + "twofa": "2-Faktor Authentifizierung", + "twofaDescription": "Erhöhen Sie das Sicherheitslevel Ihres Geräts, indem Sie die 2-Faktor-Authentifizierung aktivieren.", + "twofaSetup": "2FA einrichten", + "twofaDisable": "2FA deaktivieren", + "select": "Auswählen", + "verifyPIN": "Sicherheitscode verifizieren", + "enablePIN": "PIN aktivieren", + "disablePIN": "PIN deaktivieren" + }, + "support": { + "header": "Support", + "email": "E-Mail", + "accountName": "Kontoname", + "message": "Nachricht", + "send": "Senden" + } + }, + "transactions": { + "header": "Transaktionen", + "AMOUNT": "GESAMTBETRAG", + "TYPE": "TYP", + "TIME": "ZEIT", + "sent": "Gesendet", + "received": "Erhalten", + "empty": "Noch keine Transaktionen erhalten.", + "send": "Senden", + "next": "Weiter", + "sendersChoice": "Absender", + "sendTo": "Senden an", + "to": "an", + "pay": "Bezahlen", + "requesting": "ersucht um", + "sentInvoiceTo": "Rechnung senden an", + "sentRequestTo": "Anfrage senden an", + "pleasePay": "Bitte bezahlen Sie", + "day": "Tag", + "week": "Woche", + "month": "Monat", + "all": "Alles", + "export": "Exportieren", + "invoice": "Rechnung", + "readyToPay": "Steht zur Zahlung bereit", + "describeOrder": "Benutzen Sie dieses Feld um Ihre Bestellung zu beschreiben", + "requestAnInvoice": "Rechnung anfordern", + "submit": "Übermitteln", + "isRequesting": "Anfragen", + "awaiting": "Warten auf" + } +} diff --git a/src/locales/es.json b/src/locales/es.json index 5043243e..87de05d2 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -1,275 +1,282 @@ { "404": { "404": "404", - "pageNotFound": "La página no existe." + "pageNotFound": "Pagina no encontrada." }, "about": { - "header": "Sobre", - "p1": "coinos es una aplicación de código abierto para pagos con bitcoin. Su desarrollo comezó en Vancouver allá por Septiembre de 2012 como una solución para que comerciantes locales puedan aceptar pagos con bitcoin.", - "p3": "Si lo desea, puede descargar el código fuente de Coinos para ejecutar su propia instancia y tenerla conectada a sus propios nodos bitcoin y lightning. Estaremos encantados de ayudarle a en un proveedor de pagos y en un custodio benevolente para su comunidad.", - "p4": "Las transferencias entre cuentas de usuario en nuestro servidor son realizadas off-chain, esto hace que sean instantáneas, ilimitadas, y gratuitas.", + "header": "Sobre Nosotros", + "p1": "Coinos es una aplicación de pagos en bitcoin de código abierto. Este desarrollo comenzó en septiembre de 2012 en Vancouver como una forma de proporcionar a los comerciantes locales una forma conveniente de aceptar pagos con bitcoin.", + "p2": "Descarga el código fuente para ejecutar una instancia y conectarla a tu propio nodo bitcoin y lightning. Te ayudaremos a convertirte en un excelente custodio y proveedor de pagos para tu comunidad.", + "p3": "Las transferencias de bitcoin entre usuarios en nuestro servidor se realizan off-chain, por lo que son completamente gratuitas, instantáneas e ilimitadas.", "team": { - "header": "El Equipo", + "header": "Nuestro Equipo", "adam": { "name": "Adam Soltys", - "position": "Director (CTO)", - "bio": "Adam es desarrollador web y entusiasta de bitcoin, cree que el dinero sólido es clave para aumentar la prosperidad global. Vive en Vancouver junto a su esposa Chelsea y sus dos hijos." + "position": "Director de Tecnología", + "bio": "Adam es un desarrollador web y un entusiasta de bitcoin que cree que el dinero sólido es clave para aumentar la prosperidad global. Vive en la ciudad de North Vancouver con su esposa Chelsea y sus dos hijos." }, "secondl1ght": { "name": "secondl1ght", - "position": "Desarrollador web", - "bio": "Es un desarrollador web autodidacta, que se zambulló de cabeza en la madriguera del conejo de bitcoin al dejar su trabajo pagado en fiat para concentrarse en el desarrollo de bitcoin a tiempo completo. Contribuyente en proyectos de código abierto, defensor de la privacidad y amante de la libertad." + "position": "Desarrollador Web", + "bio": "Desarrollador web autodidacta, se sumergió de cabeza en con el bitcoin y dejó su trabajo fiduciario para concentrarse en el desarrollo de bitcoin a tiempo completo. Contribuye en proyectos de código abierto, es un defensor de la privacidad y un amante de la libertad." }, "karnage": { "name": "Karnage", "position": "Diseñador de Producto", - "bio": "¨Mi misión es ayudar a los fundadores de startups a tener éxito. Creo productos para lograr este objetivo. Diseño de producto con píxeles perfectos. Recibe lo que buscas.¨" + "bio": "Mi misión es ayudar a los fundadores de startups a tener éxito. Creo productos para lograr estos objetivos. Diseño de producto con píxeles perfectos. Haz que te lo envíen." }, "shauna": { "name": "Shauna", - "position": "Marketing & Operaciones", - "bio": "Gestión Estratégica y de Proyectos. Ella es una todóloga. Siempre encuentra tiempo para reunirse a tomar un café." + "position": "Operaciones y Mercadeo", + "bio": "Gestión Estratégica y de Proyectos. Sé un poco de todo. Siempre habrá tiempo para compartir un buen café." }, "cole": { "name": "Cole", - "position": "Profesional en Bitcoin", - "bio": "Como profesional certificado de Bitcoin, Cole es una persona motivada y apasionada por la libertad. Encontró bitcoin en el año 2016 bitcoin y se dedicó a estudiarlo en profundidad. Ahora quiere presentar Lightning Network a tantos usuarios como sea posible." + "position": "Profesional de Bitcoin", + "bio": "Como profesional certificado de Bitcoin, Cole es una persona motivada y apasionada por la libertad. Conoció el bitcoin en 2016 y lo estudió en profundidad. Ahora quiere presentarle la Red Lightning a tantos usuarios como sea posible." }, "john": { "name": "John Barratt", - "position": "Desarrollador web Full Stack", - "bio": "Cuando no está programando, John puede ser encontrado en el bosque recorriendo todos los grandes senderos que Colombia Británica tiene para ofrecer." + "position": "Desarrollador Web Full Stack", + "bio": "Cuando no está programando, podemos encontrar a John en el bosque recorriendo todos los grandes senderos que British Columbia tiene para ofrecer." } }, "locations": { - "header": "Locales", - "description": "Estos son comercios que aceptan bitcoin con coinos. Si estás utilizando nuestra aplicación, por favor \"cuéntenos!" + "header": "Locaciones", + "description": "Aquí algunas empresas que aceptan bitcoin con Coinos. ¡Esperamos que el tuyo sea el próximo!" } }, "error": { "header": "Error", - "message": "Por favor inténtelo nuevamente o contacte a nuestro soporte.", + "message": "Vuelva a intentarlo o póngase en contacto con el soporte.", "signIn": "Por favor inicie sesión para continuar." }, "faq": { - "header": "PMF", + "header": "FAQ", "cost": { - "question": "Cuanto cuesta?", - "answer": "Coinos es gratis. No hay costos de registro ni mantenimiento. Puede enviar y recibir pagos de forma ilimitada por medio de Lightning Network sin costo alguno. Sin embargo, si quieres tus fondos hacia una dirección de bitcoin on-chain existe una tarifa del 0,1%." + "question": "¿Cuánto cuesta?", + "answer": "Registrar una cuenta y recibir pagos a través de Red Lightning es gratis. Cobramos una tarifa del 0,1% por convertir de lightning a bitcoin." }, "compatibility": { - "question": "Necesito un dispositivo o software especial?", - "answer": "No. Al estar basado en web, Coinos está disponible en cualquier dispositivo con conexión a internet. Puede usarlo directamente desde un celular o una tableta." + "question": "¿Necesito algún dispositivo o software especial?", + "answer": "No. Coinos es una aplicación web, por lo que siempre que tenga conexión a Internet, podrá usarlo desde cualquier dispositivo. Las tiendas minoristas pueden usarlo desde un teléfono o una tableta." }, "safety": { - "question": "Qué puedo hacer con el bitcoin que recibo?", - "answer": "Usarlo para pagar personal y proveedores, apoyar otras empresas y comerciantes que acepten bitcoin. O puede mantenerlo durante algunos años y ver crecer su poder adquisitivo." + "question": "¿Cuándo se liquidan mis fondos?", + "answer": "Los pagos en Red Lightning se liquidan al instante. Puede retirar su saldo a otra billetera o exchange inmediatamente después de recibir el pago." } }, "footer": { "company": "Empresa", - "followUs": "Síganos", + "followUs": "Síguenos", "github": "GitHub", - "jobs": "Empleos", + "jobs": "Trabaje con nosotros", "support": "Soporte", "telegram": "Telegram", "twitter": "Twitter", "news": "Noticias" }, "howItWorks": { - "header": "¿Cómo funciona?", + "header": "Cómo funciona", "step1": { - "header": "1. Abra una cuenta", - "description": "Para empezar, solo debe elegir un nombre de usuario y crear una contraseña." + "header": "1. Crea tu cuenta", + "description": "Un nombre de usuario y una contraseña es todo lo que necesita para comenzar." }, "step2": { - "header": "2. Solicitar pagos", - "description": "Lo mismo que hace normalmente, ¡pero con bitcoin!" + "header": "2. Cobra tus pagos", + "description": "Lo mismo que harías normalmente, pero con bitcoin." }, "step3": { - "header": "3. ¡y listo!", - "description": "Ahora puede disponer libremente de su bitcoin como guste." + "header": "3. ¡Eso es todo!", + "description": "Haz pagos con otros comerciantes o guarda tu bitcoin para días difíciles, la elección es tuya." } }, "invoice": { - "addTip": "Agregar propina", - "addTipq": "Agregar propina?", - "done": "Listo", - "paymentSuccessful": "Pago exitoso!", + "addTip": "Añadir propina, + "addTipq": "Añadir propina?", + "done": "Hecho", + "paymentSuccessful": "¡Pago recibido!", "invoice": "Factura", "total": "Total", "tip": "Propina" }, "jobs": { - "header": "Empleos", - "subheader": "Puestos disponibles", - "pitch1": "coinos se encuentra buscando a desarrolladores que quieran unirse a nuestro equipo de trabajo en crecimiento (tiempo medio o tiempo completo, APROBAMOS el trabajo remoto).", - "pitch2": "Emocionado por trabajar en un proyecto de código abierto con bitcoin? Entonces mira nuestros repositorios en", + "header": "Trabaje con nosotros", + "subheader": "Ofertas de Trabajo", + "pitch1": "Coinos está activamente buscando desarrolladores para unirse a nuestro equipo en crecimiento (tiempo completo o medio tiempo, trabajo remoto OK).", + "pitch2": "¿Emocionado por trabajar en bitcoin de código abierto? Entonces eche un vistazo a nuestros repositorios en", "github": "GitHub", - "pitch3": "Nos encantaría saber de usted si cree que tiene algo impactante para mostrar. Envíenos su CV a" + "pitch3": "Si crees que puedes generar impacto, nos encantaría saber de ti. Envíanos tu currículum a" }, "landing": { - "header_before_icon": "La manera", - "header_with_icon": "más simple", - "header_after_icon": "de aceptar bitcoin en su negocio.", - "subheader": "Aumente sus posibilidades de ingreso agregando bitcoin como forma de pago mediante una aplicación web muy fácil de usar. No se requiere ningún software o hardware adicional.", + "header_before_icon": "La", + "header_with_icon": "manera", + "header_after_icon": "más fácil de aceptar bitcoins en tu tienda.", + "subheader": "Aumenta tu número de clientes e ingresos al aceptar bitcoin con una aplicación web fácil de usar. No requiere software ni hardware.", "info1": { - "title": "Pagos instantáneos con Lightning", - "description": "Cuando su cliente envíe un pago, el mismo estará disponible en forma inmediata. Liquidación instantánea en segundos. Diga adiós al 3% de interés que le cobran por tarifas de procesamiento de tarjetas de crédito." + "title": "Pagos instantáneos a través de Lightning", + "description": "El momento en que su cliente envía un pago, este llega inmediatamente. Sin esperar liquidaciones bancarias ni preocuparse por cargos extras. Liquidación instantánea, en segundos. Diga adiós a los cargos del 3% de las tarifas en tarjetas de crédito." }, "info2": { "title": "Fácil de usar", - "description1": "Ingrese un monto en su moneda local, comparta el QR y listo.", - "description2": "Coinos le ofrece acceso gratuito para usar los nodos bitcoin y lightning alojados, sin que deba comprender cómo funcionan bitcoin o lightning. Hacemos todo el trabajo pesado para que pueda concentrarse en su negocio.", - "description3": "Usted siempre tendrá la opción de retirar sus fondos para retomar su custodia de forma inmediata." + "description1": "Solo ingrese una cantidad en su moneda local, comparta el código QR y listo.", + "description2": "Hacemos todo el trabajo pesado para que pueda concentrarse en su negocio.", + "description3": "Siempre tiene la opción de tomar la custodia de sus fondos al retirarlos instantáneamente en cualquier momento"." }, "info3": { - "title": "Personalícelo!", - "description": "Puede personalizar la apariencia y el estilo de su punto de venta o mantenerlo por defecto. Depende de usted." + "title": "Maneja tu marca a tu manera!", + "description": "Personalice la apariencia y el estilo del punto de venta de tu negocio a tu gusto: depende totalmente de ti." } }, "login": { "optional": "Opcional", "token": "Token 2FA", - "username": "Nombre de usuario", + "username": "Usuario", "password": "Contraseña", - "email": "Email", - "passwordRecommendation": "Recomendamos utilizar un administrador de contraseñas para generar una clave larga y aleatoria.", - "forgotUserOrPassword": "Olvidó su nombre de usuario o su contraseña?", - "haveAccount": "Ya tiene una cuenta?", - "noAccount": "No tiene una cuenta?", - "register": "Registrarse", - "signIn": "Iniciar sesión", - "failed": "Inicio de sesión fallido" + "email": "Correo", + "passwordRecommendation": "Recomendamos una contraseña larga y aleatoria generada con un administrador de contraseñas.", + "forgotUserOrPassword": "¿Olvidaste tu nombre de usuario o contraseña?", + "haveAccount": "¿Ya tienes una cuenta?", + "noAccount": "¿No tienes una cuenta?", + "register": "Registro", + "signIn": "Registrarse", + "failed": "Fallo en Inicio" }, "nav": { "profile": "Perfil", - "startInSeconds": "Comience de inmediato", + "startInSeconds": "Comience en segundos", "account": "Cuenta", - "signIn": "Iniciar sesión", - "signOut": "Cerrar sesión", + "signIn": "Registrarse", + "signOut": "Desconectar", "dashboard": "Panel", "settings": "Ajustes", "support": "Soporte" }, + "newSiteHeader": "Acompañanos en nuestra launch party en Vancouver el 26 de Octubre! Buscando la version anterior de coinos? Visita classic.coinos.io", "news": { "header": "Noticias", - "subheader": "Últimas novedades", + "subheader": "Últimas Actualizaciones", "update1": "" }, "user": { "bitcoin": "Bitcoin", - "lightning": "Relámpago", + "lightning": "Lightning", "invoice": "Factura", "unfollow": "Dejar de seguir", "following": "Siguiendo", "follow": "Seguir", "remove": "Eliminar", - "scanToPayBTC": "Escanea para pagar en bitcoin", + "scanToPayBTC": "Escanear para pagar con bitcoin", "this": "Esta", - "lightningAddress": "dirección relámpago", - "likeAnEmail": "es como un correo electrónico para bitcoin. Puede publicarlo en su sitio web o tarjetas de presentación y usarlo varias veces.", + "lightningAddress": "dirección lightning", + "likeAnEmail": "es como un correo electrónico para bitcoin. Puede publicarlo en su sitio web o tarjetas de presentación y usarlo múltiples veces.", "dashboard": { - "dashboard": "Tablero", - "accountBalance": "Saldo", - "bitcoinPrice": "Precio de bitcoin:", - "conversionFeeWarning": "Cobraremos una tarifa de retiro del 1% sobre el monto", + "go": "Ir", + "dashboard": "Panel", + "accountBalance": "Saldo de la cuenta", + "bitcoinPrice": "Precio de Bitcoin:", + "conversionFeeWarning": "Se le cobrará una tarifa de retiro del 1% sobre el monto.", "dataFromBinance": "Datos de Binance.", - "fetchingRate": "Tasa...", + "fetchingRate": "calculando tasa...", "optionalNote": "Nota (Opcional)", "send": "Enviar", - "receive": "Recibir un pago", + "receive": "Recibir", "withdraw": "Retirar", - "deposit": "Depósito", - "voucher": "Vale" + "deposit": "Depositar", + "voucher": "Comprobante" }, "receive": { - "lessThan1BTCWarning": "Ingrese una cantidad menor a 1 bitcoin.", - "showQR": "Ver QR" + "lessThan1BTCWarning": "Introduzca una cantidad inferior a 1 bitcoin.", + "showQR": "Mostrar código QR" }, "send": { "contacts": "Contactos", "scan": "Escanear", "paste": "Pegar", - "next": "Próxima", - "placeholder": "Pegue una dirección de bitcoin, una factura relámpago o un nombre de usuario de coinos" + "next": "Siguiente", + "placeholder": "Asigne una dirección de bitcoin, una factura lightning o un usuario de coinos" }, "settings": { - "bannerImage": "Imagen de portada", + "bannerImage": "Imagen del Banner", "profileImage": "Imagen de perfil", "oneTimeCode": "Ingrese el código de un solo uso", - "accountId": "", + "accountId": "Id Cuenta", "header": "Ajustes", "ACCOUNT": "CUENTA", "POINT_OF_SALE": "PUNTO DE VENTA", "SECURITY": "SEGURIDAD", - "locale": "Languaje", - "username": "Nombre de usuario", - "email": "Email", + "locale": "Idioma", + "username": "Usuario", + "email": "Correo", "newPassword": "Nueva contraseña", - "businessAddress": "Dirección comercial", - "emailNotifications": "Notificar por email", - "emailNotificationsDescription": "Recibe notificaciones cuando alguien le envíe un pago o cuando ocurra algún cambio en su cuenta.", - "smsNotifications": "Notificar pr SMS", - "smsNotificationsDescription": "coinos le enviará notificaciones por mensaje de texto cuando esté habilitado.", - "theme": "Tema de color", - "themeDescription": "Elija el tema de color predeterminado.", - "localCurrency": "Moneda local", - "btcUnit": "Mostrar bitcoin en:", - "bitcoin": "Bitcoin", + "businessAddress": "Dirección Negocio", + "emailNotifications": "Notificaciones de Correo Electrónico", + "emailNotificationsDescription": "Reciba notificaciones por correo electrónico cuando se produzca un cambio en su cuenta o cuando las personas le envíen pagos.", + "smsNotifications": "Notificaciones SMS", + "smsNotificationsDescription": "Coinos enviará notificaciones de texto cuando esto esté habilitado.", + "theme": "Color Tema", + "themeDescription": "Seleccione entre los temas de color predeterminados.", + "localCurrency": "Moneda Local", + "btcUnit": "Ver bitcoin en:", + "bitcoin": "bitcoin", "satoshis": "Satoshis", - "securityPIN": "PIN de seguridad", - "securityPINDescription": "Ingrese un pin de seguridad y úselo para desbloquear coinos o enviar pagos.", - "setPIN": "Crear PIN", - "autoLock": "Tiempo de auto bloqueo", - "autoLockDescription": "Se le pedirá el pin para reanudar la sesión luego de el tiempo especificado:", + "securityPIN": "PIN de Seguridad", + "securityPINDescription": "Establezca un pin de seguridad para desbloquear la configuración y enviar pagos.", + "setPIN": "Establecer PIN", + "autoLock": "Temporizador de bloqueo automático", + "autoLockDescription": "Su cuenta entrará en modo seguro automáticamente después del tiempo especificado:", "twofa": "Autenticación de 2 factores", - "twofaDescription": "Agregue un nivel extra de seguridad a su cuenta con la autenticación de 2 factores (2FA).", + "twofaDescription": "Agregue una capa extra de seguridad a su dispositivo habilitando la autenticación de 2 factores.", "twofaSetup": "Configurar 2FA", - "twofaDisable": "Desactivar 2FA", - "select": "Seleccione", + "twofaDisable": "Deshabilitar 2FA", + "select": "Seleccionar", "verifyPIN": "Verificar PIN", "enablePIN": "Habilitar PIN", "disablePIN": "Deshabilitar PIN" }, "support": { "header": "Soporte", - "email": "Correo electrónico", - "accountName": "Nombre de cuenta", + "email": "Correo", + "accountName": "Nombre Cuenta", "message": "Mensaje", "send": "Enviar" } }, "transactions": { - "header": "Historial de transacciones", - "AMOUNT": "MONTO", + "header": "Transacciones", + "AMOUNT": "CANTIDAD", "TYPE": "TIPO", "TIME": "HORA", - "sent": "Enviada", - "received": "Recibida", - "empty": "No hay transacciones.", - "send": "Enviar", - "next": "Próxima", - "sendersChoice": "Elección del remitente", + "sent": "Enviado", + "received": "Recibido", + "empty": "Aún no hay transacciones.", + "send": "Enviado", + "next": "Siguiente", + "sendersChoice": "Sender's choice", "sendTo": "Enviar a", - "to": "a", + "to": "para", "pay": "Pagar", "requesting": "está solicitando", - "sentInvoiceTo": "Factura enviada a", - "sentRequestTo": "Solicitud enviada a", + "sentInvoiceTo": "Enviar factura a", + "sentRequestTo": "Enviar solicitud a", "pleasePay": "Por favor pague", - "day": "Dia", + "day": "Día", "week": "Semana", "month": "Mes", "all": "Todo", "export": "Exportar", "invoice": "Factura", "readyToPay": "está listo para pagar", - "describeOrder": "Utilice este campo para describir su pedido", - "requestAnInvoice": "Solicitar una factura", + "describeOrder": "Utilice este campo para describir su orden", + "requestAnInvoice": "Solicitar factura", "submit": "Enviar", "isRequesting": "está solicitando", - "awaiting": "Esperando" + "awaiting": "Esperando", + "tapAnywhere": "Toca en cualquier lugar", + "from": "de", + "redeem": "Redimir", + "redeemed": "Redimido", + "redeemedBy": "Redimido por" } } -- cgit v1.2.3 From da5841750d1068761a1a88633327f657b0219fa3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 20 Dec 2022 23:02:39 -0800 Subject: rm esp.json --- src/locales/esp.json | 282 --------------------------------------------------- 1 file changed, 282 deletions(-) delete mode 100644 src/locales/esp.json (limited to 'src') diff --git a/src/locales/esp.json b/src/locales/esp.json deleted file mode 100644 index 87de05d2..00000000 --- a/src/locales/esp.json +++ /dev/null @@ -1,282 +0,0 @@ -{ - "404": { - "404": "404", - "pageNotFound": "Pagina no encontrada." - }, - "about": { - "header": "Sobre Nosotros", - "p1": "Coinos es una aplicación de pagos en bitcoin de código abierto. Este desarrollo comenzó en septiembre de 2012 en Vancouver como una forma de proporcionar a los comerciantes locales una forma conveniente de aceptar pagos con bitcoin.", - "p2": "Descarga el código fuente para ejecutar una instancia y conectarla a tu propio nodo bitcoin y lightning. Te ayudaremos a convertirte en un excelente custodio y proveedor de pagos para tu comunidad.", - "p3": "Las transferencias de bitcoin entre usuarios en nuestro servidor se realizan off-chain, por lo que son completamente gratuitas, instantáneas e ilimitadas.", - "team": { - "header": "Nuestro Equipo", - "adam": { - "name": "Adam Soltys", - "position": "Director de Tecnología", - "bio": "Adam es un desarrollador web y un entusiasta de bitcoin que cree que el dinero sólido es clave para aumentar la prosperidad global. Vive en la ciudad de North Vancouver con su esposa Chelsea y sus dos hijos." - }, - "secondl1ght": { - "name": "secondl1ght", - "position": "Desarrollador Web", - "bio": "Desarrollador web autodidacta, se sumergió de cabeza en con el bitcoin y dejó su trabajo fiduciario para concentrarse en el desarrollo de bitcoin a tiempo completo. Contribuye en proyectos de código abierto, es un defensor de la privacidad y un amante de la libertad." - }, - - "karnage": { - "name": "Karnage", - "position": "Diseñador de Producto", - "bio": "Mi misión es ayudar a los fundadores de startups a tener éxito. Creo productos para lograr estos objetivos. Diseño de producto con píxeles perfectos. Haz que te lo envíen." - }, - "shauna": { - "name": "Shauna", - "position": "Operaciones y Mercadeo", - "bio": "Gestión Estratégica y de Proyectos. Sé un poco de todo. Siempre habrá tiempo para compartir un buen café." - }, - "cole": { - "name": "Cole", - "position": "Profesional de Bitcoin", - "bio": "Como profesional certificado de Bitcoin, Cole es una persona motivada y apasionada por la libertad. Conoció el bitcoin en 2016 y lo estudió en profundidad. Ahora quiere presentarle la Red Lightning a tantos usuarios como sea posible." - }, - "john": { - "name": "John Barratt", - "position": "Desarrollador Web Full Stack", - "bio": "Cuando no está programando, podemos encontrar a John en el bosque recorriendo todos los grandes senderos que British Columbia tiene para ofrecer." - } - }, - "locations": { - "header": "Locaciones", - "description": "Aquí algunas empresas que aceptan bitcoin con Coinos. ¡Esperamos que el tuyo sea el próximo!" - } - }, - "error": { - "header": "Error", - "message": "Vuelva a intentarlo o póngase en contacto con el soporte.", - "signIn": "Por favor inicie sesión para continuar." - }, - "faq": { - "header": "FAQ", - "cost": { - "question": "¿Cuánto cuesta?", - "answer": "Registrar una cuenta y recibir pagos a través de Red Lightning es gratis. Cobramos una tarifa del 0,1% por convertir de lightning a bitcoin." - }, - "compatibility": { - "question": "¿Necesito algún dispositivo o software especial?", - "answer": "No. Coinos es una aplicación web, por lo que siempre que tenga conexión a Internet, podrá usarlo desde cualquier dispositivo. Las tiendas minoristas pueden usarlo desde un teléfono o una tableta." - }, - "safety": { - "question": "¿Cuándo se liquidan mis fondos?", - "answer": "Los pagos en Red Lightning se liquidan al instante. Puede retirar su saldo a otra billetera o exchange inmediatamente después de recibir el pago." - } - }, - "footer": { - "company": "Empresa", - "followUs": "Síguenos", - "github": "GitHub", - "jobs": "Trabaje con nosotros", - "support": "Soporte", - "telegram": "Telegram", - "twitter": "Twitter", - "news": "Noticias" - }, - "howItWorks": { - "header": "Cómo funciona", - "step1": { - "header": "1. Crea tu cuenta", - "description": "Un nombre de usuario y una contraseña es todo lo que necesita para comenzar." - }, - "step2": { - "header": "2. Cobra tus pagos", - "description": "Lo mismo que harías normalmente, pero con bitcoin." - }, - "step3": { - "header": "3. ¡Eso es todo!", - "description": "Haz pagos con otros comerciantes o guarda tu bitcoin para días difíciles, la elección es tuya." - } - }, - "invoice": { - "addTip": "Añadir propina, - "addTipq": "Añadir propina?", - "done": "Hecho", - "paymentSuccessful": "¡Pago recibido!", - "invoice": "Factura", - "total": "Total", - "tip": "Propina" - }, - "jobs": { - "header": "Trabaje con nosotros", - "subheader": "Ofertas de Trabajo", - "pitch1": "Coinos está activamente buscando desarrolladores para unirse a nuestro equipo en crecimiento (tiempo completo o medio tiempo, trabajo remoto OK).", - "pitch2": "¿Emocionado por trabajar en bitcoin de código abierto? Entonces eche un vistazo a nuestros repositorios en", - "github": "GitHub", - "pitch3": "Si crees que puedes generar impacto, nos encantaría saber de ti. Envíanos tu currículum a" - }, - "landing": { - "header_before_icon": "La", - "header_with_icon": "manera", - "header_after_icon": "más fácil de aceptar bitcoins en tu tienda.", - "subheader": "Aumenta tu número de clientes e ingresos al aceptar bitcoin con una aplicación web fácil de usar. No requiere software ni hardware.", - "info1": { - "title": "Pagos instantáneos a través de Lightning", - "description": "El momento en que su cliente envía un pago, este llega inmediatamente. Sin esperar liquidaciones bancarias ni preocuparse por cargos extras. Liquidación instantánea, en segundos. Diga adiós a los cargos del 3% de las tarifas en tarjetas de crédito." - }, - "info2": { - "title": "Fácil de usar", - "description1": "Solo ingrese una cantidad en su moneda local, comparta el código QR y listo.", - "description2": "Hacemos todo el trabajo pesado para que pueda concentrarse en su negocio.", - "description3": "Siempre tiene la opción de tomar la custodia de sus fondos al retirarlos instantáneamente en cualquier momento"." - }, - "info3": { - "title": "Maneja tu marca a tu manera!", - "description": "Personalice la apariencia y el estilo del punto de venta de tu negocio a tu gusto: depende totalmente de ti." - } - }, - "login": { - "optional": "Opcional", - "token": "Token 2FA", - "username": "Usuario", - "password": "Contraseña", - "email": "Correo", - "passwordRecommendation": "Recomendamos una contraseña larga y aleatoria generada con un administrador de contraseñas.", - "forgotUserOrPassword": "¿Olvidaste tu nombre de usuario o contraseña?", - "haveAccount": "¿Ya tienes una cuenta?", - "noAccount": "¿No tienes una cuenta?", - "register": "Registro", - "signIn": "Registrarse", - "failed": "Fallo en Inicio" - }, - "nav": { - "profile": "Perfil", - "startInSeconds": "Comience en segundos", - "account": "Cuenta", - "signIn": "Registrarse", - "signOut": "Desconectar", - "dashboard": "Panel", - "settings": "Ajustes", - "support": "Soporte" - }, - "newSiteHeader": "Acompañanos en nuestra launch party en Vancouver el 26 de Octubre! Buscando la version anterior de coinos? Visita classic.coinos.io", - "news": { - "header": "Noticias", - "subheader": "Últimas Actualizaciones", - "update1": "" - }, - "user": { - "bitcoin": "Bitcoin", - "lightning": "Lightning", - "invoice": "Factura", - "unfollow": "Dejar de seguir", - "following": "Siguiendo", - "follow": "Seguir", - "remove": "Eliminar", - "scanToPayBTC": "Escanear para pagar con bitcoin", - "this": "Esta", - "lightningAddress": "dirección lightning", - "likeAnEmail": "es como un correo electrónico para bitcoin. Puede publicarlo en su sitio web o tarjetas de presentación y usarlo múltiples veces.", - "dashboard": { - "go": "Ir", - "dashboard": "Panel", - "accountBalance": "Saldo de la cuenta", - "bitcoinPrice": "Precio de Bitcoin:", - "conversionFeeWarning": "Se le cobrará una tarifa de retiro del 1% sobre el monto.", - "dataFromBinance": "Datos de Binance.", - "fetchingRate": "calculando tasa...", - "optionalNote": "Nota (Opcional)", - "send": "Enviar", - "receive": "Recibir", - "withdraw": "Retirar", - "deposit": "Depositar", - "voucher": "Comprobante" - }, - "receive": { - "lessThan1BTCWarning": "Introduzca una cantidad inferior a 1 bitcoin.", - "showQR": "Mostrar código QR" - }, - "send": { - "contacts": "Contactos", - "scan": "Escanear", - "paste": "Pegar", - "next": "Siguiente", - "placeholder": "Asigne una dirección de bitcoin, una factura lightning o un usuario de coinos" - }, - "settings": { - "bannerImage": "Imagen del Banner", - "profileImage": "Imagen de perfil", - "oneTimeCode": "Ingrese el código de un solo uso", - "accountId": "Id Cuenta", - "header": "Ajustes", - "ACCOUNT": "CUENTA", - "POINT_OF_SALE": "PUNTO DE VENTA", - "SECURITY": "SEGURIDAD", - "locale": "Idioma", - "username": "Usuario", - "email": "Correo", - "newPassword": "Nueva contraseña", - "businessAddress": "Dirección Negocio", - "emailNotifications": "Notificaciones de Correo Electrónico", - "emailNotificationsDescription": "Reciba notificaciones por correo electrónico cuando se produzca un cambio en su cuenta o cuando las personas le envíen pagos.", - "smsNotifications": "Notificaciones SMS", - "smsNotificationsDescription": "Coinos enviará notificaciones de texto cuando esto esté habilitado.", - "theme": "Color Tema", - "themeDescription": "Seleccione entre los temas de color predeterminados.", - "localCurrency": "Moneda Local", - "btcUnit": "Ver bitcoin en:", - "bitcoin": "bitcoin", - "satoshis": "Satoshis", - "securityPIN": "PIN de Seguridad", - "securityPINDescription": "Establezca un pin de seguridad para desbloquear la configuración y enviar pagos.", - "setPIN": "Establecer PIN", - "autoLock": "Temporizador de bloqueo automático", - "autoLockDescription": "Su cuenta entrará en modo seguro automáticamente después del tiempo especificado:", - "twofa": "Autenticación de 2 factores", - "twofaDescription": "Agregue una capa extra de seguridad a su dispositivo habilitando la autenticación de 2 factores.", - "twofaSetup": "Configurar 2FA", - "twofaDisable": "Deshabilitar 2FA", - "select": "Seleccionar", - "verifyPIN": "Verificar PIN", - "enablePIN": "Habilitar PIN", - "disablePIN": "Deshabilitar PIN" - }, - "support": { - "header": "Soporte", - "email": "Correo", - "accountName": "Nombre Cuenta", - "message": "Mensaje", - "send": "Enviar" - } - }, - "transactions": { - "header": "Transacciones", - "AMOUNT": "CANTIDAD", - "TYPE": "TIPO", - "TIME": "HORA", - "sent": "Enviado", - "received": "Recibido", - "empty": "Aún no hay transacciones.", - "send": "Enviado", - "next": "Siguiente", - "sendersChoice": "Sender's choice", - "sendTo": "Enviar a", - "to": "para", - "pay": "Pagar", - "requesting": "está solicitando", - "sentInvoiceTo": "Enviar factura a", - "sentRequestTo": "Enviar solicitud a", - "pleasePay": "Por favor pague", - "day": "Día", - "week": "Semana", - "month": "Mes", - "all": "Todo", - "export": "Exportar", - "invoice": "Factura", - "readyToPay": "está listo para pagar", - "describeOrder": "Utilice este campo para describir su orden", - "requestAnInvoice": "Solicitar factura", - "submit": "Enviar", - "isRequesting": "está solicitando", - "awaiting": "Esperando", - "tapAnywhere": "Toca en cualquier lugar", - "from": "de", - "redeem": "Redimir", - "redeemed": "Redimido", - "redeemedBy": "Redimido por" - } -} -- cgit v1.2.3 From ca1aff53de569bc1fb07d7fe1d247a33b4c23999 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 20 Dec 2022 23:16:25 -0800 Subject: fix json errors --- src/locales/es.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/locales/es.json b/src/locales/es.json index 87de05d2..b57288ce 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -93,7 +93,7 @@ } }, "invoice": { - "addTip": "Añadir propina, + "addTip": "Añadir propina", "addTipq": "Añadir propina?", "done": "Hecho", "paymentSuccessful": "¡Pago recibido!", @@ -122,7 +122,7 @@ "title": "Fácil de usar", "description1": "Solo ingrese una cantidad en su moneda local, comparta el código QR y listo.", "description2": "Hacemos todo el trabajo pesado para que pueda concentrarse en su negocio.", - "description3": "Siempre tiene la opción de tomar la custodia de sus fondos al retirarlos instantáneamente en cualquier momento"." + "description3": "Siempre tiene la opción de tomar la custodia de sus fondos al retirarlos instantáneamente en cualquier momento." }, "info3": { "title": "Maneja tu marca a tu manera!", -- cgit v1.2.3 From b026bf21ccf70f182c11a7f7542ce0b695e97469 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 21 Dec 2022 13:40:25 -0800 Subject: generate keypair for users that don't have one --- package.json | 16 +- pnpm-lock.yaml | 632 +++++++++++++++++++++ src/components/RegisterOrLogin.svelte | 16 +- src/hooks.server.js | 2 - src/lib/socket.js | 2 +- src/lib/store.js | 10 +- src/routes/(app)/+layout.server.js | 2 + src/routes/(app)/[username]/dashboard/+page.svelte | 2 +- src/routes/(app)/[username]/generate/+page.svelte | 61 ++ src/routes/(app)/[username]/generate/+server.js | 8 + vite.config.js | 6 +- 11 files changed, 742 insertions(+), 15 deletions(-) create mode 100644 src/routes/(app)/[username]/generate/+page.svelte create mode 100644 src/routes/(app)/[username]/generate/+server.js (limited to 'src') diff --git a/package.json b/package.json index d6e0dc4c..dac10511 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,13 @@ "@sveltejs/kit": "1.0.0-next.556", "@zerodevx/svelte-toast": "^0.7.2", "autoprefixer": "^10.4.13", + "bech32": "^2.0.0", "bip21": "^2.0.3", + "bip32": "^3.1.0", + "bip39": "^3.0.4", "bitcoin-address-validation": "^2.2.1", "bolt11": "^1.4.0", + "buffer": "^6.0.3", "date-fns": "^2.29.3", "leaflet": "^1.9.3", "leaflet.markercluster": "^1.5.3", @@ -26,6 +30,7 @@ "qr-code-styling": "1.6.0-rc.1", "qr-scanner": "^1.4.1", "qrcode-base64": "^1.0.1", + "rollup": "2", "screenfull": "^6.0.2", "svelte": "^3.53.1", "svelte-outclick": "^3.2.0", @@ -34,7 +39,16 @@ "svelte-virtual-scroll-list": "^1.1.0", "sveltekit-i18n": "^2.2.2", "tailwindcss": "^3.2.4", - "vite": "~3.2.4" + "tiny-secp256k1": "^2.2.1", + "vite": "~3.2.4", + "vite-plugin-node-polyfills": "^0.5.0" + }, + "pnpm": { + "peerDependencyRules": { + "ignoreMissing": [ + "vite" + ] + } }, "type": "module" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5f15019..2353621a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,13 @@ specifiers: '@sveltejs/kit': 1.0.0-next.556 '@zerodevx/svelte-toast': ^0.7.2 autoprefixer: ^10.4.13 + bech32: ^2.0.0 bip21: ^2.0.3 + bip32: ^3.1.0 + bip39: ^3.0.4 bitcoin-address-validation: ^2.2.1 bolt11: ^1.4.0 + buffer: ^6.0.3 date-fns: ^2.29.3 leaflet: ^1.9.3 leaflet.markercluster: ^1.5.3 @@ -17,6 +21,7 @@ specifiers: qr-code-styling: 1.6.0-rc.1 qr-scanner: ^1.4.1 qrcode-base64: ^1.0.1 + rollup: '2' screenfull: ^6.0.2 svelte: ^3.53.1 svelte-outclick: ^3.2.0 @@ -25,16 +30,22 @@ specifiers: svelte-virtual-scroll-list: ^1.1.0 sveltekit-i18n: ^2.2.2 tailwindcss: ^3.2.4 + tiny-secp256k1: ^2.2.1 vite: ~3.2.4 + vite-plugin-node-polyfills: ^0.5.0 devDependencies: '@sveltejs/adapter-node': 1.0.0-next.106_zm7dem4zfy4fmufbczhdmz6r6y '@sveltejs/kit': 1.0.0-next.556_svelte@3.53.1+vite@3.2.4 '@zerodevx/svelte-toast': 0.7.2 autoprefixer: 10.4.13_postcss@8.4.19 + bech32: 2.0.0 bip21: 2.0.3 + bip32: 3.1.0 + bip39: 3.0.4 bitcoin-address-validation: 2.2.1 bolt11: 1.4.0 + buffer: 6.0.3 date-fns: 2.29.3 leaflet: 1.9.3 leaflet.markercluster: 1.5.3_leaflet@1.9.3 @@ -44,6 +55,7 @@ devDependencies: qr-code-styling: 1.6.0-rc.1 qr-scanner: 1.4.1 qrcode-base64: 1.0.1 + rollup: 2.79.1 screenfull: 6.0.2 svelte: 3.53.1 svelte-outclick: 3.2.0 @@ -52,7 +64,9 @@ devDependencies: svelte-virtual-scroll-list: 1.1.0_svelte@3.53.1 sveltekit-i18n: 2.2.2_svelte@3.53.1 tailwindcss: 3.2.4_postcss@8.4.19 + tiny-secp256k1: 2.2.1 vite: 3.2.4 + vite-plugin-node-polyfills: 0.5.0_rollup@2.79.1+vite@3.2.4 packages: @@ -117,6 +131,17 @@ packages: rollup: 3.7.5 dev: true + /@rollup/plugin-inject/4.0.4_rollup@2.79.1: + resolution: {integrity: sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + estree-walker: 2.0.2 + magic-string: 0.25.9 + rollup: 2.79.1 + dev: true + /@rollup/plugin-json/5.0.1_rollup@3.7.5: resolution: {integrity: sha512-QCwhZZLvM8nRcTHyR1vOgyTMiAnjiNj1ebD/BMRvbO1oc/z14lZH6PfxXeegee2B6mky/u9fia4fxRM4TqrUaw==} engines: {node: '>=14.0.0'} @@ -148,6 +173,18 @@ packages: rollup: 3.7.5 dev: true + /@rollup/pluginutils/3.1.0_rollup@2.79.1: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + /@rollup/pluginutils/5.0.2_rollup@3.7.5: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} @@ -183,6 +220,9 @@ packages: peerDependencies: svelte: ^3.44.0 vite: ^3.2.0 + peerDependenciesMeta: + vite: + optional: true dependencies: '@sveltejs/vite-plugin-svelte': 1.2.0_svelte@3.53.1+vite@3.2.4 '@types/cookie': 0.5.1 @@ -213,6 +253,8 @@ packages: peerDependenciesMeta: diff-match-patch: optional: true + vite: + optional: true dependencies: debug: 4.3.4 deepmerge: 4.2.2 @@ -250,10 +292,18 @@ packages: resolution: {integrity: sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==} dev: true + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true + /@types/node/11.11.6: + resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} + dev: true + /@types/node/18.11.9: resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} dev: true @@ -311,6 +361,24 @@ packages: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true + /asn1.js/5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + + /assert/2.0.0: + resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} + dependencies: + es6-object-assign: 1.1.0 + is-nan: 1.3.2 + object-is: 1.1.5 + util: 0.12.5 + dev: true + /autoprefixer/10.4.13_postcss@8.4.19: resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} @@ -327,6 +395,11 @@ packages: postcss-value-parser: 4.2.0 dev: true + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -342,6 +415,10 @@ packages: engines: {node: '>= 8'} dev: true + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + /bech32/1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} dev: true @@ -366,6 +443,27 @@ packages: qs: 6.11.0 dev: true + /bip32/3.1.0: + resolution: {integrity: sha512-eoeajYEzJ4d6yyVtby8C+XkCeKItiC4Mx56a0M9VaqTMC73SWOm4xVZG7SaR8e/yp4eSyky2XcBpH3DApPdu7Q==} + engines: {node: '>=6.0.0'} + dependencies: + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + typeforce: 1.18.0 + wif: 2.0.6 + dev: true + + /bip39/3.0.4: + resolution: {integrity: sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==} + dependencies: + '@types/node': 11.11.6 + create-hash: 1.2.0 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + dev: true + /bitcoin-address-validation/2.2.1: resolution: {integrity: sha512-f6LXNpvRKlTbHWb37N9tHoAbYGbshzM8FPWvCtloh++hxZ0/dmkokvKNVLz6HkG82zVwo8w6Sq4JmfO2timzyg==} dependencies: @@ -392,6 +490,10 @@ packages: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true + /bn.js/5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true + /bolt11/1.4.0: resolution: {integrity: sha512-TeGIOpFNrvNA1XGvwBr+lYmzKfoJeyMRt7nsGmIci+5gbmSz7s46jwKLNYXH3IoxV7fjmYUEUu2NM19n9w0msg==} dependencies: @@ -429,6 +531,67 @@ packages: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true + /browser-resolve/2.0.0: + resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} + dependencies: + resolve: 1.22.1 + dev: true + + /browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-cipher/1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + + /browserify-des/1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-rsa/4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: true + + /browserify-sign/4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + + /browserify-zlib/0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: true + /browserslist/4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -458,11 +621,33 @@ packages: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: true + /buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /buffer/6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true + /builtin-status-codes/3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: true + /busboy/1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -520,11 +705,26 @@ packages: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true + /console-browserify/1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true + + /constants-browserify/1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true + /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} dev: true + /create-ecdh/4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + /create-hash/1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: @@ -535,6 +735,37 @@ packages: sha.js: 2.4.11 dev: true + /create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /crypto-browserify/3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + /cssesc/3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -563,10 +794,25 @@ packages: engines: {node: '>=0.10.0'} dev: true + /define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + /defined/1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} dev: true + /des.js/1.0.1: + resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + /detect-indent/6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -590,10 +836,23 @@ packages: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true + /diffie-hellman/5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + /dlv/1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true + /domain-browser/4.22.0: + resolution: {integrity: sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==} + engines: {node: '>=10'} + dev: true + /electron-to-chromium/1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} dev: true @@ -610,6 +869,10 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true + /es6-object-assign/1.1.0: + resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} + dev: true + /es6-promise/3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true @@ -829,10 +1092,26 @@ packages: engines: {node: '>=6'} dev: true + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + /estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /evp_bytestokey/1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: true + /fast-glob/3.2.12: resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} @@ -857,6 +1136,20 @@ packages: to-regex-range: 5.0.1 dev: true + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /fraction.js/4.2.0: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true @@ -929,15 +1222,34 @@ packages: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} dev: true + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.1.3 + dev: true + /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.1.3 + dev: true + /has-symbols/1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -969,6 +1281,14 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true + /https-browserify/1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -980,6 +1300,14 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true + /is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -994,6 +1322,11 @@ packages: builtin-modules: 3.3.0 dev: true + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + /is-core-module/2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: @@ -1005,6 +1338,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-generator-function/1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1016,6 +1356,14 @@ packages: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} dev: true + /is-nan/1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + dev: true + /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -1027,6 +1375,22 @@ packages: '@types/estree': 1.0.0 dev: true + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + + /isomorphic-timers-promises/1.0.1: + resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} + engines: {node: '>=10'} + dev: true + /kleur/4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -1049,6 +1413,13 @@ packages: engines: {node: '>=10'} dev: true + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true @@ -1087,6 +1458,14 @@ packages: picomatch: 2.3.1 dev: true + /miller-rabin/4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true + /mime/3.0.0: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} @@ -1163,6 +1542,39 @@ packages: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} dev: true + /node-stdlib-browser/1.2.0: + resolution: {integrity: sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==} + engines: {node: '>=10'} + dependencies: + assert: 2.0.0 + browser-resolve: 2.0.0 + browserify-zlib: 0.2.0 + buffer: 5.7.1 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + create-require: 1.1.1 + crypto-browserify: 3.12.0 + domain-browser: 4.22.0 + events: 3.3.0 + https-browserify: 1.0.0 + isomorphic-timers-promises: 1.0.1 + os-browserify: 0.3.0 + path-browserify: 1.0.1 + pkg-dir: 5.0.0 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 3.6.0 + stream-browserify: 3.0.0 + stream-http: 3.2.0 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.1 + url: 0.11.0 + util: 0.12.5 + vm-browserify: 1.1.2 + dev: true + /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1182,12 +1594,66 @@ packages: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} dev: true + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + dev: true + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + /once/1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true + /os-browserify/0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: true + + /parse-asn1/5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: true + + /path-browserify/1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + /path-is-absolute/1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -1197,6 +1663,17 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /pbkdf2/3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -1211,6 +1688,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /pkg-dir/5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + dev: true + /postcss-import/14.1.0_postcss@8.4.19: resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} engines: {node: '>=10.0.0'} @@ -1297,6 +1781,30 @@ packages: hasBin: true dev: true + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /public-encrypt/4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /punycode/1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + dev: true + + /punycode/1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true + /qr-code-styling/1.6.0-rc.1: resolution: {integrity: sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==} dependencies: @@ -1324,6 +1832,17 @@ packages: side-channel: 1.0.4 dev: true + /querystring-es3/0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: true + + /querystring/0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -1333,6 +1852,19 @@ packages: engines: {node: '>=10'} dev: true + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /randomfill/1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + /read-cache/1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: @@ -1416,6 +1948,10 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + /sander/0.5.1: resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==} dependencies: @@ -1444,6 +1980,10 @@ packages: resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} dev: true + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + /sha.js/2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true @@ -1492,6 +2032,22 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} dev: true + /stream-browserify/3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + + /stream-http/3.2.0: + resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + xtend: 4.0.2 + dev: true + /streamsearch/1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -1640,6 +2196,13 @@ packages: - ts-node dev: true + /timers-browserify/2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: true + /tiny-glob/0.2.9: resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: @@ -1647,6 +2210,13 @@ packages: globrex: 0.1.2 dev: true + /tiny-secp256k1/2.2.1: + resolution: {integrity: sha512-/U4xfVqnVxJXN4YVsru0E6t5wVncu2uunB8+RVR40fYUxkKYUPS10f+ePQZgFBoE/Jbf9H1NBveupF2VmB58Ng==} + engines: {node: '>=14.0.0'} + dependencies: + uint8array-tools: 0.0.7 + dev: true + /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -1659,10 +2229,19 @@ packages: engines: {node: '>=6'} dev: true + /tty-browserify/0.0.1: + resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + dev: true + /typeforce/1.18.0: resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} dev: true + /uint8array-tools/0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} + engines: {node: '>=14.0.0'} + dev: true + /undici/5.12.0: resolution: {integrity: sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==} engines: {node: '>=12.18'} @@ -1681,16 +2260,48 @@ packages: picocolors: 1.0.0 dev: true + /url/0.11.0: + resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: true + /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true + /util/0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.10 + which-typed-array: 1.1.9 + dev: true + /varuint-bitcoin/1.1.2: resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} dependencies: safe-buffer: 5.2.1 dev: true + /vite-plugin-node-polyfills/0.5.0_rollup@2.79.1+vite@3.2.4: + resolution: {integrity: sha512-zaTCjL64pJY6RDeP4ZZ1rtFKFTy44RYFtFIISKk3LclIeD/yR9tqpscj5x+jXhD7Bh1HYk2a7uu1aCFEYiUlIA==} + peerDependencies: + vite: ^2.0.0 || ^3.0.0 + peerDependenciesMeta: + vite: + optional: true + dependencies: + '@rollup/plugin-inject': 4.0.4_rollup@2.79.1 + node-stdlib-browser: 1.2.0 + vite: 3.2.4 + transitivePeerDependencies: + - rollup + dev: true + /vite/3.2.4: resolution: {integrity: sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1735,6 +2346,22 @@ packages: vite: 3.2.4 dev: true + /vm-browserify/1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: true + + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + /wif/2.0.6: resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} dependencies: @@ -1754,3 +2381,8 @@ packages: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte index 32f046d0..8ee3af4a 100644 --- a/src/components/RegisterOrLogin.svelte +++ b/src/components/RegisterOrLogin.svelte @@ -5,7 +5,7 @@ import { enhance } from '$app/forms'; import { Icon } from '$comp'; import { focus } from '$lib/utils'; - import { loginRedirect } from '$lib/store'; + import { loginRedirect, password } from '$lib/store'; import { t } from '$lib/translations'; import { page } from '$app/stores'; @@ -19,12 +19,12 @@ export let form; export let pageID; - let username, password, email, submit; + let username, email, btn; $: update(form); - let update = (form) => form && ({ username, password } = form); + let update = (form) => form && ({ username, password: $password } = form); - $: token && token?.length === 6 && tick().then(() => submit.click()); + $: token && token?.length === 6 && tick().then(() => btn.click()); let revealPassword = false; @@ -52,7 +52,7 @@
- +
@@ -66,7 +66,7 @@
+ + +
{:else if p.with} - -
-
- -
-
{p.with.username}
+
+
+
-
+
{p.with.username}
+
{:else if p.type === types.classic} {amount ? $t('payments.next') : $t('payments.sendersChoice')} - -
- {type[0].toUpperCase() + type.substring(1, type.length)} - -
diff --git a/src/routes/(app)/payment/[id]/+page.server.js b/src/routes/(app)/payment/[id]/+page.server.js index cbd7355e..1c90ab69 100644 --- a/src/routes/(app)/payment/[id]/+page.server.js +++ b/src/routes/(app)/payment/[id]/+page.server.js @@ -1,6 +1,6 @@ import { auth, get } from '$lib/utils'; export async function load({ cookies, params }) { - let tx = await get(`/payments/${params.id}`, auth(cookies)); - return { tx }; + let payment = await get(`/payments/${params.id}`, auth(cookies)); + return { payment }; } diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index a961d14d..da21400a 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -6,33 +6,41 @@ import { PUBLIC_EXPLORER as expl } from '$env/static/public'; export let data; - let { user, tx } = data; + let { user, payment: p } = data; let { username } = user; - let { id, amount, created, rate, type, ref, fee, currency } = tx; + let { id, amount, created, rate, type, ref, fee, currency } = p; fee = fee || 0; - let fiat = (Math.abs(amount) * rate) / sats; + let total = amount > 0 ? amount : -amount + fee; + let fiat = (total * rate) / sats; -
+

{$t(amount < 0 ? 'payments.sent' : 'payments.received')}

+ {#if p.with} +
+
+ +
+
{p.with.username}
+
+ {/if} +
-
{$t('payments.amount')}
{f(fiat, currency)} - ⚡️{`${s(Math.abs(amount) + fee)}`} + ⚡️{`${s(total)}`}
-
{$t('payments.date')}
{format(new Date(created), 'MMMM d')}, {format(new Date(created), 'h:mm aaa')} @@ -46,17 +54,14 @@ {ref}
- {:else} + {:else if type === 'bitcoin'}
-
{$t('payments.id')}
- {id} + {id}
-- cgit v1.2.3 From 979d9dd27a147bae13ba953a7e260412fa024f57 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 14 Feb 2023 11:19:12 -0800 Subject: handle sending to user --- src/lib/utils.js | 2 ++ src/routes/(app)/[username]/(profile)/+page.svelte | 1 - src/routes/(app)/payment/[id]/+page.svelte | 42 ++++++++++++++++------ src/routes/(app)/send/[...text]/+page.server.js | 5 +-- 4 files changed, 36 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/lib/utils.js b/src/lib/utils.js index b3bb29ec..86f722b9 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -147,6 +147,8 @@ export const login = async (user, cookies) => { export const auth = (cookies) => ({ authorization: `Bearer ${cookies.get('token')}` }); +export const fiat = (amount, rate) => (amount * rate) / sats; + export const f = (s, currency) => new Intl.NumberFormat('en-US', { style: 'currency', diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index baab8ba1..c704c00d 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -5,7 +5,6 @@ export let data; let { events, invoices, sent, received, subject, user } = data; - console.log(invoices);
diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index da21400a..7b2bdb26 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -1,6 +1,6 @@ -
+

{$t(amount < 0 ? 'payments.sent' : 'payments.received')}

@@ -34,13 +32,33 @@ {/if}
-
- {f(fiat, currency)} - ⚡️{`${s(total)}`} + Amount +
+ {f(fiat(amount, rate), currency)} + ⚡️{`${s(amount)}`} +
+
+ +
+ Network fee +
+ {f(fiat(fee, rate), currency)} + ⚡️{`${s(fee)}`}
+ {#if ourfee > 0} +
+ Platform fee +
+ {f(fiat(ourfee, rate), currency)} + ⚡️{`${s(ourfee)}`} +
+
+ {/if} +
+ Date
{format(new Date(created), 'MMMM d')}, {format(new Date(created), 'h:mm aaa')} @@ -49,6 +67,7 @@ {#if type === 'lightning'}
+ Proof
{$t('payments.preimage')}
{ref} @@ -56,12 +75,13 @@
{:else if type === 'bitcoin'}
+ Txid
-
diff --git a/src/routes/(app)/send/[...text]/+page.server.js b/src/routes/(app)/send/[...text]/+page.server.js index d09b4da9..b1089a5b 100644 --- a/src/routes/(app)/send/[...text]/+page.server.js +++ b/src/routes/(app)/send/[...text]/+page.server.js @@ -45,14 +45,15 @@ let parse = async (t, host) => { // bitcoin if (validate(t)) { try { - ({ id } = await get(`/invoice/${t}`)); + ({ id, user } = await get(`/invoice/${t}`)); } catch (e) { let r = `/send/bitcoin/${t}`; if (amount) r += '/' + amount; throw redirect(307, r); } - if (id) throw redirect(307, `/send/${id}`); + if (user) throw redirect(307, `/send/${user.username}`); + else if (id) throw redirect(307, `/send/${id}`); } // user -- cgit v1.2.3 From 3403bf5c6090109725493b4c7a4fef28266beda8 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 15 Feb 2023 19:57:47 -0800 Subject: messages on dashboard --- src/components/Balance.svelte | 2 +- src/lib/nostr.js | 3 +- .../(app)/[username]/(profile)/+page.server.js | 23 ++- src/routes/(app)/[username]/(profile)/+page.svelte | 191 +++++++++++++++------ .../[username]/settings/[...tab]/+page.server.js | 1 + src/routes/(app)/buy/+page.server.js | 19 ++ src/routes/(app)/buy/+page.svelte | 126 ++++++++++++++ .../(app)/send/lightning/[payreq]/+page.svelte | 2 +- 8 files changed, 306 insertions(+), 61 deletions(-) create mode 100644 src/routes/(app)/buy/+page.server.js create mode 100644 src/routes/(app)/buy/+page.svelte (limited to 'src') diff --git a/src/components/Balance.svelte b/src/components/Balance.svelte index e95e5dde..5d993c28 100644 --- a/src/components/Balance.svelte +++ b/src/components/Balance.svelte @@ -9,7 +9,7 @@
{#if isNaN($animatedRate)} -
---
+
—
{:else} {f((user.balance * $animatedRate) / sats, user.currency)} {/if} diff --git a/src/lib/nostr.js b/src/lib/nostr.js index de19b477..13251856 100644 --- a/src/lib/nostr.js +++ b/src/lib/nostr.js @@ -80,7 +80,7 @@ export let decrypt = async ({ event, user }) => { return Buffer.from(message).toString('utf8'); } catch (e) { - console.log(e); + // console.log(e); } }; @@ -119,6 +119,7 @@ let getPrivateKey = async (user) => { seed = mnemonicToSeedSync(mnemonic); key = bip32.fromSeed(seed); child = key.derivePath("m/44'/1237'/0'/0/0"); + return child.privateKey; }; diff --git a/src/routes/(app)/[username]/(profile)/+page.server.js b/src/routes/(app)/[username]/(profile)/+page.server.js index c68cfecc..d1fa2f41 100644 --- a/src/routes/(app)/[username]/(profile)/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/+page.server.js @@ -1,22 +1,33 @@ import { auth, get } from '$lib/utils'; export async function load({ cookies, params, parent, url }) { - let { subject } = await parent(); + let { user, subject } = await parent(); let { pubkey } = subject; + let { since = 0 } = params; - let events = []; + let messages = []; + + if (user) { + try { + messages = await get(`/${user.pubkey}/${since}/messages`); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + } + + let notes = []; try { - events = await get(`/${pubkey}/notes`); + notes = await get(`/${pubkey}/notes`); } catch (e) { - console.log(`failed to fetch nostr events for ${pubkey}`, e); + console.log(`failed to fetch nostr notes for ${pubkey}`, e); } - events.map((e) => { + notes.map((e) => { e.seen = e.created_at; }); let { invoices, sent, received } = await get('/requests', auth(cookies)); - return { invoices, events, sent, received }; + return { invoices, messages, notes, sent, received }; } diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index c704c00d..45fe1d84 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -1,75 +1,162 @@ -
+
{#if user?.id === subject.id} - - {/if} -
+
+ {#if user.balance > 0 && false} +

Balance

+
+ +
+ {:else} +
+

Welcome

+ +

+ Get started by making a deposit or getting someone to pay you in Bitcoin! +

-
- {#each invoices as { amount, currency, rate, request: { requester, recipient }, hash }} - {@const requested = user.username === requester?.username} - -
-
-
- {#if requested} - + {/if} + + {#if invoices.length} +
+

Invoices

+ {#each invoices as { amount, currency, rate, request: { requester, recipient }, hash }} + {@const requested = user.username === requester?.username} + + + {/if} + {#if received.length} +
+

Requests

- {#each received as { id, invoice, memo, requester: r }} - -
-
-
+ {#each received as { id, invoice, memo, requester: r }} + +
- -
-

{r.username}

-

{memo}

+
+
+ +
+

{r.username}

+

{memo}

+
+
+
+
+
-
- + + {/each} +
+ {/if} + + {#if latest.length} +
+

Messages

+ {#each latest as { content, user }} +
+
+
+
{user.username}
+ {content}
-
- - {/each} + {/each} +
+ {/if}
+ + diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js index dd16459f..94240adc 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js @@ -9,6 +9,7 @@ export function load({ params, url }) { export const actions = { default: async ({ cookies, request }) => { let form = Object.fromEntries(await request.formData()); + form.prompt = form.prompt === 'on' let user = { ...(await get('/me', auth(cookies))), ...form }; try { diff --git a/src/routes/(app)/buy/+page.server.js b/src/routes/(app)/buy/+page.server.js new file mode 100644 index 00000000..e03d6c0a --- /dev/null +++ b/src/routes/(app)/buy/+page.server.js @@ -0,0 +1,19 @@ +import { env } from '$env/dynamic/private'; +import { error, redirect } from '@sveltejs/kit'; +import { post, auth } from '$lib/utils'; +import { createTicket } from '$lib/ticket'; + +export const actions = { + default: async ({ cookies, request }) => { + let form = await request.formData(); + + await post('/buy', { + number: form.get('number').replace(/\s+/g, ''), + month: form.get('expiry').slice(0, 2), + year: form.get('expiry').slice(-2), + cvc: form.get('cvc') + }, auth(cookies)); + + throw redirect(307, `/launch/thanks/${asset}`); + } +}; diff --git a/src/routes/(app)/buy/+page.svelte b/src/routes/(app)/buy/+page.svelte new file mode 100644 index 00000000..34cfc2e5 --- /dev/null +++ b/src/routes/(app)/buy/+page.svelte @@ -0,0 +1,126 @@ + + +
+
+ + + +
+ +
+
+
+ +

Buy Bitcoin

+
+

Purchase up to $500 worth of Bitcoin from us.

+ +

+ If you want more, try Kraken + or + ShakePay or ask + around at our next + meetup. +

+ +
{ + loading = true; + return ({ update }) => update() && (loading = false); + }} + > + + + + + + + + + + +
+ +
+
+
+
+
diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte index 6ae699d2..e9502636 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte +++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte @@ -89,7 +89,7 @@
{/if} {:else} -
+ + +
+
+
+
-- cgit v1.2.3 From af598ffa4432706fd518c2fedd6b685f52fd1ae1 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 15 Feb 2023 22:47:27 -0800 Subject: buy page --- src/routes/(app)/buy/+page.server.js | 24 +++++++++++++++-------- src/routes/(app)/buy/+page.svelte | 37 ++++++++++++++---------------------- 2 files changed, 30 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/buy/+page.server.js b/src/routes/(app)/buy/+page.server.js index e03d6c0a..8a88ed4e 100644 --- a/src/routes/(app)/buy/+page.server.js +++ b/src/routes/(app)/buy/+page.server.js @@ -1,5 +1,5 @@ import { env } from '$env/dynamic/private'; -import { error, redirect } from '@sveltejs/kit'; +import { error, fail, redirect } from '@sveltejs/kit'; import { post, auth } from '$lib/utils'; import { createTicket } from '$lib/ticket'; @@ -7,13 +7,21 @@ export const actions = { default: async ({ cookies, request }) => { let form = await request.formData(); - await post('/buy', { - number: form.get('number').replace(/\s+/g, ''), - month: form.get('expiry').slice(0, 2), - year: form.get('expiry').slice(-2), - cvc: form.get('cvc') - }, auth(cookies)); + let amount = parseFloat(form.get('amount')); + if (!amount || amount < 0 || amount > 500) return fail(400, { message: 'Invalid amount' }); - throw redirect(307, `/launch/thanks/${asset}`); + await post( + '/buy', + { + amount: form.get('amount'), + number: form.get('number').replace(/\s+/g, ''), + month: form.get('expiry').slice(0, 2), + year: form.get('expiry').slice(-2), + cvc: form.get('cvc') + }, + auth(cookies) + ); + + throw redirect(307, `/${form.get('username')}/payments`); } }; diff --git a/src/routes/(app)/buy/+page.svelte b/src/routes/(app)/buy/+page.svelte index 34cfc2e5..ed803110 100644 --- a/src/routes/(app)/buy/+page.svelte +++ b/src/routes/(app)/buy/+page.svelte @@ -2,15 +2,12 @@ import { enhance } from '$app/forms'; import { Icon, Lock, Card, Calendar, Spinner } from '$comp'; - export let data; + export let data, form; let { username } = data.user; let loading; - let amount = 100; - let n = '4242 4242 4242 4242'; - let d = '10/25'; - let cvc = 444; + let amount, n, d, cvc;
@@ -20,25 +17,18 @@
-
+
- -

Buy Bitcoin

+

Buy Bitcoin

-

Purchase up to $500 worth of Bitcoin from us.

+

Purchase up to $500 worth of Bitcoin

-

- If you want more, try Kraken - or - ShakePay or ask - around at our next - meetup. -

+ {#if form?.message} +
+ {form.message} +
+ {/if} - $ + $
{/if} @@ -138,17 +146,23 @@
{/if} - {#if latest.length} -
-

Messages

- {#each latest as { content, user }} -
-
- + {#if latest.length && user.id === subject.id} +
+ {#each latest as { content, pubkey, author, recipient }} + {@const user = author.id === user.id ? recipient : author} + +
+
+ +
+
+
{user.username}
+
+ {content} +
+
-
{user.username}
- {content} -
+ {/each}
{/if} diff --git a/src/routes/(app)/[username]/(profile)/messages/+page.server.js b/src/routes/(app)/[username]/(profile)/messages/+page.server.js deleted file mode 100644 index 63116099..00000000 --- a/src/routes/(app)/[username]/(profile)/messages/+page.server.js +++ /dev/null @@ -1,16 +0,0 @@ -import { get } from '$lib/utils'; - -export async function load({ params, parent, url }) { - let { user, subject } = await parent(); - let { since = 0 } = params; - - let messages = []; - - try { - messages = await get(`/nostr/${user.pubkey}/${subject.pubkey}/${since}/messages`); - } catch (e) { - console.log(`failed to fetch nostr messages`, e); - } - - return { newMessages: messages }; -} diff --git a/src/routes/(app)/[username]/(profile)/messages/+page.svelte b/src/routes/(app)/[username]/(profile)/messages/+page.svelte deleted file mode 100644 index db7b1ced..00000000 --- a/src/routes/(app)/[username]/(profile)/messages/+page.svelte +++ /dev/null @@ -1,123 +0,0 @@ - - -
-

- {$t('payments.sendMessage')} -

- -
- {#each events as data} - {@const ours = data.pubkey === user.pubkey} - {@const theirs = !ours} -
- {#if data.message} - {data.message} - {:else} - - - {/if} -
-
- {format(new Date(data.created_at * 1000), 'MMM d')}, - {format(new Date(data.created_at * 1000), 'h:mm aa')} -
- {/each} -
- - - - - - - -
- - diff --git a/src/routes/(app)/[username]/invoice/[hash]/+page.svelte b/src/routes/(app)/[username]/invoice/[hash]/+page.svelte index b5571f23..2ff92687 100644 --- a/src/routes/(app)/[username]/invoice/[hash]/+page.svelte +++ b/src/routes/(app)/[username]/invoice/[hash]/+page.svelte @@ -152,9 +152,9 @@ {/if}
- {txt.substr(0, 10)}...{txt.substr(-10)}
diff --git a/src/routes/(app)/[username]/messages/+page.server.js b/src/routes/(app)/[username]/messages/+page.server.js new file mode 100644 index 00000000..7b651389 --- /dev/null +++ b/src/routes/(app)/[username]/messages/+page.server.js @@ -0,0 +1,19 @@ +import { get } from '$lib/utils'; + +export async function load({ params, parent, url }) { + let { user, subject } = await parent(); + let { since = 0 } = params; + + let messages = []; + + try { + messages = await get(`/${user.pubkey}/${since}/messages`); + messages = messages + .filter((m) => m.recipient.id === subject.id || m.author.id === subject.id) + .sort((a, b) => a.created_at - b.created_at); + } catch (e) { + console.log(`failed to fetch nostr messages`, e); + } + + return { messages, user }; +} diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte new file mode 100644 index 00000000..f8f64aea --- /dev/null +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -0,0 +1,126 @@ + + +
+ {#if messages.length && ready} +
+ {#each messages as event} + {@const ours = event.pubkey === user.pubkey} + {@const theirs = !ours} +
+
+ {#await decrypt({ event, user })} + - + {:then message} + {message} + {/await} +
+
+ +
+
+
+ {format(new Date(event.created_at * 1000), 'MMM d')}, + {format(new Date(event.created_at * 1000), 'h:mm aa')} +
+ {/each} +
+ {/if} + +
+ + + + +
+
+ + diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 2068c306..aacba81e 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -182,7 +182,7 @@ {:else if p.with}
- +
{p.with.username}
diff --git a/src/routes/(app)/buy/+page.svelte b/src/routes/(app)/buy/+page.svelte index 323d5ef0..2f556ada 100644 --- a/src/routes/(app)/buy/+page.svelte +++ b/src/routes/(app)/buy/+page.svelte @@ -1,13 +1,33 @@
@@ -114,6 +134,17 @@
+ +
+
+
+
1
+ Bitcoin +
+
= {f($animatedRate, currency)}
+
+

3% credit card fee applies

+
diff --git a/src/routes/(app)/login/+page.svelte b/src/routes/(app)/login/+page.svelte index 9a1e41da..75998cd0 100644 --- a/src/routes/(app)/login/+page.svelte +++ b/src/routes/(app)/login/+page.svelte @@ -1,5 +1,4 @@
diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index f8f64aea..397d07ac 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -2,7 +2,7 @@ import { browser } from '$app/environment'; import { t } from '$lib/translations'; import { format, parseISO } from 'date-fns'; - import { scale } from 'svelte/transition'; + import { scale, fade } from 'svelte/transition'; import { enhance } from '$app/forms'; import { Avatar, Icon } from '$comp'; import { back, fail, focus } from '$lib/utils'; @@ -14,18 +14,24 @@ export let data; let { messages, subject, user } = data; - let input, pane, ready; + let input, pane; $: initialize($password); let initialize = async (p) => { if (!p) return; - ready = true; + await Promise.all( + messages.map(async (event) => (event.message = await decrypt({ event, user }))) + ); + + messages = messages; tick().then(() => pane && (pane.scrollTop = pane.scrollHeight)); }; - e.subscribe((ev) => { - if (ev?.recipient.id === user.id && !~messages.findIndex((m) => m.id === ev.id)) { - messages.push(ev); + e.subscribe(async (event) => { + let found = ~messages.findIndex((m) => m.id === event?.id); + if (event?.recipient.id === user.id && !found) { + event.message = await decrypt({ event, user }); + messages.push(event); messages = messages; tick().then(() => pane && (pane.scrollTop = pane.scrollHeight)); } @@ -58,6 +64,7 @@ sent = true; } catch (e) { + console.log(e); fail('Failed to send message'); } @@ -67,38 +74,40 @@
- {#if messages.length && ready} -
- {#each messages as event} - {@const ours = event.pubkey === user.pubkey} - {@const theirs = !ours} -
+
+ {#each messages as { id, author, message, created_at, pubkey }} + {@const ours = pubkey === user.pubkey} + {@const theirs = !ours} + + {#if message} +
- {#await decrypt({ event, user })} - - - {:then message} - {message} - {/await} + {message}
- +
- {format(new Date(event.created_at * 1000), 'MMM d')}, - {format(new Date(event.created_at * 1000), 'h:mm aa')} + {format(new Date(created_at * 1000), 'MMM d')}, + {format(new Date(created_at * 1000), 'h:mm aa')}
- {/each} -
- {/if} + {/if} + {/each} +
diff --git a/src/routes/(app)/send/[...text]/+page.svelte b/src/routes/(app)/send/[...text]/+page.svelte index 5a376f9f..5f37cad5 100644 --- a/src/routes/(app)/send/[...text]/+page.svelte +++ b/src/routes/(app)/send/[...text]/+page.svelte @@ -99,7 +99,7 @@
{#each contacts as c} -
+
-- cgit v1.2.3 From 8406bad913e888aaa6cea4fb883e5a92db957084 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 11:49:17 -0800 Subject: profile page fixes --- src/routes/(app)/[username]/(profile)/+page.server.js | 7 ++++--- src/routes/(app)/[username]/(profile)/+page.svelte | 11 ++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/(profile)/+page.server.js b/src/routes/(app)/[username]/(profile)/+page.server.js index 2777afdc..085271fd 100644 --- a/src/routes/(app)/[username]/(profile)/+page.server.js +++ b/src/routes/(app)/[username]/(profile)/+page.server.js @@ -5,7 +5,8 @@ export async function load({ cookies, params, parent, url }) { let { pubkey } = subject; let { since = 0 } = params; - let messages = []; + let messages, invoices, sent, received; + messages = invoices = sent = received = []; if (user) { try { @@ -14,6 +15,8 @@ export async function load({ cookies, params, parent, url }) { } catch (e) { console.log(`failed to fetch nostr messages`, e); } + + ({ invoices, sent, received } = await get('/requests', auth(cookies))); } let notes = []; @@ -28,7 +31,5 @@ export async function load({ cookies, params, parent, url }) { e.seen = e.created_at; }); - let { invoices, sent, received } = await get('/requests', auth(cookies)); - return { invoices, messages, notes, sent, received }; } diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index 4d4f3b13..e5a42f07 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -15,7 +15,8 @@ let i = 0; e.subscribe(async (event) => { - if (event?.recipient.id === user.id && !~latest.findIndex((m) => m.id === event.id)) { + if (!event) return; + if (event.recipient.id === user?.id && !~latest.findIndex((m) => m.id === event.id)) { event.content = await decrypt({ event, user }); let i = latest.findIndex((m) => m.pubkey === event.pubkey); @@ -23,9 +24,13 @@ if (~i) latest.splice(i, 1); else latest.pop(); - console.log(latest); latest.unshift(event); + console.log( + 'latest', + latest.map((m) => m.id) + ); + latest = latest; } }); @@ -164,7 +169,7 @@
{/if} - {#if latest.length && user.id === subject.id} + {#if latest.length && user?.id === subject.id}
{#each latest as { content, pubkey, author, recipient }} {@const user = author.id === user.id ? recipient : author} -- cgit v1.2.3 From b41b65ffc0816f5c3ac65b2e85ed37f96e4f61c0 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:05:15 -0800 Subject: refresh data --- src/routes/(app)/[username]/(profile)/+page.svelte | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index e5a42f07..596962d0 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -9,13 +9,15 @@ export let data; let { messages, notes, invoices, sent, received, subject, user } = data; + $: refresh(data); + let refresh = (d) => ({ messages, notes, invoices, sent, received, subject, user } = d); let keys = new Set(); let latest = []; let i = 0; e.subscribe(async (event) => { - if (!event) return; + if (!event) return; if (event.recipient.id === user?.id && !~latest.findIndex((m) => m.id === event.id)) { event.content = await decrypt({ event, user }); @@ -25,12 +27,6 @@ else latest.pop(); latest.unshift(event); - - console.log( - 'latest', - latest.map((m) => m.id) - ); - latest = latest; } }); -- cgit v1.2.3 From 4625c1f58e8f6a1b1e6a73dfe5c5d6871b0138bc Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:12:34 -0800 Subject: wait for messages to be ready --- src/routes/(app)/[username]/(profile)/+page.svelte | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index 596962d0..168556e4 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -15,16 +15,17 @@ let keys = new Set(); let latest = []; let i = 0; + let ready; e.subscribe(async (event) => { - if (!event) return; + if (!(event && ready)) return; if (event.recipient.id === user?.id && !~latest.findIndex((m) => m.id === event.id)) { event.content = await decrypt({ event, user }); let i = latest.findIndex((m) => m.pubkey === event.pubkey); - - if (~i) latest.splice(i, 1); - else latest.pop(); + let popped; + if (~i) popped = latest.splice(i, 1); + else popped = latest.pop(); latest.unshift(event); latest = latest; @@ -33,6 +34,7 @@ $: initialize($password); let initialize = async (p) => { + ready = false; if (!p) return; while (latest.length < 3 && i < messages.length) { let event = messages[i]; @@ -46,6 +48,7 @@ } latest = latest; + ready = true; }; -- cgit v1.2.3 From 152abe4cecf9447f90ebc4c665fa0595630c874f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:17:42 -0800 Subject: tweak --- src/routes/(app)/[username]/messages/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index 397d07ac..1e0336f3 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -75,7 +75,7 @@
{#each messages as { id, author, message, created_at, pubkey }} -- cgit v1.2.3 From 50f9c3c71a598ce10ad3191155b2cca25cfbf7b2 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 17 Feb 2023 12:32:49 -0800 Subject: animate --- src/routes/(app)/[username]/messages/+page.svelte | 38 +++++++++++++++++++---- 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index 1e0336f3..a6b7005f 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -1,8 +1,9 @@
{/if} -
+
-

{$t('payments.sendTo')}

+

{$t('payments.send')}

{address}

- + + + @@ -45,11 +49,18 @@ -
+
+ +
- {fiat ? amountConverted : amountFiatConverted} + {fiat ? amountSatsConverted : amountFiatConverted}
{/if} -
+
-

{$t('payments.send')}

+

{$t('payments.sendTo')}

{address}

- - - + @@ -49,18 +45,11 @@ let max = () => (amount = balance); -
- - +
- {fiat ? amountSatsConverted : amountFiatConverted} + {fiat ? sat(amount) : f(amountFiat, currency)}
+ -- cgit v1.2.3 From dd94f1ee35e2204a27975846a990a2fa6dc629a3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 21 Feb 2023 16:46:14 -0800 Subject: react to amount changes --- src/lib/parse.js | 0 src/routes/(app)/send/lightning/[payreq]/+page.svelte | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 src/lib/parse.js (limited to 'src') diff --git a/src/lib/parse.js b/src/lib/parse.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/routes/(app)/send/lightning/[payreq]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/+page.svelte index e9502636..01f1d1c1 100644 --- a/src/routes/(app)/send/lightning/[payreq]/+page.svelte +++ b/src/routes/(app)/send/lightning/[payreq]/+page.svelte @@ -13,10 +13,11 @@ let { alias } = data; let { currency } = data.user; - let amount = form?.amount || data.amount; let a; let maxfee = 100; + $: amount = form?.amount || data.amount; + let loading; let submit = () => (loading = true); $: update(form); -- cgit v1.2.3 From f9d76e8846c27d9eeb3959c3b77d91d9e444bcc0 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 21 Feb 2023 17:05:30 -0800 Subject: max send button --- src/components/Numpad.svelte | 30 ++++++++++++---------- .../bitcoin/[address]/[...amount]/+page.svelte | 27 +++++++++++++------ 2 files changed, 35 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte index 3647914e..47bd9375 100644 --- a/src/components/Numpad.svelte +++ b/src/components/Numpad.svelte @@ -57,7 +57,7 @@ amountFiat = amountFiat.slice(0, amountFiat.length - 1); if (amountFiat.length === 0) { amountFiat = 0; - amountSats = 0; + amount = 0; } } } else if (value !== '.' && value !== '<' && parseInt(amountFiat + value) > $selectedRate) { @@ -70,25 +70,27 @@ } else { if (value === '.') { return; - } else if (!amountSats && value !== '<' && value !== '0') { - amountSats = parseInt(value); + } else if (!amount && value !== '<' && value !== '0') { + amount = parseInt(value); } else if (value === '<') { - if (amountSats !== 0) { - amountSats = Math.floor(amountSats / 10); - if (amountSats.length === 0) { - amountSats = 0; + if (amount !== 0) { + amount = Math.floor(amount / 10); + if (amount.length === 0) { + amount = 0; amountFiat = 0; } } - } else if (value !== '<' && parseInt(amountSats + value) > sats) { + } else if (value !== '<' && parseInt(amount + value) > sats) { warning($t('user.receive.lessThan1BTCWarning')); } else { + console.log('CLICK', amount.toString(), value); amount = parseInt(amount.toString() + value); + console.log('AMOUNT', amount); } } }; - $: html = fiat ? amountFiat : s(amountSats); + $: html = fiat ? amountFiat : s(amount); let prev = ''; @@ -123,10 +125,10 @@ if (fiat) { amountFiat = html; } else { - amountSats = parseInt(html.replace(/,/g, '')); + amount = parseInt(html.replace(/,/g, '')); } - if (!amountSats) amountSats = null; + if (!amount) amount = null; setTimeout(() => { if (!fiat) { @@ -182,11 +184,11 @@ type="button" on:click={() => { if (fiat) { - amountSats = parseInt((amountFiat / ($selectedRate / sats)).toFixed(0)); + amount = parseInt((amountFiat / ($selectedRate / sats)).toFixed(0)); } else { amountFiat = - (amountSats * ($selectedRate / sats)).toFixed(2) > 0.0 - ? (amountSats * ($selectedRate / sats)).toFixed(2) + (amount * ($selectedRate / sats)).toFixed(2) > 0.0 + ? (amount * ($selectedRate / sats)).toFixed(2) : 0; } fiat = !fiat; diff --git a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte index 96d5cab7..cabe895f 100644 --- a/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte +++ b/src/routes/(app)/send/bitcoin/[address]/[...amount]/+page.svelte @@ -3,15 +3,16 @@ import { enhance } from '$app/forms'; import { Icon, Numpad, Spinner } from '$comp'; import { page } from '$app/stores'; - import { back } from '$lib/utils'; + import { back, s, sat } from '$lib/utils'; import { pin } from '$lib/store'; export let data; export let form; let { address, amount } = $page.params; - let { currency } = data.user; + let { balance, currency } = data.user; let loading, submit; + let fiat; let toggle = () => (loading = true); @@ -21,7 +22,10 @@ loading = false; }; - let max = () => (amount = balance); + let max = () => { + fiat = false; + amount = balance; + };
{/if} -
+
-

{$t('payments.sendTo')}

+

{$t('payments.send')}

{address}

- + @@ -48,11 +52,18 @@ -
+
+ +

Auth Token

This JWT authorizes you to use the API

-
export token="{token}"
-
+
{tokenSample}
+

POST /register

@@ -42,17 +52,17 @@ type: bitcoin or lightning
- amount: integer satoshis (optional) + amount: amount in satoshis
- webhook: a URL that we'll POST to when the invoice is - paid (optional) + webhook: an endpoint to hit when the invoice is paid
- secret: a secret to send with the POST (optional) + secret: a secret string for the webhook to check
+ hey

GET /invoice/:hash

@@ -123,4 +133,5 @@ + -- cgit v1.2.3 From 3651919e5a2e4783b05d8af369f0d24e279b15c8 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 1 Mar 2023 22:40:45 -0800 Subject: support form captcha --- src/routes/(app)/support/+page.server.js | 15 --------- src/routes/(app)/support/+page.svelte | 57 +++++++++++++++++++++----------- src/routes/(app)/support/+server.js | 7 ++++ 3 files changed, 44 insertions(+), 35 deletions(-) delete mode 100644 src/routes/(app)/support/+page.server.js create mode 100644 src/routes/(app)/support/+server.js (limited to 'src') diff --git a/src/routes/(app)/support/+page.server.js b/src/routes/(app)/support/+page.server.js deleted file mode 100644 index 6d0af616..00000000 --- a/src/routes/(app)/support/+page.server.js +++ /dev/null @@ -1,15 +0,0 @@ -import { fd, post } from '$lib/utils'; -import { fail } from '@sveltejs/kit'; - -export const actions = { - default: async ({ cookies, request }) => { - let form = await fd(request); - try { - await post('/email', form); - } catch (e) { - return fail(400, { error: e.message }); - } - - return { success: true }; - } -}; diff --git a/src/routes/(app)/support/+page.svelte b/src/routes/(app)/support/+page.svelte index d00cc069..8dbfc1af 100644 --- a/src/routes/(app)/support/+page.svelte +++ b/src/routes/(app)/support/+page.svelte @@ -1,10 +1,10 @@ + + + + {#if user} {/if} -{#if form?.error} -
- {form.error} -
-{/if} +
+ {#if sent} +

Thank you!

+
Someone will be in touch shortly.
-
- {#if form?.success} -

Thank you!

-

Someone will be in touch shortly.

- - - - +
{:else}

{$t('user.support.header')}

-

+

Fill out this form or email us directly at support@coinos.io and we'll do our best to get back to you in a timely manner.

- +
Date: Wed, 1 Mar 2023 22:54:28 -0800 Subject: disable prerendering --- src/routes/(app)/support/+server.js | 2 ++ src/routes/+page.server.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/routes/(app)/support/+server.js b/src/routes/(app)/support/+server.js index af5fcc66..6b1778a8 100644 --- a/src/routes/(app)/support/+server.js +++ b/src/routes/(app)/support/+server.js @@ -1,6 +1,8 @@ import { json } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; +export const prerender = false; + export async function POST({ cookies, request }) { let result = await post('/email', await request.json(), auth(cookies)); return json(result); diff --git a/src/routes/+page.server.js b/src/routes/+page.server.js index 4bcc6089..7936e88b 100644 --- a/src/routes/+page.server.js +++ b/src/routes/+page.server.js @@ -1,6 +1,6 @@ import { get } from '$lib/utils'; -export const prerender = true; +// export const prerender = true; export let load = async () => { let data = { locations: [] }; -- cgit v1.2.3 From 0c3cb465a91941531a09cd53f3e4b0b78f24784f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Fri, 3 Mar 2023 12:33:29 -0800 Subject: use div for message input --- src/app.css | 1 - .../(app)/[username]/(profile)/+layout.svelte | 1 - src/routes/(app)/[username]/dashboard/+page.svelte | 1 - src/routes/(app)/[username]/messages/+page.svelte | 36 +++++++++++++--------- .../[username]/payments/[...page]/+page.svelte | 2 +- .../(app)/launch/thanks/[asset]/+page.server.js | 1 - src/routes/(app)/send/[...text]/+page.svelte | 1 - src/routes/(app)/send/invoice/[id]/+page.server.js | 2 +- .../(app)/send/lightning/[payreq]/+page.server.js | 2 +- .../user/[username]/[...amount]/+page.server.js | 2 +- src/routes/(static)/bounties/+page.svelte | 2 +- 11 files changed, 27 insertions(+), 24 deletions(-) delete mode 100644 src/routes/(app)/launch/thanks/[asset]/+page.server.js (limited to 'src') diff --git a/src/app.css b/src/app.css index 12fad732..3a722fb1 100644 --- a/src/app.css +++ b/src/app.css @@ -35,7 +35,6 @@ button.primary { -webkit-appearance: none; -moz-appearance: none; background: transparent; - background-image: url('/icons/down.svg'); background-repeat: no-repeat; background-position-x: 95%; background-position-y: 1em; diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte index 6eb2a850..133930b1 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.svelte +++ b/src/routes/(app)/[username]/(profile)/+layout.svelte @@ -4,7 +4,6 @@ import { Icon } from '$comp'; import { t } from '$lib/translations'; import { sign, send } from '$lib/nostr'; - import { v4 } from 'uuid'; export let data; let events, user, subject, src, text; diff --git a/src/routes/(app)/[username]/dashboard/+page.svelte b/src/routes/(app)/[username]/dashboard/+page.svelte index 499034e6..d8761ea9 100644 --- a/src/routes/(app)/[username]/dashboard/+page.svelte +++ b/src/routes/(app)/[username]/dashboard/+page.svelte @@ -7,7 +7,6 @@ import { goto } from '$app/navigation'; import { t } from '$lib/translations'; import { events } from '$lib/store'; - import { v4 } from 'uuid'; export let data; $: ({ invoices, requests } = data); diff --git a/src/routes/(app)/[username]/messages/+page.svelte b/src/routes/(app)/[username]/messages/+page.svelte index 5de18c66..7a10d605 100644 --- a/src/routes/(app)/[username]/messages/+page.svelte +++ b/src/routes/(app)/[username]/messages/+page.svelte @@ -2,7 +2,7 @@ import { cubicInOut } from 'svelte/easing'; import { browser } from '$app/environment'; import { t } from '$lib/translations'; - import { format, parseISO } from 'date-fns'; + import { format } from 'date-fns'; import { scale, fade, fly } from 'svelte/transition'; import { enhance } from '$app/forms'; import { Avatar, Icon } from '$comp'; @@ -68,7 +68,6 @@ event.message = message; message = ''; - input.focus(); event.author = user; event.recipient = subject; @@ -92,9 +91,16 @@ message = ''; submitting = false; }; + + let keydown = (e) => { + if (e.key === 'Enter') { + e.preventDefault(); + submit(); + } + }; -
+
- + - - - +
diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index aacba81e..a502f8c3 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -1,7 +1,7 @@