@nosana/api 2.12.0 → 2.13.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 (214) hide show
  1. package/README.md +35 -0
  2. package/dist/client/createClient.d.ts +5 -3
  3. package/dist/client/createClient.d.ts.map +1 -1
  4. package/dist/client/createClient.js +4 -2
  5. package/dist/client/createClient.js.map +1 -1
  6. package/dist/client/deployment-manager/schema.d.ts +166 -100
  7. package/dist/client/deployment-manager/schema.d.ts.map +1 -1
  8. package/dist/client/index.d.ts +1 -0
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +1 -0
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/client/node/index.d.ts +23 -0
  13. package/dist/client/node/index.d.ts.map +1 -0
  14. package/dist/client/node/index.js +24 -0
  15. package/dist/client/node/index.js.map +1 -0
  16. package/dist/defaults/index.d.ts.map +1 -1
  17. package/dist/defaults/index.js +3 -0
  18. package/dist/defaults/index.js.map +1 -1
  19. package/dist/index.d.ts +32 -8
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +26 -7
  22. package/dist/index.js.map +1 -1
  23. package/dist/routes/auth/index.d.ts.map +1 -1
  24. package/dist/routes/auth/index.js +12 -0
  25. package/dist/routes/auth/index.js.map +1 -1
  26. package/dist/routes/auth/types.d.ts +8 -0
  27. package/dist/routes/auth/types.d.ts.map +1 -1
  28. package/dist/routes/deployments/deployment/actions/deploymentAddSshKeys.d.ts +9 -0
  29. package/dist/routes/deployments/deployment/actions/deploymentAddSshKeys.d.ts.map +1 -0
  30. package/dist/routes/deployments/deployment/actions/deploymentAddSshKeys.js +17 -0
  31. package/dist/routes/deployments/deployment/actions/deploymentAddSshKeys.js.map +1 -0
  32. package/dist/routes/deployments/deployment/actions/deploymentGetSshKeys.d.ts +7 -0
  33. package/dist/routes/deployments/deployment/actions/deploymentGetSshKeys.d.ts.map +1 -0
  34. package/dist/routes/deployments/deployment/actions/deploymentGetSshKeys.js +14 -0
  35. package/dist/routes/deployments/deployment/actions/deploymentGetSshKeys.js.map +1 -0
  36. package/dist/routes/deployments/deployment/actions/deploymentRemoveSshKeys.d.ts +9 -0
  37. package/dist/routes/deployments/deployment/actions/deploymentRemoveSshKeys.d.ts.map +1 -0
  38. package/dist/routes/deployments/deployment/actions/deploymentRemoveSshKeys.js +17 -0
  39. package/dist/routes/deployments/deployment/actions/deploymentRemoveSshKeys.js.map +1 -0
  40. package/dist/routes/deployments/deployment/actions/deploymentStream.d.ts.map +1 -1
  41. package/dist/routes/deployments/deployment/actions/deploymentStream.js +10 -30
  42. package/dist/routes/deployments/deployment/actions/deploymentStream.js.map +1 -1
  43. package/dist/routes/deployments/deployment/actions/index.d.ts +3 -0
  44. package/dist/routes/deployments/deployment/actions/index.d.ts.map +1 -1
  45. package/dist/routes/deployments/deployment/actions/index.js +3 -0
  46. package/dist/routes/deployments/deployment/actions/index.js.map +1 -1
  47. package/dist/routes/deployments/deployment/createDeployment.d.ts.map +1 -1
  48. package/dist/routes/deployments/deployment/createDeployment.js +68 -12
  49. package/dist/routes/deployments/deployment/createDeployment.js.map +1 -1
  50. package/dist/routes/deployments/types.d.ts +44 -10
  51. package/dist/routes/deployments/types.d.ts.map +1 -1
  52. package/dist/routes/index.d.ts +1 -0
  53. package/dist/routes/index.d.ts.map +1 -1
  54. package/dist/routes/index.js +1 -0
  55. package/dist/routes/index.js.map +1 -1
  56. package/dist/routes/jobs/index.d.ts +8 -2
  57. package/dist/routes/jobs/index.d.ts.map +1 -1
  58. package/dist/routes/jobs/index.js +28 -14
  59. package/dist/routes/jobs/index.js.map +1 -1
  60. package/dist/routes/jobs/types.d.ts +16 -1
  61. package/dist/routes/jobs/types.d.ts.map +1 -1
  62. package/dist/routes/node/__tests__/fixtures.d.ts +30 -0
  63. package/dist/routes/node/__tests__/fixtures.d.ts.map +1 -0
  64. package/dist/routes/node/__tests__/fixtures.js +38 -0
  65. package/dist/routes/node/__tests__/fixtures.js.map +1 -0
  66. package/dist/routes/node/actions/authorization.d.ts +4 -0
  67. package/dist/routes/node/actions/authorization.d.ts.map +1 -0
  68. package/dist/routes/node/actions/authorization.js +9 -0
  69. package/dist/routes/node/actions/authorization.js.map +1 -0
  70. package/dist/routes/node/actions/nodeInfo.d.ts +4 -0
  71. package/dist/routes/node/actions/nodeInfo.d.ts.map +1 -0
  72. package/dist/routes/node/actions/nodeInfo.js +9 -0
  73. package/dist/routes/node/actions/nodeInfo.js.map +1 -0
  74. package/dist/routes/node/actions/nodeJob/index.d.ts +14 -0
  75. package/dist/routes/node/actions/nodeJob/index.d.ts.map +1 -0
  76. package/dist/routes/node/actions/nodeJob/index.js +14 -0
  77. package/dist/routes/node/actions/nodeJob/index.js.map +1 -0
  78. package/dist/routes/node/actions/nodeJob/nodeJobDefinition.d.ts +4 -0
  79. package/dist/routes/node/actions/nodeJob/nodeJobDefinition.d.ts.map +1 -0
  80. package/dist/routes/node/actions/nodeJob/nodeJobDefinition.js +9 -0
  81. package/dist/routes/node/actions/nodeJob/nodeJobDefinition.js.map +1 -0
  82. package/dist/routes/node/actions/nodeJob/nodeJobEndpoints.d.ts +4 -0
  83. package/dist/routes/node/actions/nodeJob/nodeJobEndpoints.d.ts.map +1 -0
  84. package/dist/routes/node/actions/nodeJob/nodeJobEndpoints.js +9 -0
  85. package/dist/routes/node/actions/nodeJob/nodeJobEndpoints.js.map +1 -0
  86. package/dist/routes/node/actions/nodeJob/nodeJobGroup.d.ts +4 -0
  87. package/dist/routes/node/actions/nodeJob/nodeJobGroup.d.ts.map +1 -0
  88. package/dist/routes/node/actions/nodeJob/nodeJobGroup.js +11 -0
  89. package/dist/routes/node/actions/nodeJob/nodeJobGroup.js.map +1 -0
  90. package/dist/routes/node/actions/nodeJob/nodeJobOperation.d.ts +3 -0
  91. package/dist/routes/node/actions/nodeJob/nodeJobOperation.d.ts.map +1 -0
  92. package/dist/routes/node/actions/nodeJob/nodeJobOperation.js +9 -0
  93. package/dist/routes/node/actions/nodeJob/nodeJobOperation.js.map +1 -0
  94. package/dist/routes/node/actions/nodeJob/nodeJobOperations.d.ts +4 -0
  95. package/dist/routes/node/actions/nodeJob/nodeJobOperations.d.ts.map +1 -0
  96. package/dist/routes/node/actions/nodeJob/nodeJobOperations.js +9 -0
  97. package/dist/routes/node/actions/nodeJob/nodeJobOperations.js.map +1 -0
  98. package/dist/routes/node/actions/nodeJob/nodeJobResults.d.ts +4 -0
  99. package/dist/routes/node/actions/nodeJob/nodeJobResults.d.ts.map +1 -0
  100. package/dist/routes/node/actions/nodeJob/nodeJobResults.js +9 -0
  101. package/dist/routes/node/actions/nodeJob/nodeJobResults.js.map +1 -0
  102. package/dist/routes/node/actions/nodeJob/nodeJobStats.d.ts +4 -0
  103. package/dist/routes/node/actions/nodeJob/nodeJobStats.d.ts.map +1 -0
  104. package/dist/routes/node/actions/nodeJob/nodeJobStats.js +9 -0
  105. package/dist/routes/node/actions/nodeJob/nodeJobStats.js.map +1 -0
  106. package/dist/routes/node/actions/nodeJob/restartNodeJobGroup.d.ts +3 -0
  107. package/dist/routes/node/actions/nodeJob/restartNodeJobGroup.d.ts.map +1 -0
  108. package/dist/routes/node/actions/nodeJob/restartNodeJobGroup.js +10 -0
  109. package/dist/routes/node/actions/nodeJob/restartNodeJobGroup.js.map +1 -0
  110. package/dist/routes/node/actions/nodeJob/restartNodeJobOperation.d.ts +3 -0
  111. package/dist/routes/node/actions/nodeJob/restartNodeJobOperation.d.ts.map +1 -0
  112. package/dist/routes/node/actions/nodeJob/restartNodeJobOperation.js +10 -0
  113. package/dist/routes/node/actions/nodeJob/restartNodeJobOperation.js.map +1 -0
  114. package/dist/routes/node/actions/nodeJob/setNodeJobDefinition.d.ts +4 -0
  115. package/dist/routes/node/actions/nodeJob/setNodeJobDefinition.d.ts.map +1 -0
  116. package/dist/routes/node/actions/nodeJob/setNodeJobDefinition.js +12 -0
  117. package/dist/routes/node/actions/nodeJob/setNodeJobDefinition.js.map +1 -0
  118. package/dist/routes/node/actions/nodeJob/stopNodeJob.d.ts +3 -0
  119. package/dist/routes/node/actions/nodeJob/stopNodeJob.d.ts.map +1 -0
  120. package/dist/routes/node/actions/nodeJob/stopNodeJob.js +11 -0
  121. package/dist/routes/node/actions/nodeJob/stopNodeJob.js.map +1 -0
  122. package/dist/routes/node/actions/nodeJob/stopNodeJobGroup.d.ts +3 -0
  123. package/dist/routes/node/actions/nodeJob/stopNodeJobGroup.d.ts.map +1 -0
  124. package/dist/routes/node/actions/nodeJob/stopNodeJobGroup.js +10 -0
  125. package/dist/routes/node/actions/nodeJob/stopNodeJobGroup.js.map +1 -0
  126. package/dist/routes/node/actions/nodeJob/stopNodeJobOperation.d.ts +3 -0
  127. package/dist/routes/node/actions/nodeJob/stopNodeJobOperation.d.ts.map +1 -0
  128. package/dist/routes/node/actions/nodeJob/stopNodeJobOperation.js +10 -0
  129. package/dist/routes/node/actions/nodeJob/stopNodeJobOperation.js.map +1 -0
  130. package/dist/routes/node/actions/nodeJobSsh/index.d.ts +4 -0
  131. package/dist/routes/node/actions/nodeJobSsh/index.d.ts.map +1 -0
  132. package/dist/routes/node/actions/nodeJobSsh/index.js +4 -0
  133. package/dist/routes/node/actions/nodeJobSsh/index.js.map +1 -0
  134. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.d.ts +5 -0
  135. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.d.ts.map +1 -0
  136. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.js +25 -0
  137. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.js.map +1 -0
  138. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.d.ts +4 -0
  139. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.d.ts.map +1 -0
  140. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.js +12 -0
  141. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.js.map +1 -0
  142. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.d.ts +4 -0
  143. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.d.ts.map +1 -0
  144. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.js +14 -0
  145. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.js.map +1 -0
  146. package/dist/routes/node/actions/nodeJobStreams/index.d.ts +3 -0
  147. package/dist/routes/node/actions/nodeJobStreams/index.d.ts.map +1 -0
  148. package/dist/routes/node/actions/nodeJobStreams/index.js +3 -0
  149. package/dist/routes/node/actions/nodeJobStreams/index.js.map +1 -0
  150. package/dist/routes/node/actions/nodeJobStreams/nodeJobInfoStream.d.ts +4 -0
  151. package/dist/routes/node/actions/nodeJobStreams/nodeJobInfoStream.d.ts.map +1 -0
  152. package/dist/routes/node/actions/nodeJobStreams/nodeJobInfoStream.js +5 -0
  153. package/dist/routes/node/actions/nodeJobStreams/nodeJobInfoStream.js.map +1 -0
  154. package/dist/routes/node/actions/nodeJobStreams/nodeJobStatsStream.d.ts +4 -0
  155. package/dist/routes/node/actions/nodeJobStreams/nodeJobStatsStream.d.ts.map +1 -0
  156. package/dist/routes/node/actions/nodeJobStreams/nodeJobStatsStream.js +6 -0
  157. package/dist/routes/node/actions/nodeJobStreams/nodeJobStatsStream.js.map +1 -0
  158. package/dist/routes/node/actions/nodeJobStreams/nodeStream.d.ts +5 -0
  159. package/dist/routes/node/actions/nodeJobStreams/nodeStream.d.ts.map +1 -0
  160. package/dist/routes/node/actions/nodeJobStreams/nodeStream.js +10 -0
  161. package/dist/routes/node/actions/nodeJobStreams/nodeStream.js.map +1 -0
  162. package/dist/routes/node/actions/nodeSocket/index.d.ts +4 -0
  163. package/dist/routes/node/actions/nodeSocket/index.d.ts.map +1 -0
  164. package/dist/routes/node/actions/nodeSocket/index.js +4 -0
  165. package/dist/routes/node/actions/nodeSocket/index.js.map +1 -0
  166. package/dist/routes/node/actions/nodeSocket/nodeJobLogs.d.ts +3 -0
  167. package/dist/routes/node/actions/nodeSocket/nodeJobLogs.d.ts.map +1 -0
  168. package/dist/routes/node/actions/nodeSocket/nodeJobLogs.js +10 -0
  169. package/dist/routes/node/actions/nodeSocket/nodeJobLogs.js.map +1 -0
  170. package/dist/routes/node/actions/nodeSocket/nodeJobStatus.d.ts +3 -0
  171. package/dist/routes/node/actions/nodeSocket/nodeJobStatus.d.ts.map +1 -0
  172. package/dist/routes/node/actions/nodeSocket/nodeJobStatus.js +5 -0
  173. package/dist/routes/node/actions/nodeSocket/nodeJobStatus.js.map +1 -0
  174. package/dist/routes/node/actions/nodeSocket/socket.d.ts +19 -0
  175. package/dist/routes/node/actions/nodeSocket/socket.d.ts.map +1 -0
  176. package/dist/routes/node/actions/nodeSocket/socket.js +38 -0
  177. package/dist/routes/node/actions/nodeSocket/socket.js.map +1 -0
  178. package/dist/routes/node/actions/terminal/grant.d.ts +21 -0
  179. package/dist/routes/node/actions/terminal/grant.d.ts.map +1 -0
  180. package/dist/routes/node/actions/terminal/grant.js +28 -0
  181. package/dist/routes/node/actions/terminal/grant.js.map +1 -0
  182. package/dist/routes/node/actions/terminal/openTerminal.d.ts +4 -0
  183. package/dist/routes/node/actions/terminal/openTerminal.d.ts.map +1 -0
  184. package/dist/routes/node/actions/terminal/openTerminal.js +22 -0
  185. package/dist/routes/node/actions/terminal/openTerminal.js.map +1 -0
  186. package/dist/routes/node/actions/terminal/session.d.ts +7 -0
  187. package/dist/routes/node/actions/terminal/session.d.ts.map +1 -0
  188. package/dist/routes/node/actions/terminal/session.js +133 -0
  189. package/dist/routes/node/actions/terminal/session.js.map +1 -0
  190. package/dist/routes/node/createNodeJob.d.ts +3 -0
  191. package/dist/routes/node/createNodeJob.d.ts.map +1 -0
  192. package/dist/routes/node/createNodeJob.js +39 -0
  193. package/dist/routes/node/createNodeJob.js.map +1 -0
  194. package/dist/routes/node/index.d.ts +8 -0
  195. package/dist/routes/node/index.d.ts.map +1 -0
  196. package/dist/routes/node/index.js +21 -0
  197. package/dist/routes/node/index.js.map +1 -0
  198. package/dist/routes/node/types.d.ts +148 -0
  199. package/dist/routes/node/types.d.ts.map +1 -0
  200. package/dist/routes/node/types.js +2 -0
  201. package/dist/routes/node/types.js.map +1 -0
  202. package/dist/types.d.ts +31 -2
  203. package/dist/types.d.ts.map +1 -1
  204. package/dist/types.js +2 -1
  205. package/dist/types.js.map +1 -1
  206. package/dist/utils/eventStream.d.ts +15 -0
  207. package/dist/utils/eventStream.d.ts.map +1 -0
  208. package/dist/utils/eventStream.js +36 -0
  209. package/dist/utils/eventStream.js.map +1 -0
  210. package/dist/utils/json.d.ts +3 -0
  211. package/dist/utils/json.d.ts.map +1 -0
  212. package/dist/utils/json.js +10 -0
  213. package/dist/utils/json.js.map +1 -0
  214. package/package.json +7 -3
package/README.md CHANGED
@@ -151,6 +151,9 @@ await vault.topup({ NOS: 100 });
151
151
  | `updateMarket` | `market: string` | `Promise<void>` |
152
152
  | `duplicate` | `options: DeploymentDuplicateOptions` | `Promise<Deployment>` |
153
153
  | `generateAuthHeader` | — | `Promise<unknown>` |
154
+ | `ssh.keys` | — | `Promise<string[]>` |
155
+ | `ssh.add` | `publicKeys: string \| string[]` | `Promise<DeploymentUpdateSshKeysResult>` |
156
+ | `ssh.remove` | `publicKeys: string \| string[]` | `Promise<DeploymentUpdateSshKeysResult>` |
154
157
 
155
158
  ### `api.templates` — Deployment Templates
156
159
 
@@ -179,6 +182,38 @@ await vault.topup({ NOS: 100 });
179
182
  | `getTemplatePerformance` | `nodeId: string` | `Promise<Record<string, unknown>>` |
180
183
  | `getBenchmarkSummary` | `request?: BenchmarkSummaryRequest` | `Promise<Record<string, unknown>>` |
181
184
 
185
+ ### `api.node` / `api.jobs(job)` — Node access
186
+
187
+ A node verifies the job owner's signature, and the client manager signs on the
188
+ caller's behalf — so node access works under both wallet and API-key auth, and is
189
+ absent only when unauthenticated.
190
+
191
+ | Call | Parameters | Returns |
192
+ |--------|-----------|---------|
193
+ | `node(address)` | `address: string` | `Promise<NodeInfo>` — a node's public info |
194
+ | `jobs(job)` | `job: string` | `Promise<Job & NodeJobApi>` — the job's current indexer state flat-merged with its node job API |
195
+
196
+ `jobs` is callable **and** an object: the indexer query methods (`get`, `getAll`,
197
+ `list`, …) hang off it, so `(await api.jobs(id)).ssh.add(key)` and `api.jobs.list(...)`
198
+ both work.
199
+
200
+ **Node job methods** (on `await api.jobs(job)`, alongside the job's indexer fields):
201
+
202
+ | Method | Parameters | Returns |
203
+ |--------|-----------|---------|
204
+ | `definition` / `setDefinition` | — / `definition: JobDefinition` | `Promise<JobDefinition>` / `Promise<void>` |
205
+ | `results` | — | `Promise<FlowState>` |
206
+ | `operations` / `operation` / `group` | — / `op: string` / `group?: string` | `Promise<NodeOperationStatuses>` |
207
+ | `restartGroup` / `restartOperation` | `group: string` / `group: string, op: string` | `Promise<void>` |
208
+ | `stopGroup` / `stopOperation` / `stop` | `group: string` / `group: string, op: string` / — | `Promise<void>` |
209
+ | `endpoints` | — | `Promise<NodeJobEndpoints>` |
210
+ | `stats` | `query?: NodeStatsQuery` | `Promise<NodeTaskStat[]>` |
211
+ | `streamInfo` / `streamStats` | `handlers, query?` | `NodeStreamSubscription` |
212
+ | `logs` / `status` | `handlers, filter?, options?` | `NodeStreamSubscription` |
213
+ | `ssh.keys` / `ssh.add` / `ssh.remove` | — / `publicKey, { expiresAt? }` / `publicKey` | see `NodeJobSsh` |
214
+ | `ssh.command` | `options?: SshCommandOptions` | `SshConnectionDescriptor` |
215
+ | `terminal` | `options: NodeTerminalOptions` | `Promise<TerminalSession>` |
216
+
182
217
  ### `api.stats` — Platform Statistics
183
218
 
184
219
  | Method | Parameters | Returns |
@@ -1,10 +1,12 @@
1
1
  import type { AuthenticatedClient, ClientConnection } from './type.utils.js';
2
- import type { ApiKeyAuth, SignerAuth, CreateNosanaApiOptions } from '../types.js';
2
+ import type { ApiKeyAuth, SignedHeaderAuth, CreateNosanaApiOptions } from '../types.js';
3
+ /** The message signer auth signs on every request; nodes accept it on their sockets too. */
4
+ export declare const NOSANA_API_AUTH_MESSAGE = "NosanaApiAuthentication";
3
5
  /**
4
6
  * The headers the client sends on every request. Resolved per call: signer auth
5
7
  * signs a fresh message each time.
6
8
  */
7
- export declare function authHeaders(authParams: ApiKeyAuth | SignerAuth | undefined): Promise<Record<string, string>>;
9
+ export declare function authHeaders(authParams: ApiKeyAuth | SignedHeaderAuth | undefined): Promise<Record<string, string>>;
8
10
  /**
9
11
  * Creates an authenticated OpenAPI client with shared auth middleware.
10
12
  * Used as the base factory for all service-specific API clients.
@@ -14,7 +16,7 @@ export declare function authHeaders(authParams: ApiKeyAuth | SignerAuth | undefi
14
16
  * differently from an ordinary request. Services that never stream simply
15
17
  * leave it unexposed in their return types.
16
18
  */
17
- export declare function createAuthenticatedClient<Paths extends Record<string, any>>(baseUrl: string, authParams: ApiKeyAuth | SignerAuth | undefined, options?: Pick<CreateNosanaApiOptions, 'include_credentials'>, defaultHeaders?: Record<string, string>): AuthenticatedClient<Paths> & {
19
+ export declare function createAuthenticatedClient<Paths extends Record<string, any>>(baseUrl: string, authParams: ApiKeyAuth | SignedHeaderAuth | undefined, options?: Pick<CreateNosanaApiOptions, 'include_credentials'>, defaultHeaders?: Record<string, string>): AuthenticatedClient<Paths> & {
18
20
  connection: ClientConnection;
19
21
  };
20
22
  //# sourceMappingURL=createClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createClient.d.ts","sourceRoot":"","sources":["../../src/client/createClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EAEnB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAElF;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAC9C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAWjC;AAED;;;;;;;;GAQG;AAEH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzE,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,EAC/C,OAAO,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,EAC7D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,mBAAmB,CAAC,KAAK,CAAC,GAAG;IAAE,UAAU,EAAE,gBAAgB,CAAA;CAAE,CAgC/D"}
1
+ {"version":3,"file":"createClient.d.ts","sourceRoot":"","sources":["../../src/client/createClient.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EAEnB,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAExF,4FAA4F;AAC5F,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AAEjE;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,GACpD,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAWjC;AAED;;;;;;;;GAQG;AAEH,wBAAgB,yBAAyB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzE,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,EACrD,OAAO,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,EAC7D,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtC,mBAAmB,CAAC,KAAK,CAAC,GAAG;IAAE,UAAU,EAAE,gBAAgB,CAAA;CAAE,CAgC/D"}
@@ -1,4 +1,6 @@
1
1
  import createClient from 'openapi-fetch';
2
+ /** The message signer auth signs on every request; nodes accept it on their sockets too. */
3
+ export const NOSANA_API_AUTH_MESSAGE = 'NosanaApiAuthentication';
2
4
  /**
3
5
  * The headers the client sends on every request. Resolved per call: signer auth
4
6
  * signs a fresh message each time.
@@ -10,8 +12,8 @@ export async function authHeaders(authParams) {
10
12
  return { Authorization: `Bearer ${authParams}` };
11
13
  }
12
14
  return {
13
- 'x-user-id': authParams.identifier,
14
- Authorization: await authParams.generate('NosanaApiAuthentication'),
15
+ ...(authParams.identifier ? { 'x-user-id': authParams.identifier } : {}),
16
+ Authorization: await authParams.generate(NOSANA_API_AUTH_MESSAGE),
15
17
  };
16
18
  }
17
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"createClient.js","sourceRoot":"","sources":["../../src/client/createClient.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAUzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAA+C;IAE/C,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,EAAE,aAAa,EAAE,UAAU,UAAU,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,OAAO;QACL,WAAW,EAAE,UAAU,CAAC,UAAU;QAClC,aAAa,EAAE,MAAM,UAAU,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACpE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,8DAA8D;AAC9D,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,UAA+C,EAC/C,OAA6D,EAC7D,cAAuC;IAEvC,MAAM,cAAc,GAAe;QACjC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE;YACzB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBAC1E,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAA4B;QACrD,OAAO;QACP,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,UAAU,EAAE;YACV,OAAO;YACP,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,GAAG,cAAc;gBACjB,sEAAsE;gBACtE,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;aACvE,CAAC;YACF,GAAG,CAAC,OAAO,EAAE,mBAAmB;gBAC9B,CAAC,CAAC,EAAE,WAAW,EAAE,SAAkB,EAAE;gBACrC,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"createClient.js","sourceRoot":"","sources":["../../src/client/createClient.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAUzC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEjE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAqD;IAErD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,EAAE,aAAa,EAAE,UAAU,UAAU,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,OAAO;QACL,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,aAAa,EAAE,MAAM,UAAU,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAClE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,8DAA8D;AAC9D,MAAM,UAAU,yBAAyB,CACvC,OAAe,EACf,UAAqD,EACrD,OAA6D,EAC7D,cAAuC;IAEvC,MAAM,cAAc,GAAe;QACjC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE;YACzB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBAC1E,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAA4B;QACrD,OAAO;QACP,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;QAC3B,UAAU,EAAE;YACV,OAAO;YACP,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACpB,GAAG,cAAc;gBACjB,sEAAsE;gBACtE,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;aACvE,CAAC;YACF,GAAG,CAAC,OAAO,EAAE,mBAAmB;gBAC9B,CAAC,CAAC,EAAE,WAAW,EAAE,SAAkB,EAAE;gBACrC,CAAC,CAAC,EAAE,CAAC;SACR;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1001,8 +1001,172 @@ export interface paths {
1001
1001
  };
1002
1002
  };
1003
1003
  put?: never;
1004
- post?: never;
1005
- delete?: never;
1004
+ /** @description Grant one or more SSH public keys access to the deployment's jobs. */
1005
+ post: {
1006
+ parameters: {
1007
+ query?: never;
1008
+ header: {
1009
+ "x-user-id": string;
1010
+ /** @description Signed authentication message, */
1011
+ authorization: string;
1012
+ /** @description Nosana API key */
1013
+ "x-nosana-api"?: string;
1014
+ };
1015
+ path: {
1016
+ deployment: components["schemas"]["PublicKey"];
1017
+ };
1018
+ cookie?: never;
1019
+ };
1020
+ requestBody: {
1021
+ content: {
1022
+ "application/json": {
1023
+ /** @description SSH public keys to grant. Keys already present (same type and material) are left as they are; the deployment holds at most 10. */
1024
+ public_keys: string[];
1025
+ };
1026
+ };
1027
+ };
1028
+ responses: {
1029
+ /** @description The deployment's SSH keys after the change. Check `jobs` for nodes that rejected or did not receive the new keys. */
1030
+ 200: {
1031
+ headers: {
1032
+ [name: string]: unknown;
1033
+ };
1034
+ content: {
1035
+ "application/json": {
1036
+ public_keys: string[];
1037
+ /** Format: date-time */
1038
+ updated_at: string;
1039
+ /** @description Per running job whose node was contacted to apply the change. Empty when nothing changed or nothing is running. */
1040
+ jobs: {
1041
+ job: string;
1042
+ node: string;
1043
+ status: "authorized" | "revoked" | "failed";
1044
+ error?: string;
1045
+ }[];
1046
+ };
1047
+ };
1048
+ };
1049
+ /** @description Bad Request. A key is not a valid OpenSSH public key, or the set exceeds the limits. */
1050
+ 400: {
1051
+ headers: {
1052
+ [name: string]: unknown;
1053
+ };
1054
+ content: {
1055
+ "application/json": components["schemas"]["Error"];
1056
+ };
1057
+ };
1058
+ /** @description Unauthorized. Invalid or missing authentication. */
1059
+ 401: {
1060
+ headers: {
1061
+ [name: string]: unknown;
1062
+ };
1063
+ content: {
1064
+ "application/json": components["schemas"]["Error"];
1065
+ };
1066
+ };
1067
+ /** @description Deployment not found. */
1068
+ 404: {
1069
+ headers: {
1070
+ [name: string]: unknown;
1071
+ };
1072
+ content: {
1073
+ "application/json": components["schemas"]["Error"];
1074
+ };
1075
+ };
1076
+ /** @description Internal Server Error. */
1077
+ 500: {
1078
+ headers: {
1079
+ [name: string]: unknown;
1080
+ };
1081
+ content: {
1082
+ "application/json": components["schemas"]["Error"];
1083
+ };
1084
+ };
1085
+ };
1086
+ };
1087
+ /** @description Revoke one or more SSH public keys from the deployment's jobs. */
1088
+ delete: {
1089
+ parameters: {
1090
+ query?: never;
1091
+ header: {
1092
+ "x-user-id": string;
1093
+ /** @description Signed authentication message, */
1094
+ authorization: string;
1095
+ /** @description Nosana API key */
1096
+ "x-nosana-api"?: string;
1097
+ };
1098
+ path: {
1099
+ deployment: components["schemas"]["PublicKey"];
1100
+ };
1101
+ cookie?: never;
1102
+ };
1103
+ requestBody: {
1104
+ content: {
1105
+ "application/json": {
1106
+ /** @description SSH public keys to revoke. A key is matched by type and material, so a differing comment still revokes it. */
1107
+ public_keys: string[];
1108
+ };
1109
+ };
1110
+ };
1111
+ responses: {
1112
+ /** @description The deployment's SSH keys after the change. Check `jobs` for nodes that did not apply the revocation. */
1113
+ 200: {
1114
+ headers: {
1115
+ [name: string]: unknown;
1116
+ };
1117
+ content: {
1118
+ "application/json": {
1119
+ public_keys: string[];
1120
+ /** Format: date-time */
1121
+ updated_at: string;
1122
+ /** @description Per running job whose node was contacted to apply the change. Empty when nothing changed or nothing is running. */
1123
+ jobs: {
1124
+ job: string;
1125
+ node: string;
1126
+ status: "authorized" | "revoked" | "failed";
1127
+ error?: string;
1128
+ }[];
1129
+ };
1130
+ };
1131
+ };
1132
+ /** @description Bad Request. A key is not a valid OpenSSH public key. */
1133
+ 400: {
1134
+ headers: {
1135
+ [name: string]: unknown;
1136
+ };
1137
+ content: {
1138
+ "application/json": components["schemas"]["Error"];
1139
+ };
1140
+ };
1141
+ /** @description Unauthorized. Invalid or missing authentication. */
1142
+ 401: {
1143
+ headers: {
1144
+ [name: string]: unknown;
1145
+ };
1146
+ content: {
1147
+ "application/json": components["schemas"]["Error"];
1148
+ };
1149
+ };
1150
+ /** @description Deployment not found. */
1151
+ 404: {
1152
+ headers: {
1153
+ [name: string]: unknown;
1154
+ };
1155
+ content: {
1156
+ "application/json": components["schemas"]["Error"];
1157
+ };
1158
+ };
1159
+ /** @description Internal Server Error. */
1160
+ 500: {
1161
+ headers: {
1162
+ [name: string]: unknown;
1163
+ };
1164
+ content: {
1165
+ "application/json": components["schemas"]["Error"];
1166
+ };
1167
+ };
1168
+ };
1169
+ };
1006
1170
  options?: never;
1007
1171
  head?: never;
1008
1172
  patch?: never;
@@ -1889,104 +2053,6 @@ export interface paths {
1889
2053
  };
1890
2054
  trace?: never;
1891
2055
  };
1892
- "/deployments/{deployment}/update-ssh-keys": {
1893
- parameters: {
1894
- query?: never;
1895
- header?: never;
1896
- path?: never;
1897
- cookie?: never;
1898
- };
1899
- get?: never;
1900
- put?: never;
1901
- post?: never;
1902
- delete?: never;
1903
- options?: never;
1904
- head?: never;
1905
- /** @description Replace the deployment's SSH public keys. The new set is stored on the deployment (not on a revision — no new revision or restart) and injected into every job posted from now on. New keys are also authorized on the node of every job currently running; removed keys stop working only when a job restarts. */
1906
- patch: {
1907
- parameters: {
1908
- query?: never;
1909
- header: {
1910
- "x-user-id": string;
1911
- /** @description Signed authentication message, */
1912
- authorization: string;
1913
- /** @description Nosana API key */
1914
- "x-nosana-api"?: string;
1915
- };
1916
- path: {
1917
- deployment: components["schemas"]["PublicKey"];
1918
- };
1919
- cookie?: never;
1920
- };
1921
- requestBody: {
1922
- content: {
1923
- "application/json": {
1924
- /** @description The complete set of SSH public keys allowed to reach this deployment's jobs (at most 10). Replaces the current set; an empty array revokes SSH access. */
1925
- public_keys: string[];
1926
- };
1927
- };
1928
- };
1929
- responses: {
1930
- /** @description SSH keys updated. Check `jobs` for nodes that rejected or did not receive the new keys. */
1931
- 200: {
1932
- headers: {
1933
- [name: string]: unknown;
1934
- };
1935
- content: {
1936
- "application/json": {
1937
- public_keys: string[];
1938
- /** Format: date-time */
1939
- updated_at: string;
1940
- /** @description Per running job: whether its node authorized the new keys. Empty when the new set is empty — a revocation cannot reach running jobs. */
1941
- jobs: {
1942
- job: string;
1943
- node: string;
1944
- status: "authorized" | "failed";
1945
- error?: string;
1946
- }[];
1947
- };
1948
- };
1949
- };
1950
- /** @description Bad Request. A key is not a valid OpenSSH public key, or the set exceeds the limits. */
1951
- 400: {
1952
- headers: {
1953
- [name: string]: unknown;
1954
- };
1955
- content: {
1956
- "application/json": components["schemas"]["Error"];
1957
- };
1958
- };
1959
- /** @description Unauthorized. Invalid or missing authentication. */
1960
- 401: {
1961
- headers: {
1962
- [name: string]: unknown;
1963
- };
1964
- content: {
1965
- "application/json": "Unauthorized";
1966
- };
1967
- };
1968
- /** @description Deployment not found. */
1969
- 404: {
1970
- headers: {
1971
- [name: string]: unknown;
1972
- };
1973
- content: {
1974
- "application/json": components["schemas"]["Error"];
1975
- };
1976
- };
1977
- /** @description Internal Server Error. */
1978
- 500: {
1979
- headers: {
1980
- [name: string]: unknown;
1981
- };
1982
- content: {
1983
- "application/json": components["schemas"]["Error"];
1984
- };
1985
- };
1986
- };
1987
- };
1988
- trace?: never;
1989
- };
1990
2056
  "/deployments/{deployment}/update-timeout": {
1991
2057
  parameters: {
1992
2058
  query?: never;