@unchainedshop/plugins
Version:
Official plugin collection for the Unchained Engine with payment, delivery, and pricing adapters
58 lines (57 loc) • 2.02 kB
JavaScript
import { WorkerAdapter, WorkerDirector, schedule } from '@unchainedshop/core';
const everyMinute = schedule.parse.cron('* * * * *');
export const UpdateTokenOwnership = {
...WorkerAdapter,
key: 'shop.unchained.worker-plugin.update-token-ownership',
label: 'External worker to update ownership of provided tokens',
version: '1.0.0',
type: 'UPDATE_TOKEN_OWNERSHIP',
external: true,
async doWork() {
throw new Error('Cannot do work for external workers');
},
};
export const RefreshTokens = {
...WorkerAdapter,
key: 'shop.unchained.worker-plugin.refresh-tokens',
label: 'Worker to refresh tokens for accounts',
version: '1.0.0',
type: 'REFRESH_TOKENS',
external: false,
async doWork(input, unchainedAPI) {
const { modules } = unchainedAPI;
const tokens = await modules.warehousing.findTokens({ walletAddressExists: true });
const users = await modules.users.findUsers({ includeGuests: true, web3Verified: true });
const accounts = users.flatMap((user) => {
return user?.services?.web3?.flatMap((service) => {
if (service.verified)
return [service.address];
return [];
});
});
tokens.forEach((token) => {
accounts.push(token.walletAddress);
});
if (!tokens?.length) {
return { success: true, result: {} };
}
const forked = await modules.worker.addWork({
type: 'UPDATE_TOKEN_OWNERSHIP',
retries: 0,
input: {
filter: {
tokens,
accounts: [...new Set(accounts)],
},
},
});
return { success: true, result: { forked } };
},
};
WorkerDirector.registerAdapter(RefreshTokens);
WorkerDirector.registerAdapter(UpdateTokenOwnership);
WorkerDirector.configureAutoscheduling({
type: RefreshTokens.type,
schedule: everyMinute,
retries: 0,
});