diff --git a/packages/app/config/README.md b/packages/app/config/README.md new file mode 100644 index 00000000..16871890 --- /dev/null +++ b/packages/app/config/README.md @@ -0,0 +1 @@ +Choose config with NODE_CONFIG_ENV: `NODE_CONFIG_ENV=iris yarn start` \ No newline at end of file diff --git a/packages/app/config/default.json b/packages/app/config/default.json new file mode 100644 index 00000000..ea2f8f6b --- /dev/null +++ b/packages/app/config/default.json @@ -0,0 +1,7 @@ +{ + "appName": "Snort", + "appNameCapitalized": "Snort", + "appTitle": "Snort - Nostr", + "nip05Domain": "snort.social", + "favicon": "public/favicon.ico" +} diff --git a/packages/app/config/iris.json b/packages/app/config/iris.json new file mode 100644 index 00000000..f1c6ab75 --- /dev/null +++ b/packages/app/config/iris.json @@ -0,0 +1,7 @@ +{ + "appName": "iris", + "appNameCapitalized": "Iris", + "appTitle": "iris", + "nip05Domain": "iris.to", + "favicon": "public/iris.ico" +} diff --git a/packages/app/package.json b/packages/app/package.json index 87d953c8..32872e4d 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -88,6 +88,7 @@ "@webpack-cli/generators": "^3.0.4", "@webscopeio/react-textarea-autocomplete": "^4.9.2", "babel-loader": "^9.1.3", + "config": "^3.3.9", "copy-webpack-plugin": "^11.0.0", "css-loader": "^6.7.3", "css-minimizer-webpack-plugin": "^5.0.0", diff --git a/packages/app/public/index.html b/packages/app/public/index.html index b5a13832..6f644eb7 100644 --- a/packages/app/public/index.html +++ b/packages/app/public/index.html @@ -11,7 +11,7 @@ - Snort - Nostr + <%= htmlWebpackPlugin.options.templateParameters.appTitle %>
diff --git a/packages/app/public/iris.ico b/packages/app/public/iris.ico new file mode 100644 index 00000000..a71cea29 Binary files /dev/null and b/packages/app/public/iris.ico differ diff --git a/packages/app/src/Element/AsyncButton.tsx b/packages/app/src/Element/AsyncButton.tsx index c4118afa..180ea705 100644 --- a/packages/app/src/Element/AsyncButton.tsx +++ b/packages/app/src/Element/AsyncButton.tsx @@ -6,6 +6,7 @@ interface AsyncButtonProps extends React.ButtonHTMLAttributes disabled?: boolean; onClick(e: React.MouseEvent): Promise | void; children?: React.ReactNode; + ref?: React.Ref; } export default function AsyncButton(props: AsyncButtonProps) { @@ -28,7 +29,7 @@ export default function AsyncButton(props: AsyncButtonProps) { } return ( - - submitPin()}> - - +
{ + e.preventDefault(); + if (submitButtonRef.current) { + submitButtonRef.current.click(); + } + }} + > +
+

+ +

+ {subTitle} + setPin(e.target.value)} + value={pin} + autoFocus={true} + maxLength={20} + minLength={4} + /> + {error && {error}} +
+ + submitPin()} type="submit"> + + +
- +
); } diff --git a/packages/app/src/Element/ProxyImg.tsx b/packages/app/src/Element/ProxyImg.tsx index dc625e57..91bc6a64 100644 --- a/packages/app/src/Element/ProxyImg.tsx +++ b/packages/app/src/Element/ProxyImg.tsx @@ -1,6 +1,6 @@ import useImgProxy from "Hooks/useImgProxy"; import React, { useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { getUrlHostname } from "SnortUtils"; interface ProxyImgProps extends React.DetailedHTMLProps, HTMLImageElement> { diff --git a/packages/app/src/Element/ReBroadcaster.tsx b/packages/app/src/Element/ReBroadcaster.tsx index 48e3f436..92fa89ea 100644 --- a/packages/app/src/Element/ReBroadcaster.tsx +++ b/packages/app/src/Element/ReBroadcaster.tsx @@ -1,5 +1,5 @@ import { useContext, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { TaggedNostrEvent } from "@snort/system"; import { SnortContext } from "@snort/system-react"; diff --git a/packages/app/src/Element/Relay.tsx b/packages/app/src/Element/Relay.tsx index 0de4d288..8f145dea 100644 --- a/packages/app/src/Element/Relay.tsx +++ b/packages/app/src/Element/Relay.tsx @@ -1,6 +1,6 @@ import "./Relay.css"; import { useMemo } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useNavigate } from "react-router-dom"; import { RelaySettings } from "@snort/system"; import { unixNowMs } from "@snort/shared"; diff --git a/packages/app/src/Element/RevealMedia.tsx b/packages/app/src/Element/RevealMedia.tsx index dce6caaa..9be7c627 100644 --- a/packages/app/src/Element/RevealMedia.tsx +++ b/packages/app/src/Element/RevealMedia.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { FileExtensionRegex } from "Const"; import Reveal from "Element/Reveal"; diff --git a/packages/app/src/Element/RootTabs.tsx b/packages/app/src/Element/RootTabs.tsx index 8f709def..81f15e4d 100644 --- a/packages/app/src/Element/RootTabs.tsx +++ b/packages/app/src/Element/RootTabs.tsx @@ -2,7 +2,7 @@ import "./RootTabs.css"; import { useState, ReactNode, useEffect } from "react"; import { useLocation, useNavigate } from "react-router-dom"; import { Menu, MenuItem } from "@szhsin/react-menu"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import useLogin from "Hooks/useLogin"; import Icon from "Icons/Icon"; diff --git a/packages/app/src/Element/SuggestedProfiles.tsx b/packages/app/src/Element/SuggestedProfiles.tsx index 4680555b..6d8026be 100644 --- a/packages/app/src/Element/SuggestedProfiles.tsx +++ b/packages/app/src/Element/SuggestedProfiles.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from "react"; import { HexKey, NostrPrefix } from "@snort/system"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import FollowListBase from "Element/FollowListBase"; import PageSpinner from "Element/PageSpinner"; diff --git a/packages/app/src/Element/Timeline.tsx b/packages/app/src/Element/Timeline.tsx index 0b5c545a..10de3cd8 100644 --- a/packages/app/src/Element/Timeline.tsx +++ b/packages/app/src/Element/Timeline.tsx @@ -1,5 +1,5 @@ import "./Timeline.css"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useCallback, useMemo } from "react"; import { useInView } from "react-intersection-observer"; import { TaggedNostrEvent, EventKind, u256 } from "@snort/system"; diff --git a/packages/app/src/Element/TimelineFollows.tsx b/packages/app/src/Element/TimelineFollows.tsx index 467f3b66..f376945b 100644 --- a/packages/app/src/Element/TimelineFollows.tsx +++ b/packages/app/src/Element/TimelineFollows.tsx @@ -1,6 +1,6 @@ import "./Timeline.css"; import { ReactNode, useCallback, useContext, useMemo, useState, useSyncExternalStore } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { TaggedNostrEvent, EventKind, u256, NostrEvent, NostrLink } from "@snort/system"; import { unixNow } from "@snort/shared"; import { SnortContext } from "@snort/system-react"; diff --git a/packages/app/src/Element/ZapstrEmbed.tsx b/packages/app/src/Element/ZapstrEmbed.tsx index 184254c5..f7f41c44 100644 --- a/packages/app/src/Element/ZapstrEmbed.tsx +++ b/packages/app/src/Element/ZapstrEmbed.tsx @@ -4,7 +4,7 @@ import { NostrEvent, NostrLink } from "@snort/system"; import { ProxyImg } from "Element/ProxyImg"; import ProfileImage from "Element/ProfileImage"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; export default function ZapstrEmbed({ ev }: { ev: NostrEvent }) { const media = ev.tags.find(a => a[0] === "media"); diff --git a/packages/app/src/Login/MultiAccountStore.ts b/packages/app/src/Login/MultiAccountStore.ts index 258c6119..ff8bcb83 100644 --- a/packages/app/src/Login/MultiAccountStore.ts +++ b/packages/app/src/Login/MultiAccountStore.ts @@ -86,6 +86,7 @@ export class MultiAccountStore extends ExternalStore { }; v.extraChats ??= []; } + this.#loadIrisKeyIfExists(); } getSessions() { @@ -217,6 +218,23 @@ export class MultiAccountStore extends ExternalStore { return { ...s }; } + async #loadIrisKeyIfExists() { + try { + const irisKeyJSON = window.localStorage.getItem('iris.myKey'); + if (irisKeyJSON) { + const irisKeyObj = JSON.parse(irisKeyJSON); + if (irisKeyObj.priv) { + const privateKey = await PinEncrypted.create(irisKeyObj.priv, '1234'); + this.loginWithPrivateKey(privateKey); + window.localStorage.removeItem('iris.myKey'); + } + } + } catch (e) { + console.error("Failed to load iris key", e); + } + } + + #migrate() { let didMigrate = false; diff --git a/packages/app/src/Pages/DeckLayout.tsx b/packages/app/src/Pages/DeckLayout.tsx index 1be3bf7d..320d8ae9 100644 --- a/packages/app/src/Pages/DeckLayout.tsx +++ b/packages/app/src/Pages/DeckLayout.tsx @@ -1,7 +1,7 @@ import "./Deck.css"; import { CSSProperties, createContext, useContext, useEffect, useState } from "react"; import { Outlet, useNavigate } from "react-router-dom"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { NostrLink } from "@snort/system"; import { DeckNav } from "Element/Deck/Nav"; diff --git a/packages/app/src/Pages/DonatePage.tsx b/packages/app/src/Pages/DonatePage.tsx index 2078608b..5374fee2 100644 --- a/packages/app/src/Pages/DonatePage.tsx +++ b/packages/app/src/Pages/DonatePage.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { HexKey } from "@snort/system"; import { ApiHost, KieranPubKey, SnortPubKey } from "Const"; diff --git a/packages/app/src/Pages/ErrorPage.tsx b/packages/app/src/Pages/ErrorPage.tsx index b3fcb541..2ad1f794 100644 --- a/packages/app/src/Pages/ErrorPage.tsx +++ b/packages/app/src/Pages/ErrorPage.tsx @@ -1,6 +1,6 @@ import { db } from "Db"; import AsyncButton from "Element/AsyncButton"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useRouteError } from "react-router-dom"; const ErrorPage = () => { diff --git a/packages/app/src/Pages/HashTagsPage.tsx b/packages/app/src/Pages/HashTagsPage.tsx index 82ef1a88..39d007d7 100644 --- a/packages/app/src/Pages/HashTagsPage.tsx +++ b/packages/app/src/Pages/HashTagsPage.tsx @@ -1,6 +1,6 @@ import { useMemo } from "react"; import { useParams } from "react-router-dom"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import Timeline from "Element/Timeline"; import useEventPublisher from "Hooks/useEventPublisher"; diff --git a/packages/app/src/Pages/HelpPage.tsx b/packages/app/src/Pages/HelpPage.tsx index 793fa898..fff8cfd8 100644 --- a/packages/app/src/Pages/HelpPage.tsx +++ b/packages/app/src/Pages/HelpPage.tsx @@ -1,6 +1,6 @@ import { Link } from "react-router-dom"; import { KieranPubKey } from "Const"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { TLVEntryType, encodeTLVEntries, NostrPrefix } from "@snort/system"; import { bech32ToHex } from "SnortUtils"; diff --git a/packages/app/src/Pages/Layout.tsx b/packages/app/src/Pages/Layout.tsx index a662a73e..86845dea 100644 --- a/packages/app/src/Pages/Layout.tsx +++ b/packages/app/src/Pages/Layout.tsx @@ -209,7 +209,7 @@ function LogoHeader() { return ( -

Snort

+

{process.env.APP_NAME}

{currentSubscription && ( diff --git a/packages/app/src/Pages/LoginPage.tsx b/packages/app/src/Pages/LoginPage.tsx index c3ae3d59..09f1448b 100644 --- a/packages/app/src/Pages/LoginPage.tsx +++ b/packages/app/src/Pages/LoginPage.tsx @@ -283,7 +283,7 @@ export default function LoginPage() {

navigate("/")}> - Snort + {process.env.APP_NAME}

diff --git a/packages/app/src/Pages/NostrAddressPage.tsx b/packages/app/src/Pages/NostrAddressPage.tsx index 96c2436c..74d524c1 100644 --- a/packages/app/src/Pages/NostrAddressPage.tsx +++ b/packages/app/src/Pages/NostrAddressPage.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { ApiHost } from "Const"; import Nip5Service from "Element/Nip5Service"; diff --git a/packages/app/src/Pages/NostrLinkHandler.tsx b/packages/app/src/Pages/NostrLinkHandler.tsx index 6786b05b..99217d26 100644 --- a/packages/app/src/Pages/NostrLinkHandler.tsx +++ b/packages/app/src/Pages/NostrLinkHandler.tsx @@ -1,6 +1,6 @@ import { NostrPrefix, tryParseNostrLink } from "@snort/system"; import { useEffect, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useNavigate, useParams } from "react-router-dom"; import Spinner from "Icons/Spinner"; @@ -24,7 +24,7 @@ export default function NostrLinkHandler() { } } else { try { - const pubkey = await getNip05PubKey(`${link}@snort.social`); + const pubkey = await getNip05PubKey(`${link}@${process.env.NIP05_DOMAIN}`); if (pubkey) { navigate(profileLink(pubkey)); } diff --git a/packages/app/src/Pages/ProfilePage.tsx b/packages/app/src/Pages/ProfilePage.tsx index 99093682..d30b8f41 100644 --- a/packages/app/src/Pages/ProfilePage.tsx +++ b/packages/app/src/Pages/ProfilePage.tsx @@ -1,6 +1,6 @@ import "./ProfilePage.css"; import { useEffect, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useNavigate, useParams } from "react-router-dom"; import { encodeTLV, diff --git a/packages/app/src/Pages/Root.tsx b/packages/app/src/Pages/Root.tsx index fc488539..ddb19c42 100644 --- a/packages/app/src/Pages/Root.tsx +++ b/packages/app/src/Pages/Root.tsx @@ -1,6 +1,6 @@ import { useContext, useEffect, useState } from "react"; import { Link, Outlet, RouteObject, useParams } from "react-router-dom"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { unixNow } from "@snort/shared"; import { NostrLink } from "@snort/system"; diff --git a/packages/app/src/Pages/SettingsPage.tsx b/packages/app/src/Pages/SettingsPage.tsx index 717fede6..34d236b0 100644 --- a/packages/app/src/Pages/SettingsPage.tsx +++ b/packages/app/src/Pages/SettingsPage.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Outlet, RouteObject, useNavigate } from "react-router-dom"; import SettingsIndex from "Pages/settings/Root"; import Profile from "Pages/settings/Profile"; diff --git a/packages/app/src/Pages/new/GetVerified.tsx b/packages/app/src/Pages/new/GetVerified.tsx index 273de69e..6a3a8046 100644 --- a/packages/app/src/Pages/new/GetVerified.tsx +++ b/packages/app/src/Pages/new/GetVerified.tsx @@ -1,5 +1,5 @@ import { useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useNavigate } from "react-router-dom"; import { useUserProfile } from "@snort/system-react"; diff --git a/packages/app/src/Pages/new/NewUserFlow.tsx b/packages/app/src/Pages/new/NewUserFlow.tsx index 4c780d7e..a88e5ffc 100644 --- a/packages/app/src/Pages/new/NewUserFlow.tsx +++ b/packages/app/src/Pages/new/NewUserFlow.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useNavigate } from "react-router-dom"; import Logo from "Element/Logo"; diff --git a/packages/app/src/Pages/settings/Accounts.tsx b/packages/app/src/Pages/settings/Accounts.tsx index 1fb0a987..5d8d9cf0 100644 --- a/packages/app/src/Pages/settings/Accounts.tsx +++ b/packages/app/src/Pages/settings/Accounts.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Link } from "react-router-dom"; import ProfilePreview from "Element/ProfilePreview"; diff --git a/packages/app/src/Pages/settings/Keys.tsx b/packages/app/src/Pages/settings/Keys.tsx index f4f3f626..278e8199 100644 --- a/packages/app/src/Pages/settings/Keys.tsx +++ b/packages/app/src/Pages/settings/Keys.tsx @@ -1,5 +1,5 @@ import "./Keys.css"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { encodeTLV, NostrPrefix, PinEncrypted } from "@snort/system"; import Copy from "Element/Copy"; diff --git a/packages/app/src/Pages/settings/Moderation.tsx b/packages/app/src/Pages/settings/Moderation.tsx index c48cb92f..394c55aa 100644 --- a/packages/app/src/Pages/settings/Moderation.tsx +++ b/packages/app/src/Pages/settings/Moderation.tsx @@ -3,7 +3,7 @@ import useLogin from "Hooks/useLogin"; import { setAppData } from "Login"; import { appendDedupe } from "SnortUtils"; import { useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; export function ModerationSettings() { const login = useLogin(); diff --git a/packages/app/src/Pages/settings/Profile.tsx b/packages/app/src/Pages/settings/Profile.tsx index de6542b0..61f0969e 100644 --- a/packages/app/src/Pages/settings/Profile.tsx +++ b/packages/app/src/Pages/settings/Profile.tsx @@ -1,6 +1,6 @@ import "./Profile.css"; import { useEffect, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { useNavigate } from "react-router-dom"; import { mapEventToProfile } from "@snort/system"; import { useUserProfile } from "@snort/system-react"; diff --git a/packages/app/src/Pages/settings/RelayInfo.tsx b/packages/app/src/Pages/settings/RelayInfo.tsx index 6c5bca22..337d402f 100644 --- a/packages/app/src/Pages/settings/RelayInfo.tsx +++ b/packages/app/src/Pages/settings/RelayInfo.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import ProfilePreview from "Element/ProfilePreview"; import useRelayState from "Feed/RelayState"; import { useNavigate, useParams } from "react-router-dom"; diff --git a/packages/app/src/Pages/settings/Relays.tsx b/packages/app/src/Pages/settings/Relays.tsx index 12675895..0144838a 100644 --- a/packages/app/src/Pages/settings/Relays.tsx +++ b/packages/app/src/Pages/settings/Relays.tsx @@ -1,5 +1,5 @@ import { useMemo, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { unixNowMs } from "@snort/shared"; import { randomSample } from "SnortUtils"; diff --git a/packages/app/src/Pages/settings/Root.tsx b/packages/app/src/Pages/settings/Root.tsx index 1fcc8d4e..8edab2b8 100644 --- a/packages/app/src/Pages/settings/Root.tsx +++ b/packages/app/src/Pages/settings/Root.tsx @@ -1,6 +1,6 @@ import "./Root.css"; import { useEffect, useMemo } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Outlet, useLocation, useNavigate } from "react-router-dom"; import Icon from "Icons/Icon"; import { LoginStore, logout } from "Login"; diff --git a/packages/app/src/Pages/settings/WalletSettings.tsx b/packages/app/src/Pages/settings/WalletSettings.tsx index 26540973..ca1f107e 100644 --- a/packages/app/src/Pages/settings/WalletSettings.tsx +++ b/packages/app/src/Pages/settings/WalletSettings.tsx @@ -1,6 +1,6 @@ import "./WalletSettings.css"; import LndLogo from "lnd-logo.png"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Link, RouteObject, useNavigate } from "react-router-dom"; import BlueWallet from "Icons/BlueWallet"; diff --git a/packages/app/src/Pages/settings/handle/ListHandles.tsx b/packages/app/src/Pages/settings/handle/ListHandles.tsx index 8bef9940..7677f72f 100644 --- a/packages/app/src/Pages/settings/handle/ListHandles.tsx +++ b/packages/app/src/Pages/settings/handle/ListHandles.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Link, useNavigate } from "react-router-dom"; import { ApiHost } from "Const"; diff --git a/packages/app/src/Pages/settings/handle/index.tsx b/packages/app/src/Pages/settings/handle/index.tsx index 5a60b380..c8531da1 100644 --- a/packages/app/src/Pages/settings/handle/index.tsx +++ b/packages/app/src/Pages/settings/handle/index.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Outlet, RouteObject, useNavigate } from "react-router-dom"; import ListHandles from "./ListHandles"; diff --git a/packages/app/src/Pages/subscribe/ManageSubscription.tsx b/packages/app/src/Pages/subscribe/ManageSubscription.tsx index ea616a3c..b4b194c4 100644 --- a/packages/app/src/Pages/subscribe/ManageSubscription.tsx +++ b/packages/app/src/Pages/subscribe/ManageSubscription.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Link, useNavigate } from "react-router-dom"; import PageSpinner from "Element/PageSpinner"; diff --git a/packages/app/src/Pages/subscribe/index.tsx b/packages/app/src/Pages/subscribe/index.tsx index 58eb6020..9167956f 100644 --- a/packages/app/src/Pages/subscribe/index.tsx +++ b/packages/app/src/Pages/subscribe/index.tsx @@ -1,7 +1,7 @@ import "./index.css"; import { useState } from "react"; -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { RouteObject } from "react-router-dom"; import { formatShort } from "Number"; diff --git a/packages/app/src/Tasks/DonateTask.tsx b/packages/app/src/Tasks/DonateTask.tsx index 0d1b8518..f6cbebe4 100644 --- a/packages/app/src/Tasks/DonateTask.tsx +++ b/packages/app/src/Tasks/DonateTask.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Link } from "react-router-dom"; import { BaseUITask } from "Tasks"; diff --git a/packages/app/src/Tasks/Nip5Task.tsx b/packages/app/src/Tasks/Nip5Task.tsx index 9087dd69..2b5cfcf8 100644 --- a/packages/app/src/Tasks/Nip5Task.tsx +++ b/packages/app/src/Tasks/Nip5Task.tsx @@ -1,4 +1,4 @@ -import { FormattedMessage } from "react-intl"; +import FormattedMessage from "Element/FormattedMessage"; import { Link } from "react-router-dom"; import { MetadataCache } from "@snort/system"; import { BaseUITask } from "Tasks"; diff --git a/packages/app/webpack.config.js b/packages/app/webpack.config.js index d002edba..7bdfc769 100644 --- a/packages/app/webpack.config.js +++ b/packages/app/webpack.config.js @@ -9,6 +9,8 @@ const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); const CopyPlugin = require("copy-webpack-plugin"); const WorkboxPlugin = require("workbox-webpack-plugin"); const IntlTsTransformer = require("@formatjs/ts-transformer"); +const { DefinePlugin } = require('webpack'); +const appConfig = require('config'); const isProduction = process.env.NODE_ENV == "production"; @@ -47,8 +49,11 @@ const config = { }), new HtmlWebpackPlugin({ template: "public/index.html", - favicon: "public/favicon.ico", + favicon: appConfig.get('favicon'), excludeChunks: ["pow", "bench"], + templateParameters: { + appTitle: appConfig.get('appTitle'), + }, }), new HtmlWebpackPlugin({ filename: "bench.html", @@ -69,6 +74,11 @@ const config = { swSrc: "./src/service-worker.ts", }) : false, + new DefinePlugin({ + "process.env.APP_NAME": JSON.stringify(appConfig.get('appName')), + "process.env.APP_NAME_CAPITALIZED": JSON.stringify(appConfig.get('appNameCapitalized')), + "process.env.NIP05_DOMAIN": JSON.stringify(appConfig.get('nip05Domain')), + }), ], module: { rules: [ diff --git a/yarn.lock b/yarn.lock index 5c7a35d6..4cb9d1b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2709,6 +2709,7 @@ __metadata: "@webpack-cli/generators": ^3.0.4 "@webscopeio/react-textarea-autocomplete": ^4.9.2 babel-loader: ^9.1.3 + config: ^3.3.9 copy-webpack-plugin: ^11.0.0 css-loader: ^6.7.3 css-minimizer-webpack-plugin: ^5.0.0 @@ -5330,6 +5331,15 @@ __metadata: languageName: node linkType: hard +"config@npm:^3.3.9": + version: 3.3.9 + resolution: "config@npm:3.3.9" + dependencies: + json5: ^2.2.3 + checksum: 2c29e40be22274462769670a4b69fcbcad2d3049eb15030073e410d32c892ef29e0c879a3d68ef92ddd572c516e4f65a11bb6458f680a44ceb0f051bcd3d97ff + languageName: node + linkType: hard + "connect-history-api-fallback@npm:^2.0.0": version: 2.0.0 resolution: "connect-history-api-fallback@npm:2.0.0"