@dropthis/cli 0.30.1 → 0.33.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.
@@ -1,5 +1,5 @@
1
- import { W as Transport, x as DropthisResult, E as EmailOtpResponse, U as SessionResponse, C as CreateUploadSessionRequest, f as CreateUploadSessionResponse, _ as UploadSessionResponse, v as DropthisClientOptions, e as ApiKeysResource, a as AccountResource, u as DropsResource, M as PublishInput, i as DeploymentsResource, n as DomainsResource, a1 as WorkspacesResource, O as PublishOptions, F as PreparedPublishRequest } from './workspaces-BXW942z-.cjs';
2
- export { A as AccountLimits, b as AccountResponse, c as AccountWorkspace, d as ActionResolve, g as CursorPage, D as DeploymentContentFile, h as DeploymentContentManifest, j as DnsRecord, k as DomainDeletedResponse, l as DomainListResponse, m as DomainResponse, o as DropAction, p as DropContentFile, q as DropDeploymentResponse, r as DropOptions, s as DropResponse, t as DropWorkspace, w as DropthisErrorResponse, G as GetContentOptions, I as InMemoryPublishInput, K as KeyType, L as Limitations, y as ListDeploymentsParams, z as ListDeploymentsResponse, B as ListPage, N as NextHint, P as PrepareOptions, H as PreparedUploadFile, J as PublishFileInput, R as RequestControls, Q as RequestOptions, S as RevokeImpact, T as SHARED_POOL, V as TierInfo, X as UpdateContentOptions, Y as UploadManifestFile, Z as UploadSessionFileResponse, $ as UploadTarget, a0 as Workspace } from './workspaces-BXW942z-.cjs';
1
+ import { a1 as Transport, x as DropthisResult, E as EmailOtpResponse, $ as SessionResponse, H as InvitationListResponse, a7 as Workspace, P as MemberListResponse, B as InvitableRole, F as Invitation, a8 as WorkspaceRole, O as Member, C as CreateUploadSessionRequest, f as CreateUploadSessionResponse, a5 as UploadSessionResponse, v as DropthisClientOptions, e as ApiKeysResource, A as AccountResource, u as DropsResource, V as PublishInput, i as DeploymentsResource, n as DomainsResource, a9 as WorkspacesResource, W as PublishOptions, S as PreparedPublishRequest } from './workspaces-CebiV4DS.cjs';
2
+ export { a as AccountResponse, b as AccountUsage, c as AccountWorkspace, d as ActionResolve, g as CursorPage, D as DeploymentContentFile, h as DeploymentContentManifest, j as DnsRecord, k as DomainDeletedResponse, l as DomainListResponse, m as DomainResponse, o as DropAction, p as DropContentFile, q as DropDeploymentResponse, r as DropOptions, s as DropResponse, t as DropWorkspace, w as DropthisErrorResponse, y as EntitlementLimits, z as Entitlements, G as GetContentOptions, I as InMemoryPublishInput, K as KeyType, L as Limitations, J as ListDeploymentsParams, M as ListDeploymentsResponse, N as ListPage, Q as NextHint, R as PrepareOptions, T as PreparedUploadFile, U as PublishFileInput, X as RequestControls, Y as RequestOptions, Z as RevokeImpact, _ as SHARED_POOL, a0 as TierInfo, a2 as UpdateContentOptions, a3 as UploadManifestFile, a4 as UploadSessionFileResponse, a6 as UploadTarget } from './workspaces-CebiV4DS.cjs';
3
3
 
4
4
  declare class AuthResource {
5
5
  private readonly transport;
@@ -21,6 +21,42 @@ declare class AuthResource {
21
21
  logout(): Promise<DropthisResult<null>>;
22
22
  }
23
23
 
24
+ /** Invitee-side invitations (ADR 0068). Listing needs `members:read`; accepting needs `members:write`. */
25
+ declare class InvitationsResource {
26
+ private readonly transport;
27
+ constructor(transport: Transport);
28
+ /** List the calling account's own pending invitations. */
29
+ list(): Promise<DropthisResult<InvitationListResponse>>;
30
+ /** Accept by the raw single-use token from the invite email. Joins + switches active workspace. */
31
+ accept(input: {
32
+ token: string;
33
+ }): Promise<DropthisResult<Workspace>>;
34
+ /** Accept by invitation id, once authenticated as the invited email — the agent path, no token. */
35
+ acceptById(input: {
36
+ invitationId: string;
37
+ }): Promise<DropthisResult<Workspace>>;
38
+ }
39
+
40
+ /** Team membership management (ADR 0068). Capability follows the credential's scopes. */
41
+ declare class MembersResource {
42
+ private readonly transport;
43
+ constructor(transport: Transport);
44
+ /** List a workspace's members (any member, `members:read`). */
45
+ list(workspaceId: string): Promise<DropthisResult<MemberListResponse>>;
46
+ /** Invite an email to the workspace (owner/admin, `members:write`). */
47
+ invite(workspaceId: string, input: {
48
+ email: string;
49
+ role: InvitableRole;
50
+ }): Promise<DropthisResult<Invitation>>;
51
+ /** Change a member's role (`members:admin`, owner-only-touches-owner enforced server-side). */
52
+ updateRole(workspaceId: string, accountId: string, input: {
53
+ role: WorkspaceRole;
54
+ }): Promise<DropthisResult<Member>>;
55
+ /** Remove a member, or leave the workspace (your own id). Removing others needs `members:admin`;
56
+ * leaving needs `members:write`. 204 — data is null. */
57
+ remove(workspaceId: string, accountId: string): Promise<DropthisResult<null>>;
58
+ }
59
+
24
60
  declare class UploadsResource {
25
61
  private readonly transport;
26
62
  constructor(transport: Transport);
@@ -50,6 +86,8 @@ declare class Dropthis {
50
86
  private uploadsResource?;
51
87
  private domainsResource?;
52
88
  private workspacesResource?;
89
+ private membersResource?;
90
+ private invitationsResource?;
53
91
  constructor(options?: DropthisClientOptions | string);
54
92
  get auth(): AuthResource;
55
93
  get apiKeys(): ApiKeysResource;
@@ -59,6 +97,8 @@ declare class Dropthis {
59
97
  get uploads(): UploadsResource;
60
98
  get domains(): DomainsResource;
61
99
  get workspaces(): WorkspacesResource;
100
+ get members(): MembersResource;
101
+ get invitations(): InvitationsResource;
62
102
  prepare(input: PublishInput, options?: PublishOptions): Promise<PreparedPublishRequest>;
63
103
  }
64
104
 
@@ -74,8 +114,29 @@ declare function createErrorResult<T>(code: string, message: string, statusCode:
74
114
  headers?: Record<string, string>;
75
115
  suggestion?: string | null;
76
116
  retryable?: boolean | null;
117
+ feature?: string | null;
118
+ currentPlan?: string | null;
119
+ requiredPlan?: string | null;
120
+ upgradeUrl?: string | null;
121
+ limit?: number | null;
122
+ used?: number | null;
123
+ requested?: number | null;
77
124
  body?: unknown;
78
125
  }): DropthisResult<T>;
126
+ /** True for a capability denial (`feature_not_in_plan`) — a plan gate, never retryable. */
127
+ declare function isFeatureNotInPlan(error: {
128
+ code: string;
129
+ } | null): boolean;
130
+ /** True for a numeric-ceiling denial (`quota_exceeded`: per-drop bytes 413, or an
131
+ * account ceiling 403). Never retryable — a plan ceiling does not free up on retry. */
132
+ declare function isQuotaExceeded(error: {
133
+ code: string;
134
+ } | null): boolean;
135
+ /** True for either plan-gate code — branch a retry layer on this to stop and
136
+ * hand off to a human instead of re-issuing a request that can never succeed. */
137
+ declare function isPlanGate(error: {
138
+ code: string;
139
+ } | null): boolean;
79
140
  declare class PublishInputError extends Error {
80
141
  readonly code: string;
81
142
  readonly param?: string | undefined;
@@ -83,4 +144,4 @@ declare class PublishInputError extends Error {
83
144
  constructor(code: string, message: string, param?: string | undefined, suggestion?: string | undefined);
84
145
  }
85
146
 
86
- export { CreateUploadSessionRequest, CreateUploadSessionResponse, DeploymentsResource, DomainsResource, Dropthis, DropthisClientOptions, DropthisResult, PreparedPublishRequest, PublishInput, PublishInputError, PublishOptions, UploadSessionResponse, UploadsResource, WorkspacesResource, createErrorResult, redactSecrets };
147
+ export { CreateUploadSessionRequest, CreateUploadSessionResponse, DeploymentsResource, DomainsResource, Dropthis, DropthisClientOptions, DropthisResult, InvitableRole, Invitation, InvitationListResponse, InvitationsResource, Member, MemberListResponse, MembersResource, PreparedPublishRequest, PublishInput, PublishInputError, PublishOptions, UploadSessionResponse, UploadsResource, Workspace, WorkspaceRole, WorkspacesResource, createErrorResult, isFeatureNotInPlan, isPlanGate, isQuotaExceeded, redactSecrets };
@@ -1,5 +1,5 @@
1
- import { W as Transport, x as DropthisResult, E as EmailOtpResponse, U as SessionResponse, C as CreateUploadSessionRequest, f as CreateUploadSessionResponse, _ as UploadSessionResponse, v as DropthisClientOptions, e as ApiKeysResource, a as AccountResource, u as DropsResource, M as PublishInput, i as DeploymentsResource, n as DomainsResource, a1 as WorkspacesResource, O as PublishOptions, F as PreparedPublishRequest } from './workspaces-BXW942z-.js';
2
- export { A as AccountLimits, b as AccountResponse, c as AccountWorkspace, d as ActionResolve, g as CursorPage, D as DeploymentContentFile, h as DeploymentContentManifest, j as DnsRecord, k as DomainDeletedResponse, l as DomainListResponse, m as DomainResponse, o as DropAction, p as DropContentFile, q as DropDeploymentResponse, r as DropOptions, s as DropResponse, t as DropWorkspace, w as DropthisErrorResponse, G as GetContentOptions, I as InMemoryPublishInput, K as KeyType, L as Limitations, y as ListDeploymentsParams, z as ListDeploymentsResponse, B as ListPage, N as NextHint, P as PrepareOptions, H as PreparedUploadFile, J as PublishFileInput, R as RequestControls, Q as RequestOptions, S as RevokeImpact, T as SHARED_POOL, V as TierInfo, X as UpdateContentOptions, Y as UploadManifestFile, Z as UploadSessionFileResponse, $ as UploadTarget, a0 as Workspace } from './workspaces-BXW942z-.js';
1
+ import { a1 as Transport, x as DropthisResult, E as EmailOtpResponse, $ as SessionResponse, H as InvitationListResponse, a7 as Workspace, P as MemberListResponse, B as InvitableRole, F as Invitation, a8 as WorkspaceRole, O as Member, C as CreateUploadSessionRequest, f as CreateUploadSessionResponse, a5 as UploadSessionResponse, v as DropthisClientOptions, e as ApiKeysResource, A as AccountResource, u as DropsResource, V as PublishInput, i as DeploymentsResource, n as DomainsResource, a9 as WorkspacesResource, W as PublishOptions, S as PreparedPublishRequest } from './workspaces-CebiV4DS.js';
2
+ export { a as AccountResponse, b as AccountUsage, c as AccountWorkspace, d as ActionResolve, g as CursorPage, D as DeploymentContentFile, h as DeploymentContentManifest, j as DnsRecord, k as DomainDeletedResponse, l as DomainListResponse, m as DomainResponse, o as DropAction, p as DropContentFile, q as DropDeploymentResponse, r as DropOptions, s as DropResponse, t as DropWorkspace, w as DropthisErrorResponse, y as EntitlementLimits, z as Entitlements, G as GetContentOptions, I as InMemoryPublishInput, K as KeyType, L as Limitations, J as ListDeploymentsParams, M as ListDeploymentsResponse, N as ListPage, Q as NextHint, R as PrepareOptions, T as PreparedUploadFile, U as PublishFileInput, X as RequestControls, Y as RequestOptions, Z as RevokeImpact, _ as SHARED_POOL, a0 as TierInfo, a2 as UpdateContentOptions, a3 as UploadManifestFile, a4 as UploadSessionFileResponse, a6 as UploadTarget } from './workspaces-CebiV4DS.js';
3
3
 
4
4
  declare class AuthResource {
5
5
  private readonly transport;
@@ -21,6 +21,42 @@ declare class AuthResource {
21
21
  logout(): Promise<DropthisResult<null>>;
22
22
  }
23
23
 
24
+ /** Invitee-side invitations (ADR 0068). Listing needs `members:read`; accepting needs `members:write`. */
25
+ declare class InvitationsResource {
26
+ private readonly transport;
27
+ constructor(transport: Transport);
28
+ /** List the calling account's own pending invitations. */
29
+ list(): Promise<DropthisResult<InvitationListResponse>>;
30
+ /** Accept by the raw single-use token from the invite email. Joins + switches active workspace. */
31
+ accept(input: {
32
+ token: string;
33
+ }): Promise<DropthisResult<Workspace>>;
34
+ /** Accept by invitation id, once authenticated as the invited email — the agent path, no token. */
35
+ acceptById(input: {
36
+ invitationId: string;
37
+ }): Promise<DropthisResult<Workspace>>;
38
+ }
39
+
40
+ /** Team membership management (ADR 0068). Capability follows the credential's scopes. */
41
+ declare class MembersResource {
42
+ private readonly transport;
43
+ constructor(transport: Transport);
44
+ /** List a workspace's members (any member, `members:read`). */
45
+ list(workspaceId: string): Promise<DropthisResult<MemberListResponse>>;
46
+ /** Invite an email to the workspace (owner/admin, `members:write`). */
47
+ invite(workspaceId: string, input: {
48
+ email: string;
49
+ role: InvitableRole;
50
+ }): Promise<DropthisResult<Invitation>>;
51
+ /** Change a member's role (`members:admin`, owner-only-touches-owner enforced server-side). */
52
+ updateRole(workspaceId: string, accountId: string, input: {
53
+ role: WorkspaceRole;
54
+ }): Promise<DropthisResult<Member>>;
55
+ /** Remove a member, or leave the workspace (your own id). Removing others needs `members:admin`;
56
+ * leaving needs `members:write`. 204 — data is null. */
57
+ remove(workspaceId: string, accountId: string): Promise<DropthisResult<null>>;
58
+ }
59
+
24
60
  declare class UploadsResource {
25
61
  private readonly transport;
26
62
  constructor(transport: Transport);
@@ -50,6 +86,8 @@ declare class Dropthis {
50
86
  private uploadsResource?;
51
87
  private domainsResource?;
52
88
  private workspacesResource?;
89
+ private membersResource?;
90
+ private invitationsResource?;
53
91
  constructor(options?: DropthisClientOptions | string);
54
92
  get auth(): AuthResource;
55
93
  get apiKeys(): ApiKeysResource;
@@ -59,6 +97,8 @@ declare class Dropthis {
59
97
  get uploads(): UploadsResource;
60
98
  get domains(): DomainsResource;
61
99
  get workspaces(): WorkspacesResource;
100
+ get members(): MembersResource;
101
+ get invitations(): InvitationsResource;
62
102
  prepare(input: PublishInput, options?: PublishOptions): Promise<PreparedPublishRequest>;
63
103
  }
64
104
 
@@ -74,8 +114,29 @@ declare function createErrorResult<T>(code: string, message: string, statusCode:
74
114
  headers?: Record<string, string>;
75
115
  suggestion?: string | null;
76
116
  retryable?: boolean | null;
117
+ feature?: string | null;
118
+ currentPlan?: string | null;
119
+ requiredPlan?: string | null;
120
+ upgradeUrl?: string | null;
121
+ limit?: number | null;
122
+ used?: number | null;
123
+ requested?: number | null;
77
124
  body?: unknown;
78
125
  }): DropthisResult<T>;
126
+ /** True for a capability denial (`feature_not_in_plan`) — a plan gate, never retryable. */
127
+ declare function isFeatureNotInPlan(error: {
128
+ code: string;
129
+ } | null): boolean;
130
+ /** True for a numeric-ceiling denial (`quota_exceeded`: per-drop bytes 413, or an
131
+ * account ceiling 403). Never retryable — a plan ceiling does not free up on retry. */
132
+ declare function isQuotaExceeded(error: {
133
+ code: string;
134
+ } | null): boolean;
135
+ /** True for either plan-gate code — branch a retry layer on this to stop and
136
+ * hand off to a human instead of re-issuing a request that can never succeed. */
137
+ declare function isPlanGate(error: {
138
+ code: string;
139
+ } | null): boolean;
79
140
  declare class PublishInputError extends Error {
80
141
  readonly code: string;
81
142
  readonly param?: string | undefined;
@@ -83,4 +144,4 @@ declare class PublishInputError extends Error {
83
144
  constructor(code: string, message: string, param?: string | undefined, suggestion?: string | undefined);
84
145
  }
85
146
 
86
- export { CreateUploadSessionRequest, CreateUploadSessionResponse, DeploymentsResource, DomainsResource, Dropthis, DropthisClientOptions, DropthisResult, PreparedPublishRequest, PublishInput, PublishInputError, PublishOptions, UploadSessionResponse, UploadsResource, WorkspacesResource, createErrorResult, redactSecrets };
147
+ export { CreateUploadSessionRequest, CreateUploadSessionResponse, DeploymentsResource, DomainsResource, Dropthis, DropthisClientOptions, DropthisResult, InvitableRole, Invitation, InvitationListResponse, InvitationsResource, Member, MemberListResponse, MembersResource, PreparedPublishRequest, PublishInput, PublishInputError, PublishOptions, UploadSessionResponse, UploadsResource, Workspace, WorkspaceRole, WorkspacesResource, createErrorResult, isFeatureNotInPlan, isPlanGate, isQuotaExceeded, redactSecrets };
@@ -23,11 +23,27 @@ function createErrorResult(code, message, statusCode, extra = {}) {
23
23
  ...extra.requestId !== void 0 ? { requestId: extra.requestId } : {},
24
24
  ...extra.suggestion !== void 0 ? { suggestion: extra.suggestion } : {},
25
25
  ...extra.retryable !== void 0 ? { retryable: extra.retryable } : {},
26
+ ...extra.feature != null ? { feature: extra.feature } : {},
27
+ ...extra.currentPlan != null ? { currentPlan: extra.currentPlan } : {},
28
+ ...extra.requiredPlan != null ? { requiredPlan: extra.requiredPlan } : {},
29
+ ...extra.upgradeUrl != null ? { upgradeUrl: extra.upgradeUrl } : {},
30
+ ...extra.limit != null ? { limit: extra.limit } : {},
31
+ ...extra.used != null ? { used: extra.used } : {},
32
+ ...extra.requested != null ? { requested: extra.requested } : {},
26
33
  ...extra.body !== void 0 ? { body: extra.body } : {}
27
34
  },
28
35
  headers: extra.headers ?? {}
29
36
  };
30
37
  }
38
+ function isFeatureNotInPlan(error) {
39
+ return error?.code === "feature_not_in_plan";
40
+ }
41
+ function isQuotaExceeded(error) {
42
+ return error?.code === "quota_exceeded";
43
+ }
44
+ function isPlanGate(error) {
45
+ return isFeatureNotInPlan(error) || isQuotaExceeded(error);
46
+ }
31
47
  var PublishInputError = class extends Error {
32
48
  constructor(code, message, param, suggestion) {
33
49
  super(message);
@@ -696,6 +712,7 @@ var ApiKeysResource = class {
696
712
  if (input.workspace !== void 0) body.workspace = input.workspace;
697
713
  if (input.allowedWorkspaces !== void 0)
698
714
  body.allowed_workspace_ids = input.allowedWorkspaces;
715
+ if (input.scopes !== void 0) body.scopes = input.scopes;
699
716
  return this.transport.request("POST", "/api-keys", { body });
700
717
  }
701
718
  /** Revoke an API key. 204 No Content — data is null on success. */
@@ -1049,6 +1066,69 @@ function updateBody(options) {
1049
1066
  };
1050
1067
  }
1051
1068
 
1069
+ // src/resources/invitations.ts
1070
+ var InvitationsResource = class {
1071
+ constructor(transport) {
1072
+ this.transport = transport;
1073
+ }
1074
+ transport;
1075
+ /** List the calling account's own pending invitations. */
1076
+ list() {
1077
+ return this.transport.request("GET", "/invitations");
1078
+ }
1079
+ /** Accept by the raw single-use token from the invite email. Joins + switches active workspace. */
1080
+ accept(input) {
1081
+ return this.transport.request("POST", "/invitations/accept", {
1082
+ body: input
1083
+ });
1084
+ }
1085
+ /** Accept by invitation id, once authenticated as the invited email — the agent path, no token. */
1086
+ acceptById(input) {
1087
+ return this.transport.request("POST", "/invitations/accept-by-id", {
1088
+ body: input
1089
+ });
1090
+ }
1091
+ };
1092
+
1093
+ // src/resources/members.ts
1094
+ var MembersResource = class {
1095
+ constructor(transport) {
1096
+ this.transport = transport;
1097
+ }
1098
+ transport;
1099
+ /** List a workspace's members (any member, `members:read`). */
1100
+ list(workspaceId) {
1101
+ return this.transport.request(
1102
+ "GET",
1103
+ `/workspaces/${encodeURIComponent(workspaceId)}/members`
1104
+ );
1105
+ }
1106
+ /** Invite an email to the workspace (owner/admin, `members:write`). */
1107
+ invite(workspaceId, input) {
1108
+ return this.transport.request(
1109
+ "POST",
1110
+ `/workspaces/${encodeURIComponent(workspaceId)}/invitations`,
1111
+ { body: input }
1112
+ );
1113
+ }
1114
+ /** Change a member's role (`members:admin`, owner-only-touches-owner enforced server-side). */
1115
+ updateRole(workspaceId, accountId, input) {
1116
+ return this.transport.request(
1117
+ "PATCH",
1118
+ `/workspaces/${encodeURIComponent(workspaceId)}/members/${encodeURIComponent(accountId)}`,
1119
+ { body: input }
1120
+ );
1121
+ }
1122
+ /** Remove a member, or leave the workspace (your own id). Removing others needs `members:admin`;
1123
+ * leaving needs `members:write`. 204 — data is null. */
1124
+ remove(workspaceId, accountId) {
1125
+ return this.transport.request(
1126
+ "DELETE",
1127
+ `/workspaces/${encodeURIComponent(workspaceId)}/members/${encodeURIComponent(accountId)}`
1128
+ );
1129
+ }
1130
+ };
1131
+
1052
1132
  // src/resources/uploads.ts
1053
1133
  var UploadsResource = class {
1054
1134
  constructor(transport) {
@@ -1101,6 +1181,25 @@ var WorkspacesResource = class {
1101
1181
  list() {
1102
1182
  return this.transport.request("GET", "/workspaces");
1103
1183
  }
1184
+ /** Create a team workspace (the caller becomes its sole owner). Needs `workspaces:write`. */
1185
+ create(input) {
1186
+ return this.transport.request("POST", "/workspaces", { body: input });
1187
+ }
1188
+ /** Rename a team workspace (owner/admin). Needs `workspaces:write`. */
1189
+ rename(workspaceId, input) {
1190
+ return this.transport.request(
1191
+ "PATCH",
1192
+ `/workspaces/${encodeURIComponent(workspaceId)}`,
1193
+ { body: input }
1194
+ );
1195
+ }
1196
+ /** Delete a team workspace (owner only). Needs `workspaces:admin`. 204 — data is null. */
1197
+ delete(workspaceId) {
1198
+ return this.transport.request(
1199
+ "DELETE",
1200
+ `/workspaces/${encodeURIComponent(workspaceId)}`
1201
+ );
1202
+ }
1104
1203
  use(workspace) {
1105
1204
  return this.transport.request("PUT", "/account/active-workspace", {
1106
1205
  body: { workspace }
@@ -1151,7 +1250,7 @@ function toSnakeCase(value) {
1151
1250
 
1152
1251
  // src/transport.ts
1153
1252
  var DEFAULT_BASE_URL = "https://api.dropthis.app";
1154
- var SDK_VERSION = "0.26.0";
1253
+ var SDK_VERSION = "0.29.0";
1155
1254
  var Transport = class {
1156
1255
  apiKey;
1157
1256
  baseUrl;
@@ -1360,6 +1459,15 @@ function problemResult(response, text, responseHeaders) {
1360
1459
  requestId: stringValue(body.request_id) ?? responseHeaders["x-request-id"] ?? null,
1361
1460
  suggestion: stringValue(body.suggestion),
1362
1461
  retryable: booleanValue(body.retryable),
1462
+ // Unified plan-gate contract (feature_not_in_plan / quota_exceeded). The
1463
+ // error body isn't camelCased like a success body, so map the snake keys here.
1464
+ feature: stringValue(body.feature),
1465
+ currentPlan: stringValue(body.current_plan),
1466
+ requiredPlan: stringValue(body.required_plan),
1467
+ upgradeUrl: stringValue(body.upgrade_url),
1468
+ limit: numberValue(body.limit) ?? null,
1469
+ used: numberValue(body.used) ?? null,
1470
+ requested: numberValue(body.requested) ?? null,
1363
1471
  headers: responseHeaders
1364
1472
  });
1365
1473
  }
@@ -1401,6 +1509,8 @@ var Dropthis = class {
1401
1509
  uploadsResource;
1402
1510
  domainsResource;
1403
1511
  workspacesResource;
1512
+ membersResource;
1513
+ invitationsResource;
1404
1514
  constructor(options = {}) {
1405
1515
  this.transport = new Transport(options);
1406
1516
  this.defaultWorkspace = typeof options === "string" ? void 0 : options.workspace;
@@ -1450,6 +1560,16 @@ var Dropthis = class {
1450
1560
  this.workspacesResource = new WorkspacesResource(this.transport);
1451
1561
  return this.workspacesResource;
1452
1562
  }
1563
+ get members() {
1564
+ if (!this.membersResource)
1565
+ this.membersResource = new MembersResource(this.transport);
1566
+ return this.membersResource;
1567
+ }
1568
+ get invitations() {
1569
+ if (!this.invitationsResource)
1570
+ this.invitationsResource = new InvitationsResource(this.transport);
1571
+ return this.invitationsResource;
1572
+ }
1453
1573
  async prepare(input, options = {}) {
1454
1574
  const merged = this.defaultWorkspace !== void 0 && options.workspace === void 0 ? { ...options, workspace: this.defaultWorkspace } : options;
1455
1575
  return resolveInput(input, merged);
@@ -1463,11 +1583,16 @@ export {
1463
1583
  DeploymentsResource,
1464
1584
  DomainsResource,
1465
1585
  Dropthis,
1586
+ InvitationsResource,
1587
+ MembersResource,
1466
1588
  PublishInputError,
1467
1589
  SHARED_POOL,
1468
1590
  UploadsResource,
1469
1591
  WorkspacesResource,
1470
1592
  createErrorResult,
1593
+ isFeatureNotInPlan,
1594
+ isPlanGate,
1595
+ isQuotaExceeded,
1471
1596
  redactSecrets
1472
1597
  };
1473
1598
  //# sourceMappingURL=index.mjs.map