{"version":3,"sources":["../src/schemas/authors.ts","../src/schemas/shared.ts","../src/schemas/pages.ts","../src/schemas/tags.ts","../src/schemas/posts.ts","../src/schemas/settings.ts","../src/schemas/tiers.ts","../src/schemas/email.ts","../src/schemas/offers.ts","../src/schemas/members.ts","../src/schemas/newsletter.ts","../src/schemas/subscriptions.ts","../src/schemas/site.ts","../src/fetchers/browse-fetcher.ts","../src/fetchers/formats.ts","../src/fetchers/read-fetcher.ts","../src/fetchers/basic-fetcher.ts","../src/fetchers/mutation-fetcher.ts","../src/fetchers/delete-fetcher.ts","../src/api-composer.ts","../src/helpers/browse-params.ts","../src/helpers/fields.ts","../src/helpers/http-client.ts"],"names":["z","postsAuthorSchema"],"mappings":"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","sourcesContent":["import { z } from \"zod\";\n\nimport { ghostIdentitySchema, ghostMetadataSchema } from \"./shared\";\n\nexport const baseAuthorsSchema = z.object({\n  ...ghostIdentitySchema.shape,\n  ...ghostMetadataSchema.shape,\n  name: z.string(),\n  profile_image: z.string().nullable(),\n  cover_image: z.string().nullable(),\n  bio: z.string().nullable(),\n  website: z.string().nullable(),\n  location: z.string().nullable(),\n  facebook: z.string().nullable(),\n  twitter: z.string().nullable(),\n  count: z\n    .object({\n      posts: z.number(),\n    })\n    .optional(),\n  url: z.string().nullish(),\n});\n","import { z } from \"zod\";\n\nimport type { HTTPClient } from \"../helpers/http-client\";\n\nexport const ghostIdentitySchema = z.object({\n  slug: z.string(),\n  id: z.string(),\n});\n\nexport const ghostIdentityInputSchema = z.object({\n  slug: z.string().optional(),\n  id: z.string().optional(),\n  email: z.string().email().optional(),\n});\n\nexport type GhostIdentityInput = z.infer<typeof ghostIdentityInputSchema>;\n\nexport type GhostIdentity = z.infer<typeof ghostIdentitySchema>;\n\nexport const ghostMetaSchema = z.object({\n  pagination: z.object({\n    pages: z.number(),\n    page: z.number(),\n    limit: z.union([z.number(), z.literal(\"all\")]),\n    total: z.number(),\n    prev: z.number().nullable(),\n    next: z.number().nullable(),\n  }),\n});\n\nexport type GhostMeta = z.infer<typeof ghostMetaSchema>;\n\nexport const ghostExcerptSchema = z.object({\n  excerpt: z.string().optional(),\n  custom_excerpt: z.string().optional(),\n});\n\nexport const ghostCodeInjectionSchema = z.object({\n  codeinjection_head: z.string().nullable(),\n  codeinjection_foot: z.string().nullable(),\n});\n\nexport const ghostFacebookSchema = z.object({\n  og_image: z.string().nullable(),\n  og_title: z.string().nullable(),\n  og_description: z.string().nullable(),\n});\n\nexport const ghostTwitterSchema = z.object({\n  twitter_image: z.string().nullable(),\n  twitter_title: z.string().nullable(),\n  twitter_description: z.string().nullable(),\n});\n\nexport const ghostSocialMediaSchema = z.object({\n  ...ghostFacebookSchema.shape,\n  ...ghostTwitterSchema.shape,\n});\n\nexport const ghostMetadataSchema = z.object({\n  meta_title: z.string().nullable(),\n  meta_description: z.string().nullable(),\n});\n\nexport const ghostVisibilitySchema = z.union([\n  z.literal(\"public\"),\n  z.literal(\"members\"),\n  z.literal(\"none\"),\n  z.literal(\"internal\"),\n  z.literal(\"paid\"),\n  z.literal(\"tiers\"),\n]);\n\nexport const apiVersionsSchema = z\n  .string()\n  .regex(/^v5\\.\\d+/)\n  .default(\"v5.0\");\nexport type TAPIVersion<V> = V extends \"v5.0\" | `v5.${infer Minor}` ? `v5.${Minor}` : never;\nexport type APIVersions = z.infer<typeof apiVersionsSchema>;\n\nexport const contentAPICredentialsSchema = z.object({\n  key: z.string().regex(/[0-9a-f]{26}/, { message: \"'key' must have 26 hex characters\" }),\n  version: apiVersionsSchema,\n  url: z.string().url(),\n});\n\nexport type ContentAPICredentials = z.infer<typeof contentAPICredentialsSchema>;\n\nexport type APIResource =\n  | \"pages\"\n  | \"posts\"\n  | \"settings\"\n  | \"authors\"\n  | \"tiers\"\n  | \"tags\"\n  | \"members\"\n  | \"site\"\n  | \"offers\"\n  | \"users\"\n  | \"newsletters\"\n  | \"webhooks\"\n  | \"themes\"\n  | \"files\"\n  | \"images\";\n\nexport type APIEndpoint = \"admin\" | \"content\";\n\nexport type APICredentials = {\n  key: string;\n  version: APIVersions;\n  url: string;\n};\n\nexport type GhostRequestConfig = {\n  endpoint: APIEndpoint;\n  resource: APIResource;\n  httpClient: HTTPClient;\n};\n\nexport const adminAPICredentialsSchema = z.object({\n  key: z.string().regex(/[0-9a-f]{24}:[0-9a-f]{64}/, {\n    message:\n      \"'key' must have the following format {A}:{B}, where A is 24 hex characters and B is 64 hex characters\",\n  }),\n  version: apiVersionsSchema,\n  url: z.string().url(),\n});\n\nexport const slugOrIdSchema = z.union([z.object({ slug: z.string() }), z.object({ id: z.string() })]);\nexport const emailOrIdSchema = z.union([\n  z.object({ email: z.string().email() }),\n  z.object({ id: z.string() }),\n]);\nexport const identitySchema = z.union([\n  z.object({ email: z.string().email() }),\n  z.object({ id: z.string() }),\n  z.object({ slug: z.string() }),\n]);\n\nexport type AdminAPICredentials = z.infer<typeof adminAPICredentialsSchema>;\n","import { z } from \"zod\";\n\nimport { baseAuthorsSchema } from \"./authors\";\nimport {\n  ghostCodeInjectionSchema,\n  ghostIdentitySchema,\n  ghostMetadataSchema,\n  ghostSocialMediaSchema,\n  ghostVisibilitySchema,\n} from \"./shared\";\nimport { baseTagsSchema } from \"./tags\";\n\nconst postsAuthorSchema = baseAuthorsSchema.extend({\n  url: z.string().nullish(),\n});\n\nexport const basePagesSchema = z.object({\n  ...ghostIdentitySchema.shape,\n  ...ghostMetadataSchema.shape,\n  title: z.string(),\n  html: z.string().nullish(),\n  plaintext: z.string().nullish(),\n  comment_id: z.string().nullable(),\n  feature_image: z.string().nullable(),\n  feature_image_alt: z.string().nullable(),\n  feature_image_caption: z.string().nullable(),\n  featured: z.boolean(),\n  custom_excerpt: z.string().nullable(),\n  ...ghostCodeInjectionSchema.shape,\n  ...ghostSocialMediaSchema.shape,\n  visibility: ghostVisibilitySchema,\n  custom_template: z.string().nullable(),\n  canonical_url: z.string().nullable(),\n  authors: z.array(postsAuthorSchema).optional(),\n  tags: z.array(baseTagsSchema).optional(),\n  primary_author: postsAuthorSchema.nullish(),\n  primary_tag: baseTagsSchema.nullish(),\n  url: z.string(),\n  excerpt: z.string().nullish(),\n  reading_time: z.number().optional().default(0),\n  created_at: z.string(),\n  updated_at: z.string().nullish(),\n  published_at: z.string().nullable(),\n  email_subject: z.string().nullish(),\n  is_page: z.boolean().default(true),\n});\n","import { z } from \"zod\";\n\nimport {\n  ghostCodeInjectionSchema,\n  ghostIdentitySchema,\n  ghostMetadataSchema,\n  ghostSocialMediaSchema,\n  ghostVisibilitySchema,\n} from \"./shared\";\n\nexport const baseTagsSchema = z.object({\n  ...ghostIdentitySchema.shape,\n  ...ghostMetadataSchema.shape,\n  ...ghostCodeInjectionSchema.shape,\n  ...ghostSocialMediaSchema.shape,\n  name: z.string(),\n  description: z.string().nullable(),\n  feature_image: z.string().nullable(),\n  visibility: ghostVisibilitySchema,\n  canonical_url: z.string().nullable(),\n  accent_color: z.string().nullable(),\n  url: z.string(),\n  created_at: z.string().nullish(),\n  updated_at: z.string().nullish(),\n  count: z\n    .object({\n      posts: z.number(),\n    })\n    .optional(),\n});\n","import { z } from \"zod\";\n\nimport { baseAuthorsSchema } from \"./authors\";\nimport {\n  ghostCodeInjectionSchema,\n  ghostIdentitySchema,\n  ghostMetadataSchema,\n  ghostSocialMediaSchema,\n  ghostVisibilitySchema,\n} from \"./shared\";\nimport { baseTagsSchema } from \"./tags\";\n\nconst postsAuthorSchema = baseAuthorsSchema.extend({\n  url: z.string().nullish(),\n});\nexport const basePostsSchema = z.object({\n  ...ghostIdentitySchema.shape,\n  ...ghostMetadataSchema.shape,\n  title: z.string(),\n  html: z.string().nullish(),\n  plaintext: z.string().nullish(),\n  comment_id: z.string().nullable(),\n  feature_image: z.string().nullable(),\n  feature_image_alt: z.string().nullable(),\n  feature_image_caption: z.string().nullable(),\n  featured: z.boolean(),\n  custom_excerpt: z.string().nullable(),\n  ...ghostCodeInjectionSchema.shape,\n  ...ghostSocialMediaSchema.shape,\n  visibility: ghostVisibilitySchema,\n  custom_template: z.string().nullable(),\n  canonical_url: z.string().nullable(),\n  authors: z.array(postsAuthorSchema).optional(),\n  tags: z.array(baseTagsSchema).optional(),\n  primary_author: postsAuthorSchema.nullish(),\n  primary_tag: baseTagsSchema.nullish(),\n  url: z.string(),\n  excerpt: z.string().nullable(),\n  reading_time: z.number().optional().default(0),\n  created_at: z.string(),\n  updated_at: z.string().nullish(),\n  published_at: z.string().nullable(),\n  email_subject: z.string().nullish(),\n  is_page: z.boolean().default(false),\n});\n","import { z } from \"zod\";\n\nexport const baseSettingsSchema = z.object({\n  title: z.string(),\n  description: z.string(),\n  logo: z.string().nullable(),\n  icon: z.string().nullable(),\n  accent_color: z.string().nullable(),\n  cover_image: z.string().nullable(),\n  facebook: z.string().nullable(),\n  twitter: z.string().nullable(),\n  lang: z.string(),\n  timezone: z.string(),\n  codeinjection_head: z.string().nullable(),\n  codeinjection_foot: z.string().nullable(),\n  navigation: z.array(\n    z.object({\n      label: z.string(),\n      url: z.string(),\n    })\n  ),\n  secondary_navigation: z.array(\n    z.object({\n      label: z.string(),\n      url: z.string(),\n    })\n  ),\n  meta_title: z.string().nullable(),\n  meta_description: z.string().nullable(),\n  og_image: z.string().nullable(),\n  og_title: z.string().nullable(),\n  og_description: z.string().nullable(),\n  twitter_image: z.string().nullable(),\n  twitter_title: z.string().nullable(),\n  twitter_description: z.string().nullable(),\n  members_support_address: z.string(),\n  url: z.string(),\n});\n","import { z } from \"zod\";\n\nimport { ghostIdentitySchema, ghostVisibilitySchema } from \"./shared\";\n\nexport const baseTiersSchema = z.object({\n  ...ghostIdentitySchema.shape,\n  name: z.string(),\n  description: z.string().nullable(),\n  active: z.boolean(),\n  type: z.union([z.literal(\"free\"), z.literal(\"paid\")]),\n  welcome_page_url: z.string().nullable(),\n  created_at: z.string(),\n  updated_at: z.string().nullable(),\n  stripe_prices: z\n    .array(z.number())\n    .optional()\n    .transform((v) => (v?.length ? v : [])),\n  monthly_price: z\n    .number()\n    .nullable()\n    .optional()\n    .transform((v) => (v ? v : null)),\n  yearly_price: z\n    .number()\n    .nullable()\n    .optional()\n    .transform((v) => (v ? v : null)),\n  benefits: z.array(z.string()).optional(),\n  visibility: ghostVisibilitySchema,\n  currency: z.string().nullish(),\n  trial_days: z.number().default(0),\n});\n","import { z } from \"zod\";\n\nexport const baseEmailSchema = z.object({\n  id: z.string(),\n  uuid: z.string(),\n  status: z.string(),\n  recipient_filter: z.string(),\n  error: z.string().nullish(),\n  error_data: z.any().nullable(),\n  email_count: z.number(),\n  delivered_count: z.number(),\n  opened_count: z.number(),\n  failed_count: z.number(),\n  subject: z.string(),\n  from: z.string(),\n  reply_to: z.string().nullable(),\n  source: z.string(), // lexical format\n  html: z.string().nullable(),\n  plaintext: z.string().nullable(),\n  track_opens: z.boolean(),\n  submitted_at: z.string(),\n  created_at: z.string(),\n  updated_at: z.string(),\n});\n","import { z } from \"zod\";\n\nexport const baseOffersSchema = z.object({\n  id: z.string(),\n  name: z.string({ description: \"Internal name for an offer, must be unique\" }).default(\"\"),\n  code: z.string({ description: \"Shortcode for the offer, for example: https://yoursite.com/black-friday\" }),\n  display_title: z.string({ description: \"Name displayed in the offer window\" }).nullish(),\n  display_description: z.string({ description: \"Text displayed in the offer window\" }).nullish(),\n  type: z.union([z.literal(\"percent\"), z.literal(\"fixed\"), z.literal(\"trial\")]),\n  cadence: z.union([z.literal(\"month\"), z.literal(\"year\")]),\n  amount: z.number({\n    description: `Offer discount amount, as a percentage or fixed value as set in type. \n      Amount is always denoted by the smallest currency unit \n      (e.g., 100 cents instead of $1.00 in USD)`,\n  }),\n  duration: z.union([z.literal(\"once\"), z.literal(\"forever\"), z.literal(\"repeating\"), z.literal(\"trial\")], {\n    description: \"once/forever/repeating. repeating duration is only available when cadence is month\",\n  }),\n  duration_in_months: z\n    .number({ description: \"Number of months offer should be repeated when duration is repeating\" })\n    .nullish(),\n  currency_restriction: z\n    .boolean({\n      description:\n        \"Denotes whether the offer `currency` is restricted. If so, changing the currency invalidates the offer\",\n    })\n    .nullish(),\n  currency: z\n    .string({\n      description: \"fixed type offers only - specifies tier's currency as three letter ISO currency code\",\n    })\n    .nullish(),\n  status: z.union([z.literal(\"active\"), z.literal(\"archived\")], {\n    description: \"active or archived - denotes if the offer is active or archived\",\n  }),\n  redemption_count: z.number({ description: \"Number of times the offer has been redeemed\" }).nullish(),\n  tier: z.object(\n    {\n      id: z.string(),\n      name: z.string().nullish(),\n    },\n    { description: \"Tier on which offer is applied\" }\n  ),\n});\n","import { z } from \"zod\";\n\nimport { baseNewsletterSchema } from \"./newsletter\";\nimport { baseSubscriptionsSchema } from \"./subscriptions\";\n\nexport const baseMembersSchema = z.object({\n  id: z.string(),\n  email: z.string({ description: \"The email address of the member\" }),\n  name: z.string({ description: \"The name of the member\" }).nullable(),\n  note: z.string({ description: \"(nullable) A note about the member\" }).nullish(),\n  geolocation: z.string({ description: \"(nullable) The geolocation of the member\" }).nullish(),\n  created_at: z.string({ description: \"The date and time the member was created\" }),\n  updated_at: z\n    .string({ description: \"(nullable) The date and time the member was last updated\" })\n    .nullish(),\n  labels: z.array(\n    z.object({\n      id: z.string({ description: \"The ID of the label\" }),\n      name: z.string({ description: \"The name of the label\" }),\n      slug: z.string({ description: \"The slug of the label\" }),\n      created_at: z.string({ description: \"The date and time the label was created\" }),\n      updated_at: z\n        .string({ description: \"(nullable) The date and time the label was last updated\" })\n        .nullish(),\n    }),\n    { description: \"The labels associated with the member\" }\n  ),\n  subscriptions: z.array(baseSubscriptionsSchema, {\n    description: \"The subscriptions associated with the member\",\n  }),\n  avatar_image: z.string({ description: \"The URL of the member's avatar image\" }),\n  email_count: z.number({ description: \"The number of emails sent to the member\" }),\n  email_opened_count: z.number({ description: \"The number of emails opened by the member\" }),\n  email_open_rate: z.number({ description: \"(nullable) The open rate of the member\" }).nullish(),\n  status: z.string({ description: \"The status of the member\" }),\n  last_seen_at: z.string({ description: \"(nullable) The date and time the member was last seen\" }).nullish(),\n  newsletters: z.array(baseNewsletterSchema),\n});\n","import { z } from \"zod\";\n\nimport { ghostIdentitySchema } from \"./shared\";\n\nexport const baseNewsletterSchema = z.object({\n  ...ghostIdentitySchema.shape,\n  name: z.string({ description: \"Public name for the newsletter\" }),\n  description: z.string({ description: \"(nullable) Public description of the newsletter\" }).nullish(),\n  sender_name: z.string({ description: \"(nullable) The sender name of the emails\" }).nullish(),\n  sender_email: z\n    .string({ description: \"(nullable) The email from which to send emails. Requires validation.\" })\n    .nullish(),\n  sender_reply_to: z.string({\n    description:\n      \"The reply-to email address for sent emails. Can be either newsletter (= use sender_email) or support (use support email from Portal settings).\",\n  }),\n  status: z.union([z.literal(\"active\"), z.literal(\"archived\")], {\n    description: \"active or archived - denotes if the newsletter is active or archived\",\n  }),\n  visibility: z.union([z.literal(\"public\"), z.literal(\"members\")]),\n  subscribe_on_signup: z.boolean({\n    description: \"true/false. Whether members should automatically subscribe to this newsletter on signup\",\n  }),\n  sort_order: z.number({ description: \"The order in which newsletters are displayed in the Portal\" }),\n  header_image: z\n    .string({\n      description: \"(nullable) Path to an image to show at the top of emails. Recommended size 1200x600\",\n    })\n    .nullish(),\n  show_header_icon: z.boolean({ description: \"true/false. Show the site icon in emails\" }),\n  show_header_title: z.boolean({ description: \"true/false. Show the site name in emails\" }),\n  title_font_category: z.union([z.literal(\"serif\"), z.literal(\"sans_serif\")], {\n    description: \"Title font style. Either serif or sans_serif\",\n  }),\n  title_alignment: z.string().nullish(),\n  show_feature_image: z.boolean({ description: \"true/false. Show the post's feature image in emails\" }),\n  body_font_category: z.union([z.literal(\"serif\"), z.literal(\"sans_serif\")], {\n    description: \"Body font style. Either serif or sans_serif\",\n  }),\n  footer_content: z\n    .string({\n      description:\n        \"(nullable) Extra information or legal text to show in the footer of emails. Should contain valid HTML.\",\n    })\n    .nullish(),\n  show_badge: z.boolean({\n    description:\n      \"true/false. Show you’re a part of the indie publishing movement by adding a small Ghost badge in the footer\",\n  }),\n  created_at: z.string(),\n  updated_at: z.string().nullish(),\n  show_header_name: z.boolean({ description: \"true/false. Show the newsletter name in emails\" }),\n  uuid: z.string(),\n});\n","import { z } from \"zod\";\n\nimport { baseOffersSchema } from \"./offers\";\nimport { baseTiersSchema } from \"./tiers\";\n\nexport const baseSubscriptionsSchema = z.object({\n  id: z.string({ description: \"Stripe subscription ID sub_XXXX\" }),\n  customer: z.object(\n    {\n      id: z.string(),\n      name: z.string().nullable(),\n      email: z.string(),\n    },\n    { description: \"Stripe customer attached to the subscription\" }\n  ),\n  status: z.string({ description: \"Subscription status\" }),\n  start_date: z.string({ description: \"Subscription start date\" }),\n  default_payment_card_last4: z.string({ description: \"Last 4 digits of the card\" }).nullable(),\n  cancel_at_period_end: z.boolean({\n    description: \"If the subscription should be canceled or renewed at period end\",\n  }),\n  cancellation_reason: z.string({ description: \"Reason for subscription cancellation\" }).nullable(),\n  current_period_end: z.string({ description: \"Subscription end date\" }),\n  price: z.object({\n    id: z.string({ description: \"Stripe price ID\" }),\n    price_id: z.string({ description: \"Ghost price ID\" }),\n    nickname: z.string({ description: \"Price nickname\" }),\n    amount: z.number({ description: \"Price amount\" }),\n    interval: z.string({ description: \"Price interval\" }),\n    type: z.string({ description: \"Price type\" }),\n    currency: z.string({ description: \"Price currency\" }),\n  }),\n  tier: baseTiersSchema.nullish(),\n  offer: baseOffersSchema.nullish(),\n});\n","import { z } from \"zod\";\n\nexport const baseSiteSchema = z.object({\n  title: z.string(),\n  description: z.string(),\n  logo: z.string().nullable(),\n  version: z.string(),\n  url: z.string(),\n});\n","import { z, ZodRawShape } from \"zod\";\n\nimport { BrowseParamsSchema } from \"../helpers/browse-params\";\nimport type { HTTPClient } from \"../helpers/http-client\";\nimport { ghostMetaSchema, type APIResource } from \"../schemas/shared\";\nimport type { Exactly, Mask } from \"../utils\";\nimport { contentFormats, type ContentFormats } from \"./formats\";\n\nexport class BrowseFetcher<\n  const Resource extends APIResource = any,\n  Params extends BrowseParamsSchema = any,\n  Fields extends Mask<OutputShape> = any,\n  BaseShape extends ZodRawShape = any,\n  OutputShape extends ZodRawShape = any,\n  IncludeShape extends ZodRawShape = any,\n> {\n  protected _urlParams: Record<string, string> = {};\n  protected _urlSearchParams: URLSearchParams | undefined = undefined;\n  protected _includeFields: (keyof IncludeShape)[] = [];\n\n  constructor(\n    protected resource: Resource,\n    protected config: {\n      schema: z.ZodObject<BaseShape>;\n      output: z.ZodObject<OutputShape>;\n      include: z.ZodObject<IncludeShape>;\n    },\n    private _params: {\n      browseParams?: Params;\n      include?: (keyof IncludeShape)[];\n      fields?: Fields;\n      formats?: string[];\n    } = { browseParams: {} as Params, include: [], fields: {} as z.noUnrecognized<Fields, OutputShape> },\n    protected httpClient: HTTPClient,\n  ) {\n    this._buildUrlParams();\n  }\n\n  /**\n   * Lets you choose output format for the content of Post and Pages resources\n   * The choices are html, mobiledoc or plaintext. It will transform the output of the fetcher to a new shape\n   * with the selected formats required.\n   *\n   * @param formats html, mobiledoc or plaintext\n   * @returns A new Fetcher with the fixed output shape and the formats specified\n   */\n  public formats<Formats extends Mask<Pick<OutputShape, ContentFormats>>>(\n    formats: z.noUnrecognized<Formats, OutputShape>,\n  ) {\n    const params = {\n      ...this._params,\n      formats: Object.keys(formats).filter((key) => contentFormats.includes(key)),\n    };\n    return new BrowseFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: this.config.output.required(formats as Exactly<Formats, Formats>),\n        include: this.config.include,\n      },\n      params,\n      this.httpClient,\n    );\n  }\n\n  /**\n   * Let's you include special keys into the Ghost API Query to retrieve complimentary info\n   * The available keys are defined by the Resource include schema, will not care about unknown keys.\n   * Returns a new Fetcher with an Output shape modified with the include keys required.\n   *\n   * @param include Include specific keys from the include shape\n   * @returns A new Fetcher with the fixed output shape and the formats specified\n   */\n  public include<Includes extends Mask<IncludeShape>>(include: z.noUnrecognized<Includes, IncludeShape>) {\n    const params = {\n      ...this._params,\n      include: Object.keys(this.config.include.parse(include)),\n    };\n    return new BrowseFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: this.config.output.required(include as Exactly<Includes, Includes>),\n        include: this.config.include,\n      },\n      params,\n      this.httpClient,\n    );\n  }\n\n  /**\n   * Let's you strip the output to only the specified keys of your choice that are in the config Schema\n   * Will not care about unknown keys and return a new Fetcher with an Output shape with only the selected keys.\n   *\n   * @param fields Any keys from the resource Schema\n   * @returns A new Fetcher with the fixed output shape having only the selected Fields\n   */\n  public fields<Fields extends Mask<OutputShape>>(fields: z.noUnrecognized<Fields, OutputShape>) {\n    const newOutput = this.config.output.pick(fields as Exactly<Fields, Fields>);\n    return new BrowseFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: newOutput,\n        include: this.config.include,\n      },\n      this._params,\n      this.httpClient,\n    );\n  }\n\n  public getResource() {\n    return this.resource;\n  }\n\n  public getParams() {\n    return this._params;\n  }\n\n  public getOutputFields() {\n    return this.config.output.keyof().options as string[];\n  }\n\n  public getURLSearchParams() {\n    return this._urlSearchParams;\n  }\n\n  public getIncludes() {\n    return this._params?.include || [];\n  }\n\n  public getFormats() {\n    return this._params?.formats || [];\n  }\n\n  private _buildUrlParams() {\n    const inputKeys = this.config.schema.keyof().options as string[];\n    const outputKeys = this.config.output.keyof().options as string[];\n    this._urlParams = {\n      ...this._urlBrowseParams(),\n    };\n\n    if (inputKeys.length !== outputKeys.length && outputKeys.length > 0) {\n      this._urlParams.fields = outputKeys.join(\",\");\n    }\n    if (this._params.include && this._params.include.length > 0) {\n      this._urlParams.include = this._params.include.join(\",\");\n    }\n    if (this._params.formats && this._params.formats.length > 0) {\n      this._urlParams.formats = this._params.formats.join(\",\");\n    }\n    this._urlSearchParams = new URLSearchParams();\n    for (const [key, value] of Object.entries(this._urlParams)) {\n      this._urlSearchParams.append(key, value);\n    }\n  }\n\n  private _urlBrowseParams() {\n    let urlBrowseParams: { filter?: string; page?: string; order?: string; limit?: string } = {};\n    if (this._params.browseParams === undefined) return {};\n    const { limit, page, ...params } = this._params.browseParams;\n    urlBrowseParams = {\n      ...params,\n    };\n    if (limit) {\n      urlBrowseParams.limit = limit.toString();\n    }\n    if (page) {\n      urlBrowseParams.page = page.toString();\n    }\n    return urlBrowseParams;\n  }\n\n  private _getResultSchema() {\n    return z.discriminatedUnion(\"success\", [\n      z.object({\n        success: z.literal(true),\n        meta: ghostMetaSchema,\n        data: z.array(this.config.output),\n      }),\n      z.object({\n        success: z.literal(false),\n        errors: z.array(\n          z.object({\n            type: z.string(),\n            message: z.string(),\n          }),\n        ),\n      }),\n    ]);\n  }\n\n  public async fetch(options?: RequestInit) {\n    const resultSchema = this._getResultSchema();\n    const result = await this.httpClient.fetch({\n      resource: this.resource,\n      searchParams: this._urlSearchParams,\n      options,\n    });\n    let data: any = {};\n    if (result.errors) {\n      data.success = false;\n      data.errors = result.errors;\n    } else {\n      data = {\n        success: true,\n        meta: result.meta || {\n          pagination: {\n            pages: 0,\n            page: 0,\n            limit: 15,\n            total: 0,\n            prev: null,\n            next: null,\n          },\n        },\n        data: result[this.resource],\n      };\n    }\n    return resultSchema.parse(data);\n  }\n\n  public async paginate(options?: RequestInit) {\n    if (!this._params.browseParams?.page) {\n      this._params.browseParams = {\n        ...this._params.browseParams,\n        page: 1,\n      } as Params;\n      this._buildUrlParams();\n    }\n\n    const resultSchema = this._getResultSchema();\n    const result = await this.httpClient.fetch({\n      resource: this.resource,\n      searchParams: this._urlSearchParams,\n      options,\n    });\n    let data: any = {};\n    if (result.errors) {\n      data.success = false;\n      data.errors = result.errors;\n    } else {\n      data = {\n        success: true,\n        meta: result.meta || {\n          pagination: {\n            pages: 0,\n            page: 0,\n            limit: 15,\n            total: 0,\n            prev: null,\n            next: null,\n          },\n        },\n        data: result[this.resource],\n      };\n    }\n    const response: {\n      current: z.infer<typeof resultSchema>;\n      next: BrowseFetcher<Resource, Params, Fields, BaseShape, OutputShape, IncludeShape> | undefined;\n    } = {\n      current: resultSchema.parse(data),\n      next: undefined,\n    };\n    if (response.current.success === false) return response;\n    const { meta } = response.current;\n    if (meta.pagination.pages <= 1 || meta.pagination.page === meta.pagination.pages) return response;\n    const params = {\n      ...this._params,\n      browseParams: {\n        ...this._params.browseParams,\n        page: meta.pagination.page + 1,\n      },\n    };\n    const next = new BrowseFetcher(this.resource, this.config, params, this.httpClient);\n    response.next = next;\n    return response;\n  }\n}\n","export type ContentFormats = \"html\" | \"mobiledoc\" | \"plaintext\" | \"lexical\";\nexport const contentFormats = [\"html\", \"mobiledoc\", \"plaintext\", \"lexical\"];\n","import { z, ZodRawShape } from \"zod\";\n\nimport type { HTTPClient } from \"../helpers/http-client\";\nimport { type APIResource, type GhostIdentityInput } from \"../schemas/shared\";\nimport type { Exactly, Mask } from \"../utils\";\nimport { contentFormats, type ContentFormats } from \"./formats\";\n\nexport class ReadFetcher<\n  const Resource extends APIResource = any,\n  Fields extends Mask<OutputShape> = any,\n  BaseShape extends ZodRawShape = any,\n  OutputShape extends ZodRawShape = any,\n  IncludeShape extends ZodRawShape = any,\n> {\n  protected _urlParams: Record<string, string> = {};\n  protected _urlSearchParams: URLSearchParams | undefined = undefined;\n  protected _pathnameIdentity: string | undefined = undefined;\n  protected _includeFields: (keyof IncludeShape)[] = [];\n\n  constructor(\n    protected resource: Resource,\n    protected config: {\n      schema: z.ZodObject<BaseShape>;\n      output: z.ZodObject<OutputShape>;\n      include: z.ZodObject<IncludeShape>;\n    },\n    private _params: {\n      identity: GhostIdentityInput;\n      include?: (keyof IncludeShape)[];\n      fields?: Fields;\n      formats?: string[];\n    },\n    protected httpClient: HTTPClient,\n  ) {\n    this._buildUrlParams();\n  }\n\n  /**\n   * Lets you choose output format for the content of Post and Pages resources\n   * The choices are html, mobiledoc or plaintext. It will transform the output of the fetcher to a new shape\n   * with the selected formats required.\n   *\n   * @param formats html, mobiledoc or plaintext\n   * @returns A new Fetcher with the fixed output shape and the formats specified\n   */\n  public formats<Formats extends Mask<Pick<OutputShape, ContentFormats>>>(\n    formats: z.noUnrecognized<Formats, OutputShape>,\n  ) {\n    const params = {\n      ...this._params,\n      formats: Object.keys(formats).filter((key) => contentFormats.includes(key)),\n    };\n    return new ReadFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: this.config.output.required(formats as Exactly<Formats, Formats>),\n        include: this.config.include,\n      },\n      params,\n      this.httpClient,\n    );\n  }\n\n  /**\n   * Let's you include special keys into the Ghost API Query to retrieve complimentary info\n   * The available keys are defined by the Resource include schema, will not care about unknown keys.\n   * Returns a new Fetcher with an Output shape modified with the include keys required.\n   *\n   * @param include Include specific keys from the include shape\n   * @returns A new Fetcher with the fixed output shape and the formats specified\n   */\n  public include<Includes extends Mask<IncludeShape>>(include: z.noUnrecognized<Includes, IncludeShape>) {\n    const params = {\n      ...this._params,\n      include: Object.keys(this.config.include.parse(include)),\n    };\n    return new ReadFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: this.config.output.required(include as Exactly<Includes, Includes>),\n        include: this.config.include,\n      },\n      params,\n      this.httpClient,\n    );\n  }\n\n  /**\n   * Let's you strip the output to only the specified keys of your choice that are in the config Schema\n   * Will not care about unknown keys and return a new Fetcher with an Output shape with only the selected keys.\n   *\n   * @param fields Any keys from the resource Schema\n   * @returns A new Fetcher with the fixed output shape having only the selected Fields\n   */\n  public fields<Fields extends Mask<OutputShape>>(fields: z.noUnrecognized<Fields, OutputShape>) {\n    const newOutput = this.config.output.pick(fields as Exactly<Fields, Fields>);\n    return new ReadFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: newOutput,\n        include: this.config.include,\n      },\n      this._params,\n      this.httpClient,\n    );\n  }\n\n  public getResource() {\n    return this.resource;\n  }\n\n  public getParams() {\n    return this._params;\n  }\n\n  public getOutputFields() {\n    return this.config.output.keyof().options as string[];\n  }\n\n  public getIncludes() {\n    return this._params?.include || [];\n  }\n\n  public getFormats() {\n    return this._params?.formats || [];\n  }\n\n  private _buildUrlParams() {\n    const inputKeys = this.config.schema.keyof().options as string[];\n    const outputKeys = this.config.output.keyof().options as string[];\n\n    if (inputKeys.length !== outputKeys.length && outputKeys.length > 0) {\n      this._urlParams.fields = outputKeys.join(\",\");\n    }\n    if (this._params.include && this._params.include.length > 0) {\n      this._urlParams.include = this._params.include.join(\",\");\n    }\n    if (this._params.formats && this._params.formats.length > 0) {\n      this._urlParams.formats = this._params.formats.join(\",\");\n    }\n\n    if (this._params.identity.id) {\n      this._pathnameIdentity = `${this._params.identity.id}`;\n    } else if (this._params.identity.slug) {\n      this._pathnameIdentity = `slug/${this._params.identity.slug}`;\n    } else if (this._params.identity.email) {\n      this._pathnameIdentity = `email/${this._params.identity.email}`;\n    } else {\n      throw new Error(\"Identity is not defined\");\n    }\n    this._urlSearchParams = new URLSearchParams();\n    for (const [key, value] of Object.entries(this._urlParams)) {\n      this._urlSearchParams.append(key, value);\n    }\n  }\n\n  public async fetch(options?: RequestInit) {\n    const res = z.discriminatedUnion(\"success\", [\n      z.object({\n        success: z.literal(true),\n        data: this.config.output,\n      }),\n      z.object({\n        success: z.literal(false),\n        errors: z.array(\n          z.object({\n            type: z.string(),\n            message: z.string(),\n          }),\n        ),\n      }),\n    ]);\n    const result = await this.httpClient.fetch({\n      resource: this.resource,\n      pathnameIdentity: this._pathnameIdentity,\n      searchParams: this._urlSearchParams,\n      options,\n    });\n    let data: any = {};\n    if (result.errors) {\n      data.success = false;\n      data.errors = result.errors;\n    } else {\n      data = {\n        success: true,\n        data: result[this.resource][0],\n      };\n    }\n    return res.parse(data);\n  }\n}\n","import { z, ZodTypeAny } from \"zod\";\n\nimport type { HTTPClient } from \"../helpers/http-client\";\nimport type { APIResource } from \"../schemas/shared\";\n\nexport class BasicFetcher<const Resource extends APIResource = any, OutputShape extends ZodTypeAny = any> {\n  constructor(\n    protected resource: Resource,\n    protected config: {\n      output: OutputShape;\n    },\n    protected httpClient: HTTPClient,\n  ) {}\n\n  public getResource() {\n    return this.resource;\n  }\n\n  public async fetch(options?: RequestInit) {\n    const res = z.discriminatedUnion(\"success\", [\n      z.object({\n        success: z.literal(true),\n        data: this.config.output,\n      }),\n      z.object({\n        success: z.literal(false),\n        errors: z.array(\n          z.object({\n            type: z.string(),\n            message: z.string(),\n          }),\n        ),\n      }),\n    ]);\n    const result = await this.httpClient.fetch({ options, resource: this.resource });\n    let data: any = {};\n    if (result.errors) {\n      data.success = false;\n      data.errors = result.errors;\n    } else {\n      data = {\n        success: true,\n        data: result[this.resource],\n      };\n    }\n    return res.parse(data);\n  }\n}\n","import { z, ZodRawShape, ZodTypeAny } from \"zod\";\n\nimport { HTTPClient } from \"../helpers/http-client\";\nimport type { APIResource } from \"../schemas/shared\";\n\nexport class MutationFetcher<\n  const Resource extends APIResource = any,\n  OutputShape extends ZodRawShape = any,\n  ParamsShape extends ZodTypeAny = any,\n  const HTTPVerb extends \"POST\" | \"PUT\" = \"POST\"\n> {\n  protected _urlParams: Record<string, string> = {};\n  protected _urlSearchParams: URLSearchParams | undefined = undefined;\n  protected _pathnameIdentity: string | undefined = undefined;\n\n  constructor(\n    protected resource: Resource,\n    protected config: {\n      output: z.ZodObject<OutputShape>;\n      paramsShape?: ParamsShape;\n    },\n    private _params: ({ id?: string } & ParamsShape[\"_output\"]) | undefined,\n    protected _options: {\n      method: HTTPVerb;\n      body: Record<string, unknown>;\n    },\n    protected httpClient: HTTPClient\n  ) {\n    this._buildUrlParams();\n  }\n\n  public getResource() {\n    return this.resource;\n  }\n\n  public getParams() {\n    return this._params;\n  }\n\n  private _buildUrlParams() {\n    if (this._params) {\n      for (const [key, value] of Object.entries(this._params)) {\n        if (key !== \"id\") {\n          this._urlParams[key] = value;\n        }\n      }\n    }\n\n    this._urlSearchParams = new URLSearchParams();\n    if (this._params?.id) {\n      this._pathnameIdentity = `${this._params.id}`;\n    }\n    for (const [key, value] of Object.entries(this._urlParams)) {\n      this._urlSearchParams.append(key, value);\n    }\n  }\n\n  public async submit() {\n    const schema = z.discriminatedUnion(\"success\", [\n      z.object({\n        success: z.literal(true),\n        data: this.config.output,\n      }),\n      z.object({\n        success: z.literal(false),\n        errors: z.array(\n          z.object({\n            type: z.string(),\n            message: z.string(),\n            context: z.string().nullish(),\n          })\n        ),\n      }),\n    ]);\n    // Ghost API is expecting a JSON object with a key that matches the resource name\n    // e.g. { posts: [ { title: \"Hello World\" } ] }\n    // https://ghost.org/docs/api/v3/content/#create-a-post\n    // body is also an array of objects, so we need to wrap it in another array\n    // but Ghost will throw an error if given more than 1 item in the array.\n    const createData = {\n      [this.resource]: [this._options.body],\n    };\n    const response = await this.httpClient.fetch({\n      resource: this.resource,\n      searchParams: this._urlSearchParams,\n      pathnameIdentity: this._pathnameIdentity,\n      options: {\n        method: this._options.method,\n        body: JSON.stringify(createData),\n      },\n    });\n    let result: any = {};\n    if (response.errors) {\n      result.success = false;\n      result.errors = response.errors;\n    } else {\n      result = {\n        success: true,\n        data: response[this.resource][0],\n      };\n    }\n    return schema.parse(result);\n  }\n}\n","import { z } from \"zod\";\n\nimport type { HTTPClient } from \"../helpers/http-client\";\nimport type { APIResource } from \"../schemas/shared\";\n\nexport class DeleteFetcher<const Resource extends APIResource = any> {\n  protected _pathnameIdentity: string | undefined = undefined;\n\n  constructor(\n    protected resource: Resource,\n    private _params: { id: string },\n    protected httpClient: HTTPClient\n  ) {\n    this._buildPathnameIdentity();\n  }\n\n  public getResource() {\n    return this.resource;\n  }\n\n  public getParams() {\n    return this._params;\n  }\n\n  private _buildPathnameIdentity() {\n    if (!this._params.id) {\n      throw new Error(\"Missing id in params\");\n    }\n    this._pathnameIdentity = this._params.id;\n  }\n\n  public async submit() {\n    const schema = z.discriminatedUnion(\"success\", [\n      z.object({\n        success: z.literal(true),\n      }),\n      z.object({\n        success: z.literal(false),\n        errors: z.array(\n          z.object({\n            type: z.string(),\n            message: z.string(),\n            context: z.string().nullish(),\n          })\n        ),\n      }),\n    ]);\n    let result: any = {};\n    try {\n      const response = await this.httpClient.fetchRawResponse({\n        resource: this.resource,\n        pathnameIdentity: this._pathnameIdentity,\n        options: {\n          method: \"DELETE\",\n        },\n      });\n      if (response.status === 204) {\n        result = {\n          success: true,\n        };\n      } else {\n        const res = await response.json();\n        if (res.errors) {\n          result.success = false;\n          result.errors = res.errors;\n        }\n      }\n    } catch (e) {\n      result = {\n        success: false,\n        errors: [\n          {\n            type: \"FetchError\",\n            message: (e as Error).toString(),\n          },\n        ],\n      };\n    }\n    return schema.parse(result);\n  }\n}\n","import { z, ZodRawShape, ZodTypeAny } from \"zod\";\n\nimport { DeleteFetcher } from \"./fetchers\";\nimport { BrowseFetcher } from \"./fetchers/browse-fetcher\";\nimport { MutationFetcher } from \"./fetchers/mutation-fetcher\";\nimport { ReadFetcher } from \"./fetchers/read-fetcher\";\nimport { parseBrowseParams, type BrowseParams } from \"./helpers/browse-params\";\nimport type { HTTPClientFactory } from \"./helpers/http-client\";\nimport type { APIResource } from \"./schemas\";\nimport type { IsAny } from \"./utils\";\n\nfunction isZodObject(schema: z.ZodObject<any> | z.ZodTypeAny): schema is z.ZodObject<any> {\n  return (schema as z.ZodObject<any>).partial !== undefined;\n}\n\n/**\n * API Composer contains all methods, pick and choose.\n */\nexport class APIComposer<\n  const Resource extends APIResource = any,\n  Shape extends ZodRawShape = any,\n  IdentityShape extends z.ZodTypeAny = any,\n  IncludeShape extends ZodRawShape = any,\n  CreateShape extends ZodTypeAny = any,\n  CreateOptions extends ZodTypeAny = any,\n  UpdateShape extends ZodTypeAny = any,\n  UpdateOptions extends ZodTypeAny = any,\n> {\n  constructor(\n    protected resource: Resource,\n    protected config: {\n      schema: z.ZodObject<Shape>;\n      identitySchema: IdentityShape;\n      include: z.ZodObject<IncludeShape>;\n      createSchema?: CreateShape;\n      createOptionsSchema?: CreateOptions;\n      updateSchema?: UpdateShape;\n      updateOptionsSchema?: UpdateOptions;\n    },\n    protected httpClientFactory: HTTPClientFactory,\n  ) {}\n\n  /**\n   * Browse function that accepts browse params order, filter, page and limit. Will return an instance\n   * of BrowseFetcher class.\n   */\n  public browse<\n    const OrderStr extends string,\n    const FilterStr extends string,\n    const P extends {\n      order?: OrderStr;\n      limit?: number | \"all\";\n      page?: number | string;\n      filter?: FilterStr;\n    },\n  >(options?: BrowseParams<P, Shape & IncludeShape>) {\n    return new BrowseFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: this.config.schema,\n        include: this.config.include,\n      },\n      {\n        browseParams:\n          (options && parseBrowseParams(options, this.config.schema, this.config.include)) || undefined,\n      },\n      this.httpClientFactory.create(),\n    );\n  }\n\n  /**\n   * Read function that accepts Identify fields like id, slug or email. Will return an instance\n   * of ReadFetcher class.\n   */\n  public read(options: z.infer<IdentityShape>) {\n    return new ReadFetcher(\n      this.resource,\n      {\n        schema: this.config.schema,\n        output: this.config.schema,\n        include: this.config.include,\n      },\n      {\n        identity: this.config.identitySchema.parse(options),\n      },\n      this.httpClientFactory.create(),\n    );\n  }\n\n  public async add(data: z.input<CreateShape>, options?: z.infer<CreateOptions>) {\n    if (!this.config.createSchema) {\n      throw new Error(\"No createSchema defined\");\n    }\n    const parsedData = this.config.createSchema.parse(data);\n    const parsedOptions =\n      this.config.createOptionsSchema && options\n        ? this.config.createOptionsSchema.parse(options)\n        : undefined;\n    const fetcher = new MutationFetcher(\n      this.resource,\n      {\n        output: this.config.schema,\n        paramsShape: this.config.createOptionsSchema,\n      },\n      parsedOptions,\n      { method: \"POST\", body: parsedData },\n      this.httpClientFactory.create(),\n    );\n    return fetcher.submit();\n  }\n\n  public async edit(\n    id: string,\n    data: IsAny<UpdateShape> extends true ? Partial<z.input<CreateShape>> : z.input<UpdateShape>,\n    options?: z.infer<UpdateOptions>,\n  ) {\n    let updateSchema: z.ZodTypeAny | z.ZodObject<any> | undefined = this.config.updateSchema;\n    if (!this.config.updateSchema && this.config.createSchema && isZodObject(this.config.createSchema)) {\n      updateSchema = this.config.createSchema.partial();\n    }\n    if (!updateSchema) {\n      throw new Error(\"No updateSchema defined\");\n    }\n    const cleanId = z.string().nonempty().parse(id);\n    const parsedData = updateSchema.parse(data);\n    const parsedOptions =\n      this.config.updateOptionsSchema && options ? this.config.updateOptionsSchema.parse(options) : {};\n\n    if (Object.keys(parsedData).length === 0) {\n      throw new Error(\"No data to edit\");\n    }\n    const fetcher = new MutationFetcher(\n      this.resource,\n      {\n        output: this.config.schema,\n        paramsShape: this.config.updateOptionsSchema,\n      },\n      { id: cleanId, ...parsedOptions },\n      { method: \"PUT\", body: parsedData },\n      this.httpClientFactory.create(),\n    );\n    return fetcher.submit();\n  }\n\n  public async delete(id: string) {\n    const cleanId = z.string().nonempty().parse(id);\n    const fetcher = new DeleteFetcher(this.resource, { id: cleanId }, this.httpClientFactory.create());\n    return fetcher.submit();\n  }\n\n  public access<const Keys extends keyof this>(keys: Keys[]) {\n    const d: {\n      [Property in keyof this]?: this[Property];\n    } = {};\n    keys.forEach((key) => {\n      d[key] = (this[key] as Function).bind(this);\n    });\n    return d as Pick<this, Keys>;\n  }\n}\n","import { z } from \"zod\";\n\ntype Split<Str, Separator extends string> = Str extends `${infer Start}${Separator}${infer Rest}`\n  ? [Start, ...Split<Rest, Separator>]\n  : [Str];\n\nexport type BrowseOrder<S, Shape> = S extends [infer Head, ...infer Tail]\n  ? Tail extends []\n    ? OrderPredicate<Head, Shape>\n    : `${OrderPredicate<Head, Shape>},${BrowseOrder<Tail, Shape>}`\n  : S extends string\n  ? OrderPredicate<S, Shape>\n  : never;\n// This ASC DESC asc desc is probably NOT the best way to do this\n// as union is distributive and will create a lot of types\n// TODO: find a better way to do this\n\nexport type OrderPredicate<S, Shape> = S extends string\n  ? S extends `${infer Field} ${infer Direction}`\n    ? Field extends keyof Shape\n      ? Direction extends \"ASC\" | \"DESC\" | \"asc\" | \"desc\"\n        ? `${Field} ${Direction}`\n        : never\n      : never\n    : S extends keyof Shape\n    ? `${S}`\n    : never\n  : never;\nexport type FilterQuerySeparator = \"+\" | \",\" | \"(\" | \")\";\nexport type FilterQueryOperators = `-` | `>` | `<` | `~`;\nexport type FilterQuerySetOperators = `-`;\nexport type FieldOrSubField<S> = S extends `${infer Field}.${string}` ? Field : S;\n\nexport type BrowseFilter<S, Shape> = S extends string\n  ? S extends `${infer Field}:${infer Rest}`\n    ? FieldOrSubField<Field> extends keyof Shape\n      ? Rest extends `${FilterQuerySetOperators}[${infer Values}]`\n        ? `${Field}:${FilterQuerySetOperators}[${Values}]`\n        : Rest extends `[${infer Values}]`\n        ? `${Field}:[${Values}]`\n        : Rest extends `${FilterQuerySetOperators}[${infer Values}]${FilterQuerySeparator}${infer NextQuery}`\n        ? `${Field}:${FilterQuerySetOperators}[${Values}]${FilterQuerySeparator}${BrowseFilter<\n            NextQuery,\n            Shape\n          >}`\n        : Rest extends `[${infer Values}]${FilterQuerySeparator}${infer NextQuery}`\n        ? `${Field}:[${Values}]${FilterQuerySeparator}${BrowseFilter<NextQuery, Shape>}`\n        : Rest extends `${infer Value}${FilterQuerySeparator}${infer NextQuery}`\n        ? `${Field}:${Value}${FilterQuerySeparator}${BrowseFilter<NextQuery, Shape>}`\n        : Rest extends `${infer Value}`\n        ? Value extends string\n          ? `${Field}:${Value}`\n          : never\n        : S\n      : never\n    : never\n  : never;\n\nexport type BrowseParams<P, Shape> = P extends { order: infer Order }\n  ? P extends { filter: infer Filter }\n    ? Omit<P, \"order\" | \"filter\"> & { order: BrowseOrder<Split<Order, \",\">, Shape> } & {\n        filter: BrowseFilter<Filter, Shape>;\n      }\n    : Omit<P, \"order\"> & { order: BrowseOrder<Split<Order, \",\">, Shape> }\n  : P extends { filter: infer Filter }\n  ? Omit<P, \"filter\"> & { filter: BrowseFilter<Filter, Shape> }\n  : P;\n\nexport const browseParamsSchema = z.object({\n  order: z.string().optional(),\n  limit: z\n    .union([\n      z.literal(\"all\"),\n      z.number().refine((n) => n && n > 0 && n <= 15, {\n        message: \"Limit must be between 1 and 15\",\n      }),\n    ])\n    .optional(),\n  page: z\n    .number()\n    .refine((n) => n && n >= 1, {\n      message: \"Page must be greater than 1\",\n    })\n    .optional(),\n  filter: z.string().optional(),\n});\nexport type BrowseParamsSchema = z.infer<typeof browseParamsSchema>;\n\nexport const parseBrowseParams = <P, Shape extends z.ZodRawShape, IncludeShape extends z.ZodRawShape>(\n  args: P,\n  schema: z.ZodObject<Shape>,\n  includeSchema?: z.ZodObject<IncludeShape>\n) => {\n  const keys = [\n    ...(schema.keyof().options as string[]),\n    ...((includeSchema && (includeSchema.keyof().options as string[])) || []),\n  ];\n  const augmentedSchema = browseParamsSchema.merge(\n    z.object({\n      order: z\n        .string()\n        .superRefine((val, ctx) => {\n          const orderPredicates = val.split(\",\");\n          for (const orderPredicate of orderPredicates) {\n            const [field, direction] = orderPredicate.split(\" \");\n            if (!keys.includes(field)) {\n              ctx.addIssue({\n                code: z.ZodIssueCode.custom,\n                message: `Field \"${field}\" is not a valid field`,\n                fatal: true,\n              });\n            }\n            if (direction && !(direction.toUpperCase() === \"ASC\" || direction.toUpperCase() === \"DESC\")) {\n              ctx.addIssue({\n                code: z.ZodIssueCode.custom,\n                message: \"Order direction must be ASC or DESC\",\n                fatal: true,\n              });\n            }\n          }\n        })\n        .optional(),\n      filter: z\n        .string()\n        .superRefine((val, ctx) => {\n          const filterPredicates = val.replace(/ *\\[[^)]*\\] */g, \"\").split(/[+(,]+/);\n          for (const filterPredicate of filterPredicates) {\n            const field = filterPredicate.split(\":\")[0].split(\".\")[0];\n            if (!keys.includes(field)) {\n              ctx.addIssue({\n                code: z.ZodIssueCode.custom,\n                message: `Field \"${field}\" is not a valid field`,\n                fatal: true,\n              });\n            }\n          }\n        })\n        .optional(),\n    })\n  );\n  return augmentedSchema.parse(args);\n};\n","import { z } from \"zod\";\n\nimport type { Exactly, Mask } from \"../utils\";\n\n/**\n * Parse a Fields object and generate a new Output Schema\n *\n * @param schema Base Resource Schema\n * @param fields Object containing fields to be picked with true as value\n * @returns new schema with only the fields specified in the fields object\n */\nexport const schemaWithPickedFields = <Shape extends z.ZodRawShape, Fields extends Mask<Shape>>(\n  schema: z.ZodObject<Shape>,\n  fields?: Fields,\n) => {\n  return schema.pick((fields as Exactly<Fields, Fields>) || ({} as z.noUnrecognized<Fields, Shape>));\n};\n","import { SignJWT } from \"jose\";\n\nimport type { APICredentials, APIResource } from \"../schemas\";\n\nexport type HTTPClientOptions = {\n  key: string;\n  version: APICredentials[\"version\"];\n  url: APICredentials[\"url\"];\n  endpoint: \"content\" | \"admin\";\n};\n\nexport interface IHTTPClient {\n  get baseURL(): URL | undefined;\n  get jwt(): string | undefined;\n  generateJWT(key: string): Promise<string>;\n  genHeaders(): Promise<Record<string, string>>;\n  fetch({\n    resource,\n    searchParams,\n    options,\n    pathnameIdentity,\n  }: {\n    resource: APIResource;\n    searchParams?: URLSearchParams;\n    options?: RequestInit;\n    pathnameIdentity?: string;\n  }): Promise<any>;\n  fetchRawResponse({\n    resource,\n    searchParams,\n    options,\n    pathnameIdentity,\n  }: {\n    resource: APIResource;\n    searchParams?: URLSearchParams;\n    options?: RequestInit;\n    pathnameIdentity?: string;\n  }): Promise<Response>;\n}\n\nexport interface IHTTPClientFactory {\n  create(config: HTTPClientOptions): HTTPClient;\n}\n\nexport class HTTPClientFactory implements IHTTPClientFactory {\n  constructor(private config: HTTPClientOptions) {}\n\n  public create() {\n    return new HTTPClient(this.config);\n  }\n}\n\nexport class HTTPClient<const Options extends HTTPClientOptions = any> implements IHTTPClient {\n  private _jwt: string | undefined;\n  private _jwtExpiresAt: number | undefined;\n  protected _baseURL: URL | undefined = undefined;\n\n  constructor(protected config: Options) {\n    let prefixPath = new URL(config.url).pathname;\n    if (prefixPath.slice(-1) === \"/\") {\n      prefixPath = prefixPath.slice(0, -1);\n    }\n\n    this._baseURL = new URL(`${prefixPath}/ghost/api/${config.endpoint}/`, config.url);\n  }\n\n  get baseURL() {\n    return this._baseURL;\n  }\n\n  get jwt() {\n    return this._jwt;\n  }\n\n  public async generateJWT(key: string) {\n    const [id, _secret] = key.split(\":\");\n    this._jwtExpiresAt = Date.now() + 5 * 60 * 1000;\n    return new SignJWT({})\n      .setProtectedHeader({ kid: id, alg: \"HS256\" })\n      .setExpirationTime(\"5m\")\n      .setIssuedAt()\n      .setAudience(\"/admin/\")\n      .sign(\n        Uint8Array.from((_secret.match(/.{1,2}/g) as RegExpMatchArray).map((byte) => parseInt(byte, 16))),\n      );\n  }\n\n  public async genHeaders() {\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      \"Accept-Version\": this.config.version,\n    };\n    if (this.config.endpoint === \"admin\") {\n      if (this._jwt === undefined || this._jwtExpiresAt === undefined || this._jwtExpiresAt < Date.now()) {\n        this._jwt = await this.generateJWT(this.config.key);\n      }\n      headers[\"Authorization\"] = `Ghost ${this.jwt}`;\n    }\n    return headers;\n  }\n\n  public async fetch({\n    resource,\n    searchParams,\n    options,\n    pathnameIdentity,\n  }: {\n    resource: APIResource;\n    searchParams?: URLSearchParams;\n    options?: RequestInit;\n    pathnameIdentity?: string;\n  }) {\n    if (this._baseURL === undefined) throw new Error(\"URL is undefined\");\n    let path = `${resource}/`;\n    if (pathnameIdentity !== undefined) {\n      path += `${pathnameIdentity}/`;\n    }\n    const url = new URL(path, this._baseURL);\n    if (searchParams !== undefined) {\n      for (const [key, value] of searchParams.entries()) {\n        url.searchParams.append(key, value);\n      }\n    }\n    if (this.config.endpoint === \"content\") {\n      url.searchParams.append(\"key\", this.config.key);\n    }\n    let result = undefined;\n    const headers = await this.genHeaders();\n    try {\n      result = await (\n        await fetch(url.toString(), {\n          ...options,\n          headers,\n        })\n      ).json();\n    } catch (e) {\n      return {\n        status: \"error\",\n        errors: [\n          {\n            type: \"FetchError\",\n            message: (e as Error).toString(),\n          },\n        ],\n      };\n    }\n    return result;\n  }\n\n  public async fetchRawResponse({\n    resource,\n    searchParams,\n    options,\n    pathnameIdentity,\n  }: {\n    resource: APIResource;\n    searchParams?: URLSearchParams;\n    options?: RequestInit;\n    pathnameIdentity?: string;\n  }) {\n    if (this._baseURL === undefined) throw new Error(\"URL is undefined\");\n    this._baseURL.pathname += `${resource}/`;\n    if (pathnameIdentity !== undefined) {\n      this._baseURL.pathname += `${pathnameIdentity}/`;\n    }\n    if (searchParams !== undefined) {\n      for (const [key, value] of searchParams.entries()) {\n        this._baseURL.searchParams.append(key, value);\n      }\n    }\n    if (this.config.endpoint === \"content\") {\n      this._baseURL.searchParams.append(\"key\", this.config.key);\n    }\n    const headers = await this.genHeaders();\n    return await fetch(this._baseURL.toString(), {\n      ...options,\n      headers,\n    });\n  }\n}\n"]}