oportunistic linting stuff

This commit is contained in:
counterweight 2025-03-14 16:24:53 +01:00
parent 983c9644bf
commit 4c28cebdce
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
6 changed files with 143 additions and 113 deletions

1
.eslintignore Normal file
View file

@ -0,0 +1 @@
public/javascript/*

View file

@ -1,7 +1,5 @@
'use strict'; 'use strict';
const { query } = require('express');
module.exports = { module.exports = {
up: (queryInterface, Sequelize) => { up: (queryInterface, Sequelize) => {
return queryInterface.sequelize.transaction((t) => { return queryInterface.sequelize.transaction((t) => {

View file

@ -3,106 +3,146 @@ module.exports = {
up: (queryInterface, Sequelize) => { up: (queryInterface, Sequelize) => {
return queryInterface.sequelize.transaction((t) => { return queryInterface.sequelize.transaction((t) => {
return Promise.all([ return Promise.all([
queryInterface.addConstraint('login_challenge_created', { queryInterface.addConstraint(
fields: ['nostr_challenge_uuid'], 'login_challenge_created',
type: 'foreign key', {
references: { fields: ['nostr_challenge_uuid'],
table: 'nostr_challenge_created', type: 'foreign key',
field: 'uuid', references: {
table: 'nostr_challenge_created',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('nostr_challenge_completed', { 'nostr_challenge_completed',
fields: ['challenge'], {
type: 'foreign key', fields: ['challenge'],
references: { type: 'foreign key',
table: 'nostr_challenge_created', references: {
field: 'challenge', table: 'nostr_challenge_created',
field: 'challenge',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('login_challenge_completed', { 'login_challenge_completed',
fields: ['nostr_challenge_completed_uuid'], {
type: 'foreign key', fields: ['nostr_challenge_completed_uuid'],
references: { type: 'foreign key',
table: 'nostr_challenge_completed', references: {
field: 'uuid', table: 'nostr_challenge_completed',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('offer_deleted', { 'offer_deleted',
fields: ['offer_uuid'], {
type: 'foreign key', fields: ['offer_uuid'],
references: { type: 'foreign key',
table: 'offer_created', references: {
field: 'uuid', table: 'offer_created',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('offer_details_set', { 'offer_details_set',
fields: ['offer_uuid'], {
type: 'foreign key', fields: ['offer_uuid'],
references: { type: 'foreign key',
table: 'offer_created', references: {
field: 'uuid', table: 'offer_created',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('session_related_to_public_key', { 'session_related_to_public_key',
fields: ['session_uuid'], {
type: 'foreign key', fields: ['session_uuid'],
references: { type: 'foreign key',
table: 'session_created', references: {
field: 'uuid', table: 'session_created',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('sign_up_challenge_created', { 'sign_up_challenge_created',
fields: ['nostr_challenge_uuid'], {
type: 'foreign key', fields: ['nostr_challenge_uuid'],
references: { type: 'foreign key',
table: 'nostr_challenge_created', references: {
field: 'uuid', table: 'nostr_challenge_created',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('sign_up_challenge_created', { 'sign_up_challenge_created',
fields: ['app_invite_uuid'], {
type: 'foreign key', fields: ['app_invite_uuid'],
references: { type: 'foreign key',
table: 'app_invite_created', references: {
field: 'uuid', table: 'app_invite_created',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('sign_up_challenge_completed', { 'sign_up_challenge_completed',
fields: ['nostr_challenge_completed_uuid'], {
type: 'foreign key', fields: ['nostr_challenge_completed_uuid'],
references: { type: 'foreign key',
table: 'nostr_challenge_completed', references: {
field: 'uuid', table: 'nostr_challenge_completed',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}), queryInterface.addConstraint(
queryInterface.addConstraint('sign_up_challenge_completed', { 'sign_up_challenge_completed',
fields: ['app_invite_uuid'], {
type: 'foreign key', fields: ['app_invite_uuid'],
references: { type: 'foreign key',
table: 'app_invite_created', references: {
field: 'uuid', table: 'app_invite_created',
field: 'uuid',
},
onDelete: 'cascade',
onUpdate: 'cascade',
}, },
onDelete: 'cascade', { transaction: t }
onUpdate: 'cascade', ),
}),
]); ]);
}); });
}, },

View file

@ -5,7 +5,6 @@ const NostrSignupButton = require('../components/NostrSignupButton');
const warningsContainer = document.getElementById('warnings-container'); const warningsContainer = document.getElementById('warnings-container');
const nostrSignupArea = document.getElementById('nostr-signup-area'); const nostrSignupArea = document.getElementById('nostr-signup-area');
const noExtensionNudges = document.getElementById('no-extension-nudges');
const signUpSuccessNotification = document.getElementById('sign-up-success'); const signUpSuccessNotification = document.getElementById('sign-up-success');
class WarningDiv { class WarningDiv {
@ -120,8 +119,13 @@ const invitesFunction = () => {
} }
async function acceptInvite() { async function acceptInvite() {
const verifyResponse = const verifyResponse = await signupService.requestAndRespondSignUpChallenge(
await signupService.requestAndRespondSignUpChallenge(); {
onNostrErrorCallback: () => {
rejectedNostrWarning.display();
},
}
);
if (verifyResponse.ok) { if (verifyResponse.ok) {
showConfirmationAndRedirect(); showConfirmationAndRedirect();

View file

@ -1,4 +1,4 @@
const requestAndRespondSignUpChallenge = async () => { const requestAndRespondSignUpChallenge = async ({ onNostrErrorCallback }) => {
let challengeResponse; let challengeResponse;
try { try {
challengeResponse = await fetch('/api/signup/nostr-challenge', { challengeResponse = await fetch('/api/signup/nostr-challenge', {
@ -18,7 +18,7 @@ const requestAndRespondSignUpChallenge = async () => {
try { try {
pubkey = await window.nostr.getPublicKey(); pubkey = await window.nostr.getPublicKey();
} catch (error) { } catch (error) {
document.querySelector('#rejected-nostr-nudges').style.display = 'block'; onNostrErrorCallback();
return; return;
} }
const event = { const event = {
@ -33,7 +33,7 @@ const requestAndRespondSignUpChallenge = async () => {
try { try {
signedEvent = await window.nostr.signEvent(event); signedEvent = await window.nostr.signEvent(event);
} catch (error) { } catch (error) {
document.querySelector('#rejected-nostr-nudges').style.display = 'block'; onNostrErrorCallback();
return; return;
} }

View file

@ -21,21 +21,8 @@
/> />
</figure> </figure>
<p>Usa tu extensión de Nostr para darte de alta:</p> <p>Usa tu extensión de Nostr para darte de alta:</p>
<div id="nostr-signup-area"> <div id="nostr-signup-area"></div>
</div> <div id="warnings-container"></div>
<div id="warnings-container">
<div
id="rejected-nostr-nudges"
class="card-secondary"
style="display: none"
>
<p>
Ups, parece que no has aceptado que usemos tus claves. Si te has
equivocado, puedes intentarlo de nuevo.
</p>
</div>
</div>
<div id="sign-up-success" class="top-notification-good"> <div id="sign-up-success" class="top-notification-good">
<img src="/img/circle-check-white.svg" /> <img src="/img/circle-check-white.svg" />
<p> <p>