{"version":3,"sources":["../package.json","../src/telemetry.ts","../src/client.ts","../src/verify.ts","../src/index.ts"],"sourcesContent":["{\n  \"name\": \"@unkey/api\",\n  \"version\": \"0.36.0\",\n  \"main\": \"./dist/index.js\",\n  \"module\": \"./dist/index.mjs\",\n  \"types\": \"./dist/index.d.ts\",\n  \"license\": \"MIT\",\n  \"private\": false,\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"keywords\": [\n    \"unkey\",\n    \"client\",\n    \"api\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/unkeyed/unkey/issues\"\n  },\n  \"homepage\": \"https://github.com/unkeyed/unkey#readme\",\n  \"files\": [\n    \"./dist/**\",\n    \"README.md\"\n  ],\n  \"author\": \"Andreas Thomas <andreas@chronark.com>\",\n  \"scripts\": {\n    \"generate\": \"openapi-typescript https://api.unkey.dev/openapi.json -o ./src/openapi.d.ts\",\n    \"build\": \"pnpm generate && tsup\",\n    \"test\": \"vitest run\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^20.14.9\",\n    \"@unkey/tsconfig\": \"workspace:^\",\n    \"openapi-typescript\": \"^6.7.5\",\n    \"tsup\": \"^8.0.2\",\n    \"typescript\": \"^5.5.3\",\n    \"vitest\": \"^1.6.1\"\n  },\n  \"dependencies\": {\n    \"@unkey/rbac\": \"workspace:^\"\n  }\n}\n","import { version } from \"../package.json\";\nimport type { UnkeyOptions } from \"./client\";\n\nexport type Telemetry = {\n  /**\n   * Unkey-Telemetry-Sdk\n   * @example @unkey/api@v1.1.1\n   */\n  sdkVersions: string[];\n  /**\n   * Unkey-Telemetry-Platform\n   * @example cloudflare\n   */\n  platform?: string;\n  /**\n   * Unkey-Telemetry-Runtime\n   * @example node@v18\n   */\n  runtime?: string;\n};\n\nexport function getTelemetry(opts: UnkeyOptions): Telemetry | null {\n  let platform: string | undefined;\n  let runtime: string | undefined;\n  const sdkVersions = [`@unkey/api@${version}`];\n\n  try {\n    if (typeof process !== \"undefined\") {\n      if (process.env.UNKEY_DISABLE_TELEMETRY) {\n        return null;\n      }\n      platform = process.env.VERCEL ? \"vercel\" : process.env.AWS_REGION ? \"aws\" : undefined;\n\n      // @ts-ignore\n      if (typeof EdgeRuntime !== \"undefined\") {\n        runtime = \"edge-light\";\n      } else {\n        runtime = `node@${process.version}`;\n      }\n    }\n\n    if (opts.wrapperSdkVersion) {\n      sdkVersions.push(opts.wrapperSdkVersion);\n    }\n  } catch (_error) {}\n\n  return { platform, runtime, sdkVersions };\n}\n","import type { PermissionQuery } from \"@unkey/rbac\";\nimport type { ErrorResponse } from \"./errors\";\nimport type { paths } from \"./openapi\";\n\nimport { type Telemetry, getTelemetry } from \"./telemetry\";\n\nexport type UnkeyOptions = (\n  | {\n      token?: never;\n\n      /**\n       * The root key from unkey.dev.\n       *\n       * You can create/manage your root keys here:\n       * https://unkey.dev/app/settings/root-keys\n       */\n      rootKey: string;\n    }\n  | {\n      /**\n       * The workspace key from unkey.dev\n       *\n       * @deprecated Use `rootKey`\n       */\n      token: string;\n      rootKey?: never;\n    }\n) & {\n  /**\n   * @default https://api.unkey.dev\n   */\n  baseUrl?: string;\n\n  /**\n   *\n   * By default telemetry data is enabled, and sends:\n   * runtime (Node.js / Edge)\n   * platform (Node.js / Vercel / AWS)\n   * SDK version\n   */\n  disableTelemetry?: boolean;\n\n  /**\n   * Retry on network errors\n   */\n  retry?: {\n    /**\n     * How many attempts should be made\n     * The maximum number of requests will be `attempts + 1`\n     * `0` means no retries\n     *\n     * @default 5\n     */\n    attempts?: number;\n    /**\n     * Return how many milliseconds to wait until the next attempt is made\n     *\n     * @default `(retryCount) => Math.round(Math.exp(retryCount) * 10)),`\n     */\n    backoff?: (retryCount: number) => number;\n  };\n  /**\n   * Customize the `fetch` cache behaviour\n   */\n  cache?: RequestCache;\n\n  /**\n   * The version of the SDK instantiating this client.\n   *\n   * This is used for internal metrics and is not covered by semver, and may change at any time.\n   *\n   * You can leave this blank unless you are building a wrapper around this SDK.\n   */\n  wrapperSdkVersion?: string;\n};\n\ntype ApiRequest = {\n  path: string[];\n} & (\n  | {\n      method: \"GET\";\n      body?: never;\n      query?: Record<string, string | number | boolean | null | string[]>;\n    }\n  | {\n      method: \"POST\";\n      body?: unknown;\n      query?: never;\n    }\n);\n\ntype Result<R> =\n  | {\n      result: R;\n      error?: never;\n    }\n  | {\n      result?: never;\n      error: {\n        code: ErrorResponse[\"error\"][\"code\"];\n        message: ErrorResponse[\"error\"][\"message\"];\n        docs: ErrorResponse[\"error\"][\"docs\"];\n        requestId: string;\n      };\n    };\n\nexport class Unkey {\n  public readonly baseUrl: string;\n  private readonly rootKey: string;\n  private readonly cache?: RequestCache;\n  private readonly telemetry?: Telemetry | null;\n\n  public readonly retry: {\n    attempts: number;\n    backoff: (retryCount: number) => number;\n  };\n\n  constructor(opts: UnkeyOptions) {\n    this.baseUrl = opts.baseUrl ?? \"https://api.unkey.dev\";\n    this.rootKey = opts.rootKey ?? opts.token;\n    if (!opts.disableTelemetry) {\n      this.telemetry = getTelemetry(opts);\n    }\n\n    this.cache = opts.cache;\n    /**\n     * Even though typescript should prevent this, some people still pass undefined or empty strings\n     */\n    if (!this.rootKey) {\n      throw new Error(\n        \"Unkey root key must be set, maybe you passed in `undefined` or an empty string?\",\n      );\n    }\n\n    this.retry = {\n      attempts: opts.retry?.attempts ?? 5,\n      backoff: opts.retry?.backoff ?? ((n) => Math.round(Math.exp(n) * 10)),\n    };\n  }\n\n  private getHeaders(): Record<string, string> {\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${this.rootKey}`,\n    };\n    if (this.telemetry?.sdkVersions) {\n      headers[\"Unkey-Telemetry-SDK\"] = this.telemetry.sdkVersions.join(\",\");\n    }\n    if (this.telemetry?.platform) {\n      headers[\"Unkey-Telemetry-Platform\"] = this.telemetry.platform;\n    }\n    if (this.telemetry?.runtime) {\n      headers[\"Unkey-Telemetry-Runtime\"] = this.telemetry.runtime;\n    }\n    return headers;\n  }\n\n  private async fetch<TResult>(req: ApiRequest): Promise<Result<TResult>> {\n    let res: Response | null = null;\n    let err: Error | null = null;\n    for (let i = 0; i <= this.retry.attempts; i++) {\n      const url = new URL(`${this.baseUrl}/${req.path.join(\"/\")}`);\n      if (req.query) {\n        for (const [k, v] of Object.entries(req.query)) {\n          if (typeof v === \"undefined\" || v === null) {\n            continue;\n          }\n          url.searchParams.set(k, v.toString());\n        }\n      }\n      res = await fetch(url, {\n        method: req.method,\n        headers: this.getHeaders(),\n        cache: this.cache,\n        body: JSON.stringify(req.body),\n      }).catch((e: Error) => {\n        err = e;\n        return null; // set `res` to `null`\n      });\n      // 200-299 -> success\n      if (res && res.status >= 200 && res.status <= 299) {\n        return { result: (await res.json()) as TResult };\n      }\n      // 400-499 -> client error, retries are futile\n      if (res && res.status >= 400 && res.status <= 499) {\n        return (await res.json()) as ErrorResponse;\n      }\n      const backoff = this.retry.backoff(i);\n      console.debug(\n        `attempt ${i + 1} of ${\n          this.retry.attempts + 1\n        } to reach ${url} failed, retrying in ${backoff} ms: status=${\n          res?.status\n        } | ${res?.headers.get(\"unkey-request-id\")}`,\n      );\n      await new Promise((r) => setTimeout(r, backoff));\n    }\n\n    if (res) {\n      return (await res.json()) as ErrorResponse;\n    }\n\n    return {\n      error: {\n        // @ts-ignore\n        code: \"FETCH_ERROR\",\n        // @ts-ignore I don't understand why `err` is `never`\n        message: err?.message ?? \"No response\",\n        docs: \"https://developer.mozilla.org/en-US/docs/Web/API/fetch\",\n        requestId: \"N/A\",\n      },\n    };\n  }\n\n  public get keys() {\n    return {\n      create: async (\n        req: paths[\"/v1/keys.createKey\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.createKey\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.createKey\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      addPermissions: async (\n        req: paths[\"/v1/keys.addPermissions\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.addPermissions\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.addPermissions\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      setPermissions: async (\n        req: paths[\"/v1/keys.setPermissions\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.setPermissions\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.setPermissions\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      removePermissions: async (\n        req: paths[\"/v1/keys.removePermissions\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.removePermissions\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.removePermissions\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      addRoles: async (\n        req: paths[\"/v1/keys.addRoles\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.addRoles\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.addRoles\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      removeRoles: async (\n        req: paths[\"/v1/keys.removeRoles\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.removeRoles\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.removeRoles\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      setRoles: async (\n        req: paths[\"/v1/keys.setRoles\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.setRoles\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.setRoles\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      update: async (\n        req: paths[\"/v1/keys.updateKey\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.updateKey\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.updateKey\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      verify: async <TPermission extends string = string>(\n        req: Omit<\n          paths[\"/v1/keys.verifyKey\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n          \"authorization\"\n        > & { authorization?: { permissions: PermissionQuery<TPermission> } },\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.verifyKey\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.verifyKey\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      delete: async (\n        req: paths[\"/v1/keys.deleteKey\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.deleteKey\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.deleteKey\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      updateRemaining: async (\n        req: paths[\"/v1/keys.updateRemaining\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.updateRemaining\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.updateRemaining\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      get: async (\n        req: paths[\"/v1/keys.getKey\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<paths[\"/v1/keys.getKey\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]>\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.getKey\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n      getVerifications: async (\n        req: paths[\"/v1/keys.getVerifications\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/keys.getVerifications\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"keys.getVerifications\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n    };\n  }\n\n  public get apis() {\n    return {\n      create: async (\n        req: paths[\"/v1/apis.createApi\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/apis.createApi\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"apis.createApi\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      delete: async (\n        req: paths[\"/v1/apis.deleteApi\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/apis.deleteApi\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"apis.deleteApi\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      get: async (\n        req: paths[\"/v1/apis.getApi\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<paths[\"/v1/apis.getApi\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]>\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"apis.getApi\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n      listKeys: async (\n        req: paths[\"/v1/apis.listKeys\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<paths[\"/v1/apis.listKeys\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]>\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"apis.listKeys\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n    };\n  }\n  public get permissions() {\n    return {\n      createRole: async (\n        req: paths[\"/v1/permissions.createRole\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/permissions.createRole\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"permissions.createRole\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      getRole: async (\n        req: paths[\"/v1/permissions.getRole\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/permissions.getRole\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"permissions.getRole\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n      deleteRole: async (\n        req: paths[\"/v1/permissions.deleteRole\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/permissions.deleteRole\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"permissions.deleteRole\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      createPermission: async (\n        req: paths[\"/v1/permissions.createPermission\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/permissions.createPermission\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"permissions.createPermission\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      getPermission: async (\n        req: paths[\"/v1/permissions.getPermission\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/permissions.getPermission\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"permissions.getPermission\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n      deletePermission: async (\n        req: paths[\"/v1/permissions.deletePermission\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/permissions.deletePermission\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"permissions.deletePermission\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n    };\n  }\n  public get ratelimits() {\n    return {\n      limit: async (\n        req: paths[\"/v1/ratelimits.limit\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/ratelimits.limit\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"ratelimits.limit\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      getOverride: async (\n        req: paths[\"/v1/ratelimits.getOverride\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/ratelimits.getOverride\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"ratelimits.getOverride\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n      listOverrides: async (\n        req: paths[\"/v1/ratelimits.listOverrides\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/ratelimits.listOverrides\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"ratelimits.listOverrides\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n\n      setOverride: async (\n        req: paths[\"/v1/ratelimits.setOverride\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/ratelimits.setOverride\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"ratelimits.setOverride\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n\n      deleteOverride: async (\n        req: paths[\"/v1/ratelimits.deleteOverride\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/ratelimits.deleteOverride\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"ratelimits.deleteOverride\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n    };\n  }\n  public get identities() {\n    return {\n      create: async (\n        req: paths[\"/v1/identities.createIdentity\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/identities.createIdentity\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"identities.createIdentity\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      get: async (\n        req: paths[\"/v1/identities.getIdentity\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/identities.getIdentity\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"identities.getIdentity\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n      list: async (\n        req: paths[\"/v1/identities.listIdentities\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/identities.listIdentities\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"identities.listIdentities\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n      delete: async (\n        req: paths[\"/v1/identities.deleteIdentity\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/identities.deleteIdentity\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"identities.deleteIdentity\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      update: async (\n        req: paths[\"/v1/identities.updateIdentity\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/identities.updateIdentity\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"identities.updateIdentity\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n    };\n  }\n\n  public get analytics() {\n    return {\n      getVerifications: async (\n        req: paths[\"/v1/analytics.getVerifications\"][\"get\"][\"parameters\"][\"query\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/analytics.getVerifications\"][\"get\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"analytics.getVerifications\"],\n          method: \"GET\",\n          query: req,\n        });\n      },\n    };\n  }\n\n  public get migrations() {\n    return {\n      createKeys: async (\n        req: paths[\"/v1/migrations.createKeys\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/migrations.createKeys\"][\"post\"][\"responses\"][\"200\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"migrations.createKeys\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n      enqueueKeys: async (\n        req: paths[\"/v1/migrations.enqueueKeys\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n      ): Promise<\n        Result<\n          paths[\"/v1/migrations.enqueueKeys\"][\"post\"][\"responses\"][\"202\"][\"content\"][\"application/json\"]\n        >\n      > => {\n        return await this.fetch({\n          path: [\"v1\", \"migrations.enqueueKeys\"],\n          method: \"POST\",\n          body: req,\n        });\n      },\n    };\n  }\n}\n","import type { PermissionQuery } from \"@unkey/rbac\";\nimport { Unkey } from \"./client\";\nimport type { paths } from \"./openapi\";\n\n/**\n * Verify a key\n *\n * @example\n * ```ts\n * const { result, error } = await verifyKey(\"key_123\")\n * if (error){\n *   // handle potential network or bad request error\n *   // a link to our docs will be in the `error.docs` field\n *   console.error(error.message)\n *   return\n * }\n * if (!result.valid) {\n *   // do not grant access\n *   return\n * }\n *\n * // process request\n * console.log(result)\n * ```\n */\nexport function verifyKey<TPermission extends string = string>(\n  req:\n    | string\n    | (Omit<\n        paths[\"/v1/keys.verifyKey\"][\"post\"][\"requestBody\"][\"content\"][\"application/json\"],\n        \"authorization\"\n      > & { authorization?: { permissions: PermissionQuery<TPermission> } }),\n) {\n  // yes this is empty to make typescript happy but we don't need a token for verifying keys\n  // it's not the cleanest but it works for now :)\n  const unkey = new Unkey({ rootKey: \"public\" });\n  return unkey.keys.verify(typeof req === \"string\" ? { key: req } : req);\n}\n","export * from \"./client\";\nexport * from \"./verify\";\nexport * from \"./errors\";\nexport { and, or, type Flatten } from \"@unkey/rbac\";\n"],"mappings":"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","names":[]}