@nosana/api 0.1.6 → 0.1.9
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.
- package/README.md +73 -0
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +10 -8
- package/dist/client/index.js.map +1 -1
- package/dist/client/schema.d.ts +188 -776
- package/dist/defaults/index.d.ts +2 -2
- package/dist/defaults/index.js +9 -3
- package/dist/defaults/index.js.map +1 -1
- package/dist/index.d.ts +16 -9
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/{credits → routes/credits}/index.d.ts +1 -1
- package/dist/{credits → routes/credits}/index.js +2 -2
- package/dist/routes/credits/index.js.map +1 -0
- package/dist/{credits → routes/credits}/types.d.ts +1 -1
- package/dist/{jobs → routes/credits}/types.js.map +1 -1
- package/dist/routes/deployments/deployment/actions/deploymentArchive.d.ts +11 -0
- package/dist/routes/deployments/deployment/actions/deploymentArchive.js +28 -0
- package/dist/routes/deployments/deployment/actions/deploymentArchive.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentCreateNewRevision.d.ts +3 -0
- package/dist/routes/deployments/deployment/actions/deploymentCreateNewRevision.js +17 -0
- package/dist/routes/deployments/deployment/actions/deploymentCreateNewRevision.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentDelete.d.ts +13 -0
- package/dist/routes/deployments/deployment/actions/deploymentDelete.js +26 -0
- package/dist/routes/deployments/deployment/actions/deploymentDelete.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentGenerateAuthHeader.d.ts +3 -0
- package/dist/routes/deployments/deployment/actions/deploymentGenerateAuthHeader.js +11 -0
- package/dist/routes/deployments/deployment/actions/deploymentGenerateAuthHeader.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentGetJob.d.ts +5 -0
- package/dist/routes/deployments/deployment/actions/deploymentGetJob.js +11 -0
- package/dist/routes/deployments/deployment/actions/deploymentGetJob.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentGetTasks.d.ts +12 -0
- package/dist/routes/deployments/deployment/actions/deploymentGetTasks.js +19 -0
- package/dist/routes/deployments/deployment/actions/deploymentGetTasks.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentStart.d.ts +9 -0
- package/dist/routes/deployments/deployment/actions/deploymentStart.js +24 -0
- package/dist/routes/deployments/deployment/actions/deploymentStart.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentStop.d.ts +11 -0
- package/dist/routes/deployments/deployment/actions/deploymentStop.js +26 -0
- package/dist/routes/deployments/deployment/actions/deploymentStop.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateActiveRevision.d.ts +3 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateActiveRevision.js +16 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateActiveRevision.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateReplicaCount.d.ts +11 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateReplicaCount.js +26 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateReplicaCount.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateSchedule.d.ts +3 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateSchedule.js +15 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateSchedule.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateTimeout.d.ts +11 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateTimeout.js +26 -0
- package/dist/routes/deployments/deployment/actions/deploymentUpdateTimeout.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/index.d.ts +15 -0
- package/dist/routes/deployments/deployment/actions/index.js +16 -0
- package/dist/routes/deployments/deployment/actions/index.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/vaultGetBalance.d.ts +14 -0
- package/dist/routes/deployments/deployment/actions/vaultGetBalance.js +19 -0
- package/dist/routes/deployments/deployment/actions/vaultGetBalance.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/vaultTopup.d.ts +13 -0
- package/dist/routes/deployments/deployment/actions/vaultTopup.js +20 -0
- package/dist/routes/deployments/deployment/actions/vaultTopup.js.map +1 -0
- package/dist/routes/deployments/deployment/actions/vaultWithdraw.d.ts +14 -0
- package/dist/routes/deployments/deployment/actions/vaultWithdraw.js +34 -0
- package/dist/routes/deployments/deployment/actions/vaultWithdraw.js.map +1 -0
- package/dist/routes/deployments/deployment/createDeployment.d.ts +5 -0
- package/dist/routes/deployments/deployment/createDeployment.js +150 -0
- package/dist/routes/deployments/deployment/createDeployment.js.map +1 -0
- package/dist/routes/deployments/deployment/createVault.d.ts +14 -0
- package/dist/routes/deployments/deployment/createVault.js +40 -0
- package/dist/routes/deployments/deployment/createVault.js.map +1 -0
- package/dist/routes/deployments/deployment/index.d.ts +2 -0
- package/dist/routes/deployments/deployment/index.js +3 -0
- package/dist/routes/deployments/deployment/index.js.map +1 -0
- package/dist/routes/deployments/index.d.ts +5 -0
- package/dist/routes/deployments/index.js +83 -0
- package/dist/routes/deployments/index.js.map +1 -0
- package/dist/routes/deployments/types.d.ts +63 -0
- package/dist/routes/deployments/types.js.map +1 -0
- package/dist/routes/index.d.ts +4 -0
- package/dist/routes/index.js +5 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/{jobs → routes/jobs}/index.d.ts +1 -1
- package/dist/{jobs → routes/jobs}/index.js +5 -5
- package/dist/routes/jobs/index.js.map +1 -0
- package/dist/{jobs → routes/jobs}/types.d.ts +1 -1
- package/dist/{credits → routes/jobs}/types.js.map +1 -1
- package/dist/{markets → routes/markets}/index.d.ts +1 -1
- package/dist/{markets → routes/markets}/index.js +4 -4
- package/dist/routes/markets/index.js.map +1 -0
- package/dist/{markets → routes/markets}/types.d.ts +1 -1
- package/dist/routes/markets/types.js +2 -0
- package/dist/{markets → routes/markets}/types.js.map +1 -1
- package/dist/types.d.ts +34 -17
- package/dist/types.js +2 -5
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
- package/dist/credits/index.js.map +0 -1
- package/dist/jobs/index.js.map +0 -1
- package/dist/markets/index.js.map +0 -1
- /package/dist/{credits → routes/credits}/types.js +0 -0
- /package/dist/{jobs → routes/deployments}/types.js +0 -0
- /package/dist/{markets → routes/jobs}/types.js +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RouteOptionsWithSigner } from "../../../../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Gets the balance of a vault.
|
|
4
|
+
*
|
|
5
|
+
* TODO: Implement with @nosana/kit TokenManager once available.
|
|
6
|
+
* Should fetch SOL and NOS balances from the vault address.
|
|
7
|
+
*
|
|
8
|
+
* @param vaultAddress - The vault's Solana address
|
|
9
|
+
* @returns Promise with SOL and NOS balances
|
|
10
|
+
*/
|
|
11
|
+
export declare function vaultGetBalance(vaultAddress: string, { solana: { getBalance } }: RouteOptionsWithSigner): Promise<{
|
|
12
|
+
SOL: number;
|
|
13
|
+
NOS: number;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { errorFormatter } from "../../../../utils/errorFormatter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Gets the balance of a vault.
|
|
4
|
+
*
|
|
5
|
+
* TODO: Implement with @nosana/kit TokenManager once available.
|
|
6
|
+
* Should fetch SOL and NOS balances from the vault address.
|
|
7
|
+
*
|
|
8
|
+
* @param vaultAddress - The vault's Solana address
|
|
9
|
+
* @returns Promise with SOL and NOS balances
|
|
10
|
+
*/
|
|
11
|
+
export async function vaultGetBalance(vaultAddress, { solana: { getBalance } }) {
|
|
12
|
+
try {
|
|
13
|
+
return await getBalance(vaultAddress);
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
throw errorFormatter('Failed to get vault balance', error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=vaultGetBalance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultGetBalance.js","sourceRoot":"","sources":["../../../../../src/routes/deployments/deployment/actions/vaultGetBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAIrE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAAoB,EACpB,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAA0B;IAElD,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TopupVaultOptions } from '../../types.js';
|
|
2
|
+
import type { RouteOptionsWithSigner } from '../../../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Tops up a vault with SOL and/or NOS.
|
|
5
|
+
*
|
|
6
|
+
* TODO: Implement with @nosana/kit TokenManager once available.
|
|
7
|
+
* Should use TokenManager to transfer SOL/NOS to the vault.
|
|
8
|
+
*
|
|
9
|
+
* @param _vaultAddress - The vault's Solana address
|
|
10
|
+
* @param _options - Topup options (SOL, NOS amounts)
|
|
11
|
+
* @returns Promise that resolves when topup is complete
|
|
12
|
+
*/
|
|
13
|
+
export declare function vaultTopup(vaultAddress: string, options: TopupVaultOptions, { solana: { transferTokensToRecipient } }: RouteOptionsWithSigner): Promise<void>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { errorFormatter } from '../../../../utils/errorFormatter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tops up a vault with SOL and/or NOS.
|
|
4
|
+
*
|
|
5
|
+
* TODO: Implement with @nosana/kit TokenManager once available.
|
|
6
|
+
* Should use TokenManager to transfer SOL/NOS to the vault.
|
|
7
|
+
*
|
|
8
|
+
* @param _vaultAddress - The vault's Solana address
|
|
9
|
+
* @param _options - Topup options (SOL, NOS amounts)
|
|
10
|
+
* @returns Promise that resolves when topup is complete
|
|
11
|
+
*/
|
|
12
|
+
export async function vaultTopup(vaultAddress, options, { solana: { transferTokensToRecipient } }) {
|
|
13
|
+
try {
|
|
14
|
+
await transferTokensToRecipient(vaultAddress, options);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
throw errorFormatter('Failed to top up vault', error);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=vaultTopup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultTopup.js","sourceRoot":"","sources":["../../../../../src/routes/deployments/deployment/actions/vaultTopup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAKrE;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAAoB,EACpB,OAA0B,EAC1B,EAAE,MAAM,EAAE,EAAE,yBAAyB,EAAE,EAA0B;IAEjE,IAAI,CAAC;QACH,MAAM,yBAAyB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { RouteOptionsWithSigner } from '../../../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Withdraws all tokens from a vault.
|
|
4
|
+
*
|
|
5
|
+
* TODO: Implement with @nosana/kit once available.
|
|
6
|
+
* Should:
|
|
7
|
+
* 1. Call deployment manager API to get withdrawal transaction
|
|
8
|
+
* 2. Sign and send the transaction using wallet from @nosana/kit
|
|
9
|
+
*
|
|
10
|
+
* @param vaultAddress - The vault's Solana address
|
|
11
|
+
* @param options - Options including QueryClient for API calls
|
|
12
|
+
* @returns Promise that resolves when withdrawal is complete
|
|
13
|
+
*/
|
|
14
|
+
export declare function vaultWithdraw(vaultAddress: string, { client, solana: { deserializeSignSendAndConfirmTransaction } }: RouteOptionsWithSigner): Promise<void>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { errorFormatter } from '../../../../utils/errorFormatter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Withdraws all tokens from a vault.
|
|
4
|
+
*
|
|
5
|
+
* TODO: Implement with @nosana/kit once available.
|
|
6
|
+
* Should:
|
|
7
|
+
* 1. Call deployment manager API to get withdrawal transaction
|
|
8
|
+
* 2. Sign and send the transaction using wallet from @nosana/kit
|
|
9
|
+
*
|
|
10
|
+
* @param vaultAddress - The vault's Solana address
|
|
11
|
+
* @param options - Options including QueryClient for API calls
|
|
12
|
+
* @returns Promise that resolves when withdrawal is complete
|
|
13
|
+
*/
|
|
14
|
+
export async function vaultWithdraw(vaultAddress, { client, solana: { deserializeSignSendAndConfirmTransaction } }) {
|
|
15
|
+
const { data, error } = await client.POST('/api/deployments/vaults/{vault}/withdraw', {
|
|
16
|
+
params: {
|
|
17
|
+
path: {
|
|
18
|
+
vault: vaultAddress,
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
body: {}
|
|
22
|
+
});
|
|
23
|
+
if (error || !data) {
|
|
24
|
+
throw errorFormatter('Failed to withdraw from vault', error);
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const { transaction } = data;
|
|
28
|
+
await deserializeSignSendAndConfirmTransaction(transaction);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
throw errorFormatter('Vault withdrawal transaction failed.', error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=vaultWithdraw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultWithdraw.js","sourceRoot":"","sources":["../../../../../src/routes/deployments/deployment/actions/vaultWithdraw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAIrE;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAoB,EACpB,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,wCAAwC,EAAE,EAA0B;IAExF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE;QACpF,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,KAAK,EAAE,YAAY;aACpB;SACF;QACD,IAAI,EAAE,EAAE;KACT,CAAC,CAAC;IAEH,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,cAAc,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,wCAAwC,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Deployment as DeploymentSchema } from '@nosana/types';
|
|
2
|
+
import type { Deployment, ApiDeployment } from '../types.js';
|
|
3
|
+
import type { RouteOptions, RouteOptionsWithSigner } from '../../../types.js';
|
|
4
|
+
export declare function createDeployment(deployment: DeploymentSchema, options: RouteOptions, hasApiKey: true): ApiDeployment;
|
|
5
|
+
export declare function createDeployment(deployment: DeploymentSchema, options: RouteOptionsWithSigner, hasApiKey: false): Deployment;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { deploymentStop, deploymentStart, deploymentGetJob, deploymentArchive, deploymentUpdateReplicaCount, deploymentGetTasks, deploymentUpdateTimeout, deploymentCreateNewRevision, deploymentUpdateActiveRevision, deploymentUpdateSchedule, deploymentGenerateAuthHeader, deploymentDelete } from './actions/index.js';
|
|
2
|
+
import { createVault } from './createVault.js';
|
|
3
|
+
export function createDeployment(deployment, options, hasApiKey) {
|
|
4
|
+
let state = {
|
|
5
|
+
...deployment,
|
|
6
|
+
updated_at: new Date(deployment.updated_at),
|
|
7
|
+
created_at: new Date(deployment.created_at),
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* @throws Error if the deployment is already running or starting
|
|
11
|
+
* @throws Error if there is an error starting the deployment
|
|
12
|
+
* @returns Promise<void>
|
|
13
|
+
* @description Starts the deployment.
|
|
14
|
+
*/
|
|
15
|
+
const start = async () => {
|
|
16
|
+
await deploymentStart(options.client, state);
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @throws Error if the deployment is already stopped
|
|
20
|
+
* @throws Error if there is an error stopping the deployment
|
|
21
|
+
* @returns Promise<void>
|
|
22
|
+
* @description Stops the deployment.
|
|
23
|
+
* This will halt the deployment and prevent further actions until it is started again.
|
|
24
|
+
* It is useful for pausing deployments without archiving them.
|
|
25
|
+
*/
|
|
26
|
+
const stop = async () => {
|
|
27
|
+
await deploymentStop(options.client, state);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* @throws Error if the deployment is not stopped
|
|
31
|
+
* @throws Error if there is an error archiving the deployment
|
|
32
|
+
* @returns Promise<void>
|
|
33
|
+
* @description Archives the deployment.
|
|
34
|
+
* This will mark the deployment as archived and prevent further modifications.
|
|
35
|
+
* It is useful for cleaning up deployments that are no longer needed.
|
|
36
|
+
*/
|
|
37
|
+
const archive = async () => {
|
|
38
|
+
await deploymentArchive(options.client, state);
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* @returns Promise<Task[]>
|
|
42
|
+
* @throws Error if there is an error fetching the tasks
|
|
43
|
+
* @throws Error if the deployment is not found
|
|
44
|
+
* @description Fetches the tasks for the deployment.
|
|
45
|
+
* This will return the current tasks associated with the deployment.
|
|
46
|
+
* It is useful for monitoring the deployment's progress and status.
|
|
47
|
+
*/
|
|
48
|
+
const getTasks = async () => {
|
|
49
|
+
return await deploymentGetTasks(options.client, state);
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* @param jobDefinition Job definition for the new revision
|
|
53
|
+
* @throws Error if there is an error creating the new revision
|
|
54
|
+
* @returns Promise<void>
|
|
55
|
+
* @description Creates a new revision for the deployment.
|
|
56
|
+
* This will create a new version of the deployment based on the provided job definition.
|
|
57
|
+
* It is useful for updating the deployment with new configurations or code.
|
|
58
|
+
*/
|
|
59
|
+
const createRevision = async (jobDefinition) => {
|
|
60
|
+
await deploymentCreateNewRevision(jobDefinition, options.client, state);
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* @param replicas Number of replicas to set for the deployment
|
|
64
|
+
* @throws Error if replicas is less than 1
|
|
65
|
+
* @throws Error if there is an error updating the replica count
|
|
66
|
+
* @returns Promise<void>
|
|
67
|
+
* @description Updates the number of replicas for the deployment.
|
|
68
|
+
* This will change the number of instances running for the deployment.
|
|
69
|
+
*/
|
|
70
|
+
const updateReplicaCount = async (replicas) => {
|
|
71
|
+
await deploymentUpdateReplicaCount(replicas, options.client, state);
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* @param timeout Timeout in seconds
|
|
75
|
+
* @throws Error if timeout is less than 60 seconds
|
|
76
|
+
* @throws Error if there is an error updating the timeout
|
|
77
|
+
* @returns Promise<void>
|
|
78
|
+
* @description Updates the timeout for the deployment.
|
|
79
|
+
* This will change the maximum time the deployment can run before it is stopped.
|
|
80
|
+
*/
|
|
81
|
+
const updateTimeout = async (timeout) => {
|
|
82
|
+
await deploymentUpdateTimeout(timeout, options.client, state);
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* @param active_revision
|
|
86
|
+
* @throws Error if there is an error updating the active revision
|
|
87
|
+
* @returns Promise<void>
|
|
88
|
+
* @description Updates the active revision for the deployment.
|
|
89
|
+
* This will change which revision of the deployment is currently active and serving traffic.
|
|
90
|
+
*/
|
|
91
|
+
const updateActiveRevision = async (active_revision) => {
|
|
92
|
+
await deploymentUpdateActiveRevision(active_revision, options.client, state);
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* @param schedule Schedule string for the deployment
|
|
96
|
+
* @throws Error if there is an error updating the schedule
|
|
97
|
+
* @returns Promise<void>
|
|
98
|
+
* @description Updates the schedule for the deployment.
|
|
99
|
+
* This will change when the deployment runs based on the provided schedule.
|
|
100
|
+
*/
|
|
101
|
+
const updateSchedule = async (schedule) => {
|
|
102
|
+
await deploymentUpdateSchedule(schedule, options.client, state);
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* @throws Error if there is an error generating the auth header
|
|
106
|
+
* @returns Promise<void>
|
|
107
|
+
* @description Generates a new authentication header for the deployment.
|
|
108
|
+
* This is used for securing access to the deployment's resources.
|
|
109
|
+
*/
|
|
110
|
+
const generateAuthHeader = async () => {
|
|
111
|
+
return await deploymentGenerateAuthHeader(options.client, state);
|
|
112
|
+
};
|
|
113
|
+
const getJob = async (job) => {
|
|
114
|
+
return await deploymentGetJob(options.client, state.id, job);
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* @throws Error if the deployment is not stopped
|
|
118
|
+
* @throws Error if there is an error deleting the deployment
|
|
119
|
+
* @returns Promise<void>
|
|
120
|
+
* @description Deletes the deployment permanently.
|
|
121
|
+
* This will remove the deployment and all associated data (jobs, results, revisions, events).
|
|
122
|
+
* The deployment must be in STOPPED state before it can be deleted.
|
|
123
|
+
* The vault associated with the deployment is NOT deleted.
|
|
124
|
+
* After successful deletion, the deployment object becomes unusable.
|
|
125
|
+
*/
|
|
126
|
+
const deleteDeployment = async () => {
|
|
127
|
+
return await deploymentDelete(options.client, state, () => {
|
|
128
|
+
// @ts-expect-error Clear the state to prevent further interaction
|
|
129
|
+
state = undefined;
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
return Object.assign(state, {
|
|
133
|
+
...(!hasApiKey && "solana" in options ? {
|
|
134
|
+
vault: createVault(state.vault, options, state.created_at)
|
|
135
|
+
} : {}),
|
|
136
|
+
start,
|
|
137
|
+
stop,
|
|
138
|
+
archive,
|
|
139
|
+
delete: deleteDeployment,
|
|
140
|
+
getTasks,
|
|
141
|
+
getJob,
|
|
142
|
+
generateAuthHeader,
|
|
143
|
+
createRevision,
|
|
144
|
+
updateReplicaCount,
|
|
145
|
+
updateActiveRevision,
|
|
146
|
+
updateTimeout,
|
|
147
|
+
updateSchedule,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=createDeployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createDeployment.js","sourceRoot":"","sources":["../../../../src/routes/deployments/deployment/createDeployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Vault } from '../types.js';
|
|
2
|
+
import type { RouteOptionsWithSigner } from '../../../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a Vault object with methods for managing vault operations.
|
|
5
|
+
*
|
|
6
|
+
* TODO: Once @nosana/kit exports TokenManager and vault utilities, update the action
|
|
7
|
+
* implementations to use them instead of throwing errors.
|
|
8
|
+
*
|
|
9
|
+
* @param vaultAddress - The vault's Solana address
|
|
10
|
+
* @param options - Options including QueryClient for API calls
|
|
11
|
+
* @param created_at - Optional creation timestamp
|
|
12
|
+
* @returns A Vault object with methods
|
|
13
|
+
*/
|
|
14
|
+
export declare function createVault(vaultAddress: string, options: RouteOptionsWithSigner, created_at?: Date): Vault;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { vaultGetBalance, vaultTopup, vaultWithdraw, } from './actions/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a Vault object with methods for managing vault operations.
|
|
4
|
+
*
|
|
5
|
+
* TODO: Once @nosana/kit exports TokenManager and vault utilities, update the action
|
|
6
|
+
* implementations to use them instead of throwing errors.
|
|
7
|
+
*
|
|
8
|
+
* @param vaultAddress - The vault's Solana address
|
|
9
|
+
* @param options - Options including QueryClient for API calls
|
|
10
|
+
* @param created_at - Optional creation timestamp
|
|
11
|
+
* @returns A Vault object with methods
|
|
12
|
+
*/
|
|
13
|
+
export function createVault(vaultAddress, options, created_at) {
|
|
14
|
+
return {
|
|
15
|
+
address: vaultAddress,
|
|
16
|
+
...(created_at ? { created_at } : {}),
|
|
17
|
+
/**
|
|
18
|
+
* Gets the current balance of the vault.
|
|
19
|
+
* TODO: Implementation in actions/vaultGetBalance.ts
|
|
20
|
+
*/
|
|
21
|
+
getBalance: async () => {
|
|
22
|
+
return await vaultGetBalance(vaultAddress, options);
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Tops up the vault with SOL and/or NOS.
|
|
26
|
+
* TODO: Implementation in actions/vaultTopup.ts
|
|
27
|
+
*/
|
|
28
|
+
topup: async (topupOptions) => {
|
|
29
|
+
return await vaultTopup(vaultAddress, topupOptions, options);
|
|
30
|
+
},
|
|
31
|
+
/**
|
|
32
|
+
* Withdraws all tokens from the vault.
|
|
33
|
+
* TODO: Implementation in actions/vaultWithdraw.ts
|
|
34
|
+
*/
|
|
35
|
+
withdraw: async () => {
|
|
36
|
+
await vaultWithdraw(vaultAddress, options);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=createVault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createVault.js","sourceRoot":"","sources":["../../../../src/routes/deployments/deployment/createVault.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,aAAa,GACd,MAAM,oBAAoB,CAAC;AAK5B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,YAAoB,EACpB,OAA+B,EAC/B,UAAiB;IAGjB,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAErC;;;WAGG;QACH,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,OAAO,MAAM,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAED;;;WAGG;QACH,KAAK,EAAE,KAAK,EAAE,YAA+B,EAAE,EAAE;YAC/C,OAAO,MAAM,UAAU,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QAED;;;WAGG;QACH,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/routes/deployments/deployment/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { RouteOptions, RouteOptionsWithSigner } from '../../types.js';
|
|
2
|
+
import type { DeploymentsApi, ApiDeploymentsApi } from './types.js';
|
|
3
|
+
export type { DeploymentsApi, ApiDeploymentsApi } from './types.js';
|
|
4
|
+
export declare function createDeploymentsApi(options: RouteOptions, hasApiKey: true): ApiDeploymentsApi;
|
|
5
|
+
export declare function createDeploymentsApi(options: RouteOptionsWithSigner, hasApiKey: false): DeploymentsApi;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { errorFormatter } from '../../utils/errorFormatter.js';
|
|
2
|
+
import { createVault as createVaultFn } from './deployment/createVault.js';
|
|
3
|
+
import { createDeployment as createDeploymentFn } from './deployment/createDeployment.js';
|
|
4
|
+
export function createDeploymentsApi(options, hasApiKey) {
|
|
5
|
+
const createDeployment = (data) => !hasApiKey && "solana" in options
|
|
6
|
+
? createDeploymentFn(data, options, false)
|
|
7
|
+
: createDeploymentFn(data, options, true);
|
|
8
|
+
const create = async (deploymentBody) => {
|
|
9
|
+
const { data, error } = await options.client.POST('/api/deployments/create', {
|
|
10
|
+
body: deploymentBody,
|
|
11
|
+
});
|
|
12
|
+
if (error || !data) {
|
|
13
|
+
throw errorFormatter('Error creating deployment', error);
|
|
14
|
+
}
|
|
15
|
+
return createDeployment(data);
|
|
16
|
+
};
|
|
17
|
+
const get = async (deployment) => {
|
|
18
|
+
const { data, error } = await options.client.GET('/api/deployments/{deployment}', {
|
|
19
|
+
params: {
|
|
20
|
+
path: {
|
|
21
|
+
deployment,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
if (error || !data) {
|
|
26
|
+
throw errorFormatter('Error getting deployment', error);
|
|
27
|
+
}
|
|
28
|
+
return createDeployment(data);
|
|
29
|
+
};
|
|
30
|
+
const list = async () => {
|
|
31
|
+
const { data, error } = await options.client.GET('/api/deployments', {});
|
|
32
|
+
if (error || !data) {
|
|
33
|
+
throw errorFormatter('Error listing deployments', error);
|
|
34
|
+
}
|
|
35
|
+
return data.map((deployment) => createDeployment(deployment));
|
|
36
|
+
};
|
|
37
|
+
const pipe = async (deploymentIDorCreateObject, ...actions) => {
|
|
38
|
+
let deployment;
|
|
39
|
+
if (typeof deploymentIDorCreateObject === 'string') {
|
|
40
|
+
deployment = await get(deploymentIDorCreateObject);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
deployment = await create(deploymentIDorCreateObject);
|
|
44
|
+
}
|
|
45
|
+
for (const action of actions) {
|
|
46
|
+
await action(deployment);
|
|
47
|
+
}
|
|
48
|
+
return deployment;
|
|
49
|
+
};
|
|
50
|
+
const createVault = async () => {
|
|
51
|
+
if (hasApiKey || !('solana' in options)) {
|
|
52
|
+
throw errorFormatter('Creating a vault requires signer authentication');
|
|
53
|
+
}
|
|
54
|
+
const { data, error } = await options.client.POST('/api/deployments/vaults/create', {});
|
|
55
|
+
if (error || !data) {
|
|
56
|
+
throw errorFormatter('Error creating vault', error);
|
|
57
|
+
}
|
|
58
|
+
return createVaultFn(data.vault, options, new Date(data.created_at));
|
|
59
|
+
};
|
|
60
|
+
const listVaults = async () => {
|
|
61
|
+
if (hasApiKey || !('solana' in options)) {
|
|
62
|
+
throw errorFormatter('Creating a vault requires signer authentication');
|
|
63
|
+
}
|
|
64
|
+
const { data, error } = await options.client.GET('/api/deployments/vaults', {});
|
|
65
|
+
if (error || !data) {
|
|
66
|
+
throw errorFormatter('Error listing vaults', error);
|
|
67
|
+
}
|
|
68
|
+
return data.map(({ vault, created_at }) => createVaultFn(vault, options, new Date(created_at)));
|
|
69
|
+
};
|
|
70
|
+
return {
|
|
71
|
+
create,
|
|
72
|
+
get,
|
|
73
|
+
list,
|
|
74
|
+
pipe,
|
|
75
|
+
...(!hasApiKey ? {
|
|
76
|
+
vaults: {
|
|
77
|
+
create: createVault,
|
|
78
|
+
list: listVaults
|
|
79
|
+
}
|
|
80
|
+
} : {}),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/deployments/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { JobDefinition, Task, Deployment as DeploymentSchema, components, paths } from '@nosana/types';
|
|
2
|
+
export type { JobDefinition, Task } from '@nosana/types';
|
|
3
|
+
export type DeploymentState = Omit<DeploymentSchema, "updated_at" | "created_at"> & {
|
|
4
|
+
updated_at: Date;
|
|
5
|
+
created_at: Date;
|
|
6
|
+
};
|
|
7
|
+
export type DeploymentCreateBody = components['schemas']['DeploymentCreateBody'];
|
|
8
|
+
export type CreateDeployment = Omit<DeploymentCreateBody, 'job_definition'> & {
|
|
9
|
+
job_definition: JobDefinition;
|
|
10
|
+
};
|
|
11
|
+
export interface TopupVaultOptions {
|
|
12
|
+
SOL?: number;
|
|
13
|
+
NOS?: number;
|
|
14
|
+
lamports?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Vault interface for managing deployment funding.
|
|
18
|
+
* NOTE: Implementation will be provided by @nosana/kit
|
|
19
|
+
*/
|
|
20
|
+
export interface Vault {
|
|
21
|
+
address: string;
|
|
22
|
+
created_at?: Date;
|
|
23
|
+
getBalance: () => Promise<{
|
|
24
|
+
SOL: number;
|
|
25
|
+
NOS: number;
|
|
26
|
+
}>;
|
|
27
|
+
topup: (options: TopupVaultOptions) => Promise<void>;
|
|
28
|
+
withdraw: () => Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export type DeploymentJob = paths['/api/deployments/{deployment}/jobs/{job}']['get']['responses']['200']['content']['application/json'];
|
|
31
|
+
export type ApiDeployment = DeploymentState & {
|
|
32
|
+
start: () => Promise<void>;
|
|
33
|
+
stop: () => Promise<void>;
|
|
34
|
+
archive: () => Promise<void>;
|
|
35
|
+
delete: () => Promise<void>;
|
|
36
|
+
getTasks: () => Promise<Task[]>;
|
|
37
|
+
getJob: (job: string) => Promise<DeploymentJob>;
|
|
38
|
+
generateAuthHeader: () => Promise<string>;
|
|
39
|
+
createRevision: (jobDefinition: JobDefinition) => Promise<void>;
|
|
40
|
+
updateActiveRevision: (revision: number) => Promise<void>;
|
|
41
|
+
updateReplicaCount: (replicas: number) => Promise<void>;
|
|
42
|
+
updateTimeout: (timeout: number) => Promise<void>;
|
|
43
|
+
updateSchedule: (schedule: string) => Promise<void>;
|
|
44
|
+
};
|
|
45
|
+
export type Deployment = ApiDeployment & {
|
|
46
|
+
vault: Vault;
|
|
47
|
+
};
|
|
48
|
+
export interface DeploymentsApi {
|
|
49
|
+
create: (deploymentBody: CreateDeployment) => Promise<Deployment>;
|
|
50
|
+
get: (deployment: string) => Promise<Deployment>;
|
|
51
|
+
list: () => Promise<Deployment[]>;
|
|
52
|
+
pipe: (deploymentIDorCreateObject: string | CreateDeployment, ...actions: Array<(deployment: Deployment) => Promise<void> | void>) => Promise<Deployment>;
|
|
53
|
+
vaults: {
|
|
54
|
+
create: () => Promise<Vault>;
|
|
55
|
+
list: () => Promise<Vault[]>;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface ApiDeploymentsApi {
|
|
59
|
+
create: (deploymentBody: CreateDeployment) => Promise<ApiDeployment>;
|
|
60
|
+
get: (deployment: string) => Promise<ApiDeployment>;
|
|
61
|
+
list: () => Promise<ApiDeployment[]>;
|
|
62
|
+
pipe: (deploymentIDorCreateObject: string | CreateDeployment, ...actions: Array<(deployment: ApiDeployment) => Promise<void> | void>) => Promise<ApiDeployment>;
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/routes/deployments/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routes/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QueryClient } from '
|
|
1
|
+
import type { QueryClient } from '../../client/index.js';
|
|
2
2
|
import type { NosanaJobsApi } from './types.js';
|
|
3
3
|
export * from './types.js';
|
|
4
4
|
export declare function createNosanaJobsApi(client: QueryClient): NosanaJobsApi;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { errorFormatter } from '
|
|
1
|
+
import { errorFormatter } from '../../utils/errorFormatter.js';
|
|
2
2
|
export * from './types.js';
|
|
3
3
|
export function createNosanaJobsApi(client) {
|
|
4
4
|
return {
|
|
@@ -10,7 +10,7 @@ export function createNosanaJobsApi(client) {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
-
if (
|
|
13
|
+
if (error || !data) {
|
|
14
14
|
throw errorFormatter('Failed to get job', error);
|
|
15
15
|
}
|
|
16
16
|
return data;
|
|
@@ -19,7 +19,7 @@ export function createNosanaJobsApi(client) {
|
|
|
19
19
|
const { data, error } = await client.POST('/api/jobs/list', {
|
|
20
20
|
body: request,
|
|
21
21
|
});
|
|
22
|
-
if (
|
|
22
|
+
if (error || !data) {
|
|
23
23
|
throw errorFormatter('Failed to list job', error);
|
|
24
24
|
}
|
|
25
25
|
return data;
|
|
@@ -33,7 +33,7 @@ export function createNosanaJobsApi(client) {
|
|
|
33
33
|
},
|
|
34
34
|
body: request,
|
|
35
35
|
});
|
|
36
|
-
if (
|
|
36
|
+
if (error || !data) {
|
|
37
37
|
throw errorFormatter('Failed to extend job', error);
|
|
38
38
|
}
|
|
39
39
|
return data;
|
|
@@ -46,7 +46,7 @@ export function createNosanaJobsApi(client) {
|
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
});
|
|
49
|
-
if (
|
|
49
|
+
if (error || !data) {
|
|
50
50
|
throw errorFormatter('Failed to stop job', error);
|
|
51
51
|
}
|
|
52
52
|
return data;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAe/D,cAAc,YAAY,CAAC;AAE3B,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,OAAwC;YAChD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE;gBAC9D,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,OAAO;qBACR;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,cAAc,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAgC;YACzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1D,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,cAAc,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAA6B;YAC7D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBACtE,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,OAAO;qBACR;iBACF;gBACD,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,cAAc,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAgC;YACzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACpE,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,OAAO;qBACR;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,cAAc,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { operations } from "
|
|
1
|
+
import { operations } from "../../client/schema.js";
|
|
2
2
|
export type NosanaApiGetJobByAddressRequest = operations['getApiJobsByAddress']['parameters']['path']['address'];
|
|
3
3
|
export type NosanaApiListJobRequest = operations['postApiJobsList']['requestBody']['content']['application/json'];
|
|
4
4
|
export type NosanaApiExtendJobRequest = operations['postApiJobsByAddressExtend']['requestBody']['content']['application/json'] & operations['postApiJobsByAddressExtend']['parameters']['path'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/routes/jobs/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { QueryClient } from '
|
|
1
|
+
import type { QueryClient } from '../../client/index.js';
|
|
2
2
|
import type { NosanaMarketsApi } from './types.js';
|
|
3
3
|
export * from './types.js';
|
|
4
4
|
export declare function createNosanaMarketsApi(client: QueryClient): NosanaMarketsApi;
|