@iexec/dataprotector
Version:
This product enables users to confidentially store data–such as mail address, documents, personal information ...
97 lines (91 loc) • 2.5 kB
text/typescript
import { WorkflowError } from '../../utils/errors.js';
import {
addressOrEnsSchema,
throwIfMissing,
validateOnStatusUpdateCallback,
} from '../../utils/validators.js';
import {
RevokeAllAccessParams,
RevokeAllAccessStatuses,
RevokedAccess,
} from '../types/coreTypes.js';
import { OnStatusUpdateFn } from '../types/index.js';
import { IExecConsumer } from '../types/internalTypes.js';
import { getGrantedAccess } from './getGrantedAccess.js';
import { revokeOneAccess } from './revokeOneAccess.js';
export const revokeAllAccess = async ({
iexec = throwIfMissing(),
protectedData,
authorizedApp,
authorizedUser,
onStatusUpdate = () => {},
}: IExecConsumer & RevokeAllAccessParams): Promise<RevokedAccess[]> => {
const vProtectedData = addressOrEnsSchema()
.required()
.label('protectedData')
.validateSync(protectedData);
const vAuthorizedApp = addressOrEnsSchema()
.label('authorizedApp')
.validateSync(authorizedApp);
const vAuthorizedUser = addressOrEnsSchema()
.label('authorizedUser')
.validateSync(authorizedUser);
const vOnStatusUpdate =
validateOnStatusUpdateCallback<OnStatusUpdateFn<RevokeAllAccessStatuses>>(
onStatusUpdate
);
const allAccessRevoked: RevokedAccess[] = [];
vOnStatusUpdate({
title: 'RETRIEVE_ALL_GRANTED_ACCESS',
isDone: false,
});
const { grantedAccess } = await getGrantedAccess({
iexec,
protectedData: vProtectedData,
authorizedApp: vAuthorizedApp,
authorizedUser: vAuthorizedUser,
pageSize: 1000,
}).catch((e) => {
throw new WorkflowError({
message: 'Failed to retrieve granted access',
errorCause: e,
});
});
vOnStatusUpdate({
title: 'RETRIEVE_ALL_GRANTED_ACCESS',
isDone: true,
payload: {
grantedAccessCount: String(grantedAccess.length),
},
});
for (const access of grantedAccess) {
try {
vOnStatusUpdate({
title: 'REVOKE_ONE_ACCESS',
isDone: false,
payload: {
access,
},
});
const { txHash } = await revokeOneAccess({
iexec,
...access,
});
allAccessRevoked.push({ access, txHash });
vOnStatusUpdate({
title: 'REVOKE_ONE_ACCESS',
isDone: true,
payload: {
access,
txHash,
},
});
} catch (e) {
throw new WorkflowError({
message: 'Failed to revoke an access',
errorCause: e,
});
}
}
return allAccessRevoked;
};