Skip to content

feat: add conversations inspect-invite command#20

Merged
saulmc merged 1 commit intofeature/typing-indicatorsfrom
feature/inspect-invite
Mar 17, 2026
Merged

feat: add conversations inspect-invite command#20
saulmc merged 1 commit intofeature/typing-indicatorsfrom
feature/inspect-invite

Conversation

@yewreeka
Copy link
Copy Markdown
Collaborator

@yewreeka yewreeka commented Mar 13, 2026

Summary

Adds a new command to decode and inspect invite slugs/URLs without joining the conversation.

Stacked on #19 (typing indicators) → #18 (read receipts). Merge those first.

Usage

# Inspect a raw invite slug
convos conversations inspect-invite <slug>

# Inspect a full invite URL
convos conversations inspect-invite "https://dev.convos.org/v2?i=<slug>"

# JSON output for scripting
convos conversations inspect-invite <slug> --json

Example output

{
  "tag": "abc123def0",
  "creatorInboxId": "a1b2c3d4e5f6...",
  "name": "My Group",
  "description": null,
  "imageUrl": null,
  "expiresAt": "2026-04-01T00:00:00.000Z",
  "expiresAfterUse": false,
  "conversationExpiresAt": null,
  "signatureValid": true,
  "inviteExpired": false,
  "conversationExpired": false,
  "conversationTokenBytes": 46
}

What it shows

  • tag — invite tag used for deduplication
  • creatorInboxId — hex inbox ID of who created the invite
  • name/description/imageUrl — conversation metadata embedded in the invite
  • expiresAt — when the invite expires (null = no expiry)
  • expiresAfterUse — whether this is a single-use invite
  • conversationExpiresAt — when the conversation itself expires
  • signatureValid — whether the secp256k1 ECDSA signature is cryptographically valid
  • inviteExpired / conversationExpired — whether the dates have passed

What it does NOT do

  • Create identities
  • Send join requests
  • Connect to XMTP
  • Modify any local state

Purely offline decode + signature verification.

Version

0.5.4. All 226 tests pass.

Note

Add conversations inspect-invite CLI command

Adds a new inspect-invite subcommand under conversations that decodes an invite slug or full URL, verifies its signature, and evaluates expiration status for both the invite and the conversation. The command outputs structured fields including tag, creatorInboxId, signatureValid, expiration flags, and conversationTokenBytes without performing any join or state changes. Exits with an error message if the invite cannot be parsed.

Macroscope summarized f34c54e.

Decodes and inspects an invite slug or URL without joining the
conversation. Displays all embedded metadata including:

- Invite tag and creator inbox ID
- Conversation name, description, and image URL
- Expiration dates (invite and conversation)
- Single-use flag
- Cryptographic signature validity
- Whether the invite or conversation has expired

Purely offline — does not create identities, send join requests,
or connect to XMTP. Useful for debugging invite issues.

Bumps version to 0.5.4.
@macroscopeapp
Copy link
Copy Markdown

macroscopeapp bot commented Mar 13, 2026

Approvability

Verdict: Approved

This PR adds a simple read-only CLI debugging command that parses and displays invite metadata without modifying any state. It reuses existing utility functions and is a low-risk, self-contained addition with clear documentation.

You can customize Macroscope's approvability policy. Learn more.

@saulmc saulmc merged commit b5b293a into feature/typing-indicators Mar 17, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants