import {getInput} from '@actions/core'
import {isNullOrUndefined} from './util'
/**
* Describes the action interface.
*/
export interface ActionInterface {
/**
* Deployment token.
*/
token?: string
/**
* The template to use.
*/
template: string
/**
* The file to replace the content in.
*/
file: string
/**
* The minimum amount sponsored to be included.
*/
minimum: number
/**
* The maximum amount sponsored to be included.
*/
maximum: number
/**
* The marker at which the content should be included within.
*/
marker: string
/**
* If the user has no sponsors, we can replace it with a fallback.
*/
fallback: string
/**
* Fetches organization level sponsors if true.
*/
organization: boolean
/**
* Determines if inactive sponsors should be returned or not.
*/
activeOnly: boolean
/**
* Determines if private sponsors should be returned or not. If marked as true, the identity of the sponsor is still
* kept private, however, an anonymized version of the sponsor is still included in the list.
*/
includePrivate: boolean
}
/**
* Gets the action configuration.
*/
export const action = {
token: getInput('token'),
template: !isNullOrUndefined(getInput('template'))
? getInput('template')
: `
`,
minimum: !isNullOrUndefined(getInput('minimum'))
? parseInt(getInput('minimum'))
: 0,
maximum: !isNullOrUndefined(getInput('maximum'))
? parseInt(getInput('maximum'))
: 0,
marker: !isNullOrUndefined(getInput('marker'))
? getInput('marker')
: 'sponsors',
file: !isNullOrUndefined(getInput('file')) ? getInput('file') : 'README.md',
fallback: !isNullOrUndefined(getInput('fallback'))
? getInput('fallback')
: ``,
organization: !isNullOrUndefined(getInput('organization'))
? getInput('organization').toLowerCase() === 'true'
: false,
activeOnly: !isNullOrUndefined(getInput('active-only'))
? getInput('active-only').toLowerCase() === 'true'
: false,
includePrivate: !isNullOrUndefined(getInput('include-private'))
? getInput('include-private').toLowerCase() === 'true'
: false
}
/**
* Describes the sponsor object.
*/
export interface Sponsor {
sponsorEntity: {
name: string | null
login: string
url: string
avatarUrl?: string
websiteUrl: string | null
}
createdAt: string
privacyLevel?: PrivacyLevel
tier?: {
monthlyPriceInCents?: number
}
}
/**
* Describes the response from the GitHub GraphQL query.
*/
export interface SponsorshipsAsMaintainer {
totalCount: number
pageInfo: {
endCursor: string
}
nodes: Sponsor[]
}
/**
* Describes the response from the GitHub GraphQL query.
*/
export interface GitHubResponse {
data: {
organization?: {
sponsorshipsAsMaintainer: SponsorshipsAsMaintainer
}
viewer?: {
sponsorshipsAsMaintainer: SponsorshipsAsMaintainer
}
}
}
/**
* Describes the action interface.
*/
export type RequiredActionParameters = Pick
/**
* Privacy levels for the sponsorship.
*/
export enum PrivacyLevel {
PUBLIC = 'PUBLIC',
PRIVATE = 'PRIVATE'
}
/**
* Statuses for the action.
*/
export enum Status {
SUCCESS = 'success',
FAILED = 'failed',
RUNNING = 'running',
SKIPPED = 'skipped'
}
/**
* URLs used within the action.
*/
export enum Urls {
GITHUB_API = 'https://api.github.com'
}