UNPKG

@shopify/shopify-api

Version:

Shopify API Library for Node - accelerate development with support for authentication, graphql proxy, webhooks

1 lines 3.36 kB
{"version":3,"file":"migrate-to-expiring-token.mjs","sources":["../../../../../../../lib/auth/oauth/migrate-to-expiring-token.ts"],"sourcesContent":["import {ConfigInterface} from '../../base-types';\nimport {throwFailedRequest} from '../../clients/common';\nimport {DataType} from '../../clients/types';\nimport {Session} from '../../session/session';\nimport {fetchRequestFactory} from '../../utils/fetch-request';\nimport {sanitizeShop} from '../../utils/shop-validator';\n\nimport {createSession} from './create-session';\nimport {RequestedTokenType} from './token-exchange';\nimport {AccessTokenResponse} from './types';\n\nconst TokenExchangeGrantType =\n 'urn:ietf:params:oauth:grant-type:token-exchange';\n\nexport interface MigrateToExpiringTokenParams {\n shop: string;\n nonExpiringOfflineAccessToken: string;\n}\n\nexport type MigrateToExpiringToken = (\n params: MigrateToExpiringTokenParams,\n) => Promise<{session: Session}>;\n\nexport function migrateToExpiringToken(\n config: ConfigInterface,\n): MigrateToExpiringToken {\n return async ({\n shop,\n nonExpiringOfflineAccessToken,\n }: MigrateToExpiringTokenParams) => {\n const body = {\n client_id: config.apiKey,\n client_secret: config.apiSecretKey,\n grant_type: TokenExchangeGrantType,\n subject_token: nonExpiringOfflineAccessToken,\n subject_token_type: RequestedTokenType.OfflineAccessToken,\n requested_token_type: RequestedTokenType.OfflineAccessToken,\n expiring: '1',\n };\n\n const cleanShop = sanitizeShop(config)(shop, true)!;\n\n const postResponse = await fetchRequestFactory(config)(\n `https://${cleanShop}/admin/oauth/access_token`,\n {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': DataType.JSON,\n Accept: DataType.JSON,\n },\n },\n );\n\n if (!postResponse.ok) {\n throwFailedRequest(await postResponse.json(), false, postResponse);\n }\n\n return {\n session: createSession({\n accessTokenResponse: await postResponse.json<AccessTokenResponse>(),\n shop: cleanShop,\n // We need to keep this as an empty string as our template DB schemas have this required\n state: '',\n config,\n }),\n };\n };\n}\n"],"names":[],"mappings":";;;;;;;AAWA,MAAM,sBAAsB,GAC1B,iDAAiD;AAW7C,SAAU,sBAAsB,CACpC,MAAuB,EAAA;IAEvB,OAAO,OAAO,EACZ,IAAI,EACJ,6BAA6B,GACA,KAAI;AACjC,QAAA,MAAM,IAAI,GAAG;YACX,SAAS,EAAE,MAAM,CAAC,MAAM;YACxB,aAAa,EAAE,MAAM,CAAC,YAAY;AAClC,YAAA,UAAU,EAAE,sBAAsB;AAClC,YAAA,aAAa,EAAE,6BAA6B;YAC5C,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB;YACzD,oBAAoB,EAAE,kBAAkB,CAAC,kBAAkB;AAC3D,YAAA,QAAQ,EAAE,GAAG;SACd;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,CAAE;QAEnD,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CACpD,CAAA,QAAA,EAAW,SAAS,CAAA,yBAAA,CAA2B,EAC/C;AACE,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1B,YAAA,OAAO,EAAE;gBACP,cAAc,EAAE,QAAQ,CAAC,IAAI;gBAC7B,MAAM,EAAE,QAAQ,CAAC,IAAI;AACtB,aAAA;AACF,SAAA,CACF;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE;YACpB,kBAAkB,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC;QACpE;QAEA,OAAO;YACL,OAAO,EAAE,aAAa,CAAC;AACrB,gBAAA,mBAAmB,EAAE,MAAM,YAAY,CAAC,IAAI,EAAuB;AACnE,gBAAA,IAAI,EAAE,SAAS;;AAEf,gBAAA,KAAK,EAAE,EAAE;gBACT,MAAM;aACP,CAAC;SACH;AACH,IAAA,CAAC;AACH;;;;"}