admob-ssv
Version:
Tool for validate AdMob rewarded ads signatures SSV
46 lines (36 loc) • 1.24 kB
text/typescript
import type RawKeyRegister from '../rawkeys'
import type KeyFetcher from './fetcher'
import type { FetcherOptions } from './fetcher'
export const KEY_URL = 'https://www.gstatic.com/admob/reward/verifier-keys.json'
export default class SimpleFetcher implements KeyFetcher {
constructor(public options: FetcherOptions = {}) {}
async fetch() {
const res = await fetch(this.options.url || KEY_URL)
if (!res.ok) {
throw new Error(`Failed to fetch keys: ${res.statusText}`)
}
const data = await res.json()
return data.keys as RawKeyRegister[]
}
}
export interface RetryFetcherOptions extends FetcherOptions {
maxRetries?: number
delay?: number
}
export class RetryFetcher extends SimpleFetcher implements KeyFetcher {
constructor(public options: RetryFetcherOptions = {}) {
super(options)
}
override async fetch() {
const maxRetries = this.options.maxRetries || 3
const delay = this.options.delay || 1000
for (let i = maxRetries || 3; i > 0; i -= 1) {
try {
return await super.fetch()
} catch (err) {
await new Promise(resolve => setTimeout(resolve, delay))
}
}
throw new Error(`Failed to fetch keys after ${maxRetries} retries`)
}
}