sui-explorer-local
Version:
Local Sui Explorer
67 lines (54 loc) • 1.91 kB
text/typescript
// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0
import {
DisplayFieldsResponse,
SuiObjectChange,
SuiObjectChangeCreated,
SuiObjectChangeDeleted,
SuiObjectChangeMutated,
SuiObjectChangePublished,
SuiObjectChangeTransferred,
SuiObjectChangeWrapped,
} from '@mysten/sui.js/client';
import { groupByOwner } from './groupByOwner';
import { SuiObjectChangeTypes } from './types';
export type WithDisplayFields<T> = T & { display?: DisplayFieldsResponse };
export type SuiObjectChangeWithDisplay = WithDisplayFields<SuiObjectChange>;
export type ObjectChanges = {
changesWithDisplay: SuiObjectChangeWithDisplay[];
changes: SuiObjectChange[];
ownerType: string;
};
export type ObjectChangesByOwner = Record<string, ObjectChanges>;
export type ObjectChangeSummary = {
[K in SuiObjectChangeTypes]: ObjectChangesByOwner;
};
export const getObjectChangeSummary = (objectChanges: SuiObjectChangeWithDisplay[]) => {
if (!objectChanges) return null;
const mutated = objectChanges.filter(
(change) => change.type === 'mutated',
) as SuiObjectChangeMutated[];
const created = objectChanges.filter(
(change) => change.type === 'created',
) as SuiObjectChangeCreated[];
const transferred = objectChanges.filter(
(change) => change.type === 'transferred',
) as SuiObjectChangeTransferred[];
const published = objectChanges.filter(
(change) => change.type === 'published',
) as SuiObjectChangePublished[];
const wrapped = objectChanges.filter(
(change) => change.type === 'wrapped',
) as SuiObjectChangeWrapped[];
const deleted = objectChanges.filter(
(change) => change.type === 'deleted',
) as SuiObjectChangeDeleted[];
return {
transferred: groupByOwner(transferred),
created: groupByOwner(created),
mutated: groupByOwner(mutated),
published: groupByOwner(published),
wrapped: groupByOwner(wrapped),
deleted: groupByOwner(deleted),
};
};