@useairfoil/producer-shopify 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +85 -248
- package/dist/index.d.mts +6993 -0
- package/dist/index.mjs +3 -0
- package/dist/main.d.mts +1 -0
- package/dist/main.mjs +698 -0
- package/dist/main.mjs.map +1 -0
- package/dist/manifest.d.mts +32 -0
- package/dist/manifest.mjs +51 -0
- package/dist/manifest.mjs.map +1 -0
- package/dist/{chunk-Bp6m_JJh.js → rolldown-runtime-D7D4PA-g.mjs} +4 -4
- package/dist/src-Bgvuhcfk.mjs +2473 -0
- package/dist/src-Bgvuhcfk.mjs.map +1 -0
- package/package.json +19 -19
- package/src/{auth.ts → api/auth.ts} +15 -35
- package/src/api/client.ts +429 -0
- package/src/api/graphql.ts +221 -0
- package/src/api/http.ts +25 -0
- package/src/connector.ts +266 -163
- package/src/create-table.ts +5 -0
- package/src/demo/customers.ts +412 -0
- package/src/demo/index.ts +31 -0
- package/src/demo/setup.ts +63 -0
- package/src/demo/shared.ts +114 -0
- package/src/index.ts +35 -21
- package/src/main.ts +8 -8
- package/src/manifest.ts +4 -55
- package/src/resources/carts/row.ts +58 -0
- package/src/resources/carts/webhook.ts +98 -0
- package/src/resources/customers/graphql.ts +175 -0
- package/src/resources/customers/row.ts +112 -0
- package/src/resources/customers/webhook.ts +30 -0
- package/src/resources/orders/graphql.ts +419 -0
- package/src/resources/orders/row.ts +180 -0
- package/src/resources/orders/webhook.ts +248 -0
- package/src/resources/products/graphql.ts +142 -0
- package/src/resources/products/row.ts +92 -0
- package/src/resources/products/webhook.ts +130 -0
- package/src/resources/refunds/graphql.ts +196 -0
- package/src/resources/refunds/row.ts +97 -0
- package/src/resources/refunds/webhook.ts +123 -0
- package/src/resources/shared.ts +293 -0
- package/src/sandbox.ts +3 -3
- package/src/start.ts +3 -5
- package/src/tables.ts +15 -0
- package/dist/index.d.ts +0 -965
- package/dist/index.js +0 -4
- package/dist/main.d.ts +0 -1
- package/dist/main.js +0 -49
- package/dist/main.js.map +0 -1
- package/dist/manifest-BFfx2LkS.js +0 -91
- package/dist/manifest-BFfx2LkS.js.map +0 -1
- package/dist/manifest-CPOEExQU.d.ts +0 -34
- package/dist/manifest.d.ts +0 -2
- package/dist/manifest.js +0 -3
- package/dist/src-DqmiLrYS.js +0 -984
- package/dist/src-DqmiLrYS.js.map +0 -1
- package/src/api.ts +0 -636
- package/src/schemas.ts +0 -319
- package/src/throttle.ts +0 -89
- package/src/transient-retry.ts +0 -74
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-Bgvuhcfk.mjs","names":["Schema","Schema","Schema","Schema","Schema","Schema","Schema","Schema","Schema","Schema","Schema","make","layer","make","ShopifyAuth.ShopifyAuth","ShopifyAuth.shopUrl","make","ShopifyGraphQL.make","layer","layerConfig","Schema","Schema","Schema","Schema","ShopifyApiClient.ShopifyApiClient","ShopifyAuth.layer","ShopifyApiClient.layer"],"sources":["../src/resources/shared.ts","../src/resources/carts/webhook.ts","../src/resources/products/row.ts","../src/resources/products/webhook.ts","../src/resources/customers/row.ts","../src/resources/customers/graphql.ts","../src/resources/orders/row.ts","../src/resources/orders/graphql.ts","../src/resources/products/graphql.ts","../src/resources/refunds/row.ts","../src/resources/refunds/graphql.ts","../src/api/auth.ts","../src/api/http.ts","../src/api/graphql.ts","../src/api/client.ts","../src/resources/carts/row.ts","../src/resources/customers/webhook.ts","../src/resources/orders/webhook.ts","../src/resources/refunds/webhook.ts","../src/connector.ts","../src/index.ts"],"sourcesContent":["import { Iceberg } from \"@useairfoil/connector-kit\";\nimport { SchemaTransformation } from \"effect\";\nimport * as Schema from \"effect/Schema\";\n\nexport const field = (fieldId: number, description: string) =>\n Iceberg.field(fieldId, { description });\n\nexport const PageInfoSchema = Schema.Struct({\n hasNextPage: Schema.Boolean,\n endCursor: Schema.NullOr(Schema.String),\n});\n\nexport const gid = (type: string, id: number | string): string => `gid://shopify/${type}/${id}`;\n\nexport const normalizeAmount = (amount: string): string =>\n amount.includes(\".\") ? amount.replace(/0+$/, \"\").replace(/\\.$/, \"\") : amount;\n\nexport const emptyText = (value: string | null): string => value ?? \"\";\n\nexport const splitTags = (value: string): ReadonlyArray<string> =>\n value\n .split(\",\")\n .map((tag) => tag.trim())\n .filter((tag) => tag.length > 0);\n\n// Each row helper takes the first field ID of its block.\n\nexport const moneyBag = (baseId: number) =>\n Schema.Struct({\n shopMoney: Schema.Struct({\n amount: Schema.String.pipe(field(baseId + 3, \"Amount in the shop currency.\")),\n currencyCode: Schema.String.pipe(field(baseId + 4, \"Shop currency code.\")),\n }).pipe(field(baseId + 1, \"Amount in the shop currency.\")),\n presentmentMoney: Schema.Struct({\n amount: Schema.String.pipe(field(baseId + 5, \"Amount in the customer currency.\")),\n currencyCode: Schema.String.pipe(field(baseId + 6, \"Customer currency code.\")),\n }).pipe(field(baseId + 2, \"Amount in the customer currency.\")),\n });\n\nexport const address = (baseId: number) =>\n Schema.Struct({\n firstName: Schema.NullOr(Schema.String).pipe(field(baseId + 1, \"First name.\")),\n lastName: Schema.NullOr(Schema.String).pipe(field(baseId + 2, \"Last name.\")),\n name: Schema.NullOr(Schema.String).pipe(field(baseId + 3, \"Full name.\")),\n company: Schema.NullOr(Schema.String).pipe(field(baseId + 4, \"Company name.\")),\n address1: Schema.NullOr(Schema.String).pipe(field(baseId + 5, \"First address line.\")),\n address2: Schema.NullOr(Schema.String).pipe(field(baseId + 6, \"Second address line.\")),\n city: Schema.NullOr(Schema.String).pipe(field(baseId + 7, \"City.\")),\n province: Schema.NullOr(Schema.String).pipe(field(baseId + 8, \"Province or state.\")),\n provinceCode: Schema.NullOr(Schema.String).pipe(field(baseId + 9, \"Province or state code.\")),\n country: Schema.NullOr(Schema.String).pipe(field(baseId + 10, \"Country.\")),\n countryCode: Schema.NullOr(Schema.String).pipe(field(baseId + 11, \"Two-letter country code.\")),\n zip: Schema.NullOr(Schema.String).pipe(field(baseId + 12, \"Postal code.\")),\n phone: Schema.NullOr(Schema.String).pipe(field(baseId + 13, \"Phone number.\")),\n latitude: Schema.NullOr(Schema.Finite).pipe(field(baseId + 14, \"Latitude.\")),\n longitude: Schema.NullOr(Schema.Finite).pipe(field(baseId + 15, \"Longitude.\")),\n });\n\nexport const attributes = (baseId: number) =>\n Schema.Array(\n Schema.Struct({\n key: Schema.String.pipe(field(baseId + 2, \"Attribute name.\")),\n value: Schema.NullOr(Schema.String).pipe(field(baseId + 3, \"Attribute value.\")),\n }).annotate({ fieldId: baseId + 1 }),\n );\n\nexport const taxLines = (baseId: number) =>\n Schema.Array(\n Schema.Struct({\n title: Schema.String.pipe(field(baseId + 2, \"Tax name.\")),\n rate: Schema.NullOr(Schema.Finite).pipe(field(baseId + 3, \"Tax rate as a fraction.\")),\n priceSet: moneyBag(baseId + 10).pipe(field(baseId + 4, \"Tax amount.\")),\n }).annotate({ fieldId: baseId + 1 }),\n );\n\nexport const discountAllocations = (baseId: number) =>\n Schema.Array(\n Schema.Struct({\n discountApplicationIndex: Schema.Int.pipe(\n field(baseId + 2, \"Index of the order discount application.\"),\n ),\n amountSet: moneyBag(baseId + 10).pipe(field(baseId + 3, \"Allocated discount amount.\")),\n }).annotate({ fieldId: baseId + 1 }),\n );\n\nexport type MoneyBag = Schema.Schema.Type<ReturnType<typeof moneyBag>>;\n\nexport type Address = Schema.Schema.Type<ReturnType<typeof address>>;\n\nexport type Attribute = Schema.Schema.Type<ReturnType<typeof attributes>>[number];\n\nexport type TaxLine = Schema.Schema.Type<ReturnType<typeof taxLines>>[number];\n\nexport type DiscountAllocation = Schema.Schema.Type<ReturnType<typeof discountAllocations>>[number];\n\nexport const RestMoneyBagSchema = Schema.Struct({\n shop_money: Schema.Struct({ amount: Schema.String, currency_code: Schema.String }),\n presentment_money: Schema.Struct({ amount: Schema.String, currency_code: Schema.String }),\n});\n\nconst nullableText = Schema.NullOr(Schema.String);\n\nexport const RestAddressSchema = Schema.Struct({\n first_name: nullableText,\n last_name: nullableText,\n name: nullableText,\n company: nullableText,\n address1: nullableText,\n address2: nullableText,\n city: nullableText,\n province: nullableText,\n province_code: nullableText,\n country: nullableText,\n country_code: nullableText,\n zip: nullableText,\n phone: nullableText,\n latitude: Schema.NullOr(Schema.Number),\n longitude: Schema.NullOr(Schema.Number),\n});\n\nexport const RestAttributeSchema = Schema.Struct({\n name: Schema.String,\n value: Schema.NullOr(Schema.String),\n});\n\nexport const RestTaxLineSchema = Schema.Struct({\n title: Schema.String,\n rate: Schema.NullOr(Schema.Number),\n price_set: RestMoneyBagSchema,\n});\n\nexport const RestDiscountAllocationSchema = Schema.Struct({\n discount_application_index: Schema.Int,\n amount_set: RestMoneyBagSchema,\n});\n\ntype RestMoneyBag = Schema.Schema.Type<typeof RestMoneyBagSchema>;\n\ntype RestAddress = Schema.Schema.Type<typeof RestAddressSchema>;\n\nexport const fromRest = {\n money: (bag: RestMoneyBag): MoneyBag => ({\n shopMoney: {\n amount: normalizeAmount(bag.shop_money.amount),\n currencyCode: bag.shop_money.currency_code,\n },\n presentmentMoney: {\n amount: normalizeAmount(bag.presentment_money.amount),\n currencyCode: bag.presentment_money.currency_code,\n },\n }),\n address: (value: RestAddress): Address => ({\n firstName: value.first_name,\n lastName: value.last_name,\n name: value.name,\n company: value.company,\n address1: value.address1,\n address2: value.address2,\n city: value.city,\n province: value.province,\n provinceCode: value.province_code,\n country: value.country,\n countryCode: value.country_code,\n zip: value.zip,\n phone: value.phone,\n latitude: value.latitude,\n longitude: value.longitude,\n }),\n attribute: (value: Schema.Schema.Type<typeof RestAttributeSchema>): Attribute => ({\n key: value.name,\n value: value.value,\n }),\n taxLine: (value: Schema.Schema.Type<typeof RestTaxLineSchema>): TaxLine => ({\n title: value.title,\n rate: value.rate,\n priceSet: fromRest.money(value.price_set),\n }),\n discountAllocation: (\n value: Schema.Schema.Type<typeof RestDiscountAllocationSchema>,\n ): DiscountAllocation => ({\n discountApplicationIndex: value.discount_application_index,\n amountSet: fromRest.money(value.amount_set),\n }),\n};\n\nexport const MoneyBagFields = `shopMoney { amount currencyCode } presentmentMoney { amount currencyCode }`;\n\nexport const AddressFields = `firstName lastName name company address1 address2 city province provinceCode country countryCodeV2 zip phone latitude longitude`;\n\nexport const TaxLineFields = `title rate priceSet { ${MoneyBagFields} }`;\n\nexport const DiscountAllocationFields = `allocatedAmountSet { ${MoneyBagFields} } discountApplication { index }`;\n\nexport const GraphQLMoneyBagSchema = Schema.Struct({\n shopMoney: Schema.Struct({ amount: Schema.String, currencyCode: Schema.String }),\n presentmentMoney: Schema.Struct({ amount: Schema.String, currencyCode: Schema.String }),\n});\n\nexport const GraphQLAddressSchema = Schema.Struct({\n firstName: Schema.NullOr(Schema.String),\n lastName: Schema.NullOr(Schema.String),\n name: Schema.NullOr(Schema.String),\n company: Schema.NullOr(Schema.String),\n address1: Schema.NullOr(Schema.String),\n address2: Schema.NullOr(Schema.String),\n city: Schema.NullOr(Schema.String),\n province: Schema.NullOr(Schema.String),\n provinceCode: Schema.NullOr(Schema.String),\n country: Schema.NullOr(Schema.String),\n countryCodeV2: Schema.NullOr(Schema.String),\n zip: Schema.NullOr(Schema.String),\n phone: Schema.NullOr(Schema.String),\n latitude: Schema.NullOr(Schema.Number),\n longitude: Schema.NullOr(Schema.Number),\n});\n\nexport const GraphQLAttributeSchema = Schema.Struct({\n key: Schema.String,\n value: Schema.NullOr(Schema.String),\n});\n\nexport const GraphQLTaxLineSchema = Schema.Struct({\n title: Schema.String,\n rate: Schema.NullOr(Schema.Number),\n priceSet: GraphQLMoneyBagSchema,\n});\n\nexport const GraphQLDiscountAllocationSchema = Schema.Struct({\n allocatedAmountSet: GraphQLMoneyBagSchema,\n discountApplication: Schema.Struct({ index: Schema.Int }),\n});\n\nexport const connection = <S extends Schema.Top>(node: S) =>\n Schema.Struct({ nodes: Schema.Array(node), pageInfo: PageInfoSchema });\n\ntype GraphQLMoneyBag = Schema.Schema.Type<typeof GraphQLMoneyBagSchema>;\n\ntype GraphQLAddress = Schema.Schema.Type<typeof GraphQLAddressSchema>;\n\nexport const fromGraphQL = {\n money: (bag: GraphQLMoneyBag): MoneyBag => ({\n shopMoney: {\n amount: normalizeAmount(bag.shopMoney.amount),\n currencyCode: bag.shopMoney.currencyCode,\n },\n presentmentMoney: {\n amount: normalizeAmount(bag.presentmentMoney.amount),\n currencyCode: bag.presentmentMoney.currencyCode,\n },\n }),\n address: ({ countryCodeV2, ...value }: GraphQLAddress): Address => ({\n ...value,\n countryCode: countryCodeV2,\n }),\n taxLine: (value: Schema.Schema.Type<typeof GraphQLTaxLineSchema>): TaxLine => ({\n title: value.title,\n rate: value.rate,\n priceSet: fromGraphQL.money(value.priceSet),\n }),\n discountAllocation: (\n value: Schema.Schema.Type<typeof GraphQLDiscountAllocationSchema>,\n ): DiscountAllocation => ({\n discountApplicationIndex: value.discountApplication.index,\n amountSet: fromGraphQL.money(value.allocatedAmountSet),\n }),\n};\n\n// Webhooks send enum values in lower case.\nexport const upper = <const L extends ReadonlyArray<string>>(literals: Schema.Literals<L>) =>\n Schema.String.pipe(Schema.decode(SchemaTransformation.toUpperCase()), Schema.decodeTo(literals));\n\nexport const PageInfoFields = `pageInfo { hasNextPage endCursor }`;\n\nexport const idRef = Schema.NullOr(Schema.Struct({ id: Schema.String }));\n\nexport type Nodes<S extends Schema.Top> =\n Schema.Schema.Type<S> extends { readonly nodes: infer N } ? N : never;\n\nexport const pageQuery = (name: string, connection: string, fields: string) => `#graphql\nquery ${name}($first: Int!, $after: String) {\n ${connection}(first: $first, after: $after) {\n nodes {\n ${fields}\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n}\n`;\n\nexport type PageInfo = Schema.Schema.Type<typeof PageInfoSchema>;\n","import * as Schema from \"effect/Schema\";\n\nimport type { Cart, CartLineItem } from \"./row\";\n\nimport { RestMoneyBagSchema, fromRest, gid, normalizeAmount } from \"../shared\";\n\nconst JsonStringSchema = Schema.flip(Schema.fromJsonString(Schema.Unknown));\n\nconst CartWebhookLineItemSchema = Schema.Struct({\n id: Schema.Number,\n properties: Schema.Union([Schema.Null, JsonStringSchema]),\n quantity: Schema.Int,\n variant_id: Schema.Number,\n key: Schema.String,\n discounted_price: Schema.String,\n discounts: JsonStringSchema,\n gift_card: Schema.Boolean,\n grams: Schema.Int,\n line_price: Schema.String,\n original_line_price: Schema.String,\n original_price: Schema.String,\n price: Schema.String,\n product_id: Schema.Number,\n sku: Schema.NullOr(Schema.String),\n taxable: Schema.Boolean,\n title: Schema.String,\n total_discount: Schema.String,\n vendor: Schema.String,\n discounted_price_set: RestMoneyBagSchema,\n line_price_set: RestMoneyBagSchema,\n original_line_price_set: RestMoneyBagSchema,\n price_set: RestMoneyBagSchema,\n total_discount_set: RestMoneyBagSchema,\n parent_relationship: Schema.Union([Schema.Null, JsonStringSchema]),\n});\n\nexport const CartWebhookPayloadSchema = Schema.Struct({\n id: Schema.String,\n token: Schema.String,\n line_items: Schema.Array(CartWebhookLineItemSchema),\n note: Schema.NullOr(Schema.String),\n updated_at: Schema.DateFromString,\n created_at: Schema.DateFromString,\n});\n\nexport const CartWebhookEventSchema = Schema.Struct({\n id: Schema.String,\n token: Schema.String,\n line_items: Schema.Array(Schema.toType(CartWebhookLineItemSchema)),\n note: Schema.NullOr(Schema.String),\n updated_at: Schema.Date,\n created_at: Schema.Date,\n topic: Schema.Literals([\"carts/create\", \"carts/update\"]),\n});\n\nexport type CartWebhookLineItem = Schema.Schema.Type<typeof CartWebhookLineItemSchema>;\n\nexport type CartWebhookPayload = Schema.Schema.Type<typeof CartWebhookPayloadSchema>;\n\nexport type CartWebhookEvent = Schema.Schema.Type<typeof CartWebhookEventSchema>;\n\nconst normalizeCartLineItem = (item: CartWebhookLineItem): CartLineItem => ({\n id: String(item.id),\n properties: item.properties,\n quantity: item.quantity,\n variantId: gid(\"ProductVariant\", item.variant_id),\n key: item.key,\n discountedPrice: normalizeAmount(item.discounted_price),\n discounts: item.discounts,\n giftCard: item.gift_card,\n grams: item.grams,\n linePrice: normalizeAmount(item.line_price),\n originalLinePrice: normalizeAmount(item.original_line_price),\n originalPrice: normalizeAmount(item.original_price),\n price: normalizeAmount(item.price),\n productId: gid(\"Product\", item.product_id),\n sku: item.sku,\n taxable: item.taxable,\n title: item.title,\n totalDiscount: normalizeAmount(item.total_discount),\n vendor: item.vendor,\n discountedPriceSet: fromRest.money(item.discounted_price_set),\n linePriceSet: fromRest.money(item.line_price_set),\n originalLinePriceSet: fromRest.money(item.original_line_price_set),\n priceSet: fromRest.money(item.price_set),\n totalDiscountSet: fromRest.money(item.total_discount_set),\n parentRelationship: item.parent_relationship,\n});\n\nexport const fromCartWebhook = (payload: CartWebhookEvent): Cart => ({\n id: payload.id,\n token: payload.token,\n topic: payload.topic,\n lineItems: payload.line_items.map(normalizeCartLineItem),\n note: payload.note ?? \"\",\n updatedAt: payload.updated_at,\n createdAt: payload.created_at,\n});\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport * as Schema from \"effect/Schema\";\n\nimport { field } from \"../shared\";\n\nexport const ProductStatusSchema = Schema.Literals([\"ACTIVE\", \"ARCHIVED\", \"DRAFT\", \"UNLISTED\"]);\n\nexport const ProductVariantInventoryPolicySchema = Schema.Literals([\"CONTINUE\", \"DENY\"]);\n\nconst ProductImageSchema = Schema.Struct({\n url: Schema.String.pipe(field(202, \"URL of the image.\")),\n altText: Schema.NullOr(Schema.String).pipe(field(203, \"Alternative text for the image.\")),\n});\n\nexport const ProductFeaturedMediaSchema = Schema.Struct({\n image: Schema.NullOr(ProductImageSchema).pipe(field(201, \"Image for the featured media.\")),\n});\n\nexport const ProductOptionSchema = Schema.Struct({\n id: Schema.String.pipe(field(302, \"Unique product option identifier.\")),\n name: Schema.String.pipe(field(303, \"Name of the product option.\")),\n position: Schema.Int.pipe(field(304, \"Position of the option on the product.\")),\n values: Schema.Array(Schema.String.annotate({ fieldId: 306 })).pipe(\n field(305, \"Values available for the option.\"),\n ),\n});\n\nexport const ProductVariantSchema = Schema.Struct({\n id: Schema.String.pipe(field(402, \"Unique product variant identifier.\")),\n legacyResourceId: Schema.String.pipe(field(403, \"Numeric variant identifier stored as text.\")),\n title: Schema.String.pipe(field(404, \"Display title of the variant.\")),\n sku: Schema.NullOr(Schema.String).pipe(field(405, \"Stock keeping unit for the variant.\")),\n barcode: Schema.NullOr(Schema.String).pipe(field(406, \"Barcode for the variant.\")),\n price: Schema.String.pipe(field(407, \"Price of the variant.\")),\n compareAtPrice: Schema.NullOr(Schema.String).pipe(\n field(408, \"Original price used for comparison.\"),\n ),\n inventoryPolicy: ProductVariantInventoryPolicySchema.pipe(\n field(409, \"Behavior when the variant is out of stock.\"),\n ),\n taxable: Schema.Boolean.pipe(field(410, \"Whether the variant is taxable.\")),\n createdAt: Schema.Date.pipe(field(411, \"Time when the variant was created.\")),\n updatedAt: Schema.Date.pipe(field(412, \"Time when the variant was last changed.\")),\n});\n\nexport const ProductSchema = Schema.Struct({\n id: Schema.String.pipe(field(1, \"Unique product identifier.\")),\n legacyResourceId: Schema.String.pipe(field(2, \"Numeric product identifier stored as text.\")),\n title: Schema.String.pipe(field(3, \"Title of the product.\")),\n handle: Schema.String.pipe(field(4, \"URL handle for the product.\")),\n descriptionHtml: Schema.String.pipe(field(5, \"Product description as HTML.\")),\n productType: Schema.String.pipe(field(6, \"Merchant-defined product type.\")),\n vendor: Schema.String.pipe(field(7, \"Vendor of the product.\")),\n status: ProductStatusSchema.pipe(field(8, \"Current product status.\")),\n tags: Schema.Array(Schema.String.annotate({ fieldId: 101 })).pipe(\n field(9, \"Tags added to the product.\"),\n ),\n createdAt: Schema.Date.pipe(field(10, \"Time when the product was created.\")),\n updatedAt: Schema.Date.pipe(field(11, \"Time when the product was last changed.\")),\n publishedAt: Schema.NullOr(Schema.Date).pipe(field(12, \"Time when the product was published.\")),\n templateSuffix: Schema.NullOr(Schema.String).pipe(\n field(13, \"Theme template suffix used by the product.\"),\n ),\n featuredMedia: Schema.NullOr(ProductFeaturedMediaSchema).pipe(\n field(14, \"Featured media for the product.\"),\n ),\n options: Schema.Array(ProductOptionSchema.annotate({ fieldId: 301 })).pipe(\n field(15, \"Options for the product.\"),\n ),\n variants: Schema.Array(ProductVariantSchema.annotate({ fieldId: 401 })).pipe(\n field(16, \"Variants of the product.\"),\n ),\n _deleted: Schema.optional(Schema.Boolean).pipe(field(17, \"Whether the product was deleted.\")),\n})\n .annotate({\n description: \"Products in a Shopify store.\",\n })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type ProductStatus = Schema.Schema.Type<typeof ProductStatusSchema>;\n\nexport type ProductVariantInventoryPolicy = Schema.Schema.Type<\n typeof ProductVariantInventoryPolicySchema\n>;\n\nexport type ProductFeaturedMedia = Schema.Schema.Type<typeof ProductFeaturedMediaSchema>;\n\nexport type ProductOption = Schema.Schema.Type<typeof ProductOptionSchema>;\n\nexport type ProductVariant = Schema.Schema.Type<typeof ProductVariantSchema>;\n\nexport type Product = Schema.Schema.Type<typeof ProductSchema>;\n","import * as Schema from \"effect/Schema\";\n\nimport { gid, splitTags, upper } from \"../shared\";\nimport {\n type Product,\n type ProductFeaturedMedia,\n type ProductOption,\n ProductStatusSchema,\n type ProductVariant,\n ProductVariantInventoryPolicySchema,\n} from \"./row\";\n\nexport const ProductWebhookImageSchema = Schema.Struct({\n src: Schema.String,\n alt: Schema.NullOr(Schema.String),\n});\n\nexport const ProductWebhookOptionSchema = Schema.Struct({\n id: Schema.Number,\n name: Schema.String,\n position: Schema.Int,\n values: Schema.Array(Schema.String),\n});\n\nexport const ProductWebhookVariantSchema = Schema.Struct({\n admin_graphql_api_id: Schema.String,\n id: Schema.Number,\n title: Schema.String,\n price: Schema.String,\n inventory_policy: upper(ProductVariantInventoryPolicySchema),\n compare_at_price: Schema.NullOr(Schema.String),\n created_at: Schema.DateFromString,\n updated_at: Schema.DateFromString,\n taxable: Schema.Boolean,\n barcode: Schema.NullOr(Schema.String),\n sku: Schema.NullOr(Schema.String),\n});\n\nexport const ProductWebhookVariantGidSchema = Schema.Struct({\n admin_graphql_api_id: Schema.String,\n updated_at: Schema.DateFromString,\n});\n\nexport const ProductWebhookPayloadSchema = Schema.Struct({\n id: Schema.Number,\n admin_graphql_api_id: Schema.String,\n body_html: Schema.NullOr(Schema.String),\n created_at: Schema.DateFromString,\n handle: Schema.String,\n image: Schema.optional(Schema.NullOr(ProductWebhookImageSchema)),\n options: Schema.Array(ProductWebhookOptionSchema),\n product_type: Schema.String,\n published_at: Schema.NullOr(Schema.DateFromString),\n status: upper(ProductStatusSchema),\n tags: Schema.String,\n template_suffix: Schema.NullOr(Schema.String),\n title: Schema.String,\n updated_at: Schema.DateFromString,\n variants: Schema.Array(ProductWebhookVariantSchema),\n variant_gids: Schema.Array(ProductWebhookVariantGidSchema),\n vendor: Schema.String,\n});\n\nexport const ProductDeleteWebhookPayloadSchema = Schema.Struct({ id: Schema.Number });\n\nexport const ProductEventSchema = Schema.Union([\n Schema.Struct({\n _tag: Schema.Literal(\"upsert\"),\n payload: Schema.toType(ProductWebhookPayloadSchema),\n triggeredAt: Schema.Date,\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"delete\"),\n id: Schema.String,\n version: Schema.Date,\n }),\n]);\n\nexport type ProductWebhookImage = Schema.Schema.Type<typeof ProductWebhookImageSchema>;\n\nexport type ProductWebhookOption = Schema.Schema.Type<typeof ProductWebhookOptionSchema>;\n\nexport type ProductWebhookVariant = Schema.Schema.Type<typeof ProductWebhookVariantSchema>;\n\nexport type ProductWebhookPayload = Schema.Schema.Type<typeof ProductWebhookPayloadSchema>;\n\nconst normalizeProductOption = (option: ProductWebhookOption): ProductOption => ({\n id: gid(\"ProductOption\", option.id),\n name: option.name,\n position: option.position,\n values: option.values,\n});\n\nconst normalizeProductVariant = (variant: ProductWebhookVariant): ProductVariant => ({\n id: variant.admin_graphql_api_id,\n legacyResourceId: String(variant.id),\n title: variant.title,\n sku: variant.sku,\n barcode: variant.barcode,\n price: variant.price,\n compareAtPrice: variant.compare_at_price,\n inventoryPolicy: variant.inventory_policy,\n taxable: variant.taxable,\n createdAt: variant.created_at,\n updatedAt: variant.updated_at,\n});\n\nconst normalizeProductFeaturedMedia = (\n image: ProductWebhookImage | null | undefined,\n): ProductFeaturedMedia | null =>\n image === null || image === undefined ? null : { image: { url: image.src, altText: image.alt } };\n\nexport const fromProductWebhook = (payload: ProductWebhookPayload): Product => ({\n id: payload.admin_graphql_api_id,\n legacyResourceId: String(payload.id),\n title: payload.title,\n handle: payload.handle,\n descriptionHtml: payload.body_html ?? \"\",\n productType: payload.product_type,\n vendor: payload.vendor,\n status: payload.status,\n tags: splitTags(payload.tags),\n createdAt: payload.created_at,\n updatedAt: payload.updated_at,\n publishedAt: payload.published_at,\n templateSuffix: payload.template_suffix ?? \"\",\n featuredMedia: normalizeProductFeaturedMedia(payload.image),\n options: payload.options.map(normalizeProductOption),\n variants: payload.variants.map(normalizeProductVariant),\n});\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport * as Schema from \"effect/Schema\";\n\nimport { address, field } from \"../shared\";\n\nexport const CustomerStateSchema = Schema.Literals([\"DECLINED\", \"DISABLED\", \"ENABLED\", \"INVITED\"]);\n\nexport const EmailMarketingStateSchema = Schema.Literals([\n \"INVALID\",\n \"NOT_SUBSCRIBED\",\n \"PENDING\",\n \"REDACTED\",\n \"SUBSCRIBED\",\n \"UNSUBSCRIBED\",\n]);\n\nexport const SmsMarketingStateSchema = Schema.Literals([\n \"NOT_SUBSCRIBED\",\n \"PENDING\",\n \"SUBSCRIBED\",\n \"UNSUBSCRIBED\",\n \"REDACTED\",\n]);\n\nexport const MarketingOptInLevelSchema = Schema.Literals([\n \"SINGLE_OPT_IN\",\n \"CONFIRMED_OPT_IN\",\n \"UNKNOWN\",\n]);\n\nexport const ConsentCollectedFromSchema = Schema.Literals([\"SHOPIFY\", \"OTHER\"]);\n\nexport const ProductSubscriberStatusSchema = Schema.Literals([\n \"ACTIVE\",\n \"CANCELLED\",\n \"EXPIRED\",\n \"FAILED\",\n \"NEVER_SUBSCRIBED\",\n \"PAUSED\",\n]);\n\nexport const CustomerAddressSchema = Schema.Struct({\n id: Schema.String.pipe(field(121, \"Unique address identifier.\")),\n ...address(121).fields,\n});\n\nexport const CustomerSchema = Schema.Struct({\n id: Schema.String.pipe(field(1, \"Unique customer identifier.\")),\n legacyResourceId: Schema.String.pipe(field(2, \"Numeric customer identifier stored as text.\")),\n firstName: Schema.NullOr(Schema.String).pipe(field(3, \"First name.\")),\n lastName: Schema.NullOr(Schema.String).pipe(field(4, \"Last name.\")),\n displayName: Schema.String.pipe(field(5, \"Full name shown in Shopify.\")),\n email: Schema.NullOr(Schema.String).pipe(field(6, \"Default email address.\")),\n emailMarketingState: Schema.NullOr(EmailMarketingStateSchema).pipe(\n field(7, \"Email marketing consent state.\"),\n ),\n emailMarketingOptInLevel: Schema.NullOr(MarketingOptInLevelSchema).pipe(\n field(8, \"Email marketing opt-in level.\"),\n ),\n emailMarketingUpdatedAt: Schema.NullOr(Schema.Date).pipe(\n field(9, \"Time when email marketing consent last changed.\"),\n ),\n phone: Schema.NullOr(Schema.String).pipe(field(10, \"Default phone number.\")),\n smsMarketingState: Schema.NullOr(SmsMarketingStateSchema).pipe(\n field(11, \"SMS marketing consent state.\"),\n ),\n smsMarketingOptInLevel: Schema.NullOr(MarketingOptInLevelSchema).pipe(\n field(12, \"SMS marketing opt-in level.\"),\n ),\n smsMarketingUpdatedAt: Schema.NullOr(Schema.Date).pipe(\n field(13, \"Time when SMS marketing consent last changed.\"),\n ),\n smsMarketingCollectedFrom: Schema.NullOr(ConsentCollectedFromSchema).pipe(\n field(14, \"Where SMS marketing consent was collected.\"),\n ),\n note: Schema.NullOr(Schema.String).pipe(field(15, \"Merchant note about the customer.\")),\n state: CustomerStateSchema.pipe(field(16, \"Customer account state.\")),\n verifiedEmail: Schema.Boolean.pipe(field(17, \"Whether the email address is verified.\")),\n taxExempt: Schema.Boolean.pipe(field(18, \"Whether the customer is exempt from tax.\")),\n taxExemptions: Schema.Array(Schema.String.annotate({ fieldId: 100 })).pipe(\n field(19, \"Tax exemptions that apply to the customer.\"),\n ),\n tags: Schema.Array(Schema.String.annotate({ fieldId: 101 })).pipe(\n field(20, \"Tags added to the customer.\"),\n ),\n locale: Schema.NullOr(Schema.String).pipe(field(21, \"Customer language.\")),\n numberOfOrders: Schema.Int.pipe(field(22, \"Number of orders the customer placed.\")),\n amountSpent: Schema.Struct({\n amount: Schema.String.pipe(field(111, \"Amount spent.\")),\n currencyCode: Schema.String.pipe(field(112, \"Shop currency code.\")),\n }).pipe(field(23, \"Total amount spent in the shop currency.\")),\n lastOrderId: Schema.NullOr(Schema.String).pipe(field(24, \"Most recent order identifier.\")),\n productSubscriberStatus: Schema.NullOr(ProductSubscriberStatusSchema).pipe(\n field(25, \"Subscription status for products.\"),\n ),\n dataSaleOptOut: Schema.NullOr(Schema.Boolean).pipe(\n field(26, \"Whether the customer opted out of data sale.\"),\n ),\n defaultAddressId: Schema.NullOr(Schema.String).pipe(field(27, \"Default address identifier.\")),\n addresses: Schema.Array(CustomerAddressSchema.annotate({ fieldId: 120 })).pipe(\n field(28, \"Saved addresses.\"),\n ),\n createdAt: Schema.Date.pipe(field(29, \"Time when the customer was created.\")),\n updatedAt: Schema.Date.pipe(field(30, \"Time when the customer was last changed.\")),\n _deleted: Schema.optional(Schema.Boolean).pipe(field(31, \"Whether the customer was deleted.\")),\n})\n .annotate({\n description: \"Customers in a Shopify store.\",\n })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Customer = Schema.Schema.Type<typeof CustomerSchema>;\n","import * as Schema from \"effect/Schema\";\n\nimport {\n AddressFields,\n GraphQLAddressSchema,\n connection,\n emptyText,\n fromGraphQL,\n normalizeAmount,\n pageQuery,\n} from \"../shared\";\nimport {\n ConsentCollectedFromSchema,\n type Customer,\n CustomerStateSchema,\n EmailMarketingStateSchema,\n MarketingOptInLevelSchema,\n ProductSubscriberStatusSchema,\n SmsMarketingStateSchema,\n} from \"./row\";\n\nconst CustomerAddressNodeFields = `id ${AddressFields}`;\n\nexport const CustomerFields = `\n id\n legacyResourceId\n firstName\n lastName\n displayName\n note\n state\n verifiedEmail\n taxExempt\n taxExemptions\n tags\n locale\n numberOfOrders\n amountSpent { amount currencyCode }\n lastOrder { id }\n productSubscriberStatus\n dataSaleOptOut\n defaultEmailAddress { emailAddress marketingState marketingOptInLevel marketingUpdatedAt }\n defaultPhoneNumber { phoneNumber }\n smsMarketingConsent { marketingState marketingOptInLevel consentUpdatedAt consentCollectedFrom }\n defaultAddress { id }\n addressesV2(first: 25) {\n nodes { ${CustomerAddressNodeFields} }\n pageInfo { hasNextPage endCursor }\n }\n createdAt\n updatedAt\n`;\n\nexport const CustomerAddressesQuery = `#graphql\nquery AirfoilCustomerAddresses($id: ID!, $first: Int!, $after: String) {\n node: customer(id: $id) {\n connection: addressesV2(first: $first, after: $after) {\n nodes { ${CustomerAddressNodeFields} }\n pageInfo { hasNextPage endCursor }\n }\n }\n}\n`;\n\nexport const CustomerByIdQuery = `#graphql\nquery AirfoilCustomerById($id: ID!) {\n customer(id: $id) { ${CustomerFields} }\n}\n`;\n\nconst GraphQLCustomerAddressSchema = Schema.Struct({\n id: Schema.String,\n ...GraphQLAddressSchema.fields,\n});\n\nexport const GraphQLCustomerAddressesSchema = connection(GraphQLCustomerAddressSchema);\n\nexport const GraphQLCustomerNodeSchema = Schema.Struct({\n id: Schema.String,\n legacyResourceId: Schema.String,\n firstName: Schema.NullOr(Schema.String),\n lastName: Schema.NullOr(Schema.String),\n displayName: Schema.String,\n note: Schema.NullOr(Schema.String),\n state: CustomerStateSchema,\n verifiedEmail: Schema.Boolean,\n taxExempt: Schema.Boolean,\n taxExemptions: Schema.Array(Schema.String),\n tags: Schema.Array(Schema.String),\n locale: Schema.String,\n numberOfOrders: Schema.NumberFromString,\n amountSpent: Schema.Struct({ amount: Schema.String, currencyCode: Schema.String }),\n lastOrder: Schema.NullOr(Schema.Struct({ id: Schema.String })),\n productSubscriberStatus: ProductSubscriberStatusSchema,\n dataSaleOptOut: Schema.Boolean,\n defaultEmailAddress: Schema.NullOr(\n Schema.Struct({\n emailAddress: Schema.String,\n marketingState: EmailMarketingStateSchema,\n marketingOptInLevel: Schema.NullOr(MarketingOptInLevelSchema),\n marketingUpdatedAt: Schema.NullOr(Schema.DateFromString),\n }),\n ),\n defaultPhoneNumber: Schema.NullOr(Schema.Struct({ phoneNumber: Schema.String })),\n smsMarketingConsent: Schema.NullOr(\n Schema.Struct({\n marketingState: SmsMarketingStateSchema,\n marketingOptInLevel: MarketingOptInLevelSchema,\n consentUpdatedAt: Schema.NullOr(Schema.DateFromString),\n consentCollectedFrom: Schema.NullOr(ConsentCollectedFromSchema),\n }),\n ),\n defaultAddress: Schema.NullOr(Schema.Struct({ id: Schema.String })),\n addressesV2: GraphQLCustomerAddressesSchema,\n createdAt: Schema.DateFromString,\n updatedAt: Schema.DateFromString,\n});\n\nexport type GraphQLCustomerNode = Schema.Schema.Type<typeof GraphQLCustomerNodeSchema>;\n\nexport type GraphQLCustomerAddress = Schema.Schema.Type<typeof GraphQLCustomerAddressSchema>;\n\nconst addressId = (value: string): string => value.replace(/\\?.*$/, \"\");\n\nexport const normalizeCustomerNode = (\n node: GraphQLCustomerNode,\n addresses: ReadonlyArray<GraphQLCustomerAddress>,\n): Customer => ({\n id: node.id,\n legacyResourceId: node.legacyResourceId,\n firstName: emptyText(node.firstName),\n lastName: emptyText(node.lastName),\n displayName: node.displayName,\n email: node.defaultEmailAddress?.emailAddress ?? \"\",\n emailMarketingState: node.defaultEmailAddress?.marketingState ?? null,\n emailMarketingOptInLevel: node.defaultEmailAddress?.marketingOptInLevel ?? null,\n emailMarketingUpdatedAt: node.defaultEmailAddress?.marketingUpdatedAt ?? null,\n phone: node.defaultPhoneNumber?.phoneNumber ?? \"\",\n smsMarketingState: node.smsMarketingConsent?.marketingState ?? null,\n smsMarketingOptInLevel: node.smsMarketingConsent?.marketingOptInLevel ?? null,\n smsMarketingUpdatedAt: node.smsMarketingConsent?.consentUpdatedAt ?? null,\n smsMarketingCollectedFrom: node.smsMarketingConsent?.consentCollectedFrom ?? null,\n note: emptyText(node.note),\n state: node.state,\n verifiedEmail: node.verifiedEmail,\n taxExempt: node.taxExempt,\n taxExemptions: node.taxExemptions,\n tags: node.tags,\n locale: node.locale,\n numberOfOrders: node.numberOfOrders,\n amountSpent: {\n amount: normalizeAmount(node.amountSpent.amount),\n currencyCode: node.amountSpent.currencyCode,\n },\n lastOrderId: node.lastOrder?.id ?? \"\",\n productSubscriberStatus: node.productSubscriberStatus,\n dataSaleOptOut: node.dataSaleOptOut,\n defaultAddressId: node.defaultAddress === null ? \"\" : addressId(node.defaultAddress.id),\n addresses: addresses.map(({ id, ...value }) => ({\n id: addressId(id),\n ...fromGraphQL.address(value),\n })),\n createdAt: node.createdAt,\n updatedAt: node.updatedAt,\n});\n\nexport const CustomersQuery = pageQuery(\"AirfoilCustomers\", \"customers\", CustomerFields);\n\nexport const GraphQLCustomersDataSchema = Schema.Struct({\n customers: connection(GraphQLCustomerNodeSchema),\n});\n\nexport const GraphQLCustomerByIdDataSchema = Schema.Struct({\n customer: Schema.NullOr(GraphQLCustomerNodeSchema),\n});\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport * as Schema from \"effect/Schema\";\n\nimport { address, attributes, discountAllocations, field, moneyBag, taxLines } from \"../shared\";\n\nexport const OrderCancelReasonSchema = Schema.Literals([\n \"CUSTOMER\",\n \"DECLINED\",\n \"FRAUD\",\n \"INVENTORY\",\n \"STAFF\",\n \"OTHER\",\n]);\n\nexport const OrderFinancialStatusSchema = Schema.Literals([\n \"PENDING\",\n \"AUTHORIZED\",\n \"PARTIALLY_PAID\",\n \"PARTIALLY_REFUNDED\",\n \"VOIDED\",\n \"PAID\",\n \"REFUNDED\",\n \"EXPIRED\",\n]);\n\nexport const DiscountApplicationTypeSchema = Schema.Literals([\n \"DISCOUNT_CODE\",\n \"MANUAL\",\n \"AUTOMATIC\",\n \"SCRIPT\",\n]);\n\n// Shopify deprecated ONE but still returns it for older orders.\nexport const DiscountAllocationMethodSchema = Schema.Literals([\"ACROSS\", \"EACH\", \"ONE\"]);\n\nexport const DiscountTargetSelectionSchema = Schema.Literals([\"ALL\", \"ENTITLED\", \"EXPLICIT\"]);\n\nexport const DiscountTargetTypeSchema = Schema.Literals([\"LINE_ITEM\", \"SHIPPING_LINE\"]);\n\nexport const DiscountValueTypeSchema = Schema.Literals([\"PERCENTAGE\", \"FIXED_AMOUNT\"]);\n\nexport const DiscountApplicationSchema = Schema.Struct({\n index: Schema.Int.pipe(field(161, \"Position used by discount allocations.\")),\n type: DiscountApplicationTypeSchema.pipe(field(162, \"How the discount was applied.\")),\n code: Schema.NullOr(Schema.String).pipe(field(163, \"Discount code.\")),\n title: Schema.NullOr(Schema.String).pipe(field(164, \"Discount title.\")),\n description: Schema.NullOr(Schema.String).pipe(field(165, \"Manual discount description.\")),\n allocationMethod: DiscountAllocationMethodSchema.pipe(field(166, \"How the value is split.\")),\n targetSelection: DiscountTargetSelectionSchema.pipe(field(167, \"Which lines are targeted.\")),\n targetType: DiscountTargetTypeSchema.pipe(field(168, \"Kind of lines targeted.\")),\n valueType: DiscountValueTypeSchema.pipe(field(169, \"Whether the value is a percent.\")),\n value: Schema.String.pipe(field(170, \"Percent or amount in the customer currency.\")),\n});\n\nexport const ShippingLineSchema = Schema.Struct({\n id: Schema.NullOr(Schema.String).pipe(field(501, \"Unique shipping line identifier.\")),\n title: Schema.String.pipe(field(502, \"Shipping method title.\")),\n code: Schema.NullOr(Schema.String).pipe(field(503, \"Shipping rate code.\")),\n source: Schema.NullOr(Schema.String).pipe(field(504, \"Source of the shipping rate.\")),\n carrierIdentifier: Schema.NullOr(Schema.String).pipe(field(505, \"Carrier service identifier.\")),\n phone: Schema.NullOr(Schema.String).pipe(field(506, \"Phone number for the shipping line.\")),\n isRemoved: Schema.Boolean.pipe(field(507, \"Whether the line was removed by an edit.\")),\n originalPriceSet: moneyBag(520).pipe(field(508, \"Price before discounts.\")),\n discountedPriceSet: moneyBag(530).pipe(field(509, \"Price after discounts.\")),\n currentDiscountedPriceSet: moneyBag(540).pipe(\n field(510, \"Price after discounts, edits, and refunds.\"),\n ),\n taxLines: taxLines(550).pipe(field(511, \"Taxes on the shipping line.\")),\n discountAllocations: discountAllocations(570).pipe(field(512, \"Discounts on the line.\")),\n});\n\nexport const OrderLineItemSchema = Schema.Struct({\n id: Schema.String.pipe(field(601, \"Unique line item identifier.\")),\n name: Schema.String.pipe(field(602, \"Product and variant name.\")),\n title: Schema.String.pipe(field(603, \"Product title.\")),\n variantTitle: Schema.NullOr(Schema.String).pipe(field(604, \"Variant title.\")),\n sku: Schema.NullOr(Schema.String).pipe(field(605, \"Stock keeping unit.\")),\n vendor: Schema.NullOr(Schema.String).pipe(field(606, \"Product vendor.\")),\n productId: Schema.NullOr(Schema.String).pipe(field(607, \"Product identifier.\")),\n variantId: Schema.NullOr(Schema.String).pipe(field(608, \"Product variant identifier.\")),\n quantity: Schema.Int.pipe(field(609, \"Quantity when the order was placed.\")),\n currentQuantity: Schema.Int.pipe(field(610, \"Quantity after removals and refunds.\")),\n taxable: Schema.Boolean.pipe(field(611, \"Whether the line item is taxable.\")),\n requiresShipping: Schema.Boolean.pipe(field(612, \"Whether the line item needs shipping.\")),\n isGiftCard: Schema.Boolean.pipe(field(613, \"Whether the line item is a gift card.\")),\n originalUnitPriceSet: moneyBag(630).pipe(field(614, \"Unit price before discounts.\")),\n totalDiscountSet: moneyBag(640).pipe(field(615, \"Total discount on the line.\")),\n taxLines: taxLines(650).pipe(field(616, \"Taxes on the line.\")),\n discountAllocations: discountAllocations(670).pipe(field(617, \"Discounts on the line.\")),\n customAttributes: attributes(690).pipe(field(618, \"Custom line properties.\")),\n});\n\nexport const OrderSchema = Schema.Struct({\n id: Schema.String.pipe(field(1, \"Unique order identifier.\")),\n legacyResourceId: Schema.String.pipe(field(2, \"Numeric order identifier stored as text.\")),\n name: Schema.String.pipe(field(3, \"Order name shown to the merchant.\")),\n email: Schema.NullOr(Schema.String).pipe(field(4, \"Email used for the order.\")),\n phone: Schema.NullOr(Schema.String).pipe(field(5, \"Phone used for the order.\")),\n customerId: Schema.NullOr(Schema.String).pipe(field(6, \"Customer identifier.\")),\n customerLocale: Schema.NullOr(Schema.String).pipe(field(7, \"Customer language.\")),\n customerAcceptsMarketing: Schema.Boolean.pipe(field(8, \"Whether the buyer accepts marketing.\")),\n billingAddress: Schema.NullOr(address(100)).pipe(field(9, \"Billing address.\")),\n shippingAddress: Schema.NullOr(address(120)).pipe(field(10, \"Shipping address.\")),\n note: Schema.NullOr(Schema.String).pipe(field(11, \"Order note.\")),\n customAttributes: attributes(140).pipe(field(12, \"Custom order attributes.\")),\n tags: Schema.Array(Schema.String.annotate({ fieldId: 150 })).pipe(\n field(13, \"Tags added to the order.\"),\n ),\n confirmationNumber: Schema.NullOr(Schema.String).pipe(field(14, \"Confirmation number.\")),\n poNumber: Schema.NullOr(Schema.String).pipe(field(15, \"Purchase order number.\")),\n sourceName: Schema.NullOr(Schema.String).pipe(field(16, \"Channel that created the order.\")),\n sourceIdentifier: Schema.NullOr(Schema.String).pipe(field(17, \"Identifier from the source.\")),\n appId: Schema.NullOr(Schema.String).pipe(field(18, \"App that created the order.\")),\n paymentGatewayNames: Schema.Array(Schema.String.annotate({ fieldId: 152 })).pipe(\n field(19, \"Payment gateways used.\"),\n ),\n test: Schema.Boolean.pipe(field(20, \"Whether the order is a test order.\")),\n taxesIncluded: Schema.Boolean.pipe(field(21, \"Whether prices include taxes.\")),\n taxExempt: Schema.Boolean.pipe(field(22, \"Whether the order is exempt from tax.\")),\n dutiesIncluded: Schema.Boolean.pipe(field(23, \"Whether prices include duties.\")),\n estimatedTaxes: Schema.Boolean.pipe(field(24, \"Whether taxes are estimates.\")),\n totalWeight: Schema.NullOr(Schema.Int).pipe(field(25, \"Total weight in grams.\")),\n displayFinancialStatus: Schema.NullOr(OrderFinancialStatusSchema).pipe(\n field(26, \"Payment status of the order.\"),\n ),\n cancelReason: Schema.NullOr(OrderCancelReasonSchema).pipe(\n field(27, \"Reason the order was cancelled.\"),\n ),\n cancelledAt: Schema.NullOr(Schema.Date).pipe(field(28, \"Time when the order was cancelled.\")),\n closedAt: Schema.NullOr(Schema.Date).pipe(field(29, \"Time when the order was closed.\")),\n processedAt: Schema.Date.pipe(field(30, \"Time when the order was processed.\")),\n createdAt: Schema.Date.pipe(field(31, \"Time when the order was created.\")),\n updatedAt: Schema.Date.pipe(field(32, \"Time when the order was last changed.\")),\n currencyCode: Schema.String.pipe(field(33, \"Shop currency code.\")),\n presentmentCurrencyCode: Schema.String.pipe(field(34, \"Customer currency code.\")),\n discountCodes: Schema.Array(Schema.String.annotate({ fieldId: 151 })).pipe(\n field(35, \"Discount codes used.\"),\n ),\n discountApplications: Schema.Array(DiscountApplicationSchema.annotate({ fieldId: 160 })).pipe(\n field(36, \"Discounts applied to the order.\"),\n ),\n subtotalPriceSet: Schema.NullOr(moneyBag(200)).pipe(\n field(37, \"Subtotal when the order was placed.\"),\n ),\n currentSubtotalPriceSet: moneyBag(210).pipe(field(38, \"Subtotal after edits and refunds.\")),\n totalDiscountsSet: Schema.NullOr(moneyBag(220)).pipe(\n field(39, \"Discounts when the order was placed.\"),\n ),\n currentTotalDiscountsSet: moneyBag(230).pipe(field(40, \"Discounts after edits and refunds.\")),\n totalShippingPriceSet: moneyBag(240).pipe(field(41, \"Shipping when the order was placed.\")),\n currentShippingPriceSet: moneyBag(250).pipe(field(42, \"Shipping after edits and refunds.\")),\n totalTaxSet: Schema.NullOr(moneyBag(260)).pipe(field(43, \"Tax when the order was placed.\")),\n currentTotalTaxSet: moneyBag(270).pipe(field(44, \"Tax after edits and refunds.\")),\n originalTotalDutiesSet: Schema.NullOr(moneyBag(280)).pipe(\n field(45, \"Duties when the order was placed.\"),\n ),\n currentTotalDutiesSet: Schema.NullOr(moneyBag(290)).pipe(\n field(46, \"Duties after edits and refunds.\"),\n ),\n totalPriceSet: moneyBag(300).pipe(field(47, \"Total when the order was placed.\")),\n currentTotalPriceSet: moneyBag(310).pipe(field(48, \"Total after edits and refunds.\")),\n taxLines: taxLines(400).pipe(field(49, \"Taxes when the order was placed.\")),\n shippingLines: Schema.Array(ShippingLineSchema.annotate({ fieldId: 500 })).pipe(\n field(50, \"Shipping lines, including removed ones.\"),\n ),\n lineItems: Schema.Array(OrderLineItemSchema.annotate({ fieldId: 600 })).pipe(\n field(51, \"Line items in the order.\"),\n ),\n _deleted: Schema.optional(Schema.Boolean).pipe(field(52, \"Whether the order was deleted.\")),\n})\n .annotate({\n description: \"Orders in a Shopify store.\",\n })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Order = Schema.Schema.Type<typeof OrderSchema>;\n\nexport type DiscountApplication = Schema.Schema.Type<typeof DiscountApplicationSchema>;\n\nexport type DiscountApplicationType = Schema.Schema.Type<typeof DiscountApplicationTypeSchema>;\n","import * as Schema from \"effect/Schema\";\n\nimport {\n AddressFields,\n DiscountAllocationFields,\n GraphQLAddressSchema,\n GraphQLAttributeSchema,\n GraphQLDiscountAllocationSchema,\n GraphQLMoneyBagSchema,\n GraphQLTaxLineSchema,\n MoneyBagFields,\n type Nodes,\n PageInfoFields,\n TaxLineFields,\n connection,\n emptyText,\n fromGraphQL,\n idRef,\n normalizeAmount,\n pageQuery,\n} from \"../shared\";\nimport {\n DiscountAllocationMethodSchema,\n type DiscountApplication,\n type DiscountApplicationType,\n DiscountTargetSelectionSchema,\n DiscountTargetTypeSchema,\n type Order,\n OrderCancelReasonSchema,\n OrderFinancialStatusSchema,\n} from \"./row\";\n\nconst LineItemFields = `\n id\n name\n title\n variantTitle\n sku\n vendor\n product { id }\n variant { id }\n quantity\n currentQuantity\n taxable\n requiresShipping\n isGiftCard\n originalUnitPriceSet { ${MoneyBagFields} }\n totalDiscountSet { ${MoneyBagFields} }\n taxLines { ${TaxLineFields} }\n discountAllocations { ${DiscountAllocationFields} }\n customAttributes { key value }\n`;\n\nconst ShippingLineFields = `\n id\n title\n code\n source\n carrierIdentifier\n phone\n isRemoved\n originalPriceSet { ${MoneyBagFields} }\n discountedPriceSet { ${MoneyBagFields} }\n currentDiscountedPriceSet { ${MoneyBagFields} }\n taxLines { ${TaxLineFields} }\n discountAllocations { ${DiscountAllocationFields} }\n`;\n\nconst DiscountApplicationFields = `\n __typename\n index\n allocationMethod\n targetSelection\n targetType\n value {\n __typename\n ... on MoneyV2 { amount }\n ... on PricingPercentageValue { percentage }\n }\n ... on DiscountCodeApplication { code }\n ... on ManualDiscountApplication { title description }\n ... on AutomaticDiscountApplication { title }\n ... on ScriptDiscountApplication { title }\n`;\n\nexport const OrderFields = `\n id\n legacyResourceId\n name\n email\n phone\n customer { id }\n customerLocale\n customerAcceptsMarketing\n billingAddress { ${AddressFields} }\n shippingAddress { ${AddressFields} }\n note\n customAttributes { key value }\n tags\n confirmationNumber\n poNumber\n sourceName\n sourceIdentifier\n app { id }\n paymentGatewayNames\n test\n taxesIncluded\n taxExempt\n dutiesIncluded\n estimatedTaxes\n totalWeight\n displayFinancialStatus\n cancelReason\n cancelledAt\n closedAt\n processedAt\n createdAt\n updatedAt\n currencyCode\n presentmentCurrencyCode\n discountCodes\n discountApplications(first: 25) { nodes { ${DiscountApplicationFields} } ${PageInfoFields} }\n subtotalPriceSet { ${MoneyBagFields} }\n currentSubtotalPriceSet { ${MoneyBagFields} }\n totalDiscountsSet { ${MoneyBagFields} }\n currentTotalDiscountsSet { ${MoneyBagFields} }\n totalShippingPriceSet { ${MoneyBagFields} }\n currentShippingPriceSet { ${MoneyBagFields} }\n totalTaxSet { ${MoneyBagFields} }\n currentTotalTaxSet { ${MoneyBagFields} }\n originalTotalDutiesSet { ${MoneyBagFields} }\n currentTotalDutiesSet { ${MoneyBagFields} }\n totalPriceSet { ${MoneyBagFields} }\n currentTotalPriceSet { ${MoneyBagFields} }\n taxLines { ${TaxLineFields} }\n shippingLines(first: 25, includeRemovals: true) { nodes { ${ShippingLineFields} } ${PageInfoFields} }\n lineItems(first: 50) { nodes { ${LineItemFields} } ${PageInfoFields} }\n`;\n\nconst orderConnectionQuery = (name: string, selection: string) => `#graphql\nquery ${name}($id: ID!, $first: Int!, $after: String) {\n node: order(id: $id) {\n connection: ${selection}\n }\n}\n`;\n\nexport const OrderLineItemsQuery = orderConnectionQuery(\n \"AirfoilOrderLineItems\",\n `lineItems(first: $first, after: $after) { nodes { ${LineItemFields} } ${PageInfoFields} }`,\n);\n\nexport const OrderShippingLinesQuery = orderConnectionQuery(\n \"AirfoilOrderShippingLines\",\n `shippingLines(first: $first, after: $after, includeRemovals: true) { nodes { ${ShippingLineFields} } ${PageInfoFields} }`,\n);\n\nexport const OrderDiscountApplicationsQuery = orderConnectionQuery(\n \"AirfoilOrderDiscountApplications\",\n `discountApplications(first: $first, after: $after) { nodes { ${DiscountApplicationFields} } ${PageInfoFields} }`,\n);\n\nexport const GraphQLLineItemsSchema = connection(\n Schema.Struct({\n id: Schema.String,\n name: Schema.String,\n title: Schema.String,\n variantTitle: Schema.NullOr(Schema.String),\n sku: Schema.NullOr(Schema.String),\n vendor: Schema.NullOr(Schema.String),\n product: idRef,\n variant: idRef,\n quantity: Schema.Int,\n currentQuantity: Schema.Int,\n taxable: Schema.Boolean,\n requiresShipping: Schema.Boolean,\n isGiftCard: Schema.Boolean,\n originalUnitPriceSet: GraphQLMoneyBagSchema,\n totalDiscountSet: GraphQLMoneyBagSchema,\n taxLines: Schema.Array(GraphQLTaxLineSchema),\n discountAllocations: Schema.Array(GraphQLDiscountAllocationSchema),\n customAttributes: Schema.Array(GraphQLAttributeSchema),\n }),\n);\n\nexport const GraphQLShippingLinesSchema = connection(\n Schema.Struct({\n id: Schema.NullOr(Schema.String),\n title: Schema.String,\n code: Schema.NullOr(Schema.String),\n source: Schema.NullOr(Schema.String),\n carrierIdentifier: Schema.NullOr(Schema.String),\n phone: Schema.NullOr(Schema.String),\n isRemoved: Schema.Boolean,\n originalPriceSet: GraphQLMoneyBagSchema,\n discountedPriceSet: GraphQLMoneyBagSchema,\n currentDiscountedPriceSet: GraphQLMoneyBagSchema,\n taxLines: Schema.Array(GraphQLTaxLineSchema),\n discountAllocations: Schema.Array(GraphQLDiscountAllocationSchema),\n }),\n);\n\nconst discountApplicationBase = {\n index: Schema.Int,\n allocationMethod: DiscountAllocationMethodSchema,\n targetSelection: DiscountTargetSelectionSchema,\n targetType: DiscountTargetTypeSchema,\n value: Schema.Union([\n Schema.Struct({ __typename: Schema.Literal(\"MoneyV2\"), amount: Schema.String }),\n Schema.Struct({\n __typename: Schema.Literal(\"PricingPercentageValue\"),\n percentage: Schema.Number,\n }),\n ]),\n};\n\nexport const GraphQLDiscountApplicationsSchema = connection(\n Schema.Union([\n Schema.Struct({\n __typename: Schema.Literal(\"DiscountCodeApplication\"),\n code: Schema.String,\n ...discountApplicationBase,\n }),\n Schema.Struct({\n __typename: Schema.Literal(\"ManualDiscountApplication\"),\n title: Schema.String,\n description: Schema.NullOr(Schema.String),\n ...discountApplicationBase,\n }),\n Schema.Struct({\n __typename: Schema.Literals([\"AutomaticDiscountApplication\", \"ScriptDiscountApplication\"]),\n title: Schema.String,\n ...discountApplicationBase,\n }),\n ]),\n);\n\nexport const GraphQLOrderNodeSchema = Schema.Struct({\n id: Schema.String,\n legacyResourceId: Schema.String,\n name: Schema.String,\n email: Schema.NullOr(Schema.String),\n phone: Schema.NullOr(Schema.String),\n customer: idRef,\n customerLocale: Schema.NullOr(Schema.String),\n customerAcceptsMarketing: Schema.Boolean,\n billingAddress: Schema.NullOr(GraphQLAddressSchema),\n shippingAddress: Schema.NullOr(GraphQLAddressSchema),\n note: Schema.NullOr(Schema.String),\n customAttributes: Schema.Array(GraphQLAttributeSchema),\n tags: Schema.Array(Schema.String),\n confirmationNumber: Schema.NullOr(Schema.String),\n poNumber: Schema.NullOr(Schema.String),\n sourceName: Schema.NullOr(Schema.String),\n sourceIdentifier: Schema.NullOr(Schema.String),\n app: idRef,\n paymentGatewayNames: Schema.Array(Schema.String),\n test: Schema.Boolean,\n taxesIncluded: Schema.Boolean,\n taxExempt: Schema.Boolean,\n dutiesIncluded: Schema.Boolean,\n estimatedTaxes: Schema.Boolean,\n totalWeight: Schema.NullOr(Schema.NumberFromString),\n displayFinancialStatus: Schema.NullOr(OrderFinancialStatusSchema),\n cancelReason: Schema.NullOr(OrderCancelReasonSchema),\n cancelledAt: Schema.NullOr(Schema.DateFromString),\n closedAt: Schema.NullOr(Schema.DateFromString),\n processedAt: Schema.DateFromString,\n createdAt: Schema.DateFromString,\n updatedAt: Schema.DateFromString,\n currencyCode: Schema.String,\n presentmentCurrencyCode: Schema.String,\n discountCodes: Schema.Array(Schema.String),\n discountApplications: GraphQLDiscountApplicationsSchema,\n subtotalPriceSet: Schema.NullOr(GraphQLMoneyBagSchema),\n currentSubtotalPriceSet: GraphQLMoneyBagSchema,\n totalDiscountsSet: Schema.NullOr(GraphQLMoneyBagSchema),\n currentTotalDiscountsSet: GraphQLMoneyBagSchema,\n totalShippingPriceSet: GraphQLMoneyBagSchema,\n currentShippingPriceSet: GraphQLMoneyBagSchema,\n totalTaxSet: Schema.NullOr(GraphQLMoneyBagSchema),\n currentTotalTaxSet: GraphQLMoneyBagSchema,\n originalTotalDutiesSet: Schema.NullOr(GraphQLMoneyBagSchema),\n currentTotalDutiesSet: Schema.NullOr(GraphQLMoneyBagSchema),\n totalPriceSet: GraphQLMoneyBagSchema,\n currentTotalPriceSet: GraphQLMoneyBagSchema,\n taxLines: Schema.Array(GraphQLTaxLineSchema),\n shippingLines: GraphQLShippingLinesSchema,\n lineItems: GraphQLLineItemsSchema,\n});\n\nexport type GraphQLOrderNode = Schema.Schema.Type<typeof GraphQLOrderNodeSchema>;\n\nconst discountApplicationType = {\n DiscountCodeApplication: \"DISCOUNT_CODE\",\n ManualDiscountApplication: \"MANUAL\",\n AutomaticDiscountApplication: \"AUTOMATIC\",\n ScriptDiscountApplication: \"SCRIPT\",\n} as const satisfies Record<string, DiscountApplicationType>;\n\nexport const fromOrderNode = (\n node: GraphQLOrderNode,\n nested: {\n readonly discountApplications: Nodes<typeof GraphQLDiscountApplicationsSchema>;\n readonly shippingLines: Nodes<typeof GraphQLShippingLinesSchema>;\n readonly lineItems: Nodes<typeof GraphQLLineItemsSchema>;\n },\n): Order => ({\n id: node.id,\n legacyResourceId: node.legacyResourceId,\n name: node.name,\n email: emptyText(node.email),\n phone: emptyText(node.phone),\n customerId: node.customer?.id ?? \"\",\n customerLocale: emptyText(node.customerLocale),\n customerAcceptsMarketing: node.customerAcceptsMarketing,\n billingAddress: node.billingAddress ? fromGraphQL.address(node.billingAddress) : null,\n shippingAddress: node.shippingAddress ? fromGraphQL.address(node.shippingAddress) : null,\n note: emptyText(node.note),\n customAttributes: node.customAttributes,\n tags: node.tags,\n confirmationNumber: emptyText(node.confirmationNumber),\n poNumber: emptyText(node.poNumber),\n sourceName: emptyText(node.sourceName),\n sourceIdentifier: emptyText(node.sourceIdentifier),\n appId: node.app?.id ?? \"\",\n paymentGatewayNames: node.paymentGatewayNames,\n test: node.test,\n taxesIncluded: node.taxesIncluded,\n taxExempt: node.taxExempt,\n dutiesIncluded: node.dutiesIncluded,\n estimatedTaxes: node.estimatedTaxes,\n totalWeight: node.totalWeight,\n displayFinancialStatus: node.displayFinancialStatus,\n cancelReason: node.cancelReason,\n cancelledAt: node.cancelledAt,\n closedAt: node.closedAt,\n processedAt: node.processedAt,\n createdAt: node.createdAt,\n updatedAt: node.updatedAt,\n currencyCode: node.currencyCode,\n presentmentCurrencyCode: node.presentmentCurrencyCode,\n discountCodes: node.discountCodes,\n discountApplications: nested.discountApplications.map(\n (application): DiscountApplication => ({\n index: application.index,\n type: discountApplicationType[application.__typename],\n code: application.__typename === \"DiscountCodeApplication\" ? application.code : null,\n title: application.__typename === \"DiscountCodeApplication\" ? null : application.title,\n description:\n application.__typename === \"ManualDiscountApplication\" ? application.description : null,\n allocationMethod: application.allocationMethod,\n targetSelection: application.targetSelection,\n targetType: application.targetType,\n valueType: application.value.__typename === \"MoneyV2\" ? \"FIXED_AMOUNT\" : \"PERCENTAGE\",\n value:\n application.value.__typename === \"MoneyV2\"\n ? normalizeAmount(application.value.amount)\n : normalizeAmount(String(application.value.percentage)),\n }),\n ),\n subtotalPriceSet: node.subtotalPriceSet ? fromGraphQL.money(node.subtotalPriceSet) : null,\n currentSubtotalPriceSet: fromGraphQL.money(node.currentSubtotalPriceSet),\n totalDiscountsSet: node.totalDiscountsSet ? fromGraphQL.money(node.totalDiscountsSet) : null,\n currentTotalDiscountsSet: fromGraphQL.money(node.currentTotalDiscountsSet),\n totalShippingPriceSet: fromGraphQL.money(node.totalShippingPriceSet),\n currentShippingPriceSet: fromGraphQL.money(node.currentShippingPriceSet),\n totalTaxSet: node.totalTaxSet ? fromGraphQL.money(node.totalTaxSet) : null,\n currentTotalTaxSet: fromGraphQL.money(node.currentTotalTaxSet),\n originalTotalDutiesSet: node.originalTotalDutiesSet\n ? fromGraphQL.money(node.originalTotalDutiesSet)\n : null,\n currentTotalDutiesSet: node.currentTotalDutiesSet\n ? fromGraphQL.money(node.currentTotalDutiesSet)\n : null,\n totalPriceSet: fromGraphQL.money(node.totalPriceSet),\n currentTotalPriceSet: fromGraphQL.money(node.currentTotalPriceSet),\n taxLines: node.taxLines.map(fromGraphQL.taxLine),\n shippingLines: nested.shippingLines.map((line) => ({\n id: line.id,\n title: line.title,\n code: line.code,\n source: line.source,\n carrierIdentifier: line.carrierIdentifier,\n phone: line.phone,\n isRemoved: line.isRemoved,\n originalPriceSet: fromGraphQL.money(line.originalPriceSet),\n discountedPriceSet: fromGraphQL.money(line.discountedPriceSet),\n currentDiscountedPriceSet: fromGraphQL.money(line.currentDiscountedPriceSet),\n taxLines: line.taxLines.map(fromGraphQL.taxLine),\n discountAllocations: line.discountAllocations.map(fromGraphQL.discountAllocation),\n })),\n lineItems: nested.lineItems.map((item) => ({\n id: item.id,\n name: item.name,\n title: item.title,\n variantTitle: item.variantTitle,\n sku: item.sku,\n vendor: item.vendor,\n productId: item.product?.id ?? null,\n variantId: item.variant?.id ?? null,\n quantity: item.quantity,\n currentQuantity: item.currentQuantity,\n taxable: item.taxable,\n requiresShipping: item.requiresShipping,\n isGiftCard: item.isGiftCard,\n originalUnitPriceSet: fromGraphQL.money(item.originalUnitPriceSet),\n totalDiscountSet: fromGraphQL.money(item.totalDiscountSet),\n taxLines: item.taxLines.map(fromGraphQL.taxLine),\n discountAllocations: item.discountAllocations.map(fromGraphQL.discountAllocation),\n customAttributes: item.customAttributes,\n })),\n});\n\nexport const OrdersQuery = pageQuery(\"AirfoilOrders\", \"orders\", OrderFields);\n\nexport const GraphQLOrdersDataSchema = Schema.Struct({\n orders: connection(GraphQLOrderNodeSchema),\n});\n","import * as Schema from \"effect/Schema\";\n\nimport { connection, pageQuery } from \"../shared\";\nimport {\n type Product,\n ProductOptionSchema,\n ProductStatusSchema,\n ProductVariantInventoryPolicySchema,\n} from \"./row\";\n\nconst ProductVariantFields = `\n id\n legacyResourceId\n title\n sku\n barcode\n price\n compareAtPrice\n inventoryPolicy\n taxable\n createdAt\n updatedAt\n`;\n\nconst ProductFields = `\n id\n legacyResourceId\n title\n handle\n descriptionHtml\n productType\n vendor\n status\n tags\n createdAt\n updatedAt\n publishedAt\n templateSuffix\n featuredMedia { ... on MediaImage { image { url altText } } }\n options(first: 100) { id name position values }\n variants(first: 25) { nodes { ${ProductVariantFields} } pageInfo { hasNextPage endCursor } }\n`;\n\nexport const ProductByIdQuery = `#graphql\nquery AirfoilProductById($id: ID!) {\n product(id: $id) { ${ProductFields} }\n}\n`;\n\nexport const ProductVariantsQuery = `#graphql\nquery AirfoilProductVariants($id: ID!, $first: Int!, $after: String) {\n node: product(id: $id) {\n connection: variants(first: $first, after: $after) {\n nodes { ${ProductVariantFields} }\n pageInfo { hasNextPage endCursor }\n }\n }\n}\n`;\n\nexport const ProductsQuery = pageQuery(\"AirfoilProducts\", \"products\", ProductFields);\n\nexport const GraphQLProductVariantNodeSchema = Schema.Struct({\n id: Schema.String,\n legacyResourceId: Schema.String,\n title: Schema.String,\n sku: Schema.NullOr(Schema.String),\n barcode: Schema.NullOr(Schema.String),\n price: Schema.String,\n compareAtPrice: Schema.NullOr(Schema.String),\n inventoryPolicy: ProductVariantInventoryPolicySchema,\n taxable: Schema.Boolean,\n createdAt: Schema.DateFromString,\n updatedAt: Schema.DateFromString,\n});\n\nconst GraphQLFeaturedMediaSchema = Schema.Struct({\n image: Schema.optional(\n Schema.NullOr(\n Schema.Struct({\n url: Schema.String,\n altText: Schema.NullOr(Schema.String),\n }),\n ),\n ),\n});\n\nconst GraphQLProductNodeSchema = Schema.Struct({\n id: Schema.String,\n legacyResourceId: Schema.String,\n title: Schema.String,\n handle: Schema.String,\n descriptionHtml: Schema.String,\n productType: Schema.String,\n vendor: Schema.String,\n status: ProductStatusSchema,\n tags: Schema.Array(Schema.String),\n createdAt: Schema.DateFromString,\n updatedAt: Schema.DateFromString,\n publishedAt: Schema.NullOr(Schema.DateFromString),\n templateSuffix: Schema.NullOr(Schema.String),\n featuredMedia: Schema.NullOr(GraphQLFeaturedMediaSchema),\n options: Schema.Array(ProductOptionSchema),\n variants: connection(GraphQLProductVariantNodeSchema),\n});\n\nexport const GraphQLProductsDataSchema = Schema.Struct({\n products: connection(GraphQLProductNodeSchema),\n});\n\nexport const GraphQLProductByIdDataSchema = Schema.Struct({\n product: Schema.NullOr(GraphQLProductNodeSchema),\n});\n\nexport type GraphQLProductNode = Schema.Schema.Type<typeof GraphQLProductNodeSchema>;\n\ntype GraphQLProductVariantNode = Schema.Schema.Type<typeof GraphQLProductVariantNodeSchema>;\n\nexport const normalizeProductNode = (\n node: GraphQLProductNode,\n variants: ReadonlyArray<GraphQLProductVariantNode>,\n): Product => ({\n id: node.id,\n legacyResourceId: node.legacyResourceId,\n title: node.title,\n handle: node.handle,\n descriptionHtml: node.descriptionHtml,\n productType: node.productType,\n vendor: node.vendor,\n status: node.status,\n tags: node.tags,\n createdAt: node.createdAt,\n updatedAt: node.updatedAt,\n publishedAt: node.publishedAt,\n templateSuffix: node.templateSuffix ?? \"\",\n featuredMedia:\n node.featuredMedia === null || node.featuredMedia.image === undefined\n ? null\n : { image: node.featuredMedia.image },\n options: node.options,\n variants,\n});\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport * as Schema from \"effect/Schema\";\n\nimport { field, moneyBag } from \"../shared\";\n\nexport const TransactionKindSchema = Schema.Literals([\n \"SALE\",\n \"CAPTURE\",\n \"AUTHORIZATION\",\n \"VOID\",\n \"REFUND\",\n \"CHANGE\",\n \"EMV_AUTHORIZATION\",\n \"SUGGESTED_REFUND\",\n]);\n\nexport const TransactionStatusSchema = Schema.Literals([\n \"SUCCESS\",\n \"FAILURE\",\n \"PENDING\",\n \"ERROR\",\n \"AWAITING_RESPONSE\",\n \"UNKNOWN\",\n]);\n\nexport const RestockTypeSchema = Schema.Literals([\n \"RETURN\",\n \"CANCEL\",\n \"LEGACY_RESTOCK\",\n \"NO_RESTOCK\",\n]);\n\nexport const RefundSchema = Schema.Struct({\n id: Schema.String.pipe(field(1, \"Unique refund identifier.\")),\n legacyResourceId: Schema.String.pipe(field(2, \"Numeric refund identifier stored as text.\")),\n orderId: Schema.String.pipe(field(3, \"Refunded order identifier.\")),\n note: Schema.NullOr(Schema.String).pipe(field(4, \"Refund note.\")),\n createdAt: Schema.NullOr(Schema.Date).pipe(field(5, \"Time when the refund was created.\")),\n processedAt: Schema.Date.pipe(field(6, \"Time when the refund was processed.\")),\n transactions: Schema.Array(\n Schema.Struct({\n id: Schema.String.pipe(field(101, \"Unique transaction identifier.\")),\n kind: TransactionKindSchema.pipe(field(102, \"Kind of transaction.\")),\n status: TransactionStatusSchema.pipe(field(103, \"Status reported for the transaction.\")),\n amount: Schema.String.pipe(field(104, \"Amount in the customer currency.\")),\n currencyCode: Schema.String.pipe(field(105, \"Customer currency code.\")),\n gateway: Schema.NullOr(Schema.String).pipe(field(106, \"Payment gateway.\")),\n test: Schema.Boolean.pipe(field(107, \"Whether the transaction is a test.\")),\n errorCode: Schema.NullOr(Schema.String).pipe(field(108, \"Gateway error code.\")),\n parentTransactionId: Schema.NullOr(Schema.String).pipe(\n field(109, \"Transaction this one refunds.\"),\n ),\n createdAt: Schema.Date.pipe(field(110, \"Time when the transaction was created.\")),\n processedAt: Schema.NullOr(Schema.Date).pipe(\n field(111, \"Time when the transaction was processed.\"),\n ),\n }).annotate({ fieldId: 100 }),\n ).pipe(field(7, \"Transactions that move the refunded money.\")),\n refundLineItems: Schema.Array(\n Schema.Struct({\n id: Schema.NullOr(Schema.String).pipe(field(201, \"Unique refund line item identifier.\")),\n lineItemId: Schema.String.pipe(field(202, \"Refunded order line item identifier.\")),\n quantity: Schema.Int.pipe(field(203, \"Quantity refunded.\")),\n restockType: RestockTypeSchema.pipe(field(204, \"How the items were restocked.\")),\n locationId: Schema.NullOr(Schema.String).pipe(field(205, \"Restock location identifier.\")),\n subtotalSet: moneyBag(210).pipe(field(206, \"Refunded subtotal.\")),\n totalTaxSet: moneyBag(220).pipe(field(207, \"Refunded tax.\")),\n }).annotate({ fieldId: 200 }),\n ).pipe(field(8, \"Refunded order line items.\")),\n refundShippingLines: Schema.Array(\n Schema.Struct({\n id: Schema.String.pipe(field(301, \"Unique refund shipping line identifier.\")),\n shippingLineId: Schema.NullOr(Schema.String).pipe(field(302, \"Refunded shipping line.\")),\n subtotalAmountSet: moneyBag(310).pipe(field(303, \"Refunded shipping amount.\")),\n }).annotate({ fieldId: 300 }),\n ).pipe(field(9, \"Refunded shipping.\")),\n orderAdjustments: Schema.Array(\n Schema.Struct({\n id: Schema.String.pipe(field(401, \"Unique order adjustment identifier.\")),\n reason: Schema.NullOr(Schema.String).pipe(field(402, \"Reason for the adjustment.\")),\n amountSet: moneyBag(410).pipe(field(403, \"Adjustment amount.\")),\n taxAmountSet: moneyBag(420).pipe(field(404, \"Tax on the adjustment.\")),\n }).annotate({ fieldId: 400 }),\n ).pipe(field(10, \"Refund discrepancy adjustments.\")),\n duties: Schema.Array(\n Schema.Struct({\n dutyId: Schema.NullOr(Schema.String).pipe(field(501, \"Refunded duty identifier.\")),\n amountSet: moneyBag(510).pipe(field(502, \"Refunded duty amount.\")),\n }).annotate({ fieldId: 500 }),\n ).pipe(field(11, \"Refunded duties.\")),\n})\n .annotate({\n description: \"Refunds on orders in a Shopify store.\",\n })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type Refund = Schema.Schema.Type<typeof RefundSchema>;\n","import * as Schema from \"effect/Schema\";\n\nimport {\n GraphQLMoneyBagSchema,\n MoneyBagFields,\n type Nodes,\n PageInfoFields,\n connection,\n fromGraphQL,\n idRef,\n normalizeAmount,\n pageQuery,\n} from \"../shared\";\nimport {\n type Refund,\n RestockTypeSchema,\n TransactionKindSchema,\n TransactionStatusSchema,\n} from \"./row\";\n\nconst TransactionFields = `id kind status gateway test errorCode parentTransaction { id } createdAt processedAt amountSet { ${MoneyBagFields} }`;\n\nconst RefundLineItemFields = `id lineItem { id } quantity restockType location { id } subtotalSet { ${MoneyBagFields} } totalTaxSet { ${MoneyBagFields} }`;\n\nconst RefundShippingLineFields = `id shippingLine { id } subtotalAmountSet { ${MoneyBagFields} }`;\n\nconst OrderAdjustmentFields = `id reason amountSet { ${MoneyBagFields} } taxAmountSet { ${MoneyBagFields} }`;\n\nexport const RefundFields = `\n id\n legacyResourceId\n note\n createdAt\n processedAt\n duties { originalDuty { id } amountSet { ${MoneyBagFields} } }\n transactions(first: 10) { nodes { ${TransactionFields} } ${PageInfoFields} }\n refundLineItems(first: 50) { nodes { ${RefundLineItemFields} } ${PageInfoFields} }\n refundShippingLines(first: 10) { nodes { ${RefundShippingLineFields} } ${PageInfoFields} }\n orderAdjustments(first: 10) { nodes { ${OrderAdjustmentFields} } ${PageInfoFields} }\n`;\n\nconst refundConnectionQuery = (name: string, selection: string) => `#graphql\nquery ${name}($id: ID!, $first: Int!, $after: String) {\n node: refund(id: $id) {\n connection: ${selection}\n }\n}\n`;\n\nexport const RefundTransactionsQuery = refundConnectionQuery(\n \"AirfoilRefundTransactions\",\n `transactions(first: $first, after: $after) { nodes { ${TransactionFields} } ${PageInfoFields} }`,\n);\n\nexport const RefundLineItemsQuery = refundConnectionQuery(\n \"AirfoilRefundLineItems\",\n `refundLineItems(first: $first, after: $after) { nodes { ${RefundLineItemFields} } ${PageInfoFields} }`,\n);\n\nexport const RefundShippingLinesQuery = refundConnectionQuery(\n \"AirfoilRefundShippingLines\",\n `refundShippingLines(first: $first, after: $after) { nodes { ${RefundShippingLineFields} } ${PageInfoFields} }`,\n);\n\nexport const RefundOrderAdjustmentsQuery = refundConnectionQuery(\n \"AirfoilRefundOrderAdjustments\",\n `orderAdjustments(first: $first, after: $after) { nodes { ${OrderAdjustmentFields} } ${PageInfoFields} }`,\n);\n\nexport const GraphQLRefundTransactionsSchema = connection(\n Schema.Struct({\n id: Schema.String,\n kind: TransactionKindSchema,\n status: TransactionStatusSchema,\n gateway: Schema.NullOr(Schema.String),\n test: Schema.Boolean,\n errorCode: Schema.NullOr(Schema.String),\n parentTransaction: idRef,\n createdAt: Schema.DateFromString,\n processedAt: Schema.NullOr(Schema.DateFromString),\n amountSet: GraphQLMoneyBagSchema,\n }),\n);\n\nexport const GraphQLRefundLineItemsSchema = connection(\n Schema.Struct({\n id: Schema.NullOr(Schema.String),\n lineItem: Schema.Struct({ id: Schema.String }),\n quantity: Schema.Int,\n restockType: RestockTypeSchema,\n location: idRef,\n subtotalSet: GraphQLMoneyBagSchema,\n totalTaxSet: GraphQLMoneyBagSchema,\n }),\n);\n\nexport const GraphQLRefundShippingLinesSchema = connection(\n Schema.Struct({\n id: Schema.String,\n shippingLine: idRef,\n subtotalAmountSet: GraphQLMoneyBagSchema,\n }),\n);\n\nexport const GraphQLOrderAdjustmentsSchema = connection(\n Schema.Struct({\n id: Schema.String,\n reason: Schema.NullOr(Schema.String),\n amountSet: GraphQLMoneyBagSchema,\n taxAmountSet: GraphQLMoneyBagSchema,\n }),\n);\n\nexport const GraphQLRefundNodeSchema = Schema.Struct({\n id: Schema.String,\n legacyResourceId: Schema.String,\n note: Schema.NullOr(Schema.String),\n createdAt: Schema.NullOr(Schema.DateFromString),\n processedAt: Schema.DateFromString,\n duties: Schema.NullOr(\n Schema.Array(Schema.Struct({ originalDuty: idRef, amountSet: GraphQLMoneyBagSchema })),\n ),\n transactions: GraphQLRefundTransactionsSchema,\n refundLineItems: GraphQLRefundLineItemsSchema,\n refundShippingLines: GraphQLRefundShippingLinesSchema,\n orderAdjustments: GraphQLOrderAdjustmentsSchema,\n});\n\nexport type GraphQLRefundNode = Schema.Schema.Type<typeof GraphQLRefundNodeSchema>;\n\nexport const fromRefundNode = (\n orderId: string,\n node: GraphQLRefundNode,\n nested: {\n readonly transactions: Nodes<typeof GraphQLRefundTransactionsSchema>;\n readonly refundLineItems: Nodes<typeof GraphQLRefundLineItemsSchema>;\n readonly refundShippingLines: Nodes<typeof GraphQLRefundShippingLinesSchema>;\n readonly orderAdjustments: Nodes<typeof GraphQLOrderAdjustmentsSchema>;\n },\n): Refund => ({\n id: node.id,\n legacyResourceId: node.legacyResourceId,\n orderId,\n note: node.note ?? \"\",\n createdAt: node.createdAt,\n processedAt: node.processedAt,\n transactions: nested.transactions.map((transaction) => ({\n id: transaction.id,\n kind: transaction.kind,\n status: transaction.status,\n amount: normalizeAmount(transaction.amountSet.presentmentMoney.amount),\n currencyCode: transaction.amountSet.presentmentMoney.currencyCode,\n gateway: transaction.gateway,\n test: transaction.test,\n errorCode: transaction.errorCode,\n parentTransactionId: transaction.parentTransaction?.id ?? null,\n createdAt: transaction.createdAt,\n processedAt: transaction.processedAt,\n })),\n refundLineItems: nested.refundLineItems.map((item) => ({\n id: item.id,\n lineItemId: item.lineItem.id,\n quantity: item.quantity,\n restockType: item.restockType,\n locationId: item.location?.id ?? null,\n subtotalSet: fromGraphQL.money(item.subtotalSet),\n totalTaxSet: fromGraphQL.money(item.totalTaxSet),\n })),\n refundShippingLines: nested.refundShippingLines.map((line) => ({\n id: line.id,\n shippingLineId: line.shippingLine?.id ?? null,\n subtotalAmountSet: fromGraphQL.money(line.subtotalAmountSet),\n })),\n orderAdjustments: nested.orderAdjustments.map((adjustment) => ({\n id: adjustment.id,\n reason: adjustment.reason,\n amountSet: fromGraphQL.money(adjustment.amountSet),\n taxAmountSet: fromGraphQL.money(adjustment.taxAmountSet),\n })),\n duties: (node.duties ?? []).map((duty) => ({\n dutyId: duty.originalDuty?.id ?? null,\n amountSet: fromGraphQL.money(duty.amountSet),\n })),\n});\n\nexport const OrderRefundsQuery = pageQuery(\n \"AirfoilOrderRefunds\",\n \"orders\",\n `id refunds { ${RefundFields} }`,\n);\n\nexport const GraphQLOrderRefundsDataSchema = Schema.Struct({\n orders: connection(\n Schema.Struct({ id: Schema.String, refunds: Schema.Array(GraphQLRefundNodeSchema) }),\n ),\n});\n","import { Auth } from \"@useairfoil/connector-kit\";\nimport { Config, Context, Data, Duration, Effect, Layer, Redacted, Schema } from \"effect\";\nimport { HttpClient, HttpClientRequest, HttpClientResponse } from \"effect/http\";\n\nimport type { ShopifyConfig } from \"../manifest\";\n\ntype ShopifyAuthConfig = Pick<ShopifyConfig, \"shopDomain\" | \"clientId\" | \"clientSecret\">;\n\nexport type ShopifyAuthErrorReason = \"shop_not_permitted\" | \"invalid_client\" | \"exchange_failed\";\n\nexport class ShopifyAuthError extends Data.TaggedError(\"ShopifyAuthError\")<{\n readonly reason: ShopifyAuthErrorReason;\n readonly message: string;\n}> {}\n\nexport type ShopifyAuthService = Auth.TokenCache<ShopifyAuthError>;\n\nexport class ShopifyAuth extends Context.Service<ShopifyAuth, ShopifyAuthService>()(\n \"@useairfoil/producer-shopify/ShopifyAuth\",\n) {}\n\nconst TokenResponseSchema = Schema.Struct({\n access_token: Schema.String,\n expires_in: Schema.Number,\n});\n\nconst ErrorResponseSchema = Schema.Struct({\n error: Schema.Literals([\"shop_not_permitted\", \"invalid_client\"]),\n});\n\nexport const shopUrl = (shopDomain: string): string =>\n `https://${shopDomain.replace(/^https?:\\/\\//i, \"\").replace(/\\/+$/g, \"\")}`;\n\nconst errorMessages: Record<ShopifyAuthErrorReason, string> = {\n shop_not_permitted: \"The Shopify app and store must belong to the same Shopify organization\",\n invalid_client: \"The Shopify client ID or client secret is invalid\",\n exchange_failed: \"Shopify authentication failed\",\n};\n\nconst errorFor = (reason: ShopifyAuthErrorReason): ShopifyAuthError =>\n new ShopifyAuthError({ reason, message: errorMessages[reason] });\n\nconst decodeRejectedResponse = (\n response: HttpClientResponse.HttpClientResponse,\n): Effect.Effect<ShopifyAuthErrorReason> =>\n HttpClientResponse.schemaBodyJson(ErrorResponseSchema)(response).pipe(\n Effect.map((body) => body.error),\n Effect.catch(() => Effect.succeed<ShopifyAuthErrorReason>(\"exchange_failed\")),\n );\n\nexport const make = Effect.fnUntraced(function* (config: ShopifyAuthConfig) {\n const client = yield* HttpClient.HttpClient;\n const endpoint = `${shopUrl(config.shopDomain)}/admin/oauth/access_token`;\n\n return yield* Auth.makeTokenCache({\n acquire: Effect.scoped(\n Effect.gen(function* () {\n const request = HttpClientRequest.post(endpoint).pipe(\n HttpClientRequest.bodyUrlParams({\n grant_type: \"client_credentials\",\n client_id: config.clientId,\n client_secret: Redacted.value(config.clientSecret),\n }),\n );\n const response = yield* client\n .execute(request)\n .pipe(Effect.mapError(() => errorFor(\"exchange_failed\")));\n const successfulResponse = yield* HttpClientResponse.filterStatusOk(response).pipe(\n Effect.catchTag(\"HttpClientError\", () =>\n decodeRejectedResponse(response).pipe(\n Effect.flatMap((reason) => Effect.fail(errorFor(reason))),\n ),\n ),\n );\n const body = yield* HttpClientResponse.schemaBodyJson(TokenResponseSchema)(\n successfulResponse,\n ).pipe(Effect.mapError(() => errorFor(\"exchange_failed\")));\n\n return {\n value: Redacted.make(body.access_token),\n expiresIn: Duration.seconds(body.expires_in),\n };\n }),\n ),\n });\n});\n\nexport const layer = (\n config: ShopifyAuthConfig,\n): Layer.Layer<ShopifyAuth, never, HttpClient.HttpClient> =>\n Layer.effect(ShopifyAuth)(make(config));\n\nexport const layerConfig = (\n config: Config.Wrap<ShopifyAuthConfig>,\n): Layer.Layer<ShopifyAuth, Config.ConfigError, HttpClient.HttpClient> =>\n Layer.unwrap(Config.unwrap(config).pipe(Effect.map(layer)));\n","import { Metrics } from \"@useairfoil/connector-kit\";\nimport { Duration, Effect, Predicate, Schedule } from \"effect\";\nimport { HttpClientResponse } from \"effect/http\";\n\nimport { manifest } from \"../manifest\";\n\n// Effect exports the response type ID, not a guard.\nconst isResponse = (value: unknown): value is HttpClientResponse.HttpClientResponse =>\n Predicate.hasProperty(value, HttpClientResponse.TypeId);\n\nexport const retrySchedule = (options: {\n readonly maxRetries: number;\n readonly baseDelay: Duration.Duration;\n}) =>\n Metrics.retrySchedule({\n connector: manifest.name,\n baseDelay: options.baseDelay,\n times: options.maxRetries,\n }).pipe(\n Schedule.modifyDelay(({ input, duration }) => {\n if (!isResponse(input) || input.status !== 429) return Effect.succeed(duration);\n const seconds = Number(input.headers[\"retry-after\"]);\n return Effect.succeed(Number.isFinite(seconds) ? Duration.seconds(seconds) : duration);\n }),\n );\n","import { ConnectorError, Metrics, Telemetry } from \"@useairfoil/connector-kit\";\nimport { Data, Duration, Effect, Option, Redacted, Schedule, Schema } from \"effect\";\nimport { HttpClient, HttpClientRequest } from \"effect/http\";\n\nimport { manifest, type ShopifyConfig } from \"../manifest\";\nimport * as ShopifyAuth from \"./auth\";\nimport { retrySchedule } from \"./http\";\n\n// Keep this version aligned with the queries and webhook schemas.\nexport const SHOPIFY_API_VERSION = \"2026-07\";\n\nconst maxRetries = 5;\nconst retryBaseDelay = Duration.millis(500);\nconst requestTimeout = Duration.minutes(2);\n\n// Shopify reports GraphQL throttling in HTTP 200 responses.\n// https://shopify.dev/docs/api/usage/limits\nconst ThrottleStatusSchema = Schema.Struct({\n maximumAvailable: Schema.Number,\n currentlyAvailable: Schema.Number,\n restoreRate: Schema.Number,\n});\n\nconst GraphQLResponseSchema = Schema.Struct({\n data: Schema.optional(Schema.Unknown),\n errors: Schema.optional(\n Schema.Array(\n Schema.Struct({\n extensions: Schema.optional(Schema.Struct({ code: Schema.optional(Schema.String) })),\n }),\n ),\n ),\n extensions: Schema.optional(\n Schema.Struct({\n cost: Schema.optional(\n Schema.Struct({\n requestedQueryCost: Schema.optional(Schema.Number),\n throttleStatus: Schema.optional(ThrottleStatusSchema),\n }),\n ),\n }),\n ),\n});\n\ntype GraphQLResponse = Schema.Schema.Type<typeof GraphQLResponseSchema>;\n\nconst retryableCodes = [\"THROTTLED\", \"INTERNAL_SERVER_ERROR\"] as const;\n\n/** How long Shopify needs to restore the query's cost, when it says so. */\nconst throttleWait = (response: GraphQLResponse): Option.Option<Duration.Duration> => {\n const cost = response.extensions?.cost;\n const status = cost?.throttleStatus;\n if (cost?.requestedQueryCost === undefined || status === undefined) return Option.none();\n const deficit = cost.requestedQueryCost - status.currentlyAvailable;\n return Option.some(Duration.millis(Math.ceil((deficit / status.restoreRate) * 1000)));\n};\n\nclass Retryable extends Data.TaggedError(\"Retryable\")<{\n readonly code: (typeof retryableCodes)[number];\n readonly wait: Option.Option<Duration.Duration>;\n readonly body: unknown;\n}> {}\n\nexport const make = Effect.fnUntraced(function* (config: ShopifyConfig) {\n const auth = yield* ShopifyAuth.ShopifyAuth;\n const client = (yield* HttpClient.HttpClient).pipe(\n HttpClient.mapRequestEffect((request) =>\n auth.get.pipe(\n Effect.map((token) =>\n HttpClientRequest.setHeader(request, \"X-Shopify-Access-Token\", Redacted.value(token)),\n ),\n ),\n ),\n HttpClient.mapRequest(HttpClientRequest.acceptJson),\n HttpClient.retryTransient({\n schedule: retrySchedule({ maxRetries, baseDelay: retryBaseDelay }),\n }),\n );\n const endpoint = `${ShopifyAuth.shopUrl(config.shopDomain)}/admin/api/${SHOPIFY_API_VERSION}/graphql.json`;\n\n // A throttled query waits until Shopify restores its cost. Others back off.\n const graphqlRetrySchedule = Schedule.exponential(retryBaseDelay).pipe(\n Schedule.jittered,\n Schedule.upTo({ times: maxRetries }),\n Schedule.modifyDelay(({ input, duration }) =>\n Effect.succeed(\n input instanceof Retryable\n ? Option.match(input.wait, {\n onNone: () => duration,\n onSome: (wait) => Duration.max(wait, retryBaseDelay),\n })\n : duration,\n ),\n ),\n );\n\n const fetchGraphQL = <A>(options: {\n readonly operationName: string;\n readonly query: string;\n readonly variables?: Record<string, unknown>;\n readonly schema: Schema.Decoder<A>;\n }): Effect.Effect<A, ConnectorError> => {\n const fail = (message: string, cause: unknown, annotation: string) =>\n Effect.logWarning(message).pipe(\n Effect.annotateLogs({\n operationName: options.operationName,\n body: JSON.stringify(cause),\n }),\n Effect.andThen(Telemetry.annotateError(annotation, cause)),\n Effect.andThen(Effect.fail(new ConnectorError({ message, cause }))),\n );\n\n const decodeError = (error: Schema.SchemaError) =>\n Telemetry.annotateError(\"api_decode\", error).pipe(\n Effect.andThen(\n Effect.fail(\n new ConnectorError({\n message: \"Shopify GraphQL response schema decode failed\",\n cause: error,\n }),\n ),\n ),\n );\n\n const attempt = Effect.gen(function* () {\n const request = HttpClientRequest.post(endpoint).pipe(\n HttpClientRequest.bodyJsonUnsafe({\n query: options.query,\n variables: options.variables ?? {},\n }),\n );\n const response = yield* client.execute(request).pipe(\n Effect.tapError((error) => Telemetry.annotateError(\"api_http\", error)),\n Effect.mapError((error) =>\n error._tag === \"ShopifyAuthError\"\n ? new ConnectorError({ message: error.message, cause: error })\n : new ConnectorError({ message: \"Shopify GraphQL request failed\", cause: error }),\n ),\n );\n const body = yield* response.json.pipe(\n Effect.tapError((error) => Telemetry.annotateError(\"api_json\", error)),\n Effect.mapError(\n (error) =>\n new ConnectorError({ message: \"Shopify GraphQL returned invalid JSON\", cause: error }),\n ),\n );\n\n if (response.status < 200 || response.status >= 300) {\n return yield* fail(\n \"Shopify GraphQL returned non-2xx status\",\n { status: response.status, body, operationName: options.operationName },\n \"api_status\",\n );\n }\n\n const graphql = yield* Schema.decodeUnknownEffect(GraphQLResponseSchema)(body).pipe(\n Effect.catch(decodeError),\n );\n if (graphql.errors !== undefined && graphql.errors.length > 0) {\n const codes = graphql.errors.map((error) => error.extensions?.code);\n const code = retryableCodes.find((retryable) => codes.includes(retryable));\n if (code !== undefined) {\n return yield* new Retryable({\n code,\n wait: code === \"THROTTLED\" ? throttleWait(graphql) : Option.none(),\n body,\n });\n }\n return yield* fail(\"Shopify GraphQL returned errors\", body, \"api_graphql\");\n }\n return yield* Schema.decodeUnknownEffect(options.schema)(graphql.data).pipe(\n Effect.catch(decodeError),\n );\n }).pipe(\n Effect.withSpan(Telemetry.SpanName.apiFetch, {\n kind: \"client\",\n attributes: { [Telemetry.Attr.apiPath]: `graphql:${options.operationName}` },\n }),\n );\n\n const run = attempt.pipe(\n Effect.retry({\n schedule: graphqlRetrySchedule.pipe(\n Schedule.tap(({ input, duration }) =>\n input instanceof Retryable\n ? Effect.logWarning(\n \"Shopify GraphQL request returned a retryable error, retrying\",\n ).pipe(\n Effect.annotateLogs({\n operationName: options.operationName,\n code: input.code,\n waitMillis: Duration.toMillis(duration),\n }),\n Effect.andThen(\n Metrics.recordApiRetry({\n connector: manifest.name,\n reason: input.code === \"THROTTLED\" ? \"rate_limit\" : \"server_error\",\n }),\n ),\n )\n : Effect.void,\n ),\n ),\n while: (error) => error._tag === \"Retryable\",\n }),\n Effect.catchTag(\"Retryable\", (error) =>\n fail(\"Shopify GraphQL returned errors\", error.body, \"api_graphql\"),\n ),\n );\n\n return run.pipe(\n Effect.timeoutOrElse({\n duration: requestTimeout,\n orElse: () =>\n Effect.fail(new ConnectorError({ message: \"Shopify GraphQL request timed out\" })),\n }),\n );\n };\n\n return fetchGraphQL;\n});\n","import { ConnectorError } from \"@useairfoil/connector-kit\";\nimport { Config, Context, Effect, Layer, Option, Schema, Stream } from \"effect\";\nimport { HttpClient } from \"effect/http\";\n\nimport type { ShopifyConfig } from \"../manifest\";\nimport type { Customer } from \"../resources/customers/row\";\nimport type { Order } from \"../resources/orders/row\";\nimport type { Product } from \"../resources/products/row\";\nimport type { Refund } from \"../resources/refunds/row\";\n\nimport {\n CustomerAddressesQuery,\n CustomerByIdQuery,\n CustomersQuery,\n GraphQLCustomerAddressesSchema,\n GraphQLCustomerByIdDataSchema,\n type GraphQLCustomerNode,\n GraphQLCustomersDataSchema,\n normalizeCustomerNode,\n} from \"../resources/customers/graphql\";\nimport {\n GraphQLDiscountApplicationsSchema,\n GraphQLLineItemsSchema,\n type GraphQLOrderNode,\n GraphQLOrdersDataSchema,\n GraphQLShippingLinesSchema,\n OrderDiscountApplicationsQuery,\n OrderLineItemsQuery,\n OrderShippingLinesQuery,\n OrdersQuery,\n fromOrderNode,\n} from \"../resources/orders/graphql\";\nimport {\n GraphQLProductByIdDataSchema,\n type GraphQLProductNode,\n GraphQLProductVariantNodeSchema,\n GraphQLProductsDataSchema,\n ProductByIdQuery,\n ProductVariantsQuery,\n ProductsQuery,\n normalizeProductNode,\n} from \"../resources/products/graphql\";\nimport {\n GraphQLOrderAdjustmentsSchema,\n GraphQLOrderRefundsDataSchema,\n GraphQLRefundLineItemsSchema,\n type GraphQLRefundNode,\n GraphQLRefundShippingLinesSchema,\n GraphQLRefundTransactionsSchema,\n OrderRefundsQuery,\n RefundLineItemsQuery,\n RefundOrderAdjustmentsQuery,\n RefundShippingLinesQuery,\n RefundTransactionsQuery,\n fromRefundNode,\n} from \"../resources/refunds/graphql\";\nimport { type PageInfo, connection } from \"../resources/shared\";\nimport * as ShopifyAuth from \"./auth\";\nimport * as ShopifyGraphQL from \"./graphql\";\n\nexport type ShopifyPage<A> = {\n readonly items: ReadonlyArray<A>;\n readonly endCursor: string | null;\n readonly hasMore: boolean;\n};\n\ntype PageRequest = { readonly first: number; readonly after?: string };\n\nexport type ShopifyApiClientService = {\n readonly checkConnection: Effect.Effect<void, ConnectorError>;\n readonly checkProductsAccess: Effect.Effect<void, ConnectorError>;\n readonly checkOrdersAccess: Effect.Effect<void, ConnectorError>;\n readonly checkCustomersAccess: Effect.Effect<void, ConnectorError>;\n readonly fetchGraphQL: <A>(options: {\n readonly operationName: string;\n readonly query: string;\n readonly variables?: Record<string, unknown>;\n readonly schema: Schema.Decoder<A>;\n }) => Effect.Effect<A, ConnectorError>;\n readonly fetchProducts: (\n options: PageRequest,\n ) => Effect.Effect<ShopifyPage<Product>, ConnectorError>;\n /** Gets every variant page, or none when the product is gone. */\n readonly fetchProductById: (id: string) => Effect.Effect<Option.Option<Product>, ConnectorError>;\n /** Gets every page of line items, shipping lines, and discounts. */\n readonly fetchOrders: (options: PageRequest) => Effect.Effect<ShopifyPage<Order>, ConnectorError>;\n readonly fetchRefunds: (\n options: PageRequest,\n ) => Effect.Effect<ShopifyPage<Refund>, ConnectorError>;\n readonly fetchCustomers: (\n options: PageRequest,\n ) => Effect.Effect<ShopifyPage<Customer>, ConnectorError>;\n /** Gets every address page, or none when the customer is gone. */\n readonly fetchCustomerById: (\n id: string,\n ) => Effect.Effect<Option.Option<Customer>, ConnectorError>;\n};\n\nexport class ShopifyApiClient extends Context.Service<ShopifyApiClient, ShopifyApiClientService>()(\n \"@useairfoil/producer-shopify/ShopifyApiClient\",\n) {}\n\n// Protected fields make this fail without protected customer data access.\nconst CustomersAccessQuery = `#graphql\nquery AirfoilCustomersAccess {\n customers(first: 1) {\n nodes {\n id\n defaultEmailAddress { emailAddress }\n defaultPhoneNumber { phoneNumber }\n defaultAddress { address1 }\n }\n }\n}\n`;\n\nconst OrdersAccessQuery = `#graphql\nquery AirfoilOrdersAccess {\n orders(first: 1) {\n nodes {\n id\n email\n phone\n shippingAddress { address1 }\n }\n }\n}\n`;\n\nconst ProductsAccessQuery = `#graphql\nquery AirfoilProductsAccess {\n products(first: 1) {\n nodes {\n id\n }\n }\n}\n`;\n\nconst ShopIdentityQuery = `#graphql\nquery AirfoilShopIdentity {\n shop {\n id\n }\n}\n`;\n\nconst ShopIdentitySchema = Schema.Struct({\n shop: Schema.Struct({ id: Schema.String }),\n});\n\nconst ProductsAccessSchema = Schema.Struct({\n products: Schema.Struct({\n nodes: Schema.Array(Schema.Struct({ id: Schema.String })),\n }),\n});\n\nconst OrdersAccessSchema = Schema.Struct({\n orders: Schema.Struct({ nodes: Schema.Array(Schema.Struct({ id: Schema.String })) }),\n});\n\nconst CustomersAccessSchema = Schema.Struct({\n customers: Schema.Struct({ nodes: Schema.Array(Schema.Struct({ id: Schema.String })) }),\n});\n\n// Follow-up queries alias the parent as `node` and the list as `connection`.\nconst nestedPageSchema = <S extends Schema.Top>(connection: S) =>\n Schema.Struct({ node: Schema.NullOr(Schema.Struct({ connection })) });\n\nexport const make = Effect.fnUntraced(function* (config: ShopifyConfig) {\n const fetchGraphQL = yield* ShopifyGraphQL.make(config);\n\n const nextPageCursor = (pageInfo: PageInfo): Option.Option<string> =>\n pageInfo.hasNextPage ? Option.fromNullishOr(pageInfo.endCursor) : Option.none();\n\n const fetchProductById = (id: string) =>\n fetchGraphQL({\n operationName: \"AirfoilProductById\",\n query: ProductByIdQuery,\n variables: { id },\n schema: GraphQLProductByIdDataSchema,\n }).pipe(\n Effect.flatMap((data) => {\n const node = data.product;\n if (node === null) {\n return Effect.succeed(Option.none());\n }\n return loadProduct(node).pipe(Effect.map(Option.some));\n }),\n );\n\n const followConnection = <A>(\n first: { readonly nodes: ReadonlyArray<A>; readonly pageInfo: PageInfo },\n options: {\n readonly id: string;\n readonly operationName: string;\n readonly query: string;\n readonly schema: Schema.Decoder<{\n readonly node: {\n readonly connection: { readonly nodes: ReadonlyArray<A>; readonly pageInfo: PageInfo };\n } | null;\n }>;\n },\n ): Effect.Effect<ReadonlyArray<A>, ConnectorError> =>\n Option.match(nextPageCursor(first.pageInfo), {\n onNone: () => Effect.succeed(first.nodes),\n onSome: (initialCursor) =>\n Stream.paginate(initialCursor, (after) =>\n fetchGraphQL({\n operationName: options.operationName,\n query: options.query,\n variables: { id: options.id, first: 100, after },\n schema: options.schema,\n }).pipe(\n Effect.flatMap(({ node }) =>\n node === null\n ? Effect.fail(\n new ConnectorError({\n message: `Shopify record disappeared during ${options.operationName}`,\n }),\n )\n : Effect.succeed([\n node.connection.nodes,\n nextPageCursor(node.connection.pageInfo),\n ] as const),\n ),\n ),\n ).pipe(\n Stream.runCollect,\n Effect.map((rest) => [...first.nodes, ...rest]),\n ),\n });\n\n const loadOrder = (node: GraphQLOrderNode) =>\n Effect.all({\n discountApplications: followConnection(node.discountApplications, {\n id: node.id,\n operationName: \"AirfoilOrderDiscountApplications\",\n query: OrderDiscountApplicationsQuery,\n schema: nestedPageSchema(GraphQLDiscountApplicationsSchema),\n }),\n shippingLines: followConnection(node.shippingLines, {\n id: node.id,\n operationName: \"AirfoilOrderShippingLines\",\n query: OrderShippingLinesQuery,\n schema: nestedPageSchema(GraphQLShippingLinesSchema),\n }),\n lineItems: followConnection(node.lineItems, {\n id: node.id,\n operationName: \"AirfoilOrderLineItems\",\n query: OrderLineItemsQuery,\n schema: nestedPageSchema(GraphQLLineItemsSchema),\n }),\n }).pipe(Effect.map((nested) => fromOrderNode(node, nested)));\n\n const loadRefund = (orderId: string, node: GraphQLRefundNode) =>\n Effect.all({\n transactions: followConnection(node.transactions, {\n id: node.id,\n operationName: \"AirfoilRefundTransactions\",\n query: RefundTransactionsQuery,\n schema: nestedPageSchema(GraphQLRefundTransactionsSchema),\n }),\n refundLineItems: followConnection(node.refundLineItems, {\n id: node.id,\n operationName: \"AirfoilRefundLineItems\",\n query: RefundLineItemsQuery,\n schema: nestedPageSchema(GraphQLRefundLineItemsSchema),\n }),\n refundShippingLines: followConnection(node.refundShippingLines, {\n id: node.id,\n operationName: \"AirfoilRefundShippingLines\",\n query: RefundShippingLinesQuery,\n schema: nestedPageSchema(GraphQLRefundShippingLinesSchema),\n }),\n orderAdjustments: followConnection(node.orderAdjustments, {\n id: node.id,\n operationName: \"AirfoilRefundOrderAdjustments\",\n query: RefundOrderAdjustmentsQuery,\n schema: nestedPageSchema(GraphQLOrderAdjustmentsSchema),\n }),\n }).pipe(Effect.map((nested) => fromRefundNode(orderId, node, nested)));\n\n const loadCustomer = (node: GraphQLCustomerNode) =>\n followConnection(node.addressesV2, {\n id: node.id,\n operationName: \"AirfoilCustomerAddresses\",\n query: CustomerAddressesQuery,\n schema: nestedPageSchema(GraphQLCustomerAddressesSchema),\n }).pipe(Effect.map((addresses) => normalizeCustomerNode(node, addresses)));\n\n const loadProduct = (node: GraphQLProductNode) =>\n followConnection(node.variants, {\n id: node.id,\n operationName: \"AirfoilProductVariants\",\n query: ProductVariantsQuery,\n schema: nestedPageSchema(connection(GraphQLProductVariantNodeSchema)),\n }).pipe(Effect.map((variants) => normalizeProductNode(node, variants)));\n\n const toPage = <A>(\n pageInfo: PageInfo,\n items: Effect.Effect<ReadonlyArray<A>, ConnectorError>,\n ): Effect.Effect<ShopifyPage<A>, ConnectorError> =>\n items.pipe(\n Effect.map((loaded) => ({\n items: loaded,\n endCursor: pageInfo.endCursor,\n hasMore: pageInfo.hasNextPage,\n })),\n );\n\n const fetchProducts = (options: PageRequest) =>\n fetchGraphQL({\n operationName: \"AirfoilProducts\",\n query: ProductsQuery,\n variables: { first: options.first, after: options.after ?? null },\n schema: GraphQLProductsDataSchema,\n }).pipe(\n Effect.flatMap(({ products }) =>\n toPage(products.pageInfo, Effect.forEach(products.nodes, loadProduct)),\n ),\n );\n\n const fetchOrders = (options: PageRequest) =>\n fetchGraphQL({\n operationName: \"AirfoilOrders\",\n query: OrdersQuery,\n variables: { first: options.first, after: options.after ?? null },\n schema: GraphQLOrdersDataSchema,\n }).pipe(\n Effect.flatMap(({ orders }) =>\n toPage(orders.pageInfo, Effect.forEach(orders.nodes, loadOrder)),\n ),\n );\n\n const fetchRefunds = (options: PageRequest) =>\n fetchGraphQL({\n operationName: \"AirfoilOrderRefunds\",\n query: OrderRefundsQuery,\n variables: { first: options.first, after: options.after ?? null },\n schema: GraphQLOrderRefundsDataSchema,\n }).pipe(\n Effect.flatMap(({ orders }) =>\n toPage(\n orders.pageInfo,\n Effect.forEach(orders.nodes, (order) =>\n Effect.forEach(order.refunds, (refund) => loadRefund(order.id, refund)),\n ).pipe(Effect.map((refunds) => refunds.flat())),\n ),\n ),\n );\n\n const fetchCustomers = (options: PageRequest) =>\n fetchGraphQL({\n operationName: \"AirfoilCustomers\",\n query: CustomersQuery,\n variables: { first: options.first, after: options.after ?? null },\n schema: GraphQLCustomersDataSchema,\n }).pipe(\n Effect.flatMap(({ customers }) =>\n toPage(customers.pageInfo, Effect.forEach(customers.nodes, loadCustomer)),\n ),\n );\n\n const fetchCustomerById = (id: string) =>\n fetchGraphQL({\n operationName: \"AirfoilCustomerById\",\n query: CustomerByIdQuery,\n variables: { id },\n schema: GraphQLCustomerByIdDataSchema,\n }).pipe(\n Effect.flatMap(({ customer }) =>\n customer === null\n ? Effect.succeed(Option.none())\n : loadCustomer(customer).pipe(Effect.map(Option.some)),\n ),\n );\n\n const checkCustomersAccess = fetchGraphQL({\n operationName: \"AirfoilCustomersAccess\",\n query: CustomersAccessQuery,\n schema: CustomersAccessSchema,\n }).pipe(Effect.asVoid);\n\n const checkOrdersAccess = fetchGraphQL({\n operationName: \"AirfoilOrdersAccess\",\n query: OrdersAccessQuery,\n schema: OrdersAccessSchema,\n }).pipe(Effect.asVoid);\n\n const checkConnection = fetchGraphQL({\n operationName: \"AirfoilShopIdentity\",\n query: ShopIdentityQuery,\n schema: ShopIdentitySchema,\n }).pipe(Effect.asVoid);\n\n const checkProductsAccess = fetchGraphQL({\n operationName: \"AirfoilProductsAccess\",\n query: ProductsAccessQuery,\n schema: ProductsAccessSchema,\n }).pipe(Effect.asVoid);\n\n return {\n checkConnection,\n checkProductsAccess,\n checkOrdersAccess,\n checkCustomersAccess,\n fetchGraphQL,\n fetchProducts,\n fetchProductById,\n fetchOrders,\n fetchRefunds,\n fetchCustomers,\n fetchCustomerById,\n };\n});\n\nexport const layer = (\n config: ShopifyConfig,\n): Layer.Layer<ShopifyApiClient, ConnectorError, HttpClient.HttpClient | ShopifyAuth.ShopifyAuth> =>\n Layer.effect(ShopifyApiClient)(make(config));\n\nexport const layerConfig = (\n config: Config.Wrap<ShopifyConfig>,\n): Layer.Layer<\n ShopifyApiClient,\n ConnectorError | Config.ConfigError,\n HttpClient.HttpClient | ShopifyAuth.ShopifyAuth\n> => Layer.effect(ShopifyApiClient)(Config.unwrap(config).pipe(Effect.flatMap(make)));\n","import { Iceberg } from \"@useairfoil/connector-kit\";\nimport * as Schema from \"effect/Schema\";\n\nimport { field, moneyBag } from \"../shared\";\n\nexport const CartLineItemSchema = Schema.Struct({\n id: Schema.String.pipe(field(102, \"Unique cart line identifier.\")),\n properties: Schema.NullOr(Schema.String).pipe(\n field(103, \"Custom line properties stored as JSON.\"),\n ),\n quantity: Schema.Int.pipe(field(104, \"Quantity of the cart line.\")),\n variantId: Schema.String.pipe(field(105, \"Product variant identifier.\")),\n key: Schema.String.pipe(field(106, \"Unique key for the cart line.\")),\n discountedPrice: Schema.String.pipe(field(107, \"Price after discounts.\")),\n discounts: Schema.String.pipe(field(108, \"Line discounts stored as JSON.\")),\n giftCard: Schema.Boolean.pipe(field(109, \"Whether the line is a gift card.\")),\n grams: Schema.Int.pipe(field(110, \"Weight of the line in grams.\")),\n linePrice: Schema.String.pipe(field(111, \"Total price for the line.\")),\n originalLinePrice: Schema.String.pipe(field(112, \"Line price before discounts.\")),\n originalPrice: Schema.String.pipe(field(113, \"Unit price before discounts.\")),\n price: Schema.String.pipe(field(114, \"Current unit price.\")),\n productId: Schema.String.pipe(field(115, \"Product identifier.\")),\n sku: Schema.NullOr(Schema.String).pipe(field(116, \"Stock keeping unit for the line.\")),\n taxable: Schema.Boolean.pipe(field(117, \"Whether the line is taxable.\")),\n title: Schema.String.pipe(field(118, \"Title of the cart line.\")),\n totalDiscount: Schema.String.pipe(field(119, \"Total discount for the line.\")),\n vendor: Schema.String.pipe(field(120, \"Vendor of the product.\")),\n discountedPriceSet: moneyBag(200).pipe(field(121, \"Price after discounts.\")),\n linePriceSet: moneyBag(210).pipe(field(122, \"Total price for the line.\")),\n originalLinePriceSet: moneyBag(220).pipe(field(123, \"Line price before discounts.\")),\n priceSet: moneyBag(230).pipe(field(124, \"Current unit price.\")),\n totalDiscountSet: moneyBag(240).pipe(field(125, \"Total discount for the line.\")),\n parentRelationship: Schema.NullOr(Schema.String).pipe(\n field(126, \"Parent relationship stored as JSON.\"),\n ),\n});\n\nexport const CartSchema = Schema.Struct({\n id: Schema.String.pipe(field(1, \"Unique cart identifier.\")),\n token: Schema.String.pipe(field(2, \"Token for the cart.\")),\n topic: Schema.Literals([\"carts/create\", \"carts/update\"]).pipe(\n field(3, \"Webhook topic that last changed the cart.\"),\n ),\n lineItems: Schema.Array(CartLineItemSchema.annotate({ fieldId: 101 })).pipe(\n field(4, \"Items in the cart.\"),\n ),\n note: Schema.NullOr(Schema.String).pipe(field(5, \"Note added to the cart.\")),\n updatedAt: Schema.Date.pipe(field(6, \"Time when the cart was last changed.\")),\n createdAt: Schema.Date.pipe(field(7, \"Time when the cart was created.\")),\n})\n .annotate({\n description: \"Latest state of each cart in a Shopify store.\",\n })\n .pipe(Iceberg.identifier(\"id\"));\n\nexport type CartLineItem = Schema.Schema.Type<typeof CartLineItemSchema>;\n\nexport type Cart = Schema.Schema.Type<typeof CartSchema>;\n","import * as Schema from \"effect/Schema\";\n\n// Customer webhooks leave fields out, so the handler reads the customer again.\n\nexport const CustomerWebhookPayloadSchema = Schema.Struct({\n admin_graphql_api_id: Schema.String,\n updated_at: Schema.DateFromString,\n});\n\nexport const CustomerPurchaseSummaryPayloadSchema = Schema.Struct({\n customerId: Schema.String,\n occurredAt: Schema.DateFromString,\n});\n\nexport const CustomerEmailConsentPayloadSchema = Schema.Struct({ customer_id: Schema.Number });\n\nexport const CustomerSmsConsentPayloadSchema = Schema.Struct({ id: Schema.Number });\n\nexport const CustomerTagsPayloadSchema = Schema.Struct({\n customerId: Schema.String,\n occurredAt: Schema.DateFromString,\n});\n\nexport const CustomerDeleteWebhookPayloadSchema = Schema.Struct({ id: Schema.Number });\n\nexport const CustomerEventSchema = Schema.Struct({\n _tag: Schema.Literals([\"refresh\", \"delete\"]),\n id: Schema.String,\n version: Schema.Date,\n});\n","import * as Schema from \"effect/Schema\";\n\nimport {\n RestAddressSchema,\n RestAttributeSchema,\n RestDiscountAllocationSchema,\n RestMoneyBagSchema,\n RestTaxLineSchema,\n emptyText,\n fromRest,\n gid,\n normalizeAmount,\n splitTags,\n upper,\n} from \"../shared\";\nimport {\n DiscountAllocationMethodSchema,\n type DiscountApplication,\n DiscountApplicationTypeSchema,\n DiscountTargetSelectionSchema,\n DiscountTargetTypeSchema,\n DiscountValueTypeSchema,\n OrderCancelReasonSchema,\n OrderFinancialStatusSchema,\n type Order,\n} from \"./row\";\n\nconst nullableMoney = Schema.NullOr(RestMoneyBagSchema);\n\nconst RestShippingLineSchema = Schema.Struct({\n id: Schema.NullOr(Schema.Number),\n title: Schema.String,\n code: Schema.NullOr(Schema.String),\n source: Schema.NullOr(Schema.String),\n carrier_identifier: Schema.NullOr(Schema.String),\n phone: Schema.NullOr(Schema.String),\n is_removed: Schema.Boolean,\n price_set: RestMoneyBagSchema,\n discounted_price_set: RestMoneyBagSchema,\n current_discounted_price_set: RestMoneyBagSchema,\n tax_lines: Schema.Array(RestTaxLineSchema),\n discount_allocations: Schema.Array(RestDiscountAllocationSchema),\n});\n\nconst RestLineItemSchema = Schema.Struct({\n admin_graphql_api_id: Schema.String,\n name: Schema.String,\n title: Schema.String,\n variant_title: Schema.NullOr(Schema.String),\n sku: Schema.NullOr(Schema.String),\n vendor: Schema.NullOr(Schema.String),\n product_id: Schema.NullOr(Schema.Number),\n variant_id: Schema.NullOr(Schema.Number),\n quantity: Schema.Int,\n current_quantity: Schema.Int,\n taxable: Schema.Boolean,\n requires_shipping: Schema.Boolean,\n gift_card: Schema.Boolean,\n price_set: RestMoneyBagSchema,\n total_discount_set: RestMoneyBagSchema,\n tax_lines: Schema.Array(RestTaxLineSchema),\n discount_allocations: Schema.Array(RestDiscountAllocationSchema),\n properties: Schema.Array(RestAttributeSchema),\n});\n\nconst RestDiscountApplicationSchema = Schema.Struct({\n type: upper(DiscountApplicationTypeSchema),\n code: Schema.optional(Schema.NullOr(Schema.String)),\n title: Schema.optional(Schema.NullOr(Schema.String)),\n description: Schema.optional(Schema.NullOr(Schema.String)),\n allocation_method: upper(DiscountAllocationMethodSchema),\n target_selection: upper(DiscountTargetSelectionSchema),\n target_type: upper(DiscountTargetTypeSchema),\n value_type: upper(DiscountValueTypeSchema),\n value: Schema.String,\n});\n\nexport const OrderWebhookPayloadSchema = Schema.Struct({\n id: Schema.Number,\n admin_graphql_api_id: Schema.String,\n name: Schema.String,\n email: Schema.NullOr(Schema.String),\n phone: Schema.NullOr(Schema.String),\n customer: Schema.NullOr(Schema.Struct({ admin_graphql_api_id: Schema.String })),\n customer_locale: Schema.NullOr(Schema.String),\n buyer_accepts_marketing: Schema.Boolean,\n billing_address: Schema.NullOr(RestAddressSchema),\n shipping_address: Schema.NullOr(RestAddressSchema),\n note: Schema.NullOr(Schema.String),\n note_attributes: Schema.Array(RestAttributeSchema),\n tags: Schema.String,\n confirmation_number: Schema.NullOr(Schema.String),\n po_number: Schema.NullOr(Schema.String),\n source_name: Schema.NullOr(Schema.String),\n source_identifier: Schema.NullOr(Schema.String),\n app_id: Schema.NullOr(Schema.Number),\n payment_gateway_names: Schema.Array(Schema.String),\n test: Schema.Boolean,\n taxes_included: Schema.Boolean,\n tax_exempt: Schema.Boolean,\n duties_included: Schema.Boolean,\n estimated_taxes: Schema.Boolean,\n total_weight: Schema.NullOr(Schema.Int),\n financial_status: Schema.NullOr(upper(OrderFinancialStatusSchema)),\n cancel_reason: Schema.NullOr(upper(OrderCancelReasonSchema)),\n cancelled_at: Schema.NullOr(Schema.DateFromString),\n closed_at: Schema.NullOr(Schema.DateFromString),\n processed_at: Schema.DateFromString,\n created_at: Schema.DateFromString,\n updated_at: Schema.DateFromString,\n currency: Schema.String,\n presentment_currency: Schema.String,\n discount_codes: Schema.Array(Schema.Struct({ code: Schema.String })),\n discount_applications: Schema.Array(RestDiscountApplicationSchema),\n subtotal_price_set: nullableMoney,\n current_subtotal_price_set: RestMoneyBagSchema,\n total_discounts_set: nullableMoney,\n current_total_discounts_set: RestMoneyBagSchema,\n total_shipping_price_set: RestMoneyBagSchema,\n current_shipping_price_set: RestMoneyBagSchema,\n total_tax_set: nullableMoney,\n current_total_tax_set: RestMoneyBagSchema,\n original_total_duties_set: nullableMoney,\n current_total_duties_set: nullableMoney,\n total_price_set: RestMoneyBagSchema,\n current_total_price_set: RestMoneyBagSchema,\n tax_lines: Schema.Array(RestTaxLineSchema),\n shipping_lines: Schema.Array(RestShippingLineSchema),\n line_items: Schema.Array(RestLineItemSchema),\n});\n\nexport const OrderDeleteWebhookPayloadSchema = Schema.Struct({ id: Schema.Number });\n\nexport const OrderEventSchema = Schema.Union([\n Schema.Struct({\n _tag: Schema.Literal(\"upsert\"),\n payload: Schema.toType(OrderWebhookPayloadSchema),\n }),\n Schema.Struct({\n _tag: Schema.Literal(\"delete\"),\n id: Schema.String,\n version: Schema.Date,\n }),\n]);\n\nexport type OrderWebhookPayload = Schema.Schema.Type<typeof OrderWebhookPayloadSchema>;\n\nconst orMoney = (bag: Schema.Schema.Type<typeof RestMoneyBagSchema> | null) =>\n bag === null ? null : fromRest.money(bag);\n\nexport const fromOrderWebhook = (payload: OrderWebhookPayload): Order => ({\n id: payload.admin_graphql_api_id,\n legacyResourceId: String(payload.id),\n name: payload.name,\n email: emptyText(payload.email),\n phone: emptyText(payload.phone),\n customerId: payload.customer?.admin_graphql_api_id ?? \"\",\n customerLocale: emptyText(payload.customer_locale),\n customerAcceptsMarketing: payload.buyer_accepts_marketing,\n billingAddress: payload.billing_address ? fromRest.address(payload.billing_address) : null,\n shippingAddress: payload.shipping_address ? fromRest.address(payload.shipping_address) : null,\n note: emptyText(payload.note),\n customAttributes: payload.note_attributes.map(fromRest.attribute),\n tags: splitTags(payload.tags),\n confirmationNumber: emptyText(payload.confirmation_number),\n poNumber: emptyText(payload.po_number),\n sourceName: emptyText(payload.source_name),\n sourceIdentifier: emptyText(payload.source_identifier),\n appId: payload.app_id === null ? \"\" : gid(\"App\", payload.app_id),\n paymentGatewayNames: payload.payment_gateway_names,\n test: payload.test,\n taxesIncluded: payload.taxes_included,\n taxExempt: payload.tax_exempt,\n dutiesIncluded: payload.duties_included,\n estimatedTaxes: payload.estimated_taxes,\n totalWeight: payload.total_weight,\n displayFinancialStatus: payload.financial_status,\n cancelReason: payload.cancel_reason,\n cancelledAt: payload.cancelled_at,\n closedAt: payload.closed_at,\n processedAt: payload.processed_at,\n createdAt: payload.created_at,\n updatedAt: payload.updated_at,\n currencyCode: payload.currency,\n presentmentCurrencyCode: payload.presentment_currency,\n discountCodes: payload.discount_codes.map((discount) => discount.code),\n discountApplications: payload.discount_applications.map(\n (application, index): DiscountApplication => ({\n index,\n type: application.type,\n code: application.type === \"DISCOUNT_CODE\" ? (application.code ?? null) : null,\n title: application.type === \"DISCOUNT_CODE\" ? null : (application.title ?? null),\n description: application.type === \"MANUAL\" ? (application.description ?? null) : null,\n allocationMethod: application.allocation_method,\n targetSelection: application.target_selection,\n targetType: application.target_type,\n valueType: application.value_type,\n value: normalizeAmount(application.value),\n }),\n ),\n subtotalPriceSet: orMoney(payload.subtotal_price_set),\n currentSubtotalPriceSet: fromRest.money(payload.current_subtotal_price_set),\n totalDiscountsSet: orMoney(payload.total_discounts_set),\n currentTotalDiscountsSet: fromRest.money(payload.current_total_discounts_set),\n totalShippingPriceSet: fromRest.money(payload.total_shipping_price_set),\n currentShippingPriceSet: fromRest.money(payload.current_shipping_price_set),\n totalTaxSet: orMoney(payload.total_tax_set),\n currentTotalTaxSet: fromRest.money(payload.current_total_tax_set),\n originalTotalDutiesSet: orMoney(payload.original_total_duties_set),\n currentTotalDutiesSet: orMoney(payload.current_total_duties_set),\n totalPriceSet: fromRest.money(payload.total_price_set),\n currentTotalPriceSet: fromRest.money(payload.current_total_price_set),\n taxLines: payload.tax_lines.map(fromRest.taxLine),\n shippingLines: payload.shipping_lines.map((line) => ({\n id: line.id === null ? null : gid(\"ShippingLine\", line.id),\n title: line.title,\n code: line.code,\n source: line.source,\n carrierIdentifier: line.carrier_identifier,\n phone: line.phone,\n isRemoved: line.is_removed,\n originalPriceSet: fromRest.money(line.price_set),\n discountedPriceSet: fromRest.money(line.discounted_price_set),\n currentDiscountedPriceSet: fromRest.money(line.current_discounted_price_set),\n taxLines: line.tax_lines.map(fromRest.taxLine),\n discountAllocations: line.discount_allocations.map(fromRest.discountAllocation),\n })),\n lineItems: payload.line_items.map((item) => ({\n id: item.admin_graphql_api_id,\n name: item.name,\n title: item.title,\n variantTitle: item.variant_title,\n sku: item.sku,\n vendor: item.vendor,\n productId: item.product_id === null ? null : gid(\"Product\", item.product_id),\n variantId: item.variant_id === null ? null : gid(\"ProductVariant\", item.variant_id),\n quantity: item.quantity,\n currentQuantity: item.current_quantity,\n taxable: item.taxable,\n requiresShipping: item.requires_shipping,\n isGiftCard: item.gift_card,\n originalUnitPriceSet: fromRest.money(item.price_set),\n totalDiscountSet: fromRest.money(item.total_discount_set),\n taxLines: item.tax_lines.map(fromRest.taxLine),\n discountAllocations: item.discount_allocations.map(fromRest.discountAllocation),\n customAttributes: item.properties.map(fromRest.attribute),\n })),\n});\n","import * as Schema from \"effect/Schema\";\n\nimport { RestMoneyBagSchema, fromRest, gid, normalizeAmount, upper } from \"../shared\";\nimport {\n type Refund,\n RestockTypeSchema,\n TransactionKindSchema,\n TransactionStatusSchema,\n} from \"./row\";\n\nexport const RefundWebhookPayloadSchema = Schema.Struct({\n id: Schema.Number,\n admin_graphql_api_id: Schema.String,\n order_id: Schema.Number,\n note: Schema.NullOr(Schema.String),\n created_at: Schema.NullOr(Schema.DateFromString),\n processed_at: Schema.DateFromString,\n transactions: Schema.Array(\n Schema.Struct({\n admin_graphql_api_id: Schema.String,\n kind: upper(TransactionKindSchema),\n status: upper(TransactionStatusSchema),\n amount: Schema.String,\n currency: Schema.String,\n gateway: Schema.NullOr(Schema.String),\n test: Schema.Boolean,\n error_code: Schema.NullOr(Schema.String),\n parent_id: Schema.NullOr(Schema.Number),\n created_at: Schema.DateFromString,\n processed_at: Schema.NullOr(Schema.DateFromString),\n }),\n ),\n refund_line_items: Schema.Array(\n Schema.Struct({\n id: Schema.Number,\n line_item_id: Schema.Number,\n quantity: Schema.Int,\n restock_type: upper(RestockTypeSchema),\n location_id: Schema.NullOr(Schema.Number),\n subtotal_set: RestMoneyBagSchema,\n total_tax_set: RestMoneyBagSchema,\n }),\n ),\n refund_shipping_lines: Schema.Array(\n Schema.Struct({\n id: Schema.Number,\n shipping_line_id: Schema.NullOr(Schema.Number),\n subtotal_amount_set: RestMoneyBagSchema,\n }),\n ),\n order_adjustments: Schema.Array(\n Schema.Struct({\n id: Schema.Number,\n kind: Schema.NullOr(Schema.String),\n reason: Schema.NullOr(Schema.String),\n amount_set: RestMoneyBagSchema,\n tax_amount_set: RestMoneyBagSchema,\n }),\n ),\n duties: Schema.Array(\n Schema.Struct({\n duty_id: Schema.NullOr(Schema.Number),\n amount_set: RestMoneyBagSchema,\n }),\n ),\n});\n\nexport const RefundEventSchema = Schema.toType(RefundWebhookPayloadSchema);\n\nexport type RefundWebhookPayload = Schema.Schema.Type<typeof RefundWebhookPayloadSchema>;\n\nexport const fromRefundWebhook = (payload: RefundWebhookPayload): Refund => ({\n id: payload.admin_graphql_api_id,\n legacyResourceId: String(payload.id),\n orderId: gid(\"Order\", payload.order_id),\n note: payload.note ?? \"\",\n createdAt: payload.created_at,\n processedAt: payload.processed_at,\n // Webhooks only give transaction amounts in the customer currency.\n transactions: payload.transactions.map((transaction) => ({\n id: transaction.admin_graphql_api_id,\n kind: transaction.kind,\n status: transaction.status,\n amount: normalizeAmount(transaction.amount),\n currencyCode: transaction.currency,\n gateway: transaction.gateway,\n test: transaction.test,\n errorCode: transaction.error_code?.toUpperCase() ?? null,\n parentTransactionId:\n transaction.parent_id === null ? null : gid(\"OrderTransaction\", transaction.parent_id),\n createdAt: transaction.created_at,\n processedAt: transaction.processed_at,\n })),\n refundLineItems: payload.refund_line_items.map((item) => ({\n id: gid(\"RefundLineItem\", item.id),\n lineItemId: gid(\"LineItem\", item.line_item_id),\n quantity: item.quantity,\n restockType: item.restock_type,\n locationId: item.location_id === null ? null : gid(\"Location\", item.location_id),\n subtotalSet: fromRest.money(item.subtotal_set),\n totalTaxSet: fromRest.money(item.total_tax_set),\n })),\n refundShippingLines: payload.refund_shipping_lines.map((line) => ({\n id: gid(\"RefundShippingLine\", line.id),\n shippingLineId:\n line.shipping_line_id === null ? null : gid(\"ShippingLine\", line.shipping_line_id),\n subtotalAmountSet: fromRest.money(line.subtotal_amount_set),\n })),\n // Webhooks also list refunded shipping as an adjustment. GraphQL doesn't.\n orderAdjustments: payload.order_adjustments\n .filter((adjustment) => adjustment.kind !== \"shipping_refund\")\n .map((adjustment) => ({\n id: gid(\"OrderAdjustment\", adjustment.id),\n // Webhooks send text like \"Refund discrepancy\". GraphQL sends REFUND_DISCREPANCY.\n reason: adjustment.reason?.toUpperCase().replaceAll(\" \", \"_\") ?? null,\n amountSet: fromRest.money(adjustment.amount_set),\n taxAmountSet: fromRest.money(adjustment.tax_amount_set),\n })),\n duties: payload.duties.map((duty) => ({\n dutyId: duty.duty_id === null ? null : gid(\"Duty\", duty.duty_id),\n amountSet: fromRest.money(duty.amount_set),\n })),\n});\n","import {\n Connector,\n ConnectorError,\n Cursor,\n Fetch,\n Resource,\n Webhook,\n} from \"@useairfoil/connector-kit\";\nimport { Config, Context, Effect, Layer, Option, Redacted, Schema } from \"effect\";\nimport { HttpServerResponse } from \"effect/http\";\nimport { createHmac, timingSafeEqual } from \"node:crypto\";\n\nimport type { ShopifyConfig } from \"./manifest\";\n\nimport * as ShopifyAuth from \"./api/auth\";\nimport * as ShopifyApiClient from \"./api/client\";\nimport { CartSchema } from \"./resources/carts/row\";\nimport {\n CartWebhookEventSchema,\n CartWebhookPayloadSchema,\n fromCartWebhook,\n} from \"./resources/carts/webhook\";\nimport { CustomerSchema } from \"./resources/customers/row\";\nimport {\n CustomerDeleteWebhookPayloadSchema,\n CustomerEmailConsentPayloadSchema,\n CustomerEventSchema,\n CustomerPurchaseSummaryPayloadSchema,\n CustomerSmsConsentPayloadSchema,\n CustomerTagsPayloadSchema,\n CustomerWebhookPayloadSchema,\n} from \"./resources/customers/webhook\";\nimport { OrderSchema } from \"./resources/orders/row\";\nimport {\n fromOrderWebhook,\n OrderDeleteWebhookPayloadSchema,\n OrderEventSchema,\n OrderWebhookPayloadSchema,\n} from \"./resources/orders/webhook\";\nimport { ProductSchema } from \"./resources/products/row\";\nimport {\n fromProductWebhook,\n ProductDeleteWebhookPayloadSchema,\n ProductEventSchema,\n ProductWebhookPayloadSchema,\n} from \"./resources/products/webhook\";\nimport { RefundSchema } from \"./resources/refunds/row\";\nimport {\n fromRefundWebhook,\n RefundEventSchema,\n RefundWebhookPayloadSchema,\n} from \"./resources/refunds/webhook\";\nimport { gid } from \"./resources/shared\";\nexport { manifest, ShopifyConfigDef } from \"./manifest\";\nexport type { ShopifyConfig } from \"./manifest\";\n\nconst isValidWebhookSignature = (\n rawBody: Uint8Array,\n signature: string | undefined,\n secret: string,\n): boolean => {\n if (!signature) return false;\n const digest = createHmac(\"sha256\", secret).update(Buffer.from(rawBody)).digest();\n const provided = Buffer.from(signature, \"base64\");\n return provided.length === digest.length && timingSafeEqual(digest, provided);\n};\n\nconst decodeTriggeredAt = (value: string | undefined) =>\n Option.getOrNull(Schema.decodeUnknownOption(Schema.DateFromString)(value));\n\nconst backfillPages = <A extends object>(\n fetchPage: (options: {\n readonly first: number;\n readonly after?: string;\n }) => Effect.Effect<ShopifyApiClient.ShopifyPage<A>, ConnectorError>,\n) =>\n Fetch.page({\n pageCursor: Cursor.string(),\n cutoff: Cursor.isoDateTime(),\n fetch: ({ pageCursor }) =>\n fetchPage({\n first: 50,\n after: typeof pageCursor === \"string\" ? pageCursor : undefined,\n }).pipe(\n Effect.map((page) => ({\n rows: page.items,\n nextPageCursor: page.endCursor ?? undefined,\n hasMore: page.hasMore,\n })),\n ),\n });\n\nexport const make = Effect.fnUntraced(function* (config: ShopifyConfig) {\n const api = yield* ShopifyApiClient.ShopifyApiClient;\n\n const Products = Resource.entity({\n name: \"products\",\n rowSchema: ProductSchema,\n version: \"updatedAt\",\n\n check: api.checkProductsAccess,\n backfill: backfillPages(api.fetchProducts),\n webhook: {\n schema: ProductEventSchema,\n handler: ({ payload }) => {\n if (payload._tag === \"delete\") {\n return Effect.succeed([\n {\n id: payload.id,\n updatedAt: payload.version,\n _deleted: true,\n },\n ]);\n }\n\n const product = payload.payload;\n if (product.variants.length === product.variant_gids.length) {\n return Effect.succeed([fromProductWebhook(product)]);\n }\n\n // Refetch when Shopify cuts off variants.\n const triggeredAt = payload.triggeredAt;\n return Effect.gen(function* () {\n const refetched = yield* api.fetchProductById(product.admin_graphql_api_id);\n if (Option.isSome(refetched)) {\n return [refetched.value];\n }\n // A deleted product has no updatedAt, so use the webhook time.\n return [{ id: product.admin_graphql_api_id, updatedAt: triggeredAt, _deleted: true }];\n });\n },\n },\n });\n\n const Customers = Resource.entity({\n name: \"customers\",\n rowSchema: CustomerSchema,\n version: \"updatedAt\",\n\n check: api.checkCustomersAccess,\n backfill: backfillPages(api.fetchCustomers),\n webhook: {\n schema: CustomerEventSchema,\n handler: ({ payload: { _tag, id, version } }) =>\n Effect.gen(function* () {\n // No customer means it was deleted. Its delete webhook can be missed.\n const customer = _tag === \"refresh\" ? yield* api.fetchCustomerById(id) : Option.none();\n return Option.isNone(customer)\n ? [{ id, updatedAt: version, _deleted: true }]\n : [customer.value];\n }),\n },\n });\n\n const Orders = Resource.entity({\n name: \"orders\",\n rowSchema: OrderSchema,\n version: \"updatedAt\",\n\n check: api.checkOrdersAccess,\n backfill: backfillPages(api.fetchOrders),\n webhook: {\n schema: OrderEventSchema,\n // Do not refetch. Shopify hides older orders without read_all_orders.\n handler: ({ payload }) =>\n Effect.succeed(\n payload._tag === \"delete\"\n ? [{ id: payload.id, updatedAt: payload.version, _deleted: true }]\n : [fromOrderWebhook(payload.payload)],\n ),\n },\n });\n\n const Refunds = Resource.entity({\n name: \"refunds\",\n rowSchema: RefundSchema,\n // Refund webhooks have no updated_at. A later settlement with the same\n // processedAt may not replace the first row.\n version: \"processedAt\",\n\n check: api.checkOrdersAccess,\n backfill: backfillPages(api.fetchRefunds),\n webhook: {\n schema: RefundEventSchema,\n handler: ({ payload }) => Effect.succeed([fromRefundWebhook(payload)]),\n },\n });\n\n const Carts = Resource.entity({\n name: \"carts\",\n rowSchema: CartSchema,\n version: \"updatedAt\",\n\n check: api.checkConnection,\n webhook: {\n schema: CartWebhookEventSchema,\n handler: ({ payload }) => Effect.succeed([fromCartWebhook(payload)]),\n },\n });\n\n const webhookRoute = Webhook.route({\n path: \"/webhooks/shopify\",\n ackMode: \"after-ingest\",\n schema: Schema.Unknown,\n handler: ({ request, rawBody, payload: json, to }) =>\n Effect.gen(function* () {\n const signature = request.headers[\"x-shopify-hmac-sha256\"];\n if (!isValidWebhookSignature(rawBody, signature, Redacted.value(config.webhookSecret))) {\n return HttpServerResponse.jsonUnsafe(\n { ok: false, error: \"Shopify webhook verification failed\" },\n { status: 401 },\n );\n }\n\n const topic = request.headers[\"x-shopify-topic\"] ?? \"\";\n const decode = <A>(schema: Schema.Decoder<A>) => Schema.decodeUnknownOption(schema)(json);\n const invalid = HttpServerResponse.jsonUnsafe(\n { ok: false, error: `Invalid Shopify webhook for ${topic}` },\n { status: 400 },\n );\n // Shopify sends it on every webhook.\n const triggeredAt = decodeTriggeredAt(request.headers[\"x-shopify-triggered-at\"]);\n if (triggeredAt === null) return invalid;\n\n switch (topic) {\n case \"products/create\":\n case \"products/update\": {\n const payload = decode(ProductWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Products, { _tag: \"upsert\", payload: payload.value, triggeredAt });\n break;\n }\n case \"products/delete\": {\n const payload = decode(ProductDeleteWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Products, {\n _tag: \"delete\",\n id: gid(\"Product\", payload.value.id),\n version: triggeredAt,\n });\n break;\n }\n case \"carts/create\":\n case \"carts/update\": {\n const payload = decode(CartWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Carts, { ...payload.value, topic });\n break;\n }\n case \"customers/create\":\n case \"customers/disable\":\n case \"customers/enable\":\n case \"customers/update\": {\n const payload = decode(CustomerWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Customers, {\n _tag: \"refresh\",\n id: payload.value.admin_graphql_api_id,\n version: payload.value.updated_at,\n });\n break;\n }\n case \"customers/purchasing_summary\": {\n const payload = decode(CustomerPurchaseSummaryPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Customers, {\n _tag: \"refresh\",\n id: payload.value.customerId,\n version: payload.value.occurredAt,\n });\n break;\n }\n case \"customers_email_marketing_consent/update\": {\n const payload = decode(CustomerEmailConsentPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Customers, {\n _tag: \"refresh\",\n id: gid(\"Customer\", payload.value.customer_id),\n version: triggeredAt,\n });\n break;\n }\n case \"customers_marketing_consent/update\": {\n const payload = decode(CustomerSmsConsentPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Customers, {\n _tag: \"refresh\",\n id: gid(\"Customer\", payload.value.id),\n version: triggeredAt,\n });\n break;\n }\n case \"customer.tags_added\":\n case \"customer.tags_removed\": {\n const payload = decode(CustomerTagsPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Customers, {\n _tag: \"refresh\",\n id: payload.value.customerId,\n version: payload.value.occurredAt,\n });\n break;\n }\n case \"customers/delete\": {\n const payload = decode(CustomerDeleteWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Customers, {\n _tag: \"delete\",\n id: gid(\"Customer\", payload.value.id),\n version: triggeredAt,\n });\n break;\n }\n case \"orders/create\":\n case \"orders/updated\": {\n const payload = decode(OrderWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Orders, { _tag: \"upsert\", payload: payload.value });\n break;\n }\n case \"orders/delete\": {\n const payload = decode(OrderDeleteWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Orders, {\n _tag: \"delete\",\n id: gid(\"Order\", payload.value.id),\n version: triggeredAt,\n });\n break;\n }\n case \"refunds/create\": {\n const payload = decode(RefundWebhookPayloadSchema);\n if (Option.isNone(payload)) return invalid;\n yield* to(Refunds, payload.value);\n break;\n }\n default:\n yield* Effect.logWarning(\"Ignoring unknown Shopify webhook topic\").pipe(\n Effect.annotateLogs({ topic }),\n );\n }\n\n return HttpServerResponse.jsonUnsafe({ ok: true });\n }),\n });\n\n return Connector.define({\n name: \"producer-shopify\",\n title: \"Shopify\",\n resources: [Products, Carts, Customers, Orders, Refunds],\n webhooks: [webhookRoute],\n });\n});\n\nexport type ShopifyConnectorRuntime = Effect.Success<ReturnType<typeof make>>;\n\nexport class ShopifyConnector extends Context.Service<ShopifyConnector, ShopifyConnectorRuntime>()(\n \"@useairfoil/producer-shopify/ShopifyConnector\",\n) {}\n\nexport const layer = (config: ShopifyConfig) => {\n const authLayer = ShopifyAuth.layer(config);\n const apiLayer = ShopifyApiClient.layer(config).pipe(Layer.provide(authLayer));\n\n return Layer.effect(ShopifyConnector)(\n make(config).pipe(Effect.annotateLogs({ component: \"producer-shopify\" })),\n ).pipe(Layer.provide(apiLayer));\n};\n\nexport const layerConfig = (config: Config.Wrap<ShopifyConfig>) =>\n Layer.unwrap(Config.unwrap(config).pipe(Effect.map(layer)));\n","import { fromCartWebhook } from \"./resources/carts/webhook\";\nimport { fromProductWebhook } from \"./resources/products/webhook\";\n\nexport * as ShopifyApiClient from \"./api/client\";\nexport * as ShopifyConnector from \"./connector\";\nexport { manifest } from \"./manifest\";\nexport type { Customer } from \"./resources/customers/row\";\nexport { CustomerSchema } from \"./resources/customers/row\";\nexport type { Order } from \"./resources/orders/row\";\nexport { OrderSchema } from \"./resources/orders/row\";\nexport type { OrderWebhookPayload } from \"./resources/orders/webhook\";\nexport {\n fromOrderWebhook,\n OrderDeleteWebhookPayloadSchema,\n OrderWebhookPayloadSchema,\n} from \"./resources/orders/webhook\";\nexport type { Refund } from \"./resources/refunds/row\";\nexport { RefundSchema } from \"./resources/refunds/row\";\nexport type { RefundWebhookPayload } from \"./resources/refunds/webhook\";\nexport { fromRefundWebhook, RefundWebhookPayloadSchema } from \"./resources/refunds/webhook\";\nexport type { Cart, CartLineItem } from \"./resources/carts/row\";\nexport { CartLineItemSchema, CartSchema } from \"./resources/carts/row\";\nexport type { CartWebhookPayload } from \"./resources/carts/webhook\";\nexport { CartWebhookPayloadSchema } from \"./resources/carts/webhook\";\nexport type {\n Product,\n ProductOption,\n ProductStatus,\n ProductVariant,\n ProductVariantInventoryPolicy,\n} from \"./resources/products/row\";\nexport {\n ProductOptionSchema,\n ProductSchema,\n ProductStatusSchema,\n ProductVariantInventoryPolicySchema,\n ProductVariantSchema,\n} from \"./resources/products/row\";\nexport type { ProductWebhookPayload } from \"./resources/products/webhook\";\nexport {\n ProductDeleteWebhookPayloadSchema,\n ProductWebhookPayloadSchema,\n} from \"./resources/products/webhook\";\nexport type { PageInfo } from \"./resources/shared\";\nexport { PageInfoSchema } from \"./resources/shared\";\n\nexport const ShopifyNormalize = {\n productWebhook: fromProductWebhook,\n cartWebhook: fromCartWebhook,\n} as const;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useairfoil/producer-shopify",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"repository": "useairfoil/
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"repository": "useairfoil/connector-kit",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
7
7
|
"src",
|
|
8
8
|
"README.md"
|
|
9
9
|
],
|
|
10
10
|
"type": "module",
|
|
11
|
-
"main": "./dist/index.
|
|
12
|
-
"types": "./dist/index.d.
|
|
11
|
+
"main": "./dist/index.mjs",
|
|
12
|
+
"types": "./dist/index.d.mts",
|
|
13
13
|
"exports": {
|
|
14
14
|
".": {
|
|
15
|
-
"types": "./dist/index.d.
|
|
16
|
-
"import": "./dist/index.
|
|
17
|
-
"default": "./dist/index.
|
|
15
|
+
"types": "./dist/index.d.mts",
|
|
16
|
+
"import": "./dist/index.mjs",
|
|
17
|
+
"default": "./dist/index.mjs"
|
|
18
18
|
},
|
|
19
19
|
"./manifest": {
|
|
20
|
-
"types": "./dist/manifest.d.
|
|
21
|
-
"import": "./dist/manifest.
|
|
22
|
-
"default": "./dist/manifest.
|
|
20
|
+
"types": "./dist/manifest.d.mts",
|
|
21
|
+
"import": "./dist/manifest.mjs",
|
|
22
|
+
"default": "./dist/manifest.mjs"
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
@@ -27,24 +27,24 @@
|
|
|
27
27
|
"docker:build": "docker build --load --file Dockerfile --tag airfoil/producer-shopify:local ../..",
|
|
28
28
|
"start": "tsx --env-file=.env src/main.ts start",
|
|
29
29
|
"sandbox": "tsx --env-file=.env src/main.ts sandbox",
|
|
30
|
+
"demo": "tsx src/main.ts demo",
|
|
30
31
|
"test": "dotenvx run --ignore=MISSING_ENV_FILE --quiet -- vitest",
|
|
31
32
|
"test:ci": "dotenvx run --ignore=MISSING_ENV_FILE --quiet -- vitest run",
|
|
32
33
|
"typecheck": "tsc --noEmit"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|
|
35
|
-
"@effect/platform-node": "^4.0.
|
|
36
|
-
"@effect/sql-pg": "^4.0.
|
|
37
|
-
"@useairfoil/connector-kit": "0.6.
|
|
38
|
-
"
|
|
39
|
-
"effect": "^4.0.0-rc.108"
|
|
36
|
+
"@effect/platform-node": "^4.0.7",
|
|
37
|
+
"@effect/sql-pg": "^4.0.7",
|
|
38
|
+
"@useairfoil/connector-kit": "0.6.1",
|
|
39
|
+
"effect": "^4.0.7"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@dotenvx/dotenvx": "^1.62.0",
|
|
43
|
-
"@effect/vitest": "^4.0.
|
|
43
|
+
"@effect/vitest": "^4.0.7",
|
|
44
44
|
"@types/node": "^24.2.0",
|
|
45
|
-
"@useairfoil/effect-vcr": "0.4.
|
|
46
|
-
"tsdown": "^0.
|
|
45
|
+
"@useairfoil/effect-vcr": "0.4.8",
|
|
46
|
+
"tsdown": "^0.23.0",
|
|
47
47
|
"tsx": "^4.21.0",
|
|
48
|
-
"vitest": "^
|
|
48
|
+
"vitest": "^5.0.3"
|
|
49
49
|
}
|
|
50
50
|
}
|