@nosana/api 2.2.20 → 2.5.0
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/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +4 -3
- package/dist/defaults/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/routes/jobs/index.d.ts.map +1 -1
- package/dist/routes/jobs/index.js +13 -3
- package/dist/routes/jobs/index.js.map +1 -1
- package/dist/routes/jobs/types.d.ts +11 -3
- package/dist/routes/jobs/types.d.ts.map +1 -1
- package/dist/utils/idempotency.d.ts +18 -0
- package/dist/utils/idempotency.d.ts.map +1 -0
- package/dist/utils/idempotency.js +20 -0
- package/dist/utils/idempotency.js.map +1 -0
- package/package.json +9 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/defaults/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/defaults/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAEzD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,aAAa,CAAC,MAAM,OAAO,aAAa,CAAC,EAAE,MAAM,CAgB1F,CAAC"}
|
package/dist/defaults/index.js
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
|
+
import { NOS_MINT_ADDRESSES } from "@nosana/types";
|
|
1
2
|
import { NosanaNetwork } from "../types.js";
|
|
2
3
|
export const defaultConfig = {
|
|
3
4
|
[NosanaNetwork.MAINNET]: {
|
|
4
5
|
backend_url: 'https://dashboard.k8s.prd.nos.ci',
|
|
5
6
|
client_manager_url: 'https://client-manager.k8s.prd.nosana.com',
|
|
6
|
-
nos_address:
|
|
7
|
+
nos_address: NOS_MINT_ADDRESSES[NosanaNetwork.MAINNET]
|
|
7
8
|
},
|
|
8
9
|
[NosanaNetwork.DEVNET]: {
|
|
9
10
|
backend_url: 'https://dashboard.k8s.dev.nos.ci',
|
|
10
11
|
client_manager_url: 'https://client-manager.k8s.dev.nosana.com',
|
|
11
|
-
nos_address:
|
|
12
|
+
nos_address: NOS_MINT_ADDRESSES[NosanaNetwork.DEVNET]
|
|
12
13
|
},
|
|
13
14
|
[NosanaNetwork.LOCALNET]: {
|
|
14
15
|
backend_url: 'https://dashboard.k8s.dev.nos.ci',
|
|
15
16
|
client_manager_url: 'https://client-manager.k8s.dev.nosana.com',
|
|
16
|
-
nos_address:
|
|
17
|
+
nos_address: NOS_MINT_ADDRESSES[NosanaNetwork.LOCALNET]
|
|
17
18
|
}
|
|
18
19
|
};
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/defaults/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAqE;IAC7F,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;QACvB,WAAW,EAAE,kCAAkC;QAC/C,kBAAkB,EAAE,2CAA2C;QAC/D,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/defaults/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAqE;IAC7F,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;QACvB,WAAW,EAAE,kCAAkC;QAC/C,kBAAkB,EAAE,2CAA2C;QAC/D,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC;KACvD;IACD,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QACtB,WAAW,EAAE,kCAAkC;QAC/C,kBAAkB,EAAE,2CAA2C;QAC/D,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC;KACtD;IACD,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QACxB,WAAW,EAAE,kCAAkC;QAC/C,kBAAkB,EAAE,2CAA2C;QAC/D,WAAW,EAAE,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC;KACxD;CACF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export type NosanaApiClient = NosanaApi | NosanaApiWithApiKey;
|
|
|
19
19
|
export declare function createNosanaApi(environment: NosanaNetworkType, noAuth: undefined, options?: CreateNosanaApiOptions): NosanaApi;
|
|
20
20
|
export declare function createNosanaApi(environment: NosanaNetworkType, signerAuth: SignerAuth, options?: CreateNosanaApiOptions): NosanaApi;
|
|
21
21
|
export declare function createNosanaApi(environment: NosanaNetworkType, apiKeyAuth: ApiKeyAuth, options?: CreateNosanaApiOptions): NosanaApiWithApiKey;
|
|
22
|
+
export { generateIdempotencyKey } from './utils/idempotency.js';
|
|
22
23
|
export * from './types.js';
|
|
23
24
|
export type { CreateNosanaApiOptions as ApiConfig, CreateNosanaApiOptions } from './types.js';
|
|
24
25
|
export type * from './routes/jobs/types.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACgB,KAAK,aAAa,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACvB,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAElE,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,UAAU,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErH,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;CAC7B;AAED,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;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,mBAAmB,CAAC;AAG9D,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;AAChI,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;AACrI,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,mBAAmB,CAAC;AAwB/I,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,sBAAsB,IAAI,SAAS,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG9F,mBAAmB,wBAAwB,CAAC;AAC5C,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACgB,KAAK,aAAa,EACf,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACvB,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAElE,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAE,UAAU,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErH,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;CAC7B;AAED,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;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,mBAAmB,CAAC;AAG9D,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;AAChI,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;AACrI,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,mBAAmB,CAAC;AAwB/I,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,sBAAsB,IAAI,SAAS,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAG9F,mBAAmB,wBAAwB,CAAC;AAC5C,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,2BAA2B,CAAC;AAC/C,mBAAmB,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -15,6 +15,8 @@ export function createNosanaApi(environment = NosanaNetwork.MAINNET, signerOrApi
|
|
|
15
15
|
: createDeploymentsApi({ client: dashboardClient }, true)
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
+
// Export helpers
|
|
19
|
+
export { generateIdempotencyKey } from './utils/idempotency.js';
|
|
18
20
|
// Export types
|
|
19
21
|
export * from './types.js';
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAEvG,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0B3C,MAAM,UAAU,eAAe,CAC7B,cAAiC,aAAa,CAAC,OAAO,EACtD,cAAmD,EACnD,OAAgC;IAEhC,MAAM,SAAS,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC;IAErD,MAAM,mBAAmB,GAAG,kCAAkC,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IACrG,MAAM,eAAe,GAAG,8BAA8B,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAE7F,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,mBAAmB,CAAC;QAC9C,IAAI,EAAE,mBAAmB,CAAC,eAAe,CAAC;QAC1C,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC;QAChD,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC;QAChD,WAAW,EAAE,CAAC,SAAS,IAAI,cAAc;YACvC,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;YACzF,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,eAAe;AACf,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kCAAkC,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAEvG,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0B3C,MAAM,UAAU,eAAe,CAC7B,cAAiC,aAAa,CAAC,OAAO,EACtD,cAAmD,EACnD,OAAgC;IAEhC,MAAM,SAAS,GAAG,OAAO,cAAc,KAAK,QAAQ,CAAC;IAErD,MAAM,mBAAmB,GAAG,kCAAkC,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IACrG,MAAM,eAAe,GAAG,8BAA8B,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAE7F,OAAO;QACL,IAAI,EAAE,mBAAmB,CAAC,mBAAmB,CAAC;QAC9C,IAAI,EAAE,mBAAmB,CAAC,eAAe,CAAC;QAC1C,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC;QAChD,OAAO,EAAE,sBAAsB,CAAC,eAAe,CAAC;QAChD,WAAW,EAAE,CAAC,SAAS,IAAI,cAAc;YACvC,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC;YACzF,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,iBAAiB;AACjB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,eAAe;AACf,cAAc,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/jobs/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EACV,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/jobs/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EACV,aAAa,EAUd,MAAM,YAAY,CAAC;AAEpB,cAAc,YAAY,CAAC;AAU3B,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CA+DtE"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { errorFormatter } from '../../utils/errorFormatter.js';
|
|
2
2
|
export * from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds the optional request init that carries the `Idempotency-Key` header.
|
|
5
|
+
* Returns an empty object when no key is supplied so the request is unchanged.
|
|
6
|
+
*/
|
|
7
|
+
function idempotencyInit({ idempotencyKey } = {}) {
|
|
8
|
+
return idempotencyKey ? { headers: { 'Idempotency-Key': idempotencyKey } } : {};
|
|
9
|
+
}
|
|
3
10
|
export function createNosanaJobsApi(client) {
|
|
4
11
|
return {
|
|
5
12
|
async get(address) {
|
|
@@ -15,16 +22,17 @@ export function createNosanaJobsApi(client) {
|
|
|
15
22
|
}
|
|
16
23
|
return data;
|
|
17
24
|
},
|
|
18
|
-
async list(request) {
|
|
25
|
+
async list(request, options) {
|
|
19
26
|
const { data, error } = await client.POST('/api/jobs/list', {
|
|
20
27
|
body: request,
|
|
28
|
+
...idempotencyInit(options),
|
|
21
29
|
});
|
|
22
30
|
if (error || !data) {
|
|
23
31
|
throw errorFormatter('Failed to list job', error);
|
|
24
32
|
}
|
|
25
33
|
return data;
|
|
26
34
|
},
|
|
27
|
-
async extend({ address, ...request }) {
|
|
35
|
+
async extend({ address, ...request }, options) {
|
|
28
36
|
const { data, error } = await client.POST('/api/jobs/{address}/extend', {
|
|
29
37
|
params: {
|
|
30
38
|
path: {
|
|
@@ -32,19 +40,21 @@ export function createNosanaJobsApi(client) {
|
|
|
32
40
|
}
|
|
33
41
|
},
|
|
34
42
|
body: request,
|
|
43
|
+
...idempotencyInit(options),
|
|
35
44
|
});
|
|
36
45
|
if (error || !data) {
|
|
37
46
|
throw errorFormatter('Failed to extend job', error);
|
|
38
47
|
}
|
|
39
48
|
return data;
|
|
40
49
|
},
|
|
41
|
-
async stop(address) {
|
|
50
|
+
async stop(address, options) {
|
|
42
51
|
const { data, error } = await client.POST('/api/jobs/{address}/stop', {
|
|
43
52
|
params: {
|
|
44
53
|
path: {
|
|
45
54
|
address
|
|
46
55
|
}
|
|
47
56
|
},
|
|
57
|
+
...idempotencyInit(options),
|
|
48
58
|
});
|
|
49
59
|
if (error || !data) {
|
|
50
60
|
throw errorFormatter('Failed to stop job', error);
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAgB/D,cAAc,YAAY,CAAC;AAE3B;;;GAGG;AACH,SAAS,eAAe,CAAC,EAAE,cAAc,KAA6B,EAAE;IACtE,OAAO,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,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,EAAE,OAAgC;YAC3E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC1D,IAAI,EAAE,OAAO;gBACb,GAAG,eAAe,CAAC,OAAO,CAAC;aAC5B,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,EAAE,OAAgC;YAC/F,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;gBACb,GAAG,eAAe,CAAC,OAAO,CAAC;aAC5B,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,EAAE,OAAgC;YAC3E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACpE,MAAM,EAAE;oBACN,IAAI,EAAE;wBACJ,OAAO;qBACR;iBACF;gBACD,GAAG,eAAe,CAAC,OAAO,CAAC;aAC5B,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"}
|
|
@@ -7,10 +7,18 @@ export type NosanaApiListJobResponse = operations['postApiJobsList']['responses'
|
|
|
7
7
|
export type NosanaApiExtendJobResponse = operations['postApiJobsByAddressExtend']['responses'][200]['content']['application/json'];
|
|
8
8
|
export type NosanaApiStopJobResponse = operations['postApiJobsByAddressStop']['responses'][200]['content']['application/json'];
|
|
9
9
|
export type NosanaApiGetJobByAddressResponse = operations['getApiJobsByAddress']['responses'][200]['content']['application/json'];
|
|
10
|
+
export interface NosanaJobActionOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Optional idempotency key. When provided it is sent as the `Idempotency-Key`
|
|
13
|
+
* request header so the API can safely de-duplicate retried requests. The
|
|
14
|
+
* header is fully optional and omitting it leaves behaviour unchanged.
|
|
15
|
+
*/
|
|
16
|
+
idempotencyKey?: string;
|
|
17
|
+
}
|
|
10
18
|
export interface NosanaJobsApi {
|
|
11
19
|
get: (request: NosanaApiGetJobByAddressRequest) => Promise<NosanaApiGetJobByAddressResponse>;
|
|
12
|
-
list: (request: NosanaApiListJobRequest) => Promise<NosanaApiListJobResponse>;
|
|
13
|
-
extend: (request: NosanaApiExtendJobRequest) => Promise<NosanaApiExtendJobResponse>;
|
|
14
|
-
stop: (request: NosanaApiStopJobRequest) => Promise<NosanaApiStopJobResponse>;
|
|
20
|
+
list: (request: NosanaApiListJobRequest, options?: NosanaJobActionOptions) => Promise<NosanaApiListJobResponse>;
|
|
21
|
+
extend: (request: NosanaApiExtendJobRequest, options?: NosanaJobActionOptions) => Promise<NosanaApiExtendJobResponse>;
|
|
22
|
+
stop: (request: NosanaApiStopJobRequest, options?: NosanaJobActionOptions) => Promise<NosanaApiStopJobResponse>;
|
|
15
23
|
}
|
|
16
24
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/routes/jobs/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,MAAM,+BAA+B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AACjH,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAClH,MAAM,MAAM,yBAAyB,GACnC,UAAU,CAAC,4BAA4B,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GACtF,UAAU,CAAC,4BAA4B,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AAG9G,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACtH,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACnI,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC/H,MAAM,MAAM,gCAAgC,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAElI,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC7F,IAAI,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/routes/jobs/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,MAAM,+BAA+B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AACjH,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAClH,MAAM,MAAM,yBAAyB,GACnC,UAAU,CAAC,4BAA4B,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,GACtF,UAAU,CAAC,4BAA4B,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AAG9G,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACtH,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACnI,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,0BAA0B,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC/H,MAAM,MAAM,gCAAgC,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAElI,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,CAAC,OAAO,EAAE,+BAA+B,KAAK,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC7F,IAAI,EAAE,CAAC,OAAO,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAChH,MAAM,EAAE,CAAC,OAAO,EAAE,yBAAyB,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACtH,IAAI,EAAE,CAAC,OAAO,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACjH"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a unique idempotency key suitable for the optional `idempotencyKey`
|
|
3
|
+
* option on the jobs API (`list`, `extend`, `stop`).
|
|
4
|
+
*
|
|
5
|
+
* Reuse the returned value when retrying the *same* logical operation so the API
|
|
6
|
+
* can de-duplicate the retry. Generate a fresh key for each new operation — a
|
|
7
|
+
* different key per attempt provides no de-duplication.
|
|
8
|
+
*
|
|
9
|
+
* Uses the Web Crypto API, which is available in Node 20+ and modern browsers.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const key = generateIdempotencyKey();
|
|
13
|
+
* await api.jobs.list(request, { idempotencyKey: key });
|
|
14
|
+
* // ...later, retrying the SAME request:
|
|
15
|
+
* await api.jobs.list(request, { idempotencyKey: key }); // de-duplicated
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateIdempotencyKey(): string;
|
|
18
|
+
//# sourceMappingURL=idempotency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/utils/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a unique idempotency key suitable for the optional `idempotencyKey`
|
|
3
|
+
* option on the jobs API (`list`, `extend`, `stop`).
|
|
4
|
+
*
|
|
5
|
+
* Reuse the returned value when retrying the *same* logical operation so the API
|
|
6
|
+
* can de-duplicate the retry. Generate a fresh key for each new operation — a
|
|
7
|
+
* different key per attempt provides no de-duplication.
|
|
8
|
+
*
|
|
9
|
+
* Uses the Web Crypto API, which is available in Node 20+ and modern browsers.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* const key = generateIdempotencyKey();
|
|
13
|
+
* await api.jobs.list(request, { idempotencyKey: key });
|
|
14
|
+
* // ...later, retrying the SAME request:
|
|
15
|
+
* await api.jobs.list(request, { idempotencyKey: key }); // de-duplicated
|
|
16
|
+
*/
|
|
17
|
+
export function generateIdempotencyKey() {
|
|
18
|
+
return globalThis.crypto.randomUUID();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/utils/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nosana/api",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Nosana API module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"author": "Nosana",
|
|
9
9
|
"license": "MIT",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/nosana-ci/nosana-kit.git",
|
|
13
|
+
"directory": "packages/api"
|
|
14
|
+
},
|
|
10
15
|
"files": [
|
|
11
16
|
"dist"
|
|
12
17
|
],
|
|
@@ -36,16 +41,16 @@
|
|
|
36
41
|
"eslint-plugin-import": "^2.32.0",
|
|
37
42
|
"husky": "^9.1.7",
|
|
38
43
|
"openapi-typescript": "^7.8.0",
|
|
39
|
-
"typescript": "^5.
|
|
44
|
+
"typescript": "^5.9.3",
|
|
40
45
|
"vitest": "^4.0.3"
|
|
41
46
|
},
|
|
42
47
|
"dependencies": {
|
|
43
|
-
"@nosana/types": "2.
|
|
48
|
+
"@nosana/types": "2.3.1",
|
|
44
49
|
"openapi-fetch": "^0.14.0"
|
|
45
50
|
},
|
|
46
51
|
"packageManager": "pnpm@10.28.1",
|
|
47
52
|
"engines": {
|
|
48
53
|
"node": ">=20.18.0"
|
|
49
54
|
},
|
|
50
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "5b07b02e8e37562784ddb9302ecaba7921d992ef"
|
|
51
56
|
}
|