@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.
@@ -30,6 +30,20 @@ type DropthisErrorResponse = {
30
30
  requestId?: string | null;
31
31
  suggestion?: string | null;
32
32
  retryable?: boolean | null;
33
+ /** The gated capability (on `feature_not_in_plan`), e.g. `password_protect`. */
34
+ feature?: string | null;
35
+ /** The caller's current plan (on `feature_not_in_plan` / `quota_exceeded`). */
36
+ currentPlan?: string | null;
37
+ /** The lowest plan that unlocks the feature (on `feature_not_in_plan`). */
38
+ requiredPlan?: string | null;
39
+ /** The pricing/upgrade URL to hand a human (on a plan gate). */
40
+ upgradeUrl?: string | null;
41
+ /** Numeric ceiling that was hit (on `quota_exceeded`). */
42
+ limit?: number | null;
43
+ /** Amount already used toward the ceiling (on `quota_exceeded`). */
44
+ used?: number | null;
45
+ /** Amount the request asked for (on `quota_exceeded`). */
46
+ requested?: number | null;
33
47
  body?: unknown;
34
48
  };
35
49
  type DropthisResult<T> = {
@@ -211,25 +225,48 @@ type ApiKeyCreatedResponse = ApiKeyResponse & {
211
225
  accountId?: string | null;
212
226
  isNewAccount?: boolean;
213
227
  };
214
- /** Active plan tier limits — use these to size a publish before uploading. */
215
- type AccountLimits = {
216
- /** Plan tier the limits apply to. */
217
- name: string;
228
+ /** Numeric limits for the active plan — use these to size a publish before uploading. */
229
+ type EntitlementLimits = {
218
230
  /** Maximum size of a single drop in bytes. */
219
231
  maxSizeBytes: number;
220
- /** Drop lifetime in seconds before expiry; null means drops are permanent. */
221
- defaultTtlSeconds: number | null;
222
232
  /** Total account storage cap in bytes; null means no account-level cap. */
223
233
  maxStorageBytes: number | null;
224
- /** Maximum number of custom hostnames allowed on this plan. */
234
+ /** Drop lifetime in seconds before expiry; null means drops are permanent. */
235
+ defaultTtlSeconds: number | null;
236
+ /** Maximum number of custom hostnames the workspace may connect. */
225
237
  maxCustomHostnames: number;
238
+ /** Maximum members the workspace may hold (owner included). */
239
+ seatLimit: number;
240
+ /** Maximum concurrent in-flight upload sessions (a transient concurrency cap). */
241
+ maxActiveUploadSessions: number;
242
+ };
243
+ /**
244
+ * The full capability matrix for the active plan — the single read to pre-check a
245
+ * feature gate before attempting an operation.
246
+ */
247
+ type Entitlements = {
248
+ /**
249
+ * Per-capability state for the active plan. Boolean caps are `true`/`false`;
250
+ * enum caps (`ogPreview`, `analytics`) carry a value — compare by value, never
251
+ * truthiness (`"none"` is truthy).
252
+ */
253
+ capabilities: Record<string, boolean | string>;
254
+ /**
255
+ * The lowest plan that unlocks each gated capability — drives the upgrade nudge.
256
+ * Enum sub-values are keyed `ogPreview.customImage` / `analytics.full`.
257
+ */
258
+ requiredPlan: Record<string, string>;
259
+ /** Numeric limits for the active plan. */
260
+ limits: EntitlementLimits;
226
261
  };
227
- /** Current resource usage for the account. */
262
+ /** Current resource usage for the account's active workspace. */
228
263
  type AccountUsage = {
229
264
  /** Total bytes consumed across all active drops. */
230
265
  storageUsedBytes: number;
231
266
  /** Number of custom domain hostnames currently in use. */
232
267
  customDomainsUsed: number;
268
+ /** Members currently in the workspace (owner included). */
269
+ seatsUsed: number;
233
270
  };
234
271
  /** The workspace a principal acts within (ADR 0066). For an sk_ API key, the workspace the key is bound to. */
235
272
  type AccountWorkspace = {
@@ -257,6 +294,43 @@ type Workspace = {
257
294
  plan: string;
258
295
  /** Whether this workspace is currently the caller's active workspace. */
259
296
  isActive: boolean;
297
+ /**
298
+ * On CREATE only (null otherwise): whether the credential that created this workspace can act
299
+ * in it. `false` means an allowlist-restricted key created a workspace outside its allowlist —
300
+ * it will be denied on the next write; re-authenticate to obtain a credential that reaches it.
301
+ */
302
+ creatorCanReach?: boolean | null;
303
+ };
304
+ /** A role grantable via invite or a member role-change (owner is transferred, never granted). */
305
+ type WorkspaceRole = "owner" | "admin" | "member";
306
+ type InvitableRole = "admin" | "member";
307
+ /** A member of a team workspace. */
308
+ type Member = {
309
+ accountId: string;
310
+ /** The member's email, or null if their account was deleted. */
311
+ email: string | null;
312
+ role: WorkspaceRole;
313
+ /** Whether this row is the calling account. */
314
+ isYou: boolean;
315
+ joinedAt: string;
316
+ };
317
+ type MemberListResponse = {
318
+ members: Member[];
319
+ };
320
+ /** An invitation to join a team workspace. */
321
+ type Invitation = {
322
+ id: string;
323
+ workspaceId: string;
324
+ email: string;
325
+ role: WorkspaceRole;
326
+ /** `pending`, `accepted`, or `revoked`. */
327
+ status: string;
328
+ expiresAt: string;
329
+ createdAt: string;
330
+ acceptedAt?: string | null;
331
+ };
332
+ type InvitationListResponse = {
333
+ invitations: Invitation[];
260
334
  };
261
335
  type AccountResponse = {
262
336
  id: string;
@@ -265,10 +339,11 @@ type AccountResponse = {
265
339
  plan: string;
266
340
  status: string;
267
341
  createdAt: string;
268
- limits: AccountLimits;
342
+ /** The full capability matrix + numeric limits for the active plan. */
343
+ entitlements: Entitlements;
269
344
  usage: AccountUsage;
270
345
  workspace: AccountWorkspace;
271
- /** URL to upgrade the account; null if already on the highest tier. */
346
+ /** URL to upgrade; present on every plan below Business, null on the top tier. */
272
347
  upgradeUrl: string | null;
273
348
  };
274
349
  type ListDropsParams = {
@@ -747,6 +822,14 @@ declare class ApiKeysResource {
747
822
  workspace?: string;
748
823
  /** Restrict a `delegated` key to these workspace slugs or ids. */
749
824
  allowedWorkspaces?: string[];
825
+ /**
826
+ * Request the credential's capability scopes (ADR 0068). Each entry is a bundle
827
+ * name (`publish`, `team`, `team-admin`) or a fine-grained scope (`members:admin`).
828
+ * The minted key gets the requested set intersected with your own scopes
829
+ * (downscope-only). Omit for the default `publish` bundle; pass `["team"]` to mint
830
+ * a credential that can create + manage teams (`login --scope team`).
831
+ */
832
+ scopes?: string[];
750
833
  }): Promise<DropthisResult<ApiKeyCreatedResponse>>;
751
834
  /** Revoke an API key. 204 No Content — data is null on success. */
752
835
  delete(keyId: string): Promise<DropthisResult<null>>;
@@ -920,8 +1003,21 @@ declare class WorkspacesResource {
920
1003
  list(): Promise<DropthisResult<{
921
1004
  workspaces: Workspace[];
922
1005
  }>>;
1006
+ /** Create a team workspace (the caller becomes its sole owner). Needs `workspaces:write`. */
1007
+ create(input: {
1008
+ name: string;
1009
+ /** URL-safe slug; derived from the name when omitted. A clash on an explicit slug → 409. */
1010
+ slug?: string;
1011
+ }): Promise<DropthisResult<Workspace>>;
1012
+ /** Rename a team workspace (owner/admin). Needs `workspaces:write`. */
1013
+ rename(workspaceId: string, input: {
1014
+ name?: string;
1015
+ slug?: string;
1016
+ }): Promise<DropthisResult<Workspace>>;
1017
+ /** Delete a team workspace (owner only). Needs `workspaces:admin`. 204 — data is null. */
1018
+ delete(workspaceId: string): Promise<DropthisResult<null>>;
923
1019
  use(workspace: string): Promise<DropthisResult<Workspace>>;
924
1020
  active(): Promise<DropthisResult<Workspace | null>>;
925
1021
  }
926
1022
 
927
- export { type UploadTarget as $, type AccountLimits as A, type ListPage as B, type CreateUploadSessionRequest as C, type DeploymentContentFile as D, type EmailOtpResponse as E, type PreparedPublishRequest as F, type GetContentOptions as G, type PreparedUploadFile as H, type InMemoryPublishInput as I, type PublishFileInput as J, type KeyType as K, type Limitations as L, type PublishInput as M, type NextHint as N, type PublishOptions as O, type PrepareOptions as P, type RequestOptions as Q, type RequestControls as R, type RevokeImpact as S, SHARED_POOL as T, type SessionResponse as U, type TierInfo as V, Transport as W, type UpdateContentOptions as X, type UploadManifestFile as Y, type UploadSessionFileResponse as Z, type UploadSessionResponse as _, AccountResource as a, type Workspace as a0, WorkspacesResource as a1, type AccountResponse as b, type AccountWorkspace as c, type ActionResolve as d, ApiKeysResource as e, type CreateUploadSessionResponse as f, CursorPage as g, type DeploymentContentManifest as h, DeploymentsResource as i, type DnsRecord as j, type DomainDeletedResponse as k, type DomainListResponse as l, type DomainResponse as m, DomainsResource as n, type DropAction as o, type DropContentFile as p, type DropDeploymentResponse as q, type DropOptions as r, type DropResponse as s, type DropWorkspace as t, DropsResource as u, type DropthisClientOptions as v, type DropthisErrorResponse as w, type DropthisResult as x, type ListDeploymentsParams as y, type ListDeploymentsResponse as z };
1023
+ export { type SessionResponse as $, AccountResource as A, type InvitableRole as B, type CreateUploadSessionRequest as C, type DeploymentContentFile as D, type EmailOtpResponse as E, type Invitation as F, type GetContentOptions as G, type InvitationListResponse as H, type InMemoryPublishInput as I, type ListDeploymentsParams as J, type KeyType as K, type Limitations as L, type ListDeploymentsResponse as M, type ListPage as N, type Member as O, type MemberListResponse as P, type NextHint as Q, type PrepareOptions as R, type PreparedPublishRequest as S, type PreparedUploadFile as T, type PublishFileInput as U, type PublishInput as V, type PublishOptions as W, type RequestControls as X, type RequestOptions as Y, type RevokeImpact as Z, SHARED_POOL as _, type AccountResponse as a, type TierInfo as a0, Transport as a1, type UpdateContentOptions as a2, type UploadManifestFile as a3, type UploadSessionFileResponse as a4, type UploadSessionResponse as a5, type UploadTarget as a6, type Workspace as a7, type WorkspaceRole as a8, WorkspacesResource as a9, type AccountUsage as b, type AccountWorkspace as c, type ActionResolve as d, ApiKeysResource as e, type CreateUploadSessionResponse as f, CursorPage as g, type DeploymentContentManifest as h, DeploymentsResource as i, type DnsRecord as j, type DomainDeletedResponse as k, type DomainListResponse as l, type DomainResponse as m, DomainsResource as n, type DropAction as o, type DropContentFile as p, type DropDeploymentResponse as q, type DropOptions as r, type DropResponse as s, type DropWorkspace as t, DropsResource as u, type DropthisClientOptions as v, type DropthisErrorResponse as w, type DropthisResult as x, type EntitlementLimits as y, type Entitlements as z };
@@ -30,6 +30,20 @@ type DropthisErrorResponse = {
30
30
  requestId?: string | null;
31
31
  suggestion?: string | null;
32
32
  retryable?: boolean | null;
33
+ /** The gated capability (on `feature_not_in_plan`), e.g. `password_protect`. */
34
+ feature?: string | null;
35
+ /** The caller's current plan (on `feature_not_in_plan` / `quota_exceeded`). */
36
+ currentPlan?: string | null;
37
+ /** The lowest plan that unlocks the feature (on `feature_not_in_plan`). */
38
+ requiredPlan?: string | null;
39
+ /** The pricing/upgrade URL to hand a human (on a plan gate). */
40
+ upgradeUrl?: string | null;
41
+ /** Numeric ceiling that was hit (on `quota_exceeded`). */
42
+ limit?: number | null;
43
+ /** Amount already used toward the ceiling (on `quota_exceeded`). */
44
+ used?: number | null;
45
+ /** Amount the request asked for (on `quota_exceeded`). */
46
+ requested?: number | null;
33
47
  body?: unknown;
34
48
  };
35
49
  type DropthisResult<T> = {
@@ -211,25 +225,48 @@ type ApiKeyCreatedResponse = ApiKeyResponse & {
211
225
  accountId?: string | null;
212
226
  isNewAccount?: boolean;
213
227
  };
214
- /** Active plan tier limits — use these to size a publish before uploading. */
215
- type AccountLimits = {
216
- /** Plan tier the limits apply to. */
217
- name: string;
228
+ /** Numeric limits for the active plan — use these to size a publish before uploading. */
229
+ type EntitlementLimits = {
218
230
  /** Maximum size of a single drop in bytes. */
219
231
  maxSizeBytes: number;
220
- /** Drop lifetime in seconds before expiry; null means drops are permanent. */
221
- defaultTtlSeconds: number | null;
222
232
  /** Total account storage cap in bytes; null means no account-level cap. */
223
233
  maxStorageBytes: number | null;
224
- /** Maximum number of custom hostnames allowed on this plan. */
234
+ /** Drop lifetime in seconds before expiry; null means drops are permanent. */
235
+ defaultTtlSeconds: number | null;
236
+ /** Maximum number of custom hostnames the workspace may connect. */
225
237
  maxCustomHostnames: number;
238
+ /** Maximum members the workspace may hold (owner included). */
239
+ seatLimit: number;
240
+ /** Maximum concurrent in-flight upload sessions (a transient concurrency cap). */
241
+ maxActiveUploadSessions: number;
242
+ };
243
+ /**
244
+ * The full capability matrix for the active plan — the single read to pre-check a
245
+ * feature gate before attempting an operation.
246
+ */
247
+ type Entitlements = {
248
+ /**
249
+ * Per-capability state for the active plan. Boolean caps are `true`/`false`;
250
+ * enum caps (`ogPreview`, `analytics`) carry a value — compare by value, never
251
+ * truthiness (`"none"` is truthy).
252
+ */
253
+ capabilities: Record<string, boolean | string>;
254
+ /**
255
+ * The lowest plan that unlocks each gated capability — drives the upgrade nudge.
256
+ * Enum sub-values are keyed `ogPreview.customImage` / `analytics.full`.
257
+ */
258
+ requiredPlan: Record<string, string>;
259
+ /** Numeric limits for the active plan. */
260
+ limits: EntitlementLimits;
226
261
  };
227
- /** Current resource usage for the account. */
262
+ /** Current resource usage for the account's active workspace. */
228
263
  type AccountUsage = {
229
264
  /** Total bytes consumed across all active drops. */
230
265
  storageUsedBytes: number;
231
266
  /** Number of custom domain hostnames currently in use. */
232
267
  customDomainsUsed: number;
268
+ /** Members currently in the workspace (owner included). */
269
+ seatsUsed: number;
233
270
  };
234
271
  /** The workspace a principal acts within (ADR 0066). For an sk_ API key, the workspace the key is bound to. */
235
272
  type AccountWorkspace = {
@@ -257,6 +294,43 @@ type Workspace = {
257
294
  plan: string;
258
295
  /** Whether this workspace is currently the caller's active workspace. */
259
296
  isActive: boolean;
297
+ /**
298
+ * On CREATE only (null otherwise): whether the credential that created this workspace can act
299
+ * in it. `false` means an allowlist-restricted key created a workspace outside its allowlist —
300
+ * it will be denied on the next write; re-authenticate to obtain a credential that reaches it.
301
+ */
302
+ creatorCanReach?: boolean | null;
303
+ };
304
+ /** A role grantable via invite or a member role-change (owner is transferred, never granted). */
305
+ type WorkspaceRole = "owner" | "admin" | "member";
306
+ type InvitableRole = "admin" | "member";
307
+ /** A member of a team workspace. */
308
+ type Member = {
309
+ accountId: string;
310
+ /** The member's email, or null if their account was deleted. */
311
+ email: string | null;
312
+ role: WorkspaceRole;
313
+ /** Whether this row is the calling account. */
314
+ isYou: boolean;
315
+ joinedAt: string;
316
+ };
317
+ type MemberListResponse = {
318
+ members: Member[];
319
+ };
320
+ /** An invitation to join a team workspace. */
321
+ type Invitation = {
322
+ id: string;
323
+ workspaceId: string;
324
+ email: string;
325
+ role: WorkspaceRole;
326
+ /** `pending`, `accepted`, or `revoked`. */
327
+ status: string;
328
+ expiresAt: string;
329
+ createdAt: string;
330
+ acceptedAt?: string | null;
331
+ };
332
+ type InvitationListResponse = {
333
+ invitations: Invitation[];
260
334
  };
261
335
  type AccountResponse = {
262
336
  id: string;
@@ -265,10 +339,11 @@ type AccountResponse = {
265
339
  plan: string;
266
340
  status: string;
267
341
  createdAt: string;
268
- limits: AccountLimits;
342
+ /** The full capability matrix + numeric limits for the active plan. */
343
+ entitlements: Entitlements;
269
344
  usage: AccountUsage;
270
345
  workspace: AccountWorkspace;
271
- /** URL to upgrade the account; null if already on the highest tier. */
346
+ /** URL to upgrade; present on every plan below Business, null on the top tier. */
272
347
  upgradeUrl: string | null;
273
348
  };
274
349
  type ListDropsParams = {
@@ -747,6 +822,14 @@ declare class ApiKeysResource {
747
822
  workspace?: string;
748
823
  /** Restrict a `delegated` key to these workspace slugs or ids. */
749
824
  allowedWorkspaces?: string[];
825
+ /**
826
+ * Request the credential's capability scopes (ADR 0068). Each entry is a bundle
827
+ * name (`publish`, `team`, `team-admin`) or a fine-grained scope (`members:admin`).
828
+ * The minted key gets the requested set intersected with your own scopes
829
+ * (downscope-only). Omit for the default `publish` bundle; pass `["team"]` to mint
830
+ * a credential that can create + manage teams (`login --scope team`).
831
+ */
832
+ scopes?: string[];
750
833
  }): Promise<DropthisResult<ApiKeyCreatedResponse>>;
751
834
  /** Revoke an API key. 204 No Content — data is null on success. */
752
835
  delete(keyId: string): Promise<DropthisResult<null>>;
@@ -920,8 +1003,21 @@ declare class WorkspacesResource {
920
1003
  list(): Promise<DropthisResult<{
921
1004
  workspaces: Workspace[];
922
1005
  }>>;
1006
+ /** Create a team workspace (the caller becomes its sole owner). Needs `workspaces:write`. */
1007
+ create(input: {
1008
+ name: string;
1009
+ /** URL-safe slug; derived from the name when omitted. A clash on an explicit slug → 409. */
1010
+ slug?: string;
1011
+ }): Promise<DropthisResult<Workspace>>;
1012
+ /** Rename a team workspace (owner/admin). Needs `workspaces:write`. */
1013
+ rename(workspaceId: string, input: {
1014
+ name?: string;
1015
+ slug?: string;
1016
+ }): Promise<DropthisResult<Workspace>>;
1017
+ /** Delete a team workspace (owner only). Needs `workspaces:admin`. 204 — data is null. */
1018
+ delete(workspaceId: string): Promise<DropthisResult<null>>;
923
1019
  use(workspace: string): Promise<DropthisResult<Workspace>>;
924
1020
  active(): Promise<DropthisResult<Workspace | null>>;
925
1021
  }
926
1022
 
927
- export { type UploadTarget as $, type AccountLimits as A, type ListPage as B, type CreateUploadSessionRequest as C, type DeploymentContentFile as D, type EmailOtpResponse as E, type PreparedPublishRequest as F, type GetContentOptions as G, type PreparedUploadFile as H, type InMemoryPublishInput as I, type PublishFileInput as J, type KeyType as K, type Limitations as L, type PublishInput as M, type NextHint as N, type PublishOptions as O, type PrepareOptions as P, type RequestOptions as Q, type RequestControls as R, type RevokeImpact as S, SHARED_POOL as T, type SessionResponse as U, type TierInfo as V, Transport as W, type UpdateContentOptions as X, type UploadManifestFile as Y, type UploadSessionFileResponse as Z, type UploadSessionResponse as _, AccountResource as a, type Workspace as a0, WorkspacesResource as a1, type AccountResponse as b, type AccountWorkspace as c, type ActionResolve as d, ApiKeysResource as e, type CreateUploadSessionResponse as f, CursorPage as g, type DeploymentContentManifest as h, DeploymentsResource as i, type DnsRecord as j, type DomainDeletedResponse as k, type DomainListResponse as l, type DomainResponse as m, DomainsResource as n, type DropAction as o, type DropContentFile as p, type DropDeploymentResponse as q, type DropOptions as r, type DropResponse as s, type DropWorkspace as t, DropsResource as u, type DropthisClientOptions as v, type DropthisErrorResponse as w, type DropthisResult as x, type ListDeploymentsParams as y, type ListDeploymentsResponse as z };
1023
+ export { type SessionResponse as $, AccountResource as A, type InvitableRole as B, type CreateUploadSessionRequest as C, type DeploymentContentFile as D, type EmailOtpResponse as E, type Invitation as F, type GetContentOptions as G, type InvitationListResponse as H, type InMemoryPublishInput as I, type ListDeploymentsParams as J, type KeyType as K, type Limitations as L, type ListDeploymentsResponse as M, type ListPage as N, type Member as O, type MemberListResponse as P, type NextHint as Q, type PrepareOptions as R, type PreparedPublishRequest as S, type PreparedUploadFile as T, type PublishFileInput as U, type PublishInput as V, type PublishOptions as W, type RequestControls as X, type RequestOptions as Y, type RevokeImpact as Z, SHARED_POOL as _, type AccountResponse as a, type TierInfo as a0, Transport as a1, type UpdateContentOptions as a2, type UploadManifestFile as a3, type UploadSessionFileResponse as a4, type UploadSessionResponse as a5, type UploadTarget as a6, type Workspace as a7, type WorkspaceRole as a8, WorkspacesResource as a9, type AccountUsage as b, type AccountWorkspace as c, type ActionResolve as d, ApiKeysResource as e, type CreateUploadSessionResponse as f, CursorPage as g, type DeploymentContentManifest as h, DeploymentsResource as i, type DnsRecord as j, type DomainDeletedResponse as k, type DomainListResponse as l, type DomainResponse as m, DomainsResource as n, type DropAction as o, type DropContentFile as p, type DropDeploymentResponse as q, type DropOptions as r, type DropResponse as s, type DropWorkspace as t, DropsResource as u, type DropthisClientOptions as v, type DropthisErrorResponse as w, type DropthisResult as x, type EntitlementLimits as y, type Entitlements as z };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dropthis/node",
3
- "version": "0.26.0",
3
+ "version": "0.29.0",
4
4
  "description": "Official Node.js SDK for Dropthis.",
5
5
  "license": "MIT",
6
6
  "repository": {
package/package.json CHANGED
@@ -1,51 +1,51 @@
1
1
  {
2
- "name": "@dropthis/cli",
3
- "version": "0.30.1",
4
- "description": "Official CLI for Dropthis.",
5
- "license": "MIT",
6
- "repository": {
7
- "type": "git",
8
- "url": "https://github.com/dropthis-dev/dropthis-cli"
9
- },
10
- "type": "module",
11
- "bin": {
12
- "dropthis": "./dist/cli.cjs"
13
- },
14
- "files": [
15
- "dist",
16
- "README.md"
17
- ],
18
- "bundledDependencies": [
19
- "@dropthis/node"
20
- ],
21
- "engines": {
22
- "node": ">=20"
23
- },
24
- "scripts": {
25
- "build": "tsup",
26
- "dev": "tsx src/cli.ts",
27
- "format": "biome check --vcs-enabled=true --vcs-client-kind=git --vcs-use-ignore-file=true --write .",
28
- "lint": "biome check --vcs-enabled=true --vcs-client-kind=git --vcs-use-ignore-file=true .",
29
- "typecheck": "tsc --noEmit",
30
- "test": "vitest run",
31
- "pack:dry": "npm pack --dry-run"
32
- },
33
- "dependencies": {
34
- "@clack/prompts": "1.4.0",
35
- "@dropthis/node": "^0.26.0",
36
- "@napi-rs/keyring": "1.3.0",
37
- "commander": "14.0.3",
38
- "picocolors": "1.1.1"
39
- },
40
- "devDependencies": {
41
- "@biomejs/biome": "2.4.11",
42
- "@types/node": "24.0.0",
43
- "tsup": "8.5.1",
44
- "tsx": "4.20.0",
45
- "typescript": "5.9.3",
46
- "vitest": "4.1.7"
47
- },
48
- "bundleDependencies": [
49
- "@dropthis/node"
50
- ]
2
+ "name": "@dropthis/cli",
3
+ "version": "0.33.0",
4
+ "description": "Official CLI for Dropthis.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/dropthis-dev/dropthis-cli"
9
+ },
10
+ "type": "module",
11
+ "bin": {
12
+ "dropthis": "./dist/cli.cjs"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "bundledDependencies": [
19
+ "@dropthis/node"
20
+ ],
21
+ "engines": {
22
+ "node": ">=20"
23
+ },
24
+ "scripts": {
25
+ "build": "tsup",
26
+ "dev": "tsx src/cli.ts",
27
+ "format": "biome check --vcs-enabled=true --vcs-client-kind=git --vcs-use-ignore-file=true --write .",
28
+ "lint": "biome check --vcs-enabled=true --vcs-client-kind=git --vcs-use-ignore-file=true .",
29
+ "typecheck": "tsc --noEmit",
30
+ "test": "vitest run",
31
+ "pack:dry": "npm pack --dry-run"
32
+ },
33
+ "dependencies": {
34
+ "@clack/prompts": "1.4.0",
35
+ "@dropthis/node": "^0.29.0",
36
+ "@napi-rs/keyring": "1.3.0",
37
+ "commander": "14.0.3",
38
+ "picocolors": "1.1.1"
39
+ },
40
+ "devDependencies": {
41
+ "@biomejs/biome": "2.4.11",
42
+ "@types/node": "24.0.0",
43
+ "tsup": "8.5.1",
44
+ "tsx": "4.20.0",
45
+ "typescript": "5.9.3",
46
+ "vitest": "4.1.7"
47
+ },
48
+ "bundleDependencies": [
49
+ "@dropthis/node"
50
+ ]
51
51
  }