ashby-ts 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export { Ashby, AshbyError } from "./client.js";
2
+ export type { AshbyOptions, AshbyErrorDetail } from "./client.js";
3
+ export type { AshbyClient, ItemOf, ListCall, Namespace, RequestOf, ResultsOf, RpcPath, SuccessOf, SyncResult, } from "./types.js";
4
+ export type { paths, components, operations } from "./generated/api.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAClE,YAAY,EACV,WAAW,EACX,MAAM,EACN,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,EACP,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export { Ashby, AshbyError } from "./client.js";
@@ -0,0 +1,79 @@
1
+ import type { paths } from "./generated/api.js";
2
+ /** Every RPC endpoint path, e.g. "/application.list". */
3
+ export type RpcPath = keyof paths;
4
+ type PostOf<P extends RpcPath> = paths[P] extends {
5
+ post: infer O;
6
+ } ? O : never;
7
+ type RawBody<P extends RpcPath> = PostOf<P> extends {
8
+ requestBody: {
9
+ content: {
10
+ "application/json": infer B;
11
+ };
12
+ };
13
+ } ? B : PostOf<P> extends {
14
+ requestBody?: {
15
+ content: {
16
+ "application/json": infer B;
17
+ };
18
+ };
19
+ } ? B | undefined : undefined;
20
+ /** The JSON request body for an endpoint. */
21
+ export type RequestOf<P extends RpcPath> = NonNullable<RawBody<P>>;
22
+ type ResponseOf<P extends RpcPath> = PostOf<P> extends {
23
+ responses: {
24
+ 200: {
25
+ content: {
26
+ "application/json": infer R;
27
+ };
28
+ };
29
+ };
30
+ } ? R : never;
31
+ /** The success variant of an endpoint's response envelope. */
32
+ export type SuccessOf<P extends RpcPath> = Extract<ResponseOf<P>, {
33
+ success: true;
34
+ }>;
35
+ /** The `results` payload of a success response. */
36
+ export type ResultsOf<P extends RpcPath> = SuccessOf<P> extends {
37
+ results: infer R;
38
+ } ? R : never;
39
+ /** A single element of a list endpoint's `results` array. */
40
+ export type ItemOf<P extends RpcPath> = ResultsOf<P> extends readonly (infer I)[] ? I : never;
41
+ type IsPaginated<P extends RpcPath> = "cursor" extends keyof RequestOf<P> ? true : false;
42
+ type HasSyncToken<P extends RpcPath> = "syncToken" extends keyof RequestOf<P> ? true : false;
43
+ /**
44
+ * A lazy call to a paginated endpoint. Awaiting it fetches one page;
45
+ * iterating it with `for await` follows `nextCursor` until the data runs out.
46
+ */
47
+ export interface ListCall<P extends RpcPath> extends Promise<SuccessOf<P>>, AsyncIterable<ItemOf<P>> {
48
+ /** Fetch a single page (same as awaiting the call directly). */
49
+ page(): Promise<SuccessOf<P>>;
50
+ /** Collect every item across all pages into one array. */
51
+ all(): Promise<ItemOf<P>[]>;
52
+ }
53
+ type EmptyOk<P extends RpcPath> = undefined extends RawBody<P> ? true : Record<string, never> extends RequestOf<P> ? true : false;
54
+ type Fn<P extends RpcPath, R> = EmptyOk<P> extends true ? (body?: RequestOf<P>) => R : (body: RequestOf<P>) => R;
55
+ type MethodFor<P extends RpcPath> = IsPaginated<P> extends true ? Fn<P, ListCall<P>> : Fn<P, Promise<SuccessOf<P>>>;
56
+ /** The result of a full incremental sync: every changed item plus the token for next time. */
57
+ export interface SyncResult<P extends RpcPath> {
58
+ results: ItemOf<P>[];
59
+ /** Pass this back as `syncToken` on the next sync to fetch only what changed since. */
60
+ syncToken: string | undefined;
61
+ }
62
+ type SyncFor<P extends RpcPath> = (body?: Omit<RequestOf<P>, "cursor">) => Promise<SyncResult<P>>;
63
+ type NsOf<P extends string> = P extends `/${infer N}.${string}` ? N : never;
64
+ /** Every endpoint namespace, e.g. "application" | "candidate" | ... */
65
+ export type Namespace = NsOf<RpcPath>;
66
+ type SyncMethod<N extends string> = `/${N}.list` extends RpcPath ? HasSyncToken<`/${N}.list` & RpcPath> extends true ? {
67
+ sync: SyncFor<`/${N}.list` & RpcPath>;
68
+ } : unknown : unknown;
69
+ /**
70
+ * The full typed client surface: one namespace per Ashby resource,
71
+ * one method per endpoint, mapped directly from the OpenAPI spec.
72
+ */
73
+ export type AshbyClient = {
74
+ [N in Namespace]: {
75
+ [P in RpcPath as P extends `/${N}.${infer V}` ? V : never]: MethodFor<P>;
76
+ } & SyncMethod<N>;
77
+ };
78
+ export {};
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "ashby-ts",
3
+ "version": "0.1.0",
4
+ "description": "Typed TypeScript client for the Ashby API, generated from Ashby's OpenAPI spec. Every endpoint, fully typed, with async-iterator pagination and incremental sync.",
5
+ "license": "MIT",
6
+ "author": "Ryan Waits <ryan.waits@gmail.com>",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/ryanwaits/ashby-ts.git"
10
+ },
11
+ "homepage": "https://github.com/ryanwaits/ashby-ts#readme",
12
+ "bugs": "https://github.com/ryanwaits/ashby-ts/issues",
13
+ "keywords": [
14
+ "ashby",
15
+ "ashbyhq",
16
+ "ats",
17
+ "recruiting",
18
+ "api-client",
19
+ "typescript",
20
+ "openapi"
21
+ ],
22
+ "type": "module",
23
+ "packageManager": "bun@1.3.10",
24
+ "main": "./dist/index.js",
25
+ "types": "./dist/index.d.ts",
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "import": "./dist/index.js"
30
+ }
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "README.md",
35
+ "LICENSE"
36
+ ],
37
+ "sideEffects": false,
38
+ "engines": {
39
+ "node": ">=18"
40
+ },
41
+ "scripts": {
42
+ "generate": "bun run scripts/generate.ts",
43
+ "docs": "bun run scripts/docs.ts",
44
+ "build": "tsc -p tsconfig.build.json",
45
+ "typecheck": "tsc --noEmit",
46
+ "test": "bun test",
47
+ "prepublishOnly": "bun run typecheck && bun test && bun run build"
48
+ },
49
+ "devDependencies": {
50
+ "@openpkg-ts/sdk": "0.37.1",
51
+ "@types/bun": "^1.3.14",
52
+ "@types/node": "^24.0.0",
53
+ "openapi-typescript": "^7.13.0",
54
+ "typescript": "^5.9.3"
55
+ }
56
+ }