private async interceptOAuthCards()

in templates/typescript/generator-bot-virtualassistant/generators/app/templates/sample-assistant/src/tokenExchange/tokenExchangeSkillHandler.ts [91:128]


    private async interceptOAuthCards(claimsIdentity: ClaimsIdentity, activity: Activity): Promise<boolean> {
        if (activity.attachments !== undefined) {
            let targetSkill: BotFrameworkSkill | undefined;
            activity.attachments.filter(a => a.contentType === this.oAuthCardContentType).forEach(async (attachment: Attachment) => {
                if (targetSkill === undefined) {
                    targetSkill = this.getCallingSkill(claimsIdentity);
                }

                if (targetSkill !== undefined) {
                    const oauthCard: OAuthCard = attachment.content;
                    
                    if (oauthCard !== undefined && oauthCard.tokenExchangeResource !== undefined &&
                        this.tokenExchangeConfig !== undefined && this.tokenExchangeConfig.provider !== undefined && this.tokenExchangeConfig.provider.trim().length > 0 &&
                        this.tokenExchangeConfig.provider === oauthCard.tokenExchangeResource.providerId) {
                        const context: TurnContext = new TurnContext(this.tokenExchangeSkillHandlerAdapter, activity);

                        context.turnState.set(this.tokenExchangeSkillHandlerAdapter.BotIdentityKey, claimsIdentity);

                        // AAD token exchange
                        const result = await this.tokenExchangeProvider.exchangeToken(
                            context,
                            this.tokenExchangeConfig.connectionName,
                            activity.recipient?.id,
                            { uri: oauthCard.tokenExchangeResource.uri });

                        if (result.token !== undefined && result.token.trim().length > 0){
                            // Send an Invoke back to the Skill
                            return await this.sendTokenExchangeInvokeToSkill(activity, oauthCard.tokenExchangeResource.id as string, result.token, oauthCard.connectionName, targetSkill);
                        }

                        return false;
                    }
                }
            });
        }
        
        return false;
    }