Skip to main content

Setup Extension on Fynd Partners

Expose your dev environment#

To complete OAuth authorization process (seller install approval) in Fynd Platform, your app would require a public https url. Since http://localhost:3000 isn't public; therefore, you may use ngrok to create a secure tunnel from public internet to the local server.

Run the below commands to install and run ngrok in a separate terminal.

npm install ngrok -gngrok http 3000

Note down and copy the public URL you get after running the above commands.

QG1

Figure 3: Copying ngrok Public URL


Get API_KEY and API_SECRET of your extension#

You need API Key and API Secret to authenticate your app on Fynd Platform. You can obtain the API credentials after creating an extension on Fynd Partners Panel.

If you don't have an account on Fynd Partners, click here to create one. You may read the documentation on creating a new Partner account.

Steps to get API credentials

  1. Log in to your Fynd Partners account, and go to the Extensions section.

    QG1

    Figure 2: Fynd Partner Panel

  1. Choose the Private option to create an extension.

    QG1

    Figure 3: Choosing Private Extension

  1. Fill all the necessary details. Check Private Extension to know more about the details.

  2. Next, click Create to save the configuration.

    QG1

    Figure 4: Saving The Configuration

  3. Click the extension you created.

    QG1

    Figure 5: Selecting Your Extension

  4. Note the API Key and API Secret. Ensure you don't reveal it to anyone.

    QG1

    Figure 6: API Credentials


Add your extension API_KEY and API_SECRET in your project#

Best practice is to store and access API credentials using environment variables. Do not commit it with your code. To achieve this, use a .env file and take help of the dotenv package to access (read) them in your project. Copy your api_key and api_secret from Fynd Partners Panel and paste them in the .env file as shown below.

.env
EXTENSION_API_KEY="your-api-key"EXTENSION_API_SECRET="your-api-secret"EXTENSION_URL="your-ngrok-url"

You may check the available guide to check how to integrate the credentials in your project.

QG1

Figure 7a: Clicking The Integration Guide

QG1

Figure 7b: Code For Integration


Setup an Express Extension FDK#

  1. Install the below library to set up an extension FDK.

    npm i dotenv axiosnpm i git+https://github.com/gofynd/fdk-client-javascript.git --savenpm i git+https://github.com/gofynd/fdk-extension-javascript.git#v0.2.1 --save 
  2. Initialize the fdk extension library as shown in the code below.

    note

    We have used MemoryStorage for a quick setup. However, for production-grade deployment, use RedisStorage.

    app/fdk/index.js
    const dotenv = require('dotenv');
    'use strict';
    const { setupFdk } = require("fdk-extension-javascript/express");const { MemoryStorage } = require("fdk-extension-javascript/express/storage");const extensionHandler = require("./extension.handler");const redis = require("./connections/redis");
    let fdkExtension = setupFdk({    api_key: process.env.EXTENSION_API_KEY,    api_secret: process.env.EXTENSION_API_SECRET,    base_url:  process.env.EXTENSION_URL,    scopes: ["company/product"],    callbacks: {        async  auth(req) => {            // Writee you code here to return initial launch url after suth process complete            return req.extension.base_url;        }
            async uninstall(req) => {            // Write your code here to cleanup data related to extension            // If task is time taking then process it async on other process.        }    },    storage: new MemoryStorage("prefix_key"),    access_mode: "offline",    // cluster: "https://api.fyndx0.de" // this is optional by default it points to prod.});
    module.exports = fdkExtension;
  1. Now attach this fdkExtension to the Express app server.

    app/server.js
    'use strict';
    const express = require('express');const cookieParser = require('cookie-parser');const bodyParser = require('body-parser');const path = require("path");const dotenv = require('dotenv');
    dotenv.config();
    const app = express();app.use(cookieParser("ext.session"));app.use(bodyParser.json({    limit: '2mb'}));
    app.use('/_healthz', (req, res, next) => {    res.json({        "ok": "ok"    });});
    app.use("/", fdkExtension.fdkHandler);
    app.use(express.static(path.join(__dirname, "./dist")));app.get('*', (req, res) => {    res.sendFile(path.join(__dirname, "./dist/index.html"));});
    module.exports = app;