Merge remote-tracking branch 'origin/main'

nix run .#update
This commit is contained in:
778a69cd 2023-08-10 23:48:28 +02:00
commit 733d58a49b
83 changed files with 2915 additions and 2569 deletions

View file

@ -1,2 +1,2 @@
elixir 1.14.4-otp-25 elixir 1.15.4-otp-26
erlang 25.3.1 erlang 26.0.2

View file

@ -57,7 +57,7 @@
"@vue-a11y/announcer": "^2.1.0", "@vue-a11y/announcer": "^2.1.0",
"@vue-a11y/skip-to": "^2.1.2", "@vue-a11y/skip-to": "^2.1.2",
"@vue-leaflet/vue-leaflet": "^0.10.1", "@vue-leaflet/vue-leaflet": "^0.10.1",
"@vue/apollo-composable": "^4.0.0-beta.5", "@vue/apollo-composable": "^4.0.0-beta.8",
"@vue/compiler-sfc": "^3.2.37", "@vue/compiler-sfc": "^3.2.37",
"@vueuse/core": "^10.0.2", "@vueuse/core": "^10.0.2",
"@vueuse/head": "^1.0", "@vueuse/head": "^1.0",
@ -67,7 +67,7 @@
"blurhash": "^2.0.0", "blurhash": "^2.0.0",
"date-fns": "^2.16.0", "date-fns": "^2.16.0",
"date-fns-tz": "^2.0.0", "date-fns-tz": "^2.0.0",
"floating-vue": "^2.0.0-beta.17", "floating-vue": "^2.0.0-beta.24",
"graphql": "^15.8.0", "graphql": "^15.8.0",
"graphql-tag": "^2.10.3", "graphql-tag": "^2.10.3",
"hammerjs": "^2.0.8", "hammerjs": "^2.0.8",
@ -111,15 +111,15 @@
"@types/phoenix": "^1.5.2", "@types/phoenix": "^1.5.2",
"@types/sanitize-html": "^2.5.0", "@types/sanitize-html": "^2.5.0",
"@vitejs/plugin-vue": "^4.0.0", "@vitejs/plugin-vue": "^4.0.0",
"@vitest/coverage-c8": "^0.32.2", "@vitest/coverage-v8": "^0.34.1",
"@vitest/ui": "^0.32.2", "@vitest/ui": "^0.34.1",
"@vue/eslint-config-prettier": "^7.0.0", "@vue/eslint-config-prettier": "^8.0.0",
"@vue/eslint-config-typescript": "^11.0.0", "@vue/eslint-config-typescript": "^11.0.0",
"@vue/test-utils": "^2.0.2", "@vue/test-utils": "^2.0.2",
"eslint": "^8.21.0", "eslint": "^8.21.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.20.2", "eslint-plugin-import": "^2.20.2",
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-vue": "^9.3.0", "eslint-plugin-vue": "^9.3.0",
"flush-promises": "^1.0.2", "flush-promises": "^1.0.2",
"histoire": "^0.16.1", "histoire": "^0.16.1",
@ -127,14 +127,14 @@
"jsdom": "^22.0.0", "jsdom": "^22.0.0",
"lint-staged": "^13.2.2", "lint-staged": "^13.2.2",
"mock-apollo-client": "^1.1.0", "mock-apollo-client": "^1.1.0",
"prettier": "^2.2.1", "prettier": "^3.0.0",
"prettier-eslint": "^15.0.1", "prettier-eslint": "^15.0.1",
"rollup-plugin-visualizer": "^5.7.1", "rollup-plugin-visualizer": "^5.7.1",
"sass": "^1.34.1", "sass": "^1.34.1",
"typescript": "~5.1.3", "typescript": "~5.1.3",
"vite": "^4.0.4", "vite": "^4.0.4",
"vite-plugin-pwa": "^0.16.4", "vite-plugin-pwa": "^0.16.4",
"vitest": "^0.32.2", "vitest": "^0.34.1",
"vue-i18n-extract": "^2.0.4" "vue-i18n-extract": "^2.0.4"
} }
} }

View file

@ -24,12 +24,15 @@ type schemaType = {
// eslint-disable-next-line no-underscore-dangle // eslint-disable-next-line no-underscore-dangle
const types = introspectionQueryResultData.__schema.types as schemaType[]; const types = introspectionQueryResultData.__schema.types as schemaType[];
export const possibleTypes = types.reduce((acc, type) => { export const possibleTypes = types.reduce(
if (type.kind === "INTERFACE") { (acc, type) => {
acc[type.name] = type.possibleTypes.map(({ name }) => name); if (type.kind === "INTERFACE") {
} acc[type.name] = type.possibleTypes.map(({ name }) => name);
return acc; }
}, {} as Record<string, string[]>); return acc;
},
{} as Record<string, string[]>
);
const replaceMergePolicy = <TExisting = any, TIncoming = any>( const replaceMergePolicy = <TExisting = any, TIncoming = any>(
_existing: TExisting, _existing: TExisting,

View file

@ -62,34 +62,40 @@ const props = defineProps<{
activity: IActivity; activity: IActivity;
}>(); }>();
const isAuthorCurrentActor = useIsActivityAuthorCurrentActor()(props.activity); const useIsActivityAuthorCurrentActorFct = useIsActivityAuthorCurrentActor();
const useActivitySubjectParamsFct = useActivitySubjectParams();
const subjectParams = useActivitySubjectParams()(props.activity); const isAuthorCurrentActor = computed(() =>
useIsActivityAuthorCurrentActorFct(props.activity)
);
const subjectParams = computed(() =>
useActivitySubjectParamsFct(props.activity)
);
const translation = computed((): string | undefined => { const translation = computed((): string | undefined => {
switch (props.activity.subject) { switch (props.activity.subject) {
case ActivityDiscussionSubject.DISCUSSION_CREATED: case ActivityDiscussionSubject.DISCUSSION_CREATED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You created the discussion {discussion}."; return "You created the discussion {discussion}.";
} }
return "{profile} created the discussion {discussion}."; return "{profile} created the discussion {discussion}.";
case ActivityDiscussionSubject.DISCUSSION_REPLIED: case ActivityDiscussionSubject.DISCUSSION_REPLIED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You replied to the discussion {discussion}."; return "You replied to the discussion {discussion}.";
} }
return "{profile} replied to the discussion {discussion}."; return "{profile} replied to the discussion {discussion}.";
case ActivityDiscussionSubject.DISCUSSION_RENAMED: case ActivityDiscussionSubject.DISCUSSION_RENAMED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You renamed the discussion from {old_discussion} to {discussion}."; return "You renamed the discussion from {old_discussion} to {discussion}.";
} }
return "{profile} renamed the discussion from {old_discussion} to {discussion}."; return "{profile} renamed the discussion from {old_discussion} to {discussion}.";
case ActivityDiscussionSubject.DISCUSSION_ARCHIVED: case ActivityDiscussionSubject.DISCUSSION_ARCHIVED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You archived the discussion {discussion}."; return "You archived the discussion {discussion}.";
} }
return "{profile} archived the discussion {discussion}."; return "{profile} archived the discussion {discussion}.";
case ActivityDiscussionSubject.DISCUSSION_DELETED: case ActivityDiscussionSubject.DISCUSSION_DELETED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You deleted the discussion {discussion}."; return "You deleted the discussion {discussion}.";
} }
return "{profile} deleted the discussion {discussion}."; return "{profile} deleted the discussion {discussion}.";

View file

@ -52,35 +52,41 @@ const props = defineProps<{
activity: IActivity; activity: IActivity;
}>(); }>();
const isAuthorCurrentActor = useIsActivityAuthorCurrentActor()(props.activity); const useIsActivityAuthorCurrentActorFct = useIsActivityAuthorCurrentActor();
const useActivitySubjectParamsFct = useActivitySubjectParams();
const subjectParams = useActivitySubjectParams()(props.activity); const isAuthorCurrentActor = computed(() =>
useIsActivityAuthorCurrentActorFct(props.activity)
);
const subjectParams = computed(() =>
useActivitySubjectParamsFct(props.activity)
);
const translation = computed((): string | undefined => { const translation = computed((): string | undefined => {
switch (props.activity.subject) { switch (props.activity.subject) {
case ActivityEventSubject.EVENT_CREATED: case ActivityEventSubject.EVENT_CREATED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You created the event {event}."; return "You created the event {event}.";
} }
return "The event {event} was created by {profile}."; return "The event {event} was created by {profile}.";
case ActivityEventSubject.EVENT_UPDATED: case ActivityEventSubject.EVENT_UPDATED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You updated the event {event}."; return "You updated the event {event}.";
} }
return "The event {event} was updated by {profile}."; return "The event {event} was updated by {profile}.";
case ActivityEventSubject.EVENT_DELETED: case ActivityEventSubject.EVENT_DELETED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You deleted the event {event}."; return "You deleted the event {event}.";
} }
return "The event {event} was deleted by {profile}."; return "The event {event} was deleted by {profile}.";
case ActivityEventCommentSubject.COMMENT_POSTED: case ActivityEventCommentSubject.COMMENT_POSTED:
if (subjectParams.comment_reply_to) { if (subjectParams.value.comment_reply_to) {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You replied to a comment on the event {event}."; return "You replied to a comment on the event {event}.";
} }
return "{profile} replied to a comment on the event {event}."; return "{profile} replied to a comment on the event {event}.";
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You posted a comment on the event {event}."; return "You posted a comment on the event {event}.";
} }
return "{profile} posted a comment on the event {event}."; return "{profile} posted a comment on the event {event}.";

View file

@ -44,9 +44,13 @@
<router-link <router-link
v-if="activity.object" v-if="activity.object"
:to="{ :to="{
name: RouteName.GROUP, name: RouteName.GROUP,
params: { preferredUsername: usernameWithDomain(activity.object as IActor) }, params: {
}" preferredUsername: usernameWithDomain(
activity.object as IActor
),
},
}"
>{{ subjectParams.group_name }}</router-link >{{ subjectParams.group_name }}</router-link
> >
<b v-else>{{ subjectParams.group_name }}</b> <b v-else>{{ subjectParams.group_name }}</b>
@ -78,19 +82,25 @@ const props = defineProps<{
activity: IActivity; activity: IActivity;
}>(); }>();
const isAuthorCurrentActor = useIsActivityAuthorCurrentActor()(props.activity); const useIsActivityAuthorCurrentActorFct = useIsActivityAuthorCurrentActor();
const useActivitySubjectParamsFct = useActivitySubjectParams();
const subjectParams = useActivitySubjectParams()(props.activity); const isAuthorCurrentActor = computed(() =>
useIsActivityAuthorCurrentActorFct(props.activity)
);
const subjectParams = computed(() =>
useActivitySubjectParamsFct(props.activity)
);
const translation = computed((): string | undefined => { const translation = computed((): string | undefined => {
switch (props.activity.subject) { switch (props.activity.subject) {
case ActivityGroupSubject.GROUP_CREATED: case ActivityGroupSubject.GROUP_CREATED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You created the group {group}."; return "You created the group {group}.";
} }
return "{profile} created the group {group}."; return "{profile} created the group {group}.";
case ActivityGroupSubject.GROUP_UPDATED: case ActivityGroupSubject.GROUP_UPDATED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You updated the group {group}."; return "You updated the group {group}.";
} }
return "{profile} updated the group {group}."; return "{profile} updated the group {group}.";
@ -114,8 +124,8 @@ const group = computed(() => props.activity.object as IGroup);
const details = computed((): string[] => { const details = computed((): string[] => {
const localDetails = []; const localDetails = [];
const changes = subjectParams.group_changes.split(","); const changes = subjectParams.value.group_changes.split(",");
if (changes.includes("name") && subjectParams.old_group_name) { if (changes.includes("name") && subjectParams.value.old_group_name) {
localDetails.push("{old_group_name} was renamed to {group}."); localDetails.push("{old_group_name} was renamed to {group}.");
} }
if (changes.includes("visibility") && group.value.visibility) { if (changes.includes("visibility") && group.value.visibility) {

View file

@ -51,58 +51,63 @@ const props = defineProps<{
activity: IActivity; activity: IActivity;
}>(); }>();
const isAuthorCurrentActor = useIsActivityAuthorCurrentActor()(props.activity); const isActivityAuthorCurrentActorFct = useIsActivityAuthorCurrentActor();
const activitySubjectParamsFct = useActivitySubjectParams();
const isActivityObjectCurrentActor = useIsActivityObjectCurrentActor();
const subjectParams = useActivitySubjectParams()(props.activity); const isAuthorCurrentActor = computed(() =>
isActivityAuthorCurrentActorFct(props.activity)
);
const subjectParams = computed(() => activitySubjectParamsFct(props.activity));
const member = computed(() => props.activity.object as IMember); const member = computed(() => props.activity.object as IMember);
const isObjectMemberCurrentActor = useIsActivityObjectCurrentActor()( const isObjectMemberCurrentActor = computed(() =>
props.activity isActivityObjectCurrentActor(props.activity)
); );
const translation = computed((): string | undefined => { const translation = computed((): string | undefined => {
switch (props.activity.subject) { switch (props.activity.subject) {
case ActivityMemberSubject.MEMBER_REQUEST: case ActivityMemberSubject.MEMBER_REQUEST:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You requested to join the group."; return "You requested to join the group.";
} }
return "{member} requested to join the group."; return "{member} requested to join the group.";
case ActivityMemberSubject.MEMBER_INVITED: case ActivityMemberSubject.MEMBER_INVITED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You invited {member}."; return "You invited {member}.";
} }
return "{member} was invited by {profile}."; return "{member} was invited by {profile}.";
case ActivityMemberSubject.MEMBER_ADDED: case ActivityMemberSubject.MEMBER_ADDED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You added the member {member}."; return "You added the member {member}.";
} }
return "{profile} added the member {member}."; return "{profile} added the member {member}.";
case ActivityMemberSubject.MEMBER_APPROVED: case ActivityMemberSubject.MEMBER_APPROVED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You approved {member}'s membership."; return "You approved {member}'s membership.";
} }
if (isObjectMemberCurrentActor) { if (isObjectMemberCurrentActor.value) {
return "Your membership was approved by {profile}."; return "Your membership was approved by {profile}.";
} }
return "{profile} approved {member}'s membership."; return "{profile} approved {member}'s membership.";
case ActivityMemberSubject.MEMBER_JOINED: case ActivityMemberSubject.MEMBER_JOINED:
return "{member} joined the group."; return "{member} joined the group.";
case ActivityMemberSubject.MEMBER_UPDATED: case ActivityMemberSubject.MEMBER_UPDATED:
if (subjectParams.member_role && subjectParams.old_role) { if (subjectParams.value.member_role && subjectParams.value.old_role) {
return roleUpdate.value; return roleUpdate.value;
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You updated the member {member}."; return "You updated the member {member}.";
} }
return "{profile} updated the member {member}."; return "{profile} updated the member {member}.";
case ActivityMemberSubject.MEMBER_REMOVED: case ActivityMemberSubject.MEMBER_REMOVED:
if (subjectParams.member_role === MemberRole.NOT_APPROVED) { if (subjectParams.value.member_role === MemberRole.NOT_APPROVED) {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You rejected {member}'s membership request."; return "You rejected {member}'s membership request.";
} }
return "{profile} rejected {member}'s membership request."; return "{profile} rejected {member}'s membership request.";
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You excluded member {member}."; return "You excluded member {member}.";
} }
return "{profile} excluded member {member}."; return "{profile} excluded member {member}.";
@ -111,7 +116,7 @@ const translation = computed((): string | undefined => {
case ActivityMemberSubject.MEMBER_REJECTED_INVITATION: case ActivityMemberSubject.MEMBER_REJECTED_INVITATION:
return "{member} rejected the invitation to join the group."; return "{member} rejected the invitation to join the group.";
case ActivityMemberSubject.MEMBER_ACCEPTED_INVITATION: case ActivityMemberSubject.MEMBER_ACCEPTED_INVITATION:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You accepted the invitation to join the group."; return "You accepted the invitation to join the group.";
} }
return "{member} accepted the invitation to join the group."; return "{member} accepted the invitation to join the group.";
@ -159,69 +164,69 @@ const iconColor = computed((): string | undefined => {
const roleUpdate = computed((): string | undefined => { const roleUpdate = computed((): string | undefined => {
if ( if (
Object.keys(MEMBER_ROLE_VALUE).includes(subjectParams.member_role) && Object.keys(MEMBER_ROLE_VALUE).includes(subjectParams.value.member_role) &&
Object.keys(MEMBER_ROLE_VALUE).includes(subjectParams.old_role) Object.keys(MEMBER_ROLE_VALUE).includes(subjectParams.value.old_role)
) { ) {
if ( if (
MEMBER_ROLE_VALUE[subjectParams.member_role] > MEMBER_ROLE_VALUE[subjectParams.value.member_role] >
MEMBER_ROLE_VALUE[subjectParams.old_role] MEMBER_ROLE_VALUE[subjectParams.value.old_role]
) { ) {
switch (subjectParams.member_role) { switch (subjectParams.value.member_role) {
case MemberRole.MODERATOR: case MemberRole.MODERATOR:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You promoted {member} to moderator."; return "You promoted {member} to moderator.";
} }
if (isObjectMemberCurrentActor) { if (isObjectMemberCurrentActor.value) {
return "You were promoted to moderator by {profile}."; return "You were promoted to moderator by {profile}.";
} }
return "{profile} promoted {member} to moderator."; return "{profile} promoted {member} to moderator.";
case MemberRole.ADMINISTRATOR: case MemberRole.ADMINISTRATOR:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You promoted {member} to administrator."; return "You promoted {member} to administrator.";
} }
if (isObjectMemberCurrentActor) { if (isObjectMemberCurrentActor.value) {
return "You were promoted to administrator by {profile}."; return "You were promoted to administrator by {profile}.";
} }
return "{profile} promoted {member} to administrator."; return "{profile} promoted {member} to administrator.";
default: default:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You promoted the member {member} to an unknown role."; return "You promoted the member {member} to an unknown role.";
} }
if (isObjectMemberCurrentActor) { if (isObjectMemberCurrentActor.value) {
return "You were promoted to an unknown role by {profile}."; return "You were promoted to an unknown role by {profile}.";
} }
return "{profile} promoted {member} to an unknown role."; return "{profile} promoted {member} to an unknown role.";
} }
} else { } else {
switch (subjectParams.member_role) { switch (subjectParams.value.member_role) {
case MemberRole.MODERATOR: case MemberRole.MODERATOR:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You demoted {member} to moderator."; return "You demoted {member} to moderator.";
} }
if (isObjectMemberCurrentActor) { if (isObjectMemberCurrentActor.value) {
return "You were demoted to moderator by {profile}."; return "You were demoted to moderator by {profile}.";
} }
return "{profile} demoted {member} to moderator."; return "{profile} demoted {member} to moderator.";
case MemberRole.MEMBER: case MemberRole.MEMBER:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You demoted {member} to simple member."; return "You demoted {member} to simple member.";
} }
if (isObjectMemberCurrentActor) { if (isObjectMemberCurrentActor.value) {
return "You were demoted to simple member by {profile}."; return "You were demoted to simple member by {profile}.";
} }
return "{profile} demoted {member} to simple member."; return "{profile} demoted {member} to simple member.";
default: default:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You demoted the member {member} to an unknown role."; return "You demoted the member {member} to an unknown role.";
} }
if (isObjectMemberCurrentActor) { if (isObjectMemberCurrentActor.value) {
return "You were demoted to an unknown role by {profile}."; return "You were demoted to an unknown role by {profile}.";
} }
return "{profile} demoted {member} to an unknown role."; return "{profile} demoted {member} to an unknown role.";
} }
} }
} else { } else {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You updated the member {member}."; return "You updated the member {member}.";
} }
return "{profile} updated the member {member}"; return "{profile} updated the member {member}";

View file

@ -49,24 +49,30 @@ const props = defineProps<{
activity: IActivity; activity: IActivity;
}>(); }>();
const isAuthorCurrentActor = useIsActivityAuthorCurrentActor()(props.activity); const useIsActivityAuthorCurrentActorFct = useIsActivityAuthorCurrentActor();
const useActivitySubjectParamsFct = useActivitySubjectParams();
const subjectParams = useActivitySubjectParams()(props.activity); const isAuthorCurrentActor = computed(() =>
useIsActivityAuthorCurrentActorFct(props.activity)
);
const subjectParams = computed(() =>
useActivitySubjectParamsFct(props.activity)
);
const translation = computed((): string | undefined => { const translation = computed((): string | undefined => {
switch (props.activity.subject) { switch (props.activity.subject) {
case ActivityPostSubject.POST_CREATED: case ActivityPostSubject.POST_CREATED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You created the post {post}."; return "You created the post {post}.";
} }
return "The post {post} was created by {profile}."; return "The post {post} was created by {profile}.";
case ActivityPostSubject.POST_UPDATED: case ActivityPostSubject.POST_UPDATED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You updated the post {post}."; return "You updated the post {post}.";
} }
return "The post {post} was updated by {profile}."; return "The post {post} was updated by {profile}.";
case ActivityPostSubject.POST_DELETED: case ActivityPostSubject.POST_DELETED:
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You deleted the post {post}."; return "You deleted the post {post}.";
} }
return "The post {post} was deleted by {profile}."; return "The post {post} was deleted by {profile}.";

View file

@ -61,10 +61,15 @@ import { IResource } from "@/types/resource";
const props = defineProps<{ const props = defineProps<{
activity: IActivity; activity: IActivity;
}>(); }>();
const useIsActivityAuthorCurrentActorFct = useIsActivityAuthorCurrentActor();
const useActivitySubjectParamsFct = useActivitySubjectParams();
const isAuthorCurrentActor = useIsActivityAuthorCurrentActor()(props.activity); const isAuthorCurrentActor = computed(() =>
useIsActivityAuthorCurrentActorFct(props.activity)
const subjectParams = useActivitySubjectParams()(props.activity); );
const subjectParams = computed(() =>
useActivitySubjectParamsFct(props.activity)
);
const resource = computed(() => props.activity.object as IResource); const resource = computed(() => props.activity.object as IResource);
@ -74,12 +79,12 @@ const translation = computed((): string | undefined => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
if (props.activity?.object?.type === "folder") { if (props.activity?.object?.type === "folder") {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You created the folder {resource}."; return "You created the folder {resource}.";
} }
return "{profile} created the folder {resource}."; return "{profile} created the folder {resource}.";
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You created the resource {resource}."; return "You created the resource {resource}.";
} }
return "{profile} created the resource {resource}."; return "{profile} created the resource {resource}.";
@ -88,23 +93,23 @@ const translation = computed((): string | undefined => {
// @ts-ignore // @ts-ignore
if (props.activity?.object?.type === "folder") { if (props.activity?.object?.type === "folder") {
if (parentDirectory.value === null) { if (parentDirectory.value === null) {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You moved the folder {resource} to the root folder."; return "You moved the folder {resource} to the root folder.";
} }
return "{profile} moved the folder {resource} to the root folder."; return "{profile} moved the folder {resource} to the root folder.";
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You moved the folder {resource} into {new_path}."; return "You moved the folder {resource} into {new_path}.";
} }
return "{profile} moved the folder {resource} into {new_path}."; return "{profile} moved the folder {resource} into {new_path}.";
} }
if (parentDirectory.value === null) { if (parentDirectory.value === null) {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You moved the resource {resource} to the root folder."; return "You moved the resource {resource} to the root folder.";
} }
return "{profile} moved the resource {resource} to the root folder."; return "{profile} moved the resource {resource} to the root folder.";
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You moved the resource {resource} into {new_path}."; return "You moved the resource {resource} into {new_path}.";
} }
return "{profile} moved the resource {resource} into {new_path}."; return "{profile} moved the resource {resource} into {new_path}.";
@ -112,12 +117,12 @@ const translation = computed((): string | undefined => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
if (props.activity?.object?.type === "folder") { if (props.activity?.object?.type === "folder") {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You renamed the folder from {old_resource_title} to {resource}."; return "You renamed the folder from {old_resource_title} to {resource}.";
} }
return "{profile} renamed the folder from {old_resource_title} to {resource}."; return "{profile} renamed the folder from {old_resource_title} to {resource}.";
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You renamed the resource from {old_resource_title} to {resource}."; return "You renamed the resource from {old_resource_title} to {resource}.";
} }
return "{profile} renamed the resource from {old_resource_title} to {resource}."; return "{profile} renamed the resource from {old_resource_title} to {resource}.";
@ -125,12 +130,12 @@ const translation = computed((): string | undefined => {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
if (props.activity?.object?.type === "folder") { if (props.activity?.object?.type === "folder") {
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You deleted the folder {resource}."; return "You deleted the folder {resource}.";
} }
return "{profile} deleted the folder {resource}."; return "{profile} deleted the folder {resource}.";
} }
if (isAuthorCurrentActor) { if (isAuthorCurrentActor.value) {
return "You deleted the resource {resource}."; return "You deleted the resource {resource}.";
} }
return "{profile} deleted the resource {resource}."; return "{profile} deleted the resource {resource}.";
@ -180,8 +185,8 @@ const parentPath = (parent: string | undefined): string | undefined => {
}; };
const parentDirectory = computed((): string | undefined | null => { const parentDirectory = computed((): string | undefined | null => {
if (subjectParams.resource_path) { if (subjectParams.value.resource_path) {
const parentPathResult = parentPath(subjectParams.resource_path); const parentPathResult = parentPath(subjectParams.value.resource_path);
const directory = parentPathResult?.split("/"); const directory = parentPathResult?.split("/");
const res = directory?.pop(); const res = directory?.pop();
res === "" ? null : res; res === "" ? null : res;

View file

@ -2,7 +2,7 @@
<div> <div>
<form <form
v-if="isAbleToComment" v-if="isAbleToComment"
@submit.prevent="createCommentForEvent(newComment)" @submit.prevent="createCommentForEvent(newCommentValue)"
class="mt-2" class="mt-2"
> >
<o-notification <o-notification
@ -12,8 +12,11 @@
>{{ t("Comments are closed for everybody else.") }}</o-notification >{{ t("Comments are closed for everybody else.") }}</o-notification
> >
<article class="flex flex-wrap items-start gap-2"> <article class="flex flex-wrap items-start gap-2">
<figure class="" v-if="newComment.actor"> <figure class="" v-if="newCommentValue.actor">
<identity-picker-wrapper :inline="false" v-model="newComment.actor" /> <identity-picker-wrapper
:inline="false"
v-model="newCommentValue.actor"
/>
</figure> </figure>
<div class="flex-1"> <div class="flex-1">
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
@ -23,9 +26,9 @@
v-if="currentActor" v-if="currentActor"
:currentActor="currentActor" :currentActor="currentActor"
mode="comment" mode="comment"
v-model="newComment.text" v-model="newCommentValue.text"
:aria-label="t('Comment body')" :aria-label="t('Comment body')"
@submit="createCommentForEvent(newComment)" @submit="createCommentForEvent(newCommentValue)"
:placeholder="t('Write a new comment')" :placeholder="t('Write a new comment')"
/> />
<p class="" v-if="emptyCommentError"> <p class="" v-if="emptyCommentError">
@ -35,7 +38,7 @@
<div class="" v-if="isEventOrganiser"> <div class="" v-if="isEventOrganiser">
<o-switch <o-switch
aria-labelledby="notify-participants-toggle" aria-labelledby="notify-participants-toggle"
v-model="newComment.isAnnouncement" v-model="newCommentValue.isAnnouncement"
>{{ t("Notify participants") }}</o-switch >{{ t("Notify participants") }}</o-switch
> >
</div> </div>
@ -70,10 +73,12 @@
v-for="comment in filteredOrderedComments" v-for="comment in filteredOrderedComments"
:key="comment.id" :key="comment.id"
@create-comment="createCommentForEvent" @create-comment="createCommentForEvent"
@delete-comment="commentToDelete => deleteComment({ @delete-comment="
commentId: commentToDelete.id as string, (commentToDelete) =>
originCommentId: commentToDelete.originComment?.id, deleteComment({
}) commentId: commentToDelete.id as string,
originCommentId: commentToDelete.originComment?.id,
})
" "
/> />
</transition-group> </transition-group>
@ -126,17 +131,19 @@ const Editor = defineAsyncComponent(
() => import("@/components/TextEditor.vue") () => import("@/components/TextEditor.vue")
); );
const newComment = ref<IComment>(props.newComment ?? new CommentModel()); const newCommentProps = computed(() => props.newComment);
const newCommentValue = ref<IComment>(new CommentModel(newCommentProps.value));
const emptyCommentError = ref(false); const emptyCommentError = ref(false);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });
watch(currentActor, () => { watch(currentActor, () => {
newComment.value.actor = currentActor.value as IPerson; newCommentValue.value.actor = currentActor.value as IPerson;
}); });
watch(newComment, (newCommentUpdated: IComment) => { watch(newCommentValue, (newCommentUpdated: IComment) => {
if (emptyCommentError.value) { if (emptyCommentError.value) {
emptyCommentError.value = ["", "<p></p>"].includes(newCommentUpdated.text); emptyCommentError.value = ["", "<p></p>"].includes(newCommentUpdated.text);
} }
@ -212,7 +219,7 @@ const {
createCommentForEventMutationDone(() => { createCommentForEventMutationDone(() => {
// and reset the new comment field // and reset the new comment field
newComment.value = new CommentModel(); newCommentValue.value = new CommentModel();
}); });
const notifier = inject<Notifier>("notifier"); const notifier = inject<Notifier>("notifier");

View file

@ -27,9 +27,12 @@ const props = defineProps<{
const selectedIndex = ref(0); const selectedIndex = ref(0);
watch(props.items, () => { watch(
selectedIndex.value = 0; () => props.items,
}); () => {
selectedIndex.value = 0;
}
);
// const onKeyDown = ({ event }: { event: KeyboardEvent }): boolean => { // const onKeyDown = ({ event }: { event: KeyboardEvent }): boolean => {
// if (event.key === "ArrowUp") { // if (event.key === "ArrowUp") {
@ -80,7 +83,9 @@ const selectItem = (index: number): void => {
color: rgba(black, 0.8); color: rgba(black, 0.8);
overflow: hidden; overflow: hidden;
font-size: 0.9rem; font-size: 0.9rem;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1), 0px 10px 20px rgba(0, 0, 0, 0.1); box-shadow:
0 0 0 1px rgba(0, 0, 0, 0.1),
0px 10px 20px rgba(0, 0, 0, 0.1);
} }
.item { .item {

View file

@ -41,12 +41,12 @@ const keys = computed((): string[] => {
return Array.from(monthlyGroupedEvents.value.keys()).sort((a, b) => { return Array.from(monthlyGroupedEvents.value.keys()).sort((a, b) => {
const aParams = a.split("-").map((x) => parseInt(x, 10)) as [ const aParams = a.split("-").map((x) => parseInt(x, 10)) as [
number, number,
number number,
]; ];
const aDate = new Date(...aParams); const aDate = new Date(...aParams);
const bParams = b.split("-").map((x) => parseInt(x, 10)) as [ const bParams = b.split("-").map((x) => parseInt(x, 10)) as [
number, number,
number number,
]; ];
const bDate = new Date(...bParams); const bDate = new Date(...bParams);
return props.order === "DESC" return props.order === "DESC"

View file

@ -22,7 +22,7 @@ const props = defineProps<{
preferredUsername: string; preferredUsername: string;
}>(); }>();
const { group } = useGroup(props.preferredUsername); const { group } = useGroup(computed(() => props.preferredUsername));
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });

View file

@ -2,7 +2,7 @@
<div class="map-container"> <div class="map-container">
<l-map <l-map
:zoom="mergedOptions.zoom" :zoom="mergedOptions.zoom"
:style="`height: ${mergedOptions.height}; width: ${mergedOptions.width}`" :style="{ height: mergedOptions.height, width: mergedOptions.width }"
class="leaflet-map" class="leaflet-map"
:center="[lat, lon]" :center="[lat, lon]"
@click="clickMap" @click="clickMap"

View file

@ -86,6 +86,8 @@ const imageSource = computed(
rgba(2, 0, 36, 0.75) 90%, rgba(2, 0, 36, 0.75) 90%,
rgba(2, 0, 36, 0.85) 100% rgba(2, 0, 36, 0.85) 100%
); );
transition: opacity 0.1s ease-in-out, visibility 0.1s ease-in-out; transition:
opacity 0.1s ease-in-out,
visibility 0.1s ease-in-out;
} }
</style> </style>

View file

@ -91,7 +91,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useHead } from "@vueuse/head"; import { useHead } from "@vueuse/head";
import { computed, ref } from "vue"; import { computed, inject, ref } from "vue";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { useMutation } from "@vue/apollo-composable"; import { useMutation } from "@vue/apollo-composable";
import { import {
@ -102,6 +102,7 @@ import RouteName from "@/router/name";
import { IApplication } from "@/types/application.model"; import { IApplication } from "@/types/application.model";
import { scope as oAuthScopes } from "./scopes"; import { scope as oAuthScopes } from "./scopes";
import AlertCircle from "vue-material-design-icons/AlertCircle.vue"; import AlertCircle from "vue-material-design-icons/AlertCircle.vue";
import { Notifier } from "@/plugins/notifier";
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });
@ -123,23 +124,26 @@ const collapses = computed(() =>
.filter((localScope) => localScope) .filter((localScope) => localScope)
); );
const { mutate: authorizeMutation, onDone: onAuthorizeMutationDone } = const {
useMutation< mutate: authorizeMutation,
{ onDone: onAuthorizeMutationDone,
authorizeApplication: { onError: onAuthorizeMutationError,
code: string; } = useMutation<
state: string; {
clientId: string; authorizeApplication: {
scope: string; code: string;
}; state: string;
}, clientId: string;
{ scope: string;
applicationClientId: string; };
redirectURI: string; },
state?: string | null; {
scope?: string | null; applicationClientId: string;
} redirectURI: string;
>(AUTORIZE_APPLICATION); state?: string | null;
scope?: string | null;
}
>(AUTORIZE_APPLICATION);
const authorize = () => { const authorize = () => {
authorizeMutation({ authorizeMutation({
@ -209,6 +213,14 @@ onAuthorizeMutationDone(({ data }) => {
} }
}); });
const notifier = inject<Notifier>("notifier");
onAuthorizeMutationError(({ graphQLErrors }) => {
graphQLErrors.forEach(({ message }) => {
notifier?.error(message);
});
});
useHead({ useHead({
title: computed(() => t("Authorize application")), title: computed(() => t("Authorize application")),
}); });

View file

@ -133,10 +133,57 @@ export const scope: Record<
"write:group:members": { "write:group:members": {
title: t("Manage group members"), title: t("Manage group members"),
text: t( text: t(
"This application will be allowed to manage group members in all of the groups you're a member of" "This application will be allowed to list group members in all of the groups you're a member of"
), ),
icon: "account-circle", icon: "account-circle",
}, },
"read:user:media": {
title: t("Read user media"),
text: t(
"This application will be allowed to list the media you've uploaded"
),
icon: "image",
},
"read:user:settings": {
title: t("Read user settings"),
text: t("This application will be allowed to access your user settings"),
icon: "cog",
},
"read:user:activity_settings": {
title: t("Read user activity settings"),
text: t(
"This application will be allowed to access your user activity settings"
),
icon: "cog",
},
"read:user:participations": {
title: t("Read user participations"),
text: t(
"This application will be allowed to list and view the events you're participating to"
),
icon: "account-circle",
},
"read:user:memberships": {
title: t("Read user memberships"),
text: t(
"This application will be allowed to list and view the groups you're a member of"
),
icon: "account-circle",
},
"read:user:draft_events": {
title: t("Access drafts events"),
text: t(
"This application will be allowed to list and view your draft events"
),
icon: "calendar",
},
"read:user:group_suggested_events": {
title: t("Access group suggested events"),
text: t(
"This application will be allowed to list your suggested group events"
),
icon: "calendar",
},
"read:profile:organized_events": { "read:profile:organized_events": {
title: t("Access organized events"), title: t("Access organized events"),
text: t( text: t(

View file

@ -90,9 +90,9 @@ const { onDone, onError, mutate } = useMutation<{
confirmParticipation: IParticipant; confirmParticipation: IParticipant;
}>(CONFIRM_PARTICIPATION); }>(CONFIRM_PARTICIPATION);
mutate({ mutate(() => ({
token: props.token, token: props.token,
}); }));
onDone(async ({ data }) => { onDone(async ({ data }) => {
participation.value = data?.confirmParticipation; participation.value = data?.confirmParticipation;

View file

@ -17,7 +17,7 @@ const props = defineProps<{
uuid: string; uuid: string;
}>(); }>();
const { event } = useFetchEvent(props.uuid); const { event } = useFetchEvent(computed(() => props.uuid));
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });

View file

@ -156,7 +156,7 @@ const { anonymousActorId } = useAnonymousActorId();
const props = defineProps<{ const props = defineProps<{
uuid: string; uuid: string;
}>(); }>();
const { event, loading } = useFetchEventBasic(props.uuid); const { event, loading } = useFetchEventBasic(computed(() => props.uuid));
const { t, locale } = useI18n({ useScope: "global" }); const { t, locale } = useI18n({ useScope: "global" });

View file

@ -104,7 +104,7 @@ import { useI18n } from "vue-i18n";
const props = defineProps<{ uuid: string }>(); const props = defineProps<{ uuid: string }>();
const { event } = useFetchEvent(props.uuid); const { event } = useFetchEvent(computed(() => props.uuid));
const { anonymousParticipationConfig } = useAnonymousParticipationConfig(); const { anonymousParticipationConfig } = useAnonymousParticipationConfig();

View file

@ -49,7 +49,7 @@ import RouteName from "@/router/name";
import { IMinimalActor, usernameWithDomain } from "@/types/actor"; import { IMinimalActor, usernameWithDomain } from "@/types/actor";
import ResourceDropdown from "./ResourceDropdown.vue"; import ResourceDropdown from "./ResourceDropdown.vue";
import { UPDATE_RESOURCE } from "@/graphql/resources"; import { UPDATE_RESOURCE } from "@/graphql/resources";
import { inject, ref } from "vue"; import { ComputedRef, computed, inject, ref } from "vue";
import { formatDateTimeString } from "@/filters/datetime"; import { formatDateTimeString } from "@/filters/datetime";
import { useMutation } from "@vue/apollo-composable"; import { useMutation } from "@vue/apollo-composable";
import { resourcePathArray } from "@/components/Resource/utils"; import { resourcePathArray } from "@/components/Resource/utils";
@ -73,11 +73,11 @@ const emit = defineEmits<{
const list = ref([]); const list = ref([]);
const groupObject: Record<string, unknown> = { const groupObject: ComputedRef<Record<string, unknown>> = computed(() => ({
name: `folder-${props.resource?.title}`, name: `folder-${props.resource?.title}`,
pull: false, pull: false,
put: ["resources"], put: ["resources"],
}; }));
const onChange = async (evt: any) => { const onChange = async (evt: any) => {
if (evt.added && evt.added.element) { if (evt.added && evt.added.element) {

View file

@ -92,14 +92,17 @@ const emit = defineEmits(["update-resource", "close-move-modal"]);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });
const initialResourceProp = computed(() => props.initialResource);
const usernameProp = computed(() => props.username);
const resourcePath = reactive<{ const resourcePath = reactive<{
path: string | undefined; path: string | undefined;
username: string; username: string;
id: string | undefined; id: string | undefined;
}>({ }>({
id: props.initialResource.parent?.id, id: initialResourceProp.value.parent?.id,
path: props.initialResource.parent?.path, path: initialResourceProp.value.parent?.path,
username: props.username, username: usernameProp.value,
}); });
const RESOURCES_PER_PAGE = 10; const RESOURCES_PER_PAGE = 10;
@ -111,27 +114,30 @@ const { result: resourceResult, refetch } = useQuery<{ resource: IResource }>(
if (resourcePath?.path) { if (resourcePath?.path) {
return { return {
path: resourcePath?.path, path: resourcePath?.path,
username: props.username, username: usernameProp.value,
page: page.value, page: page.value,
limit: RESOURCES_PER_PAGE, limit: RESOURCES_PER_PAGE,
}; };
} }
return { path: "/", username: props.username }; return { path: "/", username: usernameProp.value };
} }
); );
const resource = computed(() => resourceResult.value?.resource); const resource = computed(() => resourceResult.value?.resource);
const goDown = (element: IResource): void => { const goDown = (element: IResource): void => {
if (element.type === "folder" && element.id !== props.initialResource.id) { if (
element.type === "folder" &&
element.id !== initialResourceProp.value.id
) {
resourcePath.id = element.id; resourcePath.id = element.id;
resourcePath.path = element.path; resourcePath.path = element.path;
console.debug("Gone into folder", resourcePath); console.debug("Gone into folder", resourcePath);
} }
}; };
watch(props.initialResource, () => { watch(initialResourceProp, () => {
if (props.initialResource) { if (initialResourceProp.value) {
resourcePath.id = props.initialResource?.parent?.id; resourcePath.id = props.initialResource?.parent?.id;
resourcePath.path = props.initialResource?.parent?.path; resourcePath.path = props.initialResource?.parent?.path;
refetch(); refetch();
@ -144,21 +150,21 @@ const updateResource = (): void => {
emit( emit(
"update-resource", "update-resource",
{ {
id: props.initialResource.id, id: initialResourceProp.value.id,
title: props.initialResource.title, title: initialResourceProp.value.title,
parent: parent, parent: parent,
path: parent?.path ?? "/", path: parent?.path ?? "/",
}, },
props.initialResource.parent initialResourceProp.value.parent
); );
}; };
const moveDisabled = computed((): boolean | undefined => { const moveDisabled = computed((): boolean | undefined => {
return ( return (
(props.initialResource.parent && (initialResourceProp.value.parent &&
resourcePath && resourcePath &&
props.initialResource.parent.path === resourcePath.path) || initialResourceProp.value.parent.path === resourcePath.path) ||
(props.initialResource.parent === undefined && (initialResourceProp.value.parent === undefined &&
resourcePath && resourcePath &&
resourcePath.path === "/") resourcePath.path === "/")
); );

View file

@ -10,7 +10,7 @@
> >
<event-card <event-card
v-if="instanceOfIEvent(activeElement)" v-if="instanceOfIEvent(activeElement)"
:event="(activeElement as IEvent)" :event="activeElement as IEvent"
mode="column" mode="column"
:options="{ :options="{
isRemoteEvent: activeElement.__typename === 'EventResult', isRemoteEvent: activeElement.__typename === 'EventResult',
@ -19,7 +19,7 @@
/> />
<group-card <group-card
v-else v-else
:group="(activeElement as IGroup)" :group="activeElement as IGroup"
mode="column" mode="column"
:isRemoteGroup="activeElement.__typename === 'GroupResult'" :isRemoteGroup="activeElement.__typename === 'GroupResult'"
:isLoggedIn="isLoggedIn" :isLoggedIn="isLoggedIn"
@ -31,7 +31,7 @@
> >
<event-card <event-card
v-if="instanceOfIEvent(activeElement)" v-if="instanceOfIEvent(activeElement)"
:event="(activeElement as IEvent)" :event="activeElement as IEvent"
mode="column" mode="column"
:options="{ :options="{
isRemoteEvent: activeElement.__typename === 'EventResult', isRemoteEvent: activeElement.__typename === 'EventResult',
@ -40,7 +40,7 @@
/> />
<group-card <group-card
v-else v-else
:group="(activeElement as IGroup)" :group="activeElement as IGroup"
mode="column" mode="column"
:isRemoteGroup="activeElement.__typename === 'GroupResult'" :isRemoteGroup="activeElement.__typename === 'GroupResult'"
:isLoggedIn="isLoggedIn" :isLoggedIn="isLoggedIn"
@ -330,7 +330,11 @@ watch([markers, eventMarkers, groupMarkers], () => {
text-align: center; text-align: center;
border-radius: 15px; border-radius: 15px;
font: 12px "Helvetica Neue", Arial, Helvetica, sans-serif; font:
12px "Helvetica Neue",
Arial,
Helvetica,
sans-serif;
} }
.marker-cluster span { .marker-cluster span {

View file

@ -325,13 +325,18 @@ const transformPastedHTML = (html: string): string => {
return html; return html;
}; };
const ariaLabel = computed(() => props.ariaLabel);
const headingLevel = computed(() => props.headingLevel);
const placeholder = computed(() => props.placeholder);
const value = computed(() => props.modelValue);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });
const editor = useEditor({ const editor = useEditor({
editorProps: { editorProps: {
attributes: { attributes: {
"aria-multiline": isShortMode.value.toString(), "aria-multiline": isShortMode.value.toString(),
"aria-label": props.ariaLabel ?? "", "aria-label": ariaLabel.value ?? "",
role: "textbox", role: "textbox",
class: class:
"prose dark:prose-invert prose-sm lg:prose-lg xl:prose-xl bg-zinc-50 dark:bg-zinc-700 focus:outline-none !max-w-full", "prose dark:prose-invert prose-sm lg:prose-lg xl:prose-xl bg-zinc-50 dark:bg-zinc-700 focus:outline-none !max-w-full",
@ -342,7 +347,7 @@ const editor = useEditor({
Blockquote, Blockquote,
BulletList, BulletList,
Heading.configure({ Heading.configure({
levels: props.headingLevel, levels: headingLevel.value,
}), }),
Document, Document,
Paragraph, Paragraph,
@ -366,18 +371,16 @@ const editor = useEditor({
submit: () => emit("submit"), submit: () => emit("submit"),
}), }),
Placeholder.configure({ Placeholder.configure({
placeholder: props.placeholder ?? t("Write something"), placeholder: placeholder.value ?? t("Write something"),
}), }),
], ],
injectCSS: false, injectCSS: false,
content: props.modelValue, content: value.value,
onUpdate: () => { onUpdate: () => {
emit("update:modelValue", editor.value?.getHTML()); emit("update:modelValue", editor.value?.getHTML());
}, },
}); });
const value = computed(() => props.modelValue);
watch(value, (val: string) => { watch(value, (val: string) => {
if (!editor.value) return; if (!editor.value) return;
if (val !== editor.value.getHTML()) { if (val !== editor.value.getHTML()) {
@ -479,7 +482,9 @@ onBeforeUnmount(() => {
@import "./Editor/style.scss"; @import "./Editor/style.scss";
.menubar { .menubar {
transition: visibility 0.2s 0.4s, opacity 0.2s 0.4s; transition:
visibility 0.2s 0.4s,
opacity 0.2s 0.4s;
&__button { &__button {
font-weight: bold; font-weight: bold;

View file

@ -84,14 +84,19 @@ const emit = defineEmits(["confirm", "cancel", "close"]);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });
const hasInput = computed(() => props.hasInput);
const onConfirm = computed(() => props.onConfirm);
const onCancel = computed(() => props.onCancel);
const inputAttrs = computed(() => props.inputAttrs);
// const modalOpened = ref(false); // const modalOpened = ref(false);
const prompt = ref<string>(props.hasInput ? props.inputAttrs?.value ?? "" : ""); const prompt = ref<string>(hasInput.value ? inputAttrs.value.value ?? "" : "");
const input = ref(); const input = ref();
// https://github.com/oruga-ui/oruga/issues/339 // https://github.com/oruga-ui/oruga/issues/339
const promptInputComp = computed(() => input.value?.$refs.input); const promptInputComp = computed(() => input.value?.$refs.input);
if (props.hasInput) { if (hasInput.value) {
useFocus(promptInputComp, { initialValue: true }); useFocus(promptInputComp, { initialValue: true });
} }
@ -128,7 +133,7 @@ const confirm = () => {
return; return;
} }
} }
props.onConfirm(prompt.value); onConfirm.value(prompt.value);
close(); close();
}; };
@ -144,8 +149,8 @@ const close = () => {
*/ */
const cancel = (source: string) => { const cancel = (source: string) => {
emit("cancel", source); emit("cancel", source);
if (props?.onCancel) { if (onCancel.value) {
props?.onCancel(source); onCancel.value(source);
} }
close(); close();
}; };

View file

@ -1,9 +1,10 @@
import { DELETE_EVENT, FETCH_EVENT, FETCH_EVENT_BASIC } from "@/graphql/event"; import { DELETE_EVENT, FETCH_EVENT, FETCH_EVENT_BASIC } from "@/graphql/event";
import { IEvent } from "@/types/event.model"; import { IEvent } from "@/types/event.model";
import { useMutation, useQuery } from "@vue/apollo-composable"; import { useMutation, useQuery } from "@vue/apollo-composable";
import { computed } from "vue"; import { Ref, computed, unref } from "vue";
export function useFetchEvent(uuid?: string) { export function useFetchEvent(uuidValue?: string | Ref<string>) {
const uuid = unref(uuidValue);
const { const {
result: fetchEventResult, result: fetchEventResult,
loading, loading,
@ -26,7 +27,8 @@ export function useFetchEvent(uuid?: string) {
return { event, loading, error, onError, onResult, refetch }; return { event, loading, error, onError, onResult, refetch };
} }
export function useFetchEventBasic(uuid: string) { export function useFetchEventBasic(uuidValue?: string | Ref<string>) {
const uuid = unref(uuidValue);
const { const {
result: fetchEventResult, result: fetchEventResult,
loading, loading,

View file

@ -1567,5 +1567,17 @@
"Announcements": "Announcements", "Announcements": "Announcements",
"Application authorized": "Application authorized", "Application authorized": "Application authorized",
"Check your device to continue. You may now close this window.": "Check your device to continue. You may now close this window.", "Check your device to continue. You may now close this window.": "Check your device to continue. You may now close this window.",
"Participants to {eventTitle}": "Participants to {eventTitle}" "Participants to {eventTitle}": "Participants to {eventTitle}",
"Read user media": "Read user media",
"This application will be allowed to list the media you've uploaded": "This application will be allowed to list the media you've uploaded",
"Read user settings": "Read user settings",
"This application will be allowed to access your user settings": "This application will be allowed to access your user settings",
"Read user activity settings": "Read user activity settings",
"This application will be allowed to access your user activity settings": "This application will be allowed to access your user activity settings",
"Read user participations": "Read user participations",
"Read user memberships": "Read user memberships",
"Access drafts events": "Access drafts events",
"This application will be allowed to list and view your draft events": "This application will be allowed to list and view your draft events",
"Access group suggested events": "Access group suggested events",
"This application will be allowed to list your suggested group events": "This application will be allowed to list your suggested group events"
} }

View file

@ -1563,5 +1563,17 @@
"© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap", "© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap",
"Application authorized": "Application autorisée", "Application authorized": "Application autorisée",
"Check your device to continue. You may now close this window.": "Vérifiez votre appareil pour continuer. Vous pouvez maintenant fermer cette fenêtre.", "Check your device to continue. You may now close this window.": "Vérifiez votre appareil pour continuer. Vous pouvez maintenant fermer cette fenêtre.",
"Participants to {eventTitle}": "Participant·es à {eventTitle}" "Participants to {eventTitle}": "Participant·es à {eventTitle}",
"Read user media": "Lire les médias utilisateur·ice",
"This application will be allowed to list the media you've uploaded": "Cette application sera autorisée a lister les médias que vous avez téléversé",
"Read user settings": "Lire les paramètres utilisateur·ice",
"This application will be allowed to access your user settings": "Cette application sera autorisée a accéder à vos paramètres utilisateur·ice",
"Read user activity settings": "Lire les paramètres d'activité utilisateur·ice",
"This application will be allowed to access your user activity settings": "Cette application sera autorisée a accéder à vos paramètres utilisateur·ice d'activité",
"Read user participations": "Accéder aux participations de l'utilisateur·ice",
"Read user memberships": "Accéder aux adhésions de l'utilisateur·ice",
"Access drafts events": "Accéder aux événements brouillons",
"This application will be allowed to list and view your draft events": "Cetta application sera autorisée à lister et accéder à vos événements brouillons",
"Access group suggested events": "Accéder aux événements des groupes suggérés",
"This application will be allowed to list your suggested group events": "Cetta application sera autorisée à lister les événements de vos groupes qui vous sont suggérés"
} }

View file

@ -12,6 +12,7 @@ export const beforeRegisterGuard: NavigationGuard = async (to, from, next) => {
); );
onResult(({ data }) => { onResult(({ data }) => {
if (!data) return next();
const { config } = data; const { config } = data;
if (!config.registrationsOpen && !config.registrationsAllowlist) { if (!config.registrationsOpen && !config.registrationsAllowlist) {

View file

@ -34,10 +34,13 @@ export const checkProviderConfig = (
export const convertConfig = ( export const convertConfig = (
configs: IKeyValueConfig[] configs: IKeyValueConfig[]
): Record<string, any> => { ): Record<string, any> => {
return configs.reduce((acc, config) => { return configs.reduce(
acc[config.key] = toType(config.value, config.type); (acc, config) => {
return acc; acc[config.key] = toType(config.value, config.type);
}, {} as Record<string, any>); return acc;
},
{} as Record<string, any>
);
}; };
const toType = (value: string, type: string): string | number | boolean => { const toType = (value: string, type: string): string | number | boolean => {

View file

@ -16,6 +16,10 @@ export interface IActor {
} }
export type IMinimalActor = Pick<IActor, "preferredUsername" | "domain">; export type IMinimalActor = Pick<IActor, "preferredUsername" | "domain">;
export type IMinimalActorWithName = Pick<
IActor,
"preferredUsername" | "domain" | "name"
>;
export class Actor implements IActor { export class Actor implements IActor {
id?: string; id?: string;
@ -72,13 +76,13 @@ export function usernameWithDomain(
return actor.preferredUsername; return actor.preferredUsername;
} }
export function displayName(actor: IActor | undefined): string { export function displayName(actor: IMinimalActorWithName | undefined): string {
return actor && actor.name != null && actor.name !== "" return actor && actor.name != null && actor.name !== ""
? actor.name ? actor.name
: usernameWithDomain(actor); : usernameWithDomain(actor);
} }
export function displayNameAndUsername(actor: IActor): string { export function displayNameAndUsername(actor: IMinimalActorWithName): string {
if (actor.name) { if (actor.name) {
return `${actor.name} (@${usernameWithDomain(actor)})`; return `${actor.name} (@${usernameWithDomain(actor)})`;
} }

View file

@ -25,7 +25,7 @@
aria-required="true" aria-required="true"
required required
v-model="identity.name" v-model="identity.name"
@input="(event) => updateUsername(event.target.value)" @input="(event: any) => updateUsername(event.target.value)"
id="identity-display-name" id="identity-display-name"
dir="auto" dir="auto"
/> />
@ -125,7 +125,8 @@
tag="a" tag="a"
icon-left="rss" icon-left="rss"
@click=" @click="
(e: Event) => copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom') (e: Event) =>
copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom')
" "
:href="tokenToURL(feedToken.token, 'atom')" :href="tokenToURL(feedToken.token, 'atom')"
target="_blank" target="_blank"
@ -142,7 +143,8 @@
<o-button <o-button
tag="a" tag="a"
@click=" @click="
(e: Event) => copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics') (e: Event) =>
copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics')
" "
icon-left="calendar-sync" icon-left="calendar-sync"
:href="tokenToURL(feedToken.token, 'ics')" :href="tokenToURL(feedToken.token, 'ics')"

View file

@ -80,8 +80,9 @@ const Editor = defineAsyncComponent(
const props = defineProps<{ preferredUsername: string }>(); const props = defineProps<{ preferredUsername: string }>();
const { currentActor } = useCurrentActorClient(); const { currentActor } = useCurrentActorClient();
const preferredUsername = computed(() => props.preferredUsername);
const { group } = useGroup(props.preferredUsername); const { group } = useGroup(preferredUsername);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });

View file

@ -57,6 +57,7 @@
/> />
<form <form
v-else-if="!discussionLoading && !error" v-else-if="!discussionLoading && !error"
v-show="editTitleMode"
@submit.prevent="updateDiscussion" @submit.prevent="updateDiscussion"
class="w-full" class="w-full"
> >
@ -108,9 +109,12 @@
text: comment.text, text: comment.text,
}) })
" "
@delete-comment="(comment: IComment) => deleteComment({ @delete-comment="
commentId: comment.id as string, (comment: IComment) =>
})" deleteComment({
commentId: comment.id as string,
})
"
/> />
<o-button <o-button
v-if="discussion.comments.elements.length < discussion.comments.total" v-if="discussion.comments.elements.length < discussion.comments.total"
@ -152,7 +156,12 @@ import DiscussionComment from "@/components/Discussion/DiscussionComment.vue";
import { DELETE_COMMENT, UPDATE_COMMENT } from "@/graphql/comment"; import { DELETE_COMMENT, UPDATE_COMMENT } from "@/graphql/comment";
import RouteName from "../../router/name"; import RouteName from "../../router/name";
import { IComment } from "../../types/comment.model"; import { IComment } from "../../types/comment.model";
import { ApolloCache, FetchResult, gql } from "@apollo/client/core"; import {
ApolloCache,
FetchResult,
InMemoryCache,
gql,
} from "@apollo/client/core";
import { useMutation, useQuery } from "@vue/apollo-composable"; import { useMutation, useQuery } from "@vue/apollo-composable";
import { import {
defineAsyncComponent, defineAsyncComponent,
@ -198,11 +207,11 @@ const {
subscribeToMore({ subscribeToMore({
document: DISCUSSION_COMMENT_CHANGED, document: DISCUSSION_COMMENT_CHANGED,
variables: { variables: () => ({
slug: props.slug, slug: props.slug,
page: page.value, page: page.value,
limit: COMMENTS_PER_PAGE, limit: COMMENTS_PER_PAGE,
}, }),
updateQuery( updateQuery(
previousResult: any, previousResult: any,
{ subscriptionData }: { subscriptionData: any } { subscriptionData }: { subscriptionData: any }
@ -253,7 +262,41 @@ const editTitleMode = ref(false);
const hasMoreComments = ref(true); const hasMoreComments = ref(true);
const error = ref<string | null>(null); const error = ref<string | null>(null);
const { mutate: replyToDiscussionMutation } = useMutation(REPLY_TO_DISCUSSION); const { mutate: replyToDiscussionMutation } = useMutation<{
replyToDiscussion: IDiscussion;
}>(REPLY_TO_DISCUSSION, () => ({
update: (store: ApolloCache<InMemoryCache>, { data }: FetchResult) => {
const discussionData = store.readQuery<{
discussion: IDiscussion;
}>({
query: GET_DISCUSSION,
variables: {
slug: props.slug,
page: page.value,
},
});
if (!discussionData) return;
const { discussion: discussionCached } = discussionData;
store.writeQuery({
query: GET_DISCUSSION,
variables: { slug: props.slug, page: page.value },
data: {
discussion: {
...discussionCached,
lastComment: data?.replyToDiscussion.lastComment,
comments: {
elements: [
...discussionCached.comments.elements,
data?.replyToDiscussion.lastComment,
],
total: discussionCached.comments.total + 1,
},
},
},
});
},
}));
const reply = () => { const reply = () => {
if (newComment.value === "") return; if (newComment.value === "") return;

View file

@ -90,9 +90,10 @@ const page = useRouteQuery("page", 1, integerTransformer);
const DISCUSSIONS_PER_PAGE = 10; const DISCUSSIONS_PER_PAGE = 10;
const props = defineProps<{ preferredUsername: string }>(); const props = defineProps<{ preferredUsername: string }>();
const preferredUsername = computed(() => props.preferredUsername);
const { group, loading: groupLoading } = useGroupDiscussionsList( const { group, loading: groupLoading } = useGroupDiscussionsList(
props.preferredUsername, preferredUsername.value,
{ {
discussionsPage: page.value, discussionsPage: page.value,
discussionsLimit: DISCUSSIONS_PER_PAGE, discussionsLimit: DISCUSSIONS_PER_PAGE,
@ -100,7 +101,7 @@ const { group, loading: groupLoading } = useGroupDiscussionsList(
); );
const { person, loading: personLoading } = usePersonStatusGroup( const { person, loading: personLoading } = usePersonStatusGroup(
props.preferredUsername preferredUsername.value
); );
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });

View file

@ -127,7 +127,7 @@
<label class="o-field__label field-label">{{ t("Description") }}</label> <label class="o-field__label field-label">{{ t("Description") }}</label>
<editor-component <editor-component
v-if="currentActor" v-if="currentActor"
:current-actor="(currentActor as IPerson)" :current-actor="currentActor as IPerson"
v-model="event.description" v-model="event.description"
:aria-label="t('Event description body')" :aria-label="t('Event description body')"
:placeholder="t('Describe your event')" :placeholder="t('Describe your event')"

View file

@ -368,7 +368,7 @@ const {
onError: onFetchEventError, onError: onFetchEventError,
loading: eventLoading, loading: eventLoading,
refetch: refetchEvent, refetch: refetchEvent,
} = useFetchEvent(props.uuid); } = useFetchEvent(propsUUID);
watch(propsUUID, (newUUid) => { watch(propsUUID, (newUUid) => {
refetchEvent({ uuid: newUUid }); refetchEvent({ uuid: newUUid });

View file

@ -188,7 +188,7 @@
<event-participation-card <event-participation-card
v-for="participation in month[1]" v-for="participation in month[1]"
:key="participation.id" :key="participation.id"
:participation="(participation as IParticipant)" :participation="participation as IParticipant"
:options="{ hideDate: false }" :options="{ hideDate: false }"
@event-deleted="eventDeleted" @event-deleted="eventDeleted"
class="participation" class="participation"

View file

@ -83,7 +83,9 @@
detail-key="id" detail-key="id"
v-model:checked-rows="checkedRows" v-model:checked-rows="checkedRows"
checkable checkable
:is-row-checkable="(row: IParticipant) => row.role !== ParticipantRole.CREATOR" :is-row-checkable="
(row: IParticipant) => row.role !== ParticipantRole.CREATOR
"
checkbox-position="left" checkbox-position="left"
:show-detail-icon="false" :show-detail-icon="false"
:loading="participantsLoading" :loading="participantsLoading"
@ -108,10 +110,10 @@
:label="t('Participant')" :label="t('Participant')"
v-slot="props" v-slot="props"
> >
<article> <article class="flex gap-2">
<figure v-if="props.row.actor.avatar"> <figure v-if="props.row.actor.avatar">
<img <img
class="rounded" class="rounded-full w-12 h-12 object-cover"
:src="props.row.actor.avatar.url" :src="props.row.actor.avatar.url"
alt="" alt=""
height="48" height="48"
@ -125,13 +127,15 @@
<AccountCircle v-else :size="48" /> <AccountCircle v-else :size="48" />
<div> <div>
<div class="prose dark:prose-invert"> <div class="prose dark:prose-invert">
<span v-if="props.row.actor.preferredUsername !== 'anonymous'"> <p v-if="props.row.actor.preferredUsername !== 'anonymous'">
<span v-if="props.row.actor.name">{{ <span v-if="props.row.actor.name">{{
props.row.actor.name props.row.actor.name
}}</span }}</span
><br /> ><br />
>@{{ usernameWithDomain(props.row.actor) }}</span <span class="text-sm"
> >@{{ usernameWithDomain(props.row.actor) }}</span
>
</p>
<span v-else> <span v-else>
{{ t("Anonymous participant") }} {{ t("Anonymous participant") }}
</span> </span>

View file

@ -47,7 +47,7 @@
:default-sort-direction="'desc'" :default-sort-direction="'desc'"
:default-sort="['insertedAt', 'desc']" :default-sort="['insertedAt', 'desc']"
@page-change="loadMoreFollowers" @page-change="loadMoreFollowers"
@sort="(field, order) => $emit('sort', field, order)" @sort="(field: any, order: any) => $emit('sort', field, order)"
> >
<o-table-column <o-table-column
field="actor.preferredUsername" field="actor.preferredUsername"
@ -136,6 +136,8 @@ import { Notifier } from "@/plugins/notifier";
const props = defineProps<{ preferredUsername: string }>(); const props = defineProps<{ preferredUsername: string }>();
const preferredUsername = computed(() => props.preferredUsername);
const page = useRouteQuery("page", 1, integerTransformer); const page = useRouteQuery("page", 1, integerTransformer);
const pending = useRouteQuery("pending", false, booleanTransformer); const pending = useRouteQuery("pending", false, booleanTransformer);
@ -241,5 +243,5 @@ const personMemberships = computed(
() => person.value?.memberships ?? { total: 0, elements: [] } () => person.value?.memberships ?? { total: 0, elements: [] }
); );
const { person } = usePersonStatusGroup(props.preferredUsername); const { person } = usePersonStatusGroup(preferredUsername.value);
</script> </script>

View file

@ -275,6 +275,7 @@ useHead({
}); });
const props = defineProps<{ preferredUsername: string }>(); const props = defineProps<{ preferredUsername: string }>();
const preferredUsername = computed(() => props.preferredUsername);
const emit = defineEmits(["sort"]); const emit = defineEmits(["sort"]);
@ -440,7 +441,7 @@ const {
{ {
query: GROUP_MEMBERS, query: GROUP_MEMBERS,
variables: { variables: {
groupName: props.preferredUsername, groupName: preferredUsername.value,
page: page.value, page: page.value,
limit: MEMBERS_PER_PAGE, limit: MEMBERS_PER_PAGE,
roles: roles.value, roles: roles.value,
@ -547,5 +548,5 @@ const personMemberships = computed(
() => person.value?.memberships ?? { total: 0, elements: [] } () => person.value?.memberships ?? { total: 0, elements: [] }
); );
const { person } = usePersonStatusGroup(props.preferredUsername); const { person } = usePersonStatusGroup(preferredUsername.value);
</script> </script>

View file

@ -189,7 +189,7 @@
import PictureUpload from "@/components/PictureUpload.vue"; import PictureUpload from "@/components/PictureUpload.vue";
import { GroupVisibility, MemberRole, Openness } from "@/types/enums"; import { GroupVisibility, MemberRole, Openness } from "@/types/enums";
import { IGroup, usernameWithDomain, displayName } from "@/types/actor"; import { IGroup, usernameWithDomain, displayName } from "@/types/actor";
import { Address, IAddress } from "@/types/address.model"; import { IAddress } from "@/types/address.model";
import { ServerParseError } from "@apollo/client/link/http"; import { ServerParseError } from "@apollo/client/link/http";
import { ErrorResponse } from "@apollo/client/link/error"; import { ErrorResponse } from "@apollo/client/link/error";
import RouteName from "@/router/name"; import RouteName from "@/router/name";
@ -218,14 +218,11 @@ const FullAddressAutoComplete = defineAsyncComponent(
); );
const props = defineProps<{ preferredUsername: string }>(); const props = defineProps<{ preferredUsername: string }>();
const preferredUsername = computed(() => props.preferredUsername);
const { currentActor } = useCurrentActorClient(); const { currentActor } = useCurrentActorClient();
const { const { group, loading, onResult: onGroupResult } = useGroup(preferredUsername);
group,
loading,
onResult: onGroupResult,
} = useGroup(props.preferredUsername);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });
@ -395,7 +392,7 @@ const personMemberships = computed(
() => person.value?.memberships ?? { total: 0, elements: [] } () => person.value?.memberships ?? { total: 0, elements: [] }
); );
const { person } = usePersonStatusGroup(props.preferredUsername); const { person } = usePersonStatusGroup(preferredUsername);
const dialog = inject<Dialog>("dialog"); const dialog = inject<Dialog>("dialog");

View file

@ -703,22 +703,22 @@ const props = defineProps<{
preferredUsername: string; preferredUsername: string;
}>(); }>();
const preferredUsername = computed(() => props.preferredUsername);
const { anonymousReportsConfig } = useAnonymousReportsConfig(); const { anonymousReportsConfig } = useAnonymousReportsConfig();
const { currentActor } = useCurrentActorClient(); const { currentActor } = useCurrentActorClient();
const { const {
group, group,
loading: groupLoading, loading: groupLoading,
refetch: refetchGroup, refetch: refetchGroup,
} = useGroup(props.preferredUsername, { afterDateTime: new Date() }); } = useGroup(preferredUsername, { afterDateTime: new Date() });
const router = useRouter(); const router = useRouter();
const { group: discussionGroup } = useGroupDiscussionsList( const { group: discussionGroup } = useGroupDiscussionsList(preferredUsername);
props.preferredUsername const { group: resourcesGroup } = useGroupResourcesList(preferredUsername, {
); resourcesPage: 1,
const { group: resourcesGroup } = useGroupResourcesList( resourcesLimit: 3,
props.preferredUsername, });
{ resourcesPage: 1, resourcesLimit: 3 }
);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });

View file

@ -37,7 +37,7 @@
<div v-show="authApplicationError"> <div v-show="authApplicationError">
<div <div
class="rounded-lg text-white bg-mbz-danger shadow-xl my-6 p-4 flex items-center gap-2" class="rounded-lg text-white bg-mbz-danger shadow-xl my-6 p-4 flex items-center gap-2"
v-if="authApplicationGraphError?.message === 'not_found'" v-if="authApplicationGraphError?.code === 'application_not_found'"
> >
<AlertCircle :size="42" /> <AlertCircle :size="42" />
<div> <div>

View file

@ -27,10 +27,12 @@
> >
<o-input <o-input
autocapitalize="characters" autocapitalize="characters"
@update:modelValue="(val: string) => inputs[i] = val.toUpperCase()" @update:modelValue="
(val: string) => (inputs[i] = val.toUpperCase())
"
:useHtml5Validation="true" :useHtml5Validation="true"
:id="`user-code-${i}`" :id="`user-code-${i}`"
:ref="(el: Element) => userCodeInputs[i] = el" :ref="(el: Element) => (userCodeInputs[i] = el)"
:modelValue="inputs[i]" :modelValue="inputs[i]"
v-else v-else
size="large" size="large"

View file

@ -169,9 +169,10 @@ const props = withDefaults(
}>(), }>(),
{ isUpdate: false } { isUpdate: false }
); );
const preferredUsername = computed(() => props.preferredUsername);
const { currentActor } = useCurrentActorClient(); const { currentActor } = useCurrentActorClient();
const { group } = useGroup(props.preferredUsername); const { group } = useGroup(preferredUsername);
const { result: postResult, loading: postLoading } = useQuery<{ const { result: postResult, loading: postLoading } = useQuery<{
post: IPost; post: IPost;

View file

@ -36,9 +36,12 @@
:resources="resource.children.elements" :resources="resource.children.elements"
:isRoot="resource.path === '/'" :isRoot="resource.path === '/'"
:group="resource.actor" :group="resource.actor"
@delete="(resourceID: string) => deleteResource({ @delete="
id: resourceID, (resourceID: string) =>
})" deleteResource({
id: resourceID,
})
"
@update="updateResource" @update="updateResource"
@rename="handleRename" @rename="handleRename"
@move="handleMove" @move="handleMove"

View file

@ -852,6 +852,7 @@ const arrayTransformer: RouteQueryTransformer<string[]> = {
const props = defineProps<{ const props = defineProps<{
tag?: string; tag?: string;
}>(); }>();
const tag = computed(() => props.tag);
const page = useRouteQuery("page", 1, integerTransformer); const page = useRouteQuery("page", 1, integerTransformer);
const eventPage = useRouteQuery("eventPage", 1, integerTransformer); const eventPage = useRouteQuery("eventPage", 1, integerTransformer);
@ -864,7 +865,7 @@ const distance = useRouteQuery("distance", "10_km");
const when = useRouteQuery("when", "any"); const when = useRouteQuery("when", "any");
const contentType = useRouteQuery( const contentType = useRouteQuery(
"contentType", "contentType",
props.tag ? ContentType.EVENTS : ContentType.ALL, tag.value ? ContentType.EVENTS : ContentType.ALL,
enumTransformer(ContentType) enumTransformer(ContentType)
); );
@ -1286,7 +1287,7 @@ const { result: searchElementsResult, loading: searchLoading } = useQuery<{
searchGroups: Paginate<TypeNamed<IGroup>>; searchGroups: Paginate<TypeNamed<IGroup>>;
}>(SEARCH_EVENTS_AND_GROUPS, () => ({ }>(SEARCH_EVENTS_AND_GROUPS, () => ({
term: searchDebounced.value, term: searchDebounced.value,
tags: props.tag, tags: tag.value,
location: geoHashLocation.value, location: geoHashLocation.value,
beginsOn: start.value, beginsOn: start.value,
endsOn: end.value, endsOn: end.value,

View file

@ -248,10 +248,12 @@
tag="a" tag="a"
icon-left="rss" icon-left="rss"
@click=" @click="
(e: Event) => copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom') (e: Event) =>
copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom')
" "
@keyup.enter=" @keyup.enter="
(e: Event) => copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom') (e: Event) =>
copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom')
" "
:href="tokenToURL(feedToken.token, 'atom')" :href="tokenToURL(feedToken.token, 'atom')"
target="_blank" target="_blank"
@ -268,10 +270,12 @@
<o-button <o-button
tag="a" tag="a"
@click=" @click="
(e: Event) => copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics') (e: Event) =>
copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics')
" "
@keyup.enter=" @keyup.enter="
(e: Event) => copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics') (e: Event) =>
copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics')
" "
icon-left="calendar-sync" icon-left="calendar-sync"
:href="tokenToURL(feedToken.token, 'ics')" :href="tokenToURL(feedToken.token, 'ics')"
@ -348,10 +352,11 @@ const { result: loggedUserResult } = useQuery<{ loggedUser: IUser }>(
USER_NOTIFICATIONS USER_NOTIFICATIONS
); );
const loggedUser = computed(() => loggedUserResult.value?.loggedUser); const loggedUser = computed(() => loggedUserResult.value?.loggedUser);
const feedTokens = computed(() => const feedTokens = computed(
loggedUser.value?.feedTokens.filter( () =>
(token: IFeedToken) => token.actor === null loggedUser.value?.feedTokens.filter(
) (token: IFeedToken) => token.actor === null
)
); );
const { result: webPushEnabledResult } = useQuery<{ const { result: webPushEnabledResult } = useQuery<{

View file

@ -75,8 +75,9 @@ import { useI18n } from "vue-i18n";
import { useMutation } from "@vue/apollo-composable"; import { useMutation } from "@vue/apollo-composable";
const props = defineProps<{ preferredUsername: string }>(); const props = defineProps<{ preferredUsername: string }>();
const preferredUsername = computed(() => props.preferredUsername);
const { group } = useGroup(props.preferredUsername); const { group } = useGroup(preferredUsername);
const { t } = useI18n({ useScope: "global" }); const { t } = useI18n({ useScope: "global" });

View file

@ -13,7 +13,7 @@
required required
type="email" type="email"
id="emailAddress" id="emailAddress"
v-model="credentials.email" v-model="emailValue"
/> />
</o-field> </o-field>
<p class="flex flex-wrap gap-1 mt-2"> <p class="flex flex-wrap gap-1 mt-2">
@ -34,7 +34,7 @@
{{ {{
$t( $t(
"If an account with this email exists, we just sent another confirmation email to {email}", "If an account with this email exists, we just sent another confirmation email to {email}",
{ email: credentials.email } { email: emailValue }
) )
}} }}
</o-notification> </o-notification>
@ -50,7 +50,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { RESEND_CONFIRMATION_EMAIL } from "@/graphql/auth"; import { RESEND_CONFIRMATION_EMAIL } from "@/graphql/auth";
import RouteName from "@/router/name"; import RouteName from "@/router/name";
import { reactive, ref, computed } from "vue"; import { ref, computed } from "vue";
import { useMutation } from "@vue/apollo-composable"; import { useMutation } from "@vue/apollo-composable";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { useHead } from "@vueuse/head"; import { useHead } from "@vueuse/head";
@ -62,10 +62,9 @@ useHead({
}); });
const props = withDefaults(defineProps<{ email: string }>(), { email: "" }); const props = withDefaults(defineProps<{ email: string }>(), { email: "" });
const defaultEmail = computed(() => props.email);
const credentials = reactive({ const emailValue = ref<string>(defaultEmail.value);
email: props.email,
});
const validationSent = ref(false); const validationSent = ref(false);
const error = ref(false); const error = ref(false);
@ -92,7 +91,7 @@ const resendConfirmationAction = async (e: Event): Promise<void> => {
error.value = false; error.value = false;
resendConfirmationEmail({ resendConfirmationEmail({
email: credentials.email, email: emailValue.value,
}); });
}; };
</script> </script>

View file

@ -25,7 +25,7 @@
aria-required="true" aria-required="true"
required required
type="email" type="email"
v-model="credentials.email" v-model="emailValue"
/> />
</o-field> </o-field>
<p class="control"> <p class="control">
@ -41,7 +41,7 @@
<o-notification variant="success" :closable="false" title="Success"> <o-notification variant="success" :closable="false" title="Success">
{{ {{
t("We just sent an email to {email}", { t("We just sent an email to {email}", {
email: credentials.email, email: emailValue,
}) })
}} }}
</o-notification> </o-notification>
@ -57,7 +57,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { SEND_RESET_PASSWORD } from "../../graphql/auth"; import { SEND_RESET_PASSWORD } from "../../graphql/auth";
import RouteName from "../../router/name"; import RouteName from "../../router/name";
import { computed, reactive, ref } from "vue"; import { computed, ref } from "vue";
import { useMutation } from "@vue/apollo-composable"; import { useMutation } from "@vue/apollo-composable";
import { useHead } from "@vueuse/head"; import { useHead } from "@vueuse/head";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
@ -74,9 +74,8 @@ const props = withDefaults(
{ email: "" } { email: "" }
); );
const credentials = reactive<{ email: string }>({ const defaultEmail = computed(() => props.email);
email: props.email, const emailValue = ref<string>(defaultEmail.value);
});
const validationSent = ref(false); const validationSent = ref(false);
@ -110,7 +109,7 @@ const sendResetPasswordTokenAction = async (e: Event): Promise<void> => {
e.preventDefault(); e.preventDefault();
sendResetPasswordMutation({ sendResetPasswordMutation({
email: credentials.email, email: emailValue.value,
}); });
}; };
</script> </script>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -70,7 +70,7 @@ defmodule Mobilizon.Federation.ActivityPub do
handle_existing_entity(url, entity, options) handle_existing_entity(url, entity, options)
{:error, e} -> {:error, e} ->
Logger.warn("Something failed while fetching url #{url} #{inspect(e)}") Logger.warning("Something failed while fetching url #{url} #{inspect(e)}")
{:error, e} {:error, e}
end end
else else

View file

@ -65,7 +65,7 @@ defmodule Mobilizon.Federation.ActivityPub.Fetcher do
{:error, :transmogrifier_error} {:error, :transmogrifier_error}
end end
else else
Logger.warn("Object origin check failed") Logger.warning("Object origin check failed")
{:error, :object_origin_check_failed} {:error, :object_origin_check_failed}
end end
@ -89,7 +89,7 @@ defmodule Mobilizon.Federation.ActivityPub.Fetcher do
"object" => data "object" => data
}) })
else else
Logger.warn("Object origin check failed") Logger.warning("Object origin check failed")
{:error, :object_origin_check_failed} {:error, :object_origin_check_failed}
end end

View file

@ -89,13 +89,13 @@ defmodule Mobilizon.Federation.ActivityPub.Permission do
_ -> _ ->
case permission do case permission do
:access -> :access ->
Logger.warn("Actor #{actor_url} can't access #{object.url}") Logger.warning("Actor #{actor_url} can't access #{object.url}")
:update -> :update ->
Logger.warn("Actor #{actor_url} can't update #{object.url}") Logger.warning("Actor #{actor_url} can't update #{object.url}")
:delete -> :delete ->
Logger.warn("Actor #{actor_url} can't delete #{object.url}") Logger.warning("Actor #{actor_url} can't delete #{object.url}")
end end
false false

View file

@ -56,11 +56,11 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
{:ok, activity, follow} {:ok, activity, follow}
else else
{:error, :person_no_follow} -> {:error, :person_no_follow} ->
Logger.warn("Only group and instances can be followed") Logger.warning("Only group and instances can be followed")
{:error, :person_no_follow} {:error, :person_no_follow}
{:error, e} -> {:error, e} ->
Logger.warn("Error while following remote instance: #{inspect(e)}") Logger.warning("Error while following remote instance: #{inspect(e)}")
{:error, e} {:error, e}
end end
end end
@ -78,7 +78,7 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
{:ok, activity, follow} {:ok, activity, follow}
else else
{:error, e} -> {:error, e} ->
Logger.warn("Error while unfollowing remote instance: #{inspect(e)}") Logger.warning("Error while unfollowing remote instance: #{inspect(e)}")
{:error, e} {:error, e}
end end
end end
@ -96,7 +96,7 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
{:ok, activity, follow} {:ok, activity, follow}
else else
{:error, e} -> {:error, e} ->
Logger.warn("Error while accepting remote instance follow: #{inspect(e)}") Logger.warning("Error while accepting remote instance follow: #{inspect(e)}")
{:error, e} {:error, e}
end end
end end
@ -114,7 +114,7 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
{:ok, activity, follow} {:ok, activity, follow}
else else
{:error, e} -> {:error, e} ->
Logger.warn("Error while rejecting remote instance follow: #{inspect(e)}") Logger.warning("Error while rejecting remote instance follow: #{inspect(e)}")
{:error, e} {:error, e}
end end
end end
@ -137,7 +137,7 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
}) })
else else
{:error, e} -> {:error, e} ->
Logger.warn("Error while refreshing remote instance: #{inspect(e)}") Logger.warning("Error while refreshing remote instance: #{inspect(e)}")
{:error, e} {:error, e}
end end
end end

View file

@ -203,7 +203,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
Actions.Delete.delete(entity, Relay.get_actor(), false) Actions.Delete.delete(entity, Relay.get_actor(), false)
{:error, err} -> {:error, err} ->
Logger.warn("Error while fetching object from URL: #{inspect(err)}") Logger.warning("Error while fetching object from URL: #{inspect(err)}")
:error :error
end end
end end
@ -219,11 +219,11 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
{:ok, activity, object} {:ok, activity, object}
else else
{:error, :person_no_follow} -> {:error, :person_no_follow} ->
Logger.warn("Only group and instances can be followed") Logger.warning("Only group and instances can be followed")
:error :error
{:error, e} -> {:error, e} ->
Logger.warn("Unable to handle Follow activity #{inspect(e)}") Logger.warning("Unable to handle Follow activity #{inspect(e)}")
:error :error
end end
end end
@ -325,14 +325,14 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
:error :error
{:object_not_found, nil} -> {:object_not_found, nil} ->
Logger.warn( Logger.warning(
"Unable to process Accept activity #{inspect(id)}. Object #{inspect(accepted_object)} wasn't found." "Unable to process Accept activity #{inspect(id)}. Object #{inspect(accepted_object)} wasn't found."
) )
:error :error
e -> e ->
Logger.warn( Logger.warning(
"Unable to process Accept activity #{inspect(id)} for object #{inspect(accepted_object)} only returned #{inspect(e)}" "Unable to process Accept activity #{inspect(id)} for object #{inspect(accepted_object)} only returned #{inspect(e)}"
) )
@ -353,14 +353,14 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
{:ok, activity, object} {:ok, activity, object}
else else
{:object_not_found, nil} -> {:object_not_found, nil} ->
Logger.warn( Logger.warning(
"Unable to process Reject activity #{inspect(id)}. Object #{inspect(rejected_object)} wasn't found." "Unable to process Reject activity #{inspect(id)}. Object #{inspect(rejected_object)} wasn't found."
) )
:error :error
e -> e ->
Logger.warn( Logger.warning(
"Unable to process Reject activity #{inspect(id)} for object #{inspect(rejected_object)} only returned #{inspect(e)}" "Unable to process Reject activity #{inspect(id)} for object #{inspect(rejected_object)} only returned #{inspect(e)}"
) )
@ -405,7 +405,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
{:ok, activity, new_actor} {:ok, activity, new_actor}
else else
{:error, :update_not_allowed} -> {:error, :update_not_allowed} ->
Logger.warn( Logger.warning(
"Activity tried to update an actor that's local or not a group: #{inspect(params)}" "Activity tried to update an actor that's local or not a group: #{inspect(params)}"
) )
@ -485,7 +485,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
{:ok, activity, new_post} {:ok, activity, new_post}
else else
{:origin_check, _} -> {:origin_check, _} ->
Logger.warn("Actor tried to update a post but doesn't has the required role") Logger.warning("Actor tried to update a post but doesn't has the required role")
:error :error
_e -> _e ->
@ -692,7 +692,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
{:ok, activity, object} {:ok, activity, object}
else else
{:only_organizer, true} -> {:only_organizer, true} ->
Logger.warn( Logger.warning(
"Actor #{inspect(actor)} tried to leave event #{inspect(object)} but it was the only organizer so we didn't detach it" "Actor #{inspect(actor)} tried to leave event #{inspect(object)} but it was the only organizer so we didn't detach it"
) )
@ -742,14 +742,14 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
Actions.Remove.remove(member, group, moderator, false) Actions.Remove.remove(member, group, moderator, false)
else else
{:is_admin, {:ok, %Member{}}} -> {:is_admin, {:ok, %Member{}}} ->
Logger.warn( Logger.warning(
"Person #{inspect(actor)} is not an admin from #{inspect(origin)} and can't remove member #{inspect(object)}" "Person #{inspect(actor)} is not an admin from #{inspect(origin)} and can't remove member #{inspect(object)}"
) )
{:error, "Member already removed"} {:error, "Member already removed"}
{:is_member, {:ok, %Member{role: :rejected}}} -> {:is_member, {:ok, %Member{role: :rejected}}} ->
Logger.warn("Member #{inspect(object)} already removed from #{inspect(origin)}") Logger.warning("Member #{inspect(object)} already removed from #{inspect(origin)}")
{:error, "Member already removed"} {:error, "Member already removed"}
end end
end end
@ -949,7 +949,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
{:ok, activity, participant} {:ok, activity, participant}
else else
{:join_event, {:ok, _activity, %Participant{role: :rejected}}} -> {:join_event, {:ok, _activity, %Participant{role: :rejected}}} ->
Logger.warn( Logger.warning(
"Tried to handle an Reject activity on a Join activity with a event object but the participant is already rejected" "Tried to handle an Reject activity on a Join activity with a event object but the participant is already rejected"
) )
@ -1100,7 +1100,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
{:ok, object} {:ok, object}
err -> err ->
Logger.warn("Error while fetching #{inspect(object)}") Logger.warning("Error while fetching #{inspect(object)}")
{:error, err} {:error, err}
end end
end end
@ -1242,7 +1242,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
Permission.can_delete_group_object?(actor, entity) do Permission.can_delete_group_object?(actor, entity) do
Actions.Delete.delete(entity, actor, false) Actions.Delete.delete(entity, actor, false)
else else
Logger.warn("Object origin check failed") Logger.warning("Object origin check failed")
:error :error
end end

View file

@ -202,7 +202,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Comment do
# Anything else is kind of a MP # Anything else is kind of a MP
{:error, parent} -> {:error, parent} ->
Logger.warn("Parent object is something we don't handle") Logger.warning("Parent object is something we don't handle")
Logger.debug(inspect(parent)) Logger.debug(inspect(parent))
data data
end end

View file

@ -57,7 +57,7 @@ defmodule Mobilizon.GraphQL.API.Reports do
end end
if antispam_response != :ok do if antispam_response != :ok do
Logger.warn("Antispam response has been #{inspect(antispam_response)}") Logger.warning("Antispam response has been #{inspect(antispam_response)}")
end end
{:ok, report} {:ok, report}

View file

@ -55,7 +55,14 @@ defmodule Mobilizon.GraphQL.Authorization.AppScope do
:"read:event", :"read:event",
:"read:event:participants", :"read:event:participants",
:"read:event:participants:export", :"read:event:participants:export",
# User permissions
:"read:user:media",
:"read:user:settings", :"read:user:settings",
:"read:user:activity_settings",
:"read:user:participations",
:"read:user:memberships",
:"read:user:draft_events",
:"read:user:group_suggested_events",
# Profile permissions # Profile permissions
:"read:profile", :"read:profile",
:"read:profile:organized_events", :"read:profile:organized_events",

View file

@ -123,7 +123,7 @@ defmodule Mobilizon.GraphQL.Error do
defp metadata(:unknown), do: {500, dgettext("errors", "Something went wrong")} defp metadata(:unknown), do: {500, dgettext("errors", "Something went wrong")}
defp metadata(code) do defp metadata(code) do
Logger.warn("Unhandled error code: #{inspect(code)}") Logger.warning("Unhandled error code: #{inspect(code)}")
{422, to_string(code)} {422, to_string(code)}
end end

View file

@ -71,7 +71,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:participations, :paginated_participant_list, field(:participations, :paginated_participant_list,
description: "The list of participations this user has", description: "The list of participations this user has",
meta: [private: true] meta: [private: true, rule: :"read:user:participations"]
) do ) do
arg(:after_datetime, :datetime, description: "Filter participations by event start datetime") arg(:after_datetime, :datetime, description: "Filter participations by event start datetime")
@ -92,7 +92,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:memberships, :paginated_member_list, field(:memberships, :paginated_member_list,
description: "The list of memberships for this user", description: "The list of memberships for this user",
meta: [private: true] meta: [private: true, rule: :"read:user:memberships"]
) do ) do
arg(:name, :string, description: "A name to filter members by") arg(:name, :string, description: "A name to filter members by")
@ -107,7 +107,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:drafts, :paginated_event_list, field(:drafts, :paginated_event_list,
description: "The list of draft events this user has created", description: "The list of draft events this user has created",
meta: [private: true] meta: [private: true, rule: :"read:user:draft_events"]
) do ) do
arg(:page, :integer, arg(:page, :integer,
default_value: 1, default_value: 1,
@ -120,7 +120,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:followed_group_events, :paginated_followed_group_events, field(:followed_group_events, :paginated_followed_group_events,
description: "The suggested events from the groups this user follows", description: "The suggested events from the groups this user follows",
meta: [private: true] meta: [private: true, rule: :"read:user:group_suggested_events"]
) do ) do
arg(:page, :integer, arg(:page, :integer,
default_value: 1, default_value: 1,
@ -141,7 +141,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:settings, :user_settings, field(:settings, :user_settings,
description: "The list of settings for this user", description: "The list of settings for this user",
meta: [private: true] meta: [private: true, rule: :"read:user:settings"]
) do ) do
resolve(&User.user_settings/3) resolve(&User.user_settings/3)
end end
@ -158,7 +158,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:media, :paginated_media_list, field(:media, :paginated_media_list,
description: "The user's media objects", description: "The user's media objects",
meta: [private: true] meta: [private: true, rule: :"read:user:media"]
) do ) do
arg(:page, :integer, arg(:page, :integer,
default_value: 1, default_value: 1,
@ -176,7 +176,7 @@ defmodule Mobilizon.GraphQL.Schema.UserType do
field(:activity_settings, list_of(:activity_setting), field(:activity_settings, list_of(:activity_setting),
description: "The user's activity settings", description: "The user's activity settings",
meta: [private: true] meta: [private: true, rule: :"read:user:activity_settings"]
) do ) do
resolve(&ActivitySettings.user_activity_settings/3) resolve(&ActivitySettings.user_activity_settings/3)
end end

View file

@ -87,7 +87,7 @@ defmodule Mix.Tasks.Mobilizon.Actors.Refresh do
rescue rescue
_ -> _ ->
if verbose do if verbose do
Logger.warn("Failed to refresh #{username}") Logger.warning("Failed to refresh #{username}")
end end
nil nil

View file

@ -18,7 +18,7 @@ defmodule Mobilizon.Applications.ApplicationToken do
end end
@required_attrs [:user_id, :application_id, :scope] @required_attrs [:user_id, :application_id, :scope]
@optional_attrs [:authorization_code] @optional_attrs [:authorization_code, :status]
@attrs @required_attrs ++ @optional_attrs @attrs @required_attrs ++ @optional_attrs
@doc false @doc false

View file

@ -10,7 +10,7 @@ defmodule Mobilizon.Service.GitStatus do
_ -> _ ->
# Fallback on Mix version # Fallback on Mix version
Logger.warn("Could not read git commit hash, using Mix version code instead.") Logger.warning("Could not read git commit hash, using Mix version code instead.")
Mix.Project.config()[:version] Mix.Project.config()[:version]
end) end)

View file

@ -95,7 +95,7 @@ defmodule Mobilizon.Service.Notifier.Email do
end end
defp can_send_activity?(activity, user, options) do defp can_send_activity?(activity, user, options) do
Logger.warn( Logger.warning(
"Can't check if user #{inspect(user)} can be sent an activity (#{inspect(activity)}) (#{inspect(options)})" "Can't check if user #{inspect(user)} can be sent an activity (#{inspect(activity)}) (#{inspect(options)})"
) )

View file

@ -44,7 +44,7 @@ defmodule Mobilizon.Web.Auth.Guardian do
end end
rescue rescue
e in Ecto.NoResultsError -> e in Ecto.NoResultsError ->
Logger.warn("Received token claim for non existing user: #{inspect(e)}") Logger.warning("Received token claim for non existing user: #{inspect(e)}")
{:error, :no_result} {:error, :no_result}
end end
end end

View file

@ -33,7 +33,7 @@ defmodule Mobilizon.Web.AuthController do
%{assigns: %{ueberauth_failure: fails}} = conn, %{assigns: %{ueberauth_failure: fails}} = conn,
%{"provider" => provider} = _params %{"provider" => provider} = _params
) do ) do
Logger.warn("Unable to login user with #{provider} #{inspect(fails)}") Logger.warning("Unable to login user with #{provider} #{inspect(fails)}")
redirect_to_error(conn, :unknown_error, provider) redirect_to_error(conn, :unknown_error, provider)
end end
@ -75,7 +75,7 @@ defmodule Mobilizon.Web.AuthController do
}) })
else else
err -> err ->
Logger.warn("Unable to login user \"#{email}\" #{inspect(err)}") Logger.warning("Unable to login user \"#{email}\" #{inspect(err)}")
redirect_to_error(conn, :unknown_error, strategy) redirect_to_error(conn, :unknown_error, strategy)
end end
end end

View file

@ -65,7 +65,7 @@ defmodule Mobilizon.Web.FeedController do
{:error, :not_found} {:error, :not_found}
err -> err ->
Logger.warn("Unable to find feed data cached for key #{key}, returned #{inspect(err)}") Logger.warning("Unable to find feed data cached for key #{key}, returned #{inspect(err)}")
{:error, :not_found} {:error, :not_found}
end end
end end
@ -89,7 +89,7 @@ defmodule Mobilizon.Web.FeedController do
{:error, :not_found} {:error, :not_found}
err -> err ->
Logger.warn("Unable to find feed data cached for key #{key}, returned #{inspect(err)}") Logger.warning("Unable to find feed data cached for key #{key}, returned #{inspect(err)}")
{:error, :not_found} {:error, :not_found}
end end
end end

View file

@ -70,7 +70,7 @@ defmodule Mobilizon.Web.Email.Group do
%Actor{type: :Group, preferred_username: group_username}, %Actor{type: :Group, preferred_username: group_username},
user user
) do ) do
Logger.warn( Logger.warning(
"Unable to notify group follower user #{user.email} for event #{event_uuid} from group #{group_username}" "Unable to notify group follower user #{user.email} for event #{event_uuid} from group #{group_username}"
) )

View file

@ -126,7 +126,7 @@ defmodule Mobilizon.Web.ReverseProxy do
|> halt() |> halt()
{:is_url, false} -> {:is_url, false} ->
Logger.warn("Tried to reverse proxy URL #{inspect(url)}") Logger.warning("Tried to reverse proxy URL #{inspect(url)}")
conn conn
|> error_or_redirect(url, 400, "Request failed", opts) |> error_or_redirect(url, 400, "Request failed", opts)
@ -202,7 +202,7 @@ defmodule Mobilizon.Web.ReverseProxy do
halt(conn) halt(conn)
{:error, error, conn} -> {:error, error, conn} ->
Logger.warn( Logger.warning(
"#{__MODULE__} request to #{url} failed while reading/chunking: #{inspect(error)}" "#{__MODULE__} request to #{url} failed while reading/chunking: #{inspect(error)}"
) )

View file

@ -1,3 +1,3 @@
<%= gettext "Your participation to %{event} on %{instance} has been cancelled!", event: @event.title, instance: @instance_name %> <%= gettext "Your participation to %{event} on %{instance} has been cancelled!", event: @event.title, instance: @instance_name %>
== ==
<%= gettext "Your instance's moderation team has decided to suspend %{actor_name} (%{actor_address}). All of their events have been removed and your participation to event %{event} cancelled.", actor_name: @actor.name || @actor.preferred_username, event: @event.title, actor_address: if @actor.domain, do: "@#{@actor.preferred_username}@#{@actor.domain}", else: "@#{@actor.preferred_username}" %> <%= gettext "Your instance's moderation team has decided to suspend %{actor_name} (%{actor_address}). All of their events have been removed and your participation to event %{event} cancelled.", actor_name: @actor.name || @actor.preferred_username, event: @event.title, actor_address: preferred_username_and_domain(@actor) %>

View file

@ -1,6 +1,6 @@
<%= gettext "The group %{group} has been suspended on %{instance}!", group: (@group.name || @group.preferred_username), instance: @instance_name %> <%= gettext "The group %{group} has been suspended on %{instance}!", group: (@group.name || @group.preferred_username), instance: @instance_name %>
== ==
<%= gettext "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group.", group_name: @group.name, group_address: if @group.domain, do: "@#{@group.preferred_username}@#{@group.domain}", else: "@#{@group.preferred_username}" %> <%= gettext "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group.", group_name: @group.name, group_address: preferred_username_and_domain(@group) %>
<%= if is_nil(@group.domain) do %> <%= if is_nil(@group.domain) do %>
<%= gettext "As this group was located on this instance, all of it's data has been irretrievably deleted." %> <%= gettext "As this group was located on this instance, all of it's data has been irretrievably deleted." %>
<% else %> <% else %>

View file

@ -25,7 +25,7 @@ defmodule Mobilizon.Web.Upload.Filter.AnalyzeMetadata do
rescue rescue
e in ErlangError -> e in ErlangError ->
require Logger require Logger
Logger.warn("#{__MODULE__}: #{inspect(e)}") Logger.warning("#{__MODULE__}: #{inspect(e)}")
{:ok, :noop} {:ok, :noop}
end end

View file

@ -15,7 +15,7 @@ defmodule Mobilizon.Web.Upload.Filter.BlurHash do
{:ok, :filtered, %Upload{upload | blurhash: generate_blurhash(file)}} {:ok, :filtered, %Upload{upload | blurhash: generate_blurhash(file)}}
rescue rescue
e in ErlangError -> e in ErlangError ->
Logger.warn("#{__MODULE__}: #{inspect(e)}") Logger.warning("#{__MODULE__}: #{inspect(e)}")
{:ok, :noop} {:ok, :noop}
end end

View file

@ -28,11 +28,11 @@ defmodule Mobilizon.Web.Upload.Filter.Optimize do
{:ok, :filtered} {:ok, :filtered}
{:error, :file_not_found} -> {:error, :file_not_found} ->
Logger.warn("Unable to optimize file #{file}. File was not found") Logger.warning("Unable to optimize file #{file}. File was not found")
{:error, :file_not_found} {:error, :file_not_found}
{:error, err} -> {:error, err} ->
Logger.warn( Logger.warning(
"Unable to optimize file #{file}. The return from the process was #{inspect(err)}" "Unable to optimize file #{file}. The return from the process was #{inspect(err)}"
) )

View file

@ -70,7 +70,7 @@ defmodule Mobilizon.Web.ErrorView do
# template is found, let's render it as 500 # template is found, let's render it as 500
def template_not_found(template, assigns) do def template_not_found(template, assigns) do
require Logger require Logger
Logger.warn("Template #{inspect(template)} not found") Logger.warning("Template #{inspect(template)} not found")
render("500.html", assigns) render("500.html", assigns)
end end
end end

View file

@ -160,7 +160,7 @@ defmodule Mobilizon.Mixfile do
{:absinthe, "~> 1.6"}, {:absinthe, "~> 1.6"},
{:absinthe_phoenix, "~> 2.0.1"}, {:absinthe_phoenix, "~> 2.0.1"},
{:absinthe_plug, "~> 1.5.0"}, {:absinthe_plug, "~> 1.5.0"},
{:dataloader, "~> 1.0.6"}, {:dataloader, "~> 2.0"},
{:plug_cowboy, "~> 2.0"}, {:plug_cowboy, "~> 2.0"},
{:atomex, "~> 0.4"}, {:atomex, "~> 0.4"},
{:cachex, "~> 3.1"}, {:cachex, "~> 3.1"},
@ -172,7 +172,7 @@ defmodule Mobilizon.Mixfile do
{:ex_cldr_dates_times, "~> 2.2"}, {:ex_cldr_dates_times, "~> 2.2"},
{:ex_cldr_plugs, "~> 1.0"}, {:ex_cldr_plugs, "~> 1.0"},
{:ex_optimizer, "~> 0.1"}, {:ex_optimizer, "~> 0.1"},
{:progress_bar, "~> 2.0"}, {:progress_bar, "~> 3.0"},
{:oban, "~> 2.2"}, {:oban, "~> 2.2"},
{:floki, "~> 0.31"}, {:floki, "~> 0.31"},
{:ip_reserved, "~> 0.1.0"}, {:ip_reserved, "~> 0.1.0"},
@ -202,7 +202,7 @@ defmodule Mobilizon.Mixfile do
{:paasaa, "~> 0.6.0"}, {:paasaa, "~> 0.6.0"},
{:nimble_csv, "~> 1.1"}, {:nimble_csv, "~> 1.1"},
{:export, "~> 0.1.0"}, {:export, "~> 0.1.0"},
{:erlport, github: "tcitworld/erlport", branch: "0.10.1-compat", override: true}, {:erlport, "~> 0.11.0"},
{:tz_world, "~> 1.0"}, {:tz_world, "~> 1.0"},
{:tzdata, "~> 1.1"}, {:tzdata, "~> 1.1"},
{:codepagex, "~> 0.1.6"}, {:codepagex, "~> 0.1.6"},

View file

@ -1,5 +1,5 @@
%{ %{
"absinthe": {:hex, :absinthe, "1.7.1", "aca6f64994f0914628429ddbdfbf24212747b51780dae189dd98909da911757b", [:mix], [{:dataloader, "~> 1.0.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 1.2.2 or ~> 1.3.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c0c4dbd93881fa3bfbad255608234b104b877c2a901850c1fe8c53b408a72a57"}, "absinthe": {:hex, :absinthe, "1.7.5", "a15054f05738e766f7cc7fd352887dfd5e61cec371fb4741cca37c3359ff74ac", [:mix], [{:dataloader, "~> 1.0.0 or ~> 2.0", [hex: :dataloader, repo: "hexpm", optional: true]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 1.2.2 or ~> 1.3.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:opentelemetry_process_propagator, "~> 0.2.1", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "22a9a38adca26294ad0ee91226168f5d215b401efd770b8a1b8fd9c9b21ec316"},
"absinthe_phoenix": {:hex, :absinthe_phoenix, "2.0.2", "e607b438db900049b9b3760f8ecd0591017a46122fffed7057bf6989020992b5", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:absinthe_plug, "~> 1.5", [hex: :absinthe_plug, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.5", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.13 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}], "hexpm", "d36918925c380dc7d2ed7d039c9a3b4182ec36723f7417a68745ade5aab22f8d"}, "absinthe_phoenix": {:hex, :absinthe_phoenix, "2.0.2", "e607b438db900049b9b3760f8ecd0591017a46122fffed7057bf6989020992b5", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:absinthe_plug, "~> 1.5", [hex: :absinthe_plug, repo: "hexpm", optional: false]}, {:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.5", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.13 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}], "hexpm", "d36918925c380dc7d2ed7d039c9a3b4182ec36723f7417a68745ade5aab22f8d"},
"absinthe_plug": {:hex, :absinthe_plug, "1.5.8", "38d230641ba9dca8f72f1fed2dfc8abd53b3907d1996363da32434ab6ee5d6ab", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bbb04176647b735828861e7b2705465e53e2cf54ccf5a73ddd1ebd855f996e5a"}, "absinthe_plug": {:hex, :absinthe_plug, "1.5.8", "38d230641ba9dca8f72f1fed2dfc8abd53b3907d1996363da32434ab6ee5d6ab", [:mix], [{:absinthe, "~> 1.5", [hex: :absinthe, repo: "hexpm", optional: false]}, {:plug, "~> 1.4", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bbb04176647b735828861e7b2705465e53e2cf54ccf5a73ddd1ebd855f996e5a"},
"argon2_elixir": {:hex, :argon2_elixir, "3.1.0", "4135e0a1b4ff800d42c85aa663e068efa3cb356297189b5b65caa992db8ec8cf", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "c08feae0ee0292165d1b945003363c7cd8523d002e0483c627dfca930291dd73"}, "argon2_elixir": {:hex, :argon2_elixir, "3.1.0", "4135e0a1b4ff800d42c85aa663e068efa3cb356297189b5b65caa992db8ec8cf", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "c08feae0ee0292165d1b945003363c7cd8523d002e0483c627dfca930291dd73"},
@ -19,33 +19,33 @@
"cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"}, "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"},
"credo": {:hex, :credo, "1.7.0", "6119bee47272e85995598ee04f2ebbed3e947678dee048d10b5feca139435f75", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "6839fcf63d1f0d1c0f450abc8564a57c43d644077ab96f2934563e68b8a769d7"}, "credo": {:hex, :credo, "1.7.0", "6119bee47272e85995598ee04f2ebbed3e947678dee048d10b5feca139435f75", [:mix], [{:bunt, "~> 0.2.1", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "6839fcf63d1f0d1c0f450abc8564a57c43d644077ab96f2934563e68b8a769d7"},
"credo_code_climate": {:hex, :credo_code_climate, "0.1.0", "1c4efbd11cb0244622ed5f09246b9afbbf796316ce03e78f67db6d81271d2978", [:mix], [{:credo, "~> 1.5", [hex: :credo, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "75529fe38056f4e229821d604758282838b8397c82e2c12e409fda16b16821ca"}, "credo_code_climate": {:hex, :credo_code_climate, "0.1.0", "1c4efbd11cb0244622ed5f09246b9afbbf796316ce03e78f67db6d81271d2978", [:mix], [{:credo, "~> 1.5", [hex: :credo, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "75529fe38056f4e229821d604758282838b8397c82e2c12e409fda16b16821ca"},
"dataloader": {:hex, :dataloader, "1.0.10", "a42f07641b1a0572e0b21a2a5ae1be11da486a6790f3d0d14512d96ff3e3bbe9", [:mix], [{:ecto, ">= 3.4.3 and < 4.0.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "54cd70cec09addf4b2ace14cc186a283a149fd4d3ec5475b155951bf33cd963f"}, "dataloader": {:hex, :dataloader, "2.0.0", "49b42d60b9bb06d761a71d7b034c4b34787957e713d4fae15387a25fcd639112", [:mix], [{:ecto, ">= 3.4.3 and < 4.0.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:opentelemetry_process_propagator, "~> 0.2.1", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "09d61781b76ce216e395cdbc883ff00d00f46a503e215c22722dba82507dfef0"},
"db_connection": {:hex, :db_connection, "2.5.0", "bb6d4f30d35ded97b29fe80d8bd6f928a1912ca1ff110831edcd238a1973652c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c92d5ba26cd69ead1ff7582dbb860adeedfff39774105a4f1c92cbb654b55aa2"}, "db_connection": {:hex, :db_connection, "2.5.0", "bb6d4f30d35ded97b29fe80d8bd6f928a1912ca1ff110831edcd238a1973652c", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c92d5ba26cd69ead1ff7582dbb860adeedfff39774105a4f1c92cbb654b55aa2"},
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
"dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"}, "dialyxir": {:hex, :dialyxir, "1.3.0", "fd1672f0922b7648ff9ce7b1b26fcf0ef56dda964a459892ad15f6b4410b5284", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "00b2a4bcd6aa8db9dcb0b38c1225b7277dca9bc370b6438715667071a304696f"},
"digital_token": {:hex, :digital_token, "0.4.0", "2ad6894d4a40be8b2890aad286ecd5745fa473fa5699d80361a8c94428edcd1f", [:mix], [{:cldr_utils, "~> 2.17", [hex: :cldr_utils, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "a178edf61d1fee5bb3c34e14b0f4ee21809ee87cade8738f87337e59e5e66e26"}, "digital_token": {:hex, :digital_token, "0.6.0", "13e6de581f0b1f6c686f7c7d12ab11a84a7b22fa79adeb4b50eec1a2d278d258", [:mix], [{:cldr_utils, "~> 2.17", [hex: :cldr_utils, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "2455d626e7c61a128b02a4a8caddb092548c3eb613ac6f6a85e4cbb6caddc4d1"},
"doctor": {:hex, :doctor, "0.21.0", "20ef89355c67778e206225fe74913e96141c4d001cb04efdeba1a2a9704f1ab5", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "a227831daa79784eb24cdeedfa403c46a4cb7d0eab0e31232ec654314447e4e0"}, "doctor": {:hex, :doctor, "0.21.0", "20ef89355c67778e206225fe74913e96141c4d001cb04efdeba1a2a9704f1ab5", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "a227831daa79784eb24cdeedfa403c46a4cb7d0eab0e31232ec654314447e4e0"},
"earmark_parser": {:hex, :earmark_parser, "1.4.32", "fa739a0ecfa34493de19426681b23f6814573faee95dfd4b4aafe15a7b5b32c6", [:mix], [], "hexpm", "b8b0dd77d60373e77a3d7e8afa598f325e49e8663a51bcc2b88ef41838cca755"}, "earmark_parser": {:hex, :earmark_parser, "1.4.33", "3c3fd9673bb5dcc9edc28dd90f50c87ce506d1f71b70e3de69aa8154bc695d44", [:mix], [], "hexpm", "2d526833729b59b9fdb85785078697c72ac5e5066350663e5be6a1182da61b8f"},
"eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"},
"ecto": {:hex, :ecto, "3.10.2", "6b887160281a61aa16843e47735b8a266caa437f80588c3ab80a8a960e6abe37", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "6a895778f0d7648a4b34b486af59a1c8009041fbdf2b17f1ac215eb829c60235"}, "ecto": {:hex, :ecto, "3.10.3", "eb2ae2eecd210b4eb8bece1217b297ad4ff824b4384c0e3fdd28aaf96edd6135", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "44bec74e2364d491d70f7e42cd0d690922659d329f6465e89feb8a34e8cd3433"},
"ecto_autoslug_field": {:hex, :ecto_autoslug_field, "3.0.0", "37fbc2f07e6691136afff246f2cf5b159ad395b665a55d06db918975fd2397db", [:mix], [{:ecto, ">= 3.7.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:slugger, ">= 0.3.0", [hex: :slugger, repo: "hexpm", optional: false]}], "hexpm", "8ec252c7cf85f13132062f56a484d6a0ef1f981f7be9ce4ad7e9546dd8c0cc0f"}, "ecto_autoslug_field": {:hex, :ecto_autoslug_field, "3.0.0", "37fbc2f07e6691136afff246f2cf5b159ad395b665a55d06db918975fd2397db", [:mix], [{:ecto, ">= 3.7.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:slugger, ">= 0.3.0", [hex: :slugger, repo: "hexpm", optional: false]}], "hexpm", "8ec252c7cf85f13132062f56a484d6a0ef1f981f7be9ce4ad7e9546dd8c0cc0f"},
"ecto_dev_logger": {:hex, :ecto_dev_logger, "0.9.0", "cb631469ac1940e97655d6fce85905b792ac9250ab18b19c664978b79f8dad59", [:mix], [{:ecto, "~> 3.7", [hex: :ecto, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2e8bc98b4ae4fcc7108896eef7da5a109afad829f4fb2eb46d677fdc9101c2d5"}, "ecto_dev_logger": {:hex, :ecto_dev_logger, "0.9.0", "cb631469ac1940e97655d6fce85905b792ac9250ab18b19c664978b79f8dad59", [:mix], [{:ecto, "~> 3.7", [hex: :ecto, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2e8bc98b4ae4fcc7108896eef7da5a109afad829f4fb2eb46d677fdc9101c2d5"},
"ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"},
"ecto_shortuuid": {:hex, :ecto_shortuuid, "0.1.3", "d36aede64edf256e4b769be2ad15a8ad5d9d1ff8ad46befe39e8cb4489abcd05", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:shortuuid, "~> 2.1.1", [hex: :shortuuid, repo: "hexpm", optional: false]}], "hexpm", "d215c8ced7125265de94d55abc696125942caef33439cf281fafded9744a4294"}, "ecto_shortuuid": {:hex, :ecto_shortuuid, "0.2.0", "57cae7b6016cc56a04457b4fc8f63957398dfd9023ff3e900eaf6805a40f8043", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:shortuuid, "~> 2.1 or ~> 3.0", [hex: :shortuuid, repo: "hexpm", optional: false]}], "hexpm", "b92e3b71e86be92f5a7ef6f3de170e7864454e630f7b01dd930414baf38efb65"},
"ecto_sql": {:hex, :ecto_sql, "3.10.1", "6ea6b3036a0b0ca94c2a02613fd9f742614b5cfe494c41af2e6571bb034dd94c", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f6a25bdbbd695f12c8171eaff0851fa4c8e72eec1e98c7364402dda9ce11c56b"}, "ecto_sql": {:hex, :ecto_sql, "3.10.1", "6ea6b3036a0b0ca94c2a02613fd9f742614b5cfe494c41af2e6571bb034dd94c", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.10.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 0.17.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f6a25bdbbd695f12c8171eaff0851fa4c8e72eec1e98c7364402dda9ce11c56b"},
"elixir_feed_parser": {:hex, :elixir_feed_parser, "2.1.0", "bb96fb6422158dc7ad59de62ef211cc69d264acbbe63941a64a5dce97bbbc2e6", [:mix], [{:timex, "~> 3.4", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm", "2d3c62fe7b396ee3b73d7160bc8fadbd78bfe9597c98c7d79b3f1038d9cba28f"}, "elixir_feed_parser": {:hex, :elixir_feed_parser, "2.1.0", "bb96fb6422158dc7ad59de62ef211cc69d264acbbe63941a64a5dce97bbbc2e6", [:mix], [{:timex, "~> 3.4", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm", "2d3c62fe7b396ee3b73d7160bc8fadbd78bfe9597c98c7d79b3f1038d9cba28f"},
"elixir_make": {:hex, :elixir_make, "0.7.7", "7128c60c2476019ed978210c245badf08b03dbec4f24d05790ef791da11aa17c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bc19fff950fad52bbe5f211b12db9ec82c6b34a9647da0c2224b8b8464c7e6c"}, "elixir_make": {:hex, :elixir_make, "0.7.7", "7128c60c2476019ed978210c245badf08b03dbec4f24d05790ef791da11aa17c", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5bc19fff950fad52bbe5f211b12db9ec82c6b34a9647da0c2224b8b8464c7e6c"},
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
"erlport": {:git, "https://github.com/tcitworld/erlport.git", "1f8f4b1a50ecdf7e959090fb566ac45c63c39b0b", [branch: "0.10.1-compat"]}, "erlport": {:hex, :erlport, "0.11.0", "8bb46a520e6eb9146e655fbf9b824433d9d532194667069d9aa45696aae9684b", [:rebar3], [], "hexpm", "8eb136ccaf3948d329b8d1c3278ad2e17e2a7319801bc4cc2da6db278204eee4"},
"eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"}, "eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"},
"ex_cldr": {:hex, :ex_cldr, "2.37.1", "6091fa719a7a96f9abee7aba186e63a906d504d08039cc8f0c683a0e71ee1bd7", [:mix], [{:cldr_utils, "~> 2.21", [hex: :cldr_utils, repo: "hexpm", optional: false]}, {:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:gettext, "~> 0.19", [hex: :gettext, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: true]}], "hexpm", "5d60c3288454bc966e404ea4f59531f7dbb570d7e927dce62f0ab8466713bf78"}, "ex_cldr": {:hex, :ex_cldr, "2.37.2", "c45041534ec60af367c4c1af02a608576118044fe3c441c782fd424061d6b517", [:mix], [{:cldr_utils, "~> 2.21", [hex: :cldr_utils, repo: "hexpm", optional: false]}, {:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:gettext, "~> 0.19", [hex: :gettext, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: true]}], "hexpm", "c8467b1d5080716ace6621703b6656cb2f9545572a54b341da900791a0cf92ba"},
"ex_cldr_calendars": {:hex, :ex_cldr_calendars, "1.22.0", "016373c6725682851d752b72585581154926b2c8a20ee43e418479911dae0ff9", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr_lists, "~> 2.10", [hex: :ex_cldr_lists, repo: "hexpm", optional: true]}, {:ex_cldr_numbers, "~> 2.31", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:ex_cldr_units, "~> 3.16", [hex: :ex_cldr_units, repo: "hexpm", optional: true]}, {:ex_doc, "~> 0.21", [hex: :ex_doc, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "c1c86de086009dce5786eb10fed0d351e52a844307c2ff0e83531f91d3268e8b"}, "ex_cldr_calendars": {:hex, :ex_cldr_calendars, "1.22.1", "3e5150f1fe7698e0fa118aeedcca1b5920d0a552bc40c81cf65ca9b0a4ea4cc3", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr_lists, "~> 2.10", [hex: :ex_cldr_lists, repo: "hexpm", optional: true]}, {:ex_cldr_numbers, "~> 2.31", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:ex_cldr_units, "~> 3.16", [hex: :ex_cldr_units, repo: "hexpm", optional: true]}, {:ex_doc, "~> 0.21", [hex: :ex_doc, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "e7408cd9e8318b2ef93b76728e84484ddc3ea6d7c894fbc811c54122a7140169"},
"ex_cldr_currencies": {:hex, :ex_cldr_currencies, "2.15.0", "aadd34e91cfac7ef6b03fe8f47f8c6fa8c5daf3f89b5d9fee64ec545ded839cf", [:mix], [{:ex_cldr, "~> 2.34", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "0521316396c66877a2d636219767560bb2397c583341fcb154ecf9f3000e6ff8"}, "ex_cldr_currencies": {:hex, :ex_cldr_currencies, "2.15.0", "aadd34e91cfac7ef6b03fe8f47f8c6fa8c5daf3f89b5d9fee64ec545ded839cf", [:mix], [{:ex_cldr, "~> 2.34", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "0521316396c66877a2d636219767560bb2397c583341fcb154ecf9f3000e6ff8"},
"ex_cldr_dates_times": {:hex, :ex_cldr_dates_times, "2.13.3", "bd01c75f017b3a024d0d4c189f2ee0573c15023e98ae16759228a7b57f9414bc", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr, "~> 2.36", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_calendars, "~> 1.18", [hex: :ex_cldr_calendars, repo: "hexpm", optional: false]}, {:ex_cldr_numbers, "~> 2.28", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "f5b2216189bd9118bb2e5c1abd48f95f48b2eac954fe0e53370806d23b1641ac"}, "ex_cldr_dates_times": {:hex, :ex_cldr_dates_times, "2.13.3", "bd01c75f017b3a024d0d4c189f2ee0573c15023e98ae16759228a7b57f9414bc", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr, "~> 2.36", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_calendars, "~> 1.18", [hex: :ex_cldr_calendars, repo: "hexpm", optional: false]}, {:ex_cldr_numbers, "~> 2.28", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "f5b2216189bd9118bb2e5c1abd48f95f48b2eac954fe0e53370806d23b1641ac"},
"ex_cldr_languages": {:hex, :ex_cldr_languages, "0.3.3", "9787002803552b15a7ade19496c9e46fc921baca992ea80d0394e11fe3acea45", [:mix], [{:ex_cldr, "~> 2.25", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "22fb1fef72b7b4b4872d243b34e7b83734247a78ad87377986bf719089cc447a"}, "ex_cldr_languages": {:hex, :ex_cldr_languages, "0.3.3", "9787002803552b15a7ade19496c9e46fc921baca992ea80d0394e11fe3acea45", [:mix], [{:ex_cldr, "~> 2.25", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "22fb1fef72b7b4b4872d243b34e7b83734247a78ad87377986bf719089cc447a"},
"ex_cldr_numbers": {:hex, :ex_cldr_numbers, "2.31.1", "ad3e8a33e8cb8d048173f2c89cf6fcec9f1694d99f890a75bc745894c3868d5b", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:digital_token, "~> 0.3 or ~> 1.0", [hex: :digital_token, repo: "hexpm", optional: false]}, {:ex_cldr, "~> 2.37", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_currencies, ">= 2.14.2", [hex: :ex_cldr_currencies, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "a94c40f4bf60f0e69c34977f33caeda483677232699ab0a6a98025ea011fabcf"}, "ex_cldr_numbers": {:hex, :ex_cldr_numbers, "2.31.3", "6ec8b18c395c0e8788d46da806f8f2abcbe4b0d809226d2a91363e9ccd85f2f5", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:digital_token, "~> 0.3 or ~> 1.0", [hex: :digital_token, repo: "hexpm", optional: false]}, {:ex_cldr, "~> 2.37", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_currencies, ">= 2.14.2", [hex: :ex_cldr_currencies, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "b519de08ecc4a6402038f3aa75e8654f78ebd6fa714b7e585531504e648588fd"},
"ex_cldr_plugs": {:hex, :ex_cldr_plugs, "1.3.0", "72a2064cb36c390dd0b212e8a172f643d455c8d362ee9c4bda29a96b42204df6", [:mix], [{:ex_cldr, "~> 2.37", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:gettext, "~> 0.19", [hex: :gettext, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "699a98543ea14a7c849fae768041c40f49aa611aa55866025d227796e4858bff"}, "ex_cldr_plugs": {:hex, :ex_cldr_plugs, "1.3.0", "72a2064cb36c390dd0b212e8a172f643d455c8d362ee9c4bda29a96b42204df6", [:mix], [{:ex_cldr, "~> 2.37", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:gettext, "~> 0.19", [hex: :gettext, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "699a98543ea14a7c849fae768041c40f49aa611aa55866025d227796e4858bff"},
"ex_doc": {:hex, :ex_doc, "0.29.4", "6257ecbb20c7396b1fe5accd55b7b0d23f44b6aa18017b415cb4c2b91d997729", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2c6699a737ae46cb61e4ed012af931b57b699643b24dabe2400a8168414bc4f5"}, "ex_doc": {:hex, :ex_doc, "0.30.3", "bfca4d340e3b95f2eb26e72e4890da83e2b3a5c5b0e52607333bf5017284b063", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "fbc8702046c1d25edf79de376297e608ac78cdc3a29f075484773ad1718918b6"},
"ex_ical": {:hex, :ex_ical, "0.2.0", "4b928b554614704016cc0c9ee226eb854da9327a1cc460457621ceacb1ac29a6", [:mix], [{:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm", "db76473b2ae0259e6633c6c479a5a4d8603f09497f55c88f9ef4d53d2b75befb"}, "ex_ical": {:hex, :ex_ical, "0.2.0", "4b928b554614704016cc0c9ee226eb854da9327a1cc460457621ceacb1ac29a6", [:mix], [{:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm", "db76473b2ae0259e6633c6c479a5a4d8603f09497f55c88f9ef4d53d2b75befb"},
"ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"}, "ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"},
"ex_optimizer": {:hex, :ex_optimizer, "0.1.1", "62da37e206fc2233ff7a4e54e40eae365c40f96c81992fcd15b782eb25169b80", [:mix], [{:file_info, "~> 0.0.4", [hex: :file_info, repo: "hexpm", optional: false]}], "hexpm", "e6f5c059bcd58b66be2f6f257fdc4f69b74b0fa5c9ddd669486af012e4b52286"}, "ex_optimizer": {:hex, :ex_optimizer, "0.1.1", "62da37e206fc2233ff7a4e54e40eae365c40f96c81992fcd15b782eb25169b80", [:mix], [{:file_info, "~> 0.0.4", [hex: :file_info, repo: "hexpm", optional: false]}], "hexpm", "e6f5c059bcd58b66be2f6f257fdc4f69b74b0fa5c9ddd669486af012e4b52286"},
@ -55,14 +55,14 @@
"exkismet": {:git, "https://github.com/tcitworld/exkismet.git", "8b5485fde00fafbde20f315bec387a77f7358334", []}, "exkismet": {:git, "https://github.com/tcitworld/exkismet.git", "8b5485fde00fafbde20f315bec387a77f7358334", []},
"expo": {:hex, :expo, "0.1.0", "d4e932bdad052c374118e312e35280f1919ac13881cb3ac07a209a54d0c81dd8", [:mix], [], "hexpm", "c22c536021c56de058aaeedeabb4744eb5d48137bacf8c29f04d25b6c6bbbf45"}, "expo": {:hex, :expo, "0.1.0", "d4e932bdad052c374118e312e35280f1919ac13881cb3ac07a209a54d0c81dd8", [:mix], [], "hexpm", "c22c536021c56de058aaeedeabb4744eb5d48137bacf8c29f04d25b6c6bbbf45"},
"export": {:hex, :export, "0.1.1", "6dfd268b0692428f89b9285859a2dc02b6dcd2e8fdfbca34ac6e6a331351df91", [:mix], [{:erlport, "~> 0.9", [hex: :erlport, repo: "hexpm", optional: false]}], "hexpm", "3da7444ff4053f1824352f4bdb13fbd2c28c93c2011786fb686b649fdca1021f"}, "export": {:hex, :export, "0.1.1", "6dfd268b0692428f89b9285859a2dc02b6dcd2e8fdfbca34ac6e6a331351df91", [:mix], [{:erlport, "~> 0.9", [hex: :erlport, repo: "hexpm", optional: false]}], "hexpm", "3da7444ff4053f1824352f4bdb13fbd2c28c93c2011786fb686b649fdca1021f"},
"fast_html": {:hex, :fast_html, "2.0.5", "c61760340606c1077ff1f196f17834056cb1dd3d5cb92a9f2cabf28bc6221c3c", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "605f4f4829443c14127694ebabb681778712ceecb4470ec32aa31012330e6506"}, "fast_html": {:hex, :fast_html, "2.2.0", "6c5ef1be087a4ed613b0379c13f815c4d11742b36b67bb52cee7859847c84520", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "064c4f23b4a6168f9187dac8984b056f2c531bb0787f559fd6a8b34b38aefbae"},
"fast_sanitize": {:hex, :fast_sanitize, "0.2.3", "67b93dfb34e302bef49fec3aaab74951e0f0602fd9fa99085987af05bd91c7a5", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "e8ad286d10d0386e15d67d0ee125245ebcfbc7d7290b08712ba9013c8c5e56e2"}, "fast_sanitize": {:hex, :fast_sanitize, "0.2.3", "67b93dfb34e302bef49fec3aaab74951e0f0602fd9fa99085987af05bd91c7a5", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "e8ad286d10d0386e15d67d0ee125245ebcfbc7d7290b08712ba9013c8c5e56e2"},
"file_info": {:hex, :file_info, "0.0.4", "2e0e77f211e833f38ead22cb29ce53761d457d80b3ffe0ffe0eb93880b0963b2", [:mix], [{:mimetype_parser, "~> 0.1.2", [hex: :mimetype_parser, repo: "hexpm", optional: false]}], "hexpm", "50e7ad01c2c8b9339010675fe4dc4a113b8d6ca7eddce24d1d74fd0e762781a5"}, "file_info": {:hex, :file_info, "0.0.4", "2e0e77f211e833f38ead22cb29ce53761d457d80b3ffe0ffe0eb93880b0963b2", [:mix], [{:mimetype_parser, "~> 0.1.2", [hex: :mimetype_parser, repo: "hexpm", optional: false]}], "hexpm", "50e7ad01c2c8b9339010675fe4dc4a113b8d6ca7eddce24d1d74fd0e762781a5"},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"floki": {:hex, :floki, "0.34.3", "5e2dcaec5d7c228ce5b1d3501502e308b2d79eb655e4191751a1fe491c37feac", [:mix], [], "hexpm", "9577440eea5b97924b4bf3c7ea55f7b8b6dce589f9b28b096cc294a8dc342341"}, "floki": {:hex, :floki, "0.34.3", "5e2dcaec5d7c228ce5b1d3501502e308b2d79eb655e4191751a1fe491c37feac", [:mix], [], "hexpm", "9577440eea5b97924b4bf3c7ea55f7b8b6dce589f9b28b096cc294a8dc342341"},
"gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"}, "gen_smtp": {:hex, :gen_smtp, "1.2.0", "9cfc75c72a8821588b9b9fe947ae5ab2aed95a052b81237e0928633a13276fd3", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "5ee0375680bca8f20c4d85f58c2894441443a743355430ff33a783fe03296779"},
"geo": {:hex, :geo, "3.5.1", "a7b1581770c5f0de3f19fe0977eb828b79af269669854ca944038f70188f47b5", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "c65cfdc5f214402b52a32c11ae9dec9530bbee4973303a67e75312db3ec7b59c"}, "geo": {:hex, :geo, "3.5.1", "a7b1581770c5f0de3f19fe0977eb828b79af269669854ca944038f70188f47b5", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "c65cfdc5f214402b52a32c11ae9dec9530bbee4973303a67e75312db3ec7b59c"},
"geo_postgis": {:hex, :geo_postgis, "3.4.2", "5a3462b2a2271d6949ba355ceed0212dc89ecfd6d0073ff1dd8fd53de78af867", [:mix], [{:geo, "~> 3.4", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0 or ~> 4.0", [hex: :poison, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm", "48d8c9f97f03805546db19217c42a57e972a3eb69fabaa3d11740285d25aaad4"}, "geo_postgis": {:hex, :geo_postgis, "3.4.3", "bd0a7ca7905ed8d73fa10aaa6a13daf68df2466a701c6f933226b9d2b11b8c44", [:mix], [{:geo, "~> 3.5", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, "~> 2.2 or ~> 3.0 or ~> 4.0 or ~> 5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm", "827d3364326417f9df5bdc86e30f89eeed3a573f62430a8a2544bce5326ff7dc"},
"geohax": {:hex, :geohax, "1.0.0", "89717442c5474a57d242b2361590bb33a7fbe6d8ec02a31d9865c3f33756d348", [:mix], [], "hexpm", "893ef2f905213acb67c615d2c955d926b1be3676bfc2bd5ed7271b641dfa2224"}, "geohax": {:hex, :geohax, "1.0.0", "89717442c5474a57d242b2361590bb33a7fbe6d8ec02a31d9865c3f33756d348", [:mix], [], "hexpm", "893ef2f905213acb67c615d2c955d926b1be3676bfc2bd5ed7271b641dfa2224"},
"geolix": {:hex, :geolix, "2.0.0", "7e65764bedfc98d08a3ddb24c417657c9d438eff163280b45fbb7de289626acd", [:mix], [], "hexpm", "8742bf588ed0bb7def2c443204d09d355990846c6efdff96ded66aac24c301df"}, "geolix": {:hex, :geolix, "2.0.0", "7e65764bedfc98d08a3ddb24c417657c9d438eff163280b45fbb7de289626acd", [:mix], [], "hexpm", "8742bf588ed0bb7def2c443204d09d355990846c6efdff96ded66aac24c301df"},
"geolix_adapter_mmdb2": {:hex, :geolix_adapter_mmdb2, "0.6.0", "6ab9dbf6ea395817aa1fd2597be25d0dda1853c7f664e62716e47728d18bc4f9", [:mix], [{:geolix, "~> 2.0", [hex: :geolix, repo: "hexpm", optional: false]}, {:mmdb2_decoder, "~> 3.0", [hex: :mmdb2_decoder, repo: "hexpm", optional: false]}], "hexpm", "06ff962feae8a310cffdf86b74bfcda6e2d0dccb439bb1f62df2b657b1c0269b"}, "geolix_adapter_mmdb2": {:hex, :geolix_adapter_mmdb2, "0.6.0", "6ab9dbf6ea395817aa1fd2597be25d0dda1853c7f664e62716e47728d18bc4f9", [:mix], [{:geolix, "~> 2.0", [hex: :geolix, repo: "hexpm", optional: false]}, {:mmdb2_decoder, "~> 3.0", [hex: :mmdb2_decoder, repo: "hexpm", optional: false]}], "hexpm", "06ff962feae8a310cffdf86b74bfcda6e2d0dccb439bb1f62df2b657b1c0269b"},
@ -80,8 +80,8 @@
"idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"},
"inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"},
"ip_reserved": {:hex, :ip_reserved, "0.1.1", "e5112d71f1abf05207f82fd9597d369a5fde1e0b6d1bbe77c02a99bb26ecdc33", [:mix], [{:inet_cidr, "~> 1.0.0", [hex: :inet_cidr, repo: "hexpm", optional: false]}], "hexpm", "55fcd2b6e211caef09ea3f54ef37d43030bec486325d12fe865ab5ed8140a4fe"}, "ip_reserved": {:hex, :ip_reserved, "0.1.1", "e5112d71f1abf05207f82fd9597d369a5fde1e0b6d1bbe77c02a99bb26ecdc33", [:mix], [{:inet_cidr, "~> 1.0.0", [hex: :inet_cidr, repo: "hexpm", optional: false]}], "hexpm", "55fcd2b6e211caef09ea3f54ef37d43030bec486325d12fe865ab5ed8140a4fe"},
"jason": {:hex, :jason, "1.4.0", "e855647bc964a44e2f67df589ccf49105ae039d4179db7f6271dfd3843dc27e6", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "79a3791085b2a0f743ca04cec0f7be26443738779d09302e01318f97bdb82121"}, "jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
"jose": {:hex, :jose, "1.11.5", "3bc2d75ffa5e2c941ca93e5696b54978323191988eb8d225c2e663ddfefd515e", [:mix, :rebar3], [], "hexpm", "dcd3b215bafe02ea7c5b23dafd3eb8062a5cd8f2d904fd9caa323d37034ab384"}, "jose": {:hex, :jose, "1.11.6", "613fda82552128aa6fb804682e3a616f4bc15565a048dabd05b1ebd5827ed965", [:mix, :rebar3], [], "hexpm", "6275cb75504f9c1e60eeacb771adfeee4905a9e182103aa59b53fed651ff9738"},
"jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"},
"junit_formatter": {:hex, :junit_formatter, "3.3.1", "c729befb848f1b9571f317d2fefa648e9d4869befc4b2980daca7c1edc468e40", [:mix], [], "hexpm", "761fc5be4b4c15d8ba91a6dafde0b2c2ae6db9da7b8832a55b5a1deb524da72b"}, "junit_formatter": {:hex, :junit_formatter, "3.3.1", "c729befb848f1b9571f317d2fefa648e9d4869befc4b2980daca7c1edc468e40", [:mix], [], "hexpm", "761fc5be4b4c15d8ba91a6dafde0b2c2ae6db9da7b8832a55b5a1deb524da72b"},
"linkify": {:hex, :linkify, "0.5.3", "5f8143d8f61f5ff08d3aeeff47ef6509492b4948d8f08007fbf66e4d2246a7f2", [:mix], [], "hexpm", "3ef35a1377d47c25506e07c1c005ea9d38d700699d92ee92825f024434258177"}, "linkify": {:hex, :linkify, "0.5.3", "5f8143d8f61f5ff08d3aeeff47ef6509492b4948d8f08007fbf66e4d2246a7f2", [:mix], [], "hexpm", "3ef35a1377d47c25506e07c1c005ea9d38d700699d92ee92825f024434258177"},
@ -103,38 +103,38 @@
"nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"},
"oauth2": {:hex, :oauth2, "2.1.0", "beb657f393814a3a7a8a15bd5e5776ecae341fd344df425342a3b6f1904c2989", [:mix], [{:tesla, "~> 1.5", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "8ac07f85b3307dd1acfeb0ec852f64161b22f57d0ce0c15e616a1dfc8ebe2b41"}, "oauth2": {:hex, :oauth2, "2.1.0", "beb657f393814a3a7a8a15bd5e5776ecae341fd344df425342a3b6f1904c2989", [:mix], [{:tesla, "~> 1.5", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "8ac07f85b3307dd1acfeb0ec852f64161b22f57d0ce0c15e616a1dfc8ebe2b41"},
"oauther": {:hex, :oauther, "1.3.0", "82b399607f0ca9d01c640438b34d74ebd9e4acd716508f868e864537ecdb1f76", [:mix], [], "hexpm", "78eb888ea875c72ca27b0864a6f550bc6ee84f2eeca37b093d3d833fbcaec04e"}, "oauther": {:hex, :oauther, "1.3.0", "82b399607f0ca9d01c640438b34d74ebd9e4acd716508f868e864537ecdb1f76", [:mix], [], "hexpm", "78eb888ea875c72ca27b0864a6f550bc6ee84f2eeca37b093d3d833fbcaec04e"},
"oban": {:hex, :oban, "2.15.1", "d49803174a4b564b1c90d107363d55a59e9e48aeb472ea364ea45d22a5c56997", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "60be616498db864a8fdd5e013b92f95d2a1d28a3f387c82bf05b35cdcb2af3e1"}, "oban": {:hex, :oban, "2.15.2", "8f934a49db39163633965139c8846d8e24c2beb4180f34a005c2c7c3f69a6aa2", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0f4a579ea48fc7489e0d84facf8b01566e142bdc6542d7dabce32c10e664f1e9"},
"paasaa": {:hex, :paasaa, "0.6.0", "07c8ed81010caa25db351d474f0c053072c809821c60f9646f7b1547bec52f6d", [:mix], [], "hexpm", "732ddfc21bac0831edb26aec468af3ec2b8997d74f6209810b1cc53199c29f2e"}, "paasaa": {:hex, :paasaa, "0.6.0", "07c8ed81010caa25db351d474f0c053072c809821c60f9646f7b1547bec52f6d", [:mix], [], "hexpm", "732ddfc21bac0831edb26aec468af3ec2b8997d74f6209810b1cc53199c29f2e"},
"parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"},
"phoenix": {:hex, :phoenix, "1.7.6", "61f0625af7c1d1923d582470446de29b008c0e07ae33d7a3859ede247ddaf59a", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "f6b4be7780402bb060cbc6e83f1b6d3f5673b674ba73cc4a7dd47db0322dfb88"}, "phoenix": {:hex, :phoenix, "1.7.7", "4cc501d4d823015007ba3cdd9c41ecaaf2ffb619d6fb283199fa8ddba89191e0", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "8966e15c395e5e37591b6ed0bd2ae7f48e961f0f60ac4c733f9566b519453085"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.4.2", "b21bd01fdeffcfe2fab49e4942aa938b6d3e89e93a480d4aee58085560a0bc0d", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "70242edd4601d50b69273b057ecf7b684644c19ee750989fd555625ae4ce8f5d"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.2", "b21bd01fdeffcfe2fab49e4942aa938b6d3e89e93a480d4aee58085560a0bc0d", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "70242edd4601d50b69273b057ecf7b684644c19ee750989fd555625ae4ce8f5d"},
"phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"}, "phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"},
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.4.1", "2aff698f5e47369decde4357ba91fc9c37c6487a512b41732818f2204a8ef1d3", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "9bffb834e7ddf08467fe54ae58b5785507aaba6255568ae22b4d46e2bb3615ab"},
"phoenix_live_view": {:hex, :phoenix_live_view, "0.19.2", "23f88abd791869ff45ae78a66b3f5c9e2cef9f0318b07846ed7b9c3fdd817c21", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "91c57cb1f297f32e8b8f391e3f7ac6a696df1f10c126f9082bed391e8e3df594"}, "phoenix_live_view": {:hex, :phoenix_live_view, "0.19.5", "6e730595e8e9b8c5da230a814e557768828fd8dfeeb90377d2d8dbb52d4ec00a", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b2eaa0dd3cfb9bd7fb949b88217df9f25aed915e986a28ad5c8a0d054e7ca9d3"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
"phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.0", "a544d83fde4a767efb78f45404a74c9e37b2a9c5ea3339692e65a6966731f935", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "e88d117251e89a16b92222415a6d87b99a96747ddf674fc5c7631de734811dba"}, "phoenix_swoosh": {:hex, :phoenix_swoosh, "1.2.0", "a544d83fde4a767efb78f45404a74c9e37b2a9c5ea3339692e65a6966731f935", [:mix], [{:finch, "~> 0.8", [hex: :finch, repo: "hexpm", optional: true]}, {:hackney, "~> 1.10", [hex: :hackney, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_view, "~> 1.0 or ~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.5", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "e88d117251e89a16b92222415a6d87b99a96747ddf674fc5c7631de734811dba"},
"phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"}, "phoenix_template": {:hex, :phoenix_template, "1.0.3", "32de561eefcefa951aead30a1f94f1b5f0379bc9e340bb5c667f65f1edfa4326", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "16f4b6588a4152f3cc057b9d0c0ba7e82ee23afa65543da535313ad8d25d8e2c"},
"phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"}, "phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"},
"plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"}, "plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"},
"plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"}, "plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"},
"plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"},
"poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"},
"postgrex": {:hex, :postgrex, "0.17.1", "01c29fd1205940ee55f7addb8f1dc25618ca63a8817e56fac4f6846fc2cddcbe", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "14b057b488e73be2beee508fb1955d8db90d6485c6466428fe9ccf1d6692a555"}, "postgrex": {:hex, :postgrex, "0.17.2", "a3ec9e3239d9b33f1e5841565c4eb200055c52cc0757a22b63ca2d529bbe764c", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "80a918a9e9531d39f7bd70621422f3ebc93c01618c645f2d91306f50041ed90c"},
"progress_bar": {:hex, :progress_bar, "2.0.1", "7b40200112ae533d5adceb80ff75fbe66dc753bca5f6c55c073bfc122d71896d", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "2519eb58a2f149a3a094e729378256d8cb6d96a259ec94841bd69fdc71f18f87"}, "progress_bar": {:hex, :progress_bar, "3.0.0", "f54ff038c2ac540cfbb4c2bfe97c75e7116ead044f3c2b10c9f212452194b5cd", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "6981c2b25ab24aecc91a2dc46623658e1399c21a2ae24db986b90d678530f2b7"},
"rajska": {:git, "https://github.com/tcitworld/rajska.git", "0c036448e261e8be6a512581c592fadf48982d84", [branch: "mobilizon"]}, "rajska": {:git, "https://github.com/tcitworld/rajska.git", "0c036448e261e8be6a512581c592fadf48982d84", [branch: "mobilizon"]},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"remote_ip": {:hex, :remote_ip, "1.1.0", "cb308841595d15df3f9073b7c39243a1dd6ca56e5020295cb012c76fbec50f2d", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "616ffdf66aaad6a72fc546dabf42eed87e2a99e97b09cbd92b10cc180d02ed74"}, "remote_ip": {:hex, :remote_ip, "1.1.0", "cb308841595d15df3f9073b7c39243a1dd6ca56e5020295cb012c76fbec50f2d", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "616ffdf66aaad6a72fc546dabf42eed87e2a99e97b09cbd92b10cc180d02ed74"},
"replug": {:hex, :replug, "0.1.0", "61d35f8c873c0078a23c49579a48f36e45789414b1ec0daee3fd5f4e34221f23", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f71f7a57e944e854fe4946060c6964098e53958074c69fb844b96e0bd58cfa60"}, "replug": {:hex, :replug, "0.1.0", "61d35f8c873c0078a23c49579a48f36e45789414b1ec0daee3fd5f4e34221f23", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f71f7a57e944e854fe4946060c6964098e53958074c69fb844b96e0bd58cfa60"},
"sentry": {:hex, :sentry, "8.0.6", "c8de1bf0523bc120ec37d596c55260901029ecb0994e7075b0973328779ceef7", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.3", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "051a2d0472162f3137787c7c9d6e6e4ef239de9329c8c45b1f1bf1e9379e1883"}, "sentry": {:hex, :sentry, "8.1.0", "8d235b62fce5f8e067ea1644e30939405b71a5e1599d9529ff82899d11d03f2b", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, "~> 2.3", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "f9fc7641ef61e885510f5e5963c2948b9de1de597c63f781e9d3d6c9c8681ab4"},
"shortuuid": {:hex, :shortuuid, "2.1.2", "14dbafdb2f6c7213fdfcc05c7572384b5051a7b1621170018ad4c05504bd96c1", [:mix], [], "hexpm", "d9b0c4f37500ea5199b6275ece872e213e9f45a015caf4aa777cec84f63ad353"}, "shortuuid": {:hex, :shortuuid, "3.0.0", "028684d9eeed0ad4b800e8481afd854e1a61c526f35952455b2ee4248601e7b8", [:mix], [], "hexpm", "dfd8f80f514cbb91622cb83f4ac0d6e2f06d98cc6d4aeba94444a212289d0d39"},
"sitemapper": {:hex, :sitemapper, "0.7.0", "4aee7930327a9a01b1c9b81d1d42f60c1a295e9f420108eb2d130c317415abd7", [:mix], [{:ex_aws_s3, "~> 2.0", [hex: :ex_aws_s3, repo: "hexpm", optional: true]}, {:xml_builder, "~> 2.1", [hex: :xml_builder, repo: "hexpm", optional: false]}], "hexpm", "60f7a684e5e9fe7f10ac5b69f48b0be2bcbba995afafcb3c143fc0c8ef1f223f"}, "sitemapper": {:hex, :sitemapper, "0.7.0", "4aee7930327a9a01b1c9b81d1d42f60c1a295e9f420108eb2d130c317415abd7", [:mix], [{:ex_aws_s3, "~> 2.0", [hex: :ex_aws_s3, repo: "hexpm", optional: true]}, {:xml_builder, "~> 2.1", [hex: :xml_builder, repo: "hexpm", optional: false]}], "hexpm", "60f7a684e5e9fe7f10ac5b69f48b0be2bcbba995afafcb3c143fc0c8ef1f223f"},
"sleeplocks": {:hex, :sleeplocks, "1.1.2", "d45aa1c5513da48c888715e3381211c859af34bee9b8290490e10c90bb6ff0ca", [:rebar3], [], "hexpm", "9fe5d048c5b781d6305c1a3a0f40bb3dfc06f49bf40571f3d2d0c57eaa7f59a5"}, "sleeplocks": {:hex, :sleeplocks, "1.1.2", "d45aa1c5513da48c888715e3381211c859af34bee9b8290490e10c90bb6ff0ca", [:rebar3], [], "hexpm", "9fe5d048c5b781d6305c1a3a0f40bb3dfc06f49bf40571f3d2d0c57eaa7f59a5"},
"slugger": {:hex, :slugger, "0.3.0", "efc667ab99eee19a48913ccf3d038b1fb9f165fa4fbf093be898b8099e61b6ed", [:mix], [], "hexpm", "20d0ded0e712605d1eae6c5b4889581c3460d92623a930ddda91e0e609b5afba"}, "slugger": {:hex, :slugger, "0.3.0", "efc667ab99eee19a48913ccf3d038b1fb9f165fa4fbf093be898b8099e61b6ed", [:mix], [], "hexpm", "20d0ded0e712605d1eae6c5b4889581c3460d92623a930ddda91e0e609b5afba"},
"sobelow": {:hex, :sobelow, "0.12.2", "45f4d500e09f95fdb5a7b94c2838d6b26625828751d9f1127174055a78542cf5", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2f0b617dce551db651145662b84c8da4f158e7abe049a76daaaae2282df01c5d"}, "sobelow": {:hex, :sobelow, "0.12.2", "45f4d500e09f95fdb5a7b94c2838d6b26625828751d9f1127174055a78542cf5", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2f0b617dce551db651145662b84c8da4f158e7abe049a76daaaae2282df01c5d"},
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"},
"struct_access": {:hex, :struct_access, "1.1.2", "a42e6ceedd9b9ea090ee94a6da089d56e16f374dbbc010c3eebdf8be17df286f", [:mix], [], "hexpm", "e4c411dcc0226081b95709909551fc92b8feb1a3476108348ea7e3f6c12e586a"}, "struct_access": {:hex, :struct_access, "1.1.2", "a42e6ceedd9b9ea090ee94a6da089d56e16f374dbbc010c3eebdf8be17df286f", [:mix], [], "hexpm", "e4c411dcc0226081b95709909551fc92b8feb1a3476108348ea7e3f6c12e586a"},
"sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"}, "sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"},
"swoosh": {:hex, :swoosh, "1.11.1", "70be59dee05dd8ce8e1ed9cb15534779d72df9e1ef9c1c09aba0910485526eb2", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "173a5c0b5d42ead251ebdfad7601e57407639a25837f6b6ccf0ea5f36e4ad23f"}, "swoosh": {:hex, :swoosh, "1.11.4", "9b353f998cba3c5e101a0669559c2fb2757b5d9eb7db058bf08687d82e93e416", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d3390914022a456ae1604bfcb3431bd12509b2afe8c70296bae6c9dca4903d0f"},
"telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"},
"tesla": {:hex, :tesla, "1.7.0", "a62dda2f80d4f8a925eb7b8c5b78c461e0eb996672719fe1a63b26321a5f8b4e", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "2e64f01ebfdb026209b47bc651a0e65203fcff4ae79c11efb73c4852b00dc313"}, "tesla": {:hex, :tesla, "1.7.0", "a62dda2f80d4f8a925eb7b8c5b78c461e0eb996672719fe1a63b26321a5f8b4e", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.13", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:msgpax, "~> 2.3", [hex: :msgpax, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "2e64f01ebfdb026209b47bc651a0e65203fcff4ae79c11efb73c4852b00dc313"},
"timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"}, "timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"},

109
mix.nix
View file

@ -10,12 +10,12 @@ let
packages = with beamPackages; with self; { packages = with beamPackages; with self; {
absinthe = buildMix rec { absinthe = buildMix rec {
name = "absinthe"; name = "absinthe";
version = "1.7.1"; version = "1.7.5";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0mralw4b8lwczv0m064h59y8fjqh9cihhmi5mpxkpyl173cxpi60"; sha256 = "05n33srckncg3f50nxzx3r05n8axiwb2c4p91snr8qm2vj5a7a92";
}; };
beamDeps = [ dataloader decimal nimble_parsec telemetry ]; beamDeps = [ dataloader decimal nimble_parsec telemetry ];
@ -270,12 +270,12 @@ let
dataloader = buildMix rec { dataloader = buildMix rec {
name = "dataloader"; name = "dataloader";
version = "1.0.10"; version = "2.0.0";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0gwnrlrvylar2mdlgi9y9pylk8c3la3c2k71mjrg9pcsq3771kal"; sha256 = "1w7ygm885fidf8i5q89ya1mg800dy0zqig6djpiidqkcny0igmh9";
}; };
beamDeps = [ ecto telemetry ]; beamDeps = [ ecto telemetry ];
@ -322,12 +322,12 @@ let
digital_token = buildMix rec { digital_token = buildMix rec {
name = "digital_token"; name = "digital_token";
version = "0.4.0"; version = "0.6.0";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "09kfwvjmjzikhy7p7s5dgkl9x011xvsb052fqfrmpvhz3pvfsy51"; sha256 = "1lf4vp5bdjz4hmm6zb0knqz8qm4jn3fwma540a5i46n6wwkdcm94";
}; };
beamDeps = [ cldr_utils jason ]; beamDeps = [ cldr_utils jason ];
@ -348,12 +348,12 @@ let
earmark_parser = buildMix rec { earmark_parser = buildMix rec {
name = "earmark_parser"; name = "earmark_parser";
version = "1.4.32"; version = "1.4.33";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0md7rhw1ix4fp31bql9scvl4jpijixczm2ky7mxffwq3srvxvc5q"; sha256 = "13qvlqnii8g6bcz6cl330vjwaan7jy30g1app3yvjncvf8rnhlid";
}; };
beamDeps = []; beamDeps = [];
@ -374,12 +374,12 @@ let
ecto = buildMix rec { ecto = buildMix rec {
name = "ecto"; name = "ecto";
version = "3.10.2"; version = "3.10.3";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0d82qqlvhpi1mkqifayzzd0r0068l5csz1ml6i5qlr6py1w5g2ba"; sha256 = "0crlrpl392pbkzl6ar4z6afna8h9d46wshky1zbr3m344d7cggj4";
}; };
beamDeps = [ decimal jason telemetry ]; beamDeps = [ decimal jason telemetry ];
@ -426,12 +426,12 @@ let
ecto_shortuuid = buildMix rec { ecto_shortuuid = buildMix rec {
name = "ecto_shortuuid"; name = "ecto_shortuuid";
version = "0.1.3"; version = "0.2.0";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "152299sdkpmg3wlcyf9lyfp2r515c5lvqnnmjkg6alhjsz7ch5fj"; sha256 = "0rgvivrvl504jgfh2yqgcd74ar3q1qbxxwzngrd2zsbbx1qknbmr";
}; };
beamDeps = [ ecto shortuuid ]; beamDeps = [ ecto shortuuid ];
@ -489,6 +489,19 @@ let
beamDeps = []; beamDeps = [];
}; };
erlport = buildRebar3 rec {
name = "erlport";
version = "0.11.0";
src = fetchHex {
pkg = "${name}";
version = "${version}";
sha256 = "1r7f0j12gnx65p6c86w035rjlzp1sa52ghyip0lx6j1rmz63dccf";
};
beamDeps = [];
};
eternal = buildMix rec { eternal = buildMix rec {
name = "eternal"; name = "eternal";
version = "1.2.2"; version = "1.2.2";
@ -504,12 +517,12 @@ let
ex_cldr = buildMix rec { ex_cldr = buildMix rec {
name = "ex_cldr"; name = "ex_cldr";
version = "2.37.1"; version = "2.37.2";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0y5z2dkldf0a5zkdq9z9sxqbbnzp66azb92f81p9dg2lhhlc6q2x"; sha256 = "1fljryh921whv90v6m1aax2rabybark3nw11cv76lwc0a0fpnin8";
}; };
beamDeps = [ cldr_utils decimal gettext jason nimble_parsec ]; beamDeps = [ cldr_utils decimal gettext jason nimble_parsec ];
@ -517,12 +530,12 @@ let
ex_cldr_calendars = buildMix rec { ex_cldr_calendars = buildMix rec {
name = "ex_cldr_calendars"; name = "ex_cldr_calendars";
version = "1.22.0"; version = "1.22.1";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "12wf4v9r27skhc7gzhh78f22mraisg8gw47bhrbwx780hvh6vj61"; sha256 = "0s812jkj4hf5274gp568syk3xp2d9228wwkn7gwjx2rix3cqqh77";
}; };
beamDeps = [ ex_cldr_numbers ex_doc jason ]; beamDeps = [ ex_cldr_numbers ex_doc jason ];
@ -569,12 +582,12 @@ let
ex_cldr_numbers = buildMix rec { ex_cldr_numbers = buildMix rec {
name = "ex_cldr_numbers"; name = "ex_cldr_numbers";
version = "2.31.1"; version = "2.31.3";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "1kxb3w0yl9c0m6kb16k969r6g0x4xp536zwp6jffdw30pzs40k59"; sha256 = "1zc8hmj4wl1iamc7wjvizbbfny2gcpl7bapk70h419n4xh4dw6dm";
}; };
beamDeps = [ decimal digital_token ex_cldr ex_cldr_currencies jason ]; beamDeps = [ decimal digital_token ex_cldr ex_cldr_currencies jason ];
@ -595,12 +608,12 @@ let
ex_doc = buildMix rec { ex_doc = buildMix rec {
name = "ex_doc"; name = "ex_doc";
version = "0.29.4"; version = "0.30.3";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "1xf49d0ni08a83iankdj8fb6jyxm67wjl0gdwihwnimf6ykrjric"; sha256 = "1dhqi5qx2fkphia0g7x2qg6pib08wsbn4dyyg7gmxln18qh71j7v";
}; };
beamDeps = [ earmark_parser makeup_elixir makeup_erlang ]; beamDeps = [ earmark_parser makeup_elixir makeup_erlang ];
@ -712,12 +725,12 @@ let
fast_html = buildMix rec { fast_html = buildMix rec {
name = "fast_html"; name = "fast_html";
version = "2.0.5"; version = "2.2.0";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "01k51qri44535b1hwixlxk7151vph6vapswlfq918g245544ypv0"; sha256 = "1bpvmqw4pcx8ssgmazvqn0dm6b3g0m5rij6shy8qy5m6nhilyk06";
}; };
beamDeps = [ elixir_make nimble_pool ]; beamDeps = [ elixir_make nimble_pool ];
@ -803,12 +816,12 @@ let
geo_postgis = buildMix rec { geo_postgis = buildMix rec {
name = "geo_postgis"; name = "geo_postgis";
version = "3.4.2"; version = "3.4.3";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "1m5abb98a0kl24ysmawznqz2m5vylm17q88rvd35b003gzwwkn28"; sha256 = "1p7pdwrfbg244n50lhv27xbkmvgfi47y71nwbggzj5v469j36zc2";
}; };
beamDeps = [ geo jason postgrex ]; beamDeps = [ geo jason postgrex ];
@ -1024,12 +1037,12 @@ let
jason = buildMix rec { jason = buildMix rec {
name = "jason"; name = "jason";
version = "1.4.0"; version = "1.4.1";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0891p2yrg3ri04p302cxfww3fi16pvvw1kh4r91zg85jhl87k8vr"; sha256 = "18d70i31bz11nr6vgsjn5prvhkvwqbyf3xq22ck5cnsnzp6ixc7v";
}; };
beamDeps = [ decimal ]; beamDeps = [ decimal ];
@ -1037,12 +1050,12 @@ let
jose = buildMix rec { jose = buildMix rec {
name = "jose"; name = "jose";
version = "1.11.5"; version = "1.11.6";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "115k981kfg9jmafgs16rybc5qah6p0zgvni3bdyfl0pyp8av5lyw"; sha256 = "0f4pzx8xdzjkkfjkl442w6lhajgfzsnp3dxcxrh1x72ga1swnxb2";
}; };
beamDeps = []; beamDeps = [];
@ -1323,12 +1336,12 @@ let
oban = buildMix rec { oban = buildMix rec {
name = "oban"; name = "oban";
version = "2.15.1"; version = "2.15.2";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "1qgk5b5wsdavy0mwi1zklcl1sajxz693n0ayvn7lm1nvk1j63gk0"; sha256 = "1sgickk10b73pkddfhk5vhmi8vjn065wzyl41ng4iiwgljg5fjhg";
}; };
beamDeps = [ ecto_sql jason postgrex telemetry ]; beamDeps = [ ecto_sql jason postgrex telemetry ];
@ -1362,12 +1375,12 @@ let
phoenix = buildMix rec { phoenix = buildMix rec {
name = "phoenix"; name = "phoenix";
version = "1.7.6"; version = "1.7.7";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "127v5lrb0zflgm5cqwxsfjv76mizdldkzs66rdhb0as0h1vvxd7n"; sha256 = "119h8lcvarlm7xrlrb301wgrd3plwwmbvl3f3dckfpjy75ff2rl9";
}; };
beamDeps = [ castore jason phoenix_pubsub phoenix_template phoenix_view plug plug_cowboy plug_crypto telemetry websock_adapter ]; beamDeps = [ castore jason phoenix_pubsub phoenix_template phoenix_view plug plug_cowboy plug_crypto telemetry websock_adapter ];
@ -1414,12 +1427,12 @@ let
phoenix_live_view = buildMix rec { phoenix_live_view = buildMix rec {
name = "phoenix_live_view"; name = "phoenix_live_view";
version = "0.19.2"; version = "0.19.5";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "157m7n71wfgd5c4gj9n120gxz5m6qrx3y7iriy5jxwwpyaqprici"; sha256 = "1lx9gi70a3cabjnjhslqbs8ysnpjz5yj324vjkxxg6zv7kfs1smj";
}; };
beamDeps = [ jason phoenix phoenix_html phoenix_template phoenix_view telemetry ]; beamDeps = [ jason phoenix phoenix_html phoenix_template phoenix_view telemetry ];
@ -1453,12 +1466,12 @@ let
phoenix_template = buildMix rec { phoenix_template = buildMix rec {
name = "phoenix_template"; name = "phoenix_template";
version = "1.0.1"; version = "1.0.3";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "1vlkd4z2bxinczwcysydidpnh49rpxjihb5k3k4k8qr2yrwc0z8m"; sha256 = "0b4fbp9dhfii6njksm35z8xf4bp8lw5hr7bv0p6g6lj1i9cbdx0n";
}; };
beamDeps = [ phoenix_html ]; beamDeps = [ phoenix_html ];
@ -1531,12 +1544,12 @@ let
postgrex = buildMix rec { postgrex = buildMix rec {
name = "postgrex"; name = "postgrex";
version = "0.17.1"; version = "0.17.2";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0md5j9k1vkwwzql68in6hmj0vfcdbnav33shxszf4fz7i2s5gc0l"; sha256 = "036r3q250vrhj4nmyr4cc40krjgbyci18qkhppvkj7akx6liiac0";
}; };
beamDeps = [ db_connection decimal jason ]; beamDeps = [ db_connection decimal jason ];
@ -1544,12 +1557,12 @@ let
progress_bar = buildMix rec { progress_bar = buildMix rec {
name = "progress_bar"; name = "progress_bar";
version = "2.0.1"; version = "3.0.0";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "11wgy5qxr7yn3f299v2rlab6vjyqas13fag7jjha6jgil9cfn695"; sha256 = "1dzj622nf3drhswlvqia3b19j4wfclindi1d3b4yqjmjbarc50b9";
}; };
beamDeps = [ decimal ]; beamDeps = [ decimal ];
@ -1596,12 +1609,12 @@ let
sentry = buildMix rec { sentry = buildMix rec {
name = "sentry"; name = "sentry";
version = "8.0.6"; version = "8.1.0";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "10qqkqvykw8v3xdw9j19jgg3kwjfdrp9sz3wg0vk2bqnf822s6h5"; sha256 = "1d0sd34ckmnkx60zfqvwb7gf37cbjk166nay1x8qbs31xx0pdz7r";
}; };
beamDeps = [ hackney jason plug plug_cowboy ]; beamDeps = [ hackney jason plug plug_cowboy ];
@ -1609,12 +1622,12 @@ let
shortuuid = buildMix rec { shortuuid = buildMix rec {
name = "shortuuid"; name = "shortuuid";
version = "2.1.2"; version = "3.0.0";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0lyk7bv89v3wfymg9jhml12rygi15s3wwpi7nscm3sh0fprw9c6r"; sha256 = "0f8dkll158j48jlynjkdrjc6vw72sv04lgxq5ii93fsca47zin6z";
}; };
beamDeps = []; beamDeps = [];
@ -1674,12 +1687,12 @@ let
ssl_verify_fun = buildRebar3 rec { ssl_verify_fun = buildRebar3 rec {
name = "ssl_verify_fun"; name = "ssl_verify_fun";
version = "1.1.6"; version = "1.1.7";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "1026l1z1jh25z8bfrhaw0ryk5gprhrpnirq877zqhg253x3x5c5x"; sha256 = "1y37pj5q6gk1vrnwg1vraws9yihrv9g4133w2qq1sh1piw71jk7y";
}; };
beamDeps = []; beamDeps = [];
@ -1713,12 +1726,12 @@ let
swoosh = buildMix rec { swoosh = buildMix rec {
name = "swoosh"; name = "swoosh";
version = "1.11.1"; version = "1.11.4";
src = fetchHex { src = fetchHex {
pkg = "${name}"; pkg = "${name}";
version = "${version}"; version = "${version}";
sha256 = "0gyj99pg798frxn6nzw34nd661vlwl0pdbfzxd8x5sj2bl5mqfhp"; sha256 = "03rxj2jdrjg6pab05iz8myr0j9fi3d1v7z2bc3hnli9a08a0jffk";
}; };
beamDeps = [ cowboy gen_smtp hackney jason mime plug_cowboy telemetry ]; beamDeps = [ cowboy gen_smtp hackney jason mime plug_cowboy telemetry ];