@trdrs/quickcharts 1.0.0

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 (67) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +18 -0
  4. package/README.md +2325 -0
  5. package/THIRD-PARTY-NOTICES.md +263 -0
  6. package/dist/adapters/rest.d.ts +143 -0
  7. package/dist/adapters/rest.js +214 -0
  8. package/dist/adapters/rest.js.map +1 -0
  9. package/dist/ar-G7MVXRE4.js +1028 -0
  10. package/dist/ar-G7MVXRE4.js.map +1 -0
  11. package/dist/assets-C1GQvm0w.d.ts +1452 -0
  12. package/dist/ca_ES-EUSRU4VG.js +1028 -0
  13. package/dist/ca_ES-EUSRU4VG.js.map +1 -0
  14. package/dist/chunk-AKXIFHQN.js +172 -0
  15. package/dist/chunk-AKXIFHQN.js.map +1 -0
  16. package/dist/chunk-KFBQSPNA.js +107 -0
  17. package/dist/chunk-KFBQSPNA.js.map +1 -0
  18. package/dist/chunk-PD3DEWMQ.js +6959 -0
  19. package/dist/chunk-PD3DEWMQ.js.map +1 -0
  20. package/dist/de-2SVTG25S.js +1028 -0
  21. package/dist/de-2SVTG25S.js.map +1 -0
  22. package/dist/drawings.d.ts +237 -0
  23. package/dist/drawings.js +199 -0
  24. package/dist/drawings.js.map +1 -0
  25. package/dist/es-UDHZM4W7.js +1028 -0
  26. package/dist/es-UDHZM4W7.js.map +1 -0
  27. package/dist/feature-manifest.json +3453 -0
  28. package/dist/fr-35VN4G4S.js +1028 -0
  29. package/dist/fr-35VN4G4S.js.map +1 -0
  30. package/dist/he_IL-JPZMCURP.js +1028 -0
  31. package/dist/he_IL-JPZMCURP.js.map +1 -0
  32. package/dist/id_ID-XSTFHHJQ.js +1028 -0
  33. package/dist/id_ID-XSTFHHJQ.js.map +1 -0
  34. package/dist/index.d.ts +5487 -0
  35. package/dist/index.js +24040 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/it-EIY6JESQ.js +1028 -0
  38. package/dist/it-EIY6JESQ.js.map +1 -0
  39. package/dist/ja-42N4XRCW.js +1028 -0
  40. package/dist/ja-42N4XRCW.js.map +1 -0
  41. package/dist/ko-3VRPTIP3.js +1028 -0
  42. package/dist/ko-3VRPTIP3.js.map +1 -0
  43. package/dist/ms_MY-SKN7O6M5.js +1028 -0
  44. package/dist/ms_MY-SKN7O6M5.js.map +1 -0
  45. package/dist/pl-TYARHCLT.js +1028 -0
  46. package/dist/pl-TYARHCLT.js.map +1 -0
  47. package/dist/pt-72IIFLL4.js +1028 -0
  48. package/dist/pt-72IIFLL4.js.map +1 -0
  49. package/dist/quickcharts.css +6217 -0
  50. package/dist/resources-Ch8eA1Mw.d.ts +228 -0
  51. package/dist/rest-openapi.json +1664 -0
  52. package/dist/ru-TPH4F7IB.js +1028 -0
  53. package/dist/ru-TPH4F7IB.js.map +1 -0
  54. package/dist/sv-DC5RS67Z.js +1028 -0
  55. package/dist/sv-DC5RS67Z.js.map +1 -0
  56. package/dist/th-I6H6AOZ3.js +1028 -0
  57. package/dist/th-I6H6AOZ3.js.map +1 -0
  58. package/dist/theme-manifest.json +1246 -0
  59. package/dist/tr-7FSUVCNW.js +1028 -0
  60. package/dist/tr-7FSUVCNW.js.map +1 -0
  61. package/dist/vi-DLRPHLLH.js +1028 -0
  62. package/dist/vi-DLRPHLLH.js.map +1 -0
  63. package/dist/zh-ZXIQBBEP.js +1028 -0
  64. package/dist/zh-ZXIQBBEP.js.map +1 -0
  65. package/dist/zh_TW-TYNUJU7U.js +1028 -0
  66. package/dist/zh_TW-TYNUJU7U.js.map +1 -0
  67. package/package.json +100 -0
@@ -0,0 +1,1664 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Quick Charts saved resources",
5
+ "version": "1",
6
+ "description": "The service contract behind `createRestSaveLoadAdapter` from `@trdrs/quickcharts/adapters/rest`. Every path is relative to the base URL the host configures. Authorization, cookies, CORS, retries and tenancy belong to the host request function, so no path, header or field here carries a credential. Saved charts, layouts, drawing documents and templates share one revisioned rule: a read answers the ref a row stands at, a write quotes that revision in `If-Match`, and a write against a revision the service has moved past answers 409 with the ref that stands."
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "{baseUrl}",
11
+ "description": "The base URL the host configures. This document names no origin.",
12
+ "variables": {
13
+ "baseUrl": {
14
+ "default": "/",
15
+ "description": "Where the host mounts these routes."
16
+ }
17
+ }
18
+ }
19
+ ],
20
+ "tags": [
21
+ {
22
+ "name": "charts",
23
+ "description": "Saved charts."
24
+ },
25
+ {
26
+ "name": "layouts",
27
+ "description": "Saved multi-chart layouts."
28
+ },
29
+ {
30
+ "name": "drawings",
31
+ "description": "One drawings document per drawing-resource context."
32
+ },
33
+ {
34
+ "name": "templates",
35
+ "description": "Named appearance, indicator and drawing templates, one collection per kind."
36
+ }
37
+ ],
38
+ "paths": {
39
+ "/charts": {
40
+ "get": {
41
+ "tags": [
42
+ "charts"
43
+ ],
44
+ "summary": "List rows, metadata only.",
45
+ "parameters": [],
46
+ "responses": {
47
+ "200": {
48
+ "description": "The rows this principal may read.",
49
+ "content": {
50
+ "application/json": {
51
+ "schema": {
52
+ "$ref": "#/components/schemas/ChartMetaList"
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ },
59
+ "post": {
60
+ "tags": [
61
+ "charts"
62
+ ],
63
+ "summary": "Store a new row. The service mints the id, so a create quotes no revision.",
64
+ "parameters": [],
65
+ "requestBody": {
66
+ "description": "The document to store.",
67
+ "content": {
68
+ "application/json": {
69
+ "schema": {
70
+ "$ref": "#/components/schemas/ChartBody"
71
+ }
72
+ }
73
+ }
74
+ },
75
+ "responses": {
76
+ "200": {
77
+ "description": "The ref the service now holds.",
78
+ "content": {
79
+ "application/json": {
80
+ "schema": {
81
+ "$ref": "#/components/schemas/ChartMetaWrite"
82
+ }
83
+ }
84
+ }
85
+ },
86
+ "404": {
87
+ "description": "No row with that id.",
88
+ "content": {
89
+ "application/json": {
90
+ "schema": {
91
+ "$ref": "#/components/schemas/NotFound"
92
+ }
93
+ }
94
+ }
95
+ },
96
+ "409": {
97
+ "description": "A row already stands for this identity. The body carries its ref, which the caller loads instead of forking a second.",
98
+ "content": {
99
+ "application/json": {
100
+ "schema": {
101
+ "$ref": "#/components/schemas/Conflict"
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ },
109
+ "/charts/{id}": {
110
+ "get": {
111
+ "tags": [
112
+ "charts"
113
+ ],
114
+ "summary": "Read one row and the revision it stands at.",
115
+ "parameters": [
116
+ {
117
+ "name": "id",
118
+ "in": "path",
119
+ "required": true,
120
+ "schema": {
121
+ "type": "string"
122
+ }
123
+ }
124
+ ],
125
+ "responses": {
126
+ "200": {
127
+ "description": "The document and its ref.",
128
+ "content": {
129
+ "application/json": {
130
+ "schema": {
131
+ "$ref": "#/components/schemas/ChartBodyLoad"
132
+ }
133
+ }
134
+ }
135
+ },
136
+ "404": {
137
+ "description": "No row with that id.",
138
+ "content": {
139
+ "application/json": {
140
+ "schema": {
141
+ "$ref": "#/components/schemas/NotFound"
142
+ }
143
+ }
144
+ }
145
+ }
146
+ }
147
+ },
148
+ "put": {
149
+ "tags": [
150
+ "charts"
151
+ ],
152
+ "summary": "Replace the row, but only while it still stands at the quoted revision.",
153
+ "parameters": [
154
+ {
155
+ "name": "id",
156
+ "in": "path",
157
+ "required": true,
158
+ "schema": {
159
+ "type": "string"
160
+ }
161
+ },
162
+ {
163
+ "name": "If-Match",
164
+ "in": "header",
165
+ "required": true,
166
+ "schema": {
167
+ "type": "string"
168
+ },
169
+ "description": "The revision this write believes it is replacing."
170
+ }
171
+ ],
172
+ "requestBody": {
173
+ "description": "The document to store.",
174
+ "content": {
175
+ "application/json": {
176
+ "schema": {
177
+ "$ref": "#/components/schemas/ChartBody"
178
+ }
179
+ }
180
+ }
181
+ },
182
+ "responses": {
183
+ "200": {
184
+ "description": "The ref the service now holds.",
185
+ "content": {
186
+ "application/json": {
187
+ "schema": {
188
+ "$ref": "#/components/schemas/ChartMetaWrite"
189
+ }
190
+ }
191
+ }
192
+ },
193
+ "404": {
194
+ "description": "No row with that id.",
195
+ "content": {
196
+ "application/json": {
197
+ "schema": {
198
+ "$ref": "#/components/schemas/NotFound"
199
+ }
200
+ }
201
+ }
202
+ },
203
+ "409": {
204
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
205
+ "content": {
206
+ "application/json": {
207
+ "schema": {
208
+ "$ref": "#/components/schemas/Conflict"
209
+ }
210
+ }
211
+ }
212
+ },
213
+ "428": {
214
+ "description": "The request carried no If-Match revision.",
215
+ "content": {
216
+ "application/json": {
217
+ "schema": {
218
+ "$ref": "#/components/schemas/RevisionRequired"
219
+ }
220
+ }
221
+ }
222
+ }
223
+ }
224
+ },
225
+ "delete": {
226
+ "tags": [
227
+ "charts"
228
+ ],
229
+ "summary": "Delete the row, but only while it still stands at the quoted revision.",
230
+ "parameters": [
231
+ {
232
+ "name": "id",
233
+ "in": "path",
234
+ "required": true,
235
+ "schema": {
236
+ "type": "string"
237
+ }
238
+ },
239
+ {
240
+ "name": "If-Match",
241
+ "in": "header",
242
+ "required": true,
243
+ "schema": {
244
+ "type": "string"
245
+ },
246
+ "description": "The revision this write believes it is replacing."
247
+ }
248
+ ],
249
+ "responses": {
250
+ "200": {
251
+ "description": "The ref the service removed.",
252
+ "content": {
253
+ "application/json": {
254
+ "schema": {
255
+ "$ref": "#/components/schemas/ChartMetaWrite"
256
+ }
257
+ }
258
+ }
259
+ },
260
+ "404": {
261
+ "description": "No row with that id.",
262
+ "content": {
263
+ "application/json": {
264
+ "schema": {
265
+ "$ref": "#/components/schemas/NotFound"
266
+ }
267
+ }
268
+ }
269
+ },
270
+ "409": {
271
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
272
+ "content": {
273
+ "application/json": {
274
+ "schema": {
275
+ "$ref": "#/components/schemas/Conflict"
276
+ }
277
+ }
278
+ }
279
+ },
280
+ "428": {
281
+ "description": "The request carried no If-Match revision.",
282
+ "content": {
283
+ "application/json": {
284
+ "schema": {
285
+ "$ref": "#/components/schemas/RevisionRequired"
286
+ }
287
+ }
288
+ }
289
+ }
290
+ }
291
+ }
292
+ },
293
+ "/layouts": {
294
+ "get": {
295
+ "tags": [
296
+ "layouts"
297
+ ],
298
+ "summary": "List rows, metadata only.",
299
+ "parameters": [],
300
+ "responses": {
301
+ "200": {
302
+ "description": "The rows this principal may read.",
303
+ "content": {
304
+ "application/json": {
305
+ "schema": {
306
+ "$ref": "#/components/schemas/LayoutMetaList"
307
+ }
308
+ }
309
+ }
310
+ }
311
+ }
312
+ },
313
+ "post": {
314
+ "tags": [
315
+ "layouts"
316
+ ],
317
+ "summary": "Store a new row. The service mints the id, so a create quotes no revision.",
318
+ "parameters": [],
319
+ "requestBody": {
320
+ "description": "The document to store.",
321
+ "content": {
322
+ "application/json": {
323
+ "schema": {
324
+ "$ref": "#/components/schemas/LayoutBody"
325
+ }
326
+ }
327
+ }
328
+ },
329
+ "responses": {
330
+ "200": {
331
+ "description": "The ref the service now holds.",
332
+ "content": {
333
+ "application/json": {
334
+ "schema": {
335
+ "$ref": "#/components/schemas/LayoutMetaWrite"
336
+ }
337
+ }
338
+ }
339
+ },
340
+ "404": {
341
+ "description": "No row with that id.",
342
+ "content": {
343
+ "application/json": {
344
+ "schema": {
345
+ "$ref": "#/components/schemas/NotFound"
346
+ }
347
+ }
348
+ }
349
+ },
350
+ "409": {
351
+ "description": "A row already stands for this identity. The body carries its ref, which the caller loads instead of forking a second.",
352
+ "content": {
353
+ "application/json": {
354
+ "schema": {
355
+ "$ref": "#/components/schemas/Conflict"
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+ }
362
+ },
363
+ "/layouts/{id}": {
364
+ "get": {
365
+ "tags": [
366
+ "layouts"
367
+ ],
368
+ "summary": "Read one row and the revision it stands at.",
369
+ "parameters": [
370
+ {
371
+ "name": "id",
372
+ "in": "path",
373
+ "required": true,
374
+ "schema": {
375
+ "type": "string"
376
+ }
377
+ }
378
+ ],
379
+ "responses": {
380
+ "200": {
381
+ "description": "The document and its ref.",
382
+ "content": {
383
+ "application/json": {
384
+ "schema": {
385
+ "$ref": "#/components/schemas/LayoutBodyLoad"
386
+ }
387
+ }
388
+ }
389
+ },
390
+ "404": {
391
+ "description": "No row with that id.",
392
+ "content": {
393
+ "application/json": {
394
+ "schema": {
395
+ "$ref": "#/components/schemas/NotFound"
396
+ }
397
+ }
398
+ }
399
+ }
400
+ }
401
+ },
402
+ "put": {
403
+ "tags": [
404
+ "layouts"
405
+ ],
406
+ "summary": "Replace the row, but only while it still stands at the quoted revision.",
407
+ "parameters": [
408
+ {
409
+ "name": "id",
410
+ "in": "path",
411
+ "required": true,
412
+ "schema": {
413
+ "type": "string"
414
+ }
415
+ },
416
+ {
417
+ "name": "If-Match",
418
+ "in": "header",
419
+ "required": true,
420
+ "schema": {
421
+ "type": "string"
422
+ },
423
+ "description": "The revision this write believes it is replacing."
424
+ }
425
+ ],
426
+ "requestBody": {
427
+ "description": "The document to store.",
428
+ "content": {
429
+ "application/json": {
430
+ "schema": {
431
+ "$ref": "#/components/schemas/LayoutBody"
432
+ }
433
+ }
434
+ }
435
+ },
436
+ "responses": {
437
+ "200": {
438
+ "description": "The ref the service now holds.",
439
+ "content": {
440
+ "application/json": {
441
+ "schema": {
442
+ "$ref": "#/components/schemas/LayoutMetaWrite"
443
+ }
444
+ }
445
+ }
446
+ },
447
+ "404": {
448
+ "description": "No row with that id.",
449
+ "content": {
450
+ "application/json": {
451
+ "schema": {
452
+ "$ref": "#/components/schemas/NotFound"
453
+ }
454
+ }
455
+ }
456
+ },
457
+ "409": {
458
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
459
+ "content": {
460
+ "application/json": {
461
+ "schema": {
462
+ "$ref": "#/components/schemas/Conflict"
463
+ }
464
+ }
465
+ }
466
+ },
467
+ "428": {
468
+ "description": "The request carried no If-Match revision.",
469
+ "content": {
470
+ "application/json": {
471
+ "schema": {
472
+ "$ref": "#/components/schemas/RevisionRequired"
473
+ }
474
+ }
475
+ }
476
+ }
477
+ }
478
+ },
479
+ "delete": {
480
+ "tags": [
481
+ "layouts"
482
+ ],
483
+ "summary": "Delete the row, but only while it still stands at the quoted revision.",
484
+ "parameters": [
485
+ {
486
+ "name": "id",
487
+ "in": "path",
488
+ "required": true,
489
+ "schema": {
490
+ "type": "string"
491
+ }
492
+ },
493
+ {
494
+ "name": "If-Match",
495
+ "in": "header",
496
+ "required": true,
497
+ "schema": {
498
+ "type": "string"
499
+ },
500
+ "description": "The revision this write believes it is replacing."
501
+ }
502
+ ],
503
+ "responses": {
504
+ "200": {
505
+ "description": "The ref the service removed.",
506
+ "content": {
507
+ "application/json": {
508
+ "schema": {
509
+ "$ref": "#/components/schemas/LayoutMetaWrite"
510
+ }
511
+ }
512
+ }
513
+ },
514
+ "404": {
515
+ "description": "No row with that id.",
516
+ "content": {
517
+ "application/json": {
518
+ "schema": {
519
+ "$ref": "#/components/schemas/NotFound"
520
+ }
521
+ }
522
+ }
523
+ },
524
+ "409": {
525
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
526
+ "content": {
527
+ "application/json": {
528
+ "schema": {
529
+ "$ref": "#/components/schemas/Conflict"
530
+ }
531
+ }
532
+ }
533
+ },
534
+ "428": {
535
+ "description": "The request carried no If-Match revision.",
536
+ "content": {
537
+ "application/json": {
538
+ "schema": {
539
+ "$ref": "#/components/schemas/RevisionRequired"
540
+ }
541
+ }
542
+ }
543
+ }
544
+ }
545
+ }
546
+ },
547
+ "/drawings": {
548
+ "get": {
549
+ "tags": [
550
+ "drawings"
551
+ ],
552
+ "summary": "List rows, metadata only.",
553
+ "parameters": [
554
+ {
555
+ "name": "symbol",
556
+ "in": "query",
557
+ "required": true,
558
+ "schema": {
559
+ "type": "string"
560
+ },
561
+ "description": "The symbol the document belongs to."
562
+ },
563
+ {
564
+ "name": "context",
565
+ "in": "query",
566
+ "required": true,
567
+ "schema": {
568
+ "type": "string",
569
+ "description": "The drawing-resource context token. The service keys rows by it and never parses it."
570
+ },
571
+ "description": "The drawing-resource context token."
572
+ }
573
+ ],
574
+ "responses": {
575
+ "200": {
576
+ "description": "The rows this principal may read.",
577
+ "content": {
578
+ "application/json": {
579
+ "schema": {
580
+ "$ref": "#/components/schemas/DrawingsMetaList"
581
+ }
582
+ }
583
+ }
584
+ }
585
+ }
586
+ },
587
+ "post": {
588
+ "tags": [
589
+ "drawings"
590
+ ],
591
+ "summary": "Store a new row. The service mints the id, so a create quotes no revision.",
592
+ "parameters": [
593
+ {
594
+ "name": "symbol",
595
+ "in": "query",
596
+ "required": true,
597
+ "schema": {
598
+ "type": "string"
599
+ },
600
+ "description": "The symbol the document belongs to."
601
+ },
602
+ {
603
+ "name": "context",
604
+ "in": "query",
605
+ "required": true,
606
+ "schema": {
607
+ "type": "string",
608
+ "description": "The drawing-resource context token. The service keys rows by it and never parses it."
609
+ },
610
+ "description": "The drawing-resource context token."
611
+ }
612
+ ],
613
+ "requestBody": {
614
+ "description": "The document to store.",
615
+ "content": {
616
+ "application/json": {
617
+ "schema": {
618
+ "$ref": "#/components/schemas/DrawingsBody"
619
+ }
620
+ }
621
+ }
622
+ },
623
+ "responses": {
624
+ "200": {
625
+ "description": "The ref the service now holds.",
626
+ "content": {
627
+ "application/json": {
628
+ "schema": {
629
+ "$ref": "#/components/schemas/DrawingsMetaWrite"
630
+ }
631
+ }
632
+ }
633
+ },
634
+ "404": {
635
+ "description": "No row with that id.",
636
+ "content": {
637
+ "application/json": {
638
+ "schema": {
639
+ "$ref": "#/components/schemas/NotFound"
640
+ }
641
+ }
642
+ }
643
+ },
644
+ "409": {
645
+ "description": "A row already stands for this identity. The body carries its ref, which the caller loads instead of forking a second.",
646
+ "content": {
647
+ "application/json": {
648
+ "schema": {
649
+ "$ref": "#/components/schemas/Conflict"
650
+ }
651
+ }
652
+ }
653
+ }
654
+ }
655
+ }
656
+ },
657
+ "/drawings/{id}": {
658
+ "get": {
659
+ "tags": [
660
+ "drawings"
661
+ ],
662
+ "summary": "Read one row and the revision it stands at.",
663
+ "parameters": [
664
+ {
665
+ "name": "id",
666
+ "in": "path",
667
+ "required": true,
668
+ "schema": {
669
+ "type": "string"
670
+ }
671
+ }
672
+ ],
673
+ "responses": {
674
+ "200": {
675
+ "description": "The document and its ref.",
676
+ "content": {
677
+ "application/json": {
678
+ "schema": {
679
+ "$ref": "#/components/schemas/DrawingsBodyLoad"
680
+ }
681
+ }
682
+ }
683
+ },
684
+ "404": {
685
+ "description": "No row with that id.",
686
+ "content": {
687
+ "application/json": {
688
+ "schema": {
689
+ "$ref": "#/components/schemas/NotFound"
690
+ }
691
+ }
692
+ }
693
+ }
694
+ }
695
+ },
696
+ "put": {
697
+ "tags": [
698
+ "drawings"
699
+ ],
700
+ "summary": "Replace the row, but only while it still stands at the quoted revision.",
701
+ "parameters": [
702
+ {
703
+ "name": "id",
704
+ "in": "path",
705
+ "required": true,
706
+ "schema": {
707
+ "type": "string"
708
+ }
709
+ },
710
+ {
711
+ "name": "If-Match",
712
+ "in": "header",
713
+ "required": true,
714
+ "schema": {
715
+ "type": "string"
716
+ },
717
+ "description": "The revision this write believes it is replacing."
718
+ }
719
+ ],
720
+ "requestBody": {
721
+ "description": "The document to store.",
722
+ "content": {
723
+ "application/json": {
724
+ "schema": {
725
+ "$ref": "#/components/schemas/DrawingsBody"
726
+ }
727
+ }
728
+ }
729
+ },
730
+ "responses": {
731
+ "200": {
732
+ "description": "The ref the service now holds.",
733
+ "content": {
734
+ "application/json": {
735
+ "schema": {
736
+ "$ref": "#/components/schemas/DrawingsMetaWrite"
737
+ }
738
+ }
739
+ }
740
+ },
741
+ "404": {
742
+ "description": "No row with that id.",
743
+ "content": {
744
+ "application/json": {
745
+ "schema": {
746
+ "$ref": "#/components/schemas/NotFound"
747
+ }
748
+ }
749
+ }
750
+ },
751
+ "409": {
752
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
753
+ "content": {
754
+ "application/json": {
755
+ "schema": {
756
+ "$ref": "#/components/schemas/Conflict"
757
+ }
758
+ }
759
+ }
760
+ },
761
+ "428": {
762
+ "description": "The request carried no If-Match revision.",
763
+ "content": {
764
+ "application/json": {
765
+ "schema": {
766
+ "$ref": "#/components/schemas/RevisionRequired"
767
+ }
768
+ }
769
+ }
770
+ }
771
+ }
772
+ },
773
+ "delete": {
774
+ "tags": [
775
+ "drawings"
776
+ ],
777
+ "summary": "Delete the row, but only while it still stands at the quoted revision.",
778
+ "parameters": [
779
+ {
780
+ "name": "id",
781
+ "in": "path",
782
+ "required": true,
783
+ "schema": {
784
+ "type": "string"
785
+ }
786
+ },
787
+ {
788
+ "name": "If-Match",
789
+ "in": "header",
790
+ "required": true,
791
+ "schema": {
792
+ "type": "string"
793
+ },
794
+ "description": "The revision this write believes it is replacing."
795
+ }
796
+ ],
797
+ "responses": {
798
+ "200": {
799
+ "description": "The ref the service removed.",
800
+ "content": {
801
+ "application/json": {
802
+ "schema": {
803
+ "$ref": "#/components/schemas/DrawingsMetaWrite"
804
+ }
805
+ }
806
+ }
807
+ },
808
+ "404": {
809
+ "description": "No row with that id.",
810
+ "content": {
811
+ "application/json": {
812
+ "schema": {
813
+ "$ref": "#/components/schemas/NotFound"
814
+ }
815
+ }
816
+ }
817
+ },
818
+ "409": {
819
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
820
+ "content": {
821
+ "application/json": {
822
+ "schema": {
823
+ "$ref": "#/components/schemas/Conflict"
824
+ }
825
+ }
826
+ }
827
+ },
828
+ "428": {
829
+ "description": "The request carried no If-Match revision.",
830
+ "content": {
831
+ "application/json": {
832
+ "schema": {
833
+ "$ref": "#/components/schemas/RevisionRequired"
834
+ }
835
+ }
836
+ }
837
+ }
838
+ }
839
+ }
840
+ },
841
+ "/templates/{kind}": {
842
+ "get": {
843
+ "tags": [
844
+ "templates"
845
+ ],
846
+ "summary": "List rows, metadata only.",
847
+ "parameters": [
848
+ {
849
+ "name": "kind",
850
+ "in": "path",
851
+ "required": true,
852
+ "schema": {
853
+ "type": "string",
854
+ "enum": [
855
+ "study",
856
+ "drawing",
857
+ "palette"
858
+ ]
859
+ },
860
+ "description": "Which template collection: appearance palettes, indicator studies, or drawings."
861
+ }
862
+ ],
863
+ "responses": {
864
+ "200": {
865
+ "description": "The rows this principal may read.",
866
+ "content": {
867
+ "application/json": {
868
+ "schema": {
869
+ "$ref": "#/components/schemas/TemplateMetaList"
870
+ }
871
+ }
872
+ }
873
+ }
874
+ }
875
+ },
876
+ "post": {
877
+ "tags": [
878
+ "templates"
879
+ ],
880
+ "summary": "Store a new row. The service mints the id, so a create quotes no revision.",
881
+ "parameters": [
882
+ {
883
+ "name": "kind",
884
+ "in": "path",
885
+ "required": true,
886
+ "schema": {
887
+ "type": "string",
888
+ "enum": [
889
+ "study",
890
+ "drawing",
891
+ "palette"
892
+ ]
893
+ },
894
+ "description": "Which template collection: appearance palettes, indicator studies, or drawings."
895
+ }
896
+ ],
897
+ "requestBody": {
898
+ "description": "The document to store.",
899
+ "content": {
900
+ "application/json": {
901
+ "schema": {
902
+ "$ref": "#/components/schemas/TemplateBody"
903
+ }
904
+ }
905
+ }
906
+ },
907
+ "responses": {
908
+ "200": {
909
+ "description": "The ref the service now holds.",
910
+ "content": {
911
+ "application/json": {
912
+ "schema": {
913
+ "$ref": "#/components/schemas/TemplateMetaWrite"
914
+ }
915
+ }
916
+ }
917
+ },
918
+ "404": {
919
+ "description": "No row with that id.",
920
+ "content": {
921
+ "application/json": {
922
+ "schema": {
923
+ "$ref": "#/components/schemas/NotFound"
924
+ }
925
+ }
926
+ }
927
+ },
928
+ "409": {
929
+ "description": "A row already stands for this identity. The body carries its ref, which the caller loads instead of forking a second.",
930
+ "content": {
931
+ "application/json": {
932
+ "schema": {
933
+ "$ref": "#/components/schemas/Conflict"
934
+ }
935
+ }
936
+ }
937
+ }
938
+ }
939
+ }
940
+ },
941
+ "/templates/{kind}/{id}": {
942
+ "get": {
943
+ "tags": [
944
+ "templates"
945
+ ],
946
+ "summary": "Read one row and the revision it stands at.",
947
+ "parameters": [
948
+ {
949
+ "name": "kind",
950
+ "in": "path",
951
+ "required": true,
952
+ "schema": {
953
+ "type": "string",
954
+ "enum": [
955
+ "study",
956
+ "drawing",
957
+ "palette"
958
+ ]
959
+ },
960
+ "description": "Which template collection: appearance palettes, indicator studies, or drawings."
961
+ },
962
+ {
963
+ "name": "id",
964
+ "in": "path",
965
+ "required": true,
966
+ "schema": {
967
+ "type": "string"
968
+ }
969
+ }
970
+ ],
971
+ "responses": {
972
+ "200": {
973
+ "description": "The document and its ref.",
974
+ "content": {
975
+ "application/json": {
976
+ "schema": {
977
+ "$ref": "#/components/schemas/TemplateBodyLoad"
978
+ }
979
+ }
980
+ }
981
+ },
982
+ "404": {
983
+ "description": "No row with that id.",
984
+ "content": {
985
+ "application/json": {
986
+ "schema": {
987
+ "$ref": "#/components/schemas/NotFound"
988
+ }
989
+ }
990
+ }
991
+ }
992
+ }
993
+ },
994
+ "put": {
995
+ "tags": [
996
+ "templates"
997
+ ],
998
+ "summary": "Replace the row, but only while it still stands at the quoted revision.",
999
+ "parameters": [
1000
+ {
1001
+ "name": "kind",
1002
+ "in": "path",
1003
+ "required": true,
1004
+ "schema": {
1005
+ "type": "string",
1006
+ "enum": [
1007
+ "study",
1008
+ "drawing",
1009
+ "palette"
1010
+ ]
1011
+ },
1012
+ "description": "Which template collection: appearance palettes, indicator studies, or drawings."
1013
+ },
1014
+ {
1015
+ "name": "id",
1016
+ "in": "path",
1017
+ "required": true,
1018
+ "schema": {
1019
+ "type": "string"
1020
+ }
1021
+ },
1022
+ {
1023
+ "name": "If-Match",
1024
+ "in": "header",
1025
+ "required": true,
1026
+ "schema": {
1027
+ "type": "string"
1028
+ },
1029
+ "description": "The revision this write believes it is replacing."
1030
+ }
1031
+ ],
1032
+ "requestBody": {
1033
+ "description": "The document to store.",
1034
+ "content": {
1035
+ "application/json": {
1036
+ "schema": {
1037
+ "$ref": "#/components/schemas/TemplateBody"
1038
+ }
1039
+ }
1040
+ }
1041
+ },
1042
+ "responses": {
1043
+ "200": {
1044
+ "description": "The ref the service now holds.",
1045
+ "content": {
1046
+ "application/json": {
1047
+ "schema": {
1048
+ "$ref": "#/components/schemas/TemplateMetaWrite"
1049
+ }
1050
+ }
1051
+ }
1052
+ },
1053
+ "404": {
1054
+ "description": "No row with that id.",
1055
+ "content": {
1056
+ "application/json": {
1057
+ "schema": {
1058
+ "$ref": "#/components/schemas/NotFound"
1059
+ }
1060
+ }
1061
+ }
1062
+ },
1063
+ "409": {
1064
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
1065
+ "content": {
1066
+ "application/json": {
1067
+ "schema": {
1068
+ "$ref": "#/components/schemas/Conflict"
1069
+ }
1070
+ }
1071
+ }
1072
+ },
1073
+ "428": {
1074
+ "description": "The request carried no If-Match revision.",
1075
+ "content": {
1076
+ "application/json": {
1077
+ "schema": {
1078
+ "$ref": "#/components/schemas/RevisionRequired"
1079
+ }
1080
+ }
1081
+ }
1082
+ }
1083
+ }
1084
+ },
1085
+ "delete": {
1086
+ "tags": [
1087
+ "templates"
1088
+ ],
1089
+ "summary": "Delete the row, but only while it still stands at the quoted revision.",
1090
+ "parameters": [
1091
+ {
1092
+ "name": "kind",
1093
+ "in": "path",
1094
+ "required": true,
1095
+ "schema": {
1096
+ "type": "string",
1097
+ "enum": [
1098
+ "study",
1099
+ "drawing",
1100
+ "palette"
1101
+ ]
1102
+ },
1103
+ "description": "Which template collection: appearance palettes, indicator studies, or drawings."
1104
+ },
1105
+ {
1106
+ "name": "id",
1107
+ "in": "path",
1108
+ "required": true,
1109
+ "schema": {
1110
+ "type": "string"
1111
+ }
1112
+ },
1113
+ {
1114
+ "name": "If-Match",
1115
+ "in": "header",
1116
+ "required": true,
1117
+ "schema": {
1118
+ "type": "string"
1119
+ },
1120
+ "description": "The revision this write believes it is replacing."
1121
+ }
1122
+ ],
1123
+ "responses": {
1124
+ "200": {
1125
+ "description": "The ref the service removed.",
1126
+ "content": {
1127
+ "application/json": {
1128
+ "schema": {
1129
+ "$ref": "#/components/schemas/TemplateMetaWrite"
1130
+ }
1131
+ }
1132
+ }
1133
+ },
1134
+ "404": {
1135
+ "description": "No row with that id.",
1136
+ "content": {
1137
+ "application/json": {
1138
+ "schema": {
1139
+ "$ref": "#/components/schemas/NotFound"
1140
+ }
1141
+ }
1142
+ }
1143
+ },
1144
+ "409": {
1145
+ "description": "The quoted revision is not the one that stands. The body carries the ref that does.",
1146
+ "content": {
1147
+ "application/json": {
1148
+ "schema": {
1149
+ "$ref": "#/components/schemas/Conflict"
1150
+ }
1151
+ }
1152
+ }
1153
+ },
1154
+ "428": {
1155
+ "description": "The request carried no If-Match revision.",
1156
+ "content": {
1157
+ "application/json": {
1158
+ "schema": {
1159
+ "$ref": "#/components/schemas/RevisionRequired"
1160
+ }
1161
+ }
1162
+ }
1163
+ }
1164
+ }
1165
+ }
1166
+ }
1167
+ },
1168
+ "components": {
1169
+ "schemas": {
1170
+ "ResourceRef": {
1171
+ "type": "object",
1172
+ "properties": {
1173
+ "id": {
1174
+ "type": "string",
1175
+ "description": "Stable identity, minted by the service."
1176
+ },
1177
+ "revision": {
1178
+ "type": "string",
1179
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1180
+ }
1181
+ },
1182
+ "required": [
1183
+ "id",
1184
+ "revision"
1185
+ ],
1186
+ "additionalProperties": false
1187
+ },
1188
+ "Conflict": {
1189
+ "type": "object",
1190
+ "properties": {
1191
+ "error": {
1192
+ "const": "conflict"
1193
+ },
1194
+ "current": {
1195
+ "$ref": "#/components/schemas/ResourceRef"
1196
+ }
1197
+ },
1198
+ "required": [
1199
+ "error",
1200
+ "current"
1201
+ ],
1202
+ "additionalProperties": false
1203
+ },
1204
+ "NotFound": {
1205
+ "type": "object",
1206
+ "properties": {
1207
+ "error": {
1208
+ "const": "not_found"
1209
+ }
1210
+ },
1211
+ "required": [
1212
+ "error"
1213
+ ],
1214
+ "additionalProperties": false
1215
+ },
1216
+ "RevisionRequired": {
1217
+ "type": "object",
1218
+ "properties": {
1219
+ "error": {
1220
+ "const": "revision_required"
1221
+ }
1222
+ },
1223
+ "required": [
1224
+ "error"
1225
+ ],
1226
+ "additionalProperties": false
1227
+ },
1228
+ "ChartMeta": {
1229
+ "type": "object",
1230
+ "properties": {
1231
+ "id": {
1232
+ "type": "string",
1233
+ "description": "Stable identity, minted by the service."
1234
+ },
1235
+ "revision": {
1236
+ "type": "string",
1237
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1238
+ },
1239
+ "name": {
1240
+ "type": "string"
1241
+ },
1242
+ "symbol": {
1243
+ "type": "string"
1244
+ },
1245
+ "timeframe": {
1246
+ "type": "string"
1247
+ },
1248
+ "updatedAt": {
1249
+ "type": "integer",
1250
+ "description": "Last write, milliseconds since the Unix epoch, stamped by the service."
1251
+ }
1252
+ },
1253
+ "required": [
1254
+ "id",
1255
+ "revision",
1256
+ "name",
1257
+ "symbol",
1258
+ "timeframe",
1259
+ "updatedAt"
1260
+ ],
1261
+ "additionalProperties": false
1262
+ },
1263
+ "ChartBody": {
1264
+ "type": "object",
1265
+ "properties": {
1266
+ "name": {
1267
+ "type": "string"
1268
+ },
1269
+ "symbol": {
1270
+ "type": "string"
1271
+ },
1272
+ "timeframe": {
1273
+ "type": "string"
1274
+ },
1275
+ "content": {
1276
+ "type": "string",
1277
+ "description": "The serialized chart state. The service stores it without parsing it."
1278
+ }
1279
+ },
1280
+ "required": [
1281
+ "name",
1282
+ "symbol",
1283
+ "timeframe",
1284
+ "content"
1285
+ ],
1286
+ "additionalProperties": false
1287
+ },
1288
+ "LayoutMeta": {
1289
+ "type": "object",
1290
+ "properties": {
1291
+ "id": {
1292
+ "type": "string",
1293
+ "description": "Stable identity, minted by the service."
1294
+ },
1295
+ "revision": {
1296
+ "type": "string",
1297
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1298
+ },
1299
+ "name": {
1300
+ "type": "string"
1301
+ },
1302
+ "symbol": {
1303
+ "type": "string"
1304
+ },
1305
+ "timeframe": {
1306
+ "type": "string"
1307
+ },
1308
+ "updatedAt": {
1309
+ "type": "integer",
1310
+ "description": "Last write, milliseconds since the Unix epoch, stamped by the service."
1311
+ }
1312
+ },
1313
+ "required": [
1314
+ "id",
1315
+ "revision",
1316
+ "name",
1317
+ "updatedAt"
1318
+ ],
1319
+ "additionalProperties": false
1320
+ },
1321
+ "LayoutBody": {
1322
+ "type": "object",
1323
+ "properties": {
1324
+ "name": {
1325
+ "type": "string"
1326
+ },
1327
+ "symbol": {
1328
+ "type": "string"
1329
+ },
1330
+ "timeframe": {
1331
+ "type": "string"
1332
+ },
1333
+ "content": {
1334
+ "type": "string",
1335
+ "description": "The serialized layout state. The service stores it without parsing it."
1336
+ }
1337
+ },
1338
+ "required": [
1339
+ "name",
1340
+ "content"
1341
+ ],
1342
+ "additionalProperties": false
1343
+ },
1344
+ "DrawingsMeta": {
1345
+ "type": "object",
1346
+ "properties": {
1347
+ "id": {
1348
+ "type": "string",
1349
+ "description": "Stable identity, minted by the service."
1350
+ },
1351
+ "revision": {
1352
+ "type": "string",
1353
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1354
+ },
1355
+ "updatedAt": {
1356
+ "type": "integer",
1357
+ "description": "Last write, milliseconds since the Unix epoch, stamped by the service."
1358
+ }
1359
+ },
1360
+ "required": [
1361
+ "id",
1362
+ "revision",
1363
+ "updatedAt"
1364
+ ],
1365
+ "additionalProperties": false
1366
+ },
1367
+ "DrawingsBody": {
1368
+ "type": "object",
1369
+ "properties": {
1370
+ "content": {
1371
+ "type": "string",
1372
+ "description": "The drawings document as JSON text. The service stores it without parsing it."
1373
+ }
1374
+ },
1375
+ "required": [
1376
+ "content"
1377
+ ],
1378
+ "additionalProperties": false
1379
+ },
1380
+ "TemplateMeta": {
1381
+ "type": "object",
1382
+ "properties": {
1383
+ "id": {
1384
+ "type": "string",
1385
+ "description": "Stable identity, minted by the service."
1386
+ },
1387
+ "revision": {
1388
+ "type": "string",
1389
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1390
+ },
1391
+ "name": {
1392
+ "type": "string"
1393
+ },
1394
+ "tool": {
1395
+ "type": "string"
1396
+ },
1397
+ "updatedAt": {
1398
+ "type": "integer",
1399
+ "description": "Last write, milliseconds since the Unix epoch, stamped by the service."
1400
+ }
1401
+ },
1402
+ "required": [
1403
+ "id",
1404
+ "revision",
1405
+ "name",
1406
+ "updatedAt"
1407
+ ],
1408
+ "additionalProperties": false
1409
+ },
1410
+ "TemplateBody": {
1411
+ "type": "object",
1412
+ "properties": {
1413
+ "name": {
1414
+ "type": "string"
1415
+ },
1416
+ "tool": {
1417
+ "type": "string"
1418
+ },
1419
+ "content": {
1420
+ "type": "string",
1421
+ "description": "The serialized template state. The service stores it without parsing it."
1422
+ }
1423
+ },
1424
+ "required": [
1425
+ "name",
1426
+ "content"
1427
+ ],
1428
+ "additionalProperties": false
1429
+ },
1430
+ "ChartMetaList": {
1431
+ "type": "object",
1432
+ "properties": {
1433
+ "items": {
1434
+ "type": "array",
1435
+ "items": {
1436
+ "$ref": "#/components/schemas/ChartMeta"
1437
+ }
1438
+ }
1439
+ },
1440
+ "required": [
1441
+ "items"
1442
+ ],
1443
+ "additionalProperties": false
1444
+ },
1445
+ "LayoutMetaList": {
1446
+ "type": "object",
1447
+ "properties": {
1448
+ "items": {
1449
+ "type": "array",
1450
+ "items": {
1451
+ "$ref": "#/components/schemas/LayoutMeta"
1452
+ }
1453
+ }
1454
+ },
1455
+ "required": [
1456
+ "items"
1457
+ ],
1458
+ "additionalProperties": false
1459
+ },
1460
+ "DrawingsMetaList": {
1461
+ "type": "object",
1462
+ "properties": {
1463
+ "items": {
1464
+ "type": "array",
1465
+ "items": {
1466
+ "$ref": "#/components/schemas/DrawingsMeta"
1467
+ }
1468
+ }
1469
+ },
1470
+ "required": [
1471
+ "items"
1472
+ ],
1473
+ "additionalProperties": false
1474
+ },
1475
+ "TemplateMetaList": {
1476
+ "type": "object",
1477
+ "properties": {
1478
+ "items": {
1479
+ "type": "array",
1480
+ "items": {
1481
+ "$ref": "#/components/schemas/TemplateMeta"
1482
+ }
1483
+ }
1484
+ },
1485
+ "required": [
1486
+ "items"
1487
+ ],
1488
+ "additionalProperties": false
1489
+ },
1490
+ "ChartBodyLoad": {
1491
+ "type": "object",
1492
+ "properties": {
1493
+ "id": {
1494
+ "type": "string",
1495
+ "description": "Stable identity, minted by the service."
1496
+ },
1497
+ "revision": {
1498
+ "type": "string",
1499
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1500
+ },
1501
+ "body": {
1502
+ "$ref": "#/components/schemas/ChartBody"
1503
+ }
1504
+ },
1505
+ "required": [
1506
+ "id",
1507
+ "revision",
1508
+ "body"
1509
+ ],
1510
+ "additionalProperties": false
1511
+ },
1512
+ "LayoutBodyLoad": {
1513
+ "type": "object",
1514
+ "properties": {
1515
+ "id": {
1516
+ "type": "string",
1517
+ "description": "Stable identity, minted by the service."
1518
+ },
1519
+ "revision": {
1520
+ "type": "string",
1521
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1522
+ },
1523
+ "body": {
1524
+ "$ref": "#/components/schemas/LayoutBody"
1525
+ }
1526
+ },
1527
+ "required": [
1528
+ "id",
1529
+ "revision",
1530
+ "body"
1531
+ ],
1532
+ "additionalProperties": false
1533
+ },
1534
+ "DrawingsBodyLoad": {
1535
+ "type": "object",
1536
+ "properties": {
1537
+ "id": {
1538
+ "type": "string",
1539
+ "description": "Stable identity, minted by the service."
1540
+ },
1541
+ "revision": {
1542
+ "type": "string",
1543
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1544
+ },
1545
+ "body": {
1546
+ "$ref": "#/components/schemas/DrawingsBody"
1547
+ }
1548
+ },
1549
+ "required": [
1550
+ "id",
1551
+ "revision",
1552
+ "body"
1553
+ ],
1554
+ "additionalProperties": false
1555
+ },
1556
+ "TemplateBodyLoad": {
1557
+ "type": "object",
1558
+ "properties": {
1559
+ "id": {
1560
+ "type": "string",
1561
+ "description": "Stable identity, minted by the service."
1562
+ },
1563
+ "revision": {
1564
+ "type": "string",
1565
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1566
+ },
1567
+ "body": {
1568
+ "$ref": "#/components/schemas/TemplateBody"
1569
+ }
1570
+ },
1571
+ "required": [
1572
+ "id",
1573
+ "revision",
1574
+ "body"
1575
+ ],
1576
+ "additionalProperties": false
1577
+ },
1578
+ "ChartMetaWrite": {
1579
+ "type": "object",
1580
+ "properties": {
1581
+ "id": {
1582
+ "type": "string",
1583
+ "description": "Stable identity, minted by the service."
1584
+ },
1585
+ "revision": {
1586
+ "type": "string",
1587
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1588
+ },
1589
+ "meta": {
1590
+ "$ref": "#/components/schemas/ChartMeta"
1591
+ }
1592
+ },
1593
+ "required": [
1594
+ "id",
1595
+ "revision"
1596
+ ],
1597
+ "additionalProperties": false
1598
+ },
1599
+ "LayoutMetaWrite": {
1600
+ "type": "object",
1601
+ "properties": {
1602
+ "id": {
1603
+ "type": "string",
1604
+ "description": "Stable identity, minted by the service."
1605
+ },
1606
+ "revision": {
1607
+ "type": "string",
1608
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1609
+ },
1610
+ "meta": {
1611
+ "$ref": "#/components/schemas/LayoutMeta"
1612
+ }
1613
+ },
1614
+ "required": [
1615
+ "id",
1616
+ "revision"
1617
+ ],
1618
+ "additionalProperties": false
1619
+ },
1620
+ "DrawingsMetaWrite": {
1621
+ "type": "object",
1622
+ "properties": {
1623
+ "id": {
1624
+ "type": "string",
1625
+ "description": "Stable identity, minted by the service."
1626
+ },
1627
+ "revision": {
1628
+ "type": "string",
1629
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1630
+ },
1631
+ "meta": {
1632
+ "$ref": "#/components/schemas/DrawingsMeta"
1633
+ }
1634
+ },
1635
+ "required": [
1636
+ "id",
1637
+ "revision"
1638
+ ],
1639
+ "additionalProperties": false
1640
+ },
1641
+ "TemplateMetaWrite": {
1642
+ "type": "object",
1643
+ "properties": {
1644
+ "id": {
1645
+ "type": "string",
1646
+ "description": "Stable identity, minted by the service."
1647
+ },
1648
+ "revision": {
1649
+ "type": "string",
1650
+ "description": "The version this row stands at. Opaque to the client, compared for equality alone."
1651
+ },
1652
+ "meta": {
1653
+ "$ref": "#/components/schemas/TemplateMeta"
1654
+ }
1655
+ },
1656
+ "required": [
1657
+ "id",
1658
+ "revision"
1659
+ ],
1660
+ "additionalProperties": false
1661
+ }
1662
+ }
1663
+ }
1664
+ }