@fly.io/sdk 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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/dist/app.d.ts +181 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +212 -0
  5. package/dist/client.d.ts +42 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +200 -0
  8. package/dist/errors.d.ts +48 -0
  9. package/dist/errors.d.ts.map +1 -0
  10. package/dist/errors.js +85 -0
  11. package/dist/index.d.ts +28 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +18 -0
  14. package/dist/machine.d.ts +319 -0
  15. package/dist/machine.d.ts.map +1 -0
  16. package/dist/machine.js +249 -0
  17. package/dist/network.d.ts +45 -0
  18. package/dist/network.d.ts.map +1 -0
  19. package/dist/network.js +44 -0
  20. package/dist/organization.d.ts +20 -0
  21. package/dist/organization.d.ts.map +1 -0
  22. package/dist/organization.js +22 -0
  23. package/dist/regions.d.ts +35 -0
  24. package/dist/regions.d.ts.map +1 -0
  25. package/dist/regions.js +53 -0
  26. package/dist/secret.d.ts +55 -0
  27. package/dist/secret.d.ts.map +1 -0
  28. package/dist/secret.js +53 -0
  29. package/dist/token.d.ts +14 -0
  30. package/dist/token.d.ts.map +1 -0
  31. package/dist/token.js +16 -0
  32. package/dist/types.d.ts +937 -0
  33. package/dist/types.d.ts.map +1 -0
  34. package/dist/types.js +40 -0
  35. package/dist/volume.d.ts +72 -0
  36. package/dist/volume.d.ts.map +1 -0
  37. package/dist/volume.js +45 -0
  38. package/package.json +54 -0
  39. package/src/app.ts +462 -0
  40. package/src/client.ts +262 -0
  41. package/src/errors.ts +135 -0
  42. package/src/index.ts +141 -0
  43. package/src/machine.ts +644 -0
  44. package/src/network.ts +87 -0
  45. package/src/organization.ts +43 -0
  46. package/src/regions.ts +94 -0
  47. package/src/secret.ts +101 -0
  48. package/src/token.ts +29 -0
  49. package/src/types.ts +1072 -0
  50. package/src/volume.ts +124 -0
package/src/volume.ts ADDED
@@ -0,0 +1,124 @@
1
+ // Volume management for Fly Machines REST API.
2
+
3
+ import { Client } from './client.ts'
4
+ import { CreateVolumeRequest as ApiCreateVolumeRequest, UpdateVolumeRequest as ApiUpdateVolumeRequest } from './types.ts'
5
+ import type { FlyResult } from './errors.ts'
6
+
7
+ export interface ListVolumesRequest {
8
+ app_name: string
9
+ /** Only return summary info about volumes (omit blocks, block size, etc) */
10
+ summary?: boolean
11
+ }
12
+
13
+ export interface CreateVolumeRequest extends ApiCreateVolumeRequest {
14
+ app_name: string
15
+ name: string
16
+ region: string
17
+ }
18
+
19
+ export interface VolumeResponse {
20
+ id: string
21
+ name: string
22
+ state: string
23
+ size_gb: number
24
+ region: string
25
+ zone: string
26
+ encrypted: boolean
27
+ attached_machine_id: string | null
28
+ attached_alloc_id: string | null
29
+ auto_backup_enabled: boolean
30
+ created_at: string
31
+ blocks: number
32
+ block_size: number
33
+ blocks_free: number
34
+ blocks_avail: number
35
+ bytes_total: number
36
+ bytes_used: number
37
+ fstype: string
38
+ host_status: 'ok' | 'unknown' | 'unreachable'
39
+ snapshot_retention: number
40
+ }
41
+
42
+ export interface GetVolumeRequest {
43
+ app_name: string
44
+ volume_id: string
45
+ }
46
+
47
+ export type DeleteVolumeRequest = GetVolumeRequest
48
+
49
+ export interface UpdateVolumeRequest extends GetVolumeRequest, ApiUpdateVolumeRequest {}
50
+
51
+ export interface ExtendVolumeRequest extends GetVolumeRequest {
52
+ size_gb: number
53
+ }
54
+
55
+ export interface ExtendVolumeResponse {
56
+ needs_restart: boolean
57
+ volume: VolumeResponse
58
+ }
59
+
60
+ export type ListSnapshotsRequest = GetVolumeRequest
61
+
62
+ export interface SnapshotResponse {
63
+ id: string
64
+ created_at: string
65
+ digest: string
66
+ retention_days: number
67
+ size: number
68
+ status: string
69
+ volume_size: number
70
+ }
71
+
72
+ export class Volume {
73
+ private client: Client
74
+
75
+ constructor(client: Client) {
76
+ this.client = client
77
+ }
78
+
79
+ async listVolumes(payload: ListVolumesRequest): Promise<FlyResult<VolumeResponse[]>> {
80
+ const { app_name, summary } = payload
81
+ const params = new URLSearchParams()
82
+ if (summary !== undefined) {
83
+ params.set('summary', String(summary))
84
+ }
85
+ const query = params.toString()
86
+ const path = `apps/${app_name}/volumes${query ? `?${query}` : ''}`
87
+ return await this.client.restOrThrow(path)
88
+ }
89
+
90
+ async getVolume(payload: GetVolumeRequest): Promise<FlyResult<VolumeResponse>> {
91
+ const { app_name, volume_id } = payload
92
+ return await this.client.restOrThrow(`apps/${app_name}/volumes/${volume_id}`)
93
+ }
94
+
95
+ async createVolume(payload: CreateVolumeRequest): Promise<FlyResult<VolumeResponse>> {
96
+ const { app_name, ...body } = payload
97
+ return await this.client.restOrThrow(`apps/${app_name}/volumes`, 'POST', body)
98
+ }
99
+
100
+ async updateVolume(payload: UpdateVolumeRequest): Promise<FlyResult<VolumeResponse>> {
101
+ const { app_name, volume_id, ...body } = payload
102
+ return await this.client.restOrThrow(`apps/${app_name}/volumes/${volume_id}`, 'PUT', body)
103
+ }
104
+
105
+ async deleteVolume(payload: DeleteVolumeRequest): Promise<FlyResult<VolumeResponse>> {
106
+ const { app_name, volume_id } = payload
107
+ return await this.client.restOrThrow(`apps/${app_name}/volumes/${volume_id}`, 'DELETE')
108
+ }
109
+
110
+ async extendVolume(payload: ExtendVolumeRequest): Promise<FlyResult<ExtendVolumeResponse>> {
111
+ const { app_name, volume_id, ...body } = payload
112
+ return await this.client.restOrThrow(`apps/${app_name}/volumes/${volume_id}/extend`, 'PUT', body)
113
+ }
114
+
115
+ async listSnapshots(payload: ListSnapshotsRequest): Promise<FlyResult<SnapshotResponse[]>> {
116
+ const { app_name, volume_id } = payload
117
+ return await this.client.restOrThrow(`apps/${app_name}/volumes/${volume_id}/snapshots`)
118
+ }
119
+
120
+ async createSnapshot(payload: GetVolumeRequest): Promise<FlyResult<SnapshotResponse>> {
121
+ const { app_name, volume_id } = payload
122
+ return await this.client.restOrThrow(`apps/${app_name}/volumes/${volume_id}/snapshots`, 'POST')
123
+ }
124
+ }