4S と外部連携
8 のサービス・41 本の呼び出し(読む 29 本・書く 12 本)
BOUNTY が自分から呼んでいる外のサービスの一覧。ログインと参加登録は 4S、通知はプッシュとメールの各サービス、画像の保存や計測はそれぞれのサービスを使っている。
一覧は呼び出しの宣言から作っていて、宣言に無い呼び出しはテストで落ちる。だから、この頁は今の実装と一致している。
- 4S: 31 本(読む 25・書く 6)本人の 4S ログイン・認証なし
- Firebase Cloud Messaging: 1 本(読む 0・書く 1)サービスアカウント
- Web Push: 1 本(読む 0・書く 1)証明書・鍵
- Vercel Blob: 3 本(読む 1・書く 2)共有トークン
- Upstash Redis: 1 本(読む 0・書く 1)共有トークン
- PostHog: 1 本(読む 0・書く 1)API キー
- 法人番号 API: 2 本(読む 2・書く 0)API キー
- 公開 Web: 1 本(読む 1・書く 0)認証なし
図の読み方: 真ん中が BOUNTY、まわりがつないでいるサービス。BOUNTY へ向かう矢印は「読む」(BOUNTY が情報を受け取る)、サービスへ向かう矢印は「書く」(BOUNTY が送る・変える)、両方の矢印は両方。線の上の札は、使う認証の種類の印と呼び出しの本数。下のボタンを押すと、そのサービスの節へ移る。
各行は一つの呼び出し。左の札は HTTP のメソッド(濃い札は書き込み)、題は呼ぶ経路、その下は何のために呼ぶか、使う認証、いつ呼ぶか(本人の操作・運営の操作・定期の処理)、BOUNTY が読む項目。
4S
4S Inc. ログイン・参加登録・チケット・リファラルの正本仕様を開く4S はログイン・本人のプロフィール・参加登録・チケット・リファラルの正本。BOUNTY は利用者本人の 4S のログインで読み、運営の画面では運営本人の権限でイベントの参加者を読む。
向き: BOUNTY が読む呼び出しと、BOUNTY から送る・変える呼び出しの両方がある(読む 25 本・書く 6 本)。
失敗したとき: 4S に届かないとログインはできない。運営の権限は 4S で定期的に確かめ直していて、届かない状態が猶予を過ぎて続くと運営の操作を断る。参加者の取り込みは 4S の全部のページを読めたときだけ反映し、途中で失敗したら何も変えない。アプリの中の参加登録で応答が分からなかったときは、登録できたと決めつけない。
4S との主なやり取りを三つの図にした。図の左から右へ、本人(または運営)、BOUNTY、4S。上から順に起きる。
4S でログイン(OAuth + PKCE)
- 参加者 → BOUNTY: ログイン
- 参加者 → 4S: GET /oauth/authorize
- 4S → BOUNTY: 認可コード
- BOUNTY → 4S: POST /oauth/token
- BOUNTY → 4S: GET /.well-known/jwks.json
- BOUNTY → 4S: GET /users/me
- BOUNTY: 本人を迎える
4S のアカウントでログインする流れ。本人は 4S の画面でログインし、BOUNTY は受け取った認可コードをトークンに換え、署名を確かめてから本人のプロフィールを読み、BOUNTY の利用者として迎える。
メールのコードでログイン
- 参加者 → BOUNTY: メールアドレス
- BOUNTY → 4S: POST /auth/email/request
- 4S → 参加者: コードのメール
- 参加者 → BOUNTY: コード
- BOUNTY → 4S: POST /auth/email/verify
- BOUNTY → 4S: GET /oauth/authorize-info
- BOUNTY → 4S: POST /oauth/authorize/approve
- BOUNTY → 4S: POST /oauth/token
メールに届くコードでログインする流れ。BOUNTY が 4S にコードの送信を頼み、本人が入力したコードを 4S で確かめてから、4S のログインと同じトークンを受け取る。
参加登録と受付
- BOUNTY → 4S: 参加登録を全部読んで参加者をそろえる
- BOUNTY: 参加者をそろえる
- 運営 → BOUNTY: QR・NFC を読む
- BOUNTY → 4S: 受付で読んだ QR の参加登録を名前で引く
- BOUNTY → 4S: 受付で読んだ QR の参加登録を引く
- BOUNTY → 4S: 受付の NFC でチェックインする
- BOUNTY → 4S: 受付の前後で参加登録を読み直す
参加登録と会場の受付の流れ。BOUNTY は定期的に 4S の参加登録を読んで参加者をそろえる。会場で運営が QR を読むと 4S でその人の参加登録を引き、NFC で受付すると 4S にチェックインを書き、その前後で参加登録を読み直す。
ログイン
- GET
/oauth/authorize4S のログイン画面へ送る本人の 4S ログイン本人の操作 - GET
/ja/auth/loginApple でのログインを選べる入口へ送る本人の 4S ログイン本人の操作 - POST
/oauth/token認可コードをトークンに換える本人の 4S ログイン本人の操作access_token · refresh_token · id_token · expires_in - POST
/oauth/token期限の切れたトークンを更新する本人の 4S ログイン本人の操作access_token · refresh_token · expires_in - GET
/.well-known/jwks.jsonID トークンの署名を確かめる認証なし本人の操作keys - GET
/config使えるログイン方法を知る認証なし本人の操作APPLE_SIGNIN_ENABLED - POST
/auth/email/requestメールにログインのコードを送る認証なし本人の操作challengeId · expiresIn - POST
/auth/email/verifyメールのコードを確かめる認証なし本人の操作accessToken · expiresIn - GET
/oauth/authorize-infoメールログインの許可画面の中身を読む本人の 4S ログイン本人の操作client.id · client.name · client.description - POST
/oauth/authorize/approveメールログインで BOUNTY を許可する本人の 4S ログイン本人の操作redirectUrl
自分
- GET
/users/me本人のプロフィールと One QR の材料を読む本人の 4S ログイン本人の操作ログインQR参加登録id · slug · firstName · lastName · nativeName · title · bio · avatarUrl · email · checkinToken · organizationMembers - PUT
/users/me本人が選んだときだけプロフィールを書き戻す本人の 4S ログイン運営の操作 - GET
/events/:eventId/entries/:entryId/referral-descendants招待した人の木を描く本人の 4S ログイン本人の操作entry · children · childrenTotalCount - POST
/events/:eventId/entries/:entryId/invitation-code本人の招待コードを出す本人の 4S ログイン本人の操作code · maxRedemptions · redeemedCount · remaining · targetTicket - GET
/events/:eventId/referral-ranking招待の順位を読む本人の 4S ログイン本人の操作ランキングitems.rank · items.user · items.descendantCount
参加登録
- POST
/users/me/avatar参加登録で選んだ写真を上げる本人の 4S ログイン本人の操作avatarUrl - GET
/events/:eventId/tickets公開中のチケットを並べる認証なし本人の操作id · name · price · status · paymentType - GET
/tickets/:uniqueIdリンクで渡されたチケットを開く認証なし本人の操作id · eventId · name · price - GET
/events/:eventId/invitation/:codeリファラルコードを確かめる認証なし本人の操作自分valid · event · ticket - GET
/events/:eventId/questions参加登録の設問を読む認証なし本人の操作questions - GET
/events/:eventId/my-questions選んだチケットの設問と前の回答を読む本人の 4S ログイン本人の操作自分questions · answers - POST
/events/:eventId/registerアプリの中で参加登録する本人の 4S ログイン本人の操作entry · state - POST
/events/:eventId/tickets/:ticketId/prepaid-checkout事前決済のページを作る本人の 4S ログイン本人の操作url · sessionId - GET
/events/:eventId/entries本人の参加登録と状態を確かめる本人の 4S ログイン本人の操作QR自分イベントentries.id · entries.state · entries.checkedInAt · entries.ticketId
メッセージ
- GET
/events/:eventId/entries/:entryId/referral-ancestors誰に招待されたかをたどる本人の 4S ログイン本人の操作自分entry · ancestors · truncated
イベント
- GET
/events/:eventIdイベントの題・日程・登録の設定を読む認証なし本人の操作参加登録セッションid · title · schedules · organizers · requiresFacePhoto · speakers · stages - GET
/events/my-entries本人が参加するイベントを全部読む本人の 4S ログイン本人の操作自分entries.eventId · entries.state · entries.checkedInAt - GET
/slug/:slugslug から人・イベント・コミュニティを引く認証なし本人の操作QR公開の読み取りtype · data.id · data.slug · data.nativeName · data.title · data.avatarUrl - GET
/communities/:communityId/eventsSPIKES のイベントを並べる認証なし定期 purge-messagesevents · pageInfo - GET
/eventsコミュニティが引けないときに名前で探す認証なし定期 purge-messagesevents · pageInfo
企業ページ
- GET
/organizations/:organizationId協賛の会社の名前とロゴを読む認証なし本人の操作イベントname · slug · type · logoUrl · websiteUrl
Firebase Cloud Messaging
Google ネイティブアプリのプッシュ仕様を開くネイティブアプリへのプッシュ通知を送る。iPhone への通知も Firebase を通して届く。
向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。
失敗したとき: 端末の登録が消えたと分かったときだけ、その端末への送信をやめる。一時的な失敗では止めず、復旧すれば同じ端末へまた送る。
プッシュ通知
- POST
/v1/projects/:projectId/messages:sendネイティブアプリへプッシュを送るサービスアカウント本人の操作通知name · error.details
Web Push
ブラウザ各社のプッシュ配信(RFC 8030 / 8291 / 8292)仕様を開くブラウザとホーム画面に置いた Web アプリへプッシュ通知を送る。
向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。
失敗したとき: 配信先がもう無いと返されたら、その購読を止める。それ以外の失敗が続いたときも、決めた回数で止める。
プッシュ通知
- POST
/:subscriptionEndpointブラウザ・ホーム画面のアプリへプッシュを送る証明書・鍵本人の操作通知status
Vercel Blob
画像・添付の保存仕様を開く画像や添付ファイルを保存する。
向き: BOUNTY が読む呼び出しと、BOUNTY から送る・変える呼び出しの両方がある(読む 1 本・書く 2 本)。
自分
- PUT
/api/blob/ポートフォリオの添付をブラウザから直接上げる共有トークン本人の操作url
今日のワイ
- PUT
/api/blob/画像・添付を保存する共有トークン本人の操作自分BOSHUイベントurl · pathname - GET
/:pathname非公開の保存物を読む共有トークン本人の操作BOSHU運営bytes
Upstash Redis
回数制限の数え仕様を開く回数の制限(短い時間に呼びすぎていないか)を、全部のサーバで共有して数える。
向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。
ログイン
- POST
/pipeline連続の操作を数えて止める共有トークン本人の操作QRBOSHUイベントフォローresult
PostHog
同意した人だけの利用計測仕様を開く計測に同意した人の利用だけを送る。同意していない人の情報は送らない。
向き: BOUNTY から送る・変える呼び出しだけ(読む 0 本・書く 1 本)。
契約
- POST
/i/v0/e/同意した人の画面の利用を記録するAPI キー本人の操作
法人番号 API
国税庁 法人番号公表サイト仕様を開く会社の名前から国税庁の法人番号を探し、法人番号から会社を確かめる。
向き: BOUNTY が読むだけ(読む 2 本・書く 0 本)。
企業ページ
- GET
/4/name会社の名前から法人番号を探すAPI キー本人の操作学生団体・ベンチャーcorporateNumber · name · furigana · kind · prefectureName · cityName · streetNumber · process · closeDate · updateDate - GET
/4/num法人番号から会社を確かめるAPI キー本人の操作学生団体・ベンチャーcorporateNumber · name · furigana · kind · prefectureName · cityName · streetNumber · process · closeDate · updateDate
公開 Web
許可したホストの画像・リンクの下見許可したホストだけから、画像とリンクの題を読む。
向き: BOUNTY が読むだけ(読む 1 本・書く 0 本)。
自分
- GET
/:path許可したホストの画像とリンクの題を読む認証なし本人の操作BOSHU学生団体・ベンチャーog:title · og:image · bytes