@productcraft/platform-auth 0.0.13 → 0.1.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 CHANGED
@@ -22,9 +22,8 @@ The two are easy to confuse because both have "auth" in the name. Platform-Auth
22
22
  ```ts
23
23
  import { PlatformAuth } from "@productcraft/platform-auth";
24
24
 
25
- const platformAuth = new PlatformAuth({
26
- auth: { type: "apiKey", key: process.env.PCFT_KEY! },
27
- });
25
+ // Reads PRODUCTCRAFT_API_KEY from the environment
26
+ const platformAuth = new PlatformAuth();
28
27
 
29
28
  // Resolve the caller's effective policy + enabled services for a workspace
30
29
  const { data } = await platformAuth.client.GET(
@@ -48,10 +47,24 @@ The `client` is an [`openapi-fetch`](https://openapi-ts.dev/openapi-fetch/) inst
48
47
 
49
48
  PAKs are workspace-scoped credentials — they read + introspect freely against the workspace they're bound to but cannot mint another PAK or reshape the human-admin surface. Cross-workspace probes by a PAK return the uniform non-member shape (no slug → UUID oracle).
50
49
 
50
+ ## Credentials from the environment
51
+
52
+ Server-side, omit `auth` and the client reads your workspace key from the environment:
53
+
54
+ ```bash
55
+ # .env
56
+ PRODUCTCRAFT_API_KEY=pcft_live_...
57
+ ```
58
+
59
+ - An explicit `auth` always wins over the environment.
60
+ - Hosts are never read from the environment. Override them in code with `baseUrl`.
61
+ - This is a server-only fallback. Never put a key in `NEXT_PUBLIC_*` or any other variable a bundler inlines into browser code.
62
+
51
63
  ## Configuration
52
64
 
53
65
  ```ts
54
66
  new PlatformAuth({
67
+ // Omit to use PRODUCTCRAFT_API_KEY from the environment
55
68
  auth: { type: "apiKey", key: "pcft_live_..." }
56
69
  | { type: "bearer", token: "eyJ..." }
57
70
  | { type: "cookie", value: "auth_token=..." },
package/dist/index.d.cts CHANGED
@@ -319,6 +319,54 @@ interface paths {
319
319
  patch?: never;
320
320
  trace?: never;
321
321
  };
322
+ "/v1/me/hidden-guides": {
323
+ parameters: {
324
+ query?: never;
325
+ header?: never;
326
+ path?: never;
327
+ cookie?: never;
328
+ };
329
+ /**
330
+ * List the getting-started guides the caller has hidden.
331
+ * @description Every guide the caller has hidden in the console, newest first. Hiding is presentation only: the setup status behind a guide is unchanged.
332
+ */
333
+ get: operations["HiddenGuidesController_list"];
334
+ put?: never;
335
+ post?: never;
336
+ /**
337
+ * Show every getting-started guide again.
338
+ * @description Removes every hidden guide for the caller, `all` included. Idempotent.
339
+ */
340
+ delete: operations["HiddenGuidesController_showAll"];
341
+ options?: never;
342
+ head?: never;
343
+ patch?: never;
344
+ trace?: never;
345
+ };
346
+ "/v1/me/hidden-guides/{key}": {
347
+ parameters: {
348
+ query?: never;
349
+ header?: never;
350
+ path?: never;
351
+ cookie?: never;
352
+ };
353
+ get?: never;
354
+ /**
355
+ * Hide a getting-started guide for the caller.
356
+ * @description Idempotent: hiding a guide that is already hidden returns it unchanged, with its first `hidden_at`. At most 200 are kept; hiding one more drops the oldest.
357
+ */
358
+ put: operations["HiddenGuidesController_hide"];
359
+ post?: never;
360
+ /**
361
+ * Show a hidden getting-started guide again.
362
+ * @description Idempotent: showing a guide that is not hidden is a no-op.
363
+ */
364
+ delete: operations["HiddenGuidesController_show"];
365
+ options?: never;
366
+ head?: never;
367
+ patch?: never;
368
+ trace?: never;
369
+ };
322
370
  "/v1/me/profile": {
323
371
  parameters: {
324
372
  query?: never;
@@ -345,7 +393,7 @@ interface paths {
345
393
  };
346
394
  /**
347
395
  * OAuth 2.1 authorization endpoint
348
- * @description Requires PKCE with `code_challenge_method=S256`; `plain` and a missing challenge are both rejected. `redirect_uri` must match a registered URI exactly, with only the RFC 8252 §7.3 loopback port relaxation. Responds 302 either to sign-in (no session) or to the consent screen.
396
+ * @description Requires PKCE with `code_challenge_method=S256`; a session that has been signed out counts as no session; `plain` and a missing challenge are both rejected. `redirect_uri` must match a registered URI exactly, with only the RFC 8252 §7.3 loopback port relaxation. Responds 302 either to sign-in (no session) or to the consent screen.
349
397
  */
350
398
  get: operations["OAuthAuthorizeController_authorize"];
351
399
  put?: never;
@@ -1159,11 +1207,11 @@ interface paths {
1159
1207
  get: operations["WorkspacePolicyController_get"];
1160
1208
  put?: never;
1161
1209
  post?: never;
1162
- /** Delete a managed policy. Cascades: API keys lose the binding (deny-all if no other bindings remain); roles fall back to their inline policy column. Cookie/JWT only. */
1210
+ /** Delete a managed policy. Cascades: API keys lose the binding (deny-all if no other bindings remain); roles fall back to their inline policy column. Owners and admins; a policy bound to a role, or a preset policy, only an owner can delete. Cookie/JWT only. */
1163
1211
  delete: operations["WorkspacePolicyController_delete"];
1164
1212
  options?: never;
1165
1213
  head?: never;
1166
- /** Update a managed policy. Cookie/JWT only — policy authoring is a human-admin surface. */
1214
+ /** Update a managed policy. Owners and admins; a policy bound to a role, or a preset policy, only an owner can edit. Cookie/JWT only — policy authoring is a human-admin surface. */
1167
1215
  patch: operations["WorkspacePolicyController_update"];
1168
1216
  trace?: never;
1169
1217
  };
@@ -1929,6 +1977,22 @@ interface components {
1929
1977
  */
1930
1978
  message: string;
1931
1979
  };
1980
+ HiddenGuideDto: {
1981
+ /**
1982
+ * Format: date-time
1983
+ * @description When the guide was first hidden.
1984
+ */
1985
+ hidden_at: string;
1986
+ /**
1987
+ * @description The guide: a surface name, optionally followed by `:` and the id of the resource the guide belongs to. The console uses `dashboard:<workspace id>`, `auth_app:<app id>`, `waitlist_quickstart:<waitlist id>`, `waitlist_steps:<workspace id>`, `community_quickstart:<community id>`, `trawl_quickstart:<workspace id>`, `mail_quickstart:<workspace id>`, and `all` for "never show getting-started guides".
1988
+ * @example auth_app:3f2c9a4e-8b1d-4c6e-9f2a-1b2c3d4e5f60
1989
+ */
1990
+ key: string;
1991
+ };
1992
+ HiddenGuidesDto: {
1993
+ /** @description Every guide the caller has hidden, newest first. A bounded set (at most 200; hiding one more drops the oldest), so it is returned whole rather than paginated. */
1994
+ guides: components["schemas"]["HiddenGuideDto"][];
1995
+ };
1932
1996
  IntrospectAccountDto: {
1933
1997
  /** @description Public HTTPS URL of the uploaded avatar, or null when no avatar is set. */
1934
1998
  avatar_url: string | null;
@@ -1966,6 +2030,7 @@ interface components {
1966
2030
  };
1967
2031
  IntrospectResponseDto: {
1968
2032
  account?: components["schemas"]["IntrospectAccountDto"] | null;
2033
+ /** @description False for an anonymous caller and for an access token whose session has been signed out. */
1969
2034
  is_authenticated: boolean;
1970
2035
  principal?: components["schemas"]["IntrospectPrincipalDto"] | null;
1971
2036
  workspaces?: components["schemas"]["IntrospectWorkspaceListItemDto"][];
@@ -2112,9 +2177,31 @@ interface components {
2112
2177
  */
2113
2178
  refresh_token: string;
2114
2179
  };
2180
+ ManagedPolicyDeletedResponseDto: {
2181
+ /**
2182
+ * @description Live API keys that were bound to the policy and lost the binding. A key with no binding left falls back to deny-all.
2183
+ * @example 3
2184
+ */
2185
+ bound_key_count: number;
2186
+ /**
2187
+ * @example true
2188
+ * @enum {number}
2189
+ */
2190
+ deleted: true;
2191
+ /**
2192
+ * Format: uuid
2193
+ * @description The deleted policy.
2194
+ */
2195
+ id: string;
2196
+ };
2115
2197
  ManagedPolicyDetailResponseDto: {
2116
2198
  /** @description Counts of currently-bound consumers — surface this in delete-confirm UX so the operator sees cascade impact. */
2117
2199
  binding_count: components["schemas"]["PolicyBindingCountDto"];
2200
+ /**
2201
+ * @description Live (not revoked, not expired) API keys bound to this policy — the keys a save or delete affects. Show it in the confirm step before saving or deleting.
2202
+ * @example 3
2203
+ */
2204
+ bound_key_count: number;
2118
2205
  /** Format: date-time */
2119
2206
  created_at: string;
2120
2207
  /**
@@ -3426,7 +3513,7 @@ interface operations {
3426
3513
  "application/json": components["schemas"]["IntrospectResponseDto"];
3427
3514
  };
3428
3515
  };
3429
- /** @description Rate limited: more than 60 requests/min from this IP (default bucket). Anonymous callers otherwise get 200 with `is_authenticated: false`, never 401. */
3516
+ /** @description Rate limited: more than 60 requests/min from this IP (default bucket). Anonymous callers, and callers whose session has been signed out, otherwise get 200 with `is_authenticated: false`, never 401. */
3430
3517
  429: {
3431
3518
  headers: {
3432
3519
  [name: string]: unknown;
@@ -3486,7 +3573,7 @@ interface operations {
3486
3573
  "application/json": components["schemas"]["IntrospectWorkspaceResponseDto"];
3487
3574
  };
3488
3575
  };
3489
- /** @description Missing or invalid session. */
3576
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
3490
3577
  401: {
3491
3578
  headers: {
3492
3579
  [name: string]: unknown;
@@ -3617,6 +3704,177 @@ interface operations {
3617
3704
  };
3618
3705
  };
3619
3706
  };
3707
+ HiddenGuidesController_list: {
3708
+ parameters: {
3709
+ query?: never;
3710
+ header?: never;
3711
+ path?: never;
3712
+ cookie?: never;
3713
+ };
3714
+ requestBody?: never;
3715
+ responses: {
3716
+ 200: {
3717
+ headers: {
3718
+ [name: string]: unknown;
3719
+ };
3720
+ content: {
3721
+ "application/json": components["schemas"]["HiddenGuidesDto"];
3722
+ };
3723
+ };
3724
+ /** @description No session. */
3725
+ 401: {
3726
+ headers: {
3727
+ [name: string]: unknown;
3728
+ };
3729
+ content: {
3730
+ "application/json": components["schemas"]["ErrorResponseDto"];
3731
+ };
3732
+ };
3733
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3734
+ 403: {
3735
+ headers: {
3736
+ [name: string]: unknown;
3737
+ };
3738
+ content: {
3739
+ "application/json": components["schemas"]["ErrorResponseDto"];
3740
+ };
3741
+ };
3742
+ };
3743
+ };
3744
+ HiddenGuidesController_showAll: {
3745
+ parameters: {
3746
+ query?: never;
3747
+ header?: never;
3748
+ path?: never;
3749
+ cookie?: never;
3750
+ };
3751
+ requestBody?: never;
3752
+ responses: {
3753
+ /** @description Every guide shows again. */
3754
+ 204: {
3755
+ headers: {
3756
+ [name: string]: unknown;
3757
+ };
3758
+ content?: never;
3759
+ };
3760
+ /** @description No session. */
3761
+ 401: {
3762
+ headers: {
3763
+ [name: string]: unknown;
3764
+ };
3765
+ content: {
3766
+ "application/json": components["schemas"]["ErrorResponseDto"];
3767
+ };
3768
+ };
3769
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3770
+ 403: {
3771
+ headers: {
3772
+ [name: string]: unknown;
3773
+ };
3774
+ content: {
3775
+ "application/json": components["schemas"]["ErrorResponseDto"];
3776
+ };
3777
+ };
3778
+ };
3779
+ };
3780
+ HiddenGuidesController_hide: {
3781
+ parameters: {
3782
+ query?: never;
3783
+ header?: never;
3784
+ path: {
3785
+ /** @description The guide: a surface name, optionally followed by `:` and a resource id, e.g. `dashboard:<workspace id>` or `all`. */
3786
+ key: string;
3787
+ };
3788
+ cookie?: never;
3789
+ };
3790
+ requestBody?: never;
3791
+ responses: {
3792
+ /** @description The guide is hidden. */
3793
+ 200: {
3794
+ headers: {
3795
+ [name: string]: unknown;
3796
+ };
3797
+ content: {
3798
+ "application/json": components["schemas"]["HiddenGuideDto"];
3799
+ };
3800
+ };
3801
+ /** @description The key is not a valid guide key. */
3802
+ 400: {
3803
+ headers: {
3804
+ [name: string]: unknown;
3805
+ };
3806
+ content: {
3807
+ "application/json": components["schemas"]["ErrorResponseDto"];
3808
+ };
3809
+ };
3810
+ /** @description No session. */
3811
+ 401: {
3812
+ headers: {
3813
+ [name: string]: unknown;
3814
+ };
3815
+ content: {
3816
+ "application/json": components["schemas"]["ErrorResponseDto"];
3817
+ };
3818
+ };
3819
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3820
+ 403: {
3821
+ headers: {
3822
+ [name: string]: unknown;
3823
+ };
3824
+ content: {
3825
+ "application/json": components["schemas"]["ErrorResponseDto"];
3826
+ };
3827
+ };
3828
+ };
3829
+ };
3830
+ HiddenGuidesController_show: {
3831
+ parameters: {
3832
+ query?: never;
3833
+ header?: never;
3834
+ path: {
3835
+ /** @description The guide: a surface name, optionally followed by `:` and a resource id, e.g. `dashboard:<workspace id>` or `all`. */
3836
+ key: string;
3837
+ };
3838
+ cookie?: never;
3839
+ };
3840
+ requestBody?: never;
3841
+ responses: {
3842
+ /** @description The guide shows again (or was not hidden). */
3843
+ 204: {
3844
+ headers: {
3845
+ [name: string]: unknown;
3846
+ };
3847
+ content?: never;
3848
+ };
3849
+ /** @description The key is not a valid guide key. */
3850
+ 400: {
3851
+ headers: {
3852
+ [name: string]: unknown;
3853
+ };
3854
+ content: {
3855
+ "application/json": components["schemas"]["ErrorResponseDto"];
3856
+ };
3857
+ };
3858
+ /** @description No session. */
3859
+ 401: {
3860
+ headers: {
3861
+ [name: string]: unknown;
3862
+ };
3863
+ content: {
3864
+ "application/json": components["schemas"]["ErrorResponseDto"];
3865
+ };
3866
+ };
3867
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3868
+ 403: {
3869
+ headers: {
3870
+ [name: string]: unknown;
3871
+ };
3872
+ content: {
3873
+ "application/json": components["schemas"]["ErrorResponseDto"];
3874
+ };
3875
+ };
3876
+ };
3877
+ };
3620
3878
  MeController_updateProfile: {
3621
3879
  parameters: {
3622
3880
  query?: never;
@@ -3807,7 +4065,7 @@ interface operations {
3807
4065
  "application/json": components["schemas"]["ConsentRequestDto"];
3808
4066
  };
3809
4067
  };
3810
- /** @description Missing, invalid or expired bearer token. */
4068
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
3811
4069
  401: {
3812
4070
  headers: {
3813
4071
  [name: string]: unknown;
@@ -3877,7 +4135,7 @@ interface operations {
3877
4135
  "application/json": components["schemas"]["ErrorResponseDto"];
3878
4136
  };
3879
4137
  };
3880
- /** @description Missing, invalid or expired bearer token. */
4138
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
3881
4139
  401: {
3882
4140
  headers: {
3883
4141
  [name: string]: unknown;
@@ -4439,7 +4697,7 @@ interface operations {
4439
4697
  };
4440
4698
  content?: never;
4441
4699
  };
4442
- /** @description Missing, invalid or expired bearer token. */
4700
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
4443
4701
  401: {
4444
4702
  headers: {
4445
4703
  [name: string]: unknown;
@@ -4766,7 +5024,7 @@ interface operations {
4766
5024
  "application/json": components["schemas"]["ErrorResponseDto"];
4767
5025
  };
4768
5026
  };
4769
- /** @description Missing or invalid session. */
5027
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
4770
5028
  401: {
4771
5029
  headers: {
4772
5030
  [name: string]: unknown;
@@ -4950,7 +5208,7 @@ interface operations {
4950
5208
  };
4951
5209
  content?: never;
4952
5210
  };
4953
- /** @description Missing, invalid or expired bearer token. */
5211
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
4954
5212
  401: {
4955
5213
  headers: {
4956
5214
  [name: string]: unknown;
@@ -5116,7 +5374,7 @@ interface operations {
5116
5374
  "application/json": components["schemas"]["ErrorResponseDto"];
5117
5375
  };
5118
5376
  };
5119
- /** @description Missing, malformed or invalid session. */
5377
+ /** @description Missing, malformed or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
5120
5378
  401: {
5121
5379
  headers: {
5122
5380
  [name: string]: unknown;
@@ -5225,7 +5483,7 @@ interface operations {
5225
5483
  "application/json": components["schemas"]["ErrorResponseDto"];
5226
5484
  };
5227
5485
  };
5228
- /** @description Missing, malformed or invalid session. */
5486
+ /** @description Missing, malformed or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
5229
5487
  401: {
5230
5488
  headers: {
5231
5489
  [name: string]: unknown;
@@ -5343,7 +5601,7 @@ interface operations {
5343
5601
  "application/json": components["schemas"]["ErrorResponseDto"];
5344
5602
  };
5345
5603
  };
5346
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
5604
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
5347
5605
  401: {
5348
5606
  headers: {
5349
5607
  [name: string]: unknown;
@@ -5405,7 +5663,7 @@ interface operations {
5405
5663
  "application/json": components["schemas"]["ErrorResponseDto"];
5406
5664
  };
5407
5665
  };
5408
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
5666
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
5409
5667
  401: {
5410
5668
  headers: {
5411
5669
  [name: string]: unknown;
@@ -5477,7 +5735,7 @@ interface operations {
5477
5735
  "application/json": components["schemas"]["ErrorResponseDto"];
5478
5736
  };
5479
5737
  };
5480
- /** @description Missing, invalid or expired bearer token. */
5738
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
5481
5739
  401: {
5482
5740
  headers: {
5483
5741
  [name: string]: unknown;
@@ -5539,7 +5797,7 @@ interface operations {
5539
5797
  "application/json": components["schemas"]["RotatePakResponseDto"];
5540
5798
  };
5541
5799
  };
5542
- /** @description Missing, invalid or expired bearer token. */
5800
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
5543
5801
  401: {
5544
5802
  headers: {
5545
5803
  [name: string]: unknown;
@@ -5970,7 +6228,7 @@ interface operations {
5970
6228
  "application/json": components["schemas"]["ErrorResponseDto"];
5971
6229
  };
5972
6230
  };
5973
- /** @description Missing or invalid session. */
6231
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
5974
6232
  401: {
5975
6233
  headers: {
5976
6234
  [name: string]: unknown;
@@ -5979,7 +6237,7 @@ interface operations {
5979
6237
  "application/json": components["schemas"]["ErrorResponseDto"];
5980
6238
  };
5981
6239
  };
5982
- /** @description Caller is a PAK (`pcft_live_*`), email not verified (`EMAIL_NOT_VERIFIED`), not a member (`NOT_A_MEMBER`), lacks `workspace.member.invite`, or a non-owner tried to invite an owner (`OWNER_ROLE_REQUIRED`). */
6240
+ /** @description Caller is a PAK (`pcft_live_*`), email not verified (`EMAIL_NOT_VERIFIED`), not a member (`NOT_A_MEMBER`), lacks `workspace.member.invite`, a non-owner tried to invite an owner (`OWNER_ROLE_REQUIRED`), or the role holds permissions the caller does not (`MEMBER_RANK_EXCEEDED`). */
5983
6241
  403: {
5984
6242
  headers: {
5985
6243
  [name: string]: unknown;
@@ -6018,7 +6276,7 @@ interface operations {
6018
6276
  };
6019
6277
  content?: never;
6020
6278
  };
6021
- /** @description Missing or invalid session. */
6279
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
6022
6280
  401: {
6023
6281
  headers: {
6024
6282
  [name: string]: unknown;
@@ -6132,7 +6390,7 @@ interface operations {
6132
6390
  };
6133
6391
  content?: never;
6134
6392
  };
6135
- /** @description Missing or invalid session. */
6393
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
6136
6394
  401: {
6137
6395
  headers: {
6138
6396
  [name: string]: unknown;
@@ -6141,7 +6399,7 @@ interface operations {
6141
6399
  "application/json": components["schemas"]["ErrorResponseDto"];
6142
6400
  };
6143
6401
  };
6144
- /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), or lacks `workspace.member.remove` (not required for self-leave). */
6402
+ /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), lacks `workspace.member.remove` (not required for self-leave), or the target outranks the caller (`MEMBER_RANK_EXCEEDED`: only an owner can remove an owner, and the target role's permissions must all be held by the caller). */
6145
6403
  403: {
6146
6404
  headers: {
6147
6405
  [name: string]: unknown;
@@ -6203,7 +6461,7 @@ interface operations {
6203
6461
  "application/json": components["schemas"]["ErrorResponseDto"];
6204
6462
  };
6205
6463
  };
6206
- /** @description Missing or invalid session. */
6464
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
6207
6465
  401: {
6208
6466
  headers: {
6209
6467
  [name: string]: unknown;
@@ -6212,7 +6470,7 @@ interface operations {
6212
6470
  "application/json": components["schemas"]["ErrorResponseDto"];
6213
6471
  };
6214
6472
  };
6215
- /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), lacks `workspace.member.update-role`, or a non-owner tried to assign the owner role or change an owner (`OWNER_ROLE_REQUIRED`). */
6473
+ /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), lacks `workspace.member.update-role`, a non-owner tried to assign the owner role or change an owner (`OWNER_ROLE_REQUIRED`), or a non-owner tried to change a role to or from one holding permissions the caller lacks (`MEMBER_RANK_EXCEEDED`). Admins may make admins, never owners. */
6216
6474
  403: {
6217
6475
  headers: {
6218
6476
  [name: string]: unknown;
@@ -6310,7 +6568,16 @@ interface operations {
6310
6568
  "application/json": components["schemas"]["ManagedPolicyResponseDto"];
6311
6569
  };
6312
6570
  };
6313
- /** @description Missing, invalid or expired bearer token. */
6571
+ /** @description Invalid policy shape, name, or condition block. */
6572
+ 400: {
6573
+ headers: {
6574
+ [name: string]: unknown;
6575
+ };
6576
+ content: {
6577
+ "application/json": components["schemas"]["ErrorResponseDto"];
6578
+ };
6579
+ };
6580
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
6314
6581
  401: {
6315
6582
  headers: {
6316
6583
  [name: string]: unknown;
@@ -6319,7 +6586,16 @@ interface operations {
6319
6586
  "application/json": components["schemas"]["ErrorResponseDto"];
6320
6587
  };
6321
6588
  };
6322
- /** @description Name already in use. */
6589
+ /** @description Caller is not a member (`NOT_A_MEMBER`), lacks `workspace.policy.create` (owner and admin hold it by default), or the policy grants an action the caller does not hold. */
6590
+ 403: {
6591
+ headers: {
6592
+ [name: string]: unknown;
6593
+ };
6594
+ content: {
6595
+ "application/json": components["schemas"]["ErrorResponseDto"];
6596
+ };
6597
+ };
6598
+ /** @description Name already in use, or the workspace already has 100 policies. */
6323
6599
  409: {
6324
6600
  headers: {
6325
6601
  [name: string]: unknown;
@@ -6431,14 +6707,16 @@ interface operations {
6431
6707
  };
6432
6708
  requestBody?: never;
6433
6709
  responses: {
6434
- /** @description Policy deleted. */
6435
- 204: {
6710
+ /** @description Policy deleted. `bound_key_count` is the number of live API keys that lost the binding. */
6711
+ 200: {
6436
6712
  headers: {
6437
6713
  [name: string]: unknown;
6438
6714
  };
6439
- content?: never;
6715
+ content: {
6716
+ "application/json": components["schemas"]["ManagedPolicyDeletedResponseDto"];
6717
+ };
6440
6718
  };
6441
- /** @description Missing, invalid or expired bearer token. */
6719
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
6442
6720
  401: {
6443
6721
  headers: {
6444
6722
  [name: string]: unknown;
@@ -6447,7 +6725,16 @@ interface operations {
6447
6725
  "application/json": components["schemas"]["ErrorResponseDto"];
6448
6726
  };
6449
6727
  };
6450
- /** @description Policy not found in this workspace. */
6728
+ /** @description Caller lacks `workspace.policy.delete`, or is not an owner and the policy is bound to a role or is a preset policy (`OWNER_ROLE_REQUIRED`). */
6729
+ 403: {
6730
+ headers: {
6731
+ [name: string]: unknown;
6732
+ };
6733
+ content: {
6734
+ "application/json": components["schemas"]["ErrorResponseDto"];
6735
+ };
6736
+ };
6737
+ /** @description Policy not found in this workspace (`POLICY_NOT_FOUND`). */
6451
6738
  404: {
6452
6739
  headers: {
6453
6740
  [name: string]: unknown;
@@ -6474,7 +6761,7 @@ interface operations {
6474
6761
  };
6475
6762
  };
6476
6763
  responses: {
6477
- /** @description Updated policy. */
6764
+ /** @description Updated policy. `bound_key_count` is the number of live API keys the change applies to. */
6478
6765
  200: {
6479
6766
  headers: {
6480
6767
  [name: string]: unknown;
@@ -6492,7 +6779,7 @@ interface operations {
6492
6779
  "application/json": components["schemas"]["ErrorResponseDto"];
6493
6780
  };
6494
6781
  };
6495
- /** @description Missing, invalid or expired bearer token. */
6782
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
6496
6783
  401: {
6497
6784
  headers: {
6498
6785
  [name: string]: unknown;
@@ -6501,7 +6788,7 @@ interface operations {
6501
6788
  "application/json": components["schemas"]["ErrorResponseDto"];
6502
6789
  };
6503
6790
  };
6504
- /** @description Caller cannot grant one or more requested actions. */
6791
+ /** @description Caller lacks `workspace.policy.update`, cannot grant one or more requested actions, or is not an owner and the policy is bound to a role or is a preset policy (`OWNER_ROLE_REQUIRED`). */
6505
6792
  403: {
6506
6793
  headers: {
6507
6794
  [name: string]: unknown;
@@ -6510,7 +6797,7 @@ interface operations {
6510
6797
  "application/json": components["schemas"]["ErrorResponseDto"];
6511
6798
  };
6512
6799
  };
6513
- /** @description Policy not found in this workspace. */
6800
+ /** @description Policy not found in this workspace (`POLICY_NOT_FOUND`). */
6514
6801
  404: {
6515
6802
  headers: {
6516
6803
  [name: string]: unknown;
@@ -6519,7 +6806,7 @@ interface operations {
6519
6806
  "application/json": components["schemas"]["ErrorResponseDto"];
6520
6807
  };
6521
6808
  };
6522
- /** @description Name already in use. */
6809
+ /** @description Name already in use (`POLICY_NAME_TAKEN`). */
6523
6810
  409: {
6524
6811
  headers: {
6525
6812
  [name: string]: unknown;
@@ -6607,7 +6894,7 @@ interface operations {
6607
6894
  "application/json": components["schemas"]["ErrorResponseDto"];
6608
6895
  };
6609
6896
  };
6610
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
6897
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
6611
6898
  401: {
6612
6899
  headers: {
6613
6900
  [name: string]: unknown;
@@ -6731,7 +7018,7 @@ interface operations {
6731
7018
  "application/json": components["schemas"]["ErrorResponseDto"];
6732
7019
  };
6733
7020
  };
6734
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
7021
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
6735
7022
  401: {
6736
7023
  headers: {
6737
7024
  [name: string]: unknown;
@@ -6802,7 +7089,7 @@ interface operations {
6802
7089
  "application/json": components["schemas"]["ErrorResponseDto"];
6803
7090
  };
6804
7091
  };
6805
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
7092
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
6806
7093
  401: {
6807
7094
  headers: {
6808
7095
  [name: string]: unknown;
package/dist/index.d.ts CHANGED
@@ -319,6 +319,54 @@ interface paths {
319
319
  patch?: never;
320
320
  trace?: never;
321
321
  };
322
+ "/v1/me/hidden-guides": {
323
+ parameters: {
324
+ query?: never;
325
+ header?: never;
326
+ path?: never;
327
+ cookie?: never;
328
+ };
329
+ /**
330
+ * List the getting-started guides the caller has hidden.
331
+ * @description Every guide the caller has hidden in the console, newest first. Hiding is presentation only: the setup status behind a guide is unchanged.
332
+ */
333
+ get: operations["HiddenGuidesController_list"];
334
+ put?: never;
335
+ post?: never;
336
+ /**
337
+ * Show every getting-started guide again.
338
+ * @description Removes every hidden guide for the caller, `all` included. Idempotent.
339
+ */
340
+ delete: operations["HiddenGuidesController_showAll"];
341
+ options?: never;
342
+ head?: never;
343
+ patch?: never;
344
+ trace?: never;
345
+ };
346
+ "/v1/me/hidden-guides/{key}": {
347
+ parameters: {
348
+ query?: never;
349
+ header?: never;
350
+ path?: never;
351
+ cookie?: never;
352
+ };
353
+ get?: never;
354
+ /**
355
+ * Hide a getting-started guide for the caller.
356
+ * @description Idempotent: hiding a guide that is already hidden returns it unchanged, with its first `hidden_at`. At most 200 are kept; hiding one more drops the oldest.
357
+ */
358
+ put: operations["HiddenGuidesController_hide"];
359
+ post?: never;
360
+ /**
361
+ * Show a hidden getting-started guide again.
362
+ * @description Idempotent: showing a guide that is not hidden is a no-op.
363
+ */
364
+ delete: operations["HiddenGuidesController_show"];
365
+ options?: never;
366
+ head?: never;
367
+ patch?: never;
368
+ trace?: never;
369
+ };
322
370
  "/v1/me/profile": {
323
371
  parameters: {
324
372
  query?: never;
@@ -345,7 +393,7 @@ interface paths {
345
393
  };
346
394
  /**
347
395
  * OAuth 2.1 authorization endpoint
348
- * @description Requires PKCE with `code_challenge_method=S256`; `plain` and a missing challenge are both rejected. `redirect_uri` must match a registered URI exactly, with only the RFC 8252 §7.3 loopback port relaxation. Responds 302 either to sign-in (no session) or to the consent screen.
396
+ * @description Requires PKCE with `code_challenge_method=S256`; a session that has been signed out counts as no session; `plain` and a missing challenge are both rejected. `redirect_uri` must match a registered URI exactly, with only the RFC 8252 §7.3 loopback port relaxation. Responds 302 either to sign-in (no session) or to the consent screen.
349
397
  */
350
398
  get: operations["OAuthAuthorizeController_authorize"];
351
399
  put?: never;
@@ -1159,11 +1207,11 @@ interface paths {
1159
1207
  get: operations["WorkspacePolicyController_get"];
1160
1208
  put?: never;
1161
1209
  post?: never;
1162
- /** Delete a managed policy. Cascades: API keys lose the binding (deny-all if no other bindings remain); roles fall back to their inline policy column. Cookie/JWT only. */
1210
+ /** Delete a managed policy. Cascades: API keys lose the binding (deny-all if no other bindings remain); roles fall back to their inline policy column. Owners and admins; a policy bound to a role, or a preset policy, only an owner can delete. Cookie/JWT only. */
1163
1211
  delete: operations["WorkspacePolicyController_delete"];
1164
1212
  options?: never;
1165
1213
  head?: never;
1166
- /** Update a managed policy. Cookie/JWT only — policy authoring is a human-admin surface. */
1214
+ /** Update a managed policy. Owners and admins; a policy bound to a role, or a preset policy, only an owner can edit. Cookie/JWT only — policy authoring is a human-admin surface. */
1167
1215
  patch: operations["WorkspacePolicyController_update"];
1168
1216
  trace?: never;
1169
1217
  };
@@ -1929,6 +1977,22 @@ interface components {
1929
1977
  */
1930
1978
  message: string;
1931
1979
  };
1980
+ HiddenGuideDto: {
1981
+ /**
1982
+ * Format: date-time
1983
+ * @description When the guide was first hidden.
1984
+ */
1985
+ hidden_at: string;
1986
+ /**
1987
+ * @description The guide: a surface name, optionally followed by `:` and the id of the resource the guide belongs to. The console uses `dashboard:<workspace id>`, `auth_app:<app id>`, `waitlist_quickstart:<waitlist id>`, `waitlist_steps:<workspace id>`, `community_quickstart:<community id>`, `trawl_quickstart:<workspace id>`, `mail_quickstart:<workspace id>`, and `all` for "never show getting-started guides".
1988
+ * @example auth_app:3f2c9a4e-8b1d-4c6e-9f2a-1b2c3d4e5f60
1989
+ */
1990
+ key: string;
1991
+ };
1992
+ HiddenGuidesDto: {
1993
+ /** @description Every guide the caller has hidden, newest first. A bounded set (at most 200; hiding one more drops the oldest), so it is returned whole rather than paginated. */
1994
+ guides: components["schemas"]["HiddenGuideDto"][];
1995
+ };
1932
1996
  IntrospectAccountDto: {
1933
1997
  /** @description Public HTTPS URL of the uploaded avatar, or null when no avatar is set. */
1934
1998
  avatar_url: string | null;
@@ -1966,6 +2030,7 @@ interface components {
1966
2030
  };
1967
2031
  IntrospectResponseDto: {
1968
2032
  account?: components["schemas"]["IntrospectAccountDto"] | null;
2033
+ /** @description False for an anonymous caller and for an access token whose session has been signed out. */
1969
2034
  is_authenticated: boolean;
1970
2035
  principal?: components["schemas"]["IntrospectPrincipalDto"] | null;
1971
2036
  workspaces?: components["schemas"]["IntrospectWorkspaceListItemDto"][];
@@ -2112,9 +2177,31 @@ interface components {
2112
2177
  */
2113
2178
  refresh_token: string;
2114
2179
  };
2180
+ ManagedPolicyDeletedResponseDto: {
2181
+ /**
2182
+ * @description Live API keys that were bound to the policy and lost the binding. A key with no binding left falls back to deny-all.
2183
+ * @example 3
2184
+ */
2185
+ bound_key_count: number;
2186
+ /**
2187
+ * @example true
2188
+ * @enum {number}
2189
+ */
2190
+ deleted: true;
2191
+ /**
2192
+ * Format: uuid
2193
+ * @description The deleted policy.
2194
+ */
2195
+ id: string;
2196
+ };
2115
2197
  ManagedPolicyDetailResponseDto: {
2116
2198
  /** @description Counts of currently-bound consumers — surface this in delete-confirm UX so the operator sees cascade impact. */
2117
2199
  binding_count: components["schemas"]["PolicyBindingCountDto"];
2200
+ /**
2201
+ * @description Live (not revoked, not expired) API keys bound to this policy — the keys a save or delete affects. Show it in the confirm step before saving or deleting.
2202
+ * @example 3
2203
+ */
2204
+ bound_key_count: number;
2118
2205
  /** Format: date-time */
2119
2206
  created_at: string;
2120
2207
  /**
@@ -3426,7 +3513,7 @@ interface operations {
3426
3513
  "application/json": components["schemas"]["IntrospectResponseDto"];
3427
3514
  };
3428
3515
  };
3429
- /** @description Rate limited: more than 60 requests/min from this IP (default bucket). Anonymous callers otherwise get 200 with `is_authenticated: false`, never 401. */
3516
+ /** @description Rate limited: more than 60 requests/min from this IP (default bucket). Anonymous callers, and callers whose session has been signed out, otherwise get 200 with `is_authenticated: false`, never 401. */
3430
3517
  429: {
3431
3518
  headers: {
3432
3519
  [name: string]: unknown;
@@ -3486,7 +3573,7 @@ interface operations {
3486
3573
  "application/json": components["schemas"]["IntrospectWorkspaceResponseDto"];
3487
3574
  };
3488
3575
  };
3489
- /** @description Missing or invalid session. */
3576
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
3490
3577
  401: {
3491
3578
  headers: {
3492
3579
  [name: string]: unknown;
@@ -3617,6 +3704,177 @@ interface operations {
3617
3704
  };
3618
3705
  };
3619
3706
  };
3707
+ HiddenGuidesController_list: {
3708
+ parameters: {
3709
+ query?: never;
3710
+ header?: never;
3711
+ path?: never;
3712
+ cookie?: never;
3713
+ };
3714
+ requestBody?: never;
3715
+ responses: {
3716
+ 200: {
3717
+ headers: {
3718
+ [name: string]: unknown;
3719
+ };
3720
+ content: {
3721
+ "application/json": components["schemas"]["HiddenGuidesDto"];
3722
+ };
3723
+ };
3724
+ /** @description No session. */
3725
+ 401: {
3726
+ headers: {
3727
+ [name: string]: unknown;
3728
+ };
3729
+ content: {
3730
+ "application/json": components["schemas"]["ErrorResponseDto"];
3731
+ };
3732
+ };
3733
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3734
+ 403: {
3735
+ headers: {
3736
+ [name: string]: unknown;
3737
+ };
3738
+ content: {
3739
+ "application/json": components["schemas"]["ErrorResponseDto"];
3740
+ };
3741
+ };
3742
+ };
3743
+ };
3744
+ HiddenGuidesController_showAll: {
3745
+ parameters: {
3746
+ query?: never;
3747
+ header?: never;
3748
+ path?: never;
3749
+ cookie?: never;
3750
+ };
3751
+ requestBody?: never;
3752
+ responses: {
3753
+ /** @description Every guide shows again. */
3754
+ 204: {
3755
+ headers: {
3756
+ [name: string]: unknown;
3757
+ };
3758
+ content?: never;
3759
+ };
3760
+ /** @description No session. */
3761
+ 401: {
3762
+ headers: {
3763
+ [name: string]: unknown;
3764
+ };
3765
+ content: {
3766
+ "application/json": components["schemas"]["ErrorResponseDto"];
3767
+ };
3768
+ };
3769
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3770
+ 403: {
3771
+ headers: {
3772
+ [name: string]: unknown;
3773
+ };
3774
+ content: {
3775
+ "application/json": components["schemas"]["ErrorResponseDto"];
3776
+ };
3777
+ };
3778
+ };
3779
+ };
3780
+ HiddenGuidesController_hide: {
3781
+ parameters: {
3782
+ query?: never;
3783
+ header?: never;
3784
+ path: {
3785
+ /** @description The guide: a surface name, optionally followed by `:` and a resource id, e.g. `dashboard:<workspace id>` or `all`. */
3786
+ key: string;
3787
+ };
3788
+ cookie?: never;
3789
+ };
3790
+ requestBody?: never;
3791
+ responses: {
3792
+ /** @description The guide is hidden. */
3793
+ 200: {
3794
+ headers: {
3795
+ [name: string]: unknown;
3796
+ };
3797
+ content: {
3798
+ "application/json": components["schemas"]["HiddenGuideDto"];
3799
+ };
3800
+ };
3801
+ /** @description The key is not a valid guide key. */
3802
+ 400: {
3803
+ headers: {
3804
+ [name: string]: unknown;
3805
+ };
3806
+ content: {
3807
+ "application/json": components["schemas"]["ErrorResponseDto"];
3808
+ };
3809
+ };
3810
+ /** @description No session. */
3811
+ 401: {
3812
+ headers: {
3813
+ [name: string]: unknown;
3814
+ };
3815
+ content: {
3816
+ "application/json": components["schemas"]["ErrorResponseDto"];
3817
+ };
3818
+ };
3819
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3820
+ 403: {
3821
+ headers: {
3822
+ [name: string]: unknown;
3823
+ };
3824
+ content: {
3825
+ "application/json": components["schemas"]["ErrorResponseDto"];
3826
+ };
3827
+ };
3828
+ };
3829
+ };
3830
+ HiddenGuidesController_show: {
3831
+ parameters: {
3832
+ query?: never;
3833
+ header?: never;
3834
+ path: {
3835
+ /** @description The guide: a surface name, optionally followed by `:` and a resource id, e.g. `dashboard:<workspace id>` or `all`. */
3836
+ key: string;
3837
+ };
3838
+ cookie?: never;
3839
+ };
3840
+ requestBody?: never;
3841
+ responses: {
3842
+ /** @description The guide shows again (or was not hidden). */
3843
+ 204: {
3844
+ headers: {
3845
+ [name: string]: unknown;
3846
+ };
3847
+ content?: never;
3848
+ };
3849
+ /** @description The key is not a valid guide key. */
3850
+ 400: {
3851
+ headers: {
3852
+ [name: string]: unknown;
3853
+ };
3854
+ content: {
3855
+ "application/json": components["schemas"]["ErrorResponseDto"];
3856
+ };
3857
+ };
3858
+ /** @description No session. */
3859
+ 401: {
3860
+ headers: {
3861
+ [name: string]: unknown;
3862
+ };
3863
+ content: {
3864
+ "application/json": components["schemas"]["ErrorResponseDto"];
3865
+ };
3866
+ };
3867
+ /** @description The caller authenticated with a non-human principal (e.g. a workspace API key). Hidden guides are a person's console preference. */
3868
+ 403: {
3869
+ headers: {
3870
+ [name: string]: unknown;
3871
+ };
3872
+ content: {
3873
+ "application/json": components["schemas"]["ErrorResponseDto"];
3874
+ };
3875
+ };
3876
+ };
3877
+ };
3620
3878
  MeController_updateProfile: {
3621
3879
  parameters: {
3622
3880
  query?: never;
@@ -3807,7 +4065,7 @@ interface operations {
3807
4065
  "application/json": components["schemas"]["ConsentRequestDto"];
3808
4066
  };
3809
4067
  };
3810
- /** @description Missing, invalid or expired bearer token. */
4068
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
3811
4069
  401: {
3812
4070
  headers: {
3813
4071
  [name: string]: unknown;
@@ -3877,7 +4135,7 @@ interface operations {
3877
4135
  "application/json": components["schemas"]["ErrorResponseDto"];
3878
4136
  };
3879
4137
  };
3880
- /** @description Missing, invalid or expired bearer token. */
4138
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
3881
4139
  401: {
3882
4140
  headers: {
3883
4141
  [name: string]: unknown;
@@ -4439,7 +4697,7 @@ interface operations {
4439
4697
  };
4440
4698
  content?: never;
4441
4699
  };
4442
- /** @description Missing, invalid or expired bearer token. */
4700
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
4443
4701
  401: {
4444
4702
  headers: {
4445
4703
  [name: string]: unknown;
@@ -4766,7 +5024,7 @@ interface operations {
4766
5024
  "application/json": components["schemas"]["ErrorResponseDto"];
4767
5025
  };
4768
5026
  };
4769
- /** @description Missing or invalid session. */
5027
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
4770
5028
  401: {
4771
5029
  headers: {
4772
5030
  [name: string]: unknown;
@@ -4950,7 +5208,7 @@ interface operations {
4950
5208
  };
4951
5209
  content?: never;
4952
5210
  };
4953
- /** @description Missing, invalid or expired bearer token. */
5211
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
4954
5212
  401: {
4955
5213
  headers: {
4956
5214
  [name: string]: unknown;
@@ -5116,7 +5374,7 @@ interface operations {
5116
5374
  "application/json": components["schemas"]["ErrorResponseDto"];
5117
5375
  };
5118
5376
  };
5119
- /** @description Missing, malformed or invalid session. */
5377
+ /** @description Missing, malformed or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
5120
5378
  401: {
5121
5379
  headers: {
5122
5380
  [name: string]: unknown;
@@ -5225,7 +5483,7 @@ interface operations {
5225
5483
  "application/json": components["schemas"]["ErrorResponseDto"];
5226
5484
  };
5227
5485
  };
5228
- /** @description Missing, malformed or invalid session. */
5486
+ /** @description Missing, malformed or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
5229
5487
  401: {
5230
5488
  headers: {
5231
5489
  [name: string]: unknown;
@@ -5343,7 +5601,7 @@ interface operations {
5343
5601
  "application/json": components["schemas"]["ErrorResponseDto"];
5344
5602
  };
5345
5603
  };
5346
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
5604
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
5347
5605
  401: {
5348
5606
  headers: {
5349
5607
  [name: string]: unknown;
@@ -5405,7 +5663,7 @@ interface operations {
5405
5663
  "application/json": components["schemas"]["ErrorResponseDto"];
5406
5664
  };
5407
5665
  };
5408
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
5666
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
5409
5667
  401: {
5410
5668
  headers: {
5411
5669
  [name: string]: unknown;
@@ -5477,7 +5735,7 @@ interface operations {
5477
5735
  "application/json": components["schemas"]["ErrorResponseDto"];
5478
5736
  };
5479
5737
  };
5480
- /** @description Missing, invalid or expired bearer token. */
5738
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
5481
5739
  401: {
5482
5740
  headers: {
5483
5741
  [name: string]: unknown;
@@ -5539,7 +5797,7 @@ interface operations {
5539
5797
  "application/json": components["schemas"]["RotatePakResponseDto"];
5540
5798
  };
5541
5799
  };
5542
- /** @description Missing, invalid or expired bearer token. */
5800
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
5543
5801
  401: {
5544
5802
  headers: {
5545
5803
  [name: string]: unknown;
@@ -5970,7 +6228,7 @@ interface operations {
5970
6228
  "application/json": components["schemas"]["ErrorResponseDto"];
5971
6229
  };
5972
6230
  };
5973
- /** @description Missing or invalid session. */
6231
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
5974
6232
  401: {
5975
6233
  headers: {
5976
6234
  [name: string]: unknown;
@@ -5979,7 +6237,7 @@ interface operations {
5979
6237
  "application/json": components["schemas"]["ErrorResponseDto"];
5980
6238
  };
5981
6239
  };
5982
- /** @description Caller is a PAK (`pcft_live_*`), email not verified (`EMAIL_NOT_VERIFIED`), not a member (`NOT_A_MEMBER`), lacks `workspace.member.invite`, or a non-owner tried to invite an owner (`OWNER_ROLE_REQUIRED`). */
6240
+ /** @description Caller is a PAK (`pcft_live_*`), email not verified (`EMAIL_NOT_VERIFIED`), not a member (`NOT_A_MEMBER`), lacks `workspace.member.invite`, a non-owner tried to invite an owner (`OWNER_ROLE_REQUIRED`), or the role holds permissions the caller does not (`MEMBER_RANK_EXCEEDED`). */
5983
6241
  403: {
5984
6242
  headers: {
5985
6243
  [name: string]: unknown;
@@ -6018,7 +6276,7 @@ interface operations {
6018
6276
  };
6019
6277
  content?: never;
6020
6278
  };
6021
- /** @description Missing or invalid session. */
6279
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
6022
6280
  401: {
6023
6281
  headers: {
6024
6282
  [name: string]: unknown;
@@ -6132,7 +6390,7 @@ interface operations {
6132
6390
  };
6133
6391
  content?: never;
6134
6392
  };
6135
- /** @description Missing or invalid session. */
6393
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
6136
6394
  401: {
6137
6395
  headers: {
6138
6396
  [name: string]: unknown;
@@ -6141,7 +6399,7 @@ interface operations {
6141
6399
  "application/json": components["schemas"]["ErrorResponseDto"];
6142
6400
  };
6143
6401
  };
6144
- /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), or lacks `workspace.member.remove` (not required for self-leave). */
6402
+ /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), lacks `workspace.member.remove` (not required for self-leave), or the target outranks the caller (`MEMBER_RANK_EXCEEDED`: only an owner can remove an owner, and the target role's permissions must all be held by the caller). */
6145
6403
  403: {
6146
6404
  headers: {
6147
6405
  [name: string]: unknown;
@@ -6203,7 +6461,7 @@ interface operations {
6203
6461
  "application/json": components["schemas"]["ErrorResponseDto"];
6204
6462
  };
6205
6463
  };
6206
- /** @description Missing or invalid session. */
6464
+ /** @description Missing or invalid session. Also a session that has been signed out (`SESSION_REVOKED`). */
6207
6465
  401: {
6208
6466
  headers: {
6209
6467
  [name: string]: unknown;
@@ -6212,7 +6470,7 @@ interface operations {
6212
6470
  "application/json": components["schemas"]["ErrorResponseDto"];
6213
6471
  };
6214
6472
  };
6215
- /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), lacks `workspace.member.update-role`, or a non-owner tried to assign the owner role or change an owner (`OWNER_ROLE_REQUIRED`). */
6473
+ /** @description Caller is not a member of this workspace (`NOT_A_MEMBER`), lacks `workspace.member.update-role`, a non-owner tried to assign the owner role or change an owner (`OWNER_ROLE_REQUIRED`), or a non-owner tried to change a role to or from one holding permissions the caller lacks (`MEMBER_RANK_EXCEEDED`). Admins may make admins, never owners. */
6216
6474
  403: {
6217
6475
  headers: {
6218
6476
  [name: string]: unknown;
@@ -6310,7 +6568,16 @@ interface operations {
6310
6568
  "application/json": components["schemas"]["ManagedPolicyResponseDto"];
6311
6569
  };
6312
6570
  };
6313
- /** @description Missing, invalid or expired bearer token. */
6571
+ /** @description Invalid policy shape, name, or condition block. */
6572
+ 400: {
6573
+ headers: {
6574
+ [name: string]: unknown;
6575
+ };
6576
+ content: {
6577
+ "application/json": components["schemas"]["ErrorResponseDto"];
6578
+ };
6579
+ };
6580
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
6314
6581
  401: {
6315
6582
  headers: {
6316
6583
  [name: string]: unknown;
@@ -6319,7 +6586,16 @@ interface operations {
6319
6586
  "application/json": components["schemas"]["ErrorResponseDto"];
6320
6587
  };
6321
6588
  };
6322
- /** @description Name already in use. */
6589
+ /** @description Caller is not a member (`NOT_A_MEMBER`), lacks `workspace.policy.create` (owner and admin hold it by default), or the policy grants an action the caller does not hold. */
6590
+ 403: {
6591
+ headers: {
6592
+ [name: string]: unknown;
6593
+ };
6594
+ content: {
6595
+ "application/json": components["schemas"]["ErrorResponseDto"];
6596
+ };
6597
+ };
6598
+ /** @description Name already in use, or the workspace already has 100 policies. */
6323
6599
  409: {
6324
6600
  headers: {
6325
6601
  [name: string]: unknown;
@@ -6431,14 +6707,16 @@ interface operations {
6431
6707
  };
6432
6708
  requestBody?: never;
6433
6709
  responses: {
6434
- /** @description Policy deleted. */
6435
- 204: {
6710
+ /** @description Policy deleted. `bound_key_count` is the number of live API keys that lost the binding. */
6711
+ 200: {
6436
6712
  headers: {
6437
6713
  [name: string]: unknown;
6438
6714
  };
6439
- content?: never;
6715
+ content: {
6716
+ "application/json": components["schemas"]["ManagedPolicyDeletedResponseDto"];
6717
+ };
6440
6718
  };
6441
- /** @description Missing, invalid or expired bearer token. */
6719
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
6442
6720
  401: {
6443
6721
  headers: {
6444
6722
  [name: string]: unknown;
@@ -6447,7 +6725,16 @@ interface operations {
6447
6725
  "application/json": components["schemas"]["ErrorResponseDto"];
6448
6726
  };
6449
6727
  };
6450
- /** @description Policy not found in this workspace. */
6728
+ /** @description Caller lacks `workspace.policy.delete`, or is not an owner and the policy is bound to a role or is a preset policy (`OWNER_ROLE_REQUIRED`). */
6729
+ 403: {
6730
+ headers: {
6731
+ [name: string]: unknown;
6732
+ };
6733
+ content: {
6734
+ "application/json": components["schemas"]["ErrorResponseDto"];
6735
+ };
6736
+ };
6737
+ /** @description Policy not found in this workspace (`POLICY_NOT_FOUND`). */
6451
6738
  404: {
6452
6739
  headers: {
6453
6740
  [name: string]: unknown;
@@ -6474,7 +6761,7 @@ interface operations {
6474
6761
  };
6475
6762
  };
6476
6763
  responses: {
6477
- /** @description Updated policy. */
6764
+ /** @description Updated policy. `bound_key_count` is the number of live API keys the change applies to. */
6478
6765
  200: {
6479
6766
  headers: {
6480
6767
  [name: string]: unknown;
@@ -6492,7 +6779,7 @@ interface operations {
6492
6779
  "application/json": components["schemas"]["ErrorResponseDto"];
6493
6780
  };
6494
6781
  };
6495
- /** @description Missing, invalid or expired bearer token. */
6782
+ /** @description Missing or invalid session, or a session that has been signed out (`SESSION_REVOKED`). */
6496
6783
  401: {
6497
6784
  headers: {
6498
6785
  [name: string]: unknown;
@@ -6501,7 +6788,7 @@ interface operations {
6501
6788
  "application/json": components["schemas"]["ErrorResponseDto"];
6502
6789
  };
6503
6790
  };
6504
- /** @description Caller cannot grant one or more requested actions. */
6791
+ /** @description Caller lacks `workspace.policy.update`, cannot grant one or more requested actions, or is not an owner and the policy is bound to a role or is a preset policy (`OWNER_ROLE_REQUIRED`). */
6505
6792
  403: {
6506
6793
  headers: {
6507
6794
  [name: string]: unknown;
@@ -6510,7 +6797,7 @@ interface operations {
6510
6797
  "application/json": components["schemas"]["ErrorResponseDto"];
6511
6798
  };
6512
6799
  };
6513
- /** @description Policy not found in this workspace. */
6800
+ /** @description Policy not found in this workspace (`POLICY_NOT_FOUND`). */
6514
6801
  404: {
6515
6802
  headers: {
6516
6803
  [name: string]: unknown;
@@ -6519,7 +6806,7 @@ interface operations {
6519
6806
  "application/json": components["schemas"]["ErrorResponseDto"];
6520
6807
  };
6521
6808
  };
6522
- /** @description Name already in use. */
6809
+ /** @description Name already in use (`POLICY_NAME_TAKEN`). */
6523
6810
  409: {
6524
6811
  headers: {
6525
6812
  [name: string]: unknown;
@@ -6607,7 +6894,7 @@ interface operations {
6607
6894
  "application/json": components["schemas"]["ErrorResponseDto"];
6608
6895
  };
6609
6896
  };
6610
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
6897
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
6611
6898
  401: {
6612
6899
  headers: {
6613
6900
  [name: string]: unknown;
@@ -6731,7 +7018,7 @@ interface operations {
6731
7018
  "application/json": components["schemas"]["ErrorResponseDto"];
6732
7019
  };
6733
7020
  };
6734
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
7021
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
6735
7022
  401: {
6736
7023
  headers: {
6737
7024
  [name: string]: unknown;
@@ -6802,7 +7089,7 @@ interface operations {
6802
7089
  "application/json": components["schemas"]["ErrorResponseDto"];
6803
7090
  };
6804
7091
  };
6805
- /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). */
7092
+ /** @description Missing, malformed or invalid session, or a PAK bearer (this route accepts cookie/JWT sessions only). Also a session that has been signed out (`SESSION_REVOKED`). */
6806
7093
  401: {
6807
7094
  headers: {
6808
7095
  [name: string]: unknown;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@productcraft/platform-auth",
3
- "version": "0.0.13",
3
+ "version": "0.1.0",
4
4
  "description": "PlatformUser auth, workspaces, members, invites, roles + IAM policies, API keys, service activation, and the introspect endpoint every ProductCraft backend uses to resolve permissions. Generated from the production OpenAPI spec.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "openapi-fetch": "^0.13.0",
46
- "@productcraft/core": "^0.2.1"
46
+ "@productcraft/core": "^0.3.0"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "tsup"