@hashgraphonline/standards-sdk
Version:
The Hashgraph Online Standards SDK provides a complete implementation of the Hashgraph Consensus Standards (HCS), giving developers all the tools needed to build applications on Hedera.
75 lines (74 loc) • 2.41 kB
JavaScript
import { z } from "zod";
const HCS20_CONSTANTS = {
PROTOCOL: "hcs-20",
PUBLIC_TOPIC_ID: "0.0.4350190",
REGISTRY_TOPIC_ID: "0.0.4362300",
MAX_NUMBER_LENGTH: 18,
MAX_NAME_LENGTH: 100,
MAX_METADATA_LENGTH: 100,
HEDERA_ACCOUNT_REGEX: /^(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))\.(0|(?:[1-9]\d*))$/
};
const HederaAccountIdSchema = z.string().regex(
HCS20_CONSTANTS.HEDERA_ACCOUNT_REGEX,
"Invalid Hedera account ID format"
);
const NumberStringSchema = z.string().regex(/^\d+$/, "Must be a valid number").max(
HCS20_CONSTANTS.MAX_NUMBER_LENGTH,
`Max ${HCS20_CONSTANTS.MAX_NUMBER_LENGTH} digits`
);
const TickSchema = z.string().min(1, "Tick cannot be empty").transform((val) => val.toLowerCase().trim());
const HCS20BaseMessageSchema = z.object({
p: z.literal("hcs-20"),
m: z.string().optional()
});
const HCS20DeployMessageSchema = HCS20BaseMessageSchema.extend({
op: z.literal("deploy"),
name: z.string().min(1).max(HCS20_CONSTANTS.MAX_NAME_LENGTH),
tick: TickSchema,
max: NumberStringSchema,
lim: NumberStringSchema.optional(),
metadata: z.string().max(HCS20_CONSTANTS.MAX_METADATA_LENGTH).optional()
});
const HCS20MintMessageSchema = HCS20BaseMessageSchema.extend({
op: z.literal("mint"),
tick: TickSchema,
amt: NumberStringSchema,
to: HederaAccountIdSchema
});
const HCS20BurnMessageSchema = HCS20BaseMessageSchema.extend({
op: z.literal("burn"),
tick: TickSchema,
amt: NumberStringSchema,
from: HederaAccountIdSchema
});
const HCS20TransferMessageSchema = HCS20BaseMessageSchema.extend({
op: z.literal("transfer"),
tick: TickSchema,
amt: NumberStringSchema,
from: HederaAccountIdSchema,
to: HederaAccountIdSchema
});
const HCS20RegisterMessageSchema = HCS20BaseMessageSchema.extend({
op: z.literal("register"),
name: z.string().min(1).max(HCS20_CONSTANTS.MAX_NAME_LENGTH),
metadata: z.string().max(HCS20_CONSTANTS.MAX_METADATA_LENGTH).optional(),
private: z.boolean(),
t_id: HederaAccountIdSchema
});
const HCS20MessageSchema = z.discriminatedUnion("op", [
HCS20DeployMessageSchema,
HCS20MintMessageSchema,
HCS20BurnMessageSchema,
HCS20TransferMessageSchema,
HCS20RegisterMessageSchema
]);
export {
HCS20BurnMessageSchema,
HCS20DeployMessageSchema,
HCS20MessageSchema,
HCS20MintMessageSchema,
HCS20RegisterMessageSchema,
HCS20TransferMessageSchema,
HCS20_CONSTANTS
};
//# sourceMappingURL=standards-sdk.es16.js.map