@nosana/api 2.19.0 → 2.20.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 (51) hide show
  1. package/README.md +6 -0
  2. package/dist/client/deployment-manager/schema.d.ts +4 -0
  3. package/dist/client/deployment-manager/schema.d.ts.map +1 -1
  4. package/dist/client/host-manager/schema.d.ts +36 -2
  5. package/dist/client/host-manager/schema.d.ts.map +1 -1
  6. package/dist/client/node/index.d.ts +11 -0
  7. package/dist/client/node/index.d.ts.map +1 -1
  8. package/dist/client/node/index.js +17 -0
  9. package/dist/client/node/index.js.map +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/routes/node/__tests__/fixtures.d.ts +8 -0
  14. package/dist/routes/node/__tests__/fixtures.d.ts.map +1 -1
  15. package/dist/routes/node/__tests__/fixtures.js +13 -0
  16. package/dist/routes/node/__tests__/fixtures.js.map +1 -1
  17. package/dist/routes/node/actions/nodeJob/nodeJobStats.d.ts +1 -1
  18. package/dist/routes/node/actions/nodeJob/nodeJobStats.d.ts.map +1 -1
  19. package/dist/routes/node/actions/nodeJob/nodeJobStats.js +2 -1
  20. package/dist/routes/node/actions/nodeJob/nodeJobStats.js.map +1 -1
  21. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.d.ts +1 -1
  22. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.d.ts.map +1 -1
  23. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.js +2 -1
  24. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshAdd.js.map +1 -1
  25. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.d.ts +1 -1
  26. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.d.ts.map +1 -1
  27. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.js +2 -1
  28. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshKeys.js.map +1 -1
  29. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.d.ts +1 -1
  30. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.d.ts.map +1 -1
  31. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.js +4 -2
  32. package/dist/routes/node/actions/nodeJobSsh/nodeJobSshRemove.js.map +1 -1
  33. package/dist/routes/node/actions/nodeSocket/nodeJobLogs.d.ts.map +1 -1
  34. package/dist/routes/node/actions/nodeSocket/nodeJobLogs.js +6 -1
  35. package/dist/routes/node/actions/nodeSocket/nodeJobLogs.js.map +1 -1
  36. package/dist/routes/node/actions/terminal/openTerminal.d.ts.map +1 -1
  37. package/dist/routes/node/actions/terminal/openTerminal.js +2 -1
  38. package/dist/routes/node/actions/terminal/openTerminal.js.map +1 -1
  39. package/dist/routes/node/createNodeJob.d.ts.map +1 -1
  40. package/dist/routes/node/createNodeJob.js +7 -6
  41. package/dist/routes/node/createNodeJob.js.map +1 -1
  42. package/dist/routes/node/index.d.ts.map +1 -1
  43. package/dist/routes/node/index.js +4 -1
  44. package/dist/routes/node/index.js.map +1 -1
  45. package/dist/routes/node/jobRuntime.d.ts +26 -0
  46. package/dist/routes/node/jobRuntime.d.ts.map +1 -0
  47. package/dist/routes/node/jobRuntime.js +63 -0
  48. package/dist/routes/node/jobRuntime.js.map +1 -0
  49. package/dist/routes/node/types.d.ts +7 -1
  50. package/dist/routes/node/types.d.ts.map +1 -1
  51. package/package.json +4 -4
@@ -19,5 +19,16 @@ export declare function nodeUrl(environment: NosanaNetwork, address: string, opt
19
19
  * one backed by the client manager's signing service.
20
20
  */
21
21
  export declare function createNodeClient(environment: NosanaNetwork, address: string, authParams: SignedHeaderAuth | undefined, options?: CreateNosanaApiOptions): NodeClient;
22
+ /**
23
+ * Where a job's runtime sidecar answers, when its node started one: the job
24
+ * address as a subdomain of the same node domain.
25
+ */
26
+ export declare function jobRuntimeUrl(environment: NosanaNetwork, job: string, options?: CreateNosanaApiOptions): string;
27
+ /**
28
+ * A job's runtime sidecar serves the node's runtime routes (stats, logs,
29
+ * terminal, SSH keys) at the same paths and checks the same signature, so it
30
+ * takes the node's client shape.
31
+ */
32
+ export declare function createJobRuntimeClient(environment: NosanaNetwork, job: string, authParams: SignedHeaderAuth | undefined, options?: CreateNosanaApiOptions): NodeClient;
22
33
  export {};
23
34
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/node/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,wFAAwF;AACxF,KAAK,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;AAEjC,0FAA0F;AAC1F,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG;IAAE,UAAU,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEvF,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAE/F;AAED,6FAA6F;AAC7F,wBAAgB,OAAO,CACrB,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,UAAU,CAEZ"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/node/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE9F,wFAAwF;AACxF,KAAK,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;AAEjC,0FAA0F;AAC1F,MAAM,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG;IAAE,UAAU,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAEvF,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAE/F;AAED,6FAA6F;AAC7F,wBAAgB,OAAO,CACrB,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,UAAU,CAEZ;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,aAAa,EAC1B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,sBAAsB,GAC/B,MAAM,CAGR;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,aAAa,EAC1B,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,gBAAgB,GAAG,SAAS,EACxC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,UAAU,CAEZ"}
@@ -21,4 +21,21 @@ export function nodeUrl(environment, address, options) {
21
21
  export function createNodeClient(environment, address, authParams, options) {
22
22
  return createAuthenticatedClient(nodeUrl(environment, address, options), authParams);
23
23
  }
24
+ /**
25
+ * Where a job's runtime sidecar answers, when its node started one: the job
26
+ * address as a subdomain of the same node domain.
27
+ */
28
+ export function jobRuntimeUrl(environment, job, options) {
29
+ if (!isSolanaAddress(job))
30
+ throw new Error(`Invalid job address: ${job}`);
31
+ return `https://${job}.${nodeDomain(environment, options)}`;
32
+ }
33
+ /**
34
+ * A job's runtime sidecar serves the node's runtime routes (stats, logs,
35
+ * terminal, SSH keys) at the same paths and checks the same signature, so it
36
+ * takes the node's client shape.
37
+ */
38
+ export function createJobRuntimeClient(environment, job, authParams, options) {
39
+ return createAuthenticatedClient(jobRuntimeUrl(environment, job, options), authParams);
40
+ }
24
41
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAYxD,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,WAA0B,EAAE,OAAgC;IACrF,OAAO,OAAO,EAAE,WAAW,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC;AACxE,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,OAAO,CACrB,WAA0B,EAC1B,OAAe,EACf,OAAgC;IAEhC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACnF,OAAO,WAAW,OAAO,IAAI,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAA0B,EAC1B,OAAe,EACf,UAAwC,EACxC,OAAgC;IAEhC,OAAO,yBAAyB,CAAQ,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9F,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAYxD,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,WAA0B,EAAE,OAAgC;IACrF,OAAO,OAAO,EAAE,WAAW,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC;AACxE,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,OAAO,CACrB,WAA0B,EAC1B,OAAe,EACf,OAAgC;IAEhC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACnF,OAAO,WAAW,OAAO,IAAI,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAA0B,EAC1B,OAAe,EACf,UAAwC,EACxC,OAAgC;IAEhC,OAAO,yBAAyB,CAAQ,OAAO,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,WAA0B,EAC1B,GAAW,EACX,OAAgC;IAEhC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IAC1E,OAAO,WAAW,GAAG,IAAI,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAA0B,EAC1B,GAAW,EACX,UAAwC,EACxC,OAAgC;IAEhC,OAAO,yBAAyB,CAAQ,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;AAChG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EAErB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAGtB,KAAK,aAAa,EAElB,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EAEnB,KAAK,cAAc,EAEnB,KAAK,iBAAiB,EAEtB,KAAK,mBAAmB,EAExB,KAAK,mBAAmB,EAExB,KAAK,qBAAqB,EAE1B,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EACV,UAAU,EACV,sBAAsB,EACtB,UAAU,EAEV,aAAa,IAAI,iBAAiB,EAClC,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,cAAc,CAAC;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,qBAAqB,CAAC;IACpC,uDAAuD;IACvD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C;;;;;OAKG;IACH,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,qBAAqB,CAAC;IACpC,uDAAuD;IACvD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,mBAAmB,GAAG,eAAe,CAAC;AA4BhF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,SAAS,CAAC;AACb,wBAAgB,eAAe,CAC7B,WAAW,EAAE,iBAAiB,EAC9B,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,SAAS,CAAC;AACb,wBAAgB,eAAe,CAC7B,WAAW,EAAE,iBAAiB,EAC9B,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,mBAAmB,CAAC;AAyEvB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAGzF,cAAc,YAAY,CAAC;AAC3B,YAAY,EACV,sBAAsB,IAAI,SAAS,EACnC,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,mBAAmB,wBAAwB,CAAC;AAC5C,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,gCAAgC,CAAC;AACpD,mBAAmB,+BAA+B,CAAC;AACnD,mBAAmB,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -57,8 +57,10 @@ export function createNosanaApi(environment = NosanaNetwork.MAINNET, signerOrApi
57
57
  clientManager: clients.clientManager,
58
58
  }),
59
59
  benchmarks: createNosanaBenchmarksApi({ hostManager: clients.hostManager }),
60
+ // Public, read-only lookups: made without a credential, so a connected
61
+ // wallet is never asked to sign for a GPU list or an availability check.
60
62
  reservations: createNosanaReservationsApi({
61
- hostManager: clients.hostManager,
63
+ hostManager: createHostManagerClient(environment, undefined, options),
62
64
  }),
63
65
  node: (address) => node(address).info(),
64
66
  clients,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,EAClC,6BAA6B,EAC7B,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EAEnB,sBAAsB,EAEtB,sBAAsB,EAEtB,oBAAoB,EAGpB,mBAAmB,EACnB,mBAAmB,EAEnB,wBAAwB,EAExB,oBAAoB,EAEpB,oBAAoB,EAEpB,uBAAuB,EAEvB,yBAAyB,EAEzB,yBAAyB,EAEzB,2BAA2B,EAE3B,mBAAmB,GAEpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoE3C,SAAS,aAAa,CACpB,WAA8B,EAC9B,UAA+C,EAC/C,OAAgC;IAEhC,OAAO;QACL,aAAa,EAAE,kCAAkC,CAC/C,WAAW,EACX,UAAU,EACV,OAAO,CACR;QACD,WAAW,EAAE,uBAAuB,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC;QACtE,iBAAiB,EAAE,6BAA6B,CAC9C,WAAW,EACX,UAAU,EACV,OAAO,CACR;QACD,iBAAiB,EAAE,6BAA6B,CAC9C,WAAW,EACX,UAAU,EACV,OAAO,CACR;KACF,CAAC;AACJ,CAAC;AAmBD,MAAM,UAAU,eAAe,CAC7B,cAAiC,aAAa,CAAC,OAAO,EACtD,cAAmD,EACnD,OAAgC;IAEhC,2EAA2E;IAC3E,mDAAmD;IACnD,MAAM,SAAS,GAAG,OAAO,cAAc,KAAK,QAAQ,IAAI,OAAO,cAAc,KAAK,UAAU,CAAC;IAC7F,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxD,+EAA+E;IAC/E,+EAA+E;IAC/E,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,SAAS,IAAI,CAAC,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACjG,MAAM,QAAQ,GAAiC,gBAAgB;QAC7D,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACrD,CAAC,CAAC,+EAA+E;YAC9E,cAAyC,CAAC;IAC/C,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAEjF,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,mBAAmB,CAAC;YACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,IAAI;SACL,CAAC;QACF,OAAO,EAAE,sBAAsB,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;QACzE,OAAO,EAAE,sBAAsB,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QACrE,kEAAkE;QAClE,8EAA8E;QAC9E,WAAW,EACT,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,IAAI;YAC3D,CAAC,CAAC,oBAAoB,CAClB;gBACE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;gBAC5C,WAAW;gBACX,OAAO;gBACP,MAAM,EAAE,cAAc,CAAC,MAAM;aAC9B,EACD,KAAK,CACN;YACH,CAAC,CAAC,oBAAoB,CAClB,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,WAAW,EAAE,OAAO,EAAE,EACtE,IAAI,CACL;QACP,IAAI,EAAE,mBAAmB,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;QACnE,SAAS,EAAE,wBAAwB,CAAC;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;QACF,KAAK,EAAE,oBAAoB,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QACjE,KAAK,EAAE,oBAAoB,CAAC;YAC1B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC7C,CAAC;QACF,QAAQ,EAAE,uBAAuB,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3E,UAAU,EAAE,yBAAyB,CAAC;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;QACF,UAAU,EAAE,yBAAyB,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3E,uEAAuE;QACvE,yEAAyE;QACzE,YAAY,EAAE,2BAA2B,CAAC;YACxC,WAAW,EAAE,uBAAuB,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,CAAC;SACtE,CAAC;QACF,IAAI,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;QAC/C,OAAO;KACR,CAAC;AACJ,CAAC;AAED,iBAAiB;AACjB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEzF,eAAe;AACf,cAAc,YAAY,CAAC"}
@@ -16,6 +16,14 @@ export declare const failed: (status: number, error: unknown) => {
16
16
  export declare const signer: SignerAuth;
17
17
  /** The node API on devnet against the global mock client; `null` means no signer at all. */
18
18
  export declare function nodeApi(auth?: SignerAuth | null): import("../types.js").NodeApi;
19
+ /**
20
+ * Answers the job's sidecar check (a plain `fetch` of `GET /`): a sidecar up
21
+ * for `JOB`, or the 404 frps gives for a job without one. Undo with
22
+ * `vi.unstubAllGlobals()`.
23
+ */
24
+ export declare function stubSidecar(present: boolean): import("vitest").Mock<() => Promise<Response>>;
25
+ /** Lets a stream that opens once the sidecar check is done open. */
26
+ export declare const settle: () => Promise<unknown>;
19
27
  export declare class FakeWebSocket {
20
28
  binaryType: string;
21
29
  readyState: number;
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../../src/routes/node/__tests__/fixtures.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,GAAG,4FAC2E,CAAC;AAE5F,eAAO,MAAM,EAAE,GAAI,MAAM,OAAO;;;;CAAsD,CAAC;AACvF,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,OAAO;;;;CAInD,CAAC;AAEH,yGAAyG;AACzG,eAAO,MAAM,MAAM,EAAE,UAIpB,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,IAAI,GAAE,UAAU,GAAG,IAAa,iCAEvD;AAED,qBAAa,aAAa;IACxB,UAAU,SAAM;IAChB,UAAU,SAAK;IACf,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAC/D,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IACzD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IACrD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAM;IAE7B,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,KAAK;CAGN"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../../../src/routes/node/__tests__/fixtures.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,GAAG,4FAC2E,CAAC;AAE5F,eAAO,MAAM,EAAE,GAAI,MAAM,OAAO;;;;CAAsD,CAAC;AACvF,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,OAAO;;;;CAInD,CAAC;AAEH,yGAAyG;AACzG,eAAO,MAAM,MAAM,EAAE,UAIpB,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,OAAO,CAAC,IAAI,GAAE,UAAU,GAAG,IAAa,iCAEvD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,kDAM3C;AAED,oEAAoE;AACpE,eAAO,MAAM,MAAM,wBAAyD,CAAC;AAE7E,qBAAa,aAAa;IACxB,UAAU,SAAM;IAChB,UAAU,SAAK;IACf,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAQ;IAC/D,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IACzD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IACrD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAM;IAE7B,IAAI,CAAC,IAAI,EAAE,MAAM;IAIjB,KAAK;CAGN"}
@@ -1,3 +1,4 @@
1
+ import { vi } from 'vitest';
1
2
  import { createNosanaNodeApi } from '../index.js';
2
3
  export const NODE = '7XkMcd1AYjCJU7SjrpGmGWHshfr9iVTiw88u6CThYEpL';
3
4
  export const JOB = '8TjrkaZmW2UFjpm2Va5LECJc7zoFrbUJETk6fPimGi9a';
@@ -18,6 +19,18 @@ export const signer = {
18
19
  export function nodeApi(auth = signer) {
19
20
  return createNosanaNodeApi({ environment: 'devnet', authParams: auth ?? undefined })(NODE);
20
21
  }
22
+ /**
23
+ * Answers the job's sidecar check (a plain `fetch` of `GET /`): a sidecar up
24
+ * for `JOB`, or the 404 frps gives for a job without one. Undo with
25
+ * `vi.unstubAllGlobals()`.
26
+ */
27
+ export function stubSidecar(present) {
28
+ const check = vi.fn(async () => present ? new Response(JSON.stringify(JOB)) : new Response('Not Found', { status: 404 }));
29
+ vi.stubGlobal('fetch', check);
30
+ return check;
31
+ }
32
+ /** Lets a stream that opens once the sidecar check is done open. */
33
+ export const settle = () => new Promise((resolve) => setTimeout(resolve, 0));
21
34
  export class FakeWebSocket {
22
35
  constructor() {
23
36
  this.binaryType = '';
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../../src/routes/node/__tests__/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,MAAM,CAAC,MAAM,IAAI,GAAG,8CAA8C,CAAC;AACnE,MAAM,CAAC,MAAM,GAAG,GAAG,8CAA8C,CAAC;AAClE,MAAM,CAAC,MAAM,GAAG,GACd,yFAAyF,CAAC;AAE5F,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,KAAc,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,EAAE,IAAI;IACV,KAAK;IACL,QAAQ,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;CACzC,CAAC,CAAC;AAEH,yGAAyG;AACzG,MAAM,CAAC,MAAM,MAAM,GAAe;IAChC,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,SAAS;IAChD,MAAM,EAAE,EAAW;CACpB,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,OAAO,CAAC,OAA0B,MAAM;IACtD,OAAO,mBAAmB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED,MAAM,OAAO,aAAa;IAA1B;QACE,eAAU,GAAG,EAAE,CAAC;QAChB,eAAU,GAAG,CAAC,CAAC;QACf,WAAM,GAAoD,IAAI,CAAC;QAC/D,cAAS,GAA2C,IAAI,CAAC;QACzD,YAAO,GAAyC,IAAI,CAAC;QACrD,YAAO,GAAoC,IAAI,CAAC;QACvC,SAAI,GAAa,EAAE,CAAC;IAS/B,CAAC;IAPC,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../../../src/routes/node/__tests__/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIlD,MAAM,CAAC,MAAM,IAAI,GAAG,8CAA8C,CAAC;AACnE,MAAM,CAAC,MAAM,GAAG,GAAG,8CAA8C,CAAC;AAClE,MAAM,CAAC,MAAM,GAAG,GACd,yFAAyF,CAAC;AAE5F,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,QAAQ,EAAE,EAAE,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAE,KAAc,EAAE,EAAE,CAAC,CAAC;IACzD,IAAI,EAAE,IAAI;IACV,KAAK;IACL,QAAQ,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;CACzC,CAAC,CAAC;AAEH,yGAAyG;AACzG,MAAM,CAAC,MAAM,MAAM,GAAe;IAChC,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,SAAS;IAChD,MAAM,EAAE,EAAW;CACpB,CAAC;AAEF,4FAA4F;AAC5F,MAAM,UAAU,OAAO,CAAC,OAA0B,MAAM;IACtD,OAAO,mBAAmB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAC7B,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CACzF,CAAC;IACF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7E,MAAM,OAAO,aAAa;IAA1B;QACE,eAAU,GAAG,EAAE,CAAC;QAChB,eAAU,GAAG,CAAC,CAAC;QACf,WAAM,GAAoD,IAAI,CAAC;QAC/D,cAAS,GAA2C,IAAI,CAAC;QACzD,YAAO,GAAyC,IAAI,CAAC;QACrD,YAAO,GAAoC,IAAI,CAAC;QACvC,SAAI,GAAa,EAAE,CAAC;IAS/B,CAAC;IAPC,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
1
  import type { NodeClient } from '../../../../client/node/index.js';
2
2
  import type { NodeStatsQuery, NodeTaskStat } from '../../types.js';
3
- export declare function nodeJobStats(client: NodeClient, job: string, query?: NodeStatsQuery): Promise<NodeTaskStat[]>;
3
+ export declare function nodeJobStats(runtimeClient: () => Promise<NodeClient>, job: string, query?: NodeStatsQuery): Promise<NodeTaskStat[]>;
4
4
  //# sourceMappingURL=nodeJobStats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobStats.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJob/nodeJobStats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnE,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,cAAmB,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CAMzB"}
1
+ {"version":3,"file":"nodeJobStats.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJob/nodeJobStats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnE,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,cAAmB,GACzB,OAAO,CAAC,YAAY,EAAE,CAAC,CAOzB"}
@@ -1,5 +1,6 @@
1
1
  import { errorFormatter } from '../../../../utils/errorFormatter.js';
2
- export async function nodeJobStats(client, job, query = {}) {
2
+ export async function nodeJobStats(runtimeClient, job, query = {}) {
3
+ const client = await runtimeClient();
3
4
  const { data, error, response } = await client.GET('/job/{job}/stats', { params: { path: { job }, query } });
4
5
  if ((error !== undefined && error !== null) || data === undefined) {
5
6
  throw errorFormatter('Failed to get stats', error, response);
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobStats.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJob/nodeJobStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAkB,EAClB,GAAW,EACX,QAAwB,EAAE;IAE1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7G,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,qBAAqB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"nodeJobStats.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJob/nodeJobStats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,aAAwC,EACxC,GAAW,EACX,QAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7G,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,qBAAqB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { NodeClient } from '../../../../client/node/index.js';
2
2
  import type { NodeSshAddKeyOptions, NodeSshAuthorization } from '../../types.js';
3
3
  /** Grants one key, permanently unless `expiresAt` is set. Validated before anything is sent. */
4
- export declare function nodeJobSshAdd(client: NodeClient, job: string, publicKey: string, { expiresAt, signal }?: NodeSshAddKeyOptions): Promise<NodeSshAuthorization>;
4
+ export declare function nodeJobSshAdd(runtimeClient: () => Promise<NodeClient>, job: string, publicKey: string, { expiresAt, signal }?: NodeSshAddKeyOptions): Promise<NodeSshAuthorization>;
5
5
  //# sourceMappingURL=nodeJobSshAdd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobSshAdd.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshAdd.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,gGAAgG;AAChG,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAE,oBAAyB,GAC/C,OAAO,CAAC,oBAAoB,CAAC,CAY/B"}
1
+ {"version":3,"file":"nodeJobSshAdd.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshAdd.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,gGAAgG;AAChG,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAE,oBAAyB,GAC/C,OAAO,CAAC,oBAAoB,CAAC,CAa/B"}
@@ -1,9 +1,10 @@
1
1
  import { requireSshPublicKey } from '@nosana/ssh';
2
2
  import { errorFormatter } from '../../../../utils/errorFormatter.js';
3
3
  /** Grants one key, permanently unless `expiresAt` is set. Validated before anything is sent. */
4
- export async function nodeJobSshAdd(client, job, publicKey, { expiresAt, signal } = {}) {
4
+ export async function nodeJobSshAdd(runtimeClient, job, publicKey, { expiresAt, signal } = {}) {
5
5
  const sshPublicKey = requireSshPublicKey(publicKey);
6
6
  const expiry = toExpiry(expiresAt);
7
+ const client = await runtimeClient();
7
8
  const { data, error, response } = await client.POST('/job/{job}/ssh/authorize', {
8
9
  params: { path: { job } },
9
10
  signal,
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobSshAdd.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshAdd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,EAAE,SAAS,EAAE,MAAM,KAA2B,EAAE;IAEhD,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;QAC9E,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACzB,MAAM;QACN,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE;KACpF,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,uBAAuB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,SAA2B;IAC3C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"nodeJobSshAdd.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshAdd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,aAAwC,EACxC,GAAW,EACX,SAAiB,EACjB,EAAE,SAAS,EAAE,MAAM,KAA2B,EAAE;IAEhD,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;QAC9E,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACzB,MAAM;QACN,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE;KACpF,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,uBAAuB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,SAA2B;IAC3C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC;AACjC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { NodeClient } from '../../../../client/node/index.js';
2
2
  import type { NodeSshAuthorizedKey, NodeSshKeyOptions } from '../../types.js';
3
- export declare function nodeJobSshKeys(client: NodeClient, job: string, { signal }?: NodeSshKeyOptions): Promise<NodeSshAuthorizedKey[]>;
3
+ export declare function nodeJobSshKeys(runtimeClient: () => Promise<NodeClient>, job: string, { signal }?: NodeSshKeyOptions): Promise<NodeSshAuthorizedKey[]>;
4
4
  //# sourceMappingURL=nodeJobSshKeys.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobSshKeys.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshKeys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE9E,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,EAAE,MAAM,EAAE,GAAE,iBAAsB,GACjC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CASjC"}
1
+ {"version":3,"file":"nodeJobSshKeys.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshKeys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE9E,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,EAAE,MAAM,EAAE,GAAE,iBAAsB,GACjC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAUjC"}
@@ -1,5 +1,6 @@
1
1
  import { errorFormatter } from '../../../../utils/errorFormatter.js';
2
- export async function nodeJobSshKeys(client, job, { signal } = {}) {
2
+ export async function nodeJobSshKeys(runtimeClient, job, { signal } = {}) {
3
+ const client = await runtimeClient();
3
4
  const { data, error, response } = await client.GET('/job/{job}/ssh/keys', {
4
5
  params: { path: { job } },
5
6
  signal,
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobSshKeys.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAkB,EAClB,GAAW,EACX,EAAE,MAAM,KAAwB,EAAE;IAElC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE;QACxE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACzB,MAAM;KACP,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,wBAAwB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"nodeJobSshKeys.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshKeys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,aAAwC,EACxC,GAAW,EACX,EAAE,MAAM,KAAwB,EAAE;IAElC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE;QACxE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACzB,MAAM;KACP,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,wBAAwB,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { NodeClient } from '../../../../client/node/index.js';
2
2
  import type { NodeSshKeyOptions, NodeSshRevocation } from '../../types.js';
3
- export declare function nodeJobSshRemove(client: NodeClient, job: string, publicKey: string, { signal }?: NodeSshKeyOptions): Promise<NodeSshRevocation>;
3
+ export declare function nodeJobSshRemove(runtimeClient: () => Promise<NodeClient>, job: string, publicKey: string, { signal }?: NodeSshKeyOptions): Promise<NodeSshRevocation>;
4
4
  //# sourceMappingURL=nodeJobSshRemove.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobSshRemove.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshRemove.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,EAAE,MAAM,EAAE,GAAE,iBAAsB,GACjC,OAAO,CAAC,iBAAiB,CAAC,CAU5B"}
1
+ {"version":3,"file":"nodeJobSshRemove.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshRemove.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAE3E,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,EAAE,MAAM,EAAE,GAAE,iBAAsB,GACjC,OAAO,CAAC,iBAAiB,CAAC,CAY5B"}
@@ -1,10 +1,12 @@
1
1
  import { requireSshPublicKey } from '@nosana/ssh';
2
2
  import { errorFormatter } from '../../../../utils/errorFormatter.js';
3
- export async function nodeJobSshRemove(client, job, publicKey, { signal } = {}) {
3
+ export async function nodeJobSshRemove(runtimeClient, job, publicKey, { signal } = {}) {
4
+ const sshPublicKey = requireSshPublicKey(publicKey);
5
+ const client = await runtimeClient();
4
6
  const { data, error, response } = await client.DELETE('/job/{job}/ssh/keys', {
5
7
  params: { path: { job } },
6
8
  signal,
7
- body: { sshPublicKey: requireSshPublicKey(publicKey) },
9
+ body: { sshPublicKey },
8
10
  });
9
11
  if ((error !== undefined && error !== null) || data === undefined) {
10
12
  throw errorFormatter('Failed to remove SSH key', error, response);
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobSshRemove.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshRemove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,EAAE,MAAM,KAAwB,EAAE;IAElC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE;QAC3E,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACzB,MAAM;QACN,IAAI,EAAE,EAAE,YAAY,EAAE,mBAAmB,CAAC,SAAS,CAAC,EAAE;KACvD,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,0BAA0B,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"nodeJobSshRemove.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeJobSsh/nodeJobSshRemove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,aAAwC,EACxC,GAAW,EACX,SAAiB,EACjB,EAAE,MAAM,KAAwB,EAAE;IAElC,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE;QAC3E,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACzB,MAAM;QACN,IAAI,EAAE,EAAE,YAAY,EAAE;KACvB,CAAC,CAAC;IACH,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,cAAc,CAAC,0BAA0B,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobLogs.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeSocket/nodeJobLogs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAOxB,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,kBAAkB,CAAC,WAAW,CAAC,EACzC,MAAM,GAAE,cAAmB,EAC3B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,sBAAsB,CAQxB"}
1
+ {"version":3,"file":"nodeJobLogs.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeSocket/nodeJobLogs.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAOxB,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,kBAAkB,CAAC,WAAW,CAAC,EACzC,MAAM,GAAE,cAAmB,EAC3B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,sBAAsB,CAaxB"}
@@ -1,10 +1,15 @@
1
1
  import { tryParseJson } from '../../../../utils/json.js';
2
+ import { requireNodeAuthorization } from '../authorization.js';
3
+ import { openOnJobRuntime } from '../../jobRuntime.js';
2
4
  import { openNodeSocket } from './socket.js';
3
5
  /** Task manager logs arrive JSON-encoded inside the frame's `data`. */
4
6
  function parseTaskLog(data) {
5
7
  return typeof data === 'string' ? tryParseJson(data) : undefined;
6
8
  }
7
9
  export function nodeJobLogs(context, handlers, filter = {}, options) {
8
- return openNodeSocket(context, { path: '/flog', body: { jobAddress: context.job, ...filter } }, handlers, parseTaskLog, options);
10
+ // Checked now rather than once the runtime client is known, so a missing
11
+ // signer still throws before anything opens.
12
+ requireNodeAuthorization(context, options?.authorizationProvider);
13
+ return openOnJobRuntime(context.runtimeClient, (client) => openNodeSocket({ ...context, client }, { path: '/flog', body: { jobAddress: context.job, ...filter } }, handlers, parseTaskLog, options));
9
14
  }
10
15
  //# sourceMappingURL=nodeJobLogs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodeJobLogs.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeSocket/nodeJobLogs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW7C,uEAAuE;AACvE,SAAS,YAAY,CAAC,IAAa;IACjC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,YAAY,CAAC,IAAI,CAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,OAAuB,EACvB,QAAyC,EACzC,SAAyB,EAAE,EAC3B,OAA2B;IAE3B,OAAO,cAAc,CACnB,OAAO,EACP,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,EAC/D,QAAQ,EACR,YAAY,EACZ,OAAO,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"nodeJobLogs.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/nodeSocket/nodeJobLogs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAW7C,uEAAuE;AACvE,SAAS,YAAY,CAAC,IAAa;IACjC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAE,YAAY,CAAC,IAAI,CAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,OAAuB,EACvB,QAAyC,EACzC,SAAyB,EAAE,EAC3B,OAA2B;IAE3B,yEAAyE;IACzE,6CAA6C;IAC7C,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAClE,OAAO,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CACxD,cAAc,CACZ,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EACtB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE,EAC/D,QAAQ,EACR,YAAY,EACZ,OAAO,CACR,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"openTerminal.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/terminal/openTerminal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE3F,wFAAwF;AACxF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAiB1B"}
1
+ {"version":3,"file":"openTerminal.d.ts","sourceRoot":"","sources":["../../../../../src/routes/node/actions/terminal/openTerminal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE3F,wFAAwF;AACxF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,eAAe,CAAC,CAkB1B"}
@@ -15,8 +15,9 @@ export async function openNodeJobTerminal(context, options) {
15
15
  ttlMs: options.ttlMs,
16
16
  authorize,
17
17
  });
18
+ const client = await context.runtimeClient();
18
19
  options.signal?.throwIfAborted();
19
- const socket = openNodeWebSocket(context.client, '/terminal', options.webSocketFactory);
20
+ const socket = openNodeWebSocket(client, '/terminal', options.webSocketFactory);
20
21
  return openTerminalSession(socket, context.job, authorization, options);
21
22
  }
22
23
  //# sourceMappingURL=openTerminal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openTerminal.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/terminal/openTerminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,OAA4B;IAE5B,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnF,OAAO,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,MAAM,gCAAgC,CAAC;QAC3D,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,WAAW;QAC5B,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS;KACV,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxF,OAAO,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC"}
1
+ {"version":3,"file":"openTerminal.js","sourceRoot":"","sources":["../../../../../src/routes/node/actions/terminal/openTerminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,OAA4B;IAE5B,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnF,OAAO,CAAC,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,MAAM,gCAAgC,CAAC;QAC3D,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,WAAW;QAC5B,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS;KACV,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;IAC7C,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAEjC,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChF,OAAO,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeJob.d.ts","sourceRoot":"","sources":["../../../src/routes/node/createNodeJob.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAgCjE"}
1
+ {"version":3,"file":"createNodeJob.d.ts","sourceRoot":"","sources":["../../../src/routes/node/createNodeJob.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAiCjE"}
@@ -4,8 +4,9 @@ import { nodeJobSshAdd, nodeJobSshKeys, nodeJobSshRemove } from './actions/nodeJ
4
4
  import { nodeJobInfoStream, nodeJobStatsStream } from './actions/nodeJobStreams/index.js';
5
5
  import { nodeJobLogs, nodeJobStatus } from './actions/nodeSocket/index.js';
6
6
  import { openNodeJobTerminal } from './actions/terminal/openTerminal.js';
7
+ import { openOnJobRuntime } from './jobRuntime.js';
7
8
  export function createNodeJob(context) {
8
- const { client, job, node } = context;
9
+ const { client, runtimeClient, job, node } = context;
9
10
  const target = { job, node, nodeDomain: context.domain };
10
11
  return {
11
12
  address: job,
@@ -22,15 +23,15 @@ export function createNodeJob(context) {
22
23
  stopOperation: (group, op) => stopNodeJobOperation(client, job, group, op),
23
24
  stop: () => stopNodeJob(client, job),
24
25
  endpoints: () => nodeJobEndpoints(client, job),
25
- stats: (query) => nodeJobStats(client, job, query),
26
+ stats: (query) => nodeJobStats(runtimeClient, job, query),
26
27
  streamInfo: (handlers) => nodeJobInfoStream(client, job, handlers),
27
- streamStats: (handlers, query) => nodeJobStatsStream(client, job, handlers, query),
28
+ streamStats: (handlers, query) => openOnJobRuntime(runtimeClient, (runtime) => nodeJobStatsStream(runtime, job, handlers, query)),
28
29
  logs: (handlers, filter, options) => nodeJobLogs(context, handlers, filter, options),
29
30
  status: (handlers, options) => nodeJobStatus(context, handlers, options),
30
31
  ssh: {
31
- keys: (options) => nodeJobSshKeys(client, job, options),
32
- add: (publicKey, options) => nodeJobSshAdd(client, job, publicKey, options),
33
- remove: (publicKey, options) => nodeJobSshRemove(client, job, publicKey, options),
32
+ keys: (options) => nodeJobSshKeys(runtimeClient, job, options),
33
+ add: (publicKey, options) => nodeJobSshAdd(runtimeClient, job, publicKey, options),
34
+ remove: (publicKey, options) => nodeJobSshRemove(runtimeClient, job, publicKey, options),
34
35
  command: (options) => createSshCommand(target, options),
35
36
  },
36
37
  terminal: (options) => openNodeJobTerminal(context, options),
@@ -1 +1 @@
1
- {"version":3,"file":"createNodeJob.js","sourceRoot":"","sources":["../../../src/routes/node/createNodeJob.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createNodeJob.js","sourceRoot":"","sources":["../../../src/routes/node/createNodeJob.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/node/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAW,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExE,mBAAmB,YAAY,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,aAAa,CA+BtG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/node/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAW,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExE,mBAAmB,YAAY,CAAC;AAEhC;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,aAAa,CAiCtG"}
@@ -1,6 +1,7 @@
1
1
  import { createNodeClient, nodeDomain } from '../../client/node/index.js';
2
2
  import { nodeInfo } from './actions/nodeInfo.js';
3
3
  import { createNodeJob } from './createNodeJob.js';
4
+ import { createJobRuntimeResolver } from './jobRuntime.js';
4
5
  /**
5
6
  * Talks to nodes directly. Each node runs the same API on its own host, checks
6
7
  * the job owner's wallet signature, and knows only about the jobs it runs.
@@ -23,8 +24,10 @@ export function createNosanaNodeApi({ environment, authParams, options }) {
23
24
  ...authParams,
24
25
  generate: () => authParams.generate(job, { skipCache: true }),
25
26
  };
27
+ const client = createNodeClient(environment, address, jobAuth, options);
26
28
  return createNodeJob({
27
- client: createNodeClient(environment, address, jobAuth, options),
29
+ client,
30
+ runtimeClient: createJobRuntimeResolver({ environment, job, authParams: jobAuth, options }, client),
28
31
  environment,
29
32
  domain,
30
33
  authorize,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAiB;IACrF,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,UAAU,EAAE,QAAQ,CAAC;IAEvC,OAAO,CAAC,OAAO,EAAW,EAAE;QAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAE3E,OAAO;YACL,OAAO;YACP,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO;YAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;gBACX,qEAAqE;gBACrE,sEAAsE;gBACtE,wEAAwE;gBACxE,sDAAsD;gBACtD,MAAM,OAAO,GAAiC,UAAU,IAAI;oBAC1D,GAAG,UAAU;oBACb,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBAC9D,CAAC;gBACF,OAAO,aAAa,CAAC;oBACnB,MAAM,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;oBAChE,WAAW;oBACX,MAAM;oBACN,SAAS;oBACT,IAAI,EAAE,OAAO;oBACb,GAAG;iBACJ,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAO3D;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAiB;IACrF,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,UAAU,EAAE,QAAQ,CAAC;IAEvC,OAAO,CAAC,OAAO,EAAW,EAAE;QAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAE3E,OAAO;YACL,OAAO;YACP,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO;YAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;gBACX,qEAAqE;gBACrE,sEAAsE;gBACtE,wEAAwE;gBACxE,sDAAsD;gBACtD,MAAM,OAAO,GAAiC,UAAU,IAAI;oBAC1D,GAAG,UAAU;oBACb,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;iBAC9D,CAAC;gBACF,MAAM,MAAM,GAAG,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACxE,OAAO,aAAa,CAAC;oBACnB,MAAM;oBACN,aAAa,EAAE,wBAAwB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC;oBACnG,WAAW;oBACX,MAAM;oBACN,SAAS;oBACT,IAAI,EAAE,OAAO;oBACb,GAAG;iBACJ,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { NodeClient } from '../../client/node/index.js';
2
+ import type { CreateNosanaApiOptions, NosanaNetwork, SignedHeaderAuth } from '../../types.js';
3
+ import type { NodeStreamSubscription } from './types.js';
4
+ /** How long a job found without a sidecar stays on its node before the sidecar is asked for again. */
5
+ export declare const SIDECAR_RECHECK_MS = 30000;
6
+ export interface JobRuntimeTarget {
7
+ environment: NosanaNetwork;
8
+ job: string;
9
+ authParams: SignedHeaderAuth | undefined;
10
+ options?: CreateNosanaApiOptions;
11
+ }
12
+ /**
13
+ * Resolves the client for a job's runtime routes: the job's sidecar when its
14
+ * node started one, otherwise the node, which serves the same routes. A node
15
+ * on an older version, or one that could not pull the sidecar image, has none.
16
+ * The sidecar answers `GET /` with its job address, so that is the check. A job
17
+ * found without one is checked again after {@link SIDECAR_RECHECK_MS}, since
18
+ * its sidecar can come up after the job is first addressed.
19
+ */
20
+ export declare function createJobRuntimeResolver(target: JobRuntimeTarget, node: NodeClient): () => Promise<NodeClient>;
21
+ /**
22
+ * Opens a stream once the runtime client is resolved. The caller still gets
23
+ * its subscription at once; closing it before then cancels the open.
24
+ */
25
+ export declare function openOnJobRuntime(resolve: () => Promise<NodeClient>, open: (client: NodeClient) => NodeStreamSubscription): NodeStreamSubscription;
26
+ //# sourceMappingURL=jobRuntime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobRuntime.d.ts","sourceRoot":"","sources":["../../../src/routes/node/jobRuntime.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,sGAAsG;AACtG,eAAO,MAAM,kBAAkB,QAAS,CAAC;AAIzC,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,aAAa,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAmB9G;AAaD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,EAClC,IAAI,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,sBAAsB,GACnD,sBAAsB,CAcxB"}
@@ -0,0 +1,63 @@
1
+ import { isSolanaAddress } from '@nosana/types';
2
+ import { createJobRuntimeClient, jobRuntimeUrl } from '../../client/node/index.js';
3
+ /** How long a job found without a sidecar stays on its node before the sidecar is asked for again. */
4
+ export const SIDECAR_RECHECK_MS = 30000;
5
+ /** The sidecar answers its liveness route at once; a slower answer counts as none. */
6
+ const SIDECAR_PROBE_TIMEOUT_MS = 5000;
7
+ /**
8
+ * Resolves the client for a job's runtime routes: the job's sidecar when its
9
+ * node started one, otherwise the node, which serves the same routes. A node
10
+ * on an older version, or one that could not pull the sidecar image, has none.
11
+ * The sidecar answers `GET /` with its job address, so that is the check. A job
12
+ * found without one is checked again after {@link SIDECAR_RECHECK_MS}, since
13
+ * its sidecar can come up after the job is first addressed.
14
+ */
15
+ export function createJobRuntimeResolver(target, node) {
16
+ if (!isSolanaAddress(target.job))
17
+ return () => Promise.resolve(node);
18
+ let resolved;
19
+ let missingSince;
20
+ return () => {
21
+ if (!resolved || (missingSince !== undefined && Date.now() - missingSince >= SIDECAR_RECHECK_MS)) {
22
+ missingSince = undefined;
23
+ resolved = hasSidecar(target).then((found) => {
24
+ if (found) {
25
+ return createJobRuntimeClient(target.environment, target.job, target.authParams, target.options);
26
+ }
27
+ missingSince = Date.now();
28
+ return node;
29
+ });
30
+ }
31
+ return resolved;
32
+ };
33
+ }
34
+ async function hasSidecar({ environment, job, options }) {
35
+ try {
36
+ const response = await fetch(`${jobRuntimeUrl(environment, job, options)}/`, {
37
+ signal: AbortSignal.timeout(SIDECAR_PROBE_TIMEOUT_MS),
38
+ });
39
+ return response.ok && (await response.json()) === job;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ /**
46
+ * Opens a stream once the runtime client is resolved. The caller still gets
47
+ * its subscription at once; closing it before then cancels the open.
48
+ */
49
+ export function openOnJobRuntime(resolve, open) {
50
+ let closed = false;
51
+ let subscription;
52
+ void resolve().then((client) => {
53
+ if (!closed)
54
+ subscription = open(client);
55
+ });
56
+ return {
57
+ close: () => {
58
+ closed = true;
59
+ subscription?.close();
60
+ },
61
+ };
62
+ }
63
+ //# sourceMappingURL=jobRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobRuntime.js","sourceRoot":"","sources":["../../../src/routes/node/jobRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAMnF,sGAAsG;AACtG,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAM,CAAC;AACzC,sFAAsF;AACtF,MAAM,wBAAwB,GAAG,IAAK,CAAC;AASvC;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAwB,EAAE,IAAgB;IACjF,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE,IAAI,QAAyC,CAAC;IAC9C,IAAI,YAAgC,CAAC;IAErC,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,IAAI,kBAAkB,CAAC,EAAE,CAAC;YACjG,YAAY,GAAG,SAAS,CAAC;YACzB,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3C,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,sBAAsB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnG,CAAC;gBACD,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAoB;IACvE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAC3E,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC;SACtD,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAkC,EAClC,IAAoD;IAEpD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,YAAgD,CAAC;IAErD,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,IAAI,CAAC,MAAM;YAAE,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,GAAG,EAAE;YACV,MAAM,GAAG,IAAI,CAAC;YACd,YAAY,EAAE,KAAK,EAAE,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -84,7 +84,11 @@ export interface NodeTerminalOptions extends NodeSocketOptions {
84
84
  onStatus?: (status: TerminalStatus, detail?: string) => void;
85
85
  onExit?: (code: number | null) => void;
86
86
  }
87
- /** Everything the node knows about one job it runs. */
87
+ /**
88
+ * Everything the node knows about one job it runs. Stats, logs, the terminal
89
+ * and SSH keys go to the job's own sidecar when its node started one, and to
90
+ * the node otherwise; everything else always goes to the node.
91
+ */
88
92
  export interface NodeJobApi {
89
93
  readonly address: string;
90
94
  readonly node: string;
@@ -136,6 +140,8 @@ export interface NodeRouteDeps {
136
140
  /** What every action on one job needs, resolved once when the node is addressed. */
137
141
  export interface NodeJobContext {
138
142
  client: NodeClient;
143
+ /** The client for the runtime routes: the job's sidecar when it has one, else the node. */
144
+ runtimeClient: () => Promise<NodeClient>;
139
145
  environment: NosanaNetwork;
140
146
  /** The domain the node answers under; also where its SSH proxy lives. */
141
147
  domain: string;