Skip to content

Built for people who want to own their automations. Join the waitlist for an invite.

Package listing

@kody/sentry

src/scopes.ts

31 lines · 1.2 KB · TypeScript
export type SentryResource = 'event' | 'project' | 'org'

export function inferResource(path: string): SentryResource {
	const normalizedPath = path.toLowerCase()
	if (normalizedPath.includes('/issues') || normalizedPath.includes('/events')) return 'event'
	if (normalizedPath.includes('/projects')) return 'project'
	return 'org'
}

export function inferRequiredScope(method: string, path: string): string {
	const normalizedMethod = method.toUpperCase()
	const resource = inferResource(path)
	switch (resource) {
		case 'event':
			if (normalizedMethod === 'GET' || normalizedMethod === 'HEAD') return 'event:read'
			if (normalizedMethod === 'DELETE') return 'event:admin'
			return 'event:write'
		case 'project':
			if (normalizedMethod === 'GET' || normalizedMethod === 'HEAD') return 'project:read'
			if (normalizedMethod === 'DELETE') return 'project:admin'
			return 'project:write'
		case 'org':
			if (normalizedMethod === 'GET' || normalizedMethod === 'HEAD') return 'org:read'
			if (normalizedMethod === 'DELETE') return 'org:admin'
			return 'org:write'
		default: {
			const exhaustive: never = resource
			throw new Error('Unhandled Sentry resource: ' + String(exhaustive))
		}
	}
}