UNPKG

@studion/infra-code-blocks

Version:
50 lines (49 loc) 1.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PluginReady = void 0; const pulumi = require("@pulumi/pulumi"); const exponential_backoff_1 = require("exponential-backoff"); const undici_1 = require("undici"); class PluginReady extends pulumi.dynamic.Resource { constructor(name, props, opts) { super(new PluginReadyProvider(), name, props, opts); } } exports.PluginReady = PluginReady; class PluginReadyProvider { async create(inputs) { const { grafanaToken, grafanaUrl, slug } = inputs; const url = new URL(`/api/plugins/${slug}/settings`, grafanaUrl).href; let data; try { data = await (0, exponential_backoff_1.backOff)(async () => { const { statusCode, body } = await (0, undici_1.request)(url, { method: 'GET', headers: { Authorization: `Bearer ${grafanaToken}`, 'Content-Type': 'application/json', }, }); if (statusCode === 200) { return (await body.json()); } if (statusCode !== 404) { throw new Error(`Unexpected status code: ${statusCode}`); } throw new Error('Plugin not ready yet'); }, { delayFirstAttempt: true, numOfAttempts: 11, startingDelay: 500, maxDelay: 60000, timeMultiple: 2, jitter: 'none', retry: (err) => err.message === 'Plugin not ready yet', }); } catch { throw new Error(`Timed out waiting for plugin "${slug}" to become ready`); } return { id: data.id, outs: {} }; } }