@empiricalrun/playwright-utils 0.63.0 → 0.63.1

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 (36) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/generated/api-worker-openapi.d.ts +596 -24
  3. package/dist/generated/api-worker-openapi.d.ts.map +1 -1
  4. package/dist/overlay-tests/cache.spec.js +31 -7
  5. package/dist/overlay-tests/click.spec.js +2 -7
  6. package/dist/overlay-tests/dismiss-mechanics.spec.d.ts +2 -0
  7. package/dist/overlay-tests/dismiss-mechanics.spec.d.ts.map +1 -0
  8. package/dist/overlay-tests/dismiss-mechanics.spec.js +59 -0
  9. package/dist/overlay-tests/dropdown.spec.d.ts +2 -0
  10. package/dist/overlay-tests/dropdown.spec.d.ts.map +1 -0
  11. package/dist/overlay-tests/dropdown.spec.js +53 -0
  12. package/dist/overlay-tests/fixtures.d.ts +3 -1
  13. package/dist/overlay-tests/fixtures.d.ts.map +1 -1
  14. package/dist/overlay-tests/fixtures.js +15 -0
  15. package/dist/overlay-tests/typesafe-hit-check.spec.d.ts +2 -0
  16. package/dist/overlay-tests/typesafe-hit-check.spec.d.ts.map +1 -0
  17. package/dist/overlay-tests/typesafe-hit-check.spec.js +57 -0
  18. package/dist/overlay-tests/typesafe.spec.d.ts +2 -0
  19. package/dist/overlay-tests/typesafe.spec.d.ts.map +1 -0
  20. package/dist/overlay-tests/typesafe.spec.js +86 -0
  21. package/dist/test/scripts/pw-locator-patch/actions/click.d.ts.map +1 -1
  22. package/dist/test/scripts/pw-locator-patch/actions/click.js +8 -0
  23. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/cache.d.ts +1 -1
  24. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/cache.d.ts.map +1 -1
  25. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/cache.js +9 -6
  26. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.d.ts +3 -0
  27. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.d.ts.map +1 -1
  28. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/index.js +13 -3
  29. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/typesafe.d.ts +38 -0
  30. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/typesafe.d.ts.map +1 -0
  31. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/typesafe.js +159 -0
  32. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.d.ts +3 -0
  33. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.d.ts.map +1 -1
  34. package/dist/test/scripts/pw-locator-patch/dismiss-overlays/utils.js +11 -0
  35. package/package.json +3 -3
  36. package/tsconfig.tsbuildinfo +1 -1
@@ -1558,6 +1558,30 @@ export interface paths {
1558
1558
  patch?: never;
1559
1559
  trace?: never;
1560
1560
  };
1561
+ "/api/files/{id}": {
1562
+ parameters: {
1563
+ query?: never;
1564
+ header?: never;
1565
+ path?: never;
1566
+ cookie?: never;
1567
+ };
1568
+ /**
1569
+ * Get a file
1570
+ * @description Returns one of the project's files by ID.
1571
+ */
1572
+ get: operations["getFile"];
1573
+ put?: never;
1574
+ post?: never;
1575
+ delete?: never;
1576
+ options?: never;
1577
+ head?: never;
1578
+ /**
1579
+ * Confirm a file upload
1580
+ * @description Marks a file `uploaded` after its body was PUT to `upload_url`. Checks the content is in storage and records its size. Safe to repeat.
1581
+ */
1582
+ patch: operations["updateFile"];
1583
+ trace?: never;
1584
+ };
1561
1585
  "/api/reporters": {
1562
1586
  parameters: {
1563
1587
  query?: never;
@@ -4514,6 +4538,66 @@ export interface paths {
4514
4538
  patch?: never;
4515
4539
  trace?: never;
4516
4540
  };
4541
+ "/api/notifications": {
4542
+ parameters: {
4543
+ query?: never;
4544
+ header?: never;
4545
+ path?: never;
4546
+ cookie?: never;
4547
+ };
4548
+ /**
4549
+ * List my notifications
4550
+ * @description Returns the signed-in user's unread notifications and their most recent read ones, limited to projects they can still access.
4551
+ */
4552
+ get: operations["listNotifications"];
4553
+ put?: never;
4554
+ post?: never;
4555
+ delete?: never;
4556
+ options?: never;
4557
+ head?: never;
4558
+ patch?: never;
4559
+ trace?: never;
4560
+ };
4561
+ "/api/notifications/{id}/read": {
4562
+ parameters: {
4563
+ query?: never;
4564
+ header?: never;
4565
+ path?: never;
4566
+ cookie?: never;
4567
+ };
4568
+ get?: never;
4569
+ put?: never;
4570
+ /**
4571
+ * Mark a notification read
4572
+ * @description Marks one of the signed-in user's notifications as read.
4573
+ */
4574
+ post: operations["markNotificationRead"];
4575
+ delete?: never;
4576
+ options?: never;
4577
+ head?: never;
4578
+ patch?: never;
4579
+ trace?: never;
4580
+ };
4581
+ "/api/notifications/read-all": {
4582
+ parameters: {
4583
+ query?: never;
4584
+ header?: never;
4585
+ path?: never;
4586
+ cookie?: never;
4587
+ };
4588
+ get?: never;
4589
+ put?: never;
4590
+ /**
4591
+ * Mark all my notifications read
4592
+ * @description Marks every unread notification of the signed-in user as read.
4593
+ */
4594
+ post: operations["markAllNotificationsRead"];
4595
+ delete?: never;
4596
+ options?: never;
4597
+ head?: never;
4598
+ patch?: never;
4599
+ trace?: never;
4600
+ };
4517
4601
  "/api/oauth/authorize-url": {
4518
4602
  parameters: {
4519
4603
  query?: never;
@@ -4534,6 +4618,26 @@ export interface paths {
4534
4618
  patch?: never;
4535
4619
  trace?: never;
4536
4620
  };
4621
+ "/api/oauth/clients/{client_id}": {
4622
+ parameters: {
4623
+ query?: never;
4624
+ header?: never;
4625
+ path?: never;
4626
+ cookie?: never;
4627
+ };
4628
+ /**
4629
+ * Get an app asking to access Empirical
4630
+ * @description Describes an OAuth client of Empirical's sign-in (e.g. an MCP client) for the consent screen: its self-chosen name, whether Empirical registered it, and where it receives tokens.
4631
+ */
4632
+ get: operations["getOAuthClient"];
4633
+ put?: never;
4634
+ post?: never;
4635
+ delete?: never;
4636
+ options?: never;
4637
+ head?: never;
4638
+ patch?: never;
4639
+ trace?: never;
4640
+ };
4537
4641
  "/api/onboarding/complete": {
4538
4642
  parameters: {
4539
4643
  query?: never;
@@ -5775,6 +5879,26 @@ export interface paths {
5775
5879
  patch?: never;
5776
5880
  trace?: never;
5777
5881
  };
5882
+ "/api/sandbox-snapshots/projects/{project_id}": {
5883
+ parameters: {
5884
+ query?: never;
5885
+ header?: never;
5886
+ path?: never;
5887
+ cookie?: never;
5888
+ };
5889
+ /**
5890
+ * ⚙️ List a project's sandbox snapshots
5891
+ * @description Returns the most recent sandbox snapshots for a project; used by sandbox-template CI to wait for a rebuild.
5892
+ */
5893
+ get: operations["listProjectSandboxSnapshots"];
5894
+ put?: never;
5895
+ post?: never;
5896
+ delete?: never;
5897
+ options?: never;
5898
+ head?: never;
5899
+ patch?: never;
5900
+ trace?: never;
5901
+ };
5778
5902
  "/api/sandbox-snapshots/rebuild": {
5779
5903
  parameters: {
5780
5904
  query?: never;
@@ -6105,6 +6229,30 @@ export interface paths {
6105
6229
  patch?: never;
6106
6230
  trace?: never;
6107
6231
  };
6232
+ "/api/users/me/announcements-seen": {
6233
+ parameters: {
6234
+ query?: never;
6235
+ header?: never;
6236
+ path?: never;
6237
+ cookie?: never;
6238
+ };
6239
+ /**
6240
+ * Get when the current user last saw announcements
6241
+ * @description Returns the time up to which the signed-in user has seen dashboard announcements, falling back to their signup time.
6242
+ */
6243
+ get: operations["getMyAnnouncementsSeen"];
6244
+ /**
6245
+ * Mark announcements as seen for the current user
6246
+ * @description Moves the signed-in user's announcement seen time forward to the given time, or to now.
6247
+ */
6248
+ put: operations["markMyAnnouncementsSeen"];
6249
+ post?: never;
6250
+ delete?: never;
6251
+ options?: never;
6252
+ head?: never;
6253
+ patch?: never;
6254
+ trace?: never;
6255
+ };
6108
6256
  "/api/users/me/memberships": {
6109
6257
  parameters: {
6110
6258
  query?: never;
@@ -8715,6 +8863,45 @@ export interface components {
8715
8863
  /** @description Current document title for this exact destination. */
8716
8864
  title?: string;
8717
8865
  };
8866
+ NotificationListResponse: {
8867
+ /** @description Response payload. */
8868
+ data: {
8869
+ /** @description Unread notifications (newest 100) followed by the most recent read ones. */
8870
+ notifications: components["schemas"]["Notification"][];
8871
+ /** @description Total unread notifications. */
8872
+ unread_count: number;
8873
+ };
8874
+ };
8875
+ Notification: {
8876
+ id: number;
8877
+ /** @enum {string} */
8878
+ kind: "chat_session_waiting" | "test_run";
8879
+ project_id: number;
8880
+ project_slug: string;
8881
+ /** @enum {string} */
8882
+ entity_type: "chat_session" | "test_run";
8883
+ entity_id: number;
8884
+ payload: {
8885
+ [key: string]: unknown;
8886
+ };
8887
+ created_at: string;
8888
+ read_at: string | null;
8889
+ resolved_at: string | null;
8890
+ };
8891
+ NotificationsReadAllResponse: {
8892
+ /** @description Response payload. */
8893
+ data: {
8894
+ /** @description Notifications newly marked read. */
8895
+ updated: number;
8896
+ };
8897
+ };
8898
+ NotificationReadResponse: {
8899
+ /** @description Response payload. */
8900
+ data: {
8901
+ id: number;
8902
+ read_at: string;
8903
+ };
8904
+ };
8718
8905
  OrgListResponse: {
8719
8906
  /** @description Response payload. */
8720
8907
  data: {
@@ -9553,6 +9740,8 @@ export interface components {
9553
9740
  * @enum {string}
9554
9741
  */
9555
9742
  base_template: "pi-sandbox";
9743
+ /** @description Only rebuild these projects. Projects without a snapshot for the template are skipped. */
9744
+ project_ids?: number[];
9556
9745
  };
9557
9746
  RebuildSandboxSnapshotsByTemplateRequest: {
9558
9747
  /**
@@ -10664,23 +10853,6 @@ export interface components {
10664
10853
  slack_thread_id: number;
10665
10854
  } | null;
10666
10855
  };
10667
- SlackSupportedAction: {
10668
- /**
10669
- * @description Add a button that opens this pull request for review.
10670
- * @enum {string}
10671
- */
10672
- type: "review_pr";
10673
- /** @description Pull request number in the authenticated project's repository. */
10674
- pr_number: number;
10675
- } | {
10676
- /**
10677
- * @description Add a button that lets an authorized Slack user merge this pull request.
10678
- * @enum {string}
10679
- */
10680
- type: "merge_pr";
10681
- /** @description Pull request number in the authenticated project's repository. */
10682
- pr_number: number;
10683
- };
10684
10856
  SlackAppInstallMutationResponse: {
10685
10857
  /** @description Whether the write succeeded. */
10686
10858
  success: boolean;
@@ -13178,6 +13350,7 @@ export interface components {
13178
13350
  job_type: "merge_reports";
13179
13351
  storage_bucket?: string;
13180
13352
  resume_run_from_shard?: number;
13353
+ teardown_shard_index?: number;
13181
13354
  } | null;
13182
13355
  };
13183
13356
  };
@@ -14964,6 +15137,20 @@ export interface components {
14964
15137
  is_super_admin: boolean;
14965
15138
  };
14966
15139
  };
15140
+ AnnouncementsSeenResponse: {
15141
+ /** @description Response payload. */
15142
+ data: {
15143
+ /** @description Announcements created at or before this time count as seen. Defaults to the user's signup time. */
15144
+ seen_at: string;
15145
+ };
15146
+ };
15147
+ MarkAnnouncementsSeenRequest: {
15148
+ /**
15149
+ * Format: date-time
15150
+ * @description Mark announcements up to this time as seen. Defaults to now; never moves the seen time backwards or past now.
15151
+ */
15152
+ seen_at?: string;
15153
+ };
14967
15154
  UserDetailResponse: {
14968
15155
  /** @description Response payload. */
14969
15156
  data: {
@@ -15011,6 +15198,15 @@ export interface components {
15011
15198
  mime_type: string | null;
15012
15199
  /** @description File size in bytes, when known. */
15013
15200
  size_bytes: number | null;
15201
+ /**
15202
+ * @description `pending` until the upload to `upload_url` is confirmed with `PATCH /api/files/{id}`.
15203
+ * @enum {string}
15204
+ */
15205
+ status: "pending" | "uploaded";
15206
+ /** @description Chat session the file came from, if an agent created it. */
15207
+ origin_chat_session_id: number | null;
15208
+ /** @description Tool call that produced the file, when known. */
15209
+ origin_tool_call_id: string | null;
15014
15210
  /** @description ISO 8601 creation time. */
15015
15211
  created_at: string;
15016
15212
  };
@@ -15032,6 +15228,21 @@ export interface components {
15032
15228
  mime_type: string;
15033
15229
  /** @description File size in bytes. */
15034
15230
  size_bytes?: number;
15231
+ /** @description Tool call that produced the file, when an agent uploads it. The chat session is taken from the caller's credentials. */
15232
+ origin_tool_call_id?: string;
15233
+ };
15234
+ FileResponse: {
15235
+ /** @description Response payload. */
15236
+ data: {
15237
+ file: components["schemas"]["File"];
15238
+ };
15239
+ };
15240
+ UpdateFileRequest: {
15241
+ /**
15242
+ * @description Confirms the upload to `upload_url` finished. Fails if the file content is not in storage.
15243
+ * @enum {string}
15244
+ */
15245
+ status: "uploaded";
15035
15246
  };
15036
15247
  ImportLoomFileResponse: {
15037
15248
  /** @description Response payload. */
@@ -18212,8 +18423,21 @@ export interface operations {
18212
18423
  "application/json": {
18213
18424
  /** @description Markdown message body; not Slack's text field. */
18214
18425
  markdown: string;
18215
- /** @description Actions the message intentionally offers. Omit this field for informational messages, including merged or closed PR updates. */
18216
- supported_actions?: components["schemas"]["SlackSupportedAction"][];
18426
+ /** @description Agent-defined buttons; each requires exactly one of input or url. Input choices are single-use for the entire message: the first authorized selection removes all input buttons and publicly records who chose what. URL buttons remain available and never wake the agent. Selection requests an operation; the agent must report its outcome separately. Omit when no buttons are needed. */
18427
+ actions?: ({
18428
+ /** @description Button text shown to the user. */
18429
+ label: string;
18430
+ /** @description Text sent to this message's originating agent when selected. Supply enough context to act on it. */
18431
+ input: string;
18432
+ } | {
18433
+ /** @description Button text shown to the user. */
18434
+ label: string;
18435
+ /**
18436
+ * Format: uri
18437
+ * @description HTTP(S) destination opened by this repeatable navigation button. Does not send input to the agent or consume the message's choices.
18438
+ */
18439
+ url: string;
18440
+ })[];
18217
18441
  /** @description Slack channel or existing DM channel ID. */
18218
18442
  channel: string;
18219
18443
  /** @description Root timestamp of the thread to reply to. Omit for a top-level post. */
@@ -18223,8 +18447,21 @@ export interface operations {
18223
18447
  } | {
18224
18448
  /** @description Markdown message body; not Slack's text field. */
18225
18449
  markdown: string;
18226
- /** @description Actions the message intentionally offers. Omit this field for informational messages, including merged or closed PR updates. */
18227
- supported_actions?: components["schemas"]["SlackSupportedAction"][];
18450
+ /** @description Agent-defined buttons; each requires exactly one of input or url. Input choices are single-use for the entire message: the first authorized selection removes all input buttons and publicly records who chose what. URL buttons remain available and never wake the agent. Selection requests an operation; the agent must report its outcome separately. Omit when no buttons are needed. */
18451
+ actions?: ({
18452
+ /** @description Button text shown to the user. */
18453
+ label: string;
18454
+ /** @description Text sent to this message's originating agent when selected. Supply enough context to act on it. */
18455
+ input: string;
18456
+ } | {
18457
+ /** @description Button text shown to the user. */
18458
+ label: string;
18459
+ /**
18460
+ * Format: uri
18461
+ * @description HTTP(S) destination opened by this repeatable navigation button. Does not send input to the agent or consume the message's choices.
18462
+ */
18463
+ url: string;
18464
+ })[];
18228
18465
  /** @description Recipient Slack user ID. Creates a new DM root; in-thread replies return to the sending session. */
18229
18466
  slack_user_id: string;
18230
18467
  /** @description Required for recipient-addressed sends. Each send creates a new DM root; root creation is not retry-safe if delivery or registration is uncertain. */
@@ -18232,8 +18469,21 @@ export interface operations {
18232
18469
  } | {
18233
18470
  /** @description Markdown message body; not Slack's text field. */
18234
18471
  markdown: string;
18235
- /** @description Actions the message intentionally offers. Omit this field for informational messages, including merged or closed PR updates. */
18236
- supported_actions?: components["schemas"]["SlackSupportedAction"][];
18472
+ /** @description Agent-defined buttons; each requires exactly one of input or url. Input choices are single-use for the entire message: the first authorized selection removes all input buttons and publicly records who chose what. URL buttons remain available and never wake the agent. Selection requests an operation; the agent must report its outcome separately. Omit when no buttons are needed. */
18473
+ actions?: ({
18474
+ /** @description Button text shown to the user. */
18475
+ label: string;
18476
+ /** @description Text sent to this message's originating agent when selected. Supply enough context to act on it. */
18477
+ input: string;
18478
+ } | {
18479
+ /** @description Button text shown to the user. */
18480
+ label: string;
18481
+ /**
18482
+ * Format: uri
18483
+ * @description HTTP(S) destination opened by this repeatable navigation button. Does not send input to the agent or consume the message's choices.
18484
+ */
18485
+ url: string;
18486
+ })[];
18237
18487
  /**
18238
18488
  * Format: uuid
18239
18489
  * @description Recipient Empirical UUID with one valid linked Slack account. Alternative to slack_user_id.
@@ -19181,6 +19431,8 @@ export interface operations {
19181
19431
  page?: number;
19182
19432
  /** @description Items per page (max 100). */
19183
19433
  per_page?: number;
19434
+ /** @description Only files created by this chat session. */
19435
+ origin_chat_session_id?: number;
19184
19436
  };
19185
19437
  header?: never;
19186
19438
  path?: never;
@@ -19241,6 +19493,92 @@ export interface operations {
19241
19493
  };
19242
19494
  };
19243
19495
  };
19496
+ getFile: {
19497
+ parameters: {
19498
+ query?: never;
19499
+ header?: never;
19500
+ path: {
19501
+ /** @description File ID. */
19502
+ id: number;
19503
+ };
19504
+ cookie?: never;
19505
+ };
19506
+ requestBody?: never;
19507
+ responses: {
19508
+ /** @description The file. */
19509
+ 200: {
19510
+ headers: {
19511
+ [name: string]: unknown;
19512
+ };
19513
+ content: {
19514
+ "application/json": components["schemas"]["FileResponse"];
19515
+ };
19516
+ };
19517
+ /** @description File not found in this project. */
19518
+ 404: {
19519
+ headers: {
19520
+ [name: string]: unknown;
19521
+ };
19522
+ content: {
19523
+ "application/json": components["schemas"]["ErrorResponse"];
19524
+ };
19525
+ };
19526
+ };
19527
+ };
19528
+ updateFile: {
19529
+ parameters: {
19530
+ query?: never;
19531
+ header?: never;
19532
+ path: {
19533
+ /** @description File ID. */
19534
+ id: number;
19535
+ };
19536
+ cookie?: never;
19537
+ };
19538
+ requestBody?: {
19539
+ content: {
19540
+ "application/json": components["schemas"]["UpdateFileRequest"];
19541
+ };
19542
+ };
19543
+ responses: {
19544
+ /** @description The updated file. */
19545
+ 200: {
19546
+ headers: {
19547
+ [name: string]: unknown;
19548
+ };
19549
+ content: {
19550
+ "application/json": components["schemas"]["FileResponse"];
19551
+ };
19552
+ };
19553
+ /** @description Invalid request. */
19554
+ 400: {
19555
+ headers: {
19556
+ [name: string]: unknown;
19557
+ };
19558
+ content: {
19559
+ "application/json": components["schemas"]["ErrorResponse"];
19560
+ };
19561
+ };
19562
+ /** @description File not found in this project. */
19563
+ 404: {
19564
+ headers: {
19565
+ [name: string]: unknown;
19566
+ };
19567
+ content: {
19568
+ "application/json": components["schemas"]["ErrorResponse"];
19569
+ };
19570
+ };
19571
+ /** @description The file content has not been uploaded yet. */
19572
+ 409: {
19573
+ headers: {
19574
+ [name: string]: unknown;
19575
+ };
19576
+ content: {
19577
+ "application/json": components["schemas"]["ErrorResponse"];
19578
+ };
19579
+ };
19580
+ };
19581
+ };
19244
19582
  listReporters: {
19245
19583
  parameters: {
19246
19584
  query?: never;
@@ -27545,6 +27883,108 @@ export interface operations {
27545
27883
  };
27546
27884
  };
27547
27885
  };
27886
+ listNotifications: {
27887
+ parameters: {
27888
+ query?: {
27889
+ /** @description Maximum read notifications to return. Default 20. */
27890
+ read_limit?: number;
27891
+ };
27892
+ header?: never;
27893
+ path?: never;
27894
+ cookie?: never;
27895
+ };
27896
+ requestBody?: never;
27897
+ responses: {
27898
+ /** @description The user's notifications. */
27899
+ 200: {
27900
+ headers: {
27901
+ [name: string]: unknown;
27902
+ };
27903
+ content: {
27904
+ "application/json": components["schemas"]["NotificationListResponse"];
27905
+ };
27906
+ };
27907
+ /** @description Only signed-in users have notifications. */
27908
+ 403: {
27909
+ headers: {
27910
+ [name: string]: unknown;
27911
+ };
27912
+ content: {
27913
+ "application/json": components["schemas"]["ErrorResponse"];
27914
+ };
27915
+ };
27916
+ };
27917
+ };
27918
+ markNotificationRead: {
27919
+ parameters: {
27920
+ query?: never;
27921
+ header?: never;
27922
+ path: {
27923
+ /** @description Notification ID. */
27924
+ id: number;
27925
+ };
27926
+ cookie?: never;
27927
+ };
27928
+ requestBody?: never;
27929
+ responses: {
27930
+ /** @description The notification's read time. */
27931
+ 200: {
27932
+ headers: {
27933
+ [name: string]: unknown;
27934
+ };
27935
+ content: {
27936
+ "application/json": components["schemas"]["NotificationReadResponse"];
27937
+ };
27938
+ };
27939
+ /** @description Only signed-in users have notifications. */
27940
+ 403: {
27941
+ headers: {
27942
+ [name: string]: unknown;
27943
+ };
27944
+ content: {
27945
+ "application/json": components["schemas"]["ErrorResponse"];
27946
+ };
27947
+ };
27948
+ /** @description Notification not found. */
27949
+ 404: {
27950
+ headers: {
27951
+ [name: string]: unknown;
27952
+ };
27953
+ content: {
27954
+ "application/json": components["schemas"]["ErrorResponse"];
27955
+ };
27956
+ };
27957
+ };
27958
+ };
27959
+ markAllNotificationsRead: {
27960
+ parameters: {
27961
+ query?: never;
27962
+ header?: never;
27963
+ path?: never;
27964
+ cookie?: never;
27965
+ };
27966
+ requestBody?: never;
27967
+ responses: {
27968
+ /** @description How many notifications were marked read. */
27969
+ 200: {
27970
+ headers: {
27971
+ [name: string]: unknown;
27972
+ };
27973
+ content: {
27974
+ "application/json": components["schemas"]["NotificationsReadAllResponse"];
27975
+ };
27976
+ };
27977
+ /** @description Only signed-in users have notifications. */
27978
+ 403: {
27979
+ headers: {
27980
+ [name: string]: unknown;
27981
+ };
27982
+ content: {
27983
+ "application/json": components["schemas"]["ErrorResponse"];
27984
+ };
27985
+ };
27986
+ };
27987
+ };
27548
27988
  getOAuthAuthorizeUrl: {
27549
27989
  parameters: {
27550
27990
  query: {
@@ -27597,6 +28037,53 @@ export interface operations {
27597
28037
  };
27598
28038
  };
27599
28039
  };
28040
+ getOAuthClient: {
28041
+ parameters: {
28042
+ query?: never;
28043
+ header?: never;
28044
+ path: {
28045
+ /** @description OAuth client ID. */
28046
+ client_id: string;
28047
+ };
28048
+ cookie?: never;
28049
+ };
28050
+ requestBody?: never;
28051
+ responses: {
28052
+ /** @description The OAuth client. */
28053
+ 200: {
28054
+ headers: {
28055
+ [name: string]: unknown;
28056
+ };
28057
+ content: {
28058
+ "application/json": {
28059
+ data: {
28060
+ client_id: string;
28061
+ /** @description Name the app gave itself. */
28062
+ name: string;
28063
+ /**
28064
+ * @description dynamic: the app registered itself and is unverified. manual: registered by Empirical.
28065
+ * @enum {string}
28066
+ */
28067
+ registration_type: "dynamic" | "manual";
28068
+ /** @description Hosts the app receives access tokens on. */
28069
+ redirect_hosts: string[];
28070
+ /** @description Whether any redirect goes to a loopback address, i.e. an app on the user's own computer. */
28071
+ redirects_to_this_device: boolean;
28072
+ };
28073
+ };
28074
+ };
28075
+ };
28076
+ /** @description No OAuth client with this ID. */
28077
+ 404: {
28078
+ headers: {
28079
+ [name: string]: unknown;
28080
+ };
28081
+ content: {
28082
+ "application/json": components["schemas"]["ErrorResponse"];
28083
+ };
28084
+ };
28085
+ };
28086
+ };
27600
28087
  completeOnboarding: {
27601
28088
  parameters: {
27602
28089
  query?: never;
@@ -30796,6 +31283,29 @@ export interface operations {
30796
31283
  };
30797
31284
  };
30798
31285
  };
31286
+ listProjectSandboxSnapshots: {
31287
+ parameters: {
31288
+ query?: never;
31289
+ header?: never;
31290
+ path: {
31291
+ /** @description Project ID (positive integer). */
31292
+ project_id: string;
31293
+ };
31294
+ cookie?: never;
31295
+ };
31296
+ requestBody?: never;
31297
+ responses: {
31298
+ /** @description The project's sandbox snapshots. */
31299
+ 200: {
31300
+ headers: {
31301
+ [name: string]: unknown;
31302
+ };
31303
+ content: {
31304
+ "application/json": components["schemas"]["SandboxSnapshotListResponse"];
31305
+ };
31306
+ };
31307
+ };
31308
+ };
30799
31309
  rebuildSandboxSnapshots: {
30800
31310
  parameters: {
30801
31311
  query?: never;
@@ -31413,7 +31923,7 @@ export interface operations {
31413
31923
  }[];
31414
31924
  /** @description Directory prefix (key prefix) within the bucket. */
31415
31925
  destination_dir: string;
31416
- /** @description Ignored. Uploads always go to `dashboard-uploads`. */
31926
+ /** @description Ignored. Uploads always go to the files bucket. */
31417
31927
  bucket?: string;
31418
31928
  };
31419
31929
  };
@@ -31640,6 +32150,68 @@ export interface operations {
31640
32150
  };
31641
32151
  };
31642
32152
  };
32153
+ getMyAnnouncementsSeen: {
32154
+ parameters: {
32155
+ query?: never;
32156
+ header?: never;
32157
+ path?: never;
32158
+ cookie?: never;
32159
+ };
32160
+ requestBody?: never;
32161
+ responses: {
32162
+ /** @description Announcement seen time. */
32163
+ 200: {
32164
+ headers: {
32165
+ [name: string]: unknown;
32166
+ };
32167
+ content: {
32168
+ "application/json": components["schemas"]["AnnouncementsSeenResponse"];
32169
+ };
32170
+ };
32171
+ /** @description User not found. */
32172
+ 404: {
32173
+ headers: {
32174
+ [name: string]: unknown;
32175
+ };
32176
+ content: {
32177
+ "application/json": components["schemas"]["ErrorResponse"];
32178
+ };
32179
+ };
32180
+ };
32181
+ };
32182
+ markMyAnnouncementsSeen: {
32183
+ parameters: {
32184
+ query?: never;
32185
+ header?: never;
32186
+ path?: never;
32187
+ cookie?: never;
32188
+ };
32189
+ requestBody?: {
32190
+ content: {
32191
+ "application/json": components["schemas"]["MarkAnnouncementsSeenRequest"];
32192
+ };
32193
+ };
32194
+ responses: {
32195
+ /** @description Updated seen time. */
32196
+ 200: {
32197
+ headers: {
32198
+ [name: string]: unknown;
32199
+ };
32200
+ content: {
32201
+ "application/json": components["schemas"]["AnnouncementsSeenResponse"];
32202
+ };
32203
+ };
32204
+ /** @description User not found. */
32205
+ 404: {
32206
+ headers: {
32207
+ [name: string]: unknown;
32208
+ };
32209
+ content: {
32210
+ "application/json": components["schemas"]["ErrorResponse"];
32211
+ };
32212
+ };
32213
+ };
32214
+ };
31643
32215
  createMyMemberships: {
31644
32216
  parameters: {
31645
32217
  query?: never;