diff --git a/.github/workflows/test-lint.yaml b/.github/workflows/test-lint.yaml
index bc3a2cf9..352a0a41 100644
--- a/.github/workflows/test-lint.yaml
+++ b/.github/workflows/test-lint.yaml
@@ -11,7 +11,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v3
with:
- node-version: 19
+ node-version: 16
- name: Install Dependencies
run: yarn install
- name: Build packages
diff --git a/packages/app/package.json b/packages/app/package.json
index 051b63d1..d9e1eb3a 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -36,6 +36,7 @@
"throttle-debounce": "^5.0.0",
"unist-util-visit": "^4.1.2",
"use-long-press": "^2.0.3",
+ "uuid": "^9.0.0",
"workbox-background-sync": "^6.4.2",
"workbox-broadcast-update": "^6.4.2",
"workbox-cacheable-response": "^6.4.2",
@@ -84,6 +85,7 @@
"@types/node": "^18.11.18",
"@types/react": "^18.0.26",
"@types/react-dom": "^18.0.10",
+ "@types/uuid": "^9.0.0",
"@types/webscopeio__react-textarea-autocomplete": "^4.7.2",
"@types/webtorrent": "^0.109.3",
"@webscopeio/react-textarea-autocomplete": "^4.9.2",
diff --git a/packages/app/src/Element/Nip5Service.tsx b/packages/app/src/Element/Nip5Service.tsx
index 4106d944..20962783 100644
--- a/packages/app/src/Element/Nip5Service.tsx
+++ b/packages/app/src/Element/Nip5Service.tsx
@@ -21,6 +21,7 @@ import { useUserProfile } from "Hooks/useUserProfile";
import useEventPublisher from "Feed/EventPublisher";
import { debounce } from "Util";
import useLogin from "Hooks/useLogin";
+import SnortServiceProvider from "Nip05/SnortServiceProvider";
import messages from "./messages";
@@ -31,6 +32,7 @@ type Nip05ServiceProps = {
link: string;
supportLink: string;
helpText?: boolean;
+ forSubscription?: string;
onChange?(h: string): void;
onSuccess?(h: string): void;
};
@@ -188,6 +190,22 @@ export default function Nip5Service(props: Nip05ServiceProps) {
}
}
+ async function claimForSubscription(handle: string, domain: string, sub: string) {
+ if (!pubkey || !publisher) {
+ return;
+ }
+
+ const svcEx = new SnortServiceProvider(publisher, props.service);
+ const rsp = await svcEx.registerForSubscription(handle, domain, sub);
+ if ("error" in rsp) {
+ setError(rsp);
+ } else {
+ if (props.onSuccess) {
+ const nip05 = `${handle}@${domain}`;
+ props.onSuccess(nip05);
+ }
+ }
+ }
async function updateProfile(handle: string, domain: string) {
if (user && publisher) {
const nip05 = `${handle}@${domain}`;
@@ -245,16 +263,27 @@ export default function Nip5Service(props: Nip05ServiceProps) {
)}
{availabilityResponse?.available && !registerStatus && (
-
-
-
- {availabilityResponse.quote?.data.type}
-
-
startBuy(handle, domain)}>
-
+ {!props.forSubscription && (
+
+
+
+ {availabilityResponse.quote?.data.type}
+
+ )}
+
+ props.forSubscription
+ ? claimForSubscription(handle, domain, props.forSubscription)
+ : startBuy(handle, domain)
+ }>
+ {props.forSubscription ? (
+
+ ) : (
+
+ )}
)}
diff --git a/packages/app/src/Element/NoteCreator.tsx b/packages/app/src/Element/NoteCreator.tsx
index a89c4f47..0c4b1753 100644
--- a/packages/app/src/Element/NoteCreator.tsx
+++ b/packages/app/src/Element/NoteCreator.tsx
@@ -52,8 +52,19 @@ export function NoteCreator() {
const { formatMessage } = useIntl();
const publisher = useEventPublisher();
const uploader = useFileUpload();
- const { note, zapForward, sensitive, pollOptions, replyTo, otherEvents, preview, active, show, showAdvanced, error } =
- useSelector((s: RootState) => s.noteCreator);
+ const {
+ note,
+ zapForward,
+ sensitive,
+ pollOptions,
+ replyTo,
+ otherEvents,
+ preview,
+ active,
+ show,
+ showAdvanced,
+ error,
+ } = useSelector((s: RootState) => s.noteCreator);
const [uploadInProgress, setUploadInProgress] = useState(false);
const dispatch = useDispatch();
diff --git a/packages/app/src/Login/Preferences.ts b/packages/app/src/Login/Preferences.ts
index 774817e9..005714d1 100644
--- a/packages/app/src/Login/Preferences.ts
+++ b/packages/app/src/Login/Preferences.ts
@@ -74,7 +74,6 @@ export interface UserPreferences {
}
export const DefaultPreferences = {
- language: "en",
enableReactions: true,
reactionEmoji: "+",
autoLoadMedia: "follows-only",
diff --git a/packages/app/src/Nip05/SnortServiceProvider.ts b/packages/app/src/Nip05/SnortServiceProvider.ts
index 4fcc6d36..c4d58a1d 100644
--- a/packages/app/src/Nip05/SnortServiceProvider.ts
+++ b/packages/app/src/Nip05/SnortServiceProvider.ts
@@ -42,6 +42,15 @@ export default class SnortServiceProvider extends ServiceProvider {
return this.getJsonAuthd