JMAP Tasks Specification (2024)

This document specifies a data model for synchronizing todo/task data with a server using JMAP.

Introduction

JMAP ([@!RFC8620] – JSON Meta Application Protocol) is a generic protocol for synchronizing data, such as mail, calendars or contacts, between a client and a server. It is optimized for mobile and web environments, and aims to provide a consistent interface to different data types.

JMAP for Calendars ([@!I-D.ietf-jmap-calendars]) defines a data model for synchronizing calendar data between a client and a server using JMAP. The data model is designed to allow a server to provide consistent access to the same data via CalDAV [@?RFC4791] as well as JMAP.

While CalDAV defines access to tasks, JMAP for Calendars does not. This specification fills this gap and defines a data model for synchronizing task data between a client and a server using JMAP. It is built upon JMAP for Calendars and reuses most of its definitions. For better readability, this document only outlines differences between this specification and JMAP for Calendars. If not stated otherwise, the same specifics that apply to Calendar, CalendarEvent and CalendarEventNotification objects as defined in the aforementioned specification also apply to similar data types introduced in this specification.

Notational Conventions

The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in BCP 14 [@!RFC2119] [@!RFC8174] when, and only when, they appear in all capitals, as shown here.

Type signatures, examples, and property descriptions in this document follow the conventions established in Section 1.1 of [@!RFC8620]. Data types defined in the core specification are also used in this document.

The LocalDate Data Type

Where LocalDate is given as a type, it means a string in the same format as Date (see [@!RFC8620], Section 1.4), but with the time-offset omitted from the end. For example, 2014-10-30T14:12:00. The interpretation in absolute time depends upon the time zone for the task, which may not be a fixed offset (for example when daylight saving time occurs).

The Duration Data Type

Where Duration is given as a type, it means a length of time represented by a subset of the ISO 8601 duration format, as defined in [@!RFC8984], Section 1.4.6.

Terminology

The same terminology is used in this document as in the core JMAP specification, see [@!RFC8620], Section 1.6.

The terms ParticipantIdentity, TaskList, Task and TaskNotification are used to refer to the data types defined in this document and instances of those data types.

Data Model Overview

Similar to JMAP for Calendar, an Account (see [@!RFC8620], Section 1.6.2) contains zero or more TaskList objects, which is a named collection of Tasks belonging to a Principal (see [@!I-D.ietf-jmap-sharing] Section XXX). Task lists can also provide defaults, such as alerts and a color, to apply to tasks in the calendar. Clients commonly let users toggle visibility of tasks belonging to a particular task list on/off.

A Task is a representation of a single task or recurring series of Tasks in JSTask [@!RFC8984] format. Recurrence rules and alerts as defined in JMAP for Calendars (see [@!I-D.ietf-jmap-calendars] Section XXX) apply.

Just like the CalendarEventNotification objects (see [@!I-D.ietf-jmap-calendars] Section XXX), TaskNotification objects keep track of the history of changes made to a task by other users. Similarly, the ShareNotification type (see [@!I-D.ietf-jmap-sharing] Section XXX) notifies the user when their access to another user’s task list is granted or revoked.

Use cases for task systems vary. Only a few systems will require implementation of all available features defined within this specification. For this reason, this document describes several extensions to the core task properties and objects through which support for a certain feature MUST be advertised via capabilities. In addition to the core features advertised via urn:ietf:params:jmap:tasks support for recurrences, assignees, alerts, localizations as well as custom time zones can be advertised. As defined in [@!RFC8620], servers SHOULD throw an “urn:ietf:params:jmap:error:unknownCapability” error when a client uses a capability that the server does not understand. However, a Task object might just contain data that the server does not understand. In this case, the server SHOULD save it and ignore its existence.

Addition to the Capabilities Object

The capabilities object is returned as part of the JMAP Session object; see [@!RFC8620], Section 2. This document defines six additional capability URIs.

urn:ietf:params:jmap:tasks

This represents support for the core properties and objects of the TaskList, Task and TaskNotification data types and associated API methods. The value of this property in the JMAP Session capabilities property is an empty object.

The value of this property in an account’s accountCapabilities property is an object that MUST contain the following information on server capabilities and permissions for that account:

  • minDateTime: LocalDateThe earliest date-time the server is willing to accept for any date stored in a Task.
  • maxDateTime: LocalDateThe latest date-time the server is willing to accept for any date stored in a Task.
  • mayCreateTaskList: BooleanIf true, the user may create a task list in this account.

urn:ietf:params:jmap:tasks:recurrences

This represents support for the recurrence properties and objects of the TaskList, Task and TaskNotification data types and associated API methods. The value of this property in the JMAP Session capabilities property is an empty object.

The value of this property in an account’s accountCapabilities property is an object that MUST contain the following information on server capabilities and permissions for that account:

  • maxExpandedQueryDuration: DurationThe maximum duration the user may query over when asking the server to expand recurrences.

urn:ietf:params:jmap:tasks:assignees

This represents support for the assignee properties and objects of the TaskList, Task and TaskNotification data types and associated API methods. The value of this property in the JMAP Session capabilities property is an empty object.

The value of this property in an account’s accountCapabilities property is an object that MUST contain the following information on server capabilities and permissions for that account:

  • maxParticipantsPerTask: UnsignedInt|nullThe maximum number of participants a single task may have, or null for no limit.

urn:ietf:params:jmap:tasks:alerts

This represents support for the alerts properties and objects of the TaskList, Task and TaskNotification data types and associated API methods. The value of this property in the JMAP Session capabilities property and the account’s accountCapabilities property is an empty object.

urn:ietf:params:jmap:tasks:multilingual

This represents support for the multilingual properties and objects of the TaskList, Task and TaskNotification data types and associated API methods. The value of this property in the JMAP Session capabilities property and the account’s accountCapabilities property is an empty object.

urn:ietf:params:jmap:tasks:customtimezones

This represents support for the custom time zone properties and objects of the TaskList, Task and TaskNotification data types and associated API methods. The value of this property in the JMAP Session capabilities property and the account’s accountCapabilities property is an empty object.

Principals and Sharing

For systems that also support JMAP Sharing [@!I-D.ietf-jmap-sharing], the tasks capability is used to indicate that this principal may be used with task management.

Principal Capability urn:ietf:params:jmap:tasks

A “urn:ietf:params:jmap:tasks” property is added to the Principal “capabilities” object, the value of which is an object with the following properties:

  • accountId: Id|nullId of Account with the urn:ietf:params:jmap:tasks capability thatcontains the task data for this principal, or null if none (e.g. the Principal is a group just used for permissions management), or the user does not have access to any data in the account. The corresponding Account object can be found in the principal’s “accounts” property, as per [RFC XXX].
  • mayShareWith: BooleanMay the user add this principal as a task sharee (by adding them to theshareWith property of a task list, see Section XXX)?
  • sendTo: String[String]|nullIf this principal may be added as a participant to a task, this is the Participant#sendTo property to add (see [@!RFC8984], Section 4.4.5) for scheduling messages to reach it.

TaskLists

A TaskList is a named collection of tasks. All tasks are associated with exactly one TaskList.

A TaskList object has the following core properties:

  • id: Id (immutable; server-set)The id of the task list.
  • role: String|null (default: null)Denotes the task list has a special purpose. This MUST be one of the following:

    • inbox: This is the principal’s default task list;
    • trash: This task list holds messages the user has discarded;
  • name: StringThe user-visible name of the task list. This may be any UTF-8 string of at least 1 character in length and maximum 255 octets in size.
  • description: String|null (default: null)An optional longer-form description of the task list, to provide context in shared environments where users need more than just the name.
  • color: String|null (default: null)A color to be used when displaying tasks associated with the task list.

    If not null, the value MUST be a case-insensitive color name taken from the set of names defined in Section 4.3 of CSS Color Module Level 3 COLORS, or an RGB value in hexadecimal notation, as defined in Section 4.2.1 of CSS Color Module Level 3.

    The color SHOULD have sufficient contrast to be used as text on a white background.

  • keywordColors String[String]|null (default:null)A map of keywords to the colors used when displaying the keywords associated to a task. The same considerations, as for color above, apply.
  • categoryColors String[String]|null (default:null)A map of categories to the colors used when displaying the categories associated to a task. The same considerations, as for color above, apply.
  • sortOrder: UnsignedInt (default: 0)Defines the sort order of task lists when presented in the client’s UI, so itis consistent between devices. The number MUST be an integer in the range0 ≤ sortOrder < 2^31.

    A task list with a lower order should be displayed before a list with a higher order in any list of task lists in the client’s UI. Task lists with equal order SHOULD be sorted in alphabetical order by name. The sorting should take into account locale-specific character order convention.

  • isSubscribed: BooleanHas the user indicated they wish to see this task list in their client? This SHOULD default to false for task lists in shared accounts the user has access to, and true for any new task list created by the user themselves.

    If false, the task list should only be displayed when the user explicitly requests it or to offer it for the user to subscribe to.

  • timeZone: String|null (default: null)The time zone to use for tasks without a time zone when the server needs to resolve them into absolute time, e.g., for alerts or availability calculation. The value MUST be a time zone id from the IANA Time Zone Database TZDB. If null, the timeZone of the account’s associated Principal will be used. Clients SHOULD use this as the default for new tasks in this task list, if set.
  • workflowStatuses: String[] (default: [completed, failed, in-process, needs-action, cancelled, pending])Defines the allowed values for workflowStatus. The default values are based on the values defined within [@!RFC8984], Section 5.2.5 and pending. pending indicates the task has been created and accepted, but it currently is on-hold.

    As naming and workflows differ between systems, mapping the status correctly to the present values of the Task can be challenging. In the most simple case, a task system may support merely two states - done and not-done. On the other hand, statuses and their semantic meaning can differ between systems or task lists (e.g. projects). In case of uncertainty, here are some recommendations for mapping commonly observed values that can help during implementation:

    • completed: done (most simple case), closed, verified, …
    • in-process: in-progress, active, assigned, …
    • needs-action: not-done (most simple case), not-started, new, …
    • pending: waiting, deferred, on-hold, paused, …
  • shareWith: Id[TaskRights]|null (default: null)A map of Principal id to rights for principals this task list is shared with. The principal to which this task list belongs MUST NOT be in this set. This is null if the task list is not shared with anyone. May be modified only if the user has the mayAdmin right. The account id for the principals may be found in the urn:ietf:params:jmap:principals:owner capability of the Account to which the task list belongs.

  • myRights: TaskRights (server-set)The set of access rights the user has in relation to this TaskList.

    • The user may fetch the task if they have the mayReadItems right on anytask list the task is in.
    • The user may remove a task from a task list (by modifying the task’s“taskListId” property) if the user has the appropriate permission for thattask list.
    • The user may make other changes to the task if they have the right to doso in all task list to which the task belongs.

A TaskRights object has the following properties:

  • mayReadItems: BooleanThe user may fetch the tasks in this task list.
  • mayWriteAll: BooleanThe user may create, modify or destroy all tasks in this task list, or move tasks to or from this task list. If this is true, the mayWriteOwn, mayUpdatePrivate and mayRSVP properties MUST all also be true.
  • mayWriteOwn: BooleanThe user may create, modify or destroy a task on this task list if either they are the owner of the task (see below) or the task has no owner. This means the user may also transfer ownership by updating a task so they are no longer an owner.
  • mayUpdatePrivate: BooleanThe user may modify the following properties on all tasks in the task list, even if they would not otherwise have permission to modify that task. These properties MUST all be stored per-user, and changes do not affect any other user of the task list.

    The user may also modify the above on a per-occurrence basis for recurring tasks (updating the recurrenceOverrides property of the task to do so).

  • mayRSVP: BooleanThe user may modify the following properties of any Participant object that corresponds to one of the user’s ParticipantIdentity objects in the account, even if they would not otherwise have permission to modify that task

    • participationStatus
    • participationComment
    • expectReply

    If the task has its “mayInviteSelf” property set to true (see Section XXX), then the user may also add a new Participant to the task with a sendTo property that is the same as the sendTo property of one of the user’s ParticipantIdentity objects in the account. The roles property of the participant MUST only contain “attendee”.

    If the task has its “mayInviteOthers” property set to true (see Section XXX) and there is an existing Participant in the task corresponding to one of the user’s ParticipantIdentity objects in the account, then the user may also add new participants. The roles property of any new participant MUST only contain “attendee”.

    The user may also do all of the above on a per-occurrence basis for recurring tasks (updating the recurrenceOverrides property of the task to do so).

  • mayAdmin: BooleanThe user may modify sharing for this task list.
  • mayDelete: Boolean (server-set)The user may delete the task list itself. This property MUST be false if the account to which this task list belongs has the isReadOnly property set to true.

The user is an owner for a task if the Task object has a “participant” property, and one of the Participant objects both:

  1. Has the “chair” role.
  2. Corresponds to one of the user’s ParticipantIdentity objects in the account (as per Section XXX).

A task has no owner if its participant property is null or omitted.

Alerts extension

A TaskList has the following alerts properties:

  • defaultAlertsWithTime: Id[Alert]|nullA map of alert ids to Alert objects (see [@!RFC8984], Section 4.5.2) to apply for tasks where “showWithoutTime” is false and “useDefaultAlerts” is true. Ids MUST be unique across all default alerts in the account, including those in other task lists; a UUID is recommended.

    If omitted on creation, the default is server dependent. For example, servers may choose to always default to null, or may copy the alerts from the default task list.

  • defaultAlertsWithoutTime: Id[Alert]|nullA map of alert ids to Alert objects (see [@!RFC8984], Section 4.5.2) to apply for tasks where “showWithoutTime” is true and “useDefaultAlerts” is true. Ids MUST be unique across all default alerts in the account, including those in other task lists; a UUID is recommended.

    If omitted on creation, the default is server dependent. For example, servers may choose to always default to `null`, or may copy the alerts from the default task list.

TaskList/get

This is a standard “/get” method as described in [@!RFC8620], Section 5.1. The ids argument may be null to fetch all at once.

TaskList/changes

This is a standard “/changes” method as described in [@!RFC8620], Section 5.2.

TaskList/set

This is the standard “/set” method as described in [@!RFC8620], Section 5.3 but with the following additional request argument:

  • onDestroyRemoveTasks: Boolean (default: false)

    If false, any attempt to destroy a TaskList that still has Tasks in it will be rejected with a TaskListHasTask SetError. Iftrue, any Tasks that were in the TaskList will be removed from it, and they will be destroyed.

The “shareWith” properties may only be set by users that have the mayAdmin right.When modifying the shareWith property, the user cannot give a right to a principal if the principal did not already have that right and the user making the change also does not have that right. Any attempt to do so must be rejected with a forbidden SetError.

Users can subscribe or unsubscribe to a task list by setting the “isSubscribed” property. The server MAY forbid users from subscribing to certain task lists even though they have permission to see them, rejecting the update with a forbidden SetError.

The following properties may be set by anyone who is subscribed to the task list, and are all stored per-user:

  • name
  • color
  • sortOrder
  • timeZone
  • defaultAlertsWithoutTime
  • defaultAlertsWithTime

The “name”, “color” and “timeZone” properties are initially inherited from the owner’s copy of the task list, but if set by a sharee then they get their own copy of the property; it does not change for any other principals. If the value of the property in the owner’s task list changes after this, it does not overwrite the sharee’s value.

The “sortOrder”, “isVisible”, “defaultAlertsWithTime”, and “defaultAlertsWithoutTime” properties are initially the default value for each sharee; they are not inherited from the owner.

The following extra SetError types are defined:

For “destroy”:

  • taskListHasTask: The Task List has at least one task assigned toit, and the “onDestroyRemoveTasks” argument was false.

Tasks

A Task object contains information about a task. It is a JSTask object, as defined in [@!RFC8984]. However, as use-cases of task systems vary, this Section defines relevant parts of the JSTask object to implement the core task capability as well as several extensions to it. Only the core capability MUST be implemented by any task system. Implementers can choose the extensions that fit their own use case. For example, the recurrence extension allows having a Task object represent a series of recurring Tasks.

The core JSTask objects are Task, Link, Location, Relation and VirtualLocation. The core properties are JSTask’s Metadata Properties (Section 4.1), What and Where Properties (Section 4.2), Task Properties (Section 5.2) as well as priority (Section 4.4.1), privacy (Section 4.4.3), replyTo (Section 4.4.4) and timeZone (Section 4.7.1).

On top of the JSTask properties, a Task object has the following additional core properties:

  • id: Id (immutable; server-set)The id of the Task. This property is immutable. The id uniquely identifies a JSTask with a particular “uid” and “recurrenceId” within a particular account.

  • taskListId: IdThe TaskList id this task belongs to. A task MUST belong to exactly one TaskList at all times (until it is destroyed).

  • isDraft: BooleanIf true, this task is to be considered a draft. The server will not send any push notifications for alerts. This may only be set to true upon creation. Once set to false, the value cannot be updated to true. This property MUST NOT appear in “recurrenceOverrides”.

  • utcStart: UTCDateFor simple clients that do not or cannot implement time zone support. Clients should only use this if also asking the server to expand recurrences, as you cannot accurately expand a recurrence without the original time zone.

    This property is calculated at fetch time by the server. Time zones are political, and they can and do change at any time. Fetching exactly the same property again may return different results if the time zone data has been updated on the server. Time zone data changes are not considered “updates” to the task.

    If set, the server will convert the UTC date to the task’s current time zone using its current time zone data and store the local time.

    This is not included by default and must be requested explicitly.

    Floating tasks (tasks without a time zone) will be interpreted as per the time zone given as a Task/get argument.

    Note that it is not possible to accurately calculate the expansion of recurrence rules or recurrence overrides with the utcStart property rather than the local start time. Even simple recurrences such as “repeat weekly” may cross a daylight-savings boundary and end up at a different UTC time. Clients that wish to use “utcStart” are RECOMMENDED to request the server to expand recurrences (see Section XXX).

  • utcDue: UTCDateThe server calculates the end time in UTC from the start/timeZone/duration properties of the task. This is not included by default and must be requested explicitly. Like utcStart, this is calculated at fetch time if requested and may change due to time zone data changes. Floating tasks will be interpreted as per the time zone given as a Task/get argument.

  • sortOrder: UnsignedInt (default: 0)Defines the sort order of a task when presented in the client’s UI, so itis consistent between devices. The number MUST be an integer in the range0 <= sortOrder < 2^31.

    A task with a lower order should be displayed before a task with a higher order in any list of tasks in the client’s UI. Tasks with equal order SHOULD be sorted in alphabetical order by name. The sorting should take into account locale-specific character order convention.

  • workflowStatus: String|null (default: null)Specifies the status of the task. The allowed values are defined within workflowStatuses. If set, progress MUST null.

Extensions to JSCalendar data types

This document extends one JSCalendar data type with new values.

Relation

The keys for relation of the Relation object are extended by the following values:

  • depends-on: This task depends on the referenced task in some manner. For example, a task may be blocked waiting on the other, referenced, task.
  • clone: The referenced task was cloned from this task.
  • duplicate: The referenced task is a duplicate of this task.
  • cause: The referenced task was the cause for this task.

Additional JSCalendar properties

This document defines two new core JSCalendar properties for the JSTask object.

estimatedWork

Type: UnignedInt|null (default: null)

This specifies the estimated amount of work the task takes to complete. In Agile software development or Scrum, it is known as complexity or story points. The number has no actual unit, but a larger number means more work.

impact

Type: String|null (default: null)

This specifies the impact or severity of the task, but does not say anything about the actual prioritization. Some examples are: minor, trivial, major or block. Usually, the priority of a task is based upon its impact and urgency.

checklists

Type: Id[Checklist]

A map of Checklist IDs to Checklist objects, containing checklist items. A Checklist object has the following properties:

  • @type: StringSpecifies the type of this object. This MUST be Checklist.
  • title: String (optional)Title of the list.
  • checkItems: CheckItem[] (optional)The items of the check list.

A CheckItem object has the following properties:

  • @type: StringSpecifies the type of this object. This MUST be CheckItem.
  • title: StringTitle of the item.
  • sortOrder: UnsignedInt (default: 0)Defines the sort order of CheckItem when presented in the client’s UI. The number MUST be an integer in the range 0 <= sortOrder < 2^31. An item with a lower order should be displayed before an item with a higher order. Items with equal order SHOULD be sorted in alphabetical order by name. The sorting should take into account locale-specific character order convention.
  • updated: UTCDateTime (optional)The date and time when this item was updated
  • isComplete: Boolean
  • assigneee: Person (optional)The person that this item is assigned to. The Person object has the following properties of which either principalId or uri MUST be defined:
    • @type: String (mandatory)Specifies the type of this object. This MUST be Person.
    • name: String (optional)The name of the person.
    • uri: String (optional)A URI value that identifies the person. This SHOULD be the scheduleId of the participant that this item was assigned to.
    • principalId: String (optional)The id of the Principal corresponding to the person, if any.

comments

Type: Id[Comment] (optional).

Free-text comments associated with this task. A Comment object has the following properties:

  • @type: String (mandatory). Specifies the type of this object. This MUST be Comment.
  • message: String (mandatory). The free text value of this comment.
  • created: UTCDateTime (optional). The date and time when this note was created.
  • updated: UTCDateTime (optional). The date and time when this note was updated.
  • author: Person (optional). The author of this comment. The Person object is defined in Section (#checklists).

Properties similar in JMAP for Calendar

Attachments are described in [@!I-D.ietf-jmap-calendars], Section XXX.

Recurrences extension

For the recurrence extension, the JSCalendar objects NDay and RecurrenceRule as well as the Recurrence Properties (Section 4.3) need to be supported.

The Task will require the following further property:

  • baseTaskId: Id|null (immutable; server-set)This is only defined if the id property is a synthetic id, generated by the server to represent a particular instance of a recurring Task (see Section XXX). This property gives the id of the “real” Task this was generated from.

Properties similar in JMAP for Calendar

Recurrences and updates to recurrences are described in [@!I-D.ietf-jmap-calendars], Section XXX

Assignees extension

For the assignees extension, the JSCalendar object Participant as well as all Sharing and Scheduling Properties (Section 4.4) need to be supported.

The Task will require the following further property:

  • isOrigin: Boolean (server-set)Is this the authoritative source for this task (i.e., does it controlscheduling for this task; the task has not been added as a result of aninvitation from another task management system)? This is true if, and only if:

    • the task’s “replyTo” property is null; or
    • the account will receive messages sent to at least one of the methodsspecified in the “replyTo” property of the task.

Task objects MUST NOT have a “method” property as this is only used when representing iTIP [@!RFC5546] scheduling messages, not tasks in a data store.

Per-user properties

In shared task lists, any top-level property registered in the IANA registry as “Is Per-User: yes” (see Section XXX) MUST be stored per-user. This includes:

  • keywords
  • color
  • freeBusyStatus
  • useDefaultAlerts
  • alerts

The user may also modify these properties on a per-occurrence basis for recurring tasks; again, these MUST be stored per-user. Sharees initially receive the default value for each of these properties, not whatever value another user may have set.

When writing only per-user properties, the “updated” property MUST also be stored just for that user, if set. When fetching the “updated” property, the value to return is whichever is later of the per-user updated time or the updated time of the base task.

Extensions to JSCalendar data types

The assignees extension extends one JSCalendar data type with new values.

Participants

The Participant object, as defined in [@!I-D.ietf-calext-jscalendar] Section 4.4.6 is used to represent participants. This spec extends the keys for the roles property with the following value:

  • assignee: the participant is expected to work on the task

Additional JSCalendar properties

The assignees extension defines three new JSCalendar properties for the JSTask object.

mayInviteSelf

Type: Boolean (default: false)

If true, any user that has access to the task may add themselves to it as a participant with the “attendee” role. This property MUST NOT be altered in the recurrenceOverrides; it may only be set on the master object.

This indicates the task will accept “party crasher” RSVPs via iTIP, subject to any other domain-specific restrictions, and users may add themselves to the task via JMAP as long as they have the mayRSVP permission for the task list.

mayInviteOthers

Type: Boolean (default: false)

If true, any current participant with the “attendee” role may add new participants with the “attendee” role to the task. This property MUST NOT be altered in the recurrenceOverrides; it may only be set on the master object.

hideAttendees

Type: Boolean (default: false)

If true, only the owners of the task may see the full set of participants. Other sharees of the task may only see the owners and themselves. This property MUST NOT be altered in the recurrenceOverrides; it may only be set on the master object.

Alerts extension

For the alerts extension, the JSCalendar objects Alert, AbsoluteTrigger and OffsetTrigger as well as all Alerts Properties (Section 4.4) need to be supported.

Multilingual extension

For the multilingual extension, the JSCalendar Multilingual Properties (Section 4.6) need to be supported.

Custom Time Zones extension

For the custom time zones extension, the JSCalendar objects TimeZone and TimeZoneRule as well as all Time Zone Properties (Section 4.7) need to be supported.

Task/get

This is the “CalendarEvent/get” method as described in [@!I-D.ietf-jmap-calendars], Section XXX.

TODO redefine this here. Similar to “TaskList/get” we only need to replace a few definitions. Copy+Paste most of the stuff.

Task/changes

This is a standard “/changes” method as described in [@!RFC8620], Section 5.2.

Task/set

This is the “CalendarEvent/set” method as described in [@!I-D.ietf-jmap-calendars], Section XXX.

TODO copy+paste most stuff from “CalendarEvent/set”. It should be fine to just reference patching.

Task/copy

This is a standard “/copy” method as described in [@!RFC8620], Section 5.4.

Task/query

This is the “CalendarEvent/query” method as described in [@!I-D.ietf-jmap-calendars], Section XXX.

TODO copy+paste most stuff from “CalendarEvent/query”. Mainly filtering should be different.

Task/queryChanges

This is a standard “/queryChanges” method as described in [@!RFC8620], Section 5.6.s

Task Notifications

The TaskNotification data type records changes made by external entities to tasks in task lists the user is subscribed to. Notifications are stored in the same Account as the Task that was changed.

This is the same specification as the CalendarEventNotification object from [@!I-D.ietf-jmap-calendars], Section XXX. Only the object properties differ slightly and are therefore fully described in this document.

Object Properties

The TaskNotification object has the following properties:

  • id: StringThe id of the TaskNotification.
  • created: UTCDateThe time this notification was created.
  • changedBy: PersonWho made the change. The Person object is defined in the Section (#checklists).
  • comment: String|nullComment sent along with the change by the user that made it. (e.g. COMMENTproperty in an iTIP message), if any.
  • type: StringThis MUST be one of
    • created
    • updated
    • destroyed
  • TaskId: StringThe id of the Task that this notification is about.
  • isDraft: Boolean (created/updated only)Is this task a draft?
  • task: JSTaskThe data before the change (if updated or destroyed), or the dataafter creation (if created).
  • taskPatch: PatchObject (updated only)A patch encoding the change between the data in the task property, and thedata after the update.

If the change only affects a single instance of a recurring task, the server MAY set the task and taskPatch properties for the just that instance; the taskId MUST still be for the master task.

TaskNotification/get

This is a standard “/get” method as described in [@!RFC8620], Section 5.1.

TaskNotification/changes

This is a standard “/changes” method as described in [@!RFC8620], Section 5.2.

TaskNotification/set

This is a standard “/set” method as described in [@!RFC8620], Section 5.3.

Only destroy is supported; any attempt to create/update MUST be rejected with aforbidden SetError.

TaskNotification/query

This is a standard “/query” method as described in [@!RFC8620], Section 5.5.

Filtering

A FilterCondition object has the following properties:

  • after: UTCDate|nullThe creation date must be on or after this date to match the condition.
  • before: UTCDate|nullThe creation date must be before this date to match the condition.
  • type: StringThe type property must be the same to match the condition.
  • taskIds: Id[]|nullA list of task ids. The taskId property of the notification must be in this list to match the condition.

Sorting

The “created” property MUST be supported for sorting.

TaskNotification/queryChanges

This is a standard “/queryChanges” method as described in [@!RFC8620], Section 5.6.

Security Considerations

All security considerations of JMAP [@!RFC8620] and JSCalendar [@!RFC8984] apply to this specification. Additional considerations specific to the data types and functionality introduced by this document are described in the following subsections.

IANA Considerations

JMAP Capability Registration for “tasks”

IANA will register the “tasks” JMAP Capability as follows:

Capability Name: urn:ietf:params:jmap:tasks

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section XXX

JMAP Capability Registration for “tasks:recurrences”

IANA will register the “tasks:recurrences” JMAP Capability as follows:

Capability Name: urn:ietf:params:jmap:tasks:recurrences

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section XXX

JMAP Capability Registration for “tasks:assignees”

IANA will register the “tasks:recurrences” JMAP Capability as follows:

Capability Name: urn:ietf:params:jmap:tasks:assignees

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section XXX

JMAP Capability Registration for “tasks:alerts”

IANA will register the “tasks:alerts” JMAP Capability as follows:

Capability Name: urn:ietf:params:jmap:tasks:alerts

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section XXX

JMAP Capability Registration for “tasks:multilingual”

IANA will register the “tasks:multilingual” JMAP Capability as follows:

Capability Name: urn:ietf:params:jmap:tasks:multilingual

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section XXX

JMAP Capability Registration for “tasks:customtimezones”

IANA will register the “tasks:customtimezones” JMAP Capability as follows:

Capability Name: urn:ietf:params:jmap:tasks:customtimezones

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section XXX

JSCalendar Property Registrations

Some IANA registrations for JSTask are described in JMAP for Calendars [@!I-D.ietf-jmap-calendars]. TODO explicitly list them.

IANA will register the following additional properties in the JSCalendar Properties Registry.

estimatedWork

Property Name: estimatedWork

Property Type: UnignedInt|null

Property Context: JSTask

Reference: This document, Section XXX.

Intended Use: Common

Is per-user: no

impact

Property Name: impact

Property Type: String|null

Property Context: JSTask

Reference: This document, Section XXX.

Intended Use: Common

Is per-user: no

JMAP Tasks Specification (2024)

References

Top Articles
Amgen Inc (AMGN) Stock Price & News - Google Finance
Amgen Inc. (AMGN) Stock Price, Quote & News - Stock Analysis
Leah4Sci Alkene Reactions
Pwc Transparency Report
Terraria Artisan Loaf
ᐅ eGirl Kleidung kaufen: Wie ein eGirl aussehen so funktionierts!
Provider Connect Milwaukee
Record-breaking crowd lifts Seattle Sounders to CCL glory on "special" night | MLSSoccer.com
50 Cent – Baby By Me (feat. Ne-Yo) ఆంగ్ల లిరిక్స్ & రంగుల అనేక. అనువాదాలు - lyrics | çevirce
Realidades 2 Capitulo 2B Answers
Events - R Consortium
Madden 23 Playbooks Database
Weather Radar For East Coast
Tammi Light Obituary
Ups Cc Center
Hillsborough County Florida Recorder Of Deeds
Body Rub Phoenix
Does the MLB allow gambling? Here's what to know about League Rule 21
Please Put On Your Jacket In Italian Duolingo
Walmart Listings Near Me
Craigslist Jobs Glens Falls Ny
Costco Plaza Alhambra Photos
Dayz Nyheim Map
To Give A Guarantee Promise Figgerits
Fandango Movies And Shows
Syracuse Deadline
Tani Ahrefs
Otis Inmate Search Michigan
Rockcastle County Schools Calendar
Henry Metzger Lpsg
craigslist: northern MI jobs, apartments, for sale, services, community, and events
Poker News Views Gossip
Scythe Banned Combos
Fox News Live Stream USA HD - USNewsON
Bollywood Movies 123Movies
Does Iherb Accept Ebt
Winsipedia
Official Klj
Tcu Jaggaer
Sodexo North Portal
Lohud Rockland Obituaries
Whitfield County Jail Inmates P2C
Craigslist Boats For Sale By Owner Sacramento
Bryant Air Conditioner Parts Diagram
Solar Smash Unblocked Wtf
Beacon Schneider La Porte
Feetfinder Reviews Trustpilot
Gowilkes For Rent
Redbox Walmart Near Me
Codex Genestealer Cults 10th Edition: The Goonhammer Review
Ideological variation in preferred content and source credibility on Reddit during the COVID-19 pandemic
Unblocked Games 76 Bitlife
Latest Posts
Article information

Author: Clemencia Bogisich Ret

Last Updated:

Views: 6465

Rating: 5 / 5 (60 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Clemencia Bogisich Ret

Birthday: 2001-07-17

Address: Suite 794 53887 Geri Spring, West Cristentown, KY 54855

Phone: +5934435460663

Job: Central Hospitality Director

Hobby: Yoga, Electronics, Rafting, Lockpicking, Inline skating, Puzzles, scrapbook

Introduction: My name is Clemencia Bogisich Ret, I am a super, outstanding, graceful, friendly, vast, comfortable, agreeable person who loves writing and wants to share my knowledge and understanding with you.