Как сделать Shopify Admin API -вызов GraphQL с использованием сеанса в автономном режиме в обработчике действий REMIX FlJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать Shopify Admin API -вызов GraphQL с использованием сеанса в автономном режиме в обработчике действий REMIX Fl

Сообщение Anonymous »

Я строю приложение Shopify, используя шаблон ремиксов (

Код: Выделить всё

@shopify/shopify-app-remix
). У меня есть триггер действия, который необходимо сделать вызов GraphQL в API ADPI Shopify API из обработчика действий Backend, чтобы получить адрес электронной почты магазина (

Код: Выделить всё

shop { email }
).
Действие потока запускается правильно, и я могу аутентифицировать запрос с помощью shopify.authenticate.flow (request) . Я также могу успешно извлечь сеанс магазина в автономном режиме (который включает в себя AccessToken ) из моей базы данных Prisma с использованием SessionStorage , предоставленной библиотекой. /> Framework: Remix (используя шаблон приложения Shopify Remix) Действие function), возьмите электронную почту магазина, используя автономный токен.

Код: Выделить всё

shopify.server.js
config:

Код: Выделить всё

// app/shopify.server.js (relevant parts)
import "@shopify/shopify-app-remix/adapters/node";
import {
ApiVersion,
AppDistribution,
shopifyApp,
} from "@shopify/shopify-app-remix/server";
import { PrismaSessionStorage } from "@shopify/shopify-app-session-storage-prisma";
import prisma from "./db.server";

const shopify = shopifyApp({
apiKey: process.env.SHOPIFY_API_KEY,
apiSecretKey: process.env.SHOPIFY_API_SECRET || "",
apiVersion: ApiVersion.January25, // Or your version
scopes: process.env.SCOPES?.split(","), // Includes 'read_shop'
appUrl: process.env.SHOPIFY_APP_URL || "",
authPathPrefix: "/auth",
sessionStorage: new PrismaSessionStorage(prisma),
distribution: AppDistribution.AppStore,
future: {
unstable_newEmbeddedAuthStrategy: true,
removeRest: false, // Currently set to false for testing, but also failed with true
},
// ...
});

export default shopify;
export const authenticate = shopify.authenticate;
export const sessionStorage = shopify.sessionStorage;
// ...
< /code>
модель сеанса Prisma: < /p>
// prisma/schema.prisma
model Session {
id            String    @id
shop          String
state         String
isOnline      Boolean   @default(false)
scope         String?
expires       DateTime?
accessToken   String
userId        BigInt?
firstName     String?
lastName      String?
email         String?
accountOwner  Boolean?
locale        String?
collaborator  Boolean?
emailVerified Boolean?
}
< /code>
Проблема: < /p>
Внутри моего обработчика действий потока (app/routes/api.flow.action.send-email.jsx
), после успешного получения Shopdomain и извлечения офтезости с использованием SessionStorage.findsessionsbyshop (ShopDomain) , я не могу создать работающий клиент GraphQL.

Код: Выделить всё

// Inside the action function, after getting shopDomain and offlineSession

// Method 1: Standard path via shopify.api.clients
try {
const client = new shopify.api.clients.Graphql({ session: offlineSession });
// FAILED with: TypeError: Cannot read properties of undefined (reading 'clients')
} catch (e) { console.error("Method 1 Failed", e); }

// Method 2: Using shopify.admin (doesn't seem correct for offline)
try {
const adminContext = await shopify.admin({ session: offlineSession });
// FAILED with: TypeError: shopify.admin is not a function
} catch (e) { console.error("Method 2 Failed", e); }

// Method 3: Direct import of GraphqlClient (only session)
try {
// import { GraphqlClient } from "@shopify/shopify-api";
const client = new GraphqlClient({ session: offlineSession });
// FAILED with: TypeError: Cannot read properties of undefined (reading 'isCustomStoreApp')
} catch (e) { console.error("Method 3 Failed", e); }

// Method 4: Direct import + specific config from main shopify object
try {
// import { GraphqlClient } from "@shopify/shopify-api";
// import shopify, { apiVersion } from "../shopify.server";
const client = new GraphqlClient({
config: shopify.config, // Also tried passing specific props like apiVersion, hostName etc.
session: offlineSession
});
// FAILED with: TypeError: Cannot read properties of undefined (reading 'isCustomStoreApp' or 'hostName')
} catch (e) { console.error("Method 4 Failed", e); }

// Method 5: Using admin client from authenticate.flow context
// const flowContext = await shopify.authenticate.flow(request);
// if (flowContext && flowContext.admin &&  typeof flowContext.admin.graphql === 'function') {
//    const response = await flowContext.admin.graphql(SHOP_EMAIL_QUERY);
//    // FAILED with: 401 Unauthorized (suggests this client isn't using the correct offline token)
// }
Вопрос:
Какой правильный способ создания или получения аутентифицированного клиента API API Shopify Api GraphQL в пределах маршрута remix (например, обработчик действий потока), используя автономный токен сеанса, полученный из SessionStorage , особенно рассмотрение потенциального воздействия Removerest: True , если в настоящее время будет выдвинут в настоящее время, если в настоящее время будет выдвинут в настоящее время (даже будущий флаг (даже в будущем (даже будущий (даже будущий флаг (даже будущий (даже будущий) (даже если в настоящее время будет выдвинут в настоящее время? /> Я могу успешно сделать Shop {email} запрос с использованием инструмента Graphiql, предоставленного приложением Shopify Dev , что подтверждает автономный сеанс, а Read_shop обладает действием. Я просто не могу заставить клиента работать в коде обработки действий.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... mix-flow-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»