@hypercli.com/sdk 0.9.1

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 (193) hide show
  1. package/README.md +629 -0
  2. package/dist/acp-driver.d.ts +72 -0
  3. package/dist/acp-driver.d.ts.map +1 -0
  4. package/dist/acp-driver.js +147 -0
  5. package/dist/acp-driver.js.map +1 -0
  6. package/dist/acp-pool.d.ts +70 -0
  7. package/dist/acp-pool.d.ts.map +1 -0
  8. package/dist/acp-pool.js +181 -0
  9. package/dist/acp-pool.js.map +1 -0
  10. package/dist/acp.d.ts +179 -0
  11. package/dist/acp.d.ts.map +1 -0
  12. package/dist/acp.js +487 -0
  13. package/dist/acp.js.map +1 -0
  14. package/dist/agent-persona.d.ts +68 -0
  15. package/dist/agent-persona.d.ts.map +1 -0
  16. package/dist/agent-persona.js +78 -0
  17. package/dist/agent-persona.js.map +1 -0
  18. package/dist/agent-slots.d.ts +18 -0
  19. package/dist/agent-slots.d.ts.map +1 -0
  20. package/dist/agent-slots.js +24 -0
  21. package/dist/agent-slots.js.map +1 -0
  22. package/dist/agent-urls.d.ts +47 -0
  23. package/dist/agent-urls.d.ts.map +1 -0
  24. package/dist/agent-urls.js +178 -0
  25. package/dist/agent-urls.js.map +1 -0
  26. package/dist/agent.d.ts +482 -0
  27. package/dist/agent.d.ts.map +1 -0
  28. package/dist/agent.js +926 -0
  29. package/dist/agent.js.map +1 -0
  30. package/dist/agents.d.ts +1452 -0
  31. package/dist/agents.d.ts.map +1 -0
  32. package/dist/agents.js +4022 -0
  33. package/dist/agents.js.map +1 -0
  34. package/dist/billing.d.ts +72 -0
  35. package/dist/billing.d.ts.map +1 -0
  36. package/dist/billing.js +93 -0
  37. package/dist/billing.js.map +1 -0
  38. package/dist/browser-jobs.d.ts +24 -0
  39. package/dist/browser-jobs.d.ts.map +1 -0
  40. package/dist/browser-jobs.js +209 -0
  41. package/dist/browser-jobs.js.map +1 -0
  42. package/dist/browser.d.ts +41 -0
  43. package/dist/browser.d.ts.map +1 -0
  44. package/dist/browser.js +57 -0
  45. package/dist/browser.js.map +1 -0
  46. package/dist/buzz-activity.d.ts +169 -0
  47. package/dist/buzz-activity.d.ts.map +1 -0
  48. package/dist/buzz-activity.js +844 -0
  49. package/dist/buzz-activity.js.map +1 -0
  50. package/dist/channels.d.ts +99 -0
  51. package/dist/channels.d.ts.map +1 -0
  52. package/dist/channels.js +27 -0
  53. package/dist/channels.js.map +1 -0
  54. package/dist/chat-integrations.d.ts +44 -0
  55. package/dist/chat-integrations.d.ts.map +1 -0
  56. package/dist/chat-integrations.js +138 -0
  57. package/dist/chat-integrations.js.map +1 -0
  58. package/dist/client.d.ts +88 -0
  59. package/dist/client.d.ts.map +1 -0
  60. package/dist/client.js +144 -0
  61. package/dist/client.js.map +1 -0
  62. package/dist/config.d.ts +44 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +192 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/connectors.d.ts +80 -0
  67. package/dist/connectors.d.ts.map +1 -0
  68. package/dist/connectors.js +2 -0
  69. package/dist/connectors.js.map +1 -0
  70. package/dist/errors.d.ts +16 -0
  71. package/dist/errors.d.ts.map +1 -0
  72. package/dist/errors.js +26 -0
  73. package/dist/errors.js.map +1 -0
  74. package/dist/files.d.ts +60 -0
  75. package/dist/files.d.ts.map +1 -0
  76. package/dist/files.js +128 -0
  77. package/dist/files.js.map +1 -0
  78. package/dist/http.d.ts +56 -0
  79. package/dist/http.d.ts.map +1 -0
  80. package/dist/http.js +362 -0
  81. package/dist/http.js.map +1 -0
  82. package/dist/index.d.ts +49 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +64 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/instances.d.ts +94 -0
  87. package/dist/instances.d.ts.map +1 -0
  88. package/dist/instances.js +197 -0
  89. package/dist/instances.js.map +1 -0
  90. package/dist/integrations.d.ts +111 -0
  91. package/dist/integrations.d.ts.map +1 -0
  92. package/dist/integrations.js +206 -0
  93. package/dist/integrations.js.map +1 -0
  94. package/dist/job/base.d.ts +86 -0
  95. package/dist/job/base.d.ts.map +1 -0
  96. package/dist/job/base.js +206 -0
  97. package/dist/job/base.js.map +1 -0
  98. package/dist/job/comfyui.d.ts +259 -0
  99. package/dist/job/comfyui.d.ts.map +1 -0
  100. package/dist/job/comfyui.js +1563 -0
  101. package/dist/job/comfyui.js.map +1 -0
  102. package/dist/job/gradio.d.ts +48 -0
  103. package/dist/job/gradio.d.ts.map +1 -0
  104. package/dist/job/gradio.js +90 -0
  105. package/dist/job/gradio.js.map +1 -0
  106. package/dist/job-codecs.d.ts +66 -0
  107. package/dist/job-codecs.d.ts.map +1 -0
  108. package/dist/job-codecs.js +132 -0
  109. package/dist/job-codecs.js.map +1 -0
  110. package/dist/jobs.d.ts +148 -0
  111. package/dist/jobs.d.ts.map +1 -0
  112. package/dist/jobs.js +480 -0
  113. package/dist/jobs.js.map +1 -0
  114. package/dist/keys.d.ts +99 -0
  115. package/dist/keys.d.ts.map +1 -0
  116. package/dist/keys.js +145 -0
  117. package/dist/keys.js.map +1 -0
  118. package/dist/logs.d.ts +54 -0
  119. package/dist/logs.d.ts.map +1 -0
  120. package/dist/logs.js +256 -0
  121. package/dist/logs.js.map +1 -0
  122. package/dist/managed-context.d.ts +20 -0
  123. package/dist/managed-context.d.ts.map +1 -0
  124. package/dist/managed-context.js +95 -0
  125. package/dist/managed-context.js.map +1 -0
  126. package/dist/mcp.d.ts +7 -0
  127. package/dist/mcp.d.ts.map +1 -0
  128. package/dist/mcp.js +8 -0
  129. package/dist/mcp.js.map +1 -0
  130. package/dist/memory.d.ts +87 -0
  131. package/dist/memory.d.ts.map +1 -0
  132. package/dist/memory.js +79 -0
  133. package/dist/memory.js.map +1 -0
  134. package/dist/models.d.ts +15 -0
  135. package/dist/models.d.ts.map +1 -0
  136. package/dist/models.js +19 -0
  137. package/dist/models.js.map +1 -0
  138. package/dist/openclaw-control-ui-origin.d.ts +23 -0
  139. package/dist/openclaw-control-ui-origin.d.ts.map +1 -0
  140. package/dist/openclaw-control-ui-origin.js +53 -0
  141. package/dist/openclaw-control-ui-origin.js.map +1 -0
  142. package/dist/renders.d.ts +187 -0
  143. package/dist/renders.d.ts.map +1 -0
  144. package/dist/renders.js +360 -0
  145. package/dist/renders.js.map +1 -0
  146. package/dist/routines.d.ts +59 -0
  147. package/dist/routines.d.ts.map +1 -0
  148. package/dist/routines.js +135 -0
  149. package/dist/routines.js.map +1 -0
  150. package/dist/runners.d.ts +61 -0
  151. package/dist/runners.d.ts.map +1 -0
  152. package/dist/runners.js +127 -0
  153. package/dist/runners.js.map +1 -0
  154. package/dist/sessions.d.ts +280 -0
  155. package/dist/sessions.d.ts.map +1 -0
  156. package/dist/sessions.js +292 -0
  157. package/dist/sessions.js.map +1 -0
  158. package/dist/skills.d.ts +170 -0
  159. package/dist/skills.d.ts.map +1 -0
  160. package/dist/skills.js +2 -0
  161. package/dist/skills.js.map +1 -0
  162. package/dist/user.d.ts +78 -0
  163. package/dist/user.d.ts.map +1 -0
  164. package/dist/user.js +143 -0
  165. package/dist/user.js.map +1 -0
  166. package/dist/version.d.ts +2 -0
  167. package/dist/version.d.ts.map +1 -0
  168. package/dist/version.js +3 -0
  169. package/dist/version.js.map +1 -0
  170. package/dist/voice-session.d.ts +66 -0
  171. package/dist/voice-session.d.ts.map +1 -0
  172. package/dist/voice-session.js +366 -0
  173. package/dist/voice-session.js.map +1 -0
  174. package/dist/voice-transcription-session.d.ts +64 -0
  175. package/dist/voice-transcription-session.d.ts.map +1 -0
  176. package/dist/voice-transcription-session.js +228 -0
  177. package/dist/voice-transcription-session.js.map +1 -0
  178. package/dist/voice.d.ts +62 -0
  179. package/dist/voice.d.ts.map +1 -0
  180. package/dist/voice.js +134 -0
  181. package/dist/voice.js.map +1 -0
  182. package/dist/workspace-tomd.d.ts +61 -0
  183. package/dist/workspace-tomd.d.ts.map +1 -0
  184. package/dist/workspace-tomd.js +177 -0
  185. package/dist/workspace-tomd.js.map +1 -0
  186. package/dist/workspaces.d.ts +255 -0
  187. package/dist/workspaces.d.ts.map +1 -0
  188. package/dist/workspaces.js +653 -0
  189. package/dist/workspaces.js.map +1 -0
  190. package/package.json +115 -0
  191. package/runtime/config-require.browser.js +4 -0
  192. package/runtime/config-require.d.ts +2 -0
  193. package/runtime/config-require.node.js +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instances.d.ts","sourceRoot":"","sources":["../src/instances.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ function gpuConfigFromDict(data) {
2
+ return {
3
+ gpuCount: data.gpu_count || 1,
4
+ cpuCores: data.cpu_cores || 0,
5
+ memoryGb: data.memory_gb || 0,
6
+ storageGb: data.storage_gb || 0,
7
+ regions: data.regions || [],
8
+ constraints: data.constraints || null,
9
+ };
10
+ }
11
+ function gpuTypeFromDict(id, data) {
12
+ return {
13
+ id,
14
+ name: data.name || id,
15
+ description: data.description || '',
16
+ configs: (data.configs || []).map(gpuConfigFromDict),
17
+ };
18
+ }
19
+ function regionFromDict(id, data) {
20
+ return {
21
+ id,
22
+ description: data.description || id,
23
+ country: data.country || '',
24
+ };
25
+ }
26
+ function pricingTierFromDict(region, data) {
27
+ return {
28
+ region,
29
+ onDemand: data['on-demand'] ?? null,
30
+ interruptible: data.interruptable ?? null, // Note: API has typo
31
+ };
32
+ }
33
+ function gpuPricingFromKey(key, data) {
34
+ // Parse key like "h100_x8" -> gpu_type="h100", gpu_count=8
35
+ const parts = key.split('_x');
36
+ const gpuType = parts[0];
37
+ const gpuCount = parts.length > 1 ? parseInt(parts[1]) : 1;
38
+ const tiers = Object.entries(data).map(([region, prices]) => pricingTierFromDict(region, prices));
39
+ return { gpuType, gpuCount, tiers };
40
+ }
41
+ export class Instances {
42
+ http;
43
+ typesCache = null;
44
+ regionsCache = null;
45
+ pricingCache = null;
46
+ constructor(http) {
47
+ this.http = http;
48
+ }
49
+ /**
50
+ * Get available GPU types
51
+ */
52
+ async types(refresh = false) {
53
+ if (this.typesCache === null || refresh) {
54
+ const data = await this.http.get('/instances/types');
55
+ this.typesCache = {};
56
+ for (const [id, info] of Object.entries(data)) {
57
+ this.typesCache[id] = gpuTypeFromDict(id, info);
58
+ }
59
+ }
60
+ return this.typesCache;
61
+ }
62
+ /**
63
+ * Get available regions
64
+ */
65
+ async regions(refresh = false) {
66
+ if (this.regionsCache === null || refresh) {
67
+ const data = await this.http.get('/instances/regions');
68
+ this.regionsCache = {};
69
+ for (const [id, info] of Object.entries(data)) {
70
+ this.regionsCache[id] = regionFromDict(id, info);
71
+ }
72
+ }
73
+ return this.regionsCache;
74
+ }
75
+ /**
76
+ * Get pricing information
77
+ */
78
+ async pricing(refresh = false) {
79
+ if (this.pricingCache === null || refresh) {
80
+ const data = await this.http.get('/instances/pricing');
81
+ this.pricingCache = {};
82
+ for (const [key, prices] of Object.entries(data)) {
83
+ this.pricingCache[key] = gpuPricingFromKey(key, prices);
84
+ }
85
+ }
86
+ return this.pricingCache;
87
+ }
88
+ /**
89
+ * Get a specific GPU type by ID
90
+ */
91
+ async getType(gpuType) {
92
+ const types = await this.types();
93
+ return types[gpuType] || null;
94
+ }
95
+ /**
96
+ * Get a specific region by ID
97
+ */
98
+ async getRegion(regionId) {
99
+ const regions = await this.regions();
100
+ return regions[regionId] || null;
101
+ }
102
+ /**
103
+ * Get price for a specific GPU configuration
104
+ */
105
+ async getPrice(gpuType, gpuCount = 1, region, interruptible = true) {
106
+ const key = `${gpuType}_x${gpuCount}`;
107
+ const pricing = await this.pricing();
108
+ const gpuPricing = pricing[key];
109
+ if (gpuPricing && region) {
110
+ for (const tier of gpuPricing.tiers) {
111
+ if (tier.region === region) {
112
+ return interruptible ? tier.interruptible : tier.onDemand;
113
+ }
114
+ }
115
+ }
116
+ return null;
117
+ }
118
+ /**
119
+ * Get real-time GPU capacity by type and region
120
+ */
121
+ async capacity(gpuType) {
122
+ const params = {};
123
+ if (gpuType) {
124
+ params.gpu_type = gpuType;
125
+ }
126
+ return await this.http.get('/api/jobs/instances/capacity', params);
127
+ }
128
+ /**
129
+ * List available GPU configurations, optionally filtered
130
+ */
131
+ async listAvailable(gpuType, region) {
132
+ const types = await this.types();
133
+ const regions = await this.regions();
134
+ const pricing = await this.pricing();
135
+ const results = [];
136
+ for (const [typeId, gpu] of Object.entries(types)) {
137
+ if (gpuType && typeId !== gpuType)
138
+ continue;
139
+ for (const config of gpu.configs) {
140
+ if (!config.regions.length)
141
+ continue;
142
+ if (region && !config.regions.includes(region))
143
+ continue;
144
+ const key = `${typeId}_x${config.gpuCount}`;
145
+ const gpuPricing = pricing[key];
146
+ for (const r of config.regions) {
147
+ if (region && r !== region)
148
+ continue;
149
+ const regionInfo = regions[r];
150
+ let priceSpot = null;
151
+ let priceOnDemand = null;
152
+ if (gpuPricing) {
153
+ for (const tier of gpuPricing.tiers) {
154
+ if (tier.region === r) {
155
+ priceSpot = tier.interruptible;
156
+ priceOnDemand = tier.onDemand;
157
+ break;
158
+ }
159
+ }
160
+ }
161
+ results.push({
162
+ gpuType: typeId,
163
+ gpuName: gpu.name,
164
+ gpuCount: config.gpuCount,
165
+ cpuCores: config.cpuCores,
166
+ memoryGb: config.memoryGb,
167
+ storageGb: config.storageGb,
168
+ region: r,
169
+ regionName: regionInfo?.description || r,
170
+ country: regionInfo?.country || '',
171
+ priceSpot,
172
+ priceOnDemand,
173
+ });
174
+ }
175
+ }
176
+ }
177
+ return results;
178
+ }
179
+ /**
180
+ * Get available regions for a GPU type and count
181
+ */
182
+ availableRegions(gpu, gpuCount = 1) {
183
+ for (const config of gpu.configs) {
184
+ if (config.gpuCount === gpuCount) {
185
+ return config.regions;
186
+ }
187
+ }
188
+ return [];
189
+ }
190
+ /**
191
+ * Get available GPU counts for a type
192
+ */
193
+ availableCounts(gpu) {
194
+ return gpu.configs.filter(c => c.regions.length > 0).map(c => c.gpuCount);
195
+ }
196
+ }
197
+ //# sourceMappingURL=instances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instances.js","sourceRoot":"","sources":["../src/instances.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ export declare function deriveIntegrationsApiBase(agentsApiBase?: string): string;
2
+ export interface Provider {
3
+ name: string;
4
+ providerId: string;
5
+ displayName: string;
6
+ auth: string;
7
+ modes: string[];
8
+ backend: string;
9
+ iconUrl: string;
10
+ categories: string[] | null;
11
+ docsUrl: string | null;
12
+ description: string | null;
13
+ connectFlow?: string;
14
+ }
15
+ export interface ConnectionInfo {
16
+ id: string;
17
+ errors: string[];
18
+ hyperEnabled: boolean | null;
19
+ /** User-pencilled display name, or provider-derived label. */
20
+ label: string | null;
21
+ createdAt: string | null;
22
+ }
23
+ export interface ConnectionEntry extends Provider {
24
+ connected: boolean;
25
+ backendAvailable: boolean;
26
+ connection: ConnectionInfo | null;
27
+ connections?: ConnectionInfo[];
28
+ }
29
+ export interface ConnectSession {
30
+ provider: string;
31
+ authorizeUrl: string;
32
+ expiresAt: string | null;
33
+ stack: string;
34
+ }
35
+ export interface TokenResponse {
36
+ provider: string;
37
+ accessToken: string;
38
+ expiresAt: string | null;
39
+ stack: string;
40
+ }
41
+ export interface CredentialsResponse {
42
+ provider: string;
43
+ connectionId: string;
44
+ credentials: Record<string, unknown>;
45
+ stack: string;
46
+ }
47
+ export interface ProxyOptions {
48
+ method?: string;
49
+ body?: any;
50
+ query?: Record<string, string | number | Array<string | number>>;
51
+ connectionId?: string;
52
+ headers?: Record<string, string>;
53
+ }
54
+ export declare class IntegrationsAPI {
55
+ private apiBase;
56
+ private apiKey;
57
+ private timeout;
58
+ constructor(apiKey: string, options?: {
59
+ apiBase?: string;
60
+ agentsApiBase?: string;
61
+ timeout?: number;
62
+ });
63
+ private headers;
64
+ private request;
65
+ /** GET /providers — catalog of configured integration providers. */
66
+ listProviders(): Promise<Provider[]>;
67
+ /** GET /connections — per-provider connection state for the caller. */
68
+ listConnections(): Promise<ConnectionEntry[]>;
69
+ /** POST /connections/{provider}/start — begin an OAuth connect session. */
70
+ startConnection(provider: string, connectionId?: string, newConnection?: boolean): Promise<ConnectSession>;
71
+ /**
72
+ * POST /connections/{provider}/complete — verify and enable the connection.
73
+ * Throws APIError 409 while the OAuth flow is still unfinished (pollable).
74
+ */
75
+ completeConnection(provider: string, connectionId?: string): Promise<{
76
+ provider: string;
77
+ connected: boolean;
78
+ connection: ConnectionInfo | null;
79
+ stack: string;
80
+ }>;
81
+ /** PATCH /connections/{provider} — enable/disable without disconnecting. */
82
+ setConnectionEnabled(provider: string, enabled: boolean, connectionId?: string): Promise<{
83
+ provider: string;
84
+ enabled: boolean;
85
+ }>;
86
+ /** PATCH /connections/{provider} — set the user's display name; null clears it. */
87
+ setConnectionLabel(provider: string, label: string | null, connectionId?: string): Promise<{
88
+ provider: string;
89
+ label: string | null;
90
+ }>;
91
+ /** DELETE /connections/{provider}. */
92
+ disconnect(provider: string, connectionId?: string): Promise<{
93
+ provider: string;
94
+ deleted: boolean;
95
+ }>;
96
+ /** POST /token/{provider} — mint a fresh access token for the connection. */
97
+ mintToken(provider: string, connectionId?: string): Promise<TokenResponse>;
98
+ /** Native Nango credentials; can include long-lived secrets. Requires credentials mode. */
99
+ credentials(provider: string, connectionId?: string): Promise<CredentialsResponse>;
100
+ /** Import native Nango credentials. Existing connection IDs must belong to the caller. */
101
+ importConnection(provider: string, credentials: Record<string, unknown>, options?: {
102
+ connectionId?: string;
103
+ connectionConfig?: Record<string, unknown>;
104
+ }): Promise<ConnectionInfo>;
105
+ /**
106
+ * ANY /proxy/{provider}/{path} — authenticated passthrough to the provider's
107
+ * upstream API with the connection's credentials attached server-side.
108
+ */
109
+ proxy(provider: string, path: string, options?: ProxyOptions): Promise<any>;
110
+ }
111
+ //# sourceMappingURL=integrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.d.ts","sourceRoot":"","sources":["../src/integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Integrations facade API - OAuth-backed third-party provider connections
3
+ * (GitHub, Slack, ...) fronted by the /integrations FastAPI service.
4
+ */
5
+ import { requestWithRetry, responseAPIError } from './http.js';
6
+ import { getAgentsApiBaseUrl } from './config.js';
7
+ export function deriveIntegrationsApiBase(agentsApiBase) {
8
+ const raw = (agentsApiBase || getAgentsApiBaseUrl()).replace(/\/$/, '');
9
+ const url = new URL(raw.includes('://') ? raw : `https://${raw}`);
10
+ let path = url.pathname.replace(/\/$/, '');
11
+ if (path.endsWith('/integrations')) {
12
+ return `${url.protocol}//${url.host}${path}`;
13
+ }
14
+ if (path.endsWith('/agents')) {
15
+ path = path.slice(0, -'/agents'.length);
16
+ }
17
+ return `${url.protocol}//${url.host}${path}/integrations`;
18
+ }
19
+ function stringOrNull(value) {
20
+ return typeof value === 'string' ? value : value === null ? null : value === undefined ? null : String(value);
21
+ }
22
+ function providerFromDict(data) {
23
+ return {
24
+ name: data?.name || '',
25
+ providerId: data?.provider_id ?? data?.providerId ?? '',
26
+ displayName: data?.display_name ?? data?.displayName ?? data?.name ?? '',
27
+ auth: data?.auth || '',
28
+ modes: Array.isArray(data?.modes) ? data.modes.map(String) : [],
29
+ backend: data?.backend || '',
30
+ iconUrl: data?.icon_url ?? data?.iconUrl ?? '',
31
+ categories: Array.isArray(data?.categories) ? data.categories.map(String) : null,
32
+ docsUrl: stringOrNull(data?.docs_url ?? data?.docsUrl),
33
+ description: stringOrNull(data?.description),
34
+ connectFlow: data?.connect_flow,
35
+ };
36
+ }
37
+ function connectionInfoFromDict(data) {
38
+ return {
39
+ id: String(data?.id ?? data?.connection_id ?? ''),
40
+ errors: Array.isArray(data?.errors) ? data.errors.map(String) : [],
41
+ hyperEnabled: data?.hyper_enabled ?? data?.hyperEnabled ?? (typeof data?.enabled === 'boolean' ? data.enabled : null),
42
+ label: typeof data?.label === 'string' && data.label ? data.label : null,
43
+ createdAt: stringOrNull(data?.created_at ?? data?.createdAt),
44
+ };
45
+ }
46
+ function connectionEntryFromDict(name, data) {
47
+ return {
48
+ ...providerFromDict({ name, ...data }),
49
+ connected: Boolean(data?.connected),
50
+ backendAvailable: data?.backend_available !== undefined ? Boolean(data.backend_available) : true,
51
+ connection: data?.connection ? connectionInfoFromDict(data.connection) : null,
52
+ connections: Array.isArray(data?.connections) ? data.connections.map(connectionInfoFromDict) : undefined,
53
+ };
54
+ }
55
+ function connectSessionFromDict(data) {
56
+ return {
57
+ provider: data?.provider || '',
58
+ authorizeUrl: data?.authorize_url ?? data?.authorizeUrl ?? '',
59
+ expiresAt: stringOrNull(data?.expires_at ?? data?.expiresAt),
60
+ stack: data?.stack || '',
61
+ };
62
+ }
63
+ function tokenResponseFromDict(data) {
64
+ return {
65
+ provider: data?.provider || '',
66
+ accessToken: data?.access_token ?? data?.accessToken ?? '',
67
+ expiresAt: stringOrNull(data?.expires_at ?? data?.expiresAt),
68
+ stack: data?.stack || '',
69
+ };
70
+ }
71
+ async function handleResponse(response, method) {
72
+ if (response.status >= 400) {
73
+ throw await responseAPIError(response, method);
74
+ }
75
+ if (response.status === 204 || response.status === 205)
76
+ return undefined;
77
+ const text = await response.text();
78
+ if (!text)
79
+ return undefined;
80
+ try {
81
+ return JSON.parse(text);
82
+ }
83
+ catch {
84
+ return text;
85
+ }
86
+ }
87
+ function encodeRef(value) {
88
+ return encodeURIComponent(value);
89
+ }
90
+ function encodePath(value) {
91
+ return value
92
+ .replace(/^\/+/, '')
93
+ .replace(/\/+$/, '')
94
+ .split('/')
95
+ .map(encodeURIComponent)
96
+ .join('/');
97
+ }
98
+ export class IntegrationsAPI {
99
+ apiBase;
100
+ apiKey;
101
+ timeout;
102
+ constructor(apiKey, options = {}) {
103
+ if (!apiKey) {
104
+ throw new Error('API key required for integrations');
105
+ }
106
+ this.apiKey = apiKey;
107
+ this.apiBase = (options.apiBase || deriveIntegrationsApiBase(options.agentsApiBase)).replace(/\/$/, '');
108
+ this.timeout = options.timeout ?? 90000;
109
+ }
110
+ headers() {
111
+ return {
112
+ Authorization: `Bearer ${this.apiKey}`,
113
+ 'Content-Type': 'application/json',
114
+ };
115
+ }
116
+ async request(method, path, body, query, extraHeaders) {
117
+ const response = await requestWithRetry({
118
+ method,
119
+ url: `${this.apiBase}${path}`,
120
+ headers: { ...this.headers(), ...extraHeaders },
121
+ body,
122
+ params: query,
123
+ retries: method === 'GET' ? 3 : 1,
124
+ timeout: this.timeout,
125
+ });
126
+ return handleResponse(response, method);
127
+ }
128
+ /** GET /providers — catalog of configured integration providers. */
129
+ async listProviders() {
130
+ const data = await this.request('GET', '/providers');
131
+ const providers = Array.isArray(data?.providers) ? data.providers : [];
132
+ return providers.map(providerFromDict);
133
+ }
134
+ /** GET /connections — per-provider connection state for the caller. */
135
+ async listConnections() {
136
+ const data = await this.request('GET', '/connections');
137
+ const connections = data?.connections && typeof data.connections === 'object' ? data.connections : {};
138
+ return Object.entries(connections).map(([name, entry]) => connectionEntryFromDict(name, entry));
139
+ }
140
+ /** POST /connections/{provider}/start — begin an OAuth connect session. */
141
+ async startConnection(provider, connectionId, newConnection = false) {
142
+ const query = {};
143
+ if (connectionId)
144
+ query.connection_id = connectionId;
145
+ if (newConnection)
146
+ query.new_connection = 'true';
147
+ const data = await this.request('POST', `/connections/${encodeRef(provider)}/start`, undefined, query);
148
+ return connectSessionFromDict(data);
149
+ }
150
+ /**
151
+ * POST /connections/{provider}/complete — verify and enable the connection.
152
+ * Throws APIError 409 while the OAuth flow is still unfinished (pollable).
153
+ */
154
+ async completeConnection(provider, connectionId) {
155
+ const data = await this.request('POST', `/connections/${encodeRef(provider)}/complete`, undefined, connectionId ? { connection_id: connectionId } : undefined);
156
+ return {
157
+ provider: data?.provider || '',
158
+ connected: Boolean(data?.connected),
159
+ connection: data?.connection ? connectionInfoFromDict(data.connection) : null,
160
+ stack: data?.stack || '',
161
+ };
162
+ }
163
+ /** PATCH /connections/{provider} — enable/disable without disconnecting. */
164
+ async setConnectionEnabled(provider, enabled, connectionId) {
165
+ return this.request('PATCH', `/connections/${encodeRef(provider)}`, { enabled }, connectionId ? { connection_id: connectionId } : undefined);
166
+ }
167
+ /** PATCH /connections/{provider} — set the user's display name; null clears it. */
168
+ async setConnectionLabel(provider, label, connectionId) {
169
+ return this.request('PATCH', `/connections/${encodeRef(provider)}`, { label }, connectionId ? { connection_id: connectionId } : undefined);
170
+ }
171
+ /** DELETE /connections/{provider}. */
172
+ async disconnect(provider, connectionId) {
173
+ return this.request('DELETE', `/connections/${encodeRef(provider)}`, undefined, connectionId ? { connection_id: connectionId } : undefined);
174
+ }
175
+ /** POST /token/{provider} — mint a fresh access token for the connection. */
176
+ async mintToken(provider, connectionId) {
177
+ const data = await this.request('POST', `/token/${encodeRef(provider)}`, undefined, connectionId ? { connection_id: connectionId } : undefined);
178
+ return tokenResponseFromDict(data);
179
+ }
180
+ /** Native Nango credentials; can include long-lived secrets. Requires credentials mode. */
181
+ async credentials(provider, connectionId) {
182
+ const data = await this.request('POST', `/credentials/${encodeRef(provider)}`, undefined, connectionId ? { connection_id: connectionId } : undefined);
183
+ return { provider: data.provider, connectionId: data.connection_id, credentials: data.credentials, stack: data.stack };
184
+ }
185
+ /** Import native Nango credentials. Existing connection IDs must belong to the caller. */
186
+ async importConnection(provider, credentials, options = {}) {
187
+ const data = await this.request('POST', `/connections/${encodeRef(provider)}/import`, { credentials, connection_config: options.connectionConfig ?? {} }, options.connectionId ? { connection_id: options.connectionId } : undefined);
188
+ return connectionInfoFromDict(data.connection);
189
+ }
190
+ /**
191
+ * ANY /proxy/{provider}/{path} — authenticated passthrough to the provider's
192
+ * upstream API with the connection's credentials attached server-side.
193
+ */
194
+ async proxy(provider, path, options = {}) {
195
+ const method = (options.method || 'GET').toUpperCase();
196
+ const headers = {};
197
+ if (options.connectionId)
198
+ headers['X-HyperCLI-Connection-Id'] = options.connectionId;
199
+ for (const [key, value] of Object.entries(options.headers ?? {}))
200
+ headers[`Nango-Proxy-${key}`] = value;
201
+ const [pathname, queryString] = path.split('?', 2);
202
+ const query = { ...Object.fromEntries(new URLSearchParams(queryString)), ...options.query };
203
+ return this.request(method, `/proxy/${encodeRef(provider)}/${encodePath(pathname)}`, options.body, query, headers);
204
+ }
205
+ }
206
+ //# sourceMappingURL=integrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../src/integrations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Base job class for GPU workloads
3
+ */
4
+ import type { HyperCLI } from '../client.js';
5
+ import type { Job } from '../jobs.js';
6
+ export interface BaseJobOptions {
7
+ image?: string;
8
+ gpuType?: string;
9
+ gpuCount?: number;
10
+ runtime?: number;
11
+ [key: string]: any;
12
+ }
13
+ /**
14
+ * Base class for managed GPU jobs with lifecycle helpers
15
+ */
16
+ export declare class BaseJob {
17
+ client: HyperCLI;
18
+ job: Job;
19
+ static DEFAULT_IMAGE: string;
20
+ static DEFAULT_GPU_TYPE: string;
21
+ static HEALTH_ENDPOINT: string;
22
+ static HEALTH_TIMEOUT: number;
23
+ /**
24
+ * Consumer-side hostname settling window. The API returns after committing
25
+ * the Cloudflare record; waiting before the first lookup avoids caching a
26
+ * transient NXDOMAIN in recursive resolvers.
27
+ */
28
+ static DEFAULT_HOSTNAME_SETTLE_DELAY: number;
29
+ protected _baseUrl: string | null;
30
+ constructor(client: HyperCLI, job: Job);
31
+ get jobId(): string;
32
+ get hostname(): string | null;
33
+ get baseUrl(): string;
34
+ get authHeaders(): Record<string, string>;
35
+ /**
36
+ * Find an existing running job, optionally filtering by image
37
+ */
38
+ static getRunning<T extends typeof BaseJob>(this: T, client: HyperCLI, imageFilter?: string): Promise<InstanceType<T> | null>;
39
+ /**
40
+ * Get a job by ID, hostname, or IP address
41
+ */
42
+ static getByInstance<T extends typeof BaseJob>(this: T, client: HyperCLI, instance: string, state?: string): Promise<InstanceType<T>>;
43
+ /**
44
+ * Create a new job
45
+ */
46
+ static create<T extends typeof BaseJob>(this: T, client: HyperCLI, options?: BaseJobOptions): Promise<InstanceType<T>>;
47
+ /**
48
+ * Get existing running job or create new one
49
+ */
50
+ static getOrCreate<T extends typeof BaseJob>(this: T, client: HyperCLI, options?: BaseJobOptions & {
51
+ reuse?: boolean;
52
+ }): Promise<InstanceType<T>>;
53
+ /**
54
+ * Refresh job state from API
55
+ */
56
+ refresh(): Promise<this>;
57
+ /**
58
+ * Wait for job to reach running state via API polling
59
+ */
60
+ waitForRunning(timeout?: number, pollInterval?: number): Promise<boolean>;
61
+ /**
62
+ * Alias for waitForRunning
63
+ */
64
+ waitForHostname(timeout?: number, pollInterval?: number): Promise<boolean>;
65
+ /**
66
+ * Check if the service is responding
67
+ */
68
+ checkHealth(): Promise<boolean>;
69
+ /**
70
+ * Wait for an EXISTING running job to respond to health checks
71
+ */
72
+ waitExisting(timeout?: number): Promise<boolean>;
73
+ /**
74
+ * Wait for a NEW job to be ready (running state + health check passing)
75
+ */
76
+ waitReady(timeout?: number, pollInterval?: number, dnsDelay?: number): Promise<boolean>;
77
+ /**
78
+ * Cancel the job
79
+ */
80
+ shutdown(): Promise<any>;
81
+ /**
82
+ * Extend job runtime
83
+ */
84
+ extend(runtime: number): Promise<this>;
85
+ }
86
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/job/base.ts"],"names":[],"mappings":"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"}