惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
雷峰网
雷峰网
量子位
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
博客园 - Franky
罗磊的独立博客
宝玉的分享
宝玉的分享
博客园_首页
腾讯CDC
The GitHub Blog
The GitHub Blog
D
DataBreaches.Net
IT之家
IT之家
D
Docker
Microsoft Security Blog
Microsoft Security Blog
博客园 - 司徒正美
V
V2EX
月光博客
月光博客
N
Netflix TechBlog - Medium
爱范儿
爱范儿
I
InfoQ
P
Proofpoint News Feed

Show HN

Show HN: AI agents for UK GDAD PCF roles and their skills The Two Pillars: Mixer Mode and Meta-Software in the Reorganization of Software Work After AI GitHub - JaiCode08/teleport-env What 1,000+ Harness Experiments Taught Me About Self-Improving Agents Show HN: Liiists, a Markdown-first, iOS and CLI list app SwiperTab – Get this Extension for 🦊 Firefox (en-US) GitHub - kouhxp/fftext: Summarize, explain, fact-check, or translate any text, URL, or file. No GPU. No cloud. One command GitHub - sweetpad-dev/sweetpad: Develop Swift/iOS projects using VSCode GitHub - dogmaticdev/IRON: IRON a.k.a. Intermediate Representation Object Notation is a Interpreter/Database that is used to create Programming Languages. GitHub - sjhalani7/vaen: Package your AI coding harness into a portable .agent file, and share it across repos, teams, & the community without ever having to copy-paste instructions, skills, MCP config, or secrets. Show HN: Gandalf the Grader Show HN: Citadeld – replay any CI failure locally from a single file GitHub - tdortman/cuSBF: High-Performance GPU Super Bloom Filter coral-ai/claude-code-token-xray at main · Coral-Bricks-AI/coral-ai GitHub - ulyssestenn/funes: Funes is a Git-based framework for LLM-managed knowledge work: an AI Librarian ingests raw sources, builds an interlinked Markdown knowledge base, and uses it to produce cited reports, analyses, and other outputs. GitHub - ThatXliner/gah: Git Add Hunk, built for agents to use GitHub - harmont-dev/harmont-cli: Command-line client for the Harmont CI platform GitHub - brooksmcmillin/mcp-authflow: OAuth 2.0 Authorization Server framework for MCP servers GitHub - javaid-codes/audit-supply-chain-agents GitHub - amorey/gochan: A small library of common channel architectures for Go, inspired by Rust GitHub - arifozgun/OpenGem: Free, Open-Source AI API Gateway with Gemini, OpenAI & Anthropic Compatibility in 1 file GitHub - Pranesh950/BioPetals: 🌸 Run BIOxAI models at home, BitTorrent-style. Fine-tuning and inference up to 10x faster than offloading GitHub - cnguyen14/bounty-doctor: Diagnose a GitHub bounty issue before you waste hours: detects honeypot scam repos, AI-bot attempt swarms, and stale contests. Show HN: CoreMCP – MCP Server for On-Prem DBs Show HN: KittyHTML – Render HTML/CSS as an inline image in your terminal GitHub - bingud/filemat: Web-based file manager Show HN: TruthLens – Free multi-signal deepfake image detector GitHub - apexlocal-jz/claude-usage-tray: Windows system-tray app showing your Claude Code rate-limit usage at a glance. Zero deps, ~300 lines of PowerShell. Cross-IDE (works regardless of VS Code, Cursor, plain terminal). Release v0.1.2.1 · kouhxp/yapsnap GitHub - noopolis/moltnet: Self-hostable chat network for AI agents. Pre-built bridges for Claude Code, Codex, and the Claws. Rooms, DMs, history. No Slack bots, no Matrix, no glue code.
GitHub - wrsrsh/hinge-ts
warisareshi · 2026-06-17 · via Show HN

Typed browser SDK for Hinge automation, with Hinge REST, Sendbird chat, session persistence, redacted logging, and raw escape hatches.

This package is a TypeScript port of https://github.com/f0rr0/hinge-rs/.

This package is unofficial and is not affiliated with Hinge, Match Group, or Sendbird.

Install

Runtime Model

hinge-ts is browser-first. Full network access runs through your proxy:

  • browser app owns SDK state, types, persistence, and API calls
  • proxy performs upstream Hinge and Sendbird requests with SDK-generated headers
  • proxy relays Sendbird WebSocket frames because browser WebSocket cannot set the required custom handshake headers

Use BrowserFetchTransport only for environments where direct upstream requests are explicitly allowed.

Login

import {
  BrowserStorage,
  Email2FAError,
  HingeClient,
  HingeProxyTransport,
  ProxySendbirdRealtimeTransport
} from "hinge-ts";

const proxyToken = "your-short-lived-proxy-token";

const client = HingeClient.builder()
  .phoneNumber("+15555550123")
  .transport(new HingeProxyTransport({
    baseUrl: "/api/hinge-proxy",
    headers: { authorization: `Bearer ${proxyToken}` }
  }))
  .realtimeTransport(
    new ProxySendbirdRealtimeTransport({
      url: `/api/hinge-proxy/ws/sendbird?token=${encodeURIComponent(proxyToken)}`
    })
  )
  .storage(new BrowserStorage())
  .build();

await client.auth.initiateSms();

try {
  await client.auth.submitOtp("123456");
} catch (error) {
  if (error instanceof Email2FAError) {
    await client.auth.submitEmailCode(error.caseId, "654321");
  } else {
    throw error;
  }
}

await client.persistence.saveSession("session.json");

Use

await client.persistence.loadSession("session.json");

const recs = await client.recommendations.get();
const me = await client.profiles.me();
const likes = await client.likes.list();

await client.ratings.skip({
  subjectId: recs.feeds[0].subjects[0].subjectId,
  ratingToken: recs.feeds[0].subjects[0].ratingToken
});

await client.chat.sendMessage({
  ays: false,
  matchMessage: true,
  messageType: "text",
  messageData: { message: "hey" },
  subjectId: "peer-user-id",
  origin: "connection"
});

Realtime Chat

const subscription = await client.chat.subscribeEvents();

for await (const event of subscription) {
  if (event.kind === "typing") {
    console.log(event.event.channelUrl);
  }
}

Commands:

await client.chat.markRead("channel-url");
await client.chat.typingStart("channel-url");
await client.chat.typingEnd("channel-url");
await client.chat.ackMessage("channel-url", "message-id");
await client.chat.closeWs({ code: 1000, reason: "done" });

API Surface

Group Methods
auth initiateSms, submitOtp, submitEmailCode, isSessionValid, loadTokensSecure
recommendations get, getWithParams, repeatProfiles, save, load, cached, remove
profiles me, content, preferences, public, publicContent, update, updatePreferences, updateAnswers, deleteContent
likes limit, list, listRaw, subject, matchNote
ratings skip, rateUser, respond
prompts list, manager, text, search, byCategory, payload, evaluateAnswer, createPromptPoll, createVideoPrompt
connections list, detail, matchNote, standouts
settings preferences, updatePreferences, content, updateContent, auth, notifications, userTraits, accountInfo, exportStatus
chat credentials, channels, channel, messages, fullMessages, sendMessage, subscribeEvents, markRead, typingStart, typingEnd
persistence saveSession, loadSession, configure
raw hinge, sendbird

Proxy Contract

REST proxy endpoint:

POST /api/hinge-proxy/request

Body:

{
  "service": "hinge",
  "method": "POST",
  "pathOrUrl": "/auth/sms/v2/initiate",
  "url": "https://prod-api.hingeaws.net/auth/sms/v2/initiate",
  "headers": {},
  "body": {},
  "responseType": "json"
}

Realtime proxy endpoint:

GET /api/hinge-proxy/ws/sendbird?token=...

The browser sends a connect payload first. The proxy opens the upstream Sendbird socket with the provided headers, then relays text frames both ways.

Use an Authorization header for REST calls and a short-lived query token for the realtime socket.

See docs/proxy.md, docs/deploy.md, and examples.

Docs

Development

npm install
npm test
npm run pack:dry

Publish

npm login
npm test
npm run pack:dry
npm publish

prepack builds dist/ automatically.

GitHub Actions publishing:

  1. On npm, open hinge-ts package settings.
  2. Add a trusted publisher:
    • provider: GitHub Actions
    • organization/user: wrsrsh
    • repository: hinge-ts
    • workflow filename: publish.yml
    • environment name: npm
    • allowed action: npm publish
  3. Publish by tagging the package version:
npm version patch
git push origin main --tags

The workflow runs typecheck, tests, dry pack, checks the tag matches package.json, then publishes to npm. If that version already exists, the publish step is skipped instead of failing the run.

The same workflow also publishes a GitHub Packages copy as @wrsrsh/hinge-ts. It keeps the npmjs package name as hinge-ts, prepares a temporary manifest for GitHub Packages, and publishes with GITHUB_TOKEN.

Install the GitHub Packages copy with:

npm install @wrsrsh/hinge-ts --registry=https://npm.pkg.github.com

License

MIT.