@infinitetoken/lumber-kit 0.7.0 → 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.
- package/README.md +22 -8
- package/contract/schema.json +1310 -1247
- package/dist/index.d.mts +102 -49
- package/dist/index.d.ts +102 -49
- package/dist/index.js +31 -2
- package/dist/index.mjs +26 -2
- package/package.json +8 -4
package/contract/schema.json
CHANGED
|
@@ -12,6 +12,39 @@
|
|
|
12
12
|
"light"
|
|
13
13
|
]
|
|
14
14
|
},
|
|
15
|
+
"TimeClock": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"enum": [
|
|
18
|
+
"24h",
|
|
19
|
+
"12h"
|
|
20
|
+
],
|
|
21
|
+
"description": "A 24-hour clock (`19:15:44`) or a 12-hour one (`7:15:44 PM`)."
|
|
22
|
+
},
|
|
23
|
+
"TimeZoneChoice": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"enum": [
|
|
26
|
+
"local",
|
|
27
|
+
"utc"
|
|
28
|
+
],
|
|
29
|
+
"description": "The device's own time zone, or UTC."
|
|
30
|
+
},
|
|
31
|
+
"TimeFormat": {
|
|
32
|
+
"type": "object",
|
|
33
|
+
"properties": {
|
|
34
|
+
"clock": {
|
|
35
|
+
"$ref": "#/definitions/TimeClock"
|
|
36
|
+
},
|
|
37
|
+
"zone": {
|
|
38
|
+
"$ref": "#/definitions/TimeZoneChoice"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"required": [
|
|
42
|
+
"clock",
|
|
43
|
+
"zone"
|
|
44
|
+
],
|
|
45
|
+
"additionalProperties": false,
|
|
46
|
+
"description": "How a user reads times, on every device: the clock, and the zone that times, days and hours are in (the log list, the heatmap, pushes)."
|
|
47
|
+
},
|
|
15
48
|
"PushToken": {
|
|
16
49
|
"type": "object",
|
|
17
50
|
"properties": {
|
|
@@ -110,6 +143,17 @@
|
|
|
110
143
|
"imageUrl": {
|
|
111
144
|
"type": "string"
|
|
112
145
|
},
|
|
146
|
+
"timeFormat": {
|
|
147
|
+
"anyOf": [
|
|
148
|
+
{
|
|
149
|
+
"$ref": "#/definitions/TimeFormat"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"type": "null"
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"description": "Null until the user picks one (DEFAULT_TIME_FORMAT). Missing from an API before it was kept."
|
|
156
|
+
},
|
|
113
157
|
"agreedToTermsVersion": {
|
|
114
158
|
"type": "string"
|
|
115
159
|
},
|
|
@@ -269,98 +313,36 @@
|
|
|
269
313
|
"HAS_ACCOUNT"
|
|
270
314
|
]
|
|
271
315
|
},
|
|
272
|
-
"
|
|
273
|
-
"anyOf": [
|
|
274
|
-
{
|
|
275
|
-
"$ref": "#/definitions/LogLevel"
|
|
276
|
-
},
|
|
277
|
-
{
|
|
278
|
-
"type": "number",
|
|
279
|
-
"const": 5
|
|
280
|
-
}
|
|
281
|
-
],
|
|
282
|
-
"description": "The lowest log level that pushes, or PUSH_OFF. Stored as a notification preference's `minimumLevel`."
|
|
283
|
-
},
|
|
284
|
-
"SubscriptionLevel": {
|
|
285
|
-
"type": "number",
|
|
286
|
-
"enum": [
|
|
287
|
-
0,
|
|
288
|
-
1,
|
|
289
|
-
2,
|
|
290
|
-
3
|
|
291
|
-
],
|
|
292
|
-
"description": "User subscription level. Mirrors User.subscriptionLevel in Lumber-API."
|
|
293
|
-
},
|
|
294
|
-
"SubscriptionLevelName": {
|
|
295
|
-
"type": "string",
|
|
296
|
-
"enum": [
|
|
297
|
-
"hobby",
|
|
298
|
-
"dev",
|
|
299
|
-
"pro",
|
|
300
|
-
"enterprise"
|
|
301
|
-
],
|
|
302
|
-
"description": "String name for each subscription level, suitable for display and Redux state."
|
|
303
|
-
},
|
|
304
|
-
"SubscriptionLimits": {
|
|
316
|
+
"AppEncryptedKey": {
|
|
305
317
|
"type": "object",
|
|
306
318
|
"properties": {
|
|
307
|
-
"
|
|
308
|
-
"type": "
|
|
309
|
-
},
|
|
310
|
-
"seats": {
|
|
311
|
-
"type": "number"
|
|
312
|
-
},
|
|
313
|
-
"apiKeys": {
|
|
314
|
-
"type": "number"
|
|
319
|
+
"userId": {
|
|
320
|
+
"type": "string"
|
|
315
321
|
},
|
|
316
|
-
"
|
|
317
|
-
"type": "
|
|
322
|
+
"encryptedKey": {
|
|
323
|
+
"type": "string"
|
|
318
324
|
},
|
|
319
|
-
"
|
|
325
|
+
"keyVersion": {
|
|
320
326
|
"type": "number"
|
|
321
|
-
},
|
|
322
|
-
"realtimeLogs": {
|
|
323
|
-
"type": "boolean",
|
|
324
|
-
"description": "Whether real-time WebSocket log streaming is available."
|
|
325
|
-
},
|
|
326
|
-
"minPushLevel": {
|
|
327
|
-
"type": "number",
|
|
328
|
-
"description": "Minimum log level that triggers a push notification. Infinity means push is disabled."
|
|
329
327
|
}
|
|
330
328
|
},
|
|
331
329
|
"required": [
|
|
332
|
-
"
|
|
333
|
-
"
|
|
334
|
-
"
|
|
335
|
-
"logRetentionDays",
|
|
336
|
-
"monthlyLogs",
|
|
337
|
-
"realtimeLogs",
|
|
338
|
-
"minPushLevel"
|
|
330
|
+
"userId",
|
|
331
|
+
"encryptedKey",
|
|
332
|
+
"keyVersion"
|
|
339
333
|
],
|
|
340
|
-
"additionalProperties": false
|
|
334
|
+
"additionalProperties": false,
|
|
335
|
+
"description": "Wrapped application encryption key for a specific user."
|
|
341
336
|
},
|
|
342
|
-
"
|
|
343
|
-
"type": "
|
|
344
|
-
"
|
|
345
|
-
"
|
|
346
|
-
|
|
347
|
-
"description": "Display name, as every surface shows it."
|
|
348
|
-
},
|
|
349
|
-
"monthlyPrice": {
|
|
350
|
-
"type": [
|
|
351
|
-
"number",
|
|
352
|
-
"null"
|
|
353
|
-
],
|
|
354
|
-
"description": "Monthly price in US dollars: 0 for free, null when priced per customer."
|
|
355
|
-
}
|
|
356
|
-
},
|
|
357
|
-
"required": [
|
|
358
|
-
"name",
|
|
359
|
-
"monthlyPrice"
|
|
337
|
+
"AppTeamAccess": {
|
|
338
|
+
"type": "string",
|
|
339
|
+
"enum": [
|
|
340
|
+
"everyone",
|
|
341
|
+
"owner"
|
|
360
342
|
],
|
|
361
|
-
"
|
|
343
|
+
"description": "Who on an app's team can read it: everyone on the team, or only its owner. Its guests read it either way."
|
|
362
344
|
},
|
|
363
|
-
"
|
|
345
|
+
"AppRecord": {
|
|
364
346
|
"type": "object",
|
|
365
347
|
"properties": {
|
|
366
348
|
"id": {
|
|
@@ -381,42 +363,39 @@
|
|
|
381
363
|
"imageUrl": {
|
|
382
364
|
"type": "string"
|
|
383
365
|
},
|
|
384
|
-
"
|
|
385
|
-
"
|
|
366
|
+
"teamId": {
|
|
367
|
+
"type": "string"
|
|
386
368
|
},
|
|
387
|
-
"
|
|
369
|
+
"encryptedKey": {
|
|
388
370
|
"type": [
|
|
389
371
|
"string",
|
|
390
372
|
"null"
|
|
391
|
-
]
|
|
392
|
-
"description": "When a canceled plan stops; null while it renews."
|
|
393
|
-
},
|
|
394
|
-
"role": {
|
|
395
|
-
"type": "string",
|
|
396
|
-
"enum": [
|
|
397
|
-
"owner",
|
|
398
|
-
"admin",
|
|
399
|
-
"member"
|
|
400
|
-
],
|
|
401
|
-
"description": "GET /teams only: the caller's role on the team."
|
|
373
|
+
]
|
|
402
374
|
},
|
|
403
|
-
"
|
|
404
|
-
"
|
|
405
|
-
"description": "
|
|
375
|
+
"teamAccess": {
|
|
376
|
+
"$ref": "#/definitions/AppTeamAccess",
|
|
377
|
+
"description": "Missing means 'everyone'."
|
|
406
378
|
},
|
|
407
|
-
"
|
|
379
|
+
"retentionDays": {
|
|
408
380
|
"type": [
|
|
409
381
|
"number",
|
|
410
382
|
"null"
|
|
411
383
|
],
|
|
412
|
-
"description": "
|
|
384
|
+
"description": "How many days of its logs the app's team's plan keeps, null for no limit (and when missing)."
|
|
413
385
|
},
|
|
414
|
-
"
|
|
386
|
+
"logsCappedUntil": {
|
|
415
387
|
"type": [
|
|
416
|
-
"
|
|
388
|
+
"string",
|
|
417
389
|
"null"
|
|
418
390
|
],
|
|
419
|
-
"description": "
|
|
391
|
+
"description": "While the team has sent its plan's monthly logs, when every level is taken again (the next UTC month); else null. Until then only ERROR and FATAL are taken (monthlyLogsCap)."
|
|
392
|
+
},
|
|
393
|
+
"logsStoppedUntil": {
|
|
394
|
+
"type": [
|
|
395
|
+
"string",
|
|
396
|
+
"null"
|
|
397
|
+
],
|
|
398
|
+
"description": "While the team is at its hard stop (twice its plan's monthly logs, monthlyLogsCap), when any log is taken again (the next UTC month); else null. Set only alongside logsCappedUntil."
|
|
420
399
|
}
|
|
421
400
|
},
|
|
422
401
|
"required": [
|
|
@@ -424,12 +403,12 @@
|
|
|
424
403
|
"createdAt",
|
|
425
404
|
"updatedAt",
|
|
426
405
|
"name",
|
|
427
|
-
"
|
|
406
|
+
"encryptedKey"
|
|
428
407
|
],
|
|
429
408
|
"additionalProperties": false,
|
|
430
|
-
"description": "
|
|
409
|
+
"description": "API response shape for a listed or fetched app. encryptedKey is the requesting user's wrapped copy of the app key, or null if none exists. The optional fields are missing from an API deployed before them, which clients read as the default."
|
|
431
410
|
},
|
|
432
|
-
"
|
|
411
|
+
"AppCreatedRecord": {
|
|
433
412
|
"type": "object",
|
|
434
413
|
"properties": {
|
|
435
414
|
"id": {
|
|
@@ -441,276 +420,95 @@
|
|
|
441
420
|
"updatedAt": {
|
|
442
421
|
"type": "string"
|
|
443
422
|
},
|
|
444
|
-
"
|
|
423
|
+
"name": {
|
|
445
424
|
"type": "string"
|
|
446
425
|
},
|
|
447
|
-
"
|
|
426
|
+
"color": {
|
|
448
427
|
"type": "string"
|
|
449
428
|
},
|
|
450
|
-
"
|
|
451
|
-
"type": "string"
|
|
452
|
-
"enum": [
|
|
453
|
-
"owner",
|
|
454
|
-
"admin",
|
|
455
|
-
"member"
|
|
456
|
-
]
|
|
429
|
+
"imageUrl": {
|
|
430
|
+
"type": "string"
|
|
457
431
|
},
|
|
458
|
-
"
|
|
432
|
+
"teamId": {
|
|
433
|
+
"type": "string"
|
|
434
|
+
},
|
|
435
|
+
"encryptedKey": {
|
|
459
436
|
"type": [
|
|
460
437
|
"string",
|
|
461
438
|
"null"
|
|
462
|
-
]
|
|
463
|
-
"description": "Listed members only: their display name. Never their email address."
|
|
439
|
+
]
|
|
464
440
|
},
|
|
465
|
-
"
|
|
441
|
+
"teamAccess": {
|
|
442
|
+
"$ref": "#/definitions/AppTeamAccess",
|
|
443
|
+
"description": "Missing means 'everyone'."
|
|
444
|
+
},
|
|
445
|
+
"retentionDays": {
|
|
466
446
|
"type": [
|
|
467
|
-
"
|
|
447
|
+
"number",
|
|
468
448
|
"null"
|
|
469
449
|
],
|
|
470
|
-
"description": "
|
|
450
|
+
"description": "How many days of its logs the app's team's plan keeps, null for no limit (and when missing)."
|
|
471
451
|
},
|
|
472
|
-
"
|
|
452
|
+
"logsCappedUntil": {
|
|
473
453
|
"type": [
|
|
474
454
|
"string",
|
|
475
455
|
"null"
|
|
476
|
-
]
|
|
456
|
+
],
|
|
457
|
+
"description": "While the team has sent its plan's monthly logs, when every level is taken again (the next UTC month); else null. Until then only ERROR and FATAL are taken (monthlyLogsCap)."
|
|
477
458
|
},
|
|
478
|
-
"
|
|
459
|
+
"logsStoppedUntil": {
|
|
479
460
|
"type": [
|
|
480
461
|
"string",
|
|
481
462
|
"null"
|
|
482
|
-
]
|
|
463
|
+
],
|
|
464
|
+
"description": "While the team is at its hard stop (twice its plan's monthly logs, monthlyLogsCap), when any log is taken again (the next UTC month); else null. Set only alongside logsCappedUntil."
|
|
465
|
+
},
|
|
466
|
+
"apiKey": {
|
|
467
|
+
"type": "string"
|
|
483
468
|
}
|
|
484
469
|
},
|
|
470
|
+
"additionalProperties": false,
|
|
485
471
|
"required": [
|
|
486
|
-
"id",
|
|
487
472
|
"createdAt",
|
|
488
|
-
"
|
|
489
|
-
"
|
|
490
|
-
"
|
|
491
|
-
"
|
|
473
|
+
"encryptedKey",
|
|
474
|
+
"id",
|
|
475
|
+
"name",
|
|
476
|
+
"updatedAt"
|
|
492
477
|
],
|
|
493
|
-
"
|
|
494
|
-
"description": "Membership of a user in a team."
|
|
478
|
+
"description": "App creation response. Initial wrapped encryption key may optionally be returned."
|
|
495
479
|
},
|
|
496
|
-
"
|
|
480
|
+
"ApiKeyRecord": {
|
|
497
481
|
"type": "object",
|
|
498
482
|
"properties": {
|
|
499
|
-
"
|
|
483
|
+
"id": {
|
|
500
484
|
"type": "string"
|
|
501
485
|
},
|
|
502
|
-
"
|
|
503
|
-
"type":
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
486
|
+
"createdAt": {
|
|
487
|
+
"type": "string"
|
|
488
|
+
},
|
|
489
|
+
"updatedAt": {
|
|
490
|
+
"type": "string"
|
|
491
|
+
},
|
|
492
|
+
"appId": {
|
|
493
|
+
"type": "string"
|
|
494
|
+
},
|
|
495
|
+
"name": {
|
|
496
|
+
"type": "string"
|
|
507
497
|
}
|
|
508
498
|
},
|
|
509
499
|
"required": [
|
|
510
|
-
"
|
|
511
|
-
"
|
|
500
|
+
"id",
|
|
501
|
+
"createdAt",
|
|
502
|
+
"updatedAt",
|
|
503
|
+
"appId"
|
|
512
504
|
],
|
|
513
505
|
"additionalProperties": false,
|
|
514
|
-
"description": "
|
|
506
|
+
"description": "Machine authentication credential."
|
|
515
507
|
},
|
|
516
|
-
"
|
|
508
|
+
"GuestRecord": {
|
|
517
509
|
"type": "object",
|
|
518
510
|
"properties": {
|
|
519
|
-
"
|
|
520
|
-
"type": "string"
|
|
521
|
-
},
|
|
522
|
-
"limit": {
|
|
523
|
-
"type": "number"
|
|
524
|
-
},
|
|
525
|
-
"cursor": {
|
|
526
|
-
"type": "string"
|
|
527
|
-
}
|
|
528
|
-
},
|
|
529
|
-
"additionalProperties": false,
|
|
530
|
-
"description": "Filter params for GET /teams."
|
|
531
|
-
},
|
|
532
|
-
"AppEncryptedKey": {
|
|
533
|
-
"type": "object",
|
|
534
|
-
"properties": {
|
|
535
|
-
"userId": {
|
|
536
|
-
"type": "string"
|
|
537
|
-
},
|
|
538
|
-
"encryptedKey": {
|
|
539
|
-
"type": "string"
|
|
540
|
-
},
|
|
541
|
-
"keyVersion": {
|
|
542
|
-
"type": "number"
|
|
543
|
-
}
|
|
544
|
-
},
|
|
545
|
-
"required": [
|
|
546
|
-
"userId",
|
|
547
|
-
"encryptedKey",
|
|
548
|
-
"keyVersion"
|
|
549
|
-
],
|
|
550
|
-
"additionalProperties": false,
|
|
551
|
-
"description": "Wrapped application encryption key for a specific user."
|
|
552
|
-
},
|
|
553
|
-
"AppTeamAccess": {
|
|
554
|
-
"type": "string",
|
|
555
|
-
"enum": [
|
|
556
|
-
"everyone",
|
|
557
|
-
"owner"
|
|
558
|
-
],
|
|
559
|
-
"description": "Who on an app's team can read it: everyone on the team, or only its owner. Its guests read it either way."
|
|
560
|
-
},
|
|
561
|
-
"AppRecord": {
|
|
562
|
-
"type": "object",
|
|
563
|
-
"properties": {
|
|
564
|
-
"id": {
|
|
565
|
-
"type": "string"
|
|
566
|
-
},
|
|
567
|
-
"createdAt": {
|
|
568
|
-
"type": "string"
|
|
569
|
-
},
|
|
570
|
-
"updatedAt": {
|
|
571
|
-
"type": "string"
|
|
572
|
-
},
|
|
573
|
-
"name": {
|
|
574
|
-
"type": "string"
|
|
575
|
-
},
|
|
576
|
-
"color": {
|
|
577
|
-
"type": "string"
|
|
578
|
-
},
|
|
579
|
-
"imageUrl": {
|
|
580
|
-
"type": "string"
|
|
581
|
-
},
|
|
582
|
-
"teamId": {
|
|
583
|
-
"type": "string"
|
|
584
|
-
},
|
|
585
|
-
"encryptedKey": {
|
|
586
|
-
"type": [
|
|
587
|
-
"string",
|
|
588
|
-
"null"
|
|
589
|
-
]
|
|
590
|
-
},
|
|
591
|
-
"teamAccess": {
|
|
592
|
-
"$ref": "#/definitions/AppTeamAccess",
|
|
593
|
-
"description": "Missing means 'everyone'."
|
|
594
|
-
},
|
|
595
|
-
"retentionDays": {
|
|
596
|
-
"type": [
|
|
597
|
-
"number",
|
|
598
|
-
"null"
|
|
599
|
-
],
|
|
600
|
-
"description": "How many days of its logs the app's team's plan keeps, null for no limit (and when missing)."
|
|
601
|
-
},
|
|
602
|
-
"logsCappedUntil": {
|
|
603
|
-
"type": [
|
|
604
|
-
"string",
|
|
605
|
-
"null"
|
|
606
|
-
],
|
|
607
|
-
"description": "While the team has sent its plan's monthly logs, when new ones are taken again (the next UTC month); else null."
|
|
608
|
-
}
|
|
609
|
-
},
|
|
610
|
-
"required": [
|
|
611
|
-
"id",
|
|
612
|
-
"createdAt",
|
|
613
|
-
"updatedAt",
|
|
614
|
-
"name",
|
|
615
|
-
"encryptedKey"
|
|
616
|
-
],
|
|
617
|
-
"additionalProperties": false,
|
|
618
|
-
"description": "API response shape for a listed or fetched app. encryptedKey is the requesting user's wrapped copy of the app key, or null if none exists. The optional fields are missing from an API deployed before them, which clients read as the default."
|
|
619
|
-
},
|
|
620
|
-
"AppCreatedRecord": {
|
|
621
|
-
"type": "object",
|
|
622
|
-
"properties": {
|
|
623
|
-
"id": {
|
|
624
|
-
"type": "string"
|
|
625
|
-
},
|
|
626
|
-
"createdAt": {
|
|
627
|
-
"type": "string"
|
|
628
|
-
},
|
|
629
|
-
"updatedAt": {
|
|
630
|
-
"type": "string"
|
|
631
|
-
},
|
|
632
|
-
"name": {
|
|
633
|
-
"type": "string"
|
|
634
|
-
},
|
|
635
|
-
"color": {
|
|
636
|
-
"type": "string"
|
|
637
|
-
},
|
|
638
|
-
"imageUrl": {
|
|
639
|
-
"type": "string"
|
|
640
|
-
},
|
|
641
|
-
"teamId": {
|
|
642
|
-
"type": "string"
|
|
643
|
-
},
|
|
644
|
-
"encryptedKey": {
|
|
645
|
-
"type": [
|
|
646
|
-
"string",
|
|
647
|
-
"null"
|
|
648
|
-
]
|
|
649
|
-
},
|
|
650
|
-
"teamAccess": {
|
|
651
|
-
"$ref": "#/definitions/AppTeamAccess",
|
|
652
|
-
"description": "Missing means 'everyone'."
|
|
653
|
-
},
|
|
654
|
-
"retentionDays": {
|
|
655
|
-
"type": [
|
|
656
|
-
"number",
|
|
657
|
-
"null"
|
|
658
|
-
],
|
|
659
|
-
"description": "How many days of its logs the app's team's plan keeps, null for no limit (and when missing)."
|
|
660
|
-
},
|
|
661
|
-
"logsCappedUntil": {
|
|
662
|
-
"type": [
|
|
663
|
-
"string",
|
|
664
|
-
"null"
|
|
665
|
-
],
|
|
666
|
-
"description": "While the team has sent its plan's monthly logs, when new ones are taken again (the next UTC month); else null."
|
|
667
|
-
},
|
|
668
|
-
"apiKey": {
|
|
669
|
-
"type": "string"
|
|
670
|
-
}
|
|
671
|
-
},
|
|
672
|
-
"additionalProperties": false,
|
|
673
|
-
"required": [
|
|
674
|
-
"createdAt",
|
|
675
|
-
"encryptedKey",
|
|
676
|
-
"id",
|
|
677
|
-
"name",
|
|
678
|
-
"updatedAt"
|
|
679
|
-
],
|
|
680
|
-
"description": "App creation response. Initial wrapped encryption key may optionally be returned."
|
|
681
|
-
},
|
|
682
|
-
"ApiKeyRecord": {
|
|
683
|
-
"type": "object",
|
|
684
|
-
"properties": {
|
|
685
|
-
"id": {
|
|
686
|
-
"type": "string"
|
|
687
|
-
},
|
|
688
|
-
"createdAt": {
|
|
689
|
-
"type": "string"
|
|
690
|
-
},
|
|
691
|
-
"updatedAt": {
|
|
692
|
-
"type": "string"
|
|
693
|
-
},
|
|
694
|
-
"appId": {
|
|
695
|
-
"type": "string"
|
|
696
|
-
},
|
|
697
|
-
"name": {
|
|
698
|
-
"type": "string"
|
|
699
|
-
}
|
|
700
|
-
},
|
|
701
|
-
"required": [
|
|
702
|
-
"id",
|
|
703
|
-
"createdAt",
|
|
704
|
-
"updatedAt",
|
|
705
|
-
"appId"
|
|
706
|
-
],
|
|
707
|
-
"additionalProperties": false,
|
|
708
|
-
"description": "Machine authentication credential."
|
|
709
|
-
},
|
|
710
|
-
"GuestRecord": {
|
|
711
|
-
"type": "object",
|
|
712
|
-
"properties": {
|
|
713
|
-
"id": {
|
|
511
|
+
"id": {
|
|
714
512
|
"type": "string"
|
|
715
513
|
},
|
|
716
514
|
"createdAt": {
|
|
@@ -840,173 +638,225 @@
|
|
|
840
638
|
"additionalProperties": false,
|
|
841
639
|
"description": "Filter params for GET /apps."
|
|
842
640
|
},
|
|
843
|
-
"
|
|
641
|
+
"DeviceLinkStatus": {
|
|
642
|
+
"type": "string",
|
|
643
|
+
"enum": [
|
|
644
|
+
"pending",
|
|
645
|
+
"approved",
|
|
646
|
+
"denied",
|
|
647
|
+
"failed"
|
|
648
|
+
],
|
|
649
|
+
"description": "A device link request: a new device asking for the account key from a device that has it. `failed` is a code that didn't match, which ends the request."
|
|
650
|
+
},
|
|
651
|
+
"DeviceLinkPlatform": {
|
|
652
|
+
"type": "string",
|
|
653
|
+
"enum": [
|
|
654
|
+
"ios",
|
|
655
|
+
"android",
|
|
656
|
+
"web",
|
|
657
|
+
"desktop",
|
|
658
|
+
"cli"
|
|
659
|
+
],
|
|
660
|
+
"description": "What a request comes from, so the device answering it can say so and offer a QR code only to a phone's camera."
|
|
661
|
+
},
|
|
662
|
+
"DeviceLinkCreateBody": {
|
|
844
663
|
"type": "object",
|
|
845
664
|
"properties": {
|
|
846
|
-
"
|
|
665
|
+
"deviceName": {
|
|
847
666
|
"type": "string"
|
|
848
667
|
},
|
|
849
|
-
"
|
|
850
|
-
"
|
|
668
|
+
"platform": {
|
|
669
|
+
"$ref": "#/definitions/DeviceLinkPlatform"
|
|
851
670
|
},
|
|
852
|
-
"
|
|
853
|
-
"type": "string"
|
|
671
|
+
"publicKey": {
|
|
672
|
+
"type": "string",
|
|
673
|
+
"description": "The public half of the new device's one-off X25519 keypair, which the account key is wrapped to."
|
|
854
674
|
},
|
|
855
|
-
"
|
|
675
|
+
"deviceId": {
|
|
676
|
+
"type": "string",
|
|
677
|
+
"description": "The new device's push device id, so the push asking the account's devices to link it skips it."
|
|
678
|
+
}
|
|
679
|
+
},
|
|
680
|
+
"required": [
|
|
681
|
+
"deviceName",
|
|
682
|
+
"platform",
|
|
683
|
+
"publicKey"
|
|
684
|
+
],
|
|
685
|
+
"additionalProperties": false,
|
|
686
|
+
"description": "Body of POST /device-links."
|
|
687
|
+
},
|
|
688
|
+
"DeviceLinkCreatedRecord": {
|
|
689
|
+
"type": "object",
|
|
690
|
+
"properties": {
|
|
691
|
+
"id": {
|
|
856
692
|
"type": "string"
|
|
857
693
|
},
|
|
858
|
-
"
|
|
694
|
+
"expiresAt": {
|
|
859
695
|
"type": "string"
|
|
860
696
|
}
|
|
861
697
|
},
|
|
862
698
|
"required": [
|
|
863
699
|
"id",
|
|
864
|
-
"
|
|
865
|
-
"updatedAt",
|
|
866
|
-
"logId",
|
|
867
|
-
"userId"
|
|
700
|
+
"expiresAt"
|
|
868
701
|
],
|
|
869
|
-
"additionalProperties": false
|
|
702
|
+
"additionalProperties": false,
|
|
703
|
+
"description": "Response from POST /device-links."
|
|
870
704
|
},
|
|
871
|
-
"
|
|
705
|
+
"DeviceLinkApproveBody": {
|
|
872
706
|
"type": "object",
|
|
873
707
|
"properties": {
|
|
874
|
-
"
|
|
708
|
+
"encryptedKey": {
|
|
875
709
|
"type": "string"
|
|
876
710
|
},
|
|
877
|
-
"
|
|
878
|
-
"type": "string"
|
|
879
|
-
},
|
|
880
|
-
"limit": {
|
|
881
|
-
"type": "number"
|
|
882
|
-
},
|
|
883
|
-
"cursor": {
|
|
711
|
+
"deliveryTag": {
|
|
884
712
|
"type": "string"
|
|
885
713
|
}
|
|
886
714
|
},
|
|
887
|
-
"
|
|
715
|
+
"required": [
|
|
716
|
+
"encryptedKey",
|
|
717
|
+
"deliveryTag"
|
|
718
|
+
],
|
|
719
|
+
"additionalProperties": false,
|
|
720
|
+
"description": "Body of POST /device-links/:id/approve: the account key wrapped to the new device, and a tag over it made from the code's secret, which the new device checks before storing the key, so the server can't hand it a key of its own."
|
|
888
721
|
},
|
|
889
|
-
"
|
|
722
|
+
"DeviceLinkRecord": {
|
|
890
723
|
"type": "object",
|
|
891
724
|
"properties": {
|
|
892
|
-
"
|
|
893
|
-
"type": "string"
|
|
894
|
-
},
|
|
895
|
-
"method": {
|
|
725
|
+
"id": {
|
|
896
726
|
"type": "string"
|
|
897
727
|
},
|
|
898
|
-
"
|
|
899
|
-
"
|
|
900
|
-
},
|
|
901
|
-
"column": {
|
|
902
|
-
"type": "number"
|
|
728
|
+
"status": {
|
|
729
|
+
"$ref": "#/definitions/DeviceLinkStatus"
|
|
903
730
|
},
|
|
904
|
-
"
|
|
731
|
+
"encryptedKey": {
|
|
905
732
|
"type": "string"
|
|
906
|
-
}
|
|
907
|
-
|
|
908
|
-
"additionalProperties": {},
|
|
909
|
-
"description": "Structured log context content."
|
|
910
|
-
},
|
|
911
|
-
"LogEncrypted": {
|
|
912
|
-
"type": "object",
|
|
913
|
-
"properties": {
|
|
914
|
-
"nonce": {
|
|
733
|
+
},
|
|
734
|
+
"deliveryTag": {
|
|
915
735
|
"type": "string"
|
|
916
736
|
},
|
|
917
|
-
"
|
|
737
|
+
"expiresAt": {
|
|
918
738
|
"type": "string"
|
|
919
739
|
},
|
|
920
|
-
"
|
|
921
|
-
"type":
|
|
740
|
+
"sid": {
|
|
741
|
+
"type": [
|
|
742
|
+
"string",
|
|
743
|
+
"null"
|
|
744
|
+
]
|
|
745
|
+
},
|
|
746
|
+
"holderMessage": {
|
|
747
|
+
"type": [
|
|
748
|
+
"string",
|
|
749
|
+
"null"
|
|
750
|
+
]
|
|
751
|
+
},
|
|
752
|
+
"answeredAt": {
|
|
753
|
+
"type": [
|
|
754
|
+
"string",
|
|
755
|
+
"null"
|
|
756
|
+
]
|
|
922
757
|
}
|
|
923
758
|
},
|
|
924
759
|
"required": [
|
|
925
|
-
"
|
|
926
|
-
"
|
|
927
|
-
"
|
|
760
|
+
"id",
|
|
761
|
+
"status",
|
|
762
|
+
"expiresAt"
|
|
928
763
|
],
|
|
929
764
|
"additionalProperties": false,
|
|
930
|
-
"description": "
|
|
765
|
+
"description": "Response from GET /device-links/:id, as the new device reads it. encryptedKey and deliveryTag are present only when status is 'approved'. sid and holderMessage are set once a device holding the account key shows the request's code, and answeredAt once the new device has answered it."
|
|
931
766
|
},
|
|
932
|
-
"
|
|
767
|
+
"PendingDeviceLink": {
|
|
933
768
|
"type": "object",
|
|
934
769
|
"properties": {
|
|
935
|
-
"
|
|
936
|
-
"$ref": "#/definitions/LogLevel"
|
|
937
|
-
},
|
|
938
|
-
"message": {
|
|
770
|
+
"id": {
|
|
939
771
|
"type": "string"
|
|
940
772
|
},
|
|
941
|
-
"
|
|
773
|
+
"deviceName": {
|
|
942
774
|
"type": "string"
|
|
943
775
|
},
|
|
944
|
-
"
|
|
945
|
-
"
|
|
776
|
+
"platform": {
|
|
777
|
+
"$ref": "#/definitions/DeviceLinkPlatform"
|
|
946
778
|
},
|
|
947
|
-
"
|
|
948
|
-
"
|
|
779
|
+
"publicKey": {
|
|
780
|
+
"type": "string",
|
|
781
|
+
"description": "The new device's one-off public key, which an answer's tag has to cover before anything is wrapped to it."
|
|
949
782
|
},
|
|
950
|
-
"
|
|
951
|
-
"type":
|
|
952
|
-
|
|
783
|
+
"sid": {
|
|
784
|
+
"type": [
|
|
785
|
+
"string",
|
|
786
|
+
"null"
|
|
787
|
+
]
|
|
788
|
+
},
|
|
789
|
+
"holderMessage": {
|
|
790
|
+
"type": [
|
|
791
|
+
"string",
|
|
792
|
+
"null"
|
|
793
|
+
]
|
|
794
|
+
},
|
|
795
|
+
"holderState": {
|
|
796
|
+
"type": [
|
|
797
|
+
"string",
|
|
798
|
+
"null"
|
|
799
|
+
]
|
|
800
|
+
},
|
|
801
|
+
"claimantMessage": {
|
|
802
|
+
"type": [
|
|
803
|
+
"string",
|
|
804
|
+
"null"
|
|
805
|
+
]
|
|
806
|
+
},
|
|
807
|
+
"tag": {
|
|
808
|
+
"type": [
|
|
809
|
+
"string",
|
|
810
|
+
"null"
|
|
811
|
+
]
|
|
812
|
+
},
|
|
813
|
+
"answeredAt": {
|
|
814
|
+
"type": [
|
|
815
|
+
"string",
|
|
816
|
+
"null"
|
|
817
|
+
]
|
|
818
|
+
},
|
|
819
|
+
"expiresAt": {
|
|
820
|
+
"type": "string"
|
|
821
|
+
},
|
|
822
|
+
"createdAt": {
|
|
823
|
+
"type": "string"
|
|
953
824
|
}
|
|
954
825
|
},
|
|
955
826
|
"required": [
|
|
956
|
-
"
|
|
957
|
-
"
|
|
827
|
+
"id",
|
|
828
|
+
"deviceName",
|
|
829
|
+
"platform",
|
|
830
|
+
"publicKey",
|
|
831
|
+
"sid",
|
|
832
|
+
"holderMessage",
|
|
833
|
+
"holderState",
|
|
834
|
+
"claimantMessage",
|
|
835
|
+
"tag",
|
|
836
|
+
"answeredAt",
|
|
837
|
+
"expiresAt",
|
|
838
|
+
"createdAt"
|
|
958
839
|
],
|
|
959
840
|
"additionalProperties": false,
|
|
960
|
-
"description": "
|
|
841
|
+
"description": "A request waiting on the caller's account key (GET /device-links/pending), as a device holding it reads it: enough to show its code, and to finish it once answered. The messages are the same password-authenticated exchange as a key check's, so the server can't read or test codes against them. holderState is the code's side of the exchange, sealed under the account key, so any of the account's devices can show the same code or finish the request."
|
|
961
842
|
},
|
|
962
|
-
"
|
|
843
|
+
"ApiErrorBody": {
|
|
963
844
|
"type": "object",
|
|
964
845
|
"properties": {
|
|
965
|
-
"
|
|
966
|
-
"type": "string"
|
|
967
|
-
},
|
|
968
|
-
"traceId": {
|
|
846
|
+
"message": {
|
|
969
847
|
"type": "string"
|
|
970
848
|
},
|
|
971
|
-
"
|
|
972
|
-
"$ref": "#/definitions/
|
|
973
|
-
},
|
|
974
|
-
"metadata": {
|
|
975
|
-
"type": "object",
|
|
976
|
-
"additionalProperties": {}
|
|
977
|
-
}
|
|
978
|
-
},
|
|
979
|
-
"additionalProperties": {},
|
|
980
|
-
"description": "What a plugin's log call takes beside its message (Lumber-Node's second argument). requestId and traceId become the payload's own fields, context is merged over the plugin's automatic context, and any other key goes into metadata, where an explicit metadata key wins. A context or metadata that isn't an object is kept as an ordinary metadata key."
|
|
981
|
-
},
|
|
982
|
-
"LogIngestBody": {
|
|
983
|
-
"type": "object",
|
|
984
|
-
"properties": {
|
|
985
|
-
"level": {
|
|
986
|
-
"$ref": "#/definitions/LogLevel"
|
|
987
|
-
},
|
|
988
|
-
"encrypted": {
|
|
989
|
-
"$ref": "#/definitions/LogEncrypted"
|
|
849
|
+
"code": {
|
|
850
|
+
"$ref": "#/definitions/ApiErrorCode"
|
|
990
851
|
}
|
|
991
852
|
},
|
|
992
853
|
"required": [
|
|
993
|
-
"
|
|
994
|
-
"encrypted"
|
|
854
|
+
"message"
|
|
995
855
|
],
|
|
996
856
|
"additionalProperties": false,
|
|
997
|
-
"description": "
|
|
998
|
-
},
|
|
999
|
-
"LogDeliveryOutcome": {
|
|
1000
|
-
"type": "string",
|
|
1001
|
-
"enum": [
|
|
1002
|
-
"sent",
|
|
1003
|
-
"retry",
|
|
1004
|
-
"drop",
|
|
1005
|
-
"pause"
|
|
1006
|
-
],
|
|
1007
|
-
"description": "What a plugin does with a log after POST /logs answers (see logDelivery)."
|
|
857
|
+
"description": "The body of an API error response. `code` is there where the status alone doesn't say what went wrong."
|
|
1008
858
|
},
|
|
1009
|
-
"
|
|
859
|
+
"FlagRecord": {
|
|
1010
860
|
"type": "object",
|
|
1011
861
|
"properties": {
|
|
1012
862
|
"id": {
|
|
@@ -1018,51 +868,31 @@
|
|
|
1018
868
|
"updatedAt": {
|
|
1019
869
|
"type": "string"
|
|
1020
870
|
},
|
|
1021
|
-
"
|
|
871
|
+
"logId": {
|
|
1022
872
|
"type": "string"
|
|
1023
873
|
},
|
|
1024
|
-
"
|
|
1025
|
-
"
|
|
1026
|
-
},
|
|
1027
|
-
"encrypted": {
|
|
1028
|
-
"$ref": "#/definitions/LogEncrypted"
|
|
874
|
+
"userId": {
|
|
875
|
+
"type": "string"
|
|
1029
876
|
}
|
|
1030
877
|
},
|
|
1031
878
|
"required": [
|
|
1032
879
|
"id",
|
|
1033
880
|
"createdAt",
|
|
1034
881
|
"updatedAt",
|
|
1035
|
-
"
|
|
1036
|
-
"
|
|
1037
|
-
"encrypted"
|
|
882
|
+
"logId",
|
|
883
|
+
"userId"
|
|
1038
884
|
],
|
|
1039
|
-
"additionalProperties": false
|
|
1040
|
-
"description": "API response shape for a stored log. level is plaintext for server-side notification routing; all content is inside encrypted."
|
|
885
|
+
"additionalProperties": false
|
|
1041
886
|
},
|
|
1042
|
-
"
|
|
887
|
+
"FlagsQuery": {
|
|
1043
888
|
"type": "object",
|
|
1044
889
|
"properties": {
|
|
1045
|
-
"appIds": {
|
|
1046
|
-
"type": "array",
|
|
1047
|
-
"items": {
|
|
1048
|
-
"type": "string"
|
|
1049
|
-
}
|
|
1050
|
-
},
|
|
1051
|
-
"levels": {
|
|
1052
|
-
"type": "array",
|
|
1053
|
-
"items": {
|
|
1054
|
-
"type": "number"
|
|
1055
|
-
}
|
|
1056
|
-
},
|
|
1057
890
|
"from": {
|
|
1058
891
|
"type": "string"
|
|
1059
892
|
},
|
|
1060
893
|
"to": {
|
|
1061
894
|
"type": "string"
|
|
1062
895
|
},
|
|
1063
|
-
"sort": {
|
|
1064
|
-
"type": "string"
|
|
1065
|
-
},
|
|
1066
896
|
"limit": {
|
|
1067
897
|
"type": "number"
|
|
1068
898
|
},
|
|
@@ -1070,548 +900,568 @@
|
|
|
1070
900
|
"type": "string"
|
|
1071
901
|
}
|
|
1072
902
|
},
|
|
1073
|
-
"additionalProperties": false
|
|
1074
|
-
"description": "Sync-protocol params for GET /logs."
|
|
903
|
+
"additionalProperties": false
|
|
1075
904
|
},
|
|
1076
|
-
"
|
|
905
|
+
"InvitationRecord": {
|
|
1077
906
|
"type": "object",
|
|
1078
907
|
"properties": {
|
|
1079
|
-
"
|
|
908
|
+
"id": {
|
|
1080
909
|
"type": "string"
|
|
1081
910
|
},
|
|
1082
|
-
"
|
|
911
|
+
"teamId": {
|
|
912
|
+
"type": [
|
|
913
|
+
"string",
|
|
914
|
+
"null"
|
|
915
|
+
]
|
|
916
|
+
},
|
|
917
|
+
"appId": {
|
|
918
|
+
"type": [
|
|
919
|
+
"string",
|
|
920
|
+
"null"
|
|
921
|
+
]
|
|
922
|
+
},
|
|
923
|
+
"email": {
|
|
1083
924
|
"type": "string"
|
|
1084
925
|
},
|
|
1085
|
-
"
|
|
1086
|
-
"type": "
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
926
|
+
"role": {
|
|
927
|
+
"type": "string"
|
|
928
|
+
},
|
|
929
|
+
"sentAt": {
|
|
930
|
+
"type": [
|
|
931
|
+
"string",
|
|
932
|
+
"null"
|
|
933
|
+
],
|
|
934
|
+
"description": "Null when its email couldn't be sent."
|
|
935
|
+
},
|
|
936
|
+
"expiresAt": {
|
|
937
|
+
"type": "string"
|
|
938
|
+
},
|
|
939
|
+
"createdAt": {
|
|
940
|
+
"type": "string"
|
|
941
|
+
}
|
|
942
|
+
},
|
|
943
|
+
"required": [
|
|
944
|
+
"id",
|
|
945
|
+
"teamId",
|
|
946
|
+
"appId",
|
|
947
|
+
"email",
|
|
948
|
+
"role",
|
|
949
|
+
"sentAt",
|
|
950
|
+
"expiresAt",
|
|
951
|
+
"createdAt"
|
|
1093
952
|
],
|
|
1094
953
|
"additionalProperties": false,
|
|
1095
|
-
"description": "
|
|
954
|
+
"description": "An invitation to an address with no account yet: to a team (teamId, as a member or admin) or to one app as its guest (appId). The address joins when it signs up and confirms itself. A live one (unexpired) holds its seat."
|
|
1096
955
|
},
|
|
1097
|
-
"
|
|
956
|
+
"PendingAppKey": {
|
|
1098
957
|
"type": "object",
|
|
1099
958
|
"properties": {
|
|
1100
|
-
"
|
|
959
|
+
"appId": {
|
|
1101
960
|
"type": "string"
|
|
1102
961
|
},
|
|
1103
|
-
"
|
|
962
|
+
"userId": {
|
|
1104
963
|
"type": "string"
|
|
1105
964
|
},
|
|
1106
|
-
"
|
|
965
|
+
"publicKey": {
|
|
1107
966
|
"type": "string"
|
|
1108
967
|
},
|
|
1109
|
-
"
|
|
968
|
+
"keyChangedAt": {
|
|
969
|
+
"type": [
|
|
970
|
+
"string",
|
|
971
|
+
"null"
|
|
972
|
+
]
|
|
973
|
+
}
|
|
974
|
+
},
|
|
975
|
+
"required": [
|
|
976
|
+
"appId",
|
|
977
|
+
"userId",
|
|
978
|
+
"publicKey"
|
|
979
|
+
],
|
|
980
|
+
"additionalProperties": false,
|
|
981
|
+
"description": "Someone with access to an app who has no wrapped copy of its key yet (GET /apps/keys/pending), with when they last replaced their account key: null if never, missing from an API before key pins."
|
|
982
|
+
},
|
|
983
|
+
"KeyHolder": {
|
|
984
|
+
"type": "object",
|
|
985
|
+
"properties": {
|
|
986
|
+
"userId": {
|
|
1110
987
|
"type": "string"
|
|
1111
988
|
},
|
|
989
|
+
"publicKey": {
|
|
990
|
+
"type": "string"
|
|
991
|
+
}
|
|
992
|
+
},
|
|
993
|
+
"required": [
|
|
994
|
+
"userId",
|
|
995
|
+
"publicKey"
|
|
996
|
+
],
|
|
997
|
+
"additionalProperties": false,
|
|
998
|
+
"description": "Someone who reads one of the caller's apps and already has a wrapped copy of its key (GET /apps/keys/holders)."
|
|
999
|
+
},
|
|
1000
|
+
"AppKeyUpsertBody": {
|
|
1001
|
+
"type": "object",
|
|
1002
|
+
"properties": {
|
|
1003
|
+
"encryptedKey": {
|
|
1004
|
+
"type": "string"
|
|
1005
|
+
}
|
|
1006
|
+
},
|
|
1007
|
+
"required": [
|
|
1008
|
+
"encryptedKey"
|
|
1009
|
+
],
|
|
1010
|
+
"additionalProperties": false,
|
|
1011
|
+
"description": "Body of PUT /apps/:id/keys/:userId: the app key wrapped to that user's account key."
|
|
1012
|
+
},
|
|
1013
|
+
"KeyPin": {
|
|
1014
|
+
"type": "object",
|
|
1015
|
+
"properties": {
|
|
1112
1016
|
"userId": {
|
|
1113
1017
|
"type": "string"
|
|
1114
1018
|
},
|
|
1115
|
-
"
|
|
1019
|
+
"publicKey": {
|
|
1116
1020
|
"type": "string"
|
|
1117
1021
|
},
|
|
1118
|
-
"
|
|
1119
|
-
"
|
|
1022
|
+
"mac": {
|
|
1023
|
+
"type": "string"
|
|
1120
1024
|
}
|
|
1121
1025
|
},
|
|
1122
1026
|
"required": [
|
|
1123
|
-
"id",
|
|
1124
|
-
"createdAt",
|
|
1125
|
-
"updatedAt",
|
|
1126
|
-
"appId",
|
|
1127
1027
|
"userId",
|
|
1128
|
-
"
|
|
1028
|
+
"publicKey",
|
|
1029
|
+
"mac"
|
|
1129
1030
|
],
|
|
1130
1031
|
"additionalProperties": false,
|
|
1131
|
-
"description": "
|
|
1032
|
+
"description": "An account key a user has accepted for someone they share apps with (GET /key-pins). `mac` is an HMAC by the user's own devices, under a key derived from their account key, over the user, the person and the key: the server can drop a pin but not forge or move one."
|
|
1132
1033
|
},
|
|
1133
|
-
"
|
|
1034
|
+
"KeyCheckResult": {
|
|
1035
|
+
"type": "string",
|
|
1036
|
+
"enum": [
|
|
1037
|
+
"confirmed",
|
|
1038
|
+
"failed",
|
|
1039
|
+
"cancelled"
|
|
1040
|
+
]
|
|
1041
|
+
},
|
|
1042
|
+
"HolderKeyCheck": {
|
|
1134
1043
|
"type": "object",
|
|
1135
1044
|
"properties": {
|
|
1136
|
-
"
|
|
1137
|
-
"type": "string"
|
|
1138
|
-
},
|
|
1139
|
-
"teamId": {
|
|
1045
|
+
"id": {
|
|
1140
1046
|
"type": "string"
|
|
1141
1047
|
},
|
|
1142
1048
|
"userId": {
|
|
1143
1049
|
"type": "string"
|
|
1144
1050
|
},
|
|
1145
|
-
"
|
|
1051
|
+
"sid": {
|
|
1146
1052
|
"type": "string"
|
|
1147
1053
|
},
|
|
1148
|
-
"
|
|
1054
|
+
"holderMessage": {
|
|
1149
1055
|
"type": "string"
|
|
1150
1056
|
},
|
|
1151
|
-
"
|
|
1152
|
-
"type": "string"
|
|
1057
|
+
"holderState": {
|
|
1058
|
+
"type": "string",
|
|
1059
|
+
"description": "The holder's half of the exchange, sealed under their account key."
|
|
1153
1060
|
},
|
|
1154
|
-
"
|
|
1155
|
-
"type":
|
|
1061
|
+
"claimantMessage": {
|
|
1062
|
+
"type": [
|
|
1063
|
+
"string",
|
|
1064
|
+
"null"
|
|
1065
|
+
]
|
|
1156
1066
|
},
|
|
1157
|
-
"
|
|
1158
|
-
"type":
|
|
1067
|
+
"publicKey": {
|
|
1068
|
+
"type": [
|
|
1069
|
+
"string",
|
|
1070
|
+
"null"
|
|
1071
|
+
]
|
|
1159
1072
|
},
|
|
1160
|
-
"
|
|
1073
|
+
"tag": {
|
|
1074
|
+
"type": [
|
|
1075
|
+
"string",
|
|
1076
|
+
"null"
|
|
1077
|
+
]
|
|
1078
|
+
},
|
|
1079
|
+
"answeredAt": {
|
|
1080
|
+
"type": [
|
|
1081
|
+
"string",
|
|
1082
|
+
"null"
|
|
1083
|
+
]
|
|
1084
|
+
},
|
|
1085
|
+
"result": {
|
|
1086
|
+
"anyOf": [
|
|
1087
|
+
{
|
|
1088
|
+
"$ref": "#/definitions/KeyCheckResult"
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
"type": "null"
|
|
1092
|
+
}
|
|
1093
|
+
]
|
|
1094
|
+
},
|
|
1095
|
+
"finishedAt": {
|
|
1096
|
+
"type": [
|
|
1097
|
+
"string",
|
|
1098
|
+
"null"
|
|
1099
|
+
]
|
|
1100
|
+
},
|
|
1101
|
+
"expiresAt": {
|
|
1102
|
+
"type": "string"
|
|
1103
|
+
},
|
|
1104
|
+
"createdAt": {
|
|
1161
1105
|
"type": "string"
|
|
1162
1106
|
}
|
|
1163
1107
|
},
|
|
1108
|
+
"required": [
|
|
1109
|
+
"id",
|
|
1110
|
+
"userId",
|
|
1111
|
+
"sid",
|
|
1112
|
+
"holderMessage",
|
|
1113
|
+
"holderState",
|
|
1114
|
+
"claimantMessage",
|
|
1115
|
+
"publicKey",
|
|
1116
|
+
"tag",
|
|
1117
|
+
"answeredAt",
|
|
1118
|
+
"result",
|
|
1119
|
+
"finishedAt",
|
|
1120
|
+
"expiresAt",
|
|
1121
|
+
"createdAt"
|
|
1122
|
+
],
|
|
1164
1123
|
"additionalProperties": false,
|
|
1165
|
-
"description": "
|
|
1124
|
+
"description": "A key check the caller started, as their devices read it (GET /key-checks/mine): enough to show the code again or finish the check. The messages are a password-authenticated exchange the server can't read or test codes against."
|
|
1166
1125
|
},
|
|
1167
|
-
"
|
|
1126
|
+
"ClaimantKeyCheck": {
|
|
1168
1127
|
"type": "object",
|
|
1169
1128
|
"properties": {
|
|
1170
1129
|
"id": {
|
|
1171
1130
|
"type": "string"
|
|
1172
1131
|
},
|
|
1173
|
-
"
|
|
1132
|
+
"holderId": {
|
|
1174
1133
|
"type": "string"
|
|
1175
1134
|
},
|
|
1176
|
-
"
|
|
1135
|
+
"holderName": {
|
|
1177
1136
|
"type": "string"
|
|
1178
1137
|
},
|
|
1179
|
-
"
|
|
1138
|
+
"sid": {
|
|
1180
1139
|
"type": "string"
|
|
1181
1140
|
},
|
|
1182
|
-
"
|
|
1141
|
+
"holderMessage": {
|
|
1183
1142
|
"type": "string"
|
|
1184
1143
|
},
|
|
1185
|
-
"
|
|
1144
|
+
"answeredAt": {
|
|
1145
|
+
"type": [
|
|
1146
|
+
"string",
|
|
1147
|
+
"null"
|
|
1148
|
+
]
|
|
1149
|
+
},
|
|
1150
|
+
"result": {
|
|
1151
|
+
"anyOf": [
|
|
1152
|
+
{
|
|
1153
|
+
"$ref": "#/definitions/KeyCheckResult"
|
|
1154
|
+
},
|
|
1155
|
+
{
|
|
1156
|
+
"type": "null"
|
|
1157
|
+
}
|
|
1158
|
+
]
|
|
1159
|
+
},
|
|
1160
|
+
"finishedAt": {
|
|
1161
|
+
"type": [
|
|
1162
|
+
"string",
|
|
1163
|
+
"null"
|
|
1164
|
+
]
|
|
1165
|
+
},
|
|
1166
|
+
"expiresAt": {
|
|
1186
1167
|
"type": "string"
|
|
1187
1168
|
},
|
|
1188
|
-
"
|
|
1169
|
+
"createdAt": {
|
|
1189
1170
|
"type": "string"
|
|
1190
1171
|
}
|
|
1191
1172
|
},
|
|
1192
1173
|
"required": [
|
|
1193
1174
|
"id",
|
|
1194
|
-
"
|
|
1195
|
-
"
|
|
1196
|
-
"
|
|
1175
|
+
"holderId",
|
|
1176
|
+
"holderName",
|
|
1177
|
+
"sid",
|
|
1178
|
+
"holderMessage",
|
|
1179
|
+
"answeredAt",
|
|
1180
|
+
"result",
|
|
1181
|
+
"finishedAt",
|
|
1182
|
+
"expiresAt",
|
|
1183
|
+
"createdAt"
|
|
1197
1184
|
],
|
|
1198
1185
|
"additionalProperties": false,
|
|
1199
|
-
"description": "
|
|
1186
|
+
"description": "A key check waiting on the caller's answer, or how a recent answer went (GET /key-checks/for-me)."
|
|
1200
1187
|
},
|
|
1201
|
-
"
|
|
1188
|
+
"LogContext": {
|
|
1202
1189
|
"type": "object",
|
|
1203
1190
|
"properties": {
|
|
1204
|
-
"
|
|
1205
|
-
"
|
|
1206
|
-
"type": "object",
|
|
1207
|
-
"properties": {
|
|
1208
|
-
"namedArgs": {
|
|
1209
|
-
"type": "object",
|
|
1210
|
-
"properties": {
|
|
1211
|
-
"log": {
|
|
1212
|
-
"type": "object",
|
|
1213
|
-
"additionalProperties": false,
|
|
1214
|
-
"properties": {
|
|
1215
|
-
"updatedAt": {
|
|
1216
|
-
"type": "string"
|
|
1217
|
-
},
|
|
1218
|
-
"id": {
|
|
1219
|
-
"type": "string"
|
|
1220
|
-
},
|
|
1221
|
-
"createdAt": {
|
|
1222
|
-
"type": "string"
|
|
1223
|
-
},
|
|
1224
|
-
"appId": {
|
|
1225
|
-
"type": "string"
|
|
1226
|
-
},
|
|
1227
|
-
"level": {
|
|
1228
|
-
"$ref": "#/definitions/LogLevel"
|
|
1229
|
-
},
|
|
1230
|
-
"encrypted": {
|
|
1231
|
-
"$ref": "#/definitions/LogEncrypted"
|
|
1232
|
-
}
|
|
1233
|
-
},
|
|
1234
|
-
"required": [
|
|
1235
|
-
"appId",
|
|
1236
|
-
"createdAt",
|
|
1237
|
-
"encrypted",
|
|
1238
|
-
"id",
|
|
1239
|
-
"level"
|
|
1240
|
-
]
|
|
1241
|
-
}
|
|
1242
|
-
},
|
|
1243
|
-
"required": [
|
|
1244
|
-
"log"
|
|
1245
|
-
],
|
|
1246
|
-
"additionalProperties": false
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1191
|
+
"code": {
|
|
1192
|
+
"type": "string"
|
|
1249
1193
|
},
|
|
1250
|
-
"
|
|
1251
|
-
"
|
|
1252
|
-
"type": "object",
|
|
1253
|
-
"properties": {
|
|
1254
|
-
"namedArgs": {
|
|
1255
|
-
"type": "object",
|
|
1256
|
-
"properties": {
|
|
1257
|
-
"flag": {
|
|
1258
|
-
"type": "object",
|
|
1259
|
-
"additionalProperties": false,
|
|
1260
|
-
"properties": {
|
|
1261
|
-
"updatedAt": {
|
|
1262
|
-
"type": "string"
|
|
1263
|
-
},
|
|
1264
|
-
"id": {
|
|
1265
|
-
"type": "string"
|
|
1266
|
-
},
|
|
1267
|
-
"createdAt": {
|
|
1268
|
-
"type": "string"
|
|
1269
|
-
},
|
|
1270
|
-
"logId": {
|
|
1271
|
-
"type": "string"
|
|
1272
|
-
},
|
|
1273
|
-
"userId": {
|
|
1274
|
-
"type": "string"
|
|
1275
|
-
}
|
|
1276
|
-
},
|
|
1277
|
-
"required": [
|
|
1278
|
-
"createdAt",
|
|
1279
|
-
"id",
|
|
1280
|
-
"logId",
|
|
1281
|
-
"userId"
|
|
1282
|
-
]
|
|
1283
|
-
}
|
|
1284
|
-
},
|
|
1285
|
-
"required": [
|
|
1286
|
-
"flag"
|
|
1287
|
-
],
|
|
1288
|
-
"additionalProperties": false
|
|
1289
|
-
}
|
|
1290
|
-
}
|
|
1194
|
+
"method": {
|
|
1195
|
+
"type": "string"
|
|
1291
1196
|
},
|
|
1292
|
-
"
|
|
1293
|
-
"
|
|
1294
|
-
"type": "object",
|
|
1295
|
-
"properties": {
|
|
1296
|
-
"namedArgs": {
|
|
1297
|
-
"type": "object",
|
|
1298
|
-
"properties": {
|
|
1299
|
-
"flag": {
|
|
1300
|
-
"type": "object",
|
|
1301
|
-
"properties": {
|
|
1302
|
-
"id": {
|
|
1303
|
-
"type": "string"
|
|
1304
|
-
}
|
|
1305
|
-
},
|
|
1306
|
-
"required": [
|
|
1307
|
-
"id"
|
|
1308
|
-
],
|
|
1309
|
-
"additionalProperties": false
|
|
1310
|
-
}
|
|
1311
|
-
},
|
|
1312
|
-
"required": [
|
|
1313
|
-
"flag"
|
|
1314
|
-
],
|
|
1315
|
-
"additionalProperties": false
|
|
1316
|
-
}
|
|
1317
|
-
}
|
|
1197
|
+
"line": {
|
|
1198
|
+
"type": "number"
|
|
1318
1199
|
},
|
|
1319
|
-
"
|
|
1320
|
-
"
|
|
1321
|
-
"type": "object",
|
|
1322
|
-
"properties": {
|
|
1323
|
-
"namedArgs": {
|
|
1324
|
-
"type": "object",
|
|
1325
|
-
"properties": {
|
|
1326
|
-
"note": {
|
|
1327
|
-
"$ref": "#/definitions/NoteRecord"
|
|
1328
|
-
}
|
|
1329
|
-
},
|
|
1330
|
-
"required": [
|
|
1331
|
-
"note"
|
|
1332
|
-
],
|
|
1333
|
-
"additionalProperties": false
|
|
1334
|
-
}
|
|
1335
|
-
}
|
|
1200
|
+
"column": {
|
|
1201
|
+
"type": "number"
|
|
1336
1202
|
},
|
|
1337
|
-
"note
|
|
1338
|
-
"
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
"note"
|
|
1350
|
-
],
|
|
1351
|
-
"additionalProperties": false
|
|
1352
|
-
}
|
|
1353
|
-
}
|
|
1203
|
+
"note": {
|
|
1204
|
+
"type": "string"
|
|
1205
|
+
}
|
|
1206
|
+
},
|
|
1207
|
+
"additionalProperties": {},
|
|
1208
|
+
"description": "Structured log context content."
|
|
1209
|
+
},
|
|
1210
|
+
"LogEncrypted": {
|
|
1211
|
+
"type": "object",
|
|
1212
|
+
"properties": {
|
|
1213
|
+
"nonce": {
|
|
1214
|
+
"type": "string"
|
|
1354
1215
|
},
|
|
1355
|
-
"
|
|
1356
|
-
"
|
|
1216
|
+
"payload": {
|
|
1217
|
+
"type": "string"
|
|
1218
|
+
},
|
|
1219
|
+
"keyVersion": {
|
|
1220
|
+
"type": "number"
|
|
1221
|
+
}
|
|
1222
|
+
},
|
|
1223
|
+
"required": [
|
|
1224
|
+
"nonce",
|
|
1225
|
+
"payload",
|
|
1226
|
+
"keyVersion"
|
|
1227
|
+
],
|
|
1228
|
+
"additionalProperties": false,
|
|
1229
|
+
"description": "Encrypted envelope stored on the server. payload = base64(authTag + ciphertext) nonce = base64(random IV) keyVersion enables future rotation support."
|
|
1230
|
+
},
|
|
1231
|
+
"LogPayload": {
|
|
1232
|
+
"type": "object",
|
|
1233
|
+
"properties": {
|
|
1234
|
+
"level": {
|
|
1235
|
+
"$ref": "#/definitions/LogLevel"
|
|
1236
|
+
},
|
|
1237
|
+
"message": {
|
|
1238
|
+
"type": "string"
|
|
1239
|
+
},
|
|
1240
|
+
"requestId": {
|
|
1241
|
+
"type": "string"
|
|
1242
|
+
},
|
|
1243
|
+
"traceId": {
|
|
1244
|
+
"type": "string"
|
|
1245
|
+
},
|
|
1246
|
+
"context": {
|
|
1247
|
+
"$ref": "#/definitions/LogContext"
|
|
1248
|
+
},
|
|
1249
|
+
"metadata": {
|
|
1357
1250
|
"type": "object",
|
|
1358
|
-
"
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
"id",
|
|
1374
|
-
"appId"
|
|
1375
|
-
],
|
|
1376
|
-
"additionalProperties": false
|
|
1377
|
-
}
|
|
1378
|
-
},
|
|
1379
|
-
"required": [
|
|
1380
|
-
"note"
|
|
1381
|
-
],
|
|
1382
|
-
"additionalProperties": false
|
|
1383
|
-
}
|
|
1384
|
-
}
|
|
1251
|
+
"additionalProperties": {}
|
|
1252
|
+
}
|
|
1253
|
+
},
|
|
1254
|
+
"required": [
|
|
1255
|
+
"level",
|
|
1256
|
+
"message"
|
|
1257
|
+
],
|
|
1258
|
+
"additionalProperties": false,
|
|
1259
|
+
"description": "Plaintext shape of log content: a plugin encrypts it into LogEncrypted, and the server never sees it."
|
|
1260
|
+
},
|
|
1261
|
+
"LogData": {
|
|
1262
|
+
"type": "object",
|
|
1263
|
+
"properties": {
|
|
1264
|
+
"requestId": {
|
|
1265
|
+
"type": "string"
|
|
1385
1266
|
},
|
|
1386
|
-
"
|
|
1387
|
-
"
|
|
1267
|
+
"traceId": {
|
|
1268
|
+
"type": "string"
|
|
1269
|
+
},
|
|
1270
|
+
"context": {
|
|
1271
|
+
"$ref": "#/definitions/LogContext"
|
|
1272
|
+
},
|
|
1273
|
+
"metadata": {
|
|
1388
1274
|
"type": "object",
|
|
1389
|
-
"
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1275
|
+
"additionalProperties": {}
|
|
1276
|
+
}
|
|
1277
|
+
},
|
|
1278
|
+
"additionalProperties": {},
|
|
1279
|
+
"description": "What a plugin's log call takes beside its message (Lumber-Node's second argument). requestId and traceId become the payload's own fields, context is merged over the plugin's automatic context, and any other key goes into metadata, where an explicit metadata key wins. A context or metadata that isn't an object is kept as an ordinary metadata key."
|
|
1280
|
+
},
|
|
1281
|
+
"LogIngestBody": {
|
|
1282
|
+
"type": "object",
|
|
1283
|
+
"properties": {
|
|
1284
|
+
"level": {
|
|
1285
|
+
"$ref": "#/definitions/LogLevel"
|
|
1286
|
+
},
|
|
1287
|
+
"encrypted": {
|
|
1288
|
+
"$ref": "#/definitions/LogEncrypted"
|
|
1289
|
+
}
|
|
1290
|
+
},
|
|
1291
|
+
"required": [
|
|
1292
|
+
"level",
|
|
1293
|
+
"encrypted"
|
|
1294
|
+
],
|
|
1295
|
+
"additionalProperties": false,
|
|
1296
|
+
"description": "POST /logs' body. The level stays plaintext for filtering and pushes; everything else is in `encrypted`."
|
|
1297
|
+
},
|
|
1298
|
+
"LogDeliveryOutcome": {
|
|
1299
|
+
"type": "string",
|
|
1300
|
+
"enum": [
|
|
1301
|
+
"sent",
|
|
1302
|
+
"retry",
|
|
1303
|
+
"drop",
|
|
1304
|
+
"pause"
|
|
1305
|
+
],
|
|
1306
|
+
"description": "What a plugin does with a log after POST /logs answers (see logDelivery)."
|
|
1307
|
+
},
|
|
1308
|
+
"LogRecord": {
|
|
1309
|
+
"type": "object",
|
|
1310
|
+
"properties": {
|
|
1311
|
+
"id": {
|
|
1312
|
+
"type": "string"
|
|
1313
|
+
},
|
|
1314
|
+
"createdAt": {
|
|
1315
|
+
"type": "string"
|
|
1316
|
+
},
|
|
1317
|
+
"updatedAt": {
|
|
1318
|
+
"type": "string"
|
|
1319
|
+
},
|
|
1320
|
+
"appId": {
|
|
1321
|
+
"type": "string"
|
|
1322
|
+
},
|
|
1323
|
+
"level": {
|
|
1324
|
+
"$ref": "#/definitions/LogLevel"
|
|
1325
|
+
},
|
|
1326
|
+
"encrypted": {
|
|
1327
|
+
"$ref": "#/definitions/LogEncrypted"
|
|
1328
|
+
}
|
|
1329
|
+
},
|
|
1330
|
+
"required": [
|
|
1331
|
+
"id",
|
|
1332
|
+
"createdAt",
|
|
1333
|
+
"updatedAt",
|
|
1334
|
+
"appId",
|
|
1335
|
+
"level",
|
|
1336
|
+
"encrypted"
|
|
1337
|
+
],
|
|
1338
|
+
"additionalProperties": false,
|
|
1339
|
+
"description": "API response shape for a stored log. level is plaintext for server-side notification routing; all content is inside encrypted."
|
|
1340
|
+
},
|
|
1341
|
+
"LogsQuery": {
|
|
1342
|
+
"type": "object",
|
|
1343
|
+
"properties": {
|
|
1344
|
+
"appIds": {
|
|
1345
|
+
"type": "array",
|
|
1346
|
+
"items": {
|
|
1347
|
+
"type": "string"
|
|
1402
1348
|
}
|
|
1403
1349
|
},
|
|
1404
|
-
"
|
|
1405
|
-
"
|
|
1406
|
-
"
|
|
1407
|
-
|
|
1408
|
-
"namedArgs": {
|
|
1409
|
-
"type": "object",
|
|
1410
|
-
"properties": {
|
|
1411
|
-
"app": {
|
|
1412
|
-
"$ref": "#/definitions/SocketAppPayload"
|
|
1413
|
-
}
|
|
1414
|
-
},
|
|
1415
|
-
"required": [
|
|
1416
|
-
"app"
|
|
1417
|
-
],
|
|
1418
|
-
"additionalProperties": false
|
|
1419
|
-
}
|
|
1350
|
+
"levels": {
|
|
1351
|
+
"type": "array",
|
|
1352
|
+
"items": {
|
|
1353
|
+
"type": "number"
|
|
1420
1354
|
}
|
|
1421
1355
|
},
|
|
1422
|
-
"
|
|
1423
|
-
"
|
|
1424
|
-
"type": "object",
|
|
1425
|
-
"properties": {
|
|
1426
|
-
"namedArgs": {
|
|
1427
|
-
"type": "object",
|
|
1428
|
-
"properties": {
|
|
1429
|
-
"app": {
|
|
1430
|
-
"type": "object",
|
|
1431
|
-
"properties": {
|
|
1432
|
-
"id": {
|
|
1433
|
-
"type": "string"
|
|
1434
|
-
}
|
|
1435
|
-
},
|
|
1436
|
-
"required": [
|
|
1437
|
-
"id"
|
|
1438
|
-
],
|
|
1439
|
-
"additionalProperties": false
|
|
1440
|
-
}
|
|
1441
|
-
},
|
|
1442
|
-
"required": [
|
|
1443
|
-
"app"
|
|
1444
|
-
],
|
|
1445
|
-
"additionalProperties": false
|
|
1446
|
-
}
|
|
1447
|
-
},
|
|
1448
|
-
"description": "Deleted, or kept to its team's owner and so gone for the rest of the team."
|
|
1356
|
+
"from": {
|
|
1357
|
+
"type": "string"
|
|
1449
1358
|
},
|
|
1450
|
-
"
|
|
1451
|
-
"
|
|
1452
|
-
"type": "object",
|
|
1453
|
-
"properties": {
|
|
1454
|
-
"namedArgs": {
|
|
1455
|
-
"type": "object",
|
|
1456
|
-
"properties": {
|
|
1457
|
-
"payload": {
|
|
1458
|
-
"type": "object",
|
|
1459
|
-
"additionalProperties": {
|
|
1460
|
-
"not": {}
|
|
1461
|
-
}
|
|
1462
|
-
}
|
|
1463
|
-
},
|
|
1464
|
-
"required": [
|
|
1465
|
-
"payload"
|
|
1466
|
-
],
|
|
1467
|
-
"additionalProperties": false
|
|
1468
|
-
}
|
|
1469
|
-
},
|
|
1470
|
-
"description": "Someone joined or left a team or app the user is on. Carries nothing; sent on every plan."
|
|
1359
|
+
"to": {
|
|
1360
|
+
"type": "string"
|
|
1471
1361
|
},
|
|
1472
|
-
"
|
|
1473
|
-
"
|
|
1474
|
-
"description": "The socket's database connection came back after a gap and has replayed what it could. Deletes, and anything older or past the replay's cap, need the client's own resync."
|
|
1362
|
+
"sort": {
|
|
1363
|
+
"type": "string"
|
|
1475
1364
|
},
|
|
1476
|
-
"
|
|
1477
|
-
"
|
|
1478
|
-
"type": "object",
|
|
1479
|
-
"properties": {
|
|
1480
|
-
"namedArgs": {
|
|
1481
|
-
"type": "object",
|
|
1482
|
-
"properties": {
|
|
1483
|
-
"payload": {
|
|
1484
|
-
"type": "object",
|
|
1485
|
-
"properties": {
|
|
1486
|
-
"apps": {
|
|
1487
|
-
"type": "array",
|
|
1488
|
-
"items": {
|
|
1489
|
-
"type": "object",
|
|
1490
|
-
"properties": {
|
|
1491
|
-
"id": {
|
|
1492
|
-
"type": "string"
|
|
1493
|
-
},
|
|
1494
|
-
"name": {
|
|
1495
|
-
"type": "string"
|
|
1496
|
-
}
|
|
1497
|
-
},
|
|
1498
|
-
"required": [
|
|
1499
|
-
"id",
|
|
1500
|
-
"name"
|
|
1501
|
-
],
|
|
1502
|
-
"additionalProperties": false
|
|
1503
|
-
}
|
|
1504
|
-
}
|
|
1505
|
-
},
|
|
1506
|
-
"required": [
|
|
1507
|
-
"apps"
|
|
1508
|
-
],
|
|
1509
|
-
"additionalProperties": false
|
|
1510
|
-
}
|
|
1511
|
-
},
|
|
1512
|
-
"required": [
|
|
1513
|
-
"payload"
|
|
1514
|
-
],
|
|
1515
|
-
"additionalProperties": false
|
|
1516
|
-
}
|
|
1517
|
-
},
|
|
1518
|
-
"description": "The answer to `listMyApps`: the apps the user gets live updates for."
|
|
1365
|
+
"limit": {
|
|
1366
|
+
"type": "number"
|
|
1519
1367
|
},
|
|
1520
|
-
"
|
|
1521
|
-
"
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
}
|
|
1539
|
-
},
|
|
1540
|
-
"required": [
|
|
1541
|
-
"payload"
|
|
1542
|
-
],
|
|
1543
|
-
"additionalProperties": false
|
|
1544
|
-
}
|
|
1545
|
-
}
|
|
1368
|
+
"cursor": {
|
|
1369
|
+
"type": "string"
|
|
1370
|
+
}
|
|
1371
|
+
},
|
|
1372
|
+
"additionalProperties": false,
|
|
1373
|
+
"description": "Sync-protocol params for GET /logs."
|
|
1374
|
+
},
|
|
1375
|
+
"NoteEncrypted": {
|
|
1376
|
+
"type": "object",
|
|
1377
|
+
"properties": {
|
|
1378
|
+
"payload": {
|
|
1379
|
+
"type": "string"
|
|
1380
|
+
},
|
|
1381
|
+
"nonce": {
|
|
1382
|
+
"type": "string"
|
|
1383
|
+
},
|
|
1384
|
+
"keyVersion": {
|
|
1385
|
+
"type": "number"
|
|
1546
1386
|
}
|
|
1547
1387
|
},
|
|
1548
1388
|
"required": [
|
|
1549
|
-
"
|
|
1550
|
-
"
|
|
1551
|
-
"
|
|
1552
|
-
"note:created",
|
|
1553
|
-
"note:updated",
|
|
1554
|
-
"note:deleted",
|
|
1555
|
-
"app:created",
|
|
1556
|
-
"app:updated",
|
|
1557
|
-
"app:deleted",
|
|
1558
|
-
"access:changed",
|
|
1559
|
-
"socket:reconnected",
|
|
1560
|
-
"myApps",
|
|
1561
|
-
"error"
|
|
1389
|
+
"payload",
|
|
1390
|
+
"nonce",
|
|
1391
|
+
"keyVersion"
|
|
1562
1392
|
],
|
|
1563
1393
|
"additionalProperties": false,
|
|
1564
|
-
"description": "
|
|
1394
|
+
"description": "Encrypted note content. payload = base64(authTag + ciphertext) nonce = base64(random IV) keyVersion enables future key rotation."
|
|
1565
1395
|
},
|
|
1566
|
-
"
|
|
1396
|
+
"NoteRecord": {
|
|
1567
1397
|
"type": "object",
|
|
1568
1398
|
"properties": {
|
|
1569
|
-
"
|
|
1570
|
-
"
|
|
1399
|
+
"id": {
|
|
1400
|
+
"type": "string"
|
|
1401
|
+
},
|
|
1402
|
+
"createdAt": {
|
|
1403
|
+
"type": "string"
|
|
1404
|
+
},
|
|
1405
|
+
"updatedAt": {
|
|
1406
|
+
"type": "string"
|
|
1407
|
+
},
|
|
1408
|
+
"appId": {
|
|
1409
|
+
"type": "string"
|
|
1410
|
+
},
|
|
1411
|
+
"userId": {
|
|
1412
|
+
"type": "string"
|
|
1413
|
+
},
|
|
1414
|
+
"logId": {
|
|
1415
|
+
"type": "string"
|
|
1416
|
+
},
|
|
1417
|
+
"encrypted": {
|
|
1418
|
+
"$ref": "#/definitions/NoteEncrypted"
|
|
1571
1419
|
}
|
|
1572
1420
|
},
|
|
1573
1421
|
"required": [
|
|
1574
|
-
"
|
|
1422
|
+
"id",
|
|
1423
|
+
"createdAt",
|
|
1424
|
+
"updatedAt",
|
|
1425
|
+
"appId",
|
|
1426
|
+
"userId",
|
|
1427
|
+
"encrypted"
|
|
1575
1428
|
],
|
|
1576
1429
|
"additionalProperties": false,
|
|
1577
|
-
"description": "
|
|
1430
|
+
"description": "A short user-authored note, encrypted with the app key. Visible to all members of the associated app. Query by teamId in NotesQuery to build a cross-app team feed."
|
|
1578
1431
|
},
|
|
1579
|
-
"
|
|
1432
|
+
"NotesQuery": {
|
|
1580
1433
|
"type": "object",
|
|
1581
1434
|
"properties": {
|
|
1582
|
-
"
|
|
1435
|
+
"appId": {
|
|
1583
1436
|
"type": "string"
|
|
1584
1437
|
},
|
|
1585
|
-
"
|
|
1586
|
-
"type": "
|
|
1438
|
+
"teamId": {
|
|
1439
|
+
"type": "string"
|
|
1587
1440
|
},
|
|
1588
|
-
"
|
|
1589
|
-
"type": "
|
|
1590
|
-
"items": {
|
|
1591
|
-
"type": "string"
|
|
1592
|
-
}
|
|
1441
|
+
"userId": {
|
|
1442
|
+
"type": "string"
|
|
1593
1443
|
},
|
|
1594
|
-
"
|
|
1595
|
-
"type":
|
|
1596
|
-
"string",
|
|
1597
|
-
"null"
|
|
1598
|
-
]
|
|
1444
|
+
"logId": {
|
|
1445
|
+
"type": "string"
|
|
1599
1446
|
},
|
|
1600
|
-
"
|
|
1601
|
-
"type": "
|
|
1447
|
+
"from": {
|
|
1448
|
+
"type": "string"
|
|
1602
1449
|
},
|
|
1603
|
-
"
|
|
1604
|
-
"type": "
|
|
1450
|
+
"to": {
|
|
1451
|
+
"type": "string"
|
|
1452
|
+
},
|
|
1453
|
+
"sort": {
|
|
1454
|
+
"type": "string"
|
|
1605
1455
|
},
|
|
1606
|
-
"
|
|
1456
|
+
"limit": {
|
|
1607
1457
|
"type": "number"
|
|
1458
|
+
},
|
|
1459
|
+
"cursor": {
|
|
1460
|
+
"type": "string"
|
|
1608
1461
|
}
|
|
1609
1462
|
},
|
|
1610
|
-
"
|
|
1611
|
-
|
|
1612
|
-
"durationMs"
|
|
1613
|
-
],
|
|
1614
|
-
"additionalProperties": false
|
|
1463
|
+
"additionalProperties": false,
|
|
1464
|
+
"description": "Filter params for GET /notes."
|
|
1615
1465
|
},
|
|
1616
1466
|
"PushData": {
|
|
1617
1467
|
"anyOf": [
|
|
@@ -1768,506 +1618,719 @@
|
|
|
1768
1618
|
"keys_shared"
|
|
1769
1619
|
]
|
|
1770
1620
|
},
|
|
1771
|
-
"
|
|
1772
|
-
"type": "object",
|
|
1773
|
-
"properties": {
|
|
1774
|
-
"appId": {
|
|
1775
|
-
"type": "string"
|
|
1776
|
-
},
|
|
1777
|
-
"userId": {
|
|
1778
|
-
"type": "string"
|
|
1779
|
-
},
|
|
1780
|
-
"publicKey": {
|
|
1781
|
-
"type": "string"
|
|
1782
|
-
},
|
|
1783
|
-
"keyChangedAt": {
|
|
1784
|
-
"type": [
|
|
1785
|
-
"string",
|
|
1786
|
-
"null"
|
|
1787
|
-
]
|
|
1788
|
-
}
|
|
1789
|
-
},
|
|
1790
|
-
"required": [
|
|
1791
|
-
"appId",
|
|
1792
|
-
"userId",
|
|
1793
|
-
"publicKey"
|
|
1794
|
-
],
|
|
1795
|
-
"additionalProperties": false,
|
|
1796
|
-
"description": "Someone with access to an app who has no wrapped copy of its key yet (GET /apps/keys/pending), with when they last replaced their account key: null if never, missing from an API before key pins."
|
|
1797
|
-
},
|
|
1798
|
-
"KeyHolder": {
|
|
1799
|
-
"type": "object",
|
|
1800
|
-
"properties": {
|
|
1801
|
-
"userId": {
|
|
1802
|
-
"type": "string"
|
|
1803
|
-
},
|
|
1804
|
-
"publicKey": {
|
|
1805
|
-
"type": "string"
|
|
1806
|
-
}
|
|
1807
|
-
},
|
|
1808
|
-
"required": [
|
|
1809
|
-
"userId",
|
|
1810
|
-
"publicKey"
|
|
1811
|
-
],
|
|
1812
|
-
"additionalProperties": false,
|
|
1813
|
-
"description": "Someone who reads one of the caller's apps and already has a wrapped copy of its key (GET /apps/keys/holders)."
|
|
1814
|
-
},
|
|
1815
|
-
"AppKeyUpsertBody": {
|
|
1816
|
-
"type": "object",
|
|
1817
|
-
"properties": {
|
|
1818
|
-
"encryptedKey": {
|
|
1819
|
-
"type": "string"
|
|
1820
|
-
}
|
|
1821
|
-
},
|
|
1822
|
-
"required": [
|
|
1823
|
-
"encryptedKey"
|
|
1824
|
-
],
|
|
1825
|
-
"additionalProperties": false,
|
|
1826
|
-
"description": "Body of PUT /apps/:id/keys/:userId: the app key wrapped to that user's account key."
|
|
1827
|
-
},
|
|
1828
|
-
"KeyPin": {
|
|
1829
|
-
"type": "object",
|
|
1830
|
-
"properties": {
|
|
1831
|
-
"userId": {
|
|
1832
|
-
"type": "string"
|
|
1833
|
-
},
|
|
1834
|
-
"publicKey": {
|
|
1835
|
-
"type": "string"
|
|
1836
|
-
},
|
|
1837
|
-
"mac": {
|
|
1838
|
-
"type": "string"
|
|
1839
|
-
}
|
|
1840
|
-
},
|
|
1841
|
-
"required": [
|
|
1842
|
-
"userId",
|
|
1843
|
-
"publicKey",
|
|
1844
|
-
"mac"
|
|
1845
|
-
],
|
|
1846
|
-
"additionalProperties": false,
|
|
1847
|
-
"description": "An account key a user has accepted for someone they share apps with (GET /key-pins). `mac` is an HMAC by the user's own devices, under a key derived from their account key, over the user, the person and the key: the server can drop a pin but not forge or move one."
|
|
1848
|
-
},
|
|
1849
|
-
"KeyCheckResult": {
|
|
1850
|
-
"type": "string",
|
|
1851
|
-
"enum": [
|
|
1852
|
-
"confirmed",
|
|
1853
|
-
"failed",
|
|
1854
|
-
"cancelled"
|
|
1855
|
-
]
|
|
1856
|
-
},
|
|
1857
|
-
"HolderKeyCheck": {
|
|
1621
|
+
"ResponseMetadata": {
|
|
1858
1622
|
"type": "object",
|
|
1859
1623
|
"properties": {
|
|
1860
|
-
"
|
|
1861
|
-
"type": "string"
|
|
1862
|
-
},
|
|
1863
|
-
"userId": {
|
|
1864
|
-
"type": "string"
|
|
1865
|
-
},
|
|
1866
|
-
"sid": {
|
|
1867
|
-
"type": "string"
|
|
1868
|
-
},
|
|
1869
|
-
"holderMessage": {
|
|
1624
|
+
"requestId": {
|
|
1870
1625
|
"type": "string"
|
|
1871
1626
|
},
|
|
1872
|
-
"
|
|
1873
|
-
"type": "
|
|
1874
|
-
"description": "The holder's half of the exchange, sealed under their account key."
|
|
1875
|
-
},
|
|
1876
|
-
"claimantMessage": {
|
|
1877
|
-
"type": [
|
|
1878
|
-
"string",
|
|
1879
|
-
"null"
|
|
1880
|
-
]
|
|
1881
|
-
},
|
|
1882
|
-
"publicKey": {
|
|
1883
|
-
"type": [
|
|
1884
|
-
"string",
|
|
1885
|
-
"null"
|
|
1886
|
-
]
|
|
1627
|
+
"durationMs": {
|
|
1628
|
+
"type": "number"
|
|
1887
1629
|
},
|
|
1888
|
-
"
|
|
1889
|
-
"type":
|
|
1890
|
-
|
|
1891
|
-
"
|
|
1892
|
-
|
|
1630
|
+
"warnings": {
|
|
1631
|
+
"type": "array",
|
|
1632
|
+
"items": {
|
|
1633
|
+
"type": "string"
|
|
1634
|
+
}
|
|
1893
1635
|
},
|
|
1894
|
-
"
|
|
1636
|
+
"cursor": {
|
|
1895
1637
|
"type": [
|
|
1896
1638
|
"string",
|
|
1897
1639
|
"null"
|
|
1898
1640
|
]
|
|
1899
1641
|
},
|
|
1900
|
-
"
|
|
1901
|
-
"
|
|
1902
|
-
{
|
|
1903
|
-
"$ref": "#/definitions/KeyCheckResult"
|
|
1904
|
-
},
|
|
1905
|
-
{
|
|
1906
|
-
"type": "null"
|
|
1907
|
-
}
|
|
1908
|
-
]
|
|
1642
|
+
"hasMore": {
|
|
1643
|
+
"type": "boolean"
|
|
1909
1644
|
},
|
|
1910
|
-
"
|
|
1911
|
-
"type":
|
|
1912
|
-
"string",
|
|
1913
|
-
"null"
|
|
1914
|
-
]
|
|
1645
|
+
"count": {
|
|
1646
|
+
"type": "number"
|
|
1915
1647
|
},
|
|
1916
|
-
"
|
|
1917
|
-
"type": "
|
|
1648
|
+
"dropped": {
|
|
1649
|
+
"type": "number",
|
|
1650
|
+
"description": "POST /logs past the team's monthly logs: how many logs it dropped (1), below ERROR (monthlyLogsCap)."
|
|
1918
1651
|
},
|
|
1919
|
-
"
|
|
1920
|
-
"type": "string"
|
|
1652
|
+
"cappedUntil": {
|
|
1653
|
+
"type": "string",
|
|
1654
|
+
"description": "With `dropped`: when every level is taken again (the next UTC month), an ISO time."
|
|
1921
1655
|
}
|
|
1922
1656
|
},
|
|
1923
1657
|
"required": [
|
|
1924
|
-
"
|
|
1925
|
-
"
|
|
1926
|
-
"sid",
|
|
1927
|
-
"holderMessage",
|
|
1928
|
-
"holderState",
|
|
1929
|
-
"claimantMessage",
|
|
1930
|
-
"publicKey",
|
|
1931
|
-
"tag",
|
|
1932
|
-
"answeredAt",
|
|
1933
|
-
"result",
|
|
1934
|
-
"finishedAt",
|
|
1935
|
-
"expiresAt",
|
|
1936
|
-
"createdAt"
|
|
1658
|
+
"requestId",
|
|
1659
|
+
"durationMs"
|
|
1937
1660
|
],
|
|
1938
|
-
"additionalProperties": false
|
|
1939
|
-
"description": "A key check the caller started, as their devices read it (GET /key-checks/mine): enough to show the code again or finish the check. The messages are a password-authenticated exchange the server can't read or test codes against."
|
|
1661
|
+
"additionalProperties": false
|
|
1940
1662
|
},
|
|
1941
|
-
"
|
|
1663
|
+
"SocketAppPayload": {
|
|
1942
1664
|
"type": "object",
|
|
1943
1665
|
"properties": {
|
|
1944
1666
|
"id": {
|
|
1945
1667
|
"type": "string"
|
|
1946
1668
|
},
|
|
1947
|
-
"
|
|
1669
|
+
"name": {
|
|
1948
1670
|
"type": "string"
|
|
1949
1671
|
},
|
|
1950
|
-
"
|
|
1672
|
+
"teamId": {
|
|
1951
1673
|
"type": "string"
|
|
1952
1674
|
},
|
|
1953
|
-
"
|
|
1675
|
+
"color": {
|
|
1954
1676
|
"type": "string"
|
|
1955
1677
|
},
|
|
1956
|
-
"
|
|
1678
|
+
"imageUrl": {
|
|
1957
1679
|
"type": "string"
|
|
1958
1680
|
},
|
|
1959
|
-
"
|
|
1960
|
-
"type": [
|
|
1961
|
-
"string",
|
|
1962
|
-
"null"
|
|
1963
|
-
]
|
|
1964
|
-
},
|
|
1965
|
-
"result": {
|
|
1966
|
-
"anyOf": [
|
|
1967
|
-
{
|
|
1968
|
-
"$ref": "#/definitions/KeyCheckResult"
|
|
1969
|
-
},
|
|
1970
|
-
{
|
|
1971
|
-
"type": "null"
|
|
1972
|
-
}
|
|
1973
|
-
]
|
|
1974
|
-
},
|
|
1975
|
-
"finishedAt": {
|
|
1976
|
-
"type": [
|
|
1977
|
-
"string",
|
|
1978
|
-
"null"
|
|
1979
|
-
]
|
|
1980
|
-
},
|
|
1981
|
-
"expiresAt": {
|
|
1681
|
+
"createdAt": {
|
|
1982
1682
|
"type": "string"
|
|
1983
1683
|
},
|
|
1984
|
-
"
|
|
1684
|
+
"updatedAt": {
|
|
1985
1685
|
"type": "string"
|
|
1986
1686
|
}
|
|
1987
1687
|
},
|
|
1988
1688
|
"required": [
|
|
1989
1689
|
"id",
|
|
1990
|
-
"
|
|
1991
|
-
"
|
|
1992
|
-
"
|
|
1993
|
-
"holderMessage",
|
|
1994
|
-
"answeredAt",
|
|
1995
|
-
"result",
|
|
1996
|
-
"finishedAt",
|
|
1997
|
-
"expiresAt",
|
|
1998
|
-
"createdAt"
|
|
1690
|
+
"name",
|
|
1691
|
+
"createdAt",
|
|
1692
|
+
"updatedAt"
|
|
1999
1693
|
],
|
|
2000
1694
|
"additionalProperties": false,
|
|
2001
|
-
"description": "
|
|
1695
|
+
"description": "An app as the socket sends it: no wrapped keys, so a client refetches through the API for its own copy."
|
|
2002
1696
|
},
|
|
2003
|
-
"
|
|
1697
|
+
"ServerToClientEvents": {
|
|
2004
1698
|
"type": "object",
|
|
2005
1699
|
"properties": {
|
|
2006
|
-
"
|
|
2007
|
-
"
|
|
1700
|
+
"log:created": {
|
|
1701
|
+
"$comment": "(log: Omit<LogRecord, 'updatedAt'> & { updatedAt?: string }) => void",
|
|
1702
|
+
"type": "object",
|
|
1703
|
+
"properties": {
|
|
1704
|
+
"namedArgs": {
|
|
1705
|
+
"type": "object",
|
|
1706
|
+
"properties": {
|
|
1707
|
+
"log": {
|
|
1708
|
+
"type": "object",
|
|
1709
|
+
"additionalProperties": false,
|
|
1710
|
+
"properties": {
|
|
1711
|
+
"updatedAt": {
|
|
1712
|
+
"type": "string"
|
|
1713
|
+
},
|
|
1714
|
+
"id": {
|
|
1715
|
+
"type": "string"
|
|
1716
|
+
},
|
|
1717
|
+
"createdAt": {
|
|
1718
|
+
"type": "string"
|
|
1719
|
+
},
|
|
1720
|
+
"appId": {
|
|
1721
|
+
"type": "string"
|
|
1722
|
+
},
|
|
1723
|
+
"level": {
|
|
1724
|
+
"$ref": "#/definitions/LogLevel"
|
|
1725
|
+
},
|
|
1726
|
+
"encrypted": {
|
|
1727
|
+
"$ref": "#/definitions/LogEncrypted"
|
|
1728
|
+
}
|
|
1729
|
+
},
|
|
1730
|
+
"required": [
|
|
1731
|
+
"appId",
|
|
1732
|
+
"createdAt",
|
|
1733
|
+
"encrypted",
|
|
1734
|
+
"id",
|
|
1735
|
+
"level"
|
|
1736
|
+
]
|
|
1737
|
+
}
|
|
1738
|
+
},
|
|
1739
|
+
"required": [
|
|
1740
|
+
"log"
|
|
1741
|
+
],
|
|
1742
|
+
"additionalProperties": false
|
|
1743
|
+
}
|
|
1744
|
+
}
|
|
2008
1745
|
},
|
|
2009
|
-
"
|
|
2010
|
-
"
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
1746
|
+
"flag:created": {
|
|
1747
|
+
"$comment": "(flag: Omit<FlagRecord, 'updatedAt'> & { updatedAt?: string }) => void",
|
|
1748
|
+
"type": "object",
|
|
1749
|
+
"properties": {
|
|
1750
|
+
"namedArgs": {
|
|
1751
|
+
"type": "object",
|
|
1752
|
+
"properties": {
|
|
1753
|
+
"flag": {
|
|
1754
|
+
"type": "object",
|
|
1755
|
+
"additionalProperties": false,
|
|
1756
|
+
"properties": {
|
|
1757
|
+
"updatedAt": {
|
|
1758
|
+
"type": "string"
|
|
1759
|
+
},
|
|
1760
|
+
"id": {
|
|
1761
|
+
"type": "string"
|
|
1762
|
+
},
|
|
1763
|
+
"createdAt": {
|
|
1764
|
+
"type": "string"
|
|
1765
|
+
},
|
|
1766
|
+
"logId": {
|
|
1767
|
+
"type": "string"
|
|
1768
|
+
},
|
|
1769
|
+
"userId": {
|
|
1770
|
+
"type": "string"
|
|
1771
|
+
}
|
|
1772
|
+
},
|
|
1773
|
+
"required": [
|
|
1774
|
+
"createdAt",
|
|
1775
|
+
"id",
|
|
1776
|
+
"logId",
|
|
1777
|
+
"userId"
|
|
1778
|
+
]
|
|
1779
|
+
}
|
|
1780
|
+
},
|
|
1781
|
+
"required": [
|
|
1782
|
+
"flag"
|
|
1783
|
+
],
|
|
1784
|
+
"additionalProperties": false
|
|
1785
|
+
}
|
|
1786
|
+
}
|
|
2014
1787
|
},
|
|
2015
|
-
"
|
|
2016
|
-
"
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
1788
|
+
"flag:deleted": {
|
|
1789
|
+
"$comment": "(flag: Pick<FlagRecord, 'id'>) => void",
|
|
1790
|
+
"type": "object",
|
|
1791
|
+
"properties": {
|
|
1792
|
+
"namedArgs": {
|
|
1793
|
+
"type": "object",
|
|
1794
|
+
"properties": {
|
|
1795
|
+
"flag": {
|
|
1796
|
+
"type": "object",
|
|
1797
|
+
"properties": {
|
|
1798
|
+
"id": {
|
|
1799
|
+
"type": "string"
|
|
1800
|
+
}
|
|
1801
|
+
},
|
|
1802
|
+
"required": [
|
|
1803
|
+
"id"
|
|
1804
|
+
],
|
|
1805
|
+
"additionalProperties": false
|
|
1806
|
+
}
|
|
1807
|
+
},
|
|
1808
|
+
"required": [
|
|
1809
|
+
"flag"
|
|
1810
|
+
],
|
|
1811
|
+
"additionalProperties": false
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
2020
1814
|
},
|
|
2021
|
-
"
|
|
2022
|
-
"
|
|
1815
|
+
"note:created": {
|
|
1816
|
+
"$comment": "(note: NoteRecord) => void",
|
|
1817
|
+
"type": "object",
|
|
1818
|
+
"properties": {
|
|
1819
|
+
"namedArgs": {
|
|
1820
|
+
"type": "object",
|
|
1821
|
+
"properties": {
|
|
1822
|
+
"note": {
|
|
1823
|
+
"$ref": "#/definitions/NoteRecord"
|
|
1824
|
+
}
|
|
1825
|
+
},
|
|
1826
|
+
"required": [
|
|
1827
|
+
"note"
|
|
1828
|
+
],
|
|
1829
|
+
"additionalProperties": false
|
|
1830
|
+
}
|
|
1831
|
+
}
|
|
2023
1832
|
},
|
|
2024
|
-
"
|
|
2025
|
-
"
|
|
1833
|
+
"note:updated": {
|
|
1834
|
+
"$comment": "(note: NoteRecord) => void",
|
|
1835
|
+
"type": "object",
|
|
1836
|
+
"properties": {
|
|
1837
|
+
"namedArgs": {
|
|
1838
|
+
"type": "object",
|
|
1839
|
+
"properties": {
|
|
1840
|
+
"note": {
|
|
1841
|
+
"$ref": "#/definitions/NoteRecord"
|
|
1842
|
+
}
|
|
1843
|
+
},
|
|
1844
|
+
"required": [
|
|
1845
|
+
"note"
|
|
1846
|
+
],
|
|
1847
|
+
"additionalProperties": false
|
|
1848
|
+
}
|
|
1849
|
+
}
|
|
1850
|
+
},
|
|
1851
|
+
"note:deleted": {
|
|
1852
|
+
"$comment": "(note: Pick<NoteRecord, 'id' | 'appId'>) => void",
|
|
1853
|
+
"type": "object",
|
|
1854
|
+
"properties": {
|
|
1855
|
+
"namedArgs": {
|
|
1856
|
+
"type": "object",
|
|
1857
|
+
"properties": {
|
|
1858
|
+
"note": {
|
|
1859
|
+
"type": "object",
|
|
1860
|
+
"properties": {
|
|
1861
|
+
"id": {
|
|
1862
|
+
"type": "string"
|
|
1863
|
+
},
|
|
1864
|
+
"appId": {
|
|
1865
|
+
"type": "string"
|
|
1866
|
+
}
|
|
1867
|
+
},
|
|
1868
|
+
"required": [
|
|
1869
|
+
"id",
|
|
1870
|
+
"appId"
|
|
1871
|
+
],
|
|
1872
|
+
"additionalProperties": false
|
|
1873
|
+
}
|
|
1874
|
+
},
|
|
1875
|
+
"required": [
|
|
1876
|
+
"note"
|
|
1877
|
+
],
|
|
1878
|
+
"additionalProperties": false
|
|
1879
|
+
}
|
|
1880
|
+
}
|
|
2026
1881
|
},
|
|
2027
|
-
"
|
|
2028
|
-
"
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
1882
|
+
"app:created": {
|
|
1883
|
+
"$comment": "(app: SocketAppPayload) => void",
|
|
1884
|
+
"type": "object",
|
|
1885
|
+
"properties": {
|
|
1886
|
+
"namedArgs": {
|
|
1887
|
+
"type": "object",
|
|
1888
|
+
"properties": {
|
|
1889
|
+
"app": {
|
|
1890
|
+
"$ref": "#/definitions/SocketAppPayload"
|
|
1891
|
+
}
|
|
1892
|
+
},
|
|
1893
|
+
"required": [
|
|
1894
|
+
"app"
|
|
1895
|
+
],
|
|
1896
|
+
"additionalProperties": false
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
2033
1899
|
},
|
|
2034
|
-
"
|
|
2035
|
-
"
|
|
1900
|
+
"app:updated": {
|
|
1901
|
+
"$comment": "(app: SocketAppPayload) => void",
|
|
1902
|
+
"type": "object",
|
|
1903
|
+
"properties": {
|
|
1904
|
+
"namedArgs": {
|
|
1905
|
+
"type": "object",
|
|
1906
|
+
"properties": {
|
|
1907
|
+
"app": {
|
|
1908
|
+
"$ref": "#/definitions/SocketAppPayload"
|
|
1909
|
+
}
|
|
1910
|
+
},
|
|
1911
|
+
"required": [
|
|
1912
|
+
"app"
|
|
1913
|
+
],
|
|
1914
|
+
"additionalProperties": false
|
|
1915
|
+
}
|
|
1916
|
+
}
|
|
2036
1917
|
},
|
|
2037
|
-
"
|
|
2038
|
-
"
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
"DeviceLinkPlatform": {
|
|
2065
|
-
"type": "string",
|
|
2066
|
-
"enum": [
|
|
2067
|
-
"ios",
|
|
2068
|
-
"android",
|
|
2069
|
-
"web",
|
|
2070
|
-
"desktop",
|
|
2071
|
-
"cli"
|
|
2072
|
-
],
|
|
2073
|
-
"description": "What a request comes from, so the device answering it can say so and offer a QR code only to a phone's camera."
|
|
2074
|
-
},
|
|
2075
|
-
"DeviceLinkCreateBody": {
|
|
2076
|
-
"type": "object",
|
|
2077
|
-
"properties": {
|
|
2078
|
-
"deviceName": {
|
|
2079
|
-
"type": "string"
|
|
1918
|
+
"app:deleted": {
|
|
1919
|
+
"$comment": "(app: Pick<AppRecord, 'id'>) => void",
|
|
1920
|
+
"type": "object",
|
|
1921
|
+
"properties": {
|
|
1922
|
+
"namedArgs": {
|
|
1923
|
+
"type": "object",
|
|
1924
|
+
"properties": {
|
|
1925
|
+
"app": {
|
|
1926
|
+
"type": "object",
|
|
1927
|
+
"properties": {
|
|
1928
|
+
"id": {
|
|
1929
|
+
"type": "string"
|
|
1930
|
+
}
|
|
1931
|
+
},
|
|
1932
|
+
"required": [
|
|
1933
|
+
"id"
|
|
1934
|
+
],
|
|
1935
|
+
"additionalProperties": false
|
|
1936
|
+
}
|
|
1937
|
+
},
|
|
1938
|
+
"required": [
|
|
1939
|
+
"app"
|
|
1940
|
+
],
|
|
1941
|
+
"additionalProperties": false
|
|
1942
|
+
}
|
|
1943
|
+
},
|
|
1944
|
+
"description": "Deleted, or kept to its team's owner and so gone for the rest of the team."
|
|
2080
1945
|
},
|
|
2081
|
-
"
|
|
2082
|
-
"$
|
|
1946
|
+
"access:changed": {
|
|
1947
|
+
"$comment": "(payload: Record<string, never>) => void",
|
|
1948
|
+
"type": "object",
|
|
1949
|
+
"properties": {
|
|
1950
|
+
"namedArgs": {
|
|
1951
|
+
"type": "object",
|
|
1952
|
+
"properties": {
|
|
1953
|
+
"payload": {
|
|
1954
|
+
"type": "object",
|
|
1955
|
+
"additionalProperties": {
|
|
1956
|
+
"not": {}
|
|
1957
|
+
}
|
|
1958
|
+
}
|
|
1959
|
+
},
|
|
1960
|
+
"required": [
|
|
1961
|
+
"payload"
|
|
1962
|
+
],
|
|
1963
|
+
"additionalProperties": false
|
|
1964
|
+
}
|
|
1965
|
+
},
|
|
1966
|
+
"description": "Someone joined or left a team or app the user is on. Carries nothing; sent on every plan."
|
|
2083
1967
|
},
|
|
2084
|
-
"
|
|
2085
|
-
"
|
|
2086
|
-
"description": "The
|
|
1968
|
+
"socket:reconnected": {
|
|
1969
|
+
"$comment": "() => void",
|
|
1970
|
+
"description": "The socket's database connection came back after a gap and has replayed what it could. Deletes, and anything older or past the replay's cap, need the client's own resync."
|
|
2087
1971
|
},
|
|
2088
|
-
"
|
|
2089
|
-
"
|
|
2090
|
-
"
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
1972
|
+
"myApps": {
|
|
1973
|
+
"$comment": "(payload: { apps: Pick<AppRecord, 'id' | 'name'>[] }) => void",
|
|
1974
|
+
"type": "object",
|
|
1975
|
+
"properties": {
|
|
1976
|
+
"namedArgs": {
|
|
1977
|
+
"type": "object",
|
|
1978
|
+
"properties": {
|
|
1979
|
+
"payload": {
|
|
1980
|
+
"type": "object",
|
|
1981
|
+
"properties": {
|
|
1982
|
+
"apps": {
|
|
1983
|
+
"type": "array",
|
|
1984
|
+
"items": {
|
|
1985
|
+
"type": "object",
|
|
1986
|
+
"properties": {
|
|
1987
|
+
"id": {
|
|
1988
|
+
"type": "string"
|
|
1989
|
+
},
|
|
1990
|
+
"name": {
|
|
1991
|
+
"type": "string"
|
|
1992
|
+
}
|
|
1993
|
+
},
|
|
1994
|
+
"required": [
|
|
1995
|
+
"id",
|
|
1996
|
+
"name"
|
|
1997
|
+
],
|
|
1998
|
+
"additionalProperties": false
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
2001
|
+
},
|
|
2002
|
+
"required": [
|
|
2003
|
+
"apps"
|
|
2004
|
+
],
|
|
2005
|
+
"additionalProperties": false
|
|
2006
|
+
}
|
|
2007
|
+
},
|
|
2008
|
+
"required": [
|
|
2009
|
+
"payload"
|
|
2010
|
+
],
|
|
2011
|
+
"additionalProperties": false
|
|
2012
|
+
}
|
|
2013
|
+
},
|
|
2014
|
+
"description": "The answer to `listMyApps`: the apps the user gets live updates for."
|
|
2106
2015
|
},
|
|
2107
|
-
"
|
|
2108
|
-
"
|
|
2016
|
+
"error": {
|
|
2017
|
+
"$comment": "(payload: { message: string }) => void",
|
|
2018
|
+
"type": "object",
|
|
2019
|
+
"properties": {
|
|
2020
|
+
"namedArgs": {
|
|
2021
|
+
"type": "object",
|
|
2022
|
+
"properties": {
|
|
2023
|
+
"payload": {
|
|
2024
|
+
"type": "object",
|
|
2025
|
+
"properties": {
|
|
2026
|
+
"message": {
|
|
2027
|
+
"type": "string"
|
|
2028
|
+
}
|
|
2029
|
+
},
|
|
2030
|
+
"required": [
|
|
2031
|
+
"message"
|
|
2032
|
+
],
|
|
2033
|
+
"additionalProperties": false
|
|
2034
|
+
}
|
|
2035
|
+
},
|
|
2036
|
+
"required": [
|
|
2037
|
+
"payload"
|
|
2038
|
+
],
|
|
2039
|
+
"additionalProperties": false
|
|
2040
|
+
}
|
|
2041
|
+
}
|
|
2109
2042
|
}
|
|
2110
2043
|
},
|
|
2111
2044
|
"required": [
|
|
2112
|
-
"
|
|
2113
|
-
"
|
|
2045
|
+
"log:created",
|
|
2046
|
+
"flag:created",
|
|
2047
|
+
"flag:deleted",
|
|
2048
|
+
"note:created",
|
|
2049
|
+
"note:updated",
|
|
2050
|
+
"note:deleted",
|
|
2051
|
+
"app:created",
|
|
2052
|
+
"app:updated",
|
|
2053
|
+
"app:deleted",
|
|
2054
|
+
"access:changed",
|
|
2055
|
+
"socket:reconnected",
|
|
2056
|
+
"myApps",
|
|
2057
|
+
"error"
|
|
2114
2058
|
],
|
|
2115
2059
|
"additionalProperties": false,
|
|
2116
|
-
"description": "
|
|
2060
|
+
"description": "What Lumber-Socket sends a client, for socket.io's typed `Server` and `Socket`. Each goes to the users who can read the app it's about, live updates permitting (the app's team's plan); flags go to the user who set them."
|
|
2117
2061
|
},
|
|
2118
|
-
"
|
|
2062
|
+
"ClientToServerEvents": {
|
|
2119
2063
|
"type": "object",
|
|
2120
2064
|
"properties": {
|
|
2121
|
-
"
|
|
2122
|
-
"
|
|
2123
|
-
},
|
|
2124
|
-
"deliveryTag": {
|
|
2125
|
-
"type": "string"
|
|
2065
|
+
"listMyApps": {
|
|
2066
|
+
"$comment": "() => void"
|
|
2126
2067
|
}
|
|
2127
2068
|
},
|
|
2128
2069
|
"required": [
|
|
2129
|
-
"
|
|
2130
|
-
"deliveryTag"
|
|
2070
|
+
"listMyApps"
|
|
2131
2071
|
],
|
|
2132
2072
|
"additionalProperties": false,
|
|
2133
|
-
"description": "
|
|
2073
|
+
"description": "What a client sends Lumber-Socket."
|
|
2134
2074
|
},
|
|
2135
|
-
"
|
|
2075
|
+
"TeamRecord": {
|
|
2136
2076
|
"type": "object",
|
|
2137
2077
|
"properties": {
|
|
2138
2078
|
"id": {
|
|
2139
2079
|
"type": "string"
|
|
2140
2080
|
},
|
|
2141
|
-
"
|
|
2142
|
-
"
|
|
2081
|
+
"createdAt": {
|
|
2082
|
+
"type": "string"
|
|
2143
2083
|
},
|
|
2144
|
-
"
|
|
2084
|
+
"updatedAt": {
|
|
2145
2085
|
"type": "string"
|
|
2146
2086
|
},
|
|
2147
|
-
"
|
|
2087
|
+
"name": {
|
|
2148
2088
|
"type": "string"
|
|
2149
2089
|
},
|
|
2150
|
-
"
|
|
2090
|
+
"color": {
|
|
2151
2091
|
"type": "string"
|
|
2152
2092
|
},
|
|
2153
|
-
"
|
|
2093
|
+
"imageUrl": {
|
|
2094
|
+
"type": "string"
|
|
2095
|
+
},
|
|
2096
|
+
"subscriptionLevel": {
|
|
2097
|
+
"$ref": "#/definitions/SubscriptionLevel"
|
|
2098
|
+
},
|
|
2099
|
+
"subscriptionEnd": {
|
|
2154
2100
|
"type": [
|
|
2155
2101
|
"string",
|
|
2156
2102
|
"null"
|
|
2157
|
-
]
|
|
2103
|
+
],
|
|
2104
|
+
"description": "When a canceled plan stops; null while it renews."
|
|
2158
2105
|
},
|
|
2159
|
-
"
|
|
2106
|
+
"role": {
|
|
2107
|
+
"type": "string",
|
|
2108
|
+
"enum": [
|
|
2109
|
+
"owner",
|
|
2110
|
+
"admin",
|
|
2111
|
+
"member"
|
|
2112
|
+
],
|
|
2113
|
+
"description": "GET /teams only: the caller's role on the team."
|
|
2114
|
+
},
|
|
2115
|
+
"memberId": {
|
|
2116
|
+
"type": "string",
|
|
2117
|
+
"description": "GET /teams only: the caller's membership id, which leaving the team deletes."
|
|
2118
|
+
},
|
|
2119
|
+
"appCount": {
|
|
2160
2120
|
"type": [
|
|
2161
|
-
"
|
|
2121
|
+
"number",
|
|
2162
2122
|
"null"
|
|
2163
|
-
]
|
|
2123
|
+
],
|
|
2124
|
+
"description": "GET /teams only: the team's apps, as creating one counts them. Null unless the caller is its owner or an admin."
|
|
2164
2125
|
},
|
|
2165
|
-
"
|
|
2126
|
+
"logsThisMonth": {
|
|
2166
2127
|
"type": [
|
|
2167
|
-
"
|
|
2128
|
+
"number",
|
|
2168
2129
|
"null"
|
|
2169
|
-
]
|
|
2130
|
+
],
|
|
2131
|
+
"description": "GET /teams only: logs its apps sent this UTC month, the monthly cap's count. Null unless owner or admin."
|
|
2170
2132
|
}
|
|
2171
2133
|
},
|
|
2172
2134
|
"required": [
|
|
2173
2135
|
"id",
|
|
2174
|
-
"
|
|
2175
|
-
"
|
|
2136
|
+
"createdAt",
|
|
2137
|
+
"updatedAt",
|
|
2138
|
+
"name",
|
|
2139
|
+
"subscriptionLevel"
|
|
2176
2140
|
],
|
|
2177
2141
|
"additionalProperties": false,
|
|
2178
|
-
"description": "
|
|
2142
|
+
"description": "An organization that owns apps and pays for member usage. Team subscriptionLevel takes precedence over individual member levels."
|
|
2179
2143
|
},
|
|
2180
|
-
"
|
|
2144
|
+
"SubscriptionLevel": {
|
|
2145
|
+
"type": "number",
|
|
2146
|
+
"enum": [
|
|
2147
|
+
0,
|
|
2148
|
+
1,
|
|
2149
|
+
2,
|
|
2150
|
+
3
|
|
2151
|
+
],
|
|
2152
|
+
"description": "User subscription level. Mirrors User.subscriptionLevel in Lumber-API."
|
|
2153
|
+
},
|
|
2154
|
+
"TeamMemberRecord": {
|
|
2181
2155
|
"type": "object",
|
|
2182
2156
|
"properties": {
|
|
2183
2157
|
"id": {
|
|
2184
2158
|
"type": "string"
|
|
2185
2159
|
},
|
|
2186
|
-
"
|
|
2160
|
+
"createdAt": {
|
|
2187
2161
|
"type": "string"
|
|
2188
2162
|
},
|
|
2189
|
-
"
|
|
2190
|
-
"
|
|
2163
|
+
"updatedAt": {
|
|
2164
|
+
"type": "string"
|
|
2191
2165
|
},
|
|
2192
|
-
"
|
|
2193
|
-
"type": "string"
|
|
2194
|
-
"description": "The new device's one-off public key, which an answer's tag has to cover before anything is wrapped to it."
|
|
2166
|
+
"teamId": {
|
|
2167
|
+
"type": "string"
|
|
2195
2168
|
},
|
|
2196
|
-
"
|
|
2197
|
-
"type":
|
|
2198
|
-
|
|
2199
|
-
|
|
2169
|
+
"userId": {
|
|
2170
|
+
"type": "string"
|
|
2171
|
+
},
|
|
2172
|
+
"role": {
|
|
2173
|
+
"type": "string",
|
|
2174
|
+
"enum": [
|
|
2175
|
+
"owner",
|
|
2176
|
+
"admin",
|
|
2177
|
+
"member"
|
|
2200
2178
|
]
|
|
2201
2179
|
},
|
|
2202
|
-
"
|
|
2180
|
+
"name": {
|
|
2203
2181
|
"type": [
|
|
2204
2182
|
"string",
|
|
2205
2183
|
"null"
|
|
2206
|
-
]
|
|
2184
|
+
],
|
|
2185
|
+
"description": "Listed members only: their display name. Never their email address."
|
|
2207
2186
|
},
|
|
2208
|
-
"
|
|
2187
|
+
"handle": {
|
|
2209
2188
|
"type": [
|
|
2210
2189
|
"string",
|
|
2211
2190
|
"null"
|
|
2212
|
-
]
|
|
2191
|
+
],
|
|
2192
|
+
"description": "Listed members only: the part of their email before the"
|
|
2213
2193
|
},
|
|
2214
|
-
"
|
|
2194
|
+
"color": {
|
|
2215
2195
|
"type": [
|
|
2216
2196
|
"string",
|
|
2217
2197
|
"null"
|
|
2218
2198
|
]
|
|
2219
2199
|
},
|
|
2220
|
-
"
|
|
2200
|
+
"imageUrl": {
|
|
2221
2201
|
"type": [
|
|
2222
2202
|
"string",
|
|
2223
2203
|
"null"
|
|
2224
2204
|
]
|
|
2205
|
+
}
|
|
2206
|
+
},
|
|
2207
|
+
"required": [
|
|
2208
|
+
"id",
|
|
2209
|
+
"createdAt",
|
|
2210
|
+
"updatedAt",
|
|
2211
|
+
"teamId",
|
|
2212
|
+
"userId",
|
|
2213
|
+
"role"
|
|
2214
|
+
],
|
|
2215
|
+
"additionalProperties": false,
|
|
2216
|
+
"description": "Membership of a user in a team."
|
|
2217
|
+
},
|
|
2218
|
+
"SubscriptionPlanRecord": {
|
|
2219
|
+
"type": "object",
|
|
2220
|
+
"properties": {
|
|
2221
|
+
"name": {
|
|
2222
|
+
"type": "string"
|
|
2225
2223
|
},
|
|
2226
|
-
"
|
|
2224
|
+
"priceId": {
|
|
2227
2225
|
"type": [
|
|
2228
2226
|
"string",
|
|
2229
2227
|
"null"
|
|
2230
2228
|
]
|
|
2231
|
-
}
|
|
2232
|
-
|
|
2229
|
+
}
|
|
2230
|
+
},
|
|
2231
|
+
"required": [
|
|
2232
|
+
"name",
|
|
2233
|
+
"priceId"
|
|
2234
|
+
],
|
|
2235
|
+
"additionalProperties": false,
|
|
2236
|
+
"description": "A plan GET /subscriptions offers, with its Stripe price (none for Hobby)."
|
|
2237
|
+
},
|
|
2238
|
+
"TeamsQuery": {
|
|
2239
|
+
"type": "object",
|
|
2240
|
+
"properties": {
|
|
2241
|
+
"sort": {
|
|
2233
2242
|
"type": "string"
|
|
2234
2243
|
},
|
|
2235
|
-
"
|
|
2244
|
+
"limit": {
|
|
2245
|
+
"type": "number"
|
|
2246
|
+
},
|
|
2247
|
+
"cursor": {
|
|
2236
2248
|
"type": "string"
|
|
2237
2249
|
}
|
|
2238
2250
|
},
|
|
2251
|
+
"additionalProperties": false,
|
|
2252
|
+
"description": "Filter params for GET /teams."
|
|
2253
|
+
},
|
|
2254
|
+
"PushThreshold": {
|
|
2255
|
+
"anyOf": [
|
|
2256
|
+
{
|
|
2257
|
+
"$ref": "#/definitions/LogLevel"
|
|
2258
|
+
},
|
|
2259
|
+
{
|
|
2260
|
+
"type": "number",
|
|
2261
|
+
"const": 5
|
|
2262
|
+
}
|
|
2263
|
+
],
|
|
2264
|
+
"description": "The lowest log level that pushes, or PUSH_OFF. Stored as a notification preference's `minimumLevel`."
|
|
2265
|
+
},
|
|
2266
|
+
"SubscriptionLevelName": {
|
|
2267
|
+
"type": "string",
|
|
2268
|
+
"enum": [
|
|
2269
|
+
"hobby",
|
|
2270
|
+
"dev",
|
|
2271
|
+
"pro",
|
|
2272
|
+
"enterprise"
|
|
2273
|
+
],
|
|
2274
|
+
"description": "String name for each subscription level, suitable for display and Redux state."
|
|
2275
|
+
},
|
|
2276
|
+
"SubscriptionLimits": {
|
|
2277
|
+
"type": "object",
|
|
2278
|
+
"properties": {
|
|
2279
|
+
"apps": {
|
|
2280
|
+
"type": "number"
|
|
2281
|
+
},
|
|
2282
|
+
"seats": {
|
|
2283
|
+
"type": "number"
|
|
2284
|
+
},
|
|
2285
|
+
"apiKeys": {
|
|
2286
|
+
"type": "number"
|
|
2287
|
+
},
|
|
2288
|
+
"logRetentionDays": {
|
|
2289
|
+
"type": "number"
|
|
2290
|
+
},
|
|
2291
|
+
"monthlyLogs": {
|
|
2292
|
+
"type": "number"
|
|
2293
|
+
},
|
|
2294
|
+
"realtimeLogs": {
|
|
2295
|
+
"type": "boolean",
|
|
2296
|
+
"description": "Whether real-time WebSocket log streaming is available."
|
|
2297
|
+
},
|
|
2298
|
+
"minPushLevel": {
|
|
2299
|
+
"type": "number",
|
|
2300
|
+
"description": "Minimum log level that triggers a push notification. Infinity means push is disabled."
|
|
2301
|
+
}
|
|
2302
|
+
},
|
|
2239
2303
|
"required": [
|
|
2240
|
-
"
|
|
2241
|
-
"
|
|
2242
|
-
"
|
|
2243
|
-
"
|
|
2244
|
-
"
|
|
2245
|
-
"
|
|
2246
|
-
"
|
|
2247
|
-
"claimantMessage",
|
|
2248
|
-
"tag",
|
|
2249
|
-
"answeredAt",
|
|
2250
|
-
"expiresAt",
|
|
2251
|
-
"createdAt"
|
|
2304
|
+
"apps",
|
|
2305
|
+
"seats",
|
|
2306
|
+
"apiKeys",
|
|
2307
|
+
"logRetentionDays",
|
|
2308
|
+
"monthlyLogs",
|
|
2309
|
+
"realtimeLogs",
|
|
2310
|
+
"minPushLevel"
|
|
2252
2311
|
],
|
|
2253
|
-
"additionalProperties": false
|
|
2254
|
-
"description": "A request waiting on the caller's account key (GET /device-links/pending), as a device holding it reads it: enough to show its code, and to finish it once answered. The messages are the same password-authenticated exchange as a key check's, so the server can't read or test codes against them. holderState is the code's side of the exchange, sealed under the account key, so any of the account's devices can show the same code or finish the request."
|
|
2312
|
+
"additionalProperties": false
|
|
2255
2313
|
},
|
|
2256
|
-
"
|
|
2314
|
+
"SubscriptionPlan": {
|
|
2257
2315
|
"type": "object",
|
|
2258
2316
|
"properties": {
|
|
2259
|
-
"
|
|
2260
|
-
"type": "string"
|
|
2317
|
+
"name": {
|
|
2318
|
+
"type": "string",
|
|
2319
|
+
"description": "Display name, as every surface shows it."
|
|
2261
2320
|
},
|
|
2262
|
-
"
|
|
2263
|
-
"
|
|
2321
|
+
"monthlyPrice": {
|
|
2322
|
+
"type": [
|
|
2323
|
+
"number",
|
|
2324
|
+
"null"
|
|
2325
|
+
],
|
|
2326
|
+
"description": "Monthly price in US dollars: 0 for free, null when priced per customer."
|
|
2264
2327
|
}
|
|
2265
2328
|
},
|
|
2266
2329
|
"required": [
|
|
2267
|
-
"
|
|
2330
|
+
"name",
|
|
2331
|
+
"monthlyPrice"
|
|
2268
2332
|
],
|
|
2269
|
-
"additionalProperties": false
|
|
2270
|
-
"description": "The body of an API error response. `code` is there where the status alone doesn't say what went wrong."
|
|
2333
|
+
"additionalProperties": false
|
|
2271
2334
|
}
|
|
2272
2335
|
}
|
|
2273
2336
|
}
|