-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathcheck_app_is_allowed.ts
More file actions
38 lines (34 loc) · 1.45 KB
/
check_app_is_allowed.ts
File metadata and controls
38 lines (34 loc) · 1.45 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
import { z } from "zod";
import { defineAction } from "../../utils/define-action";
import { IsAllowedResultSchema, type IsAllowedResult } from "../cvms/check_cvm_is_allowed";
export const CheckAppIsAllowedRequestSchema = z.object({
appId: z.string().min(1),
compose_hash: z.string(),
node_id: z.number().optional(),
device_id: z.string().optional(),
chain_id: z.number().optional(),
});
export type CheckAppIsAllowedRequest = z.infer<typeof CheckAppIsAllowedRequestSchema>;
/**
* Check if a deployment is allowed by an on-chain DStack App contract.
*
* Supports pure contract query (no DB) when all parameters including chain_id are provided.
*
* @param client - The API client
* @param request - Request parameters
* @param request.appId - App contract address
* @param request.compose_hash - Compose hash to check
* @param request.node_id - Node ID (resolves device_id from DB)
* @param request.device_id - Device ID (hex, direct)
* @param request.chain_id - Chain ID for RPC URL resolution
* @returns On-chain allowance check result
*/
const { action: checkAppIsAllowed, safeAction: safeCheckAppIsAllowed } = defineAction<
CheckAppIsAllowedRequest,
typeof IsAllowedResultSchema,
IsAllowedResult
>(IsAllowedResultSchema, async (client, request) => {
const { appId, ...body } = CheckAppIsAllowedRequestSchema.parse(request);
return await client.post(`/apps/${appId}/is-allowed`, body);
});
export { checkAppIsAllowed, safeCheckAppIsAllowed };