import common from "../../common/common.mjs";
import shopify from "../../shopify_partner.app.mjs";
import getAppRelationshipEventsBackwards from "../../common/queries/getAppRelationshipEventsBackwards.mjs";
import getAppRelationshipEventsForwards from "../../common/queries/getAppRelationshipEventsForwards.mjs";
export default {
key: "shopify_partner-new-app-relationship-events",
name: "New App Relationship Events",
type: "source",
version: "0.1.3",
description:
"Emit new events when new shops installs, uninstalls, subscribes or unsubscribes your app.",
...common,
props: {
...common.props,
db: "$.service.db",
appId: {
propDefinition: [
shopify,
"appId",
],
},
occurredAtMin: {
propDefinition: [
shopify,
"occurredAtMin",
],
},
occurredAtMax: {
propDefinition: [
shopify,
"occurredAtMax",
],
},
recordsPerRun: {
propDefinition: [
shopify,
"recordsPerRun",
],
},
paginationDirection: {
propDefinition: [
shopify,
"paginationDirection",
],
},
},
async run() {
const {
appId,
occurredAtMin,
occurredAtMax,
db,
paginationDirection,
recordsPerRun,
} = this;
const variables = {
appId: `gid://partners/App/${appId}`,
};
if (occurredAtMin) {
variables.occurredAtMin = occurredAtMin.trim();
}
if (occurredAtMax) {
variables.occurredAtMax = occurredAtMax.trim();
}
console.log("Querying events");
await this.shopify.query({
db,
key: "shopify_partner-relationship-events",
query:
this.paginationDirection === "backward" ||
!this.db.get("shopify_partner-relationship-events")
? getAppRelationshipEventsBackwards
: getAppRelationshipEventsForwards,
variables,
handleEmit: (data) => {
data.app.events.edges.map(({ node: { ...event } }) => {
this.$emit(event, {
id: event.occurredAt,
summary: `${event.shop.name} (${event.shop.myshopifyDomain}) installed ${event.app.name}`,
});
});
},
getCursor: (data) => {
const edges = data?.app?.events?.edges || [];
if (this.paginationDirection === "backward") {
const last = edges[edges.length - 1];
console.log("Last event in batch: ", last);
return last?.cursor;
} else {
const [
first,
] = edges;
console.log("First event in batch: ", first);
return first?.cursor;
}
},
hasNextPagePath:
this.paginationDirection === "forward" ||
!this.db.get("shopify_partner-relationship-events")
? "app.events.pageInfo.hasNextPage"
: "app.events.pageInfo.hasPreviousPage",
paginationDirection,
recordsPerRun,
});
},
};