@remit/api-openapi-spec 0.0.98 → 0.0.100
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.
- package/openapi.json +325 -16
- package/package.json +1 -1
- package/request-validators.mjs +1 -1
package/openapi.json
CHANGED
|
@@ -10645,7 +10645,6 @@
|
|
|
10645
10645
|
"name",
|
|
10646
10646
|
"scope",
|
|
10647
10647
|
"matchOperator",
|
|
10648
|
-
"literalClauses",
|
|
10649
10648
|
"actionLabelId",
|
|
10650
10649
|
"actionMailboxId"
|
|
10651
10650
|
],
|
|
@@ -10679,14 +10678,6 @@
|
|
|
10679
10678
|
"description": "How literalClauses combine.",
|
|
10680
10679
|
"default": "And"
|
|
10681
10680
|
},
|
|
10682
|
-
"literalClauses": {
|
|
10683
|
-
"type": "array",
|
|
10684
|
-
"items": {
|
|
10685
|
-
"$ref": "#/components/schemas/RemitImap.FilterClause"
|
|
10686
|
-
},
|
|
10687
|
-
"minItems": 1,
|
|
10688
|
-
"description": "Literal from/subject/has-words predicate clauses (RFC 031). A filter carries at least one."
|
|
10689
|
-
},
|
|
10690
10681
|
"actionLabelId": {
|
|
10691
10682
|
"type": "string",
|
|
10692
10683
|
"description": "Label applied when this filter matches — additive action, any number of filters can independently apply their own label (RFC 034 Decision 3.1). The named sentinel `\"None\"` means no label action; never an empty/optional field.",
|
|
@@ -10696,6 +10687,30 @@
|
|
|
10696
10687
|
"type": "string",
|
|
10697
10688
|
"description": "Mailbox matched messages are moved into — exclusive action, since a message lives in exactly one mailbox (RFC 034 Decision 3.1). On conflict between filters, the one with the latest actionChangedAt wins. `\"None\"` means no move action.",
|
|
10698
10689
|
"default": "None"
|
|
10690
|
+
},
|
|
10691
|
+
"priority": {
|
|
10692
|
+
"type": "integer",
|
|
10693
|
+
"format": "int32",
|
|
10694
|
+
"description": "Evaluation order (RFC 040). Lower runs first. Defaults to 0."
|
|
10695
|
+
},
|
|
10696
|
+
"stop": {
|
|
10697
|
+
"type": "boolean",
|
|
10698
|
+
"description": "When set, a match ends evaluation for that message after this filter's own actions (RFC 040, Sieve `stop`). Defaults to false."
|
|
10699
|
+
},
|
|
10700
|
+
"literalClauses": {
|
|
10701
|
+
"type": "array",
|
|
10702
|
+
"items": {
|
|
10703
|
+
"$ref": "#/components/schemas/RemitImap.FilterClause"
|
|
10704
|
+
},
|
|
10705
|
+
"description": "Literal clauses combined by matchOperator. Send these or rule, never both."
|
|
10706
|
+
},
|
|
10707
|
+
"rule": {
|
|
10708
|
+
"allOf": [
|
|
10709
|
+
{
|
|
10710
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleV1"
|
|
10711
|
+
}
|
|
10712
|
+
],
|
|
10713
|
+
"description": "The rule as a test tree (RFC 040). Send this or literalClauses, never both. The server caps a rule at 50 leaves and 5 levels."
|
|
10699
10714
|
}
|
|
10700
10715
|
},
|
|
10701
10716
|
"description": "Input for creating a filter (RFC 034). `ttl` is omitted — it is derived\nserver-side from `expiresAt` when `scope` is `Temporary` (RFC 034 Decision\n1.3), never client-supplied. `state`, `ruleChangedAt`, and `filterId` are\nall server-derived and excluded by their Read-only visibility."
|
|
@@ -10713,10 +10728,13 @@
|
|
|
10713
10728
|
"actionChangedAt",
|
|
10714
10729
|
"matchOperator",
|
|
10715
10730
|
"literalClauses",
|
|
10731
|
+
"priority",
|
|
10732
|
+
"stop",
|
|
10716
10733
|
"actionLabelId",
|
|
10717
10734
|
"actionMailboxId",
|
|
10718
10735
|
"createdAt",
|
|
10719
10736
|
"updatedAt",
|
|
10737
|
+
"rule",
|
|
10720
10738
|
"organizeJobId"
|
|
10721
10739
|
],
|
|
10722
10740
|
"properties": {
|
|
@@ -10803,8 +10821,18 @@
|
|
|
10803
10821
|
"items": {
|
|
10804
10822
|
"$ref": "#/components/schemas/RemitImap.FilterClause"
|
|
10805
10823
|
},
|
|
10806
|
-
"
|
|
10807
|
-
|
|
10824
|
+
"description": "Literal from/subject/has-words predicate clauses (RFC 031). Empty when the rule is not leaves under one allof or anyof."
|
|
10825
|
+
},
|
|
10826
|
+
"priority": {
|
|
10827
|
+
"type": "integer",
|
|
10828
|
+
"format": "int32",
|
|
10829
|
+
"description": "Evaluation order (RFC 040). Lower runs first; ties go to the newest actionChangedAt, then to filterId. The first move a message reaches wins.",
|
|
10830
|
+
"default": 0
|
|
10831
|
+
},
|
|
10832
|
+
"stop": {
|
|
10833
|
+
"type": "boolean",
|
|
10834
|
+
"description": "When set, a match ends evaluation for that message after this filter's own actions (RFC 040, Sieve `stop`).",
|
|
10835
|
+
"default": false
|
|
10808
10836
|
},
|
|
10809
10837
|
"actionLabelId": {
|
|
10810
10838
|
"type": "string",
|
|
@@ -10826,6 +10854,14 @@
|
|
|
10826
10854
|
"format": "int64",
|
|
10827
10855
|
"readOnly": true
|
|
10828
10856
|
},
|
|
10857
|
+
"rule": {
|
|
10858
|
+
"allOf": [
|
|
10859
|
+
{
|
|
10860
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleV1"
|
|
10861
|
+
}
|
|
10862
|
+
],
|
|
10863
|
+
"description": "The rule as a test tree (RFC 040). literalClauses mirrors it when it is leaves under one allof or anyof, and is empty otherwise."
|
|
10864
|
+
},
|
|
10829
10865
|
"organizeJobId": {
|
|
10830
10866
|
"type": "string",
|
|
10831
10867
|
"description": "The organize job queued to run the new filter over the inbox. Poll GET /accounts/{accountId}/organize/{organizeJobId}; a filter with nothing to run reports Failed with the reason."
|
|
@@ -11292,6 +11328,100 @@
|
|
|
11292
11328
|
},
|
|
11293
11329
|
"description": "Message envelope (header metadata)"
|
|
11294
11330
|
},
|
|
11331
|
+
"RemitImap.FilterAddressTest": {
|
|
11332
|
+
"type": "object",
|
|
11333
|
+
"required": [
|
|
11334
|
+
"test",
|
|
11335
|
+
"match",
|
|
11336
|
+
"part",
|
|
11337
|
+
"key"
|
|
11338
|
+
],
|
|
11339
|
+
"properties": {
|
|
11340
|
+
"test": {
|
|
11341
|
+
"type": "string",
|
|
11342
|
+
"enum": [
|
|
11343
|
+
"address"
|
|
11344
|
+
]
|
|
11345
|
+
},
|
|
11346
|
+
"match": {
|
|
11347
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleMatch"
|
|
11348
|
+
},
|
|
11349
|
+
"part": {
|
|
11350
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleAddressPart"
|
|
11351
|
+
},
|
|
11352
|
+
"key": {
|
|
11353
|
+
"$ref": "#/components/schemas/String256"
|
|
11354
|
+
}
|
|
11355
|
+
},
|
|
11356
|
+
"description": "Compares one part of the From address against one key (Sieve `address`). Reads `from` only."
|
|
11357
|
+
},
|
|
11358
|
+
"RemitImap.FilterAllOfTest": {
|
|
11359
|
+
"type": "object",
|
|
11360
|
+
"required": [
|
|
11361
|
+
"test",
|
|
11362
|
+
"tests"
|
|
11363
|
+
],
|
|
11364
|
+
"properties": {
|
|
11365
|
+
"test": {
|
|
11366
|
+
"type": "string",
|
|
11367
|
+
"enum": [
|
|
11368
|
+
"allof"
|
|
11369
|
+
]
|
|
11370
|
+
},
|
|
11371
|
+
"tests": {
|
|
11372
|
+
"type": "array",
|
|
11373
|
+
"items": {
|
|
11374
|
+
"$ref": "#/components/schemas/RemitImap.FilterTest"
|
|
11375
|
+
},
|
|
11376
|
+
"minItems": 1,
|
|
11377
|
+
"maxItems": 50
|
|
11378
|
+
}
|
|
11379
|
+
},
|
|
11380
|
+
"description": "Matches when every test in `tests` matches (Sieve `allof`)."
|
|
11381
|
+
},
|
|
11382
|
+
"RemitImap.FilterAnyOfTest": {
|
|
11383
|
+
"type": "object",
|
|
11384
|
+
"required": [
|
|
11385
|
+
"test",
|
|
11386
|
+
"tests"
|
|
11387
|
+
],
|
|
11388
|
+
"properties": {
|
|
11389
|
+
"test": {
|
|
11390
|
+
"type": "string",
|
|
11391
|
+
"enum": [
|
|
11392
|
+
"anyof"
|
|
11393
|
+
]
|
|
11394
|
+
},
|
|
11395
|
+
"tests": {
|
|
11396
|
+
"type": "array",
|
|
11397
|
+
"items": {
|
|
11398
|
+
"$ref": "#/components/schemas/RemitImap.FilterTest"
|
|
11399
|
+
},
|
|
11400
|
+
"minItems": 1,
|
|
11401
|
+
"maxItems": 50
|
|
11402
|
+
}
|
|
11403
|
+
},
|
|
11404
|
+
"description": "Matches when any test in `tests` matches (Sieve `anyof`)."
|
|
11405
|
+
},
|
|
11406
|
+
"RemitImap.FilterClassificationTest": {
|
|
11407
|
+
"type": "object",
|
|
11408
|
+
"required": [
|
|
11409
|
+
"test",
|
|
11410
|
+
"label"
|
|
11411
|
+
],
|
|
11412
|
+
"properties": {
|
|
11413
|
+
"test": {
|
|
11414
|
+
"type": "string",
|
|
11415
|
+
"enum": [
|
|
11416
|
+
"classification"
|
|
11417
|
+
]
|
|
11418
|
+
},
|
|
11419
|
+
"label": {
|
|
11420
|
+
"$ref": "#/components/schemas/RemitImap.ClassificationLabel"
|
|
11421
|
+
}
|
|
11422
|
+
},
|
|
11423
|
+
"description": "Matches when the classifier gave the message a confident score for `label`. A message with no scores fails it."
|
|
11424
|
+
},
|
|
11295
11425
|
"RemitImap.FilterClause": {
|
|
11296
11426
|
"type": "object",
|
|
11297
11427
|
"required": [
|
|
@@ -11340,6 +11470,55 @@
|
|
|
11340
11470
|
],
|
|
11341
11471
|
"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."
|
|
11342
11472
|
},
|
|
11473
|
+
"RemitImap.FilterHasWordsTest": {
|
|
11474
|
+
"type": "object",
|
|
11475
|
+
"required": [
|
|
11476
|
+
"test",
|
|
11477
|
+
"words"
|
|
11478
|
+
],
|
|
11479
|
+
"properties": {
|
|
11480
|
+
"test": {
|
|
11481
|
+
"type": "string",
|
|
11482
|
+
"enum": [
|
|
11483
|
+
"hasWords"
|
|
11484
|
+
]
|
|
11485
|
+
},
|
|
11486
|
+
"words": {
|
|
11487
|
+
"type": "array",
|
|
11488
|
+
"items": {
|
|
11489
|
+
"$ref": "#/components/schemas/String256"
|
|
11490
|
+
}
|
|
11491
|
+
}
|
|
11492
|
+
},
|
|
11493
|
+
"description": "Matches when every word occurs in the sender, the subject or the body."
|
|
11494
|
+
},
|
|
11495
|
+
"RemitImap.FilterHeaderTest": {
|
|
11496
|
+
"type": "object",
|
|
11497
|
+
"required": [
|
|
11498
|
+
"test",
|
|
11499
|
+
"match",
|
|
11500
|
+
"header",
|
|
11501
|
+
"key"
|
|
11502
|
+
],
|
|
11503
|
+
"properties": {
|
|
11504
|
+
"test": {
|
|
11505
|
+
"type": "string",
|
|
11506
|
+
"enum": [
|
|
11507
|
+
"header"
|
|
11508
|
+
]
|
|
11509
|
+
},
|
|
11510
|
+
"match": {
|
|
11511
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleMatch"
|
|
11512
|
+
},
|
|
11513
|
+
"header": {
|
|
11514
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleHeader"
|
|
11515
|
+
},
|
|
11516
|
+
"key": {
|
|
11517
|
+
"$ref": "#/components/schemas/String256"
|
|
11518
|
+
}
|
|
11519
|
+
},
|
|
11520
|
+
"description": "Compares one header against one key (Sieve `header`)."
|
|
11521
|
+
},
|
|
11343
11522
|
"RemitImap.FilterMatchOperator": {
|
|
11344
11523
|
"type": "string",
|
|
11345
11524
|
"enum": [
|
|
@@ -11348,6 +11527,25 @@
|
|
|
11348
11527
|
],
|
|
11349
11528
|
"description": "How a Filter's literalClauses combine (RFC 031 \"literal predicates, AND/OR\"). Ignored when literalClauses is empty."
|
|
11350
11529
|
},
|
|
11530
|
+
"RemitImap.FilterNotTest": {
|
|
11531
|
+
"type": "object",
|
|
11532
|
+
"required": [
|
|
11533
|
+
"test",
|
|
11534
|
+
"operand"
|
|
11535
|
+
],
|
|
11536
|
+
"properties": {
|
|
11537
|
+
"test": {
|
|
11538
|
+
"type": "string",
|
|
11539
|
+
"enum": [
|
|
11540
|
+
"not"
|
|
11541
|
+
]
|
|
11542
|
+
},
|
|
11543
|
+
"operand": {
|
|
11544
|
+
"$ref": "#/components/schemas/RemitImap.FilterTest"
|
|
11545
|
+
}
|
|
11546
|
+
},
|
|
11547
|
+
"description": "Matches when `operand` does not (Sieve `not`)."
|
|
11548
|
+
},
|
|
11351
11549
|
"RemitImap.FilterResponse": {
|
|
11352
11550
|
"type": "object",
|
|
11353
11551
|
"required": [
|
|
@@ -11361,10 +11559,13 @@
|
|
|
11361
11559
|
"actionChangedAt",
|
|
11362
11560
|
"matchOperator",
|
|
11363
11561
|
"literalClauses",
|
|
11562
|
+
"priority",
|
|
11563
|
+
"stop",
|
|
11364
11564
|
"actionLabelId",
|
|
11365
11565
|
"actionMailboxId",
|
|
11366
11566
|
"createdAt",
|
|
11367
|
-
"updatedAt"
|
|
11567
|
+
"updatedAt",
|
|
11568
|
+
"rule"
|
|
11368
11569
|
],
|
|
11369
11570
|
"properties": {
|
|
11370
11571
|
"filterId": {
|
|
@@ -11450,8 +11651,18 @@
|
|
|
11450
11651
|
"items": {
|
|
11451
11652
|
"$ref": "#/components/schemas/RemitImap.FilterClause"
|
|
11452
11653
|
},
|
|
11453
|
-
"
|
|
11454
|
-
|
|
11654
|
+
"description": "Literal from/subject/has-words predicate clauses (RFC 031). Empty when the rule is not leaves under one allof or anyof."
|
|
11655
|
+
},
|
|
11656
|
+
"priority": {
|
|
11657
|
+
"type": "integer",
|
|
11658
|
+
"format": "int32",
|
|
11659
|
+
"description": "Evaluation order (RFC 040). Lower runs first; ties go to the newest actionChangedAt, then to filterId. The first move a message reaches wins.",
|
|
11660
|
+
"default": 0
|
|
11661
|
+
},
|
|
11662
|
+
"stop": {
|
|
11663
|
+
"type": "boolean",
|
|
11664
|
+
"description": "When set, a match ends evaluation for that message after this filter's own actions (RFC 040, Sieve `stop`).",
|
|
11665
|
+
"default": false
|
|
11455
11666
|
},
|
|
11456
11667
|
"actionLabelId": {
|
|
11457
11668
|
"type": "string",
|
|
@@ -11472,10 +11683,64 @@
|
|
|
11472
11683
|
"type": "integer",
|
|
11473
11684
|
"format": "int64",
|
|
11474
11685
|
"readOnly": true
|
|
11686
|
+
},
|
|
11687
|
+
"rule": {
|
|
11688
|
+
"allOf": [
|
|
11689
|
+
{
|
|
11690
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleV1"
|
|
11691
|
+
}
|
|
11692
|
+
],
|
|
11693
|
+
"description": "The rule as a test tree (RFC 040). literalClauses mirrors it when it is leaves under one allof or anyof, and is empty otherwise."
|
|
11475
11694
|
}
|
|
11476
11695
|
},
|
|
11477
11696
|
"description": "Filter item returned by list/get/create/update operations. `ttl` is internal bookkeeping (RFC 034 Decision 1.3) and not surfaced."
|
|
11478
11697
|
},
|
|
11698
|
+
"RemitImap.FilterRuleAddressPart": {
|
|
11699
|
+
"type": "string",
|
|
11700
|
+
"enum": [
|
|
11701
|
+
"All",
|
|
11702
|
+
"Localpart",
|
|
11703
|
+
"Domain",
|
|
11704
|
+
"RegistrableDomain"
|
|
11705
|
+
],
|
|
11706
|
+
"description": "The part of the From address a FilterRule address test reads (RFC 040). `RegistrableDomain` is the public-suffix aware domain."
|
|
11707
|
+
},
|
|
11708
|
+
"RemitImap.FilterRuleHeader": {
|
|
11709
|
+
"type": "string",
|
|
11710
|
+
"enum": [
|
|
11711
|
+
"From",
|
|
11712
|
+
"Subject",
|
|
11713
|
+
"ListId"
|
|
11714
|
+
],
|
|
11715
|
+
"description": "The header a FilterRule header test reads (RFC 040). `ListId` is normalized as a `List-Id` filter clause is."
|
|
11716
|
+
},
|
|
11717
|
+
"RemitImap.FilterRuleMatch": {
|
|
11718
|
+
"type": "string",
|
|
11719
|
+
"enum": [
|
|
11720
|
+
"Is",
|
|
11721
|
+
"Contains"
|
|
11722
|
+
],
|
|
11723
|
+
"description": "How a FilterRule header or address test compares its key (RFC 040, after Sieve's `:is` and `:contains`). Both fold case."
|
|
11724
|
+
},
|
|
11725
|
+
"RemitImap.FilterRuleV1": {
|
|
11726
|
+
"type": "object",
|
|
11727
|
+
"required": [
|
|
11728
|
+
"version",
|
|
11729
|
+
"test"
|
|
11730
|
+
],
|
|
11731
|
+
"properties": {
|
|
11732
|
+
"version": {
|
|
11733
|
+
"type": "number",
|
|
11734
|
+
"enum": [
|
|
11735
|
+
1
|
|
11736
|
+
]
|
|
11737
|
+
},
|
|
11738
|
+
"test": {
|
|
11739
|
+
"$ref": "#/components/schemas/RemitImap.FilterTest"
|
|
11740
|
+
}
|
|
11741
|
+
},
|
|
11742
|
+
"description": "A rule whose test is the truth; the row's literal clauses are empty."
|
|
11743
|
+
},
|
|
11479
11744
|
"RemitImap.FilterScope": {
|
|
11480
11745
|
"type": "string",
|
|
11481
11746
|
"enum": [
|
|
@@ -11493,6 +11758,32 @@
|
|
|
11493
11758
|
],
|
|
11494
11759
|
"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."
|
|
11495
11760
|
},
|
|
11761
|
+
"RemitImap.FilterTest": {
|
|
11762
|
+
"anyOf": [
|
|
11763
|
+
{
|
|
11764
|
+
"$ref": "#/components/schemas/RemitImap.FilterAllOfTest"
|
|
11765
|
+
},
|
|
11766
|
+
{
|
|
11767
|
+
"$ref": "#/components/schemas/RemitImap.FilterAnyOfTest"
|
|
11768
|
+
},
|
|
11769
|
+
{
|
|
11770
|
+
"$ref": "#/components/schemas/RemitImap.FilterNotTest"
|
|
11771
|
+
},
|
|
11772
|
+
{
|
|
11773
|
+
"$ref": "#/components/schemas/RemitImap.FilterHeaderTest"
|
|
11774
|
+
},
|
|
11775
|
+
{
|
|
11776
|
+
"$ref": "#/components/schemas/RemitImap.FilterAddressTest"
|
|
11777
|
+
},
|
|
11778
|
+
{
|
|
11779
|
+
"$ref": "#/components/schemas/RemitImap.FilterHasWordsTest"
|
|
11780
|
+
},
|
|
11781
|
+
{
|
|
11782
|
+
"$ref": "#/components/schemas/RemitImap.FilterClassificationTest"
|
|
11783
|
+
}
|
|
11784
|
+
],
|
|
11785
|
+
"description": "A node of a filter rule's test tree (RFC 040)."
|
|
11786
|
+
},
|
|
11496
11787
|
"RemitImap.FolderAppointment": {
|
|
11497
11788
|
"type": "object",
|
|
11498
11789
|
"required": [
|
|
@@ -14936,8 +15227,18 @@
|
|
|
14936
15227
|
"items": {
|
|
14937
15228
|
"$ref": "#/components/schemas/RemitImap.FilterClause"
|
|
14938
15229
|
},
|
|
14939
|
-
"
|
|
14940
|
-
|
|
15230
|
+
"description": "Literal from/subject/has-words predicate clauses (RFC 031). Empty when the rule is not leaves under one allof or anyof."
|
|
15231
|
+
},
|
|
15232
|
+
"priority": {
|
|
15233
|
+
"type": "integer",
|
|
15234
|
+
"format": "int32",
|
|
15235
|
+
"description": "Evaluation order (RFC 040). Lower runs first; ties go to the newest actionChangedAt, then to filterId. The first move a message reaches wins.",
|
|
15236
|
+
"default": 0
|
|
15237
|
+
},
|
|
15238
|
+
"stop": {
|
|
15239
|
+
"type": "boolean",
|
|
15240
|
+
"description": "When set, a match ends evaluation for that message after this filter's own actions (RFC 040, Sieve `stop`).",
|
|
15241
|
+
"default": false
|
|
14941
15242
|
},
|
|
14942
15243
|
"actionLabelId": {
|
|
14943
15244
|
"type": "string",
|
|
@@ -14948,6 +15249,14 @@
|
|
|
14948
15249
|
"type": "string",
|
|
14949
15250
|
"description": "Mailbox matched messages are moved into — exclusive action, since a message lives in exactly one mailbox (RFC 034 Decision 3.1). On conflict between filters, the one with the latest actionChangedAt wins. `\"None\"` means no move action.",
|
|
14950
15251
|
"default": "None"
|
|
15252
|
+
},
|
|
15253
|
+
"rule": {
|
|
15254
|
+
"allOf": [
|
|
15255
|
+
{
|
|
15256
|
+
"$ref": "#/components/schemas/RemitImap.FilterRuleV1"
|
|
15257
|
+
}
|
|
15258
|
+
],
|
|
15259
|
+
"description": "Replaces the rule (RFC 040). Never sent with matchOperator or literalClauses. The server caps a rule at 50 leaves and 5 levels."
|
|
14951
15260
|
}
|
|
14952
15261
|
},
|
|
14953
15262
|
"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`/`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."
|
package/package.json
CHANGED