All streams
Search
Write a publication
Pull to refresh
4
0
Константин Брызгалин @constb

Backend, Node, NestJS

Send message

у конструктора GraphQLError используется параметр extensions. в одном проекте используем такую обёртку:


class GqlError extends GraphQLError {
    constructor(params) {
        if (!params) {
            throw new Error('Cant construct GqlError without params')
        }
        const { message, code, context = {} } = params
        super(message, null, null, null, null, null, { code, context, errorId: uuid() })
    }
}

Остальные классы ошибок наследуются от этого, и там уже конструкторы принимают свои параметры и заворачивают всё как нужно в контекст… вроде до клиента всё долетает…

Добавить кастомные поля к объекту ошибки не получится

кидать GraphQLError не пробовали? в сочетании с formatError вполне работает. пакет – самый обычный ванильный graphql из npm.

а потом в итоге раз – и дубляж… :( несколько лет смотрю сериалы на английском и каждый раз, сталкиваясь с дубляжом, расстраиваюсь от того, насколько всё-таки отличается результат от оригинала – теряется игра актёров, теряются даже не нюансы, целиком теряется немалая часть истории. и это ещё если перевод хорош! из-за того, что в русском фразы немного длиннее, а реплики «дублёры» читают помедленнее (для тупых что ли?) – без преувеличения, мне попадались экземпляры, где треть слов/предложений из оригинала просто выкинули как будто их и не было. а потом мне рассказывают что мол вот тот-то сериал ну такое занудное фуфло – ну в таком переводе-то конечно!…

настройка ipv6 на aws возможна, но кнопки «вкл» для этого нет :)


во-первых, ipv6 надо добавить в виртуальную сеть (vpc), в которой размещена машинка.


а) открываем отдельную консоль VPC (сверху services -> network and management -> vpc), потом б) идём в Your VPCs, выбираем свою сеть и нажимаем Actions -> Edit CIDRs. скорее всего там будет ipv4-сеть и для ipv6 будет 1 remaining рядом с кнопкой Add. в) жмём Add и получаем сеть /56


в этом месте думаем о том что ipv6-адреса у машинок всегда фиксированные и всегда публичные – то есть если на машинке есть что-то чувствительное и нет фаервола – через ipv6 туда смогут ходить все желающие…


после того как сетка выделена на сеть, её нужно раскидать на подсетки по AZ, идём в Subnets – тут можно «обработать» все subnets или только те, в которых запущены машинки (если лень :) ). так что г) выбираем subnet и жмём actions -> edit ipv6 cidrs. скорее всего там тоже будет 1 remaining. нажимаем Add – указываем числовой префикс (например 00) и получаем /64 на конкретный subnet. д) опять выбираем этот subnet и жмём actions -> modify auto-assign ip settings. там ставим галку чтобы автоматом назначать ipv6 всем новым машинкам, этот пункт опционален. теперь надо поставить ipv6 на маршрутизацию в интернет – е) выбираем слева route tables, выбираем табличку для своей vps и жмём actions -> edit routes, там жмём add route и указываем ::/0 в destination и в target копируем igw тот же что для ipv4-маршрута.


на этом настройка vpc закончилась, но уже запущенная машинка стоит без ipv6-адреса. ж) возвращаемся в ec2-консоль, выбираем машинку и жмём actions -> networking -> manage ip addresses. там в блоке ipv6 addresses нажимаем assign new ip и в поле оставляем auto-assign. нажимаем yes, update, закрываем диалог и – квест завершён! всем спасибо за внимание :)

добавлю насчёт амазона, что назначение elastic ip здесь несколько излишне – амазон будет брать за него деньги если машинку остановить, не освободив адрес. автоназначенные IP ничем не хуже, только амазон сразу заберёт его обратно если машинку остановить (ребут не считается остановкой) – и не будет брать денег… так что мой совет на 2.1.2 оставить настройки по умолчанию и полностью пропустить 2.2…


второй совет – полученный айпишник сразу проверить на телеграмовском боте @rknblockbot – хоть подсети амазона и разблокировали, отдельных айпишников в блоке осталось огромное множество, и время от времени они пользователям выпадают. если айпишник был автоназначен – достаточно остановить и снова запустить машинку. если используется elastic ip – его надо release-нуть и выделить заново…


третий совет – история показывает, что амазон могут заблокировать целиком или частично в любой момент, и особенно подвержены блокировкам как раз регионы, которые удобны для размещения VPN пользователей из России – Лондон и Франкфурт. кроме того часто влетают в блок адреса из стандартного региона – Северной Вирджинии и почему-то Огайо. я бы вообще не пользовался для VPN амазоном – для него подойдёт любой самый дешёвый KVM. можно подобрать на lowendbox.com любой в Европе с достаточно большим лимитом на трафик – и настроить его точно таким же образом…

ещё мне показалось незаслуженно пропущена тема ingress-контроллеров. прописать в реакт-приложение айпишник с портом – это как-то чересчур лихо (а корс-заголовки там отдаются?). знаю по опыту, найдётся не один человек, который, прочитав статью, скопипастит подобное в продакшен, и в таком виде оно и будет работать, пока что-нибудь не слетит…

вопрос из серии «когда начнётся внедрение IPv6». всё зависит от разработчиков… те, кто хочет, могут внедрить его у себя уже сейчас – CaddyServer содержит экспериментальную реализацию протокола… так, в целом, и HTTP/2 не сказать чтобы особо широко поддерживался. те, кто знает что это такое, и кто имеет возможность обновить ПО, или кто держит сайт за CDN-ами – у тех он есть. а есть и такие, кому не мешало бы хотя бы HTTPS добавить, но они не торопятся, всё устраивает и так…

а меня удивило упоминание о том, что полиция отказалась расследовать кражу, даже заявление у него не приняли. причём автора спрашивали в твиттере, передавал ли он записи, сделанные «волшебной коробочкой», в полицию, и насколько я помню, несмотря на то что там и лица и координаты домов воров есть, ничем это не закончилось, никого не арестовали, не оштрафовали, не посадили – просто поразительный пофигизм со стороны стражей порядка… мне кажется тут и кроется причина того, что кража посылок – настолько обыденная вещь…

Странно что никто ещё не упомянул Apollo Server – вполне себе самодостаточная штука для написания headless-бэкенда. Если его укомплектовать, например, React + React Apollo – получается нормальное SPA, а если докинуть Next.js или Gatsby – статический сайт с SEO и прочим. Городить огород с шаблонами и jquery-плагинами уже становится как-то и не нужно… Можно и альтернативами воспользоваться из мира ангуляра или vue.js – сам протокол-то достаточно универсален.


Это конечно не MVC, вообще написание кода как коллекции резолверов, больших и маленьких, требует иной структуры проекта, другого подхода к выборкам данных, да и их хранению тоже. Кэшировать компоненты при SSR в Next.js тоже получается не всегда тривиально, интересная задача…

можно и так, но – сквида с авторизацией поднимать дольше и сложнее чем реверс на nginx сделать…


лично я бы просто поднял tcp-тоннель с помощью socat, а на сервере прописал адрес тоннеля в /etc/hosts для api.telegram.org, тогда и с сертификатами не пришлось бы ничего городить. а уж научить systemd поднимать socat на автозапуске – вообще ничего не стоит…

Насколько я помню, в период ковровых блокировок servers.com тоже прилично прилетало…

все-таки бот и клиент телеграма – это разные вещи, я сомневаюсь что клиент работает http-запросами на api, скорее всего у него свой бинарный протокол и другие сервера. так что боту socks/mtproxy не нужны, достаточно обычного http reverse proxy, что автор и проделал…


другое дело что решение какое-то однобокое. если бот не должен получать сообщения или сообщения вытягиваются поллингом – вопросов нет, а иначе как будет вебхук работать – там же сам телеграм инициирует отправку нотификаций на адрес бота. нужен либо ещё один реверс от телеграма к боту, либо может проще бота развернуть где-то отдельно от основного сервиса? тогда и проксировать ничего не придётся… а данные можно боту скармливать уже с основного сервиса по http...

Ну, кто-то мог бы предложить радикальный вариант — заDDoS'ть их сайт и сервисы

по мне так было бы логичнее если бы РосКомНадзор вспомнил о том, зачем он вообще существует, и отправил в блокировку сервера AppSee…

Технически вам никто не запрещает это делать, и это будет нормально работать. Практически – если вы задаёте такие вопросы, возможно вам стоит ограничиться тем стеком, который вам хорошо знаком – быстрее выйдете в продакшен, меньше будет багов и непредсказуемых сюрпризов в неожиданных местах. У AWS/Azure/GCP есть и вполне надёжно работают все привычные вещи вроде mysql, pg, redis, elasticsearch. Хорошо обслуживаются самой компанией, бэкапы, кластеризация – всё делается в несколько кликов, стоят разумных денег. А свяжетесь с незнакомой штукенцией – потратите время и силы, которые не факт что окупятся…

Но Amazon DynamoDB не является глобально-распределенной

Global Tables вышли в GA ещё прошлой осенью. Но собственно с DynamoDB Streams этот функционал и раньше вполне можно было самому реализовать, просто велосипеды не всем охота строить, я это понимаю…

зато шифрует сам телеграм

впрочем если речь идёт про VPS, то достаточно со своей машины подключиться туда по ssh с параметром, например -D 12345, и безо всяких дополнительных телодвижений пользоваться socks-прокси на localhost:12345 без регистрации и смс… для запуска в фоне добавить nohup, -N и & в начало, серёдку и в конец соответственно…
С Дурова сталось бы потроллить РКН, нагенерировав им пару петабайт ключей. «Вы просили – мы передали, что теперь с ними делать – ваша проблема…», «Не ключи не подходят, а вы неправильно декодируете», «Наверное часть ключей мы могли пропустить, не беда – вот вам ещё петабайт, теперь точно все…» :)
если вы на маке, то Leaf отображает rss в три колонки. умеет использовать feedly в качестве источника данных.

разве? был уверен что aws lambda работает на докер-контейнерах чуть менее чем полностью…

это вроде совсем из другой области штука. учитывая нашу специфику (веб- и мобильная разработка), мы скорее с интересом смотрим в сторону AWS AppSync и AWS Amplify, а также с нетерпением ждём релиза AWS Serverless Aurora конечно же…

Information

Rating
Does not participate
Location
Анталья, Турция
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead