Open25

フロントエンド開発で調べたこと

RyoKubozonoRyoKubozono

https://next-auth.js.org/providers/email

https://craftingemails.com/blog/nextauth-signin-custom-email

https://github.com/nextauthjs/next-auth/discussions/1293#discussioncomment-1194206

  • async sendVerificationRequestとする(たぶんこっちが重要)
  • 関数を分けずにsendVerificationRequestの中で直接transporter.sendMailをcallする(関係ないかも)
    EmailProvider({
      server: {
        host: process.env.HOST,
        port: process.env.PORT,
        secure: true,
        auth: {
          user: process.env.USER,
          pass: process.env.PASS,
        },
      },
      from: process.env.FROM,
      async sendVerificationRequest({
        identifier: email,
        url,
        provider: { server, from },
      }) {
        const { host } = new URL(url);
        const transporter = createTransport(server);
        const result = await transporter.sendMail({
          to: email,
          from: from,
          subject: 'title',
          text: text({ url, host }),
          html: html({ url, host }),
        })
        const failed = result.rejected.concat(result.pending).filter(Boolean)
        if (failed.length) {
          throw new Error(`Email(s) (${failed.join(", ")}) could not be sent`)
        }
      },
    }),
RyoKubozonoRyoKubozono
  • これは役に立った。edgeがなくて、experimental-edgeなのが気になった。
  • n=2にすると生成結果が混ざるのか?なんか文字の並びがカオスになるので、とりあえず1でやる。

Building a GPT-3 app with Next.js and Vercel Edge Functions – Vercel

  • SSEがnextでコンパイルエラー。webpackでts-loaderを設定すると通るらしいけど、できなかったので諦め。

Streaming GPT-3 Responses with Elixir and LiveView

https://github.com/transitive-bullshit/chatgpt-api

  • 読んでない
RyoKubozonoRyoKubozono

これベースにした
https://dev.classmethod.jp/articles/aws-cdk-101-typescript/

権限設定:https://zenn.dev/yamatatsu/books/aws-cdk-documentation-jp/viewer/12-concepts-permissions

非同期で呼びたいなら:https://qiita.com/suetake/items/3fc945a380af65ecf82d

V3でjson変換:https://dev.classmethod.jp/articles/js-dynamodb-json-marshall-unmarshall/

  • dynamoの書き込みをloopの中に書くとキューいんぐ?されて次リクエスト時点まで待機される。みたいな。結構ハマって辛い。
  • 非同期にすると、apigatewayのプロキシインテグレートをfalseにしないと 500が返ってきて、それを自力で設定しようとすると、bodyが渡せなくて辛い。lambda call lambda したほうが簡単。
RyoKubozonoRyoKubozono

ブロックeditorとdeepLの拡張機能が干渉する問題を回避する。
発火するタイミングはediorを含むコンポーネントが再描画されるタイミングにする。

  // 副作用があるためdeepl-inline-translate拡張機能を削除する
  useEffect(() => {
    if (typeof document !== 'undefined') {
      document.querySelector("deepl-inline-translate")?.remove();
      var elements = document.getElementsByTagName('deepl-inline-translate')
      while (elements.length) {
        elements.item(0)?.remove()
      }
    }
  }, [editorJS.current, editorData])
RyoKubozonoRyoKubozono

stripeのtransactionとtypeについて

https://www.prisma.io/docs/concepts/components/prisma-client/transactions

Interactive transactions are available in the following versions of Prisma:
Interactive transactions are generally available from version 4.7.0.

type: https://github.com/prisma/prisma/issues/10880

import {Prisma } from '@prisma/client';

function sample(tx: Prisma.TransactionClient)

https://github.com/prisma/prisma/issues/13713
txの中でforを使うとエラーが発生する