@aajsa/moyasar-client
Version:
A lightweight and type-safe TypeScript client for interacting with Moyasar Payment Gateway APIs.
175 lines (173 loc) • 5.8 kB
JavaScript
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
const require_common = require('./common.cjs');
const zod_v4_mini = require_rolldown_runtime.__toESM(require("zod/v4-mini"));
//#region src/schema/payout.ts
const PayoutAccountTypeEnum = zod_v4_mini.z.enum(["bank", "wallet"]);
const PayoutStatusEnum = zod_v4_mini.z.enum([
"queued",
"initiated",
"paid",
"failed",
"canceled",
"returned"
]);
const PayoutPurposeEnum = zod_v4_mini.z.enum([
"bills_or_rent",
"expenses_services",
"purchase_assets",
"saving_investment",
"government_dues",
"money_exchange",
"credit_card_loan",
"gift_or_reward",
"personal",
"investment_transaction",
"family_assistance",
"donation",
"payroll_benefits",
"online_purchase",
"hajj_and_umra",
"dividend_payment",
"government_payment",
"investment_house",
"payment_to_merchant",
"own_account_transfer"
]);
const PayoutChannelEnum = zod_v4_mini.z.enum([
"internal",
"ips",
"sarie"
]);
const PayoutResponseSchema = zod_v4_mini.z.object({
id: zod_v4_mini.z.uuid(),
source_id: zod_v4_mini.z.uuid(),
sequence_number: zod_v4_mini.z.string().check(zod_v4_mini.z.maxLength(16)),
channel: PayoutChannelEnum,
status: PayoutStatusEnum,
amount: zod_v4_mini.z.number(),
currency: zod_v4_mini.z.string().check(zod_v4_mini.z.length(3)),
purpose: PayoutPurposeEnum,
comment: zod_v4_mini.z.string(),
destination: zod_v4_mini.z.discriminatedUnion("type", [zod_v4_mini.z.object({
type: zod_v4_mini.z.literal("bank"),
iban: zod_v4_mini.z.string(),
name: zod_v4_mini.z.string(),
mobile: zod_v4_mini.z.string(),
country: zod_v4_mini.z.string(),
city: zod_v4_mini.z.string()
}), zod_v4_mini.z.object({
type: zod_v4_mini.z.literal("wallet"),
mobile: zod_v4_mini.z.string()
})]),
message: zod_v4_mini.z.string(),
failure_reason: zod_v4_mini.z.string(),
created_at: zod_v4_mini.z.string(),
updated_at: zod_v4_mini.z.string(),
metadata: zod_v4_mini.z.nullish(zod_v4_mini.z.record(zod_v4_mini.z.string(), zod_v4_mini.z.string()))
});
const PayoutAccountResponseSchema = zod_v4_mini.z.object({
id: zod_v4_mini.z.uuid(),
account_type: PayoutAccountTypeEnum,
currency: zod_v4_mini.z.string().check(zod_v4_mini.z.length(3)),
properties: zod_v4_mini.z.record(zod_v4_mini.z.string(), zod_v4_mini.z.string()),
created_at: zod_v4_mini.z.string()
});
const createPayoutSchema = zod_v4_mini.z.object({
source_id: zod_v4_mini.z.uuid(),
sequence_number: zod_v4_mini.z.optional(zod_v4_mini.z.string().check(zod_v4_mini.z.length(16))),
amount: zod_v4_mini.z.number().check(zod_v4_mini.z.positive()),
purpose: PayoutPurposeEnum,
destination: zod_v4_mini.z.discriminatedUnion("type", [zod_v4_mini.z.object({
type: zod_v4_mini.z.literal("bank"),
iban: zod_v4_mini.z.string(),
name: zod_v4_mini.z.string(),
mobile: zod_v4_mini.z.string(),
country: zod_v4_mini.z.string(),
city: zod_v4_mini.z.string()
}), zod_v4_mini.z.object({
type: zod_v4_mini.z.literal("wallet"),
mobile: zod_v4_mini.z.string()
})]),
comment: zod_v4_mini.z.optional(zod_v4_mini.z.string()),
metadata: zod_v4_mini.z.nullish(zod_v4_mini.z.record(zod_v4_mini.z.string(), zod_v4_mini.z.string()))
});
const createBulkPayoutsSchema = zod_v4_mini.z.object({
source_id: zod_v4_mini.z.uuid(),
payouts: zod_v4_mini.z.array(zod_v4_mini.z.object({
sequence_number: zod_v4_mini.z.optional(zod_v4_mini.z.string().check(zod_v4_mini.z.length(16))),
amount: zod_v4_mini.z.number().check(zod_v4_mini.z.positive()),
purpose: PayoutPurposeEnum,
destination: zod_v4_mini.z.discriminatedUnion("type", [zod_v4_mini.z.object({
type: zod_v4_mini.z.literal("bank"),
iban: zod_v4_mini.z.string(),
name: zod_v4_mini.z.string(),
mobile: zod_v4_mini.z.string(),
country: zod_v4_mini.z.string(),
city: zod_v4_mini.z.string()
}), zod_v4_mini.z.object({
type: zod_v4_mini.z.literal("wallet"),
mobile: zod_v4_mini.z.string()
})]),
comment: zod_v4_mini.z.optional(zod_v4_mini.z.string()),
metadata: zod_v4_mini.z.optional(zod_v4_mini.z.record(zod_v4_mini.z.string(), zod_v4_mini.z.string()))
}))
});
const payoutAccountEndpoint = {
getPayoutAccountId: {
path: "/payout_accounts/:id",
method: "GET",
params: require_common.paramPathIdSchema,
output: PayoutAccountResponseSchema
},
listPayoutAccounts: {
path: "/payout_accounts",
method: "GET",
query: zod_v4_mini.z.optional(zod_v4_mini.z.object({ page: zod_v4_mini.z.number() })),
output: zod_v4_mini.z.object({
payout_accounts: zod_v4_mini.z.nullish(zod_v4_mini.z.array(PayoutAccountResponseSchema)),
meta: require_common.MetaResponseSchema
})
},
createPayoutAccount: {
path: "/payout_accounts",
method: "POST",
input: zod_v4_mini.z.object({
account_type: PayoutAccountTypeEnum,
properties: zod_v4_mini.z.record(zod_v4_mini.z.string(), zod_v4_mini.z.string()),
credentials: zod_v4_mini.z.record(zod_v4_mini.z.string(), zod_v4_mini.z.string())
}),
output: PayoutAccountResponseSchema
}
};
const payoutsEndpoints = {
getPayoutId: {
path: "/payout/:id",
method: "GET",
params: require_common.paramPathIdSchema,
output: PayoutResponseSchema
},
listPayouts: {
path: "/payouts",
method: "GET",
query: zod_v4_mini.z.optional(zod_v4_mini.z.object({ page: zod_v4_mini.z.number() })),
output: zod_v4_mini.z.object({
payouts: zod_v4_mini.z.nullish(zod_v4_mini.z.array(PayoutResponseSchema)),
meta: require_common.MetaResponseSchema
})
},
createPayout: {
path: "/payouts",
method: "POST",
input: createPayoutSchema,
output: PayoutResponseSchema
},
createBulkPayout: {
path: "/payout/bulk",
method: "POST",
input: createBulkPayoutsSchema,
output: PayoutResponseSchema
}
};
//#endregion
exports.payoutAccountEndpoint = payoutAccountEndpoint;
exports.payoutsEndpoints = payoutsEndpoints;