"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ROOT_BUNDLE_DISCRIMINATOR = void 0;
exports.getRootBundleDiscriminatorBytes = getRootBundleDiscriminatorBytes;
exports.getRootBundleEncoder = getRootBundleEncoder;
exports.getRootBundleDecoder = getRootBundleDecoder;
exports.getRootBundleCodec = getRootBundleCodec;
exports.decodeRootBundle = decodeRootBundle;
exports.fetchRootBundle = fetchRootBundle;
exports.fetchMaybeRootBundle = fetchMaybeRootBundle;
exports.fetchAllRootBundle = fetchAllRootBundle;
exports.fetchAllMaybeRootBundle = fetchAllMaybeRootBundle;
var tslib_1 = require("tslib");
var kit_1 = require("@solana/kit");
exports.ROOT_BUNDLE_DISCRIMINATOR = new Uint8Array([
    66, 221, 214, 231, 25, 222, 184, 219,
]);
function getRootBundleDiscriminatorBytes() {
    return (0, kit_1.fixEncoderSize)((0, kit_1.getBytesEncoder)(), 8).encode(exports.ROOT_BUNDLE_DISCRIMINATOR);
}
function getRootBundleEncoder() {
    return (0, kit_1.transformEncoder)((0, kit_1.getStructEncoder)([
        ["discriminator", (0, kit_1.fixEncoderSize)((0, kit_1.getBytesEncoder)(), 8)],
        ["relayerRefundRoot", (0, kit_1.fixEncoderSize)((0, kit_1.getBytesEncoder)(), 32)],
        ["slowRelayRoot", (0, kit_1.fixEncoderSize)((0, kit_1.getBytesEncoder)(), 32)],
        [
            "claimedBitmap",
            (0, kit_1.addEncoderSizePrefix)((0, kit_1.getBytesEncoder)(), (0, kit_1.getU32Encoder)()),
        ],
    ]), function (value) { return (tslib_1.__assign(tslib_1.__assign({}, value), { discriminator: exports.ROOT_BUNDLE_DISCRIMINATOR })); });
}
function getRootBundleDecoder() {
    return (0, kit_1.getStructDecoder)([
        ["discriminator", (0, kit_1.fixDecoderSize)((0, kit_1.getBytesDecoder)(), 8)],
        ["relayerRefundRoot", (0, kit_1.fixDecoderSize)((0, kit_1.getBytesDecoder)(), 32)],
        ["slowRelayRoot", (0, kit_1.fixDecoderSize)((0, kit_1.getBytesDecoder)(), 32)],
        ["claimedBitmap", (0, kit_1.addDecoderSizePrefix)((0, kit_1.getBytesDecoder)(), (0, kit_1.getU32Decoder)())],
    ]);
}
function getRootBundleCodec() {
    return (0, kit_1.combineCodec)(getRootBundleEncoder(), getRootBundleDecoder());
}
function decodeRootBundle(encodedAccount) {
    return (0, kit_1.decodeAccount)(encodedAccount, getRootBundleDecoder());
}
function fetchRootBundle(rpc, address, config) {
    return tslib_1.__awaiter(this, void 0, void 0, function () {
        var maybeAccount;
        return tslib_1.__generator(this, function (_a) {
            switch (_a.label) {
                case 0: return [4, fetchMaybeRootBundle(rpc, address, config)];
                case 1:
                    maybeAccount = _a.sent();
                    (0, kit_1.assertAccountExists)(maybeAccount);
                    return [2, maybeAccount];
            }
        });
    });
}
function fetchMaybeRootBundle(rpc, address, config) {
    return tslib_1.__awaiter(this, void 0, void 0, function () {
        var maybeAccount;
        return tslib_1.__generator(this, function (_a) {
            switch (_a.label) {
                case 0: return [4, (0, kit_1.fetchEncodedAccount)(rpc, address, config)];
                case 1:
                    maybeAccount = _a.sent();
                    return [2, decodeRootBundle(maybeAccount)];
            }
        });
    });
}
function fetchAllRootBundle(rpc, addresses, config) {
    return tslib_1.__awaiter(this, void 0, void 0, function () {
        var maybeAccounts;
        return tslib_1.__generator(this, function (_a) {
            switch (_a.label) {
                case 0: return [4, fetchAllMaybeRootBundle(rpc, addresses, config)];
                case 1:
                    maybeAccounts = _a.sent();
                    (0, kit_1.assertAccountsExist)(maybeAccounts);
                    return [2, maybeAccounts];
            }
        });
    });
}
function fetchAllMaybeRootBundle(rpc, addresses, config) {
    return tslib_1.__awaiter(this, void 0, void 0, function () {
        var maybeAccounts;
        return tslib_1.__generator(this, function (_a) {
            switch (_a.label) {
                case 0: return [4, (0, kit_1.fetchEncodedAccounts)(rpc, addresses, config)];
                case 1:
                    maybeAccounts = _a.sent();
                    return [2, maybeAccounts.map(function (maybeAccount) { return decodeRootBundle(maybeAccount); })];
            }
        });
    });
}
//# sourceMappingURL=rootBundle.js.map