Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions src/api/info/_methods/outcomeTemplates.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import * as v from "@valibot/valibot";

// ============================================================
// API Schemas
// ============================================================

/**
* Request outcome templates.
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/hip-4-deployer-actions#read-api
*/
export const OutcomeTemplatesRequest = /* @__PURE__ */ (() => {
return v.object({
/** Type of request. */
type: v.literal("outcomeTemplates"),
});
})();
export type OutcomeTemplatesRequest = v.InferOutput<typeof OutcomeTemplatesRequest>;

/**
* Array of templates that outcome deployers instantiate.
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/hip-4-deployer-actions#read-api
*/
export type OutcomeTemplatesResponse = {
/** Template identifier. */
id: string;
/** Role of the template. */
role: {
/** Deploys a single outcome. */
standaloneOutcome: {
/** Names of the Yes and No sides. */
sideNames: [string, string];
};
};
/** Display name containing `{keyword}` placeholders. */
name: string;
/** Description containing `{keyword}` placeholders. */
description: string;
/**
* Keywords of the template and the value format of each:
* - `dateTime` = `%Y%m%d-%H%M`, within the next year; e.g. `20260712-1830`.
* - `date` = `YYYYMMDD` (end of day), within the next year; e.g. `20260712`.
* - `string` = free text.
* - `hlPerp` = coin name of an existing perp; e.g. `ABC` or `test:ABC`.
*/
keywords: [string, "dateTime" | "date" | "string" | "hlPerp"][];
}[];

// ============================================================
// Execution Logic
// ============================================================

import { parse } from "../../../_base.ts";
import type { InfoConfig } from "./_base/mod.ts";

/**
* Request outcome templates.
*
* @param config General configuration for Info API requests.
* @param signal {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal | AbortSignal} to cancel the request.
* @return Array of templates that outcome deployers instantiate.
*
* @throws {ValidationError} When the request parameters fail validation (before sending).
* @throws {TransportError} When the transport layer throws an error.
*
* @example
* ```ts
* import { HttpTransport } from "@nktkas/hyperliquid";
* import { outcomeTemplates } from "@nktkas/hyperliquid/api/info";
*
* const transport = new HttpTransport(); // or `WebSocketTransport`
*
* const data = await outcomeTemplates({ transport });
* ```
*
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/hip-4-deployer-actions#read-api
*/
export function outcomeTemplates(
config: InfoConfig,
signal?: AbortSignal,
): Promise<OutcomeTemplatesResponse> {
const request = parse(OutcomeTemplatesRequest, {
type: "outcomeTemplates",
});
return config.transport.request("info", request, signal);
}
29 changes: 29 additions & 0 deletions src/api/info/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ import {
import { openOrders, type OpenOrdersParameters, type OpenOrdersResponse } from "./_methods/openOrders.ts";
import { orderStatus, type OrderStatusParameters, type OrderStatusResponse } from "./_methods/orderStatus.ts";
import { outcomeMeta, type OutcomeMetaResponse } from "./_methods/outcomeMeta.ts";
import { outcomeTemplates, type OutcomeTemplatesResponse } from "./_methods/outcomeTemplates.ts";
import {
perpAnnotation,
type PerpAnnotationParameters,
Expand Down Expand Up @@ -1211,6 +1212,33 @@ export class InfoClient<C extends InfoConfig = InfoConfig> {
return outcomeMeta(this.config_, signal);
}

/**
* Request outcome templates.
*
* @param signal {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal | AbortSignal} to cancel the request.
* @return Array of templates that outcome deployers instantiate.
*
* @throws {ValidationError} When the request parameters fail validation (before sending).
* @throws {TransportError} When the transport layer throws an error.
*
* @example
* ```ts
* import * as hl from "@nktkas/hyperliquid";
*
* const transport = new hl.HttpTransport(); // or `WebSocketTransport`
* const client = new hl.InfoClient({ transport });
*
* const data = await client.outcomeTemplates();
* ```
*
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/hip-4-deployer-actions#read-api
*/
outcomeTemplates(
signal?: AbortSignal,
): Promise<OutcomeTemplatesResponse> {
return outcomeTemplates(this.config_, signal);
}

/**
* Request perp annotation.
*
Expand Down Expand Up @@ -2470,6 +2498,7 @@ export type { MetaAndAssetCtxsParameters, MetaAndAssetCtxsResponse } from "./_me
export type { OpenOrdersParameters, OpenOrdersResponse } from "./_methods/openOrders.ts";
export type { OrderStatusParameters, OrderStatusResponse } from "./_methods/orderStatus.ts";
export type { OutcomeMetaResponse } from "./_methods/outcomeMeta.ts";
export type { OutcomeTemplatesResponse } from "./_methods/outcomeTemplates.ts";
export type { PerpAnnotationParameters, PerpAnnotationResponse } from "./_methods/perpAnnotation.ts";
export type { PerpCategoriesResponse } from "./_methods/perpCategories.ts";
export type { PerpConciseAnnotationsResponse } from "./_methods/perpConciseAnnotations.ts";
Expand Down
1 change: 1 addition & 0 deletions src/api/info/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export * from "./_methods/metaAndAssetCtxs.ts";
export * from "./_methods/openOrders.ts";
export * from "./_methods/orderStatus.ts";
export * from "./_methods/outcomeMeta.ts";
export * from "./_methods/outcomeTemplates.ts";
export * from "./_methods/perpAnnotation.ts";
export * from "./_methods/perpCategories.ts";
export * from "./_methods/perpConciseAnnotations.ts";
Expand Down
17 changes: 17 additions & 0 deletions tests/api/info/outcomeTemplates.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { schemaCoverage } from "../_utils/schemaCoverage.ts";
import { typeToJsonSchema } from "../_utils/typeToJsonSchema.ts";
import { runTest } from "./_t.ts";

const sourceFile = new URL("../../../src/api/info/_methods/outcomeTemplates.ts", import.meta.url).pathname;
const responseSchema = typeToJsonSchema(sourceFile, "OutcomeTemplatesResponse");

runTest({
name: "outcomeTemplates",
codeTestFn: async (_t, client) => {
const data = await Promise.all([client.outcomeTemplates()]);

schemaCoverage(responseSchema, data, [
"#/items/properties/keywords/items/items/1/enum/1",
]);
},
});