@iexec/web3telegram
Version:
Enables secure, blockchain-based messaging by encrypting Telegram user IDs for privacy. It lets users message Ethereum account holders without knowing their Telegram details.
79 lines (72 loc) • 2.44 kB
text/typescript
import { NULL_ADDRESS } from 'iexec/utils';
import { handleIfProtocolError, WorkflowError } from '../utils/errors.js';
import {
addressOrEnsSchema,
throwIfMissing,
campaignRequestSchema,
} from '../utils/validators.js';
import { DataProtectorConsumer } from './internalTypes.js';
import {
ProcessBulkRequestParams,
ProcessBulkRequestResponse,
} from '@iexec/dataprotector';
import { ValidationError } from 'yup';
import {
CampaignRequest,
SendTelegramCampaignParams,
SendTelegramCampaignResponse,
} from './types.js';
export type SendTelegramCampaign = typeof sendTelegramCampaign;
export const sendTelegramCampaign = async ({
dataProtector = throwIfMissing(),
workerpoolAddressOrEns = throwIfMissing(),
campaignRequest,
}: DataProtectorConsumer &
SendTelegramCampaignParams): Promise<SendTelegramCampaignResponse> => {
try {
const vCampaignRequest = campaignRequestSchema()
.required()
.label('campaignRequest')
.validateSync(campaignRequest) as CampaignRequest;
const vWorkerpoolAddressOrEns = addressOrEnsSchema()
.required()
.label('WorkerpoolAddressOrEns')
.validateSync(workerpoolAddressOrEns);
if (
vCampaignRequest.workerpool !== NULL_ADDRESS &&
vCampaignRequest.workerpool.toLowerCase() !==
vWorkerpoolAddressOrEns.toLowerCase()
) {
throw new ValidationError(
"workerpoolAddressOrEns doesn't match campaignRequest workerpool"
);
}
// Process bulk request
const processBulkRequestResponse: ProcessBulkRequestResponse<ProcessBulkRequestParams> =
await dataProtector.processBulkRequest({
bulkRequest: vCampaignRequest,
workerpool: vWorkerpoolAddressOrEns,
});
return processBulkRequestResponse;
} catch (error) {
if ((error as any)?.isProtocolError === true) {
throw error;
}
handleIfProtocolError(error);
const isProcessProtectedDataError =
error instanceof Error &&
error.message === 'Failed to process protected data';
if (isProcessProtectedDataError) {
const cause = (error as any)?.cause;
const unwrappedCause = cause instanceof Error ? cause : error;
throw new WorkflowError({
message: 'Failed to sendTelegramCampaign',
errorCause: unwrappedCause,
});
}
throw new WorkflowError({
message: 'Failed to sendTelegramCampaign',
errorCause: error,
});
}
};