@remit/api-openapi-spec 0.0.67 → 0.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/openapi.json +102 -12
  2. package/package.json +1 -1
package/openapi.json CHANGED
@@ -2361,7 +2361,7 @@
2361
2361
  },
2362
2362
  "post": {
2363
2363
  "operationId": "CalendarEventOperations_createCalendarEvent",
2364
- "description": "Create an event. The server builds the VEVENT and writes it through the single calendar write path — the same one an accepted invitation and a later CalDAV PUT go through — so the object, its expanded occurrences and the collection's sync sequence land together or not at all.",
2364
+ "description": "Create an event. The server builds the VEVENT and writes it through the single calendar write path — the same one an accepted invitation and a later CalDAV PUT go through — so the object, its expanded occurrences and the collection's sync sequence land together or not at all. Refused with 400 `read_only_calendar` for a `Subscribed` collection, whose events belong to the feed.",
2365
2365
  "parameters": [],
2366
2366
  "responses": {
2367
2367
  "200": {
@@ -2620,7 +2620,7 @@
2620
2620
  },
2621
2621
  "delete": {
2622
2622
  "operationId": "CalendarEventDetailOperations_deleteCalendarEvent",
2623
- "description": "Delete an event. `All` removes the resource and every occurrence it\nproduced; `This` writes an EXDATE for the named occurrence and keeps the\nrest of the series; `Following` truncates the series to end just before\nit.\n\nSame refusals and the same `If-Match` precondition as the update.",
2623
+ "description": "Delete an event. `All` removes the resource and every occurrence it\nproduced; `This` writes an EXDATE for the named occurrence and keeps the\nrest of the series; `Following` truncates the series to end just before\nit.\n\nSame refusals and the same `If-Match` precondition as the update.\nAn event in a `Subscribed` collection is refused with 400\n`read_only_calendar`, here and on the update.",
2624
2624
  "parameters": [
2625
2625
  {
2626
2626
  "name": "calendarObjectId",
@@ -3126,7 +3126,7 @@
3126
3126
  },
3127
3127
  "post": {
3128
3128
  "operationId": "CalendarOperations_createCalendar",
3129
- "description": "Create a calendar collection. Refused with 400 when `urlSegment` is empty or already taken in this account config — the segment is the collection's identity, so a second create under the same one would otherwise silently return the collection that already exists.",
3129
+ "description": "Create a calendar collection. Refused with 400 when `urlSegment` is empty or already taken in this account config — the segment is the collection's identity, so a second create under the same one would otherwise silently return the collection that already exists. With `subscriptionUrl` the feed is fetched first and a fetch that fails is refused with 400 `subscription_unreachable`, naming why and never the URL.",
3130
3130
  "parameters": [],
3131
3131
  "responses": {
3132
3132
  "200": {
@@ -3236,6 +3236,7 @@
3236
3236
  },
3237
3237
  "patch": {
3238
3238
  "operationId": "CalendarDetailOperations_updateCalendar",
3239
+ "description": "Update a calendar collection. `subscriptionEnabled` is refused with 400 `not_subscribed` on a collection that is not `Subscribed`. Turning it off stops the refresh and removes nothing.",
3239
3240
  "parameters": [
3240
3241
  {
3241
3242
  "name": "calendarId",
@@ -7693,6 +7694,11 @@
7693
7694
  "source",
7694
7695
  "timezone",
7695
7696
  "syncSequence",
7697
+ "subscriptionUrl",
7698
+ "subscriptionEnabled",
7699
+ "subscriptionCheckedAt",
7700
+ "subscriptionFetchedAt",
7701
+ "subscriptionError",
7696
7702
  "createdAt",
7697
7703
  "updatedAt"
7698
7704
  ],
@@ -7777,6 +7783,45 @@
7777
7783
  "default": 0,
7778
7784
  "readOnly": true
7779
7785
  },
7786
+ "subscriptionUrl": {
7787
+ "allOf": [
7788
+ {
7789
+ "$ref": "#/components/schemas/String2048"
7790
+ }
7791
+ ],
7792
+ "description": "The read-only iCalendar URL a `Subscribed` collection is filled from, such as a Google Calendar secret address. For some providers the URL is the whole credential, so it never reaches a log line. `\"\"` for every other source.",
7793
+ "default": "",
7794
+ "readOnly": true
7795
+ },
7796
+ "subscriptionEnabled": {
7797
+ "type": "boolean",
7798
+ "description": "Whether the scheduled refresh re-reads `subscriptionUrl`. Turning it off stops the refresh and keeps every stored event. Always `false` on a collection that is not `Subscribed`.",
7799
+ "default": false
7800
+ },
7801
+ "subscriptionCheckedAt": {
7802
+ "type": "integer",
7803
+ "format": "int64",
7804
+ "description": "When the subscription was last fetched, whatever the outcome. `0` when it never was.",
7805
+ "default": 0,
7806
+ "readOnly": true
7807
+ },
7808
+ "subscriptionFetchedAt": {
7809
+ "type": "integer",
7810
+ "format": "int64",
7811
+ "description": "When the subscription was last fetched and written. `0` when it never was.",
7812
+ "default": 0,
7813
+ "readOnly": true
7814
+ },
7815
+ "subscriptionError": {
7816
+ "allOf": [
7817
+ {
7818
+ "$ref": "#/components/schemas/String512"
7819
+ }
7820
+ ],
7821
+ "description": "Why the last fetch failed, or which events in it could not be stored. `\"\"` when the last fetch landed whole.",
7822
+ "default": "",
7823
+ "readOnly": true
7824
+ },
7780
7825
  "createdAt": {
7781
7826
  "type": "integer",
7782
7827
  "format": "int64",
@@ -7795,9 +7840,10 @@
7795
7840
  "enum": [
7796
7841
  "Default",
7797
7842
  "UserCreated",
7798
- "MailDerived"
7843
+ "MailDerived",
7844
+ "Subscribed"
7799
7845
  ],
7800
- "description": "Where a calendar collection came from. `Default` is the one provisioned per account config on first use and is never deleted; `UserCreated` is one a person made; `MailDerived` is one populated from mail rather than by a person."
7846
+ "description": "Where a calendar collection came from. `Default` is the one provisioned per account config on first use and is never deleted; `UserCreated` is one a person made; `MailDerived` is one populated from mail rather than by a person; `Subscribed` is filled from a read-only iCalendar URL and refuses every write except its own refresh."
7801
7847
  },
7802
7848
  "RemitImap.CalendarSuggestionResponse": {
7803
7849
  "type": "object",
@@ -8141,7 +8187,7 @@
8141
8187
  },
8142
8188
  "reason": {
8143
8189
  "type": "string",
8144
- "description": "Why, when the verdict is skipped or rejected"
8190
+ "description": "Why, when the verdict is skipped or rejected; for a filter that lands switched off, what it is waiting for"
8145
8191
  }
8146
8192
  },
8147
8193
  "description": "What became of one item in the submitted document"
@@ -8505,6 +8551,14 @@
8505
8551
  }
8506
8552
  ],
8507
8553
  "description": "IANA time zone this collection's floating times are read in. Absent reads them as UTC."
8554
+ },
8555
+ "subscriptionUrl": {
8556
+ "allOf": [
8557
+ {
8558
+ "$ref": "#/components/schemas/String2048"
8559
+ }
8560
+ ],
8561
+ "description": "A read-only iCalendar URL to subscribe the collection to. `http`, `https` and `webcal` are accepted. The server fetches it once before creating anything and refuses with 400 when the fetch fails, so a mistyped address leaves no empty calendar behind. The collection is then `Subscribed`: it refuses event writes, and the scheduled refresh keeps it in step with the feed."
8508
8562
  }
8509
8563
  },
8510
8564
  "description": "Input for creating a calendar collection (issue #15).\n\n`urlSegment` is supplied rather than derived from the display name: it is the\ncollection's identity — `calendarId` is a hash of it — and the path a CalDAV\nclient will later bookmark. Slugging a name would make two calendars called\n\"Work\" one row, and a rename would either move a bookmarked path or leave a\nsegment that no longer matches anything a person recognises. The name is the\nmutable overlay; this is the address."
@@ -9075,6 +9129,17 @@
9075
9129
  ],
9076
9130
  "description": "Message attribute a FilterClause matches against — RFC 031's Tier 0 literal predicates plus the RFC 038 D2 additions (list membership and sender domain). Every member is matched vector-free at index time and in the back-apply corpus projection."
9077
9131
  },
9132
+ "RemitImap.FilterDisabledReason": {
9133
+ "type": "string",
9134
+ "enum": [
9135
+ "None",
9136
+ "UserDisabled",
9137
+ "AwaitingFolder",
9138
+ "FolderCreateFailed",
9139
+ "FolderMissing"
9140
+ ],
9141
+ "description": "Why a Filter is Disabled. `None` while the filter is not Disabled; every other value names the one thing that has to change before it can run again."
9142
+ },
9078
9143
  "RemitImap.FilterMatchOperator": {
9079
9144
  "type": "string",
9080
9145
  "enum": [
@@ -9091,6 +9156,7 @@
9091
9156
  "name",
9092
9157
  "scope",
9093
9158
  "state",
9159
+ "disabledReason",
9094
9160
  "hasAnchor",
9095
9161
  "ruleChangedAt",
9096
9162
  "actionChangedAt",
@@ -9146,8 +9212,17 @@
9146
9212
  "$ref": "#/components/schemas/RemitImap.FilterState"
9147
9213
  }
9148
9214
  ],
9149
- "description": "Cache of whether this filter is still active, backing byAccountAndState (RFC 034 Decision 1.2). Starts Active; lazily patched to Expired the first time something reads a Temporary filter past its expiresAt — whichever of index-time evaluation, retroactive replay, or a settings-page list touches it next. Never the correctness source; expiresAt is.",
9150
- "default": "Active",
9215
+ "description": "Whether this filter runs, backing byAccountAndState (RFC 034 Decision 1.2). Starts Active. The user sets Active or Disabled on update; the system sets Disabled when the filter cannot work as designed, and records why in disabledReason. Expired is lazily patched the first time something reads a Temporary filter past its expiresAt, which stays the correctness source for expiry.",
9216
+ "default": "Active"
9217
+ },
9218
+ "disabledReason": {
9219
+ "allOf": [
9220
+ {
9221
+ "$ref": "#/components/schemas/RemitImap.FilterDisabledReason"
9222
+ }
9223
+ ],
9224
+ "description": "Why this filter is Disabled; `None` whenever state is not Disabled. Written together with state, never on its own: turning a filter on clears it.",
9225
+ "default": "None",
9151
9226
  "readOnly": true
9152
9227
  },
9153
9228
  "hasAnchor": {
@@ -9220,9 +9295,10 @@
9220
9295
  "type": "string",
9221
9296
  "enum": [
9222
9297
  "Active",
9223
- "Expired"
9298
+ "Expired",
9299
+ "Disabled"
9224
9300
  ],
9225
- "description": "Cache of whether a Filter is still active to evaluate, backing the byAccountAndState index (RFC 034 Decision 1.2). Not the source of truth for expiry — Filter.expiresAt is, compared directly at every evaluation. Starts Active; lazily patched to Expired the first time something reads a Temporary filter past its expiresAt. No Disabled value: this RFC has no flow that pauses a filter without deleting it."
9301
+ "description": "Whether a Filter runs, backing the byAccountAndState index (RFC 034 Decision 1.2). Active and Disabled are written; Expired is a lazily-patched cache of Filter.expiresAt, which stays the source of truth for expiry. A Disabled filter records why in Filter.disabledReason."
9226
9302
  },
9227
9303
  "RemitImap.FolderAppointment": {
9228
9304
  "type": "object",
@@ -12159,9 +12235,14 @@
12159
12235
  ],
12160
12236
  "description": "IANA time zone this collection's floating times are read in, e.g. \"Europe/Amsterdam\". `\"\"` when none is set, which reads as UTC.",
12161
12237
  "default": ""
12238
+ },
12239
+ "subscriptionEnabled": {
12240
+ "type": "boolean",
12241
+ "description": "Whether the scheduled refresh re-reads `subscriptionUrl`. Turning it off stops the refresh and keeps every stored event. Always `false` on a collection that is not `Subscribed`.",
12242
+ "default": false
12162
12243
  }
12163
12244
  },
12164
- "description": "Input for updating a calendar collection. The name, colour and timezone are the mutable overlay; `urlSegment` is not among them, because it is the collection's identity and the path a client has bookmarked."
12245
+ "description": "Input for updating a calendar collection. The name, colour and timezone are the mutable overlay, and `subscriptionEnabled` turns a subscribed collection's refresh off and on. `urlSegment` is not among them, because it is the collection's identity and the path a client has bookmarked."
12165
12246
  },
12166
12247
  "RemitImap.UpdateFilterInput": {
12167
12248
  "type": "object",
@@ -12186,6 +12267,15 @@
12186
12267
  "type": "string",
12187
12268
  "description": "ISO 8601 date-time with zone offset, present only when scope is Temporary (RFC 034 Decision 1.1) — a business date, not an epoch instant. Every evaluation compares `now` against this value directly; it is the source of truth for whether a Temporary filter is still active, independent of `state` or row existence. Mutable on update (reader #266), alongside scope — moving the date bumps ruleChangedAt the same way a scope change does."
12188
12269
  },
12270
+ "state": {
12271
+ "allOf": [
12272
+ {
12273
+ "$ref": "#/components/schemas/RemitImap.FilterState"
12274
+ }
12275
+ ],
12276
+ "description": "Whether this filter runs, backing byAccountAndState (RFC 034 Decision 1.2). Starts Active. The user sets Active or Disabled on update; the system sets Disabled when the filter cannot work as designed, and records why in disabledReason. Expired is lazily patched the first time something reads a Temporary filter past its expiresAt, which stays the correctness source for expiry.",
12277
+ "default": "Active"
12278
+ },
12189
12279
  "matchOperator": {
12190
12280
  "allOf": [
12191
12281
  {
@@ -12214,7 +12304,7 @@
12214
12304
  "default": "None"
12215
12305
  }
12216
12306
  },
12217
- "description": "Input for updating a filter (RFC 034, reader #266). The name, predicate,\naction, scope, and expiresAt are all updatable; `ttl` is always\nserver-derived from `scope`/`expiresAt`, never client-supplied, and\n`state`/`hasAnchor`/`ruleChangedAt`/`actionChangedAt`/`filterId` are\nserver-derived too. A patch touching the predicate, the action, `scope`, or\n`expiresAt` bumps `ruleChangedAt`; a name-only rename never does (RFC 034\nDecision 3.2, reader #266). Only a patch touching the predicate or the\naction bumps `actionChangedAt`, the narrower signal exclusive-move\nprecedence reads (reader #384) — a scope/expiresAt-only edit leaves it\nuntouched.\n\nThe semantic anchor has no field here at all — it is set once, from\n`anchorMessageId`, only on `CreateFilterInput`. Repointing an anchor would\nsilently change what a saved filter matches with nothing visible changing;\nthat deserves a new filter, so the server rejects any attempt to smuggle an\nanchor change through this body (reader #266)."
12307
+ "description": "Input for updating a filter (RFC 034, reader #266). The name, predicate,\naction, scope, and expiresAt are all updatable; `ttl` is always\nserver-derived from `scope`/`expiresAt`, never client-supplied, and\n`disabledReason`/`hasAnchor`/`ruleChangedAt`/`actionChangedAt`/`filterId` are\nserver-derived too. `state` takes `Active` or `Disabled`: the user turns a\nfilter off or back on, and turning it on clears `disabledReason`. `Expired`\nis refused; the expiry is set through `scope`/`expiresAt`. A patch touching the predicate, the action, `scope`, or\n`expiresAt` bumps `ruleChangedAt`; a name-only rename never does (RFC 034\nDecision 3.2, reader #266). Only a patch touching the predicate or the\naction bumps `actionChangedAt`, the narrower signal exclusive-move\nprecedence reads (reader #384) — a scope/expiresAt-only edit leaves it\nuntouched.\n\nThe semantic anchor has no field here at all — it is set once, from\n`anchorMessageId`, only on `CreateFilterInput`. Repointing an anchor would\nsilently change what a saved filter matches with nothing visible changing;\nthat deserves a new filter, so the server rejects any attempt to smuggle an\nanchor change through this body (reader #266)."
12218
12308
  },
12219
12309
  "RemitImap.UpdateFlagsInput": {
12220
12310
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remit/api-openapi-spec",
3
- "version": "0.0.67",
3
+ "version": "0.0.69",
4
4
  "description": "Remit API OpenAPI 3 document, generated from TypeSpec.",
5
5
  "exports": {
6
6
  ".": "./openapi.json",