import { Context, createInstance, getInstance } from '@osaas/client-core';
import { waitForInstanceReady } from './util.js';
import {
EyevinnEncoreCallbackListener,
EyevinnEncoreCallbackListenerConfig
} from '@osaas/client-services';
const SERVICE_ID = 'eyevinn-encore-callback-listener';
export async function createEncoreCallbackListenerInstance(
ctx: Context,
name: string,
redisUrl: string,
encoreUrl: string
) {
const serviceAccessToken = await ctx.getServiceAccessToken(SERVICE_ID);
let instance: EyevinnEncoreCallbackListener = await getInstance(
ctx,
SERVICE_ID,
name,
serviceAccessToken
);
if (!instance) {
const config: EyevinnEncoreCallbackListenerConfig = {
name,
RedisUrl: redisUrl,
EncoreUrl: encoreUrl,
RedisQueue: 'package'
};
const newInstance = await createInstance(
ctx,
SERVICE_ID,
serviceAccessToken,
config
);
if (!newInstance) {
throw new Error(`Failed to create instance with name ${name}`);
}
instance = newInstance;
await waitForInstanceReady(SERVICE_ID, name, ctx);
}
return {
url: new URL('/encoreCallback', instance.url).toString()
};
}
export async function getEncoreCallbackListenerInstance(
ctx: Context,
name: string
) {
const serviceAccessToken = await ctx.getServiceAccessToken(SERVICE_ID);
const instance: EyevinnEncoreCallbackListener = await getInstance(
ctx,
SERVICE_ID,
name,
serviceAccessToken
);
if (!instance) {
throw new Error(`Encore Callback Listener Instance ${name} not found`);
}
return {
url: new URL('/encoreCallback', instance.url).toString()
};
}