Skip to content
← Public packages

@kentcdodds/groupme

GroupMe REST API helpers for listing groups, reading messages, ranking activity, and preparing relevance-filtered digests for Kody agents.

AGENTS.md

115 lines · 3.4 KB · Markdown

@kentcdodds/groupme — agent notes

Human setup and intent live in README.md. This file is for agents: imports, smoke / execute snippets, and edge cases. Secrets by name only — never paste token values. Do not disable live webhooks or jobs.

Secrets / connect

NameKindNotes
groupmeAccessTokenuser secretHeader X-Access-Token
groupme-client-iduser valueOAuth application client id

Integration id: groupme. Hosts: api.groupme.com, oauth.groupme.com, image.groupme.com. Placeholder: {{secret:groupmeAccessToken|scope=user}}.

Connect: /connect/oauth?provider=groupme or kody:@kentcdodds/groupme/guide.

Import paths

ExportImport
overview / discoverykody:@kentcdodds/groupme
typeskody:@kentcdodds/groupme/types
requestkody:@kentcdodds/groupme/request
smoke-testkody:@kentcdodds/groupme/smoke-test
guidekody:@kentcdodds/groupme/guide
get-mekody:@kentcdodds/groupme/get-me
list-groupskody:@kentcdodds/groupme/list-groups
list-messageskody:@kentcdodds/groupme/list-messages
get-messages-in-rangekody:@kentcdodds/groupme/get-messages-in-range
list-most-active-groupskody:@kentcdodds/groupme/list-most-active-groups
filter-relevant-messageskody:@kentcdodds/groupme/filter-relevant-messages
prepare-digestkody:@kentcdodds/groupme/prepare-digest

Prefer focused paths. Prefer static kody:@kentcdodds/groupme/... imports from execute. Do not lead with packages.invoke.

Smoke test (read-only)

import smokeTest from 'kody:@kentcdodds/groupme/smoke-test'

export default async function main() {
	return await smokeTest()
	// => { ok: true, user: { id, name }, topGroups: [...] }
}

Auth-only:

import getMe from 'kody:@kentcdodds/groupme/get-me'

export default async function main() {
	return await getMe()
}

Common snippets

Most active groups:

import listMostActiveGroups from 'kody:@kentcdodds/groupme/list-most-active-groups'

export default async function main() {
	return await listMostActiveGroups({ limit: 5 })
}

Prepare a digest window:

import prepareDigest from 'kody:@kentcdodds/groupme/prepare-digest'

export default async function main() {
	return await prepareDigest({
		groupName: 'Finding Neverland',
		start: '2026-07-07',
		end: '2026-07-09',
		timeZone: 'America/Denver',
		relevance: {
			keywords: ['rehearsal', 'call time'],
			excludeSystem: true,
			minTextLength: 4,
		},
	})
}

Low-level escape hatch:

import request from 'kody:@kentcdodds/groupme/request'

export default async function main() {
	return await request({ path: '/users/me', throwOnError: true })
}

Edge cases

  • Helpers are read-only — they do not post messages.
  • get-messages-in-range and prepare-digest stop at maxPages (default 50) to avoid runaway fetches.
  • findGroupByName (via prepare-digest / domain): exact case-insensitive name first, then substring match.
  • Default timezone for date windows: America/Denver.
  • request only accepts api.groupme.com/v3 URLs or relative API paths. Failures throw GroupMeRequestError with the response attached when throwOnError is not false.
  • Cross-package: if another package imports this one, groupmeAccessToken must also be approved for the calling package.