private async loadSubscriptionKeys()

in src/components/operations/operation-details/ko/runtime/authorization.ts [398:475]


    private async loadSubscriptionKeys(selectFirstSubscription: boolean = false): Promise<void> {
        this.subscriptionsLoading(true);
        const userId = await this.usersService.getCurrentUserId();

        if (!userId) {
            return;
        }

        const subscriptionsQuery: SearchQuery = {
            pattern: this.subscriptionsPattern()
        };

        const pageOfProducts = await this.apiService.getAllApiProducts(`/apis/${this.api().id}`);
        const products = pageOfProducts || [];
        const allSubscriptions = await this.productService.getProductsAllSubscriptions(this.api().name, products, userId, subscriptionsQuery);
        const subscriptions = allSubscriptions.filter(subscription => subscription.state === SubscriptionState.active);
        const availableProducts = [];

        const productsSubscriptions = allSubscriptions.filter(subscription => !this.productService.isProductScope(subscription.scope, this.api().name));
        products.forEach(product => {
            const keys: SubscriptionOption[] = [];

            if (productsSubscriptions.length === 0) {
                return;
            }

            productsSubscriptions.forEach(subscription => {
                if (!this.productService.isProductScope(subscription.scope, product.name)) {
                    return;
                }

                keys.push({
                    name: `Primary: ${subscription.name?.trim() || subscription.primaryKey.substr(0, 4)}`,
                    value: subscription.primaryKey
                });

                keys.push({
                    name: `Secondary: ${subscription.name?.trim() || subscription.secondaryKey.substr(0, 4)}`,
                    value: subscription.secondaryKey
                });
            });

            if (keys.length > 0) {
                availableProducts.push({ name: product.displayName, subscriptionKeys: keys });
            }
        });

        const apiSubscriptions = allSubscriptions.filter(subscription => this.productService.isProductScope(subscription.scope, this.api().name));
        const apiKeys: SubscriptionOption[] = [];
        apiSubscriptions.forEach(subscription => {
            apiKeys.push({
                name: `Primary: ${subscription.name?.trim() || subscription.primaryKey.substr(0, 4)}`,
                value: subscription.primaryKey
            });

            apiKeys.push({
                name: `Secondary: ${subscription.name?.trim() || subscription.secondaryKey.substr(0, 4)}`,
                value: subscription.secondaryKey
            });
        });
        if(apiKeys.length > 0) {
            availableProducts.push({ name: "Apis", subscriptionKeys: apiKeys });
        }

        this.isSubscriptionListEmptyDueToFilter(availableProducts.length == 0 && this.subscriptionsPattern() !== undefined);
        this.products(availableProducts);
        this.subscriptionsLoading(false);

        if (subscriptions.length == 0) {
            return;
        }

        if (availableProducts.length > 0 && selectFirstSubscription) {
            const subscriptionKey = availableProducts[0].subscriptionKeys[0];
            this.selectedSubscriptionKey(subscriptionKey);
            this.applySubscriptionKey(subscriptionKey);
        }
    }