@buoy-design/cli 0.1.9 → 0.1.11

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 (160) hide show
  1. package/dist/cloud/client.d.ts +261 -0
  2. package/dist/cloud/client.d.ts.map +1 -0
  3. package/dist/cloud/client.js +140 -0
  4. package/dist/cloud/client.js.map +1 -0
  5. package/dist/cloud/config.d.ts +51 -0
  6. package/dist/cloud/config.d.ts.map +1 -0
  7. package/dist/cloud/config.js +98 -0
  8. package/dist/cloud/config.js.map +1 -0
  9. package/dist/cloud/index.d.ts +5 -0
  10. package/dist/cloud/index.d.ts.map +1 -0
  11. package/dist/cloud/index.js +5 -0
  12. package/dist/cloud/index.js.map +1 -0
  13. package/dist/cloud/queue.d.ts +52 -0
  14. package/dist/cloud/queue.d.ts.map +1 -0
  15. package/dist/cloud/queue.js +108 -0
  16. package/dist/cloud/queue.js.map +1 -0
  17. package/dist/cloud/sync.d.ts +75 -0
  18. package/dist/cloud/sync.d.ts.map +1 -0
  19. package/dist/cloud/sync.js +116 -0
  20. package/dist/cloud/sync.js.map +1 -0
  21. package/dist/commands/begin.d.ts +8 -0
  22. package/dist/commands/begin.d.ts.map +1 -0
  23. package/dist/commands/begin.js +380 -0
  24. package/dist/commands/begin.js.map +1 -0
  25. package/dist/commands/billing.d.ts +11 -0
  26. package/dist/commands/billing.d.ts.map +1 -0
  27. package/dist/commands/billing.js +295 -0
  28. package/dist/commands/billing.js.map +1 -0
  29. package/dist/commands/ci.d.ts.map +1 -1
  30. package/dist/commands/ci.js +18 -0
  31. package/dist/commands/ci.js.map +1 -1
  32. package/dist/commands/dock.d.ts +3 -0
  33. package/dist/commands/dock.d.ts.map +1 -0
  34. package/dist/commands/dock.js +881 -0
  35. package/dist/commands/dock.js.map +1 -0
  36. package/dist/commands/drift.d.ts.map +1 -1
  37. package/dist/commands/drift.js +36 -2
  38. package/dist/commands/drift.js.map +1 -1
  39. package/dist/commands/explain.d.ts.map +1 -1
  40. package/dist/commands/explain.js +15 -3
  41. package/dist/commands/explain.js.map +1 -1
  42. package/dist/commands/github.d.ts +10 -0
  43. package/dist/commands/github.d.ts.map +1 -0
  44. package/dist/commands/github.js +223 -0
  45. package/dist/commands/github.js.map +1 -0
  46. package/dist/commands/history.d.ts +3 -0
  47. package/dist/commands/history.d.ts.map +1 -0
  48. package/dist/commands/history.js +320 -0
  49. package/dist/commands/history.js.map +1 -0
  50. package/dist/commands/index.d.ts +11 -1
  51. package/dist/commands/index.d.ts.map +1 -1
  52. package/dist/commands/index.js +12 -1
  53. package/dist/commands/index.js.map +1 -1
  54. package/dist/commands/link.d.ts +8 -0
  55. package/dist/commands/link.d.ts.map +1 -0
  56. package/dist/commands/link.js +279 -0
  57. package/dist/commands/link.js.map +1 -0
  58. package/dist/commands/login.d.ts +8 -0
  59. package/dist/commands/login.d.ts.map +1 -0
  60. package/dist/commands/login.js +143 -0
  61. package/dist/commands/login.js.map +1 -0
  62. package/dist/commands/logout.d.ts +8 -0
  63. package/dist/commands/logout.d.ts.map +1 -0
  64. package/dist/commands/logout.js +31 -0
  65. package/dist/commands/logout.js.map +1 -0
  66. package/dist/commands/scan.d.ts.map +1 -1
  67. package/dist/commands/scan.js +178 -31
  68. package/dist/commands/scan.js.map +1 -1
  69. package/dist/commands/status.d.ts.map +1 -1
  70. package/dist/commands/status.js +135 -20
  71. package/dist/commands/status.js.map +1 -1
  72. package/dist/commands/sync.d.ts +8 -0
  73. package/dist/commands/sync.d.ts.map +1 -0
  74. package/dist/commands/sync.js +126 -0
  75. package/dist/commands/sync.js.map +1 -0
  76. package/dist/commands/tokens.js +1 -1
  77. package/dist/commands/unlink.d.ts +8 -0
  78. package/dist/commands/unlink.d.ts.map +1 -0
  79. package/dist/commands/unlink.js +80 -0
  80. package/dist/commands/unlink.js.map +1 -0
  81. package/dist/commands/whoami.d.ts +8 -0
  82. package/dist/commands/whoami.d.ts.map +1 -0
  83. package/dist/commands/whoami.js +86 -0
  84. package/dist/commands/whoami.js.map +1 -0
  85. package/dist/config/auto-detect.d.ts.map +1 -1
  86. package/dist/config/auto-detect.js +9 -2
  87. package/dist/config/auto-detect.js.map +1 -1
  88. package/dist/config/loader.d.ts.map +1 -1
  89. package/dist/config/loader.js +6 -6
  90. package/dist/config/loader.js.map +1 -1
  91. package/dist/config/schema.d.ts +70 -0
  92. package/dist/config/schema.d.ts.map +1 -1
  93. package/dist/config/schema.js +8 -0
  94. package/dist/config/schema.js.map +1 -1
  95. package/dist/hooks/index.js +3 -3
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +15 -2
  98. package/dist/index.js.map +1 -1
  99. package/dist/insights/index.d.ts +3 -0
  100. package/dist/insights/index.d.ts.map +1 -0
  101. package/dist/insights/index.js +3 -0
  102. package/dist/insights/index.js.map +1 -0
  103. package/dist/insights/interactive.d.ts +11 -0
  104. package/dist/insights/interactive.d.ts.map +1 -0
  105. package/dist/insights/interactive.js +36 -0
  106. package/dist/insights/interactive.js.map +1 -0
  107. package/dist/insights/project-insights.d.ts +39 -0
  108. package/dist/insights/project-insights.d.ts.map +1 -0
  109. package/dist/insights/project-insights.js +198 -0
  110. package/dist/insights/project-insights.js.map +1 -0
  111. package/dist/integrations/github-formatter.js +4 -4
  112. package/dist/integrations/github-formatter.js.map +1 -1
  113. package/dist/output/formatters.d.ts +6 -0
  114. package/dist/output/formatters.d.ts.map +1 -1
  115. package/dist/output/formatters.js +236 -1
  116. package/dist/output/formatters.js.map +1 -1
  117. package/dist/scan/orchestrator.d.ts +14 -1
  118. package/dist/scan/orchestrator.d.ts.map +1 -1
  119. package/dist/scan/orchestrator.js +64 -4
  120. package/dist/scan/orchestrator.js.map +1 -1
  121. package/dist/services/architect.js +1 -1
  122. package/dist/services/architect.js.map +1 -1
  123. package/dist/services/drift-analysis.d.ts +3 -0
  124. package/dist/services/drift-analysis.d.ts.map +1 -1
  125. package/dist/services/drift-analysis.js +18 -2
  126. package/dist/services/drift-analysis.js.map +1 -1
  127. package/dist/store/cloud-store.d.ts +34 -0
  128. package/dist/store/cloud-store.d.ts.map +1 -0
  129. package/dist/store/cloud-store.js +100 -0
  130. package/dist/store/cloud-store.js.map +1 -0
  131. package/dist/store/index.d.ts +57 -0
  132. package/dist/store/index.d.ts.map +1 -0
  133. package/dist/store/index.js +93 -0
  134. package/dist/store/index.js.map +1 -0
  135. package/dist/store/local-store.d.ts +31 -0
  136. package/dist/store/local-store.d.ts.map +1 -0
  137. package/dist/store/local-store.js +384 -0
  138. package/dist/store/local-store.js.map +1 -0
  139. package/dist/store/types.d.ts +147 -0
  140. package/dist/store/types.d.ts.map +1 -0
  141. package/dist/store/types.js +6 -0
  142. package/dist/store/types.js.map +1 -0
  143. package/dist/wizard/ci-generator.d.ts +15 -0
  144. package/dist/wizard/ci-generator.d.ts.map +1 -0
  145. package/dist/wizard/ci-generator.js +129 -0
  146. package/dist/wizard/ci-generator.js.map +1 -0
  147. package/dist/wizard/index.d.ts +7 -0
  148. package/dist/wizard/index.d.ts.map +1 -0
  149. package/dist/wizard/index.js +7 -0
  150. package/dist/wizard/index.js.map +1 -0
  151. package/dist/wizard/issue-reviewer.d.ts +16 -0
  152. package/dist/wizard/issue-reviewer.d.ts.map +1 -0
  153. package/dist/wizard/issue-reviewer.js +183 -0
  154. package/dist/wizard/issue-reviewer.js.map +1 -0
  155. package/dist/wizard/menu.d.ts +46 -0
  156. package/dist/wizard/menu.d.ts.map +1 -0
  157. package/dist/wizard/menu.js +88 -0
  158. package/dist/wizard/menu.js.map +1 -0
  159. package/package.json +19 -15
  160. package/LICENSE +0 -21
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Buoy Cloud API Client
3
+ *
4
+ * HTTP client for interacting with the Buoy Cloud API
5
+ */
6
+ export interface ApiError {
7
+ error: string;
8
+ message?: string;
9
+ }
10
+ export interface ApiResponse<T> {
11
+ ok: boolean;
12
+ data?: T;
13
+ error?: string;
14
+ status: number;
15
+ }
16
+ /**
17
+ * Make an authenticated request to the Buoy Cloud API
18
+ */
19
+ export declare function apiRequest<T>(path: string, options?: RequestInit): Promise<ApiResponse<T>>;
20
+ export interface AuthMeResponse {
21
+ user: {
22
+ id: string;
23
+ email: string;
24
+ name: string | null;
25
+ avatarUrl: string | null;
26
+ githubLogin: string | null;
27
+ role: string;
28
+ };
29
+ account: {
30
+ id: string;
31
+ name: string;
32
+ slug: string;
33
+ plan: string;
34
+ };
35
+ }
36
+ export declare function getMe(): Promise<ApiResponse<AuthMeResponse>>;
37
+ export interface ApiKey {
38
+ id: string;
39
+ name: string;
40
+ keyPrefix: string;
41
+ scopes: string[];
42
+ lastUsedAt: string | null;
43
+ expiresAt: string | null;
44
+ createdAt: string;
45
+ }
46
+ export interface CreateApiKeyRequest {
47
+ name: string;
48
+ scopes?: string[];
49
+ expiresIn?: number;
50
+ }
51
+ export interface CreateApiKeyResponse extends ApiKey {
52
+ key: string;
53
+ }
54
+ export declare function listApiKeys(): Promise<ApiResponse<{
55
+ keys: ApiKey[];
56
+ }>>;
57
+ export declare function createApiKey(data: CreateApiKeyRequest): Promise<ApiResponse<CreateApiKeyResponse>>;
58
+ export declare function revokeApiKey(id: string): Promise<ApiResponse<{
59
+ success: boolean;
60
+ }>>;
61
+ export interface Project {
62
+ id: string;
63
+ name: string;
64
+ repoUrl: string | null;
65
+ defaultBranch: string;
66
+ settings: {
67
+ autoScan?: boolean;
68
+ prComments?: boolean;
69
+ checkRuns?: boolean;
70
+ };
71
+ createdAt: string;
72
+ updatedAt: string;
73
+ }
74
+ export interface CreateProjectRequest {
75
+ name: string;
76
+ repoUrl?: string;
77
+ defaultBranch?: string;
78
+ settings?: {
79
+ autoScan?: boolean;
80
+ prComments?: boolean;
81
+ checkRuns?: boolean;
82
+ };
83
+ }
84
+ export declare function listProjects(): Promise<ApiResponse<{
85
+ projects: Project[];
86
+ }>>;
87
+ export declare function getProject(id: string): Promise<ApiResponse<Project>>;
88
+ export declare function createProject(data: CreateProjectRequest): Promise<ApiResponse<Project>>;
89
+ export declare function updateProject(id: string, data: Partial<CreateProjectRequest>): Promise<ApiResponse<Project>>;
90
+ export declare function deleteProject(id: string): Promise<ApiResponse<{
91
+ success: boolean;
92
+ }>>;
93
+ export interface ScanComponent {
94
+ name: string;
95
+ path: string;
96
+ framework?: string;
97
+ props?: Array<{
98
+ name: string;
99
+ type?: string;
100
+ required?: boolean;
101
+ defaultValue?: unknown;
102
+ }>;
103
+ imports?: string[];
104
+ loc?: number;
105
+ }
106
+ export interface ScanToken {
107
+ name: string;
108
+ value: string;
109
+ type: string;
110
+ path?: string;
111
+ source?: string;
112
+ }
113
+ export interface ScanDriftSignal {
114
+ type: string;
115
+ severity: 'error' | 'warning' | 'info';
116
+ message: string;
117
+ file?: string;
118
+ line?: number;
119
+ component?: string;
120
+ token?: string;
121
+ suggestion?: string;
122
+ }
123
+ export interface UploadScanRequest {
124
+ commitSha?: string;
125
+ branch?: string;
126
+ author?: string;
127
+ timestamp?: string;
128
+ components: ScanComponent[];
129
+ tokens: ScanToken[];
130
+ drift: ScanDriftSignal[];
131
+ summary?: {
132
+ totalComponents: number;
133
+ totalTokens: number;
134
+ totalDrift: number;
135
+ driftByType?: Record<string, number>;
136
+ driftBySeverity?: Record<string, number>;
137
+ };
138
+ }
139
+ export interface UploadScanResponse {
140
+ id: string;
141
+ projectId: string;
142
+ summary: {
143
+ totalComponents: number;
144
+ totalTokens: number;
145
+ totalDrift: number;
146
+ driftByType?: Record<string, number>;
147
+ driftBySeverity?: Record<string, number>;
148
+ };
149
+ createdAt: string;
150
+ }
151
+ export interface Scan {
152
+ id: string;
153
+ commitSha: string | null;
154
+ branch: string | null;
155
+ author: string | null;
156
+ componentsCount: number;
157
+ tokensCount: number;
158
+ driftCount: number;
159
+ summary: {
160
+ totalComponents: number;
161
+ totalTokens: number;
162
+ totalDrift: number;
163
+ driftByType?: Record<string, number>;
164
+ driftBySeverity?: Record<string, number>;
165
+ } | null;
166
+ createdAt: string;
167
+ }
168
+ export declare function uploadScan(projectId: string, data: UploadScanRequest): Promise<ApiResponse<UploadScanResponse>>;
169
+ export declare function listScans(projectId: string, options?: {
170
+ limit?: number;
171
+ offset?: number;
172
+ }): Promise<ApiResponse<{
173
+ scans: Scan[];
174
+ total: number;
175
+ }>>;
176
+ export declare function getLatestScan(projectId: string, includeFull?: boolean): Promise<ApiResponse<Scan>>;
177
+ export interface GitHubInstallation {
178
+ id: string;
179
+ installationId: number;
180
+ accountLogin: string;
181
+ accountType: string;
182
+ avatarUrl: string | null;
183
+ repositorySelection: 'all' | 'selected';
184
+ suspended: boolean;
185
+ suspendedAt: string | null;
186
+ createdAt: string;
187
+ updatedAt: string;
188
+ }
189
+ export declare function listGitHubInstallations(): Promise<ApiResponse<{
190
+ installations: GitHubInstallation[];
191
+ }>>;
192
+ export declare function revokeGitHubInstallation(id: string): Promise<ApiResponse<{
193
+ success: boolean;
194
+ }>>;
195
+ export declare function getGitHubInstallUrl(endpoint: string): string;
196
+ export interface BillingPlan {
197
+ id: string;
198
+ name: string;
199
+ features: string[];
200
+ }
201
+ export interface BillingUsage {
202
+ period: string;
203
+ scans: number;
204
+ apiCalls: number;
205
+ storageBytes: number;
206
+ }
207
+ export interface BillingStatus {
208
+ plan: BillingPlan;
209
+ subscription: {
210
+ id: string;
211
+ customerId: string;
212
+ } | null;
213
+ limits: {
214
+ users: number | null;
215
+ currentUsers: number;
216
+ };
217
+ usage: BillingUsage;
218
+ trial: {
219
+ active: boolean;
220
+ daysRemaining: number;
221
+ endsAt: string;
222
+ converted: boolean;
223
+ } | null;
224
+ paymentAlert: {
225
+ status: string;
226
+ daysRemaining: number;
227
+ graceEndsAt: string;
228
+ failedAt: string;
229
+ } | null;
230
+ cancellation: {
231
+ requestedAt: string;
232
+ reason: string;
233
+ } | null;
234
+ }
235
+ export interface Invoice {
236
+ id: string;
237
+ number: string;
238
+ status: string;
239
+ amountDue: number;
240
+ amountPaid: number;
241
+ currency: string;
242
+ createdAt: string;
243
+ hostedUrl: string;
244
+ pdfUrl: string;
245
+ }
246
+ export declare function getBillingStatus(): Promise<ApiResponse<BillingStatus>>;
247
+ export declare function getInvoices(): Promise<ApiResponse<{
248
+ invoices: Invoice[];
249
+ }>>;
250
+ export declare function createCheckoutSession(): Promise<ApiResponse<{
251
+ checkoutUrl: string;
252
+ sessionId: string;
253
+ }>>;
254
+ export declare function createPortalSession(): Promise<ApiResponse<{
255
+ portalUrl: string;
256
+ }>>;
257
+ export declare function requestCancellation(reason: string, feedback?: string): Promise<ApiResponse<{
258
+ success: boolean;
259
+ message: string;
260
+ }>>;
261
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAChC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CA0CzB;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAElE;AAMD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,MAAM;IAClD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAAE,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC,CAE5E;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAK5C;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAIzF;AAMD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,WAAW,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAAC,CAElF;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAE1E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAK7F;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAClC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAK/B;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAI1F;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAK1C;AAED,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,WAAW,CAAC;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAMxD;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,UAAQ,GAClB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAG5B;AAMD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,KAAK,GAAG,UAAU,CAAC;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CACtD,WAAW,CAAC;IAAE,aAAa,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC,CACrD,CAEA;AAED,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAI5C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAMD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;IACT,YAAY,EAAE;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAE5E;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,CAAC,CAEjF;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CACpD,WAAW,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CACxD,CAIA;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAIvF;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAK7D"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Buoy Cloud API Client
3
+ *
4
+ * HTTP client for interacting with the Buoy Cloud API
5
+ */
6
+ import { getApiToken, getApiEndpoint } from './config.js';
7
+ /**
8
+ * Make an authenticated request to the Buoy Cloud API
9
+ */
10
+ export async function apiRequest(path, options = {}) {
11
+ const endpoint = getApiEndpoint();
12
+ const token = getApiToken();
13
+ const url = `${endpoint}${path}`;
14
+ const headers = {
15
+ 'Content-Type': 'application/json',
16
+ ...options.headers,
17
+ };
18
+ if (token) {
19
+ headers['Authorization'] = `Bearer ${token}`;
20
+ }
21
+ try {
22
+ const response = await fetch(url, {
23
+ ...options,
24
+ headers,
25
+ });
26
+ const data = await response.json().catch(() => ({}));
27
+ if (!response.ok) {
28
+ return {
29
+ ok: false,
30
+ error: data.error || `Request failed with status ${response.status}`,
31
+ status: response.status,
32
+ };
33
+ }
34
+ return {
35
+ ok: true,
36
+ data: data,
37
+ status: response.status,
38
+ };
39
+ }
40
+ catch (error) {
41
+ return {
42
+ ok: false,
43
+ error: error instanceof Error ? error.message : 'Network error',
44
+ status: 0,
45
+ };
46
+ }
47
+ }
48
+ export async function getMe() {
49
+ return apiRequest('/auth/me');
50
+ }
51
+ export async function listApiKeys() {
52
+ return apiRequest('/api-keys');
53
+ }
54
+ export async function createApiKey(data) {
55
+ return apiRequest('/api-keys', {
56
+ method: 'POST',
57
+ body: JSON.stringify(data),
58
+ });
59
+ }
60
+ export async function revokeApiKey(id) {
61
+ return apiRequest(`/api-keys/${id}`, {
62
+ method: 'DELETE',
63
+ });
64
+ }
65
+ export async function listProjects() {
66
+ return apiRequest('/projects');
67
+ }
68
+ export async function getProject(id) {
69
+ return apiRequest(`/projects/${id}`);
70
+ }
71
+ export async function createProject(data) {
72
+ return apiRequest('/projects', {
73
+ method: 'POST',
74
+ body: JSON.stringify(data),
75
+ });
76
+ }
77
+ export async function updateProject(id, data) {
78
+ return apiRequest(`/projects/${id}`, {
79
+ method: 'PATCH',
80
+ body: JSON.stringify(data),
81
+ });
82
+ }
83
+ export async function deleteProject(id) {
84
+ return apiRequest(`/projects/${id}`, {
85
+ method: 'DELETE',
86
+ });
87
+ }
88
+ export async function uploadScan(projectId, data) {
89
+ return apiRequest(`/projects/${projectId}/scans`, {
90
+ method: 'POST',
91
+ body: JSON.stringify(data),
92
+ });
93
+ }
94
+ export async function listScans(projectId, options) {
95
+ const params = new URLSearchParams();
96
+ if (options?.limit)
97
+ params.set('limit', String(options.limit));
98
+ if (options?.offset)
99
+ params.set('offset', String(options.offset));
100
+ const query = params.toString() ? `?${params.toString()}` : '';
101
+ return apiRequest(`/projects/${projectId}/scans${query}`);
102
+ }
103
+ export async function getLatestScan(projectId, includeFull = false) {
104
+ const query = includeFull ? '?include=full' : '';
105
+ return apiRequest(`/projects/${projectId}/scans/latest${query}`);
106
+ }
107
+ export async function listGitHubInstallations() {
108
+ return apiRequest('/github/installations');
109
+ }
110
+ export async function revokeGitHubInstallation(id) {
111
+ return apiRequest(`/github/installations/${id}`, {
112
+ method: 'DELETE',
113
+ });
114
+ }
115
+ export function getGitHubInstallUrl(endpoint) {
116
+ return `${endpoint}/github/install`;
117
+ }
118
+ export async function getBillingStatus() {
119
+ return apiRequest('/billing');
120
+ }
121
+ export async function getInvoices() {
122
+ return apiRequest('/billing/invoices');
123
+ }
124
+ export async function createCheckoutSession() {
125
+ return apiRequest('/billing/checkout', {
126
+ method: 'POST',
127
+ });
128
+ }
129
+ export async function createPortalSession() {
130
+ return apiRequest('/billing/portal', {
131
+ method: 'POST',
132
+ });
133
+ }
134
+ export async function requestCancellation(reason, feedback) {
135
+ return apiRequest('/billing/cancel-request', {
136
+ method: 'POST',
137
+ body: JSON.stringify({ reason, feedback }),
138
+ });
139
+ }
140
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cloud/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Buoy Cloud Configuration
3
+ *
4
+ * Manages cloud credentials and settings stored in ~/.buoy/
5
+ */
6
+ export interface CloudConfig {
7
+ apiToken?: string;
8
+ apiEndpoint?: string;
9
+ userId?: string;
10
+ accountId?: string;
11
+ accountName?: string;
12
+ email?: string;
13
+ }
14
+ /**
15
+ * Read cloud config from disk
16
+ */
17
+ export declare function readCloudConfig(): CloudConfig;
18
+ /**
19
+ * Write cloud config to disk
20
+ */
21
+ export declare function writeCloudConfig(config: CloudConfig): void;
22
+ /**
23
+ * Update specific fields in cloud config
24
+ */
25
+ export declare function updateCloudConfig(updates: Partial<CloudConfig>): CloudConfig;
26
+ /**
27
+ * Clear cloud config (logout)
28
+ */
29
+ export declare function clearCloudConfig(): void;
30
+ /**
31
+ * Get the API token if configured
32
+ */
33
+ export declare function getApiToken(): string | undefined;
34
+ /**
35
+ * Get the API endpoint
36
+ */
37
+ export declare function getApiEndpoint(): string;
38
+ /**
39
+ * Check if user is logged in
40
+ */
41
+ export declare function isLoggedIn(): boolean;
42
+ /**
43
+ * Get authenticated user info
44
+ */
45
+ export declare function getAuthenticatedUser(): {
46
+ userId?: string;
47
+ accountId?: string;
48
+ accountName?: string;
49
+ email?: string;
50
+ } | null;
51
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cloud/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAU7C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAK1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAK5E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,GAAG,SAAS,CAGhD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAGpC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CASP"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Buoy Cloud Configuration
3
+ *
4
+ * Manages cloud credentials and settings stored in ~/.buoy/
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'fs';
7
+ import { homedir } from 'os';
8
+ import { join } from 'path';
9
+ // Config directory and file paths
10
+ const CONFIG_DIR = join(homedir(), '.buoy');
11
+ const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
12
+ // Default API endpoint
13
+ const DEFAULT_API_ENDPOINT = 'https://api.buoy.design';
14
+ /**
15
+ * Ensure the config directory exists
16
+ */
17
+ function ensureConfigDir() {
18
+ if (!existsSync(CONFIG_DIR)) {
19
+ mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
20
+ }
21
+ }
22
+ /**
23
+ * Read cloud config from disk
24
+ */
25
+ export function readCloudConfig() {
26
+ try {
27
+ if (!existsSync(CONFIG_FILE)) {
28
+ return {};
29
+ }
30
+ const content = readFileSync(CONFIG_FILE, 'utf-8');
31
+ return JSON.parse(content);
32
+ }
33
+ catch {
34
+ return {};
35
+ }
36
+ }
37
+ /**
38
+ * Write cloud config to disk
39
+ */
40
+ export function writeCloudConfig(config) {
41
+ ensureConfigDir();
42
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
43
+ mode: 0o600, // Owner read/write only
44
+ });
45
+ }
46
+ /**
47
+ * Update specific fields in cloud config
48
+ */
49
+ export function updateCloudConfig(updates) {
50
+ const config = readCloudConfig();
51
+ const newConfig = { ...config, ...updates };
52
+ writeCloudConfig(newConfig);
53
+ return newConfig;
54
+ }
55
+ /**
56
+ * Clear cloud config (logout)
57
+ */
58
+ export function clearCloudConfig() {
59
+ if (existsSync(CONFIG_FILE)) {
60
+ unlinkSync(CONFIG_FILE);
61
+ }
62
+ }
63
+ /**
64
+ * Get the API token if configured
65
+ */
66
+ export function getApiToken() {
67
+ const config = readCloudConfig();
68
+ return config.apiToken;
69
+ }
70
+ /**
71
+ * Get the API endpoint
72
+ */
73
+ export function getApiEndpoint() {
74
+ const config = readCloudConfig();
75
+ return config.apiEndpoint || DEFAULT_API_ENDPOINT;
76
+ }
77
+ /**
78
+ * Check if user is logged in
79
+ */
80
+ export function isLoggedIn() {
81
+ const config = readCloudConfig();
82
+ return !!config.apiToken;
83
+ }
84
+ /**
85
+ * Get authenticated user info
86
+ */
87
+ export function getAuthenticatedUser() {
88
+ const config = readCloudConfig();
89
+ if (!config.apiToken)
90
+ return null;
91
+ return {
92
+ userId: config.userId,
93
+ accountId: config.accountId,
94
+ accountName: config.accountName,
95
+ email: config.email,
96
+ };
97
+ }
98
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cloud/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,kCAAkC;AAClC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,uBAAuB;AACvB,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAWvD;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAClD,eAAe,EAAE,CAAC;IAClB,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC1D,IAAI,EAAE,KAAK,EAAE,wBAAwB;KACtC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA6B;IAC7D,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;IAC5C,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,UAAU,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,MAAM,CAAC,WAAW,IAAI,oBAAoB,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAMlC,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './config.js';
2
+ export * from './client.js';
3
+ export * from './queue.js';
4
+ export * from './sync.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './config.js';
2
+ export * from './client.js';
3
+ export * from './queue.js';
4
+ export * from './sync.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Offline Queue for Failed Uploads
3
+ *
4
+ * When scan uploads fail (network issues, API errors), they're queued
5
+ * for retry. The queue is stored in .buoy/sync-queue.json in the project.
6
+ */
7
+ import type { UploadScanRequest } from './client.js';
8
+ export interface QueuedScan {
9
+ id: string;
10
+ projectId: string;
11
+ data: UploadScanRequest;
12
+ attempts: number;
13
+ lastAttempt: string;
14
+ error?: string;
15
+ createdAt: string;
16
+ }
17
+ export interface SyncQueue {
18
+ scans: QueuedScan[];
19
+ }
20
+ /**
21
+ * Read the sync queue
22
+ */
23
+ export declare function readQueue(projectRoot: string): SyncQueue;
24
+ /**
25
+ * Write the sync queue
26
+ */
27
+ export declare function writeQueue(projectRoot: string, queue: SyncQueue): void;
28
+ /**
29
+ * Add a failed scan to the queue
30
+ */
31
+ export declare function queueScan(projectRoot: string, projectId: string, data: UploadScanRequest, error?: string): QueuedScan;
32
+ /**
33
+ * Update a queued scan after a retry attempt
34
+ */
35
+ export declare function updateQueuedScan(projectRoot: string, scanId: string, updates: Partial<Pick<QueuedScan, 'attempts' | 'lastAttempt' | 'error'>>): void;
36
+ /**
37
+ * Remove a scan from the queue (after successful upload)
38
+ */
39
+ export declare function removeFromQueue(projectRoot: string, scanId: string): void;
40
+ /**
41
+ * Get pending scans that should be retried
42
+ */
43
+ export declare function getPendingScans(projectRoot: string, maxAttempts?: number): QueuedScan[];
44
+ /**
45
+ * Get count of queued scans
46
+ */
47
+ export declare function getQueueCount(projectRoot: string): number;
48
+ /**
49
+ * Clear all queued scans
50
+ */
51
+ export declare function clearQueue(projectRoot: string): void;
52
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/cloud/queue.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAmBD;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAWxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAItE;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,iBAAiB,EACvB,KAAK,CAAC,EAAE,MAAM,GACb,UAAU,CAkBZ;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,GACvE,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,SAAI,GAAG,UAAU,EAAE,CAGlF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAEpD"}