-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathcheck_cvm_is_allowed.ts
More file actions
50 lines (43 loc) · 1.76 KB
/
check_cvm_is_allowed.ts
File metadata and controls
50 lines (43 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { z } from "zod";
import { defineAction } from "../../utils/define-action";
import { CvmIdSchema, type CvmIdInput } from "../../types/cvm_id";
export const IsAllowedResultSchema = z.object({
cvm_id: z.number().optional(),
app_contract_address: z.string(),
compose_hash: z.string(),
device_id: z.string(),
compose_hash_allowed: z.boolean(),
allow_any_device: z.boolean(),
device_id_allowed: z.boolean().nullable().optional(),
is_allowed: z.boolean(),
error: z.string().nullable().optional(),
});
export type IsAllowedResult = z.infer<typeof IsAllowedResultSchema>;
const CheckCvmIsAllowedInputSchema = z.object({
cvmId: z.string().min(1),
compose_hash: z.string().optional(),
node_id: z.number().optional(),
device_id: z.string().optional(),
});
export const CheckCvmIsAllowedRequestSchema = CheckCvmIsAllowedInputSchema;
export type CheckCvmIsAllowedRequest = z.infer<typeof CheckCvmIsAllowedInputSchema>;
/**
* Check if a CVM deployment is allowed by its on-chain DStack App contract.
*
* @param client - The API client
* @param request - Request parameters
* @param request.cvmId - CVM identifier
* @param request.compose_hash - Optional compose hash override
* @param request.node_id - Optional node ID override (resolves device_id)
* @param request.device_id - Optional device ID override
* @returns On-chain allowance check result
*/
const { action: checkCvmIsAllowed, safeAction: safeCheckCvmIsAllowed } = defineAction<
CheckCvmIsAllowedRequest,
typeof IsAllowedResultSchema,
IsAllowedResult
>(IsAllowedResultSchema, async (client, request) => {
const { cvmId, ...body } = CheckCvmIsAllowedRequestSchema.parse(request);
return await client.post(`/cvms/${cvmId}/is-allowed`, body);
});
export { checkCvmIsAllowed, safeCheckCvmIsAllowed };