import { Coin, CoinSDKType } from "../../base/v1beta1/coin"; import { Timestamp } from "../../../google/protobuf/timestamp"; import { Duration, DurationSDKType } from "../../../google/protobuf/duration"; import { Any, AnySDKType } from "../../../google/protobuf/any"; import * as _m0 from "protobufjs/minimal"; import { toTimestamp, fromTimestamp, DeepPartial } from "../../../helpers"; /** * BasicAllowance implements Allowance with a one-time grant of coins * that optionally expires. The grantee can use up to SpendLimit to cover fees. */ export interface BasicAllowance { /** * spend_limit specifies the maximum amount of coins that can be spent * by this allowance and will be updated as coins are spent. If it is * empty, there is no spend limit and any amount of coins can be spent. */ spendLimit: Coin[]; /** expiration specifies an optional time when this allowance expires */ expiration?: Date; } /** * BasicAllowance implements Allowance with a one-time grant of coins * that optionally expires. The grantee can use up to SpendLimit to cover fees. */ export interface BasicAllowanceSDKType { spend_limit: CoinSDKType[]; expiration?: Date; } /** * PeriodicAllowance extends Allowance to allow for both a maximum cap, * as well as a limit per time period. */ export interface PeriodicAllowance { /** basic specifies a struct of `BasicAllowance` */ basic?: BasicAllowance; /** * period specifies the time duration in which period_spend_limit coins can * be spent before that allowance is reset */ period?: Duration; /** * period_spend_limit specifies the maximum number of coins that can be spent * in the period */ periodSpendLimit: Coin[]; /** period_can_spend is the number of coins left to be spent before the period_reset time */ periodCanSpend: Coin[]; /** * period_reset is the time at which this period resets and a new one begins, * it is calculated from the start time of the first transaction after the * last period ended */ periodReset?: Date; } /** * PeriodicAllowance extends Allowance to allow for both a maximum cap, * as well as a limit per time period. */ export interface PeriodicAllowanceSDKType { basic?: BasicAllowanceSDKType; period?: DurationSDKType; period_spend_limit: CoinSDKType[]; period_can_spend: CoinSDKType[]; period_reset?: Date; } /** AllowedMsgAllowance creates allowance only for specified message types. */ export interface AllowedMsgAllowance { /** allowance can be any of basic and periodic fee allowance. */ allowance?: Any; /** allowed_messages are the messages for which the grantee has the access. */ allowedMessages: string[]; } /** AllowedMsgAllowance creates allowance only for specified message types. */ export interface AllowedMsgAllowanceSDKType { allowance?: AnySDKType; allowed_messages: string[]; } /** Grant is stored in the KVStore to record a grant with full context */ export interface Grant { /** granter is the address of the user granting an allowance of their funds. */ granter: string; /** grantee is the address of the user being granted an allowance of another user's funds. */ grantee: string; /** allowance can be any of basic, periodic, allowed fee allowance. */ allowance?: Any; } /** Grant is stored in the KVStore to record a grant with full context */ export interface GrantSDKType { granter: string; grantee: string; allowance?: AnySDKType; } function createBaseBasicAllowance(): BasicAllowance { return { spendLimit: [], expiration: undefined }; } export const BasicAllowance = { encode(message: BasicAllowance, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { for (const v of message.spendLimit) { Coin.encode(v!, writer.uint32(10).fork()).ldelim(); } if (message.expiration !== undefined) { Timestamp.encode(toTimestamp(message.expiration), writer.uint32(18).fork()).ldelim(); } return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): BasicAllowance { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseBasicAllowance(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { case 1: message.spendLimit.push(Coin.decode(reader, reader.uint32())); break; case 2: message.expiration = fromTimestamp(Timestamp.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); break; } } return message; }, fromPartial(object: DeepPartial): BasicAllowance { const message = createBaseBasicAllowance(); message.spendLimit = object.spendLimit?.map(e => Coin.fromPartial(e)) || []; message.expiration = object.expiration ?? undefined; return message; } }; function createBasePeriodicAllowance(): PeriodicAllowance { return { basic: undefined, period: undefined, periodSpendLimit: [], periodCanSpend: [], periodReset: undefined }; } export const PeriodicAllowance = { encode(message: PeriodicAllowance, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { if (message.basic !== undefined) { BasicAllowance.encode(message.basic, writer.uint32(10).fork()).ldelim(); } if (message.period !== undefined) { Duration.encode(message.period, writer.uint32(18).fork()).ldelim(); } for (const v of message.periodSpendLimit) { Coin.encode(v!, writer.uint32(26).fork()).ldelim(); } for (const v of message.periodCanSpend) { Coin.encode(v!, writer.uint32(34).fork()).ldelim(); } if (message.periodReset !== undefined) { Timestamp.encode(toTimestamp(message.periodReset), writer.uint32(42).fork()).ldelim(); } return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): PeriodicAllowance { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBasePeriodicAllowance(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { case 1: message.basic = BasicAllowance.decode(reader, reader.uint32()); break; case 2: message.period = Duration.decode(reader, reader.uint32()); break; case 3: message.periodSpendLimit.push(Coin.decode(reader, reader.uint32())); break; case 4: message.periodCanSpend.push(Coin.decode(reader, reader.uint32())); break; case 5: message.periodReset = fromTimestamp(Timestamp.decode(reader, reader.uint32())); break; default: reader.skipType(tag & 7); break; } } return message; }, fromPartial(object: DeepPartial): PeriodicAllowance { const message = createBasePeriodicAllowance(); message.basic = object.basic !== undefined && object.basic !== null ? BasicAllowance.fromPartial(object.basic) : undefined; message.period = object.period !== undefined && object.period !== null ? Duration.fromPartial(object.period) : undefined; message.periodSpendLimit = object.periodSpendLimit?.map(e => Coin.fromPartial(e)) || []; message.periodCanSpend = object.periodCanSpend?.map(e => Coin.fromPartial(e)) || []; message.periodReset = object.periodReset ?? undefined; return message; } }; function createBaseAllowedMsgAllowance(): AllowedMsgAllowance { return { allowance: undefined, allowedMessages: [] }; } export const AllowedMsgAllowance = { encode(message: AllowedMsgAllowance, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { if (message.allowance !== undefined) { Any.encode(message.allowance, writer.uint32(10).fork()).ldelim(); } for (const v of message.allowedMessages) { writer.uint32(18).string(v!); } return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): AllowedMsgAllowance { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseAllowedMsgAllowance(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { case 1: message.allowance = Any.decode(reader, reader.uint32()); break; case 2: message.allowedMessages.push(reader.string()); break; default: reader.skipType(tag & 7); break; } } return message; }, fromPartial(object: DeepPartial): AllowedMsgAllowance { const message = createBaseAllowedMsgAllowance(); message.allowance = object.allowance !== undefined && object.allowance !== null ? Any.fromPartial(object.allowance) : undefined; message.allowedMessages = object.allowedMessages?.map(e => e) || []; return message; } }; function createBaseGrant(): Grant { return { granter: "", grantee: "", allowance: undefined }; } export const Grant = { encode(message: Grant, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { if (message.granter !== "") { writer.uint32(10).string(message.granter); } if (message.grantee !== "") { writer.uint32(18).string(message.grantee); } if (message.allowance !== undefined) { Any.encode(message.allowance, writer.uint32(26).fork()).ldelim(); } return writer; }, decode(input: _m0.Reader | Uint8Array, length?: number): Grant { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; const message = createBaseGrant(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { case 1: message.granter = reader.string(); break; case 2: message.grantee = reader.string(); break; case 3: message.allowance = Any.decode(reader, reader.uint32()); break; default: reader.skipType(tag & 7); break; } } return message; }, fromPartial(object: DeepPartial): Grant { const message = createBaseGrant(); message.granter = object.granter ?? ""; message.grantee = object.grantee ?? ""; message.allowance = object.allowance !== undefined && object.allowance !== null ? Any.fromPartial(object.allowance) : undefined; return message; } };