← Public packages
@kentcdodds/devin
Start, monitor, and manage Devin sessions, knowledge, playbooks, and schedules via the Devin v3 API
src/usage.ts
119 lines · 3.0 KB · TypeScriptimport { compact, devinOrgApi } from './lib/client.ts'
/** Unix-seconds window shared by every consumption/metrics endpoint. */
export type TimeWindow = {
orgId?: string
timeAfter?: number
timeBefore?: number
}
function windowQuery(params: TimeWindow) {
return compact({ time_after: params.timeAfter, time_before: params.timeBefore })
}
/** ACU consumption per day for the whole org. */
export async function dailyConsumption(params: TimeWindow = {}) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: '/consumption/daily',
query: windowQuery(params),
})
}
export async function dailyConsumptionForUser(
params: TimeWindow & { userId: string },
) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: `/consumption/daily/users/${encodeURIComponent(params.userId)}`,
query: windowQuery(params),
})
}
export async function dailyConsumptionForServiceUser(
params: TimeWindow & { serviceUserId: string },
) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: `/consumption/daily/service-users/${encodeURIComponent(params.serviceUserId)}`,
query: windowQuery(params),
})
}
export async function dailyConsumptionForSession(
params: TimeWindow & { sessionId: string },
) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: `/consumption/daily/sessions/${encodeURIComponent(params.sessionId)}`,
query: windowQuery(params),
})
}
export async function usageMetrics(params: TimeWindow = {}) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: '/metrics/usage',
query: windowQuery(params),
})
}
export type ScopedMetricsParams = TimeWindow & {
/** Required by Devin for session/PR metrics. */
timeAfter: number
timeBefore: number
userIds?: string[]
serviceUserIds?: string[]
playbookId?: string
}
export async function sessionMetrics(params: ScopedMetricsParams) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: '/metrics/sessions',
query: compact({
...windowQuery(params),
user_ids: params.userIds,
service_user_ids: params.serviceUserIds,
playbook_id: params.playbookId,
}),
})
}
export async function prMetrics(params: ScopedMetricsParams) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: '/metrics/prs',
query: compact({
...windowQuery(params),
user_ids: params.userIds,
service_user_ids: params.serviceUserIds,
playbook_id: params.playbookId,
}),
})
}
/** Devin's own analysis of a finished session (issues, action items). */
export async function sessionInsights(params: {
devinId: string
orgId?: string
}) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: `/sessions/${encodeURIComponent(params.devinId)}/insights`,
})
}
/** Generate insights for a session that has none yet. Consumes ACUs. */
export async function generateSessionInsights(params: {
devinId: string
orgId?: string
}) {
return devinOrgApi<unknown>({
orgId: params.orgId,
path: `/sessions/${encodeURIComponent(params.devinId)}/insights/generate`,
method: 'POST',
})
}
export default dailyConsumption