astro-ghostcms/.pnpm-store/v3/files/80/e2db051acb4ebc98572ea8cbfd3...

1 line
86 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"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(),\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 youre 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 { 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 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 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);\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 { 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 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 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);\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 { HTTPClient } 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 httpClient: HTTPClient,\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.httpClient,\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.httpClient,\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.httpClient,\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.httpClient,\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.httpClient);\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 { 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 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 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"]}