mirror of
https://github.com/urbit/shrub.git
synced 2024-12-22 18:31:44 +03:00
110 lines
2.2 KiB
TypeScript
110 lines
2.2 KiB
TypeScript
|
|
import { Patp, Poke, Scry } from '../lib';
|
|
import {
|
|
Contact,
|
|
ContactUpdateAdd,
|
|
ContactUpdateEdit,
|
|
ContactUpdateRemove,
|
|
ContactEditField,
|
|
ContactShare,
|
|
ContactUpdate,
|
|
ContactUpdateAllowShips,
|
|
ContactUpdateAllowGroup,
|
|
ContactUpdateSetPublic
|
|
} from './types';
|
|
|
|
export const CONTACT_UPDATE_VERSION = 0;
|
|
|
|
const storeAction = <T extends ContactUpdate>(data: T, version: number = CONTACT_UPDATE_VERSION): Poke<T> => ({
|
|
app: 'contact-store',
|
|
mark: `contact-update-${version}`,
|
|
json: data
|
|
});
|
|
|
|
export { storeAction as contactStoreAction };
|
|
|
|
export const addContact = (ship: Patp, contact: Contact): Poke<ContactUpdateAdd> => {
|
|
contact['last-updated'] = Date.now();
|
|
|
|
return storeAction({
|
|
add: { ship, contact }
|
|
});
|
|
};
|
|
|
|
export const removeContact = (ship: Patp): Poke<ContactUpdateRemove> =>
|
|
storeAction({
|
|
remove: { ship }
|
|
});
|
|
|
|
export const share = (recipient: Patp, version: number = CONTACT_UPDATE_VERSION): Poke<ContactShare> => ({
|
|
app: 'contact-push-hook',
|
|
mark: 'contact-share',
|
|
json: { share: recipient }
|
|
});
|
|
|
|
export const editContact = (
|
|
ship: Patp,
|
|
editField: ContactEditField
|
|
): Poke<ContactUpdateEdit> =>
|
|
storeAction({
|
|
edit: {
|
|
ship,
|
|
'edit-field': editField,
|
|
timestamp: Date.now()
|
|
}
|
|
});
|
|
|
|
export const allowShips = (
|
|
ships: Patp[]
|
|
): Poke<ContactUpdateAllowShips> => storeAction({
|
|
allow: {
|
|
ships
|
|
}
|
|
});
|
|
|
|
export const allowGroup = (
|
|
ship: string,
|
|
name: string
|
|
): Poke<ContactUpdateAllowGroup> => storeAction({
|
|
allow: {
|
|
group: { ship, name }
|
|
}
|
|
});
|
|
|
|
export const setPublic = (
|
|
setPublic: any
|
|
): Poke<ContactUpdateSetPublic> => {
|
|
return storeAction({
|
|
'set-public': setPublic
|
|
});
|
|
};
|
|
|
|
export const retrieve = (
|
|
ship: string
|
|
) => {
|
|
const resource = { ship, name: '' };
|
|
return {
|
|
app: 'contact-pull-hook',
|
|
mark: 'pull-hook-action',
|
|
json: {
|
|
add: {
|
|
resource,
|
|
ship
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
export const fetchIsAllowed = (
|
|
entity: string,
|
|
name: string,
|
|
ship: string,
|
|
personal: boolean
|
|
): Scry => {
|
|
const isPersonal = personal ? 'true' : 'false';
|
|
return {
|
|
app: 'contact-store',
|
|
path: `/is-allowed/${entity}/${name}/${ship}/${isPersonal}`
|
|
};
|
|
};
|