# extendify/3.1.1/src/AutoLaunch/functions/helpers.js

Extendify, version 3.1.1. 70 lines.

- Page: https://pluginprobe.com/plugins/extendify/3.1.1/code/src/AutoLaunch/functions/helpers.js
- Raw: https://pluginprobe.com/plugins/extendify/3.1.1/raw/src/AutoLaunch/functions/helpers.js
- Modified: 2026-05-05T19:37:04+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/extendify/3.1.1/code/src/AutoLaunch/functions/helpers.js#L10-L20`.

```javascript
import { useLaunchDataStore } from '@auto-launch/state/launch-data';
import { digest } from '@shared/api/digest';
import { __ } from '@wordpress/i18n';

export const setStatus = (msg) => {
	useLaunchDataStore.getState().addStatusMessage(msg);
};
export const setErrorMessage = (message) => {
	useLaunchDataStore.getState().setErrorMessage(message);
};

export const retryTwice = async (fn) => {
	try {
		return await fn();
	} catch (_) {
		setErrorMessage(
			// translators: This is an error message shown to the user when a network request fails and is being retried
			__('The network seems unstable. Retrying...', 'extendify-local'),
		);
		await wait(1000);
		const res = await fn();
		setErrorMessage(null);
		return res;
	}
};

export const failWithFallback = async (fn, fallback, errDetails = {}) => {
	try {
		return await fn();
	} catch (error) {
		digest({
			...errDetails,
			error: errDetails?.error ?? error,
			source: 'auto-launch',
		});
		return fallback;
	}
};

export const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

import apiFetch from '@wordpress/api-fetch';

export async function apiFetchWithTimeout(options = {}, timeoutMs = 30000) {
	const controller = new AbortController();
	const { signal } = controller;
	const timeoutId = setTimeout(() => controller.abort(), timeoutMs);

	try {
		return await apiFetch({ ...options, signal });
	} finally {
		clearTimeout(timeoutId);
	}
}
export const fetchWithTimeout = async (
	url,
	options = {},
	timeoutMs = 60000,
) => {
	const controller = new AbortController();
	const { signal } = controller;
	const timeoutId = setTimeout(() => controller.abort(), timeoutMs);

	try {
		return await fetch(url, { ...options, signal });
	} finally {
		clearTimeout(timeoutId);
	}
};

```
