mirror of
https://github.com/vercel/commerce.git
synced 2025-04-25 04:17:51 +00:00
* Icky 161 folder and env setup (#1) * folder and env setup * codegen.json headers removed Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> * Feature/icky 194 (#5) * folder and env setup * codegen.json headers removed * use-cart code flow updated * use-cart code flow updated * Implemented get-cart functionality * removed unused file * getAnonymousShopperToken function added * normalization mapping updated * PR points resolved * Anonymous shopper token query added * getAnonymousShopperToken function added * Anonymous shopper token query added Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> * Icky 175 (#3) * folder and env setup * codegen.json headers removed * icky-175-get-site-info * PR comments resolved * update category Id Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> * Icky-169-LogIn (#4) * Update README.md * Initial Commit * Commited Keys * GraphQL Changes * GraphQL Query * Final Changes * Changed login.ts * Made changes in login.ts * Final Changes * Refactored login.ts * SignUp Initial Checkin * logout Initial * Customer Account Initial Commit * Logout - deleted cookie * Reverted ReadMe and UserNav file * Final Changes * Resolved comments * Resolved comments 1 * Resolved comments 2 * Resolved comments 3 * Resolved comments 4 Co-authored-by: SushantJadhav <Sushant.Jadhav@kibocommerce.com> * ICKY-166-getProducts-and-getProduct (#6) * GetProduct Initial Commit * Passed productCode as Slug to get-product * Moved currencyCode in Config file * Icky 173 (#9) * Initial commit related to getAllPages * Initial Changes * Making documentListName configurable * fixing dynamic page rendering and adding typescript code Co-authored-by: amolnadagonde <amol.nadagonde@kibocommerce.com> Co-authored-by: kibo-sushant <sushant.jadhav@blueconchtech.com> * Feature/icky 176 (#8) * GetProduct Initial Commit * addItemToCart function implemneted * Add Item to cart functionality implemented * ICKY-166-getProducts-and-getProduct (#6) * GetProduct Initial Commit * Passed productCode as Slug to get-product * Moved currencyCode in Config file * Icky 173 (#9) * Initial commit related to getAllPages * Initial Changes * Making documentListName configurable * fixing dynamic page rendering and adding typescript code Co-authored-by: amolnadagonde <amol.nadagonde@kibocommerce.com> Co-authored-by: kibo-sushant <sushant.jadhav@blueconchtech.com> * addItemToCart function implemneted Conflicts resolved * Add Item to cart functionality implemented * booleans removed from query * cart size option enabled * updated addItem for with and without variants products Co-authored-by: kibo-sushant <sushant.jadhav@blueconchtech.com> Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> Co-authored-by: kibo-sushant <89385472+kibo-sushant@users.noreply.github.com> Co-authored-by: kibo-kevinwatts <85258296+kibo-kevinwatts@users.noreply.github.com> Co-authored-by: amolnadagonde <amol.nadagonde@kibocommerce.com> * Removed types from schema.d.ts (#11) * Final Changes (#16) * Icky 177 (#13) * addItemToCart function implemneted Conflicts resolved * Add Item to cart functionality implemented * remove Item from cart implemented * removed unused code Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> * Icky 178 - Update Cart Quantity implemented (#14) * update cart quantity implemented * add item to cart bug fixed Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> * Icky 182 (#12) * initial commit * useSearch hook * remove extra spaces * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * initial commit * useSearch hook * remove extra spaces * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * changes in product-search-vars * remove unwanted boolean * Feature/icky 179 (#17) * initial commit * useSearch hook * remove extra spaces * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * initial commit * useSearch hook * remove extra spaces * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * changes in product-search-vars * remove unwanted boolean * initial commit * updated Provider * usewishlist/getwishlist * changes in provider.ts * initial commit * useSearch hook * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * initial commit * useSearch hook * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * initial commit * usewishlist/getwishlist * updated Provider * changes in provider.ts * normalize wishlistitem * changes in get-customer-account * remove unwanted code * resolve empty wishlist case * resolve pr comments Co-authored-by: kibo-sushant <sushant.jadhav@blueconchtech.com> * token encoding and decoding fixed (#19) Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> * Feature/icky- 180 & 181 (#20) * initial commit * useSearch hook * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * initial commit * useSearch hook * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * usewishlist/getwishlist * changes in provider.ts * changes in get-customer-account * initial commit * useSearch hook * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * initial commit * useSearch hook * revert pages and component changes * remove extra spacing in search.tsx * changes in catalog/products and product-search-vars * usewishlist/getwishlist * changes in provider.ts * remove unwanted code * initial commit * resolve pr comments * changes in add-item * remove wishlist fragment * remove item from wishlist * changes in normalize.ts * changes in additemtowishlist mutation * resove pr comments * Feature/icky 291 (#22) * Kibo API authentication helper handling oauth token generation / refresh and making auth ticket available to process via next server runtime config * Update .env template with placeholder for Kibo Auth Url * resolve ICKY-275 (#24) * Fix/icky 276 (#21) * remove Item from cart implemented * update cart quantity implemented * removed unused code * ICKY 176 and 263 implemented * ICKY 263 removed * PR points resolved Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> * ICKY-263 (#23) * ICKY-263 * resolve pr comments * resolve pr comments for customer typescript * docs: update kibo commerce readme with env details (#26) * resolve icky-264 (#25) * chore: remove extra field from .env.template * chore: remove extra .vscode launch json file * chore: cleanup test message from kibocommerce fork * chore(docs): remove extra field from .env template and .env related docs * chore: remove test data json file * chore: delete yarn.lock * refactor: remove unused fetch from kibo config, remove unused CommerceProvider * refactor: rename queries and util modules for consistency * chore: add checkout related api noop handlers and hooks * chore: revert modified core files * chore(config): add kibo production sandbox cdn to image domains config * fix: page normalizer and query for static pages * chore: remove commented code and unnecessary imports * fix(module paths): switch framework alias for relative path Co-authored-by: kibo-chandradeeptalaha <89371824+kibo-chandradeeptalaha@users.noreply.github.com> Co-authored-by: Chandradeepta <43542673+Chandradeepta@users.noreply.github.com> Co-authored-by: kibo-geetanshuchhabra <89399259+kibo-geetanshuchhabra@users.noreply.github.com> Co-authored-by: kibo-sushant <89385472+kibo-sushant@users.noreply.github.com> Co-authored-by: SushantJadhav <Sushant.Jadhav@kibocommerce.com> Co-authored-by: amolnadagonde <amol.nadagonde@kibocommerce.com> Co-authored-by: kibo-sushant <sushant.jadhav@blueconchtech.com> Co-authored-by: kibo-amolnadagonde <75060520+kibo-amolnadagonde@users.noreply.github.com>
111 lines
3.3 KiB
TypeScript
111 lines
3.3 KiB
TypeScript
import getNextConfig from 'next/config'
|
|
import type { KiboCommerceConfig } from '../index'
|
|
import type { FetchOptions } from '@vercel/fetch'
|
|
import fetch from './fetch'
|
|
|
|
interface AppAuthTicket {
|
|
access_token: string
|
|
token_type: string
|
|
expires_in: number
|
|
expires_at: number
|
|
refresh_token: string | null
|
|
}
|
|
|
|
interface AuthTicketCache {
|
|
getAuthTicket: () => Promise<AppAuthTicket>
|
|
setAuthTicket: (kiboAuthTicket: AppAuthTicket) => void
|
|
}
|
|
|
|
class RuntimeMemCache implements AuthTicketCache {
|
|
constructor() {}
|
|
async getAuthTicket() {
|
|
const { serverRuntimeConfig } = getNextConfig()
|
|
return serverRuntimeConfig.kiboAuthTicket
|
|
}
|
|
setAuthTicket(kiboAuthTicket: AppAuthTicket) {
|
|
const { serverRuntimeConfig } = getNextConfig()
|
|
serverRuntimeConfig.kiboAuthTicket = kiboAuthTicket
|
|
}
|
|
}
|
|
|
|
export class APIAuthenticationHelper {
|
|
private _clientId: string
|
|
private _sharedSecret: string
|
|
private _authUrl: string
|
|
private _authTicketCache!: AuthTicketCache
|
|
|
|
constructor(
|
|
{ clientId = '', sharedSecret = '', authUrl = '' }: KiboCommerceConfig,
|
|
authTicketCache?: AuthTicketCache
|
|
) {
|
|
this._clientId = clientId
|
|
this._sharedSecret = sharedSecret
|
|
this._authUrl = authUrl
|
|
if(!authTicketCache) {
|
|
this._authTicketCache = new RuntimeMemCache();
|
|
}
|
|
}
|
|
private _buildFetchOptions(body: any = {}): FetchOptions {
|
|
return {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify(body),
|
|
}
|
|
}
|
|
private _calculateTicketExpiration(kiboAuthTicket: AppAuthTicket) {
|
|
//calculate how many milliseconds until auth expires
|
|
const millisecsUntilExpiration = kiboAuthTicket.expires_in * 1000
|
|
kiboAuthTicket.expires_at = Date.now() + millisecsUntilExpiration
|
|
|
|
return kiboAuthTicket
|
|
}
|
|
public async authenticate(): Promise<AppAuthTicket> {
|
|
// create oauth fetch options
|
|
const options = this._buildFetchOptions({
|
|
client_id: this._clientId,
|
|
client_secret: this._sharedSecret,
|
|
grant_type: 'client_credentials',
|
|
})
|
|
// perform authentication
|
|
const authTicket = await fetch(
|
|
`${this._authUrl}/api/platform/applications/authtickets/oauth`,
|
|
options
|
|
).then((response) => response.json())
|
|
// set expiration time in ms on auth ticket
|
|
this._calculateTicketExpiration(authTicket)
|
|
// set authentication ticket on next server runtime object
|
|
this._authTicketCache.setAuthTicket(authTicket)
|
|
|
|
return authTicket
|
|
}
|
|
public async refreshTicket(kiboAuthTicket: AppAuthTicket) {
|
|
// create oauth refresh fetch options
|
|
const options = this._buildFetchOptions({
|
|
refreshToken: kiboAuthTicket?.refresh_token,
|
|
})
|
|
// perform auth ticket refresh
|
|
const refreshedTicket = await fetch(
|
|
`${this._authUrl}/api/platform/applications/authtickets/refresh-ticket`,
|
|
options
|
|
).then((response) => response.json())
|
|
|
|
return refreshedTicket
|
|
}
|
|
public async getAccessToken(): Promise<string> {
|
|
// get current Kibo API auth ticket
|
|
let authTicket = await this._authTicketCache.getAuthTicket()
|
|
|
|
// if no current ticket, perform auth
|
|
// or if ticket expired, refresh auth
|
|
if (!authTicket) {
|
|
authTicket = await this.authenticate()
|
|
} else if (authTicket.expires_at < Date.now()) {
|
|
authTicket = await this.refreshTicket(authTicket)
|
|
}
|
|
|
|
return authTicket.access_token
|
|
}
|
|
}
|