@craftware/crafty-sdk 0.0.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.
Files changed (50) hide show
  1. package/README.md +155 -0
  2. package/dist/client.d.ts +15 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +17 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/errors.d.ts +18 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +44 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/http.d.ts +29 -0
  11. package/dist/http.d.ts.map +1 -0
  12. package/dist/http.js +183 -0
  13. package/dist/http.js.map +1 -0
  14. package/dist/index.d.ts +7 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/resources/collections.d.ts +9 -0
  19. package/dist/resources/collections.d.ts.map +1 -0
  20. package/dist/resources/collections.js +13 -0
  21. package/dist/resources/collections.js.map +1 -0
  22. package/dist/resources/entries.d.ts +9 -0
  23. package/dist/resources/entries.d.ts.map +1 -0
  24. package/dist/resources/entries.js +14 -0
  25. package/dist/resources/entries.js.map +1 -0
  26. package/dist/resources/mediaCollections.d.ts +8 -0
  27. package/dist/resources/mediaCollections.d.ts.map +1 -0
  28. package/dist/resources/mediaCollections.js +27 -0
  29. package/dist/resources/mediaCollections.js.map +1 -0
  30. package/dist/resources/mediaFiles.d.ts +8 -0
  31. package/dist/resources/mediaFiles.d.ts.map +1 -0
  32. package/dist/resources/mediaFiles.js +11 -0
  33. package/dist/resources/mediaFiles.js.map +1 -0
  34. package/dist/resources/pages.d.ts +9 -0
  35. package/dist/resources/pages.d.ts.map +1 -0
  36. package/dist/resources/pages.js +14 -0
  37. package/dist/resources/pages.js.map +1 -0
  38. package/dist/types/blocks.d.ts +25 -0
  39. package/dist/types/blocks.d.ts.map +1 -0
  40. package/dist/types/blocks.js +2 -0
  41. package/dist/types/blocks.js.map +1 -0
  42. package/dist/types/generated.d.ts +9 -0
  43. package/dist/types/generated.d.ts.map +1 -0
  44. package/dist/types/generated.js +2 -0
  45. package/dist/types/generated.js.map +1 -0
  46. package/dist/types/public.d.ts +149 -0
  47. package/dist/types/public.d.ts.map +1 -0
  48. package/dist/types/public.js +2 -0
  49. package/dist/types/public.js.map +1 -0
  50. package/package.json +37 -0
package/README.md ADDED
@@ -0,0 +1,155 @@
1
+ # `@craftware/crafty-sdk`
2
+
3
+ Official JavaScript SDK for the Crafty public API (current local implementation).
4
+
5
+ ## Requirements
6
+
7
+ - Node `>=20` (package engine)
8
+ - Or any runtime with `fetch` available (browser, Bun, Deno, etc.)
9
+
10
+ ## Create a client
11
+
12
+ ```ts
13
+ import { createCraftyClient } from "@craftware/crafty-sdk";
14
+
15
+ const crafty = createCraftyClient({
16
+ baseUrl: "https://tenant.crafty.test",
17
+ apiKey: "SITE_API_TOKEN",
18
+ timeoutMs: 10_000
19
+ });
20
+ ```
21
+
22
+ ### Client config
23
+
24
+ - `baseUrl` (required): tenant base URL. The SDK appends `/api/v1` automatically if missing.
25
+ - `apiKey` (optional): site API token sent as `X-API-Key`.
26
+ - `fetch` (optional): custom fetch implementation.
27
+ - `headers` (optional): default headers applied to all requests.
28
+ - `timeoutMs` (optional): default timeout for all requests.
29
+
30
+ ## Available resources
31
+
32
+ ### `collections`
33
+
34
+ - `crafty.collections.list(options?)`
35
+ - `crafty.collections.get(slug, options?)`
36
+
37
+ ### `entries`
38
+
39
+ - `crafty.entries.list(collectionSlug, query?, options?)`
40
+ - `crafty.entries.get(collectionSlug, id, options?)`
41
+
42
+ Supported common `query` params:
43
+ - `sort_by` (`created_at` | `updated_at` | `slug`)
44
+ - `sort_order` (`asc` | `desc`)
45
+ - `per_page`
46
+ - `page`
47
+ - Additional filters as key/value pairs (passed through to the API)
48
+
49
+ ### `pages`
50
+
51
+ - `crafty.pages.list(siteSlug, query?, options?)`
52
+ - `crafty.pages.get(siteSlug, pageSlug, options?)`
53
+
54
+ `pages.get()` returns a page response that may include nested `blocks`.
55
+
56
+ ### `mediaCollections`
57
+
58
+ - `crafty.mediaCollections.list(query?, options?)`
59
+
60
+ Supported `query.include` values:
61
+ - `"stats"`
62
+ - `"directories"`
63
+ - Array form is supported and serialized as comma-separated values
64
+
65
+ ### `mediaFiles`
66
+
67
+ - `crafty.mediaFiles.list(query?, options?)`
68
+
69
+ Supported common `query` params:
70
+ - `collection`
71
+ - `directory_id`
72
+ - `ttl_minutes`
73
+ - `per_page`
74
+ - `page`
75
+
76
+ ## Request options (per call)
77
+
78
+ Every method accepts `options?` as the last argument:
79
+
80
+ - `signal`: `AbortSignal`
81
+ - `headers`: request-specific headers (merged with client headers)
82
+ - `timeoutMs`: overrides client timeout for that call
83
+
84
+ ```ts
85
+ const posts = await crafty.entries.list(
86
+ "posts",
87
+ { per_page: 15, page: 1, sort_by: "updated_at", sort_order: "desc" },
88
+ { timeoutMs: 5_000 }
89
+ );
90
+ ```
91
+
92
+ ## Responses (current shapes)
93
+
94
+ - `collections.list()` => `{ data: CraftyCollection[] }`
95
+ - `collections.get()` => `CraftyCollection`
96
+ - `entries.list()` => paginated `{ data, links, meta }`
97
+ - `entries.get()` => `{ data: CraftyEntry }`
98
+ - `pages.list()` => paginated `{ data, links, meta }`
99
+ - `pages.get()` => `{ data: CraftyPage }`
100
+ - `mediaCollections.list()` => `{ data, meta: { includes } }`
101
+ - `mediaFiles.list()` => `{ data, links, meta }` (`meta` includes `ttl_minutes`)
102
+
103
+ ## Errors
104
+
105
+ The SDK throws `CraftyError` for HTTP, timeout, abort, and network failures.
106
+
107
+ ```ts
108
+ import { CraftyError } from "@craftware/crafty-sdk";
109
+
110
+ try {
111
+ await crafty.pages.get("main-site", "home");
112
+ } catch (error) {
113
+ if (error instanceof CraftyError) {
114
+ console.error(error.code, error.status, error.message);
115
+ console.error(error.requestId); // if API sent x-request-id
116
+ }
117
+ }
118
+ ```
119
+
120
+ Current error codes:
121
+
122
+ - `NETWORK_ERROR`
123
+ - `TIMEOUT`
124
+ - `BAD_REQUEST`
125
+ - `UNAUTHORIZED`
126
+ - `FORBIDDEN`
127
+ - `NOT_FOUND`
128
+ - `RATE_LIMITED`
129
+ - `SERVER_ERROR`
130
+ - `UNKNOWN_ERROR`
131
+
132
+ ## End-to-end example
133
+
134
+ ```ts
135
+ import { createCraftyClient } from "@craftware/crafty-sdk";
136
+
137
+ const crafty = createCraftyClient({
138
+ baseUrl: "https://twocare.crafty.test",
139
+ apiKey: process.env.CRAFTY_API_KEY,
140
+ timeoutMs: 10_000
141
+ });
142
+
143
+ const collections = await crafty.collections.list();
144
+ const posts = await crafty.entries.list("posts", { per_page: 15 });
145
+ const mediaCollections = await crafty.mediaCollections.list({ include: ["stats", "directories"] });
146
+ const mediaFiles = await crafty.mediaFiles.list({ collection: "library", per_page: 24 });
147
+ const homePage = await crafty.pages.get("two-care", "home");
148
+ ```
149
+
150
+ ## Notes
151
+
152
+ - The SDK normalizes `baseUrl` and avoids duplicating `/api/v1`.
153
+ - `Accept: application/json` is set automatically unless overridden.
154
+ - `src/types/generated.ts` is still a placeholder until OpenAPI codegen is wired.
155
+ - Public `blockTypes` endpoints are not exposed yet; block-related types are currently hand-modeled.
@@ -0,0 +1,15 @@
1
+ import { CollectionsResource } from "./resources/collections";
2
+ import { EntriesResource } from "./resources/entries";
3
+ import { MediaCollectionsResource } from "./resources/mediaCollections";
4
+ import { MediaFilesResource } from "./resources/mediaFiles";
5
+ import { PagesResource } from "./resources/pages";
6
+ import type { CraftyClientConfig } from "./types/public";
7
+ export type CraftyClient = {
8
+ collections: CollectionsResource;
9
+ entries: EntriesResource;
10
+ mediaCollections: MediaCollectionsResource;
11
+ mediaFiles: MediaFilesResource;
12
+ pages: PagesResource;
13
+ };
14
+ export declare function createCraftyClient(config: CraftyClientConfig): CraftyClient;
15
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,mBAAmB,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAU3E"}
package/dist/client.js ADDED
@@ -0,0 +1,17 @@
1
+ import { HttpClient } from "./http";
2
+ import { CollectionsResource } from "./resources/collections";
3
+ import { EntriesResource } from "./resources/entries";
4
+ import { MediaCollectionsResource } from "./resources/mediaCollections";
5
+ import { MediaFilesResource } from "./resources/mediaFiles";
6
+ import { PagesResource } from "./resources/pages";
7
+ export function createCraftyClient(config) {
8
+ const http = HttpClient.fromClientConfig(config);
9
+ return {
10
+ collections: new CollectionsResource(http),
11
+ entries: new EntriesResource(http),
12
+ mediaCollections: new MediaCollectionsResource(http),
13
+ mediaFiles: new MediaFilesResource(http),
14
+ pages: new PagesResource(http)
15
+ };
16
+ }
17
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAWlD,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEjD,OAAO;QACL,WAAW,EAAE,IAAI,mBAAmB,CAAC,IAAI,CAAC;QAC1C,OAAO,EAAE,IAAI,eAAe,CAAC,IAAI,CAAC;QAClC,gBAAgB,EAAE,IAAI,wBAAwB,CAAC,IAAI,CAAC;QACpD,UAAU,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC;QACxC,KAAK,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC;KAC/B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type CraftyErrorCode = "NETWORK_ERROR" | "TIMEOUT" | "BAD_REQUEST" | "UNAUTHORIZED" | "FORBIDDEN" | "NOT_FOUND" | "RATE_LIMITED" | "SERVER_ERROR" | "UNKNOWN_ERROR";
2
+ export type CraftyErrorOptions = {
3
+ code: CraftyErrorCode;
4
+ message: string;
5
+ status?: number;
6
+ details?: unknown;
7
+ requestId?: string;
8
+ cause?: unknown;
9
+ };
10
+ export declare class CraftyError extends Error {
11
+ readonly code: CraftyErrorCode;
12
+ readonly status: number | undefined;
13
+ readonly details: unknown;
14
+ readonly requestId: string | undefined;
15
+ constructor(options: CraftyErrorOptions);
16
+ }
17
+ export declare function mapStatusToErrorCode(status: number): CraftyErrorCode;
18
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,SAAS,GACT,aAAa,GACb,cAAc,GACd,WAAW,GACX,WAAW,GACX,cAAc,GACd,cAAc,GACd,eAAe,CAAC;AAEpB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAgB,IAAI,EAAE,eAAe,CAAC;IACtC,SAAgB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE3B,OAAO,EAAE,kBAAkB;CAgB/C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAqBpE"}
package/dist/errors.js ADDED
@@ -0,0 +1,44 @@
1
+ export class CraftyError extends Error {
2
+ code;
3
+ status;
4
+ details;
5
+ requestId;
6
+ constructor(options) {
7
+ super(options.message);
8
+ this.name = "CraftyError";
9
+ this.code = options.code;
10
+ this.status = options.status;
11
+ this.details = options.details;
12
+ this.requestId = options.requestId;
13
+ if (options.cause !== undefined) {
14
+ try {
15
+ this.cause = options.cause;
16
+ }
17
+ catch {
18
+ // Older runtimes may not support Error.cause assignment cleanly.
19
+ }
20
+ }
21
+ }
22
+ }
23
+ export function mapStatusToErrorCode(status) {
24
+ if (status === 400 || status === 422) {
25
+ return "BAD_REQUEST";
26
+ }
27
+ if (status === 401) {
28
+ return "UNAUTHORIZED";
29
+ }
30
+ if (status === 403) {
31
+ return "FORBIDDEN";
32
+ }
33
+ if (status === 404) {
34
+ return "NOT_FOUND";
35
+ }
36
+ if (status === 429) {
37
+ return "RATE_LIMITED";
38
+ }
39
+ if (status >= 500 && status <= 599) {
40
+ return "SERVER_ERROR";
41
+ }
42
+ return "UNKNOWN_ERROR";
43
+ }
44
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpB,IAAI,CAAkB;IACtB,MAAM,CAAqB;IAC3B,OAAO,CAAU;IACjB,SAAS,CAAqB;IAE9C,YAAmB,OAA2B;QAC5C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAEnC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC;gBACF,IAAoC,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACP,iEAAiE;YACnE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QACnC,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,eAAe,CAAC;AACzB,CAAC"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ import type { CraftyClientConfig, RequestOptions } from "./types/public";
2
+ type QueryValue = string | number | boolean | null | undefined;
3
+ type QueryParams = Record<string, QueryValue>;
4
+ type HttpRequestOptions = RequestOptions & {
5
+ query?: QueryParams;
6
+ };
7
+ type RequiredTransportConfig = {
8
+ apiBaseUrl: string;
9
+ fetchImpl: typeof fetch;
10
+ defaultHeaders: HeadersInit | undefined;
11
+ apiKey: string | undefined;
12
+ timeoutMs: number | undefined;
13
+ };
14
+ export declare class HttpClient {
15
+ private readonly apiBaseUrl;
16
+ private readonly fetchImpl;
17
+ private readonly defaultHeaders;
18
+ private readonly apiKey;
19
+ private readonly defaultTimeoutMs;
20
+ constructor(config: RequiredTransportConfig);
21
+ static fromClientConfig(config: CraftyClientConfig): HttpClient;
22
+ get<T>(path: string, options?: HttpRequestOptions): Promise<T>;
23
+ request<T>(path: string, options: HttpRequestOptions & {
24
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
25
+ }): Promise<T>;
26
+ private buildUrl;
27
+ }
28
+ export {};
29
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAc,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErF,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAC/D,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE9C,KAAK,kBAAkB,GAAG,cAAc,GAAG;IACzC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB,cAAc,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;gBAEnC,MAAM,EAAE,uBAAuB;WAQpC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,UAAU;IAwBzD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI9D,OAAO,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,GAAG;QAAE,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;KAAE,GACpF,OAAO,CAAC,CAAC,CAAC;IAkFb,OAAO,CAAC,QAAQ;CAejB"}
package/dist/http.js ADDED
@@ -0,0 +1,183 @@
1
+ import { CraftyError, mapStatusToErrorCode } from "./errors";
2
+ export class HttpClient {
3
+ apiBaseUrl;
4
+ fetchImpl;
5
+ defaultHeaders;
6
+ apiKey;
7
+ defaultTimeoutMs;
8
+ constructor(config) {
9
+ this.apiBaseUrl = config.apiBaseUrl;
10
+ this.fetchImpl = config.fetchImpl;
11
+ this.defaultHeaders = config.defaultHeaders;
12
+ this.apiKey = config.apiKey;
13
+ this.defaultTimeoutMs = config.timeoutMs;
14
+ }
15
+ static fromClientConfig(config) {
16
+ const fetchImpl = config.fetch ?? getBoundGlobalFetch();
17
+ if (typeof fetchImpl !== "function") {
18
+ throw new CraftyError({
19
+ code: "NETWORK_ERROR",
20
+ message: "No fetch implementation available. Provide `fetch` in createCraftyClient()."
21
+ });
22
+ }
23
+ const normalizedBaseUrl = config.baseUrl.replace(/\/+$/, "");
24
+ const apiBaseUrl = normalizedBaseUrl.endsWith("/api/v1")
25
+ ? normalizedBaseUrl
26
+ : `${normalizedBaseUrl}/api/v1`;
27
+ return new HttpClient({
28
+ apiBaseUrl,
29
+ fetchImpl,
30
+ defaultHeaders: config.headers,
31
+ apiKey: config.apiKey,
32
+ timeoutMs: config.timeoutMs
33
+ });
34
+ }
35
+ async get(path, options) {
36
+ return this.request(path, { ...options, method: "GET" });
37
+ }
38
+ async request(path, options) {
39
+ const url = this.buildUrl(path, options.query);
40
+ const headers = new Headers(this.defaultHeaders);
41
+ if (options.headers) {
42
+ const extraHeaders = new Headers(options.headers);
43
+ extraHeaders.forEach((value, key) => headers.set(key, value));
44
+ }
45
+ if (!headers.has("Accept")) {
46
+ headers.set("Accept", "application/json");
47
+ }
48
+ if (this.apiKey && !headers.has("X-API-Key")) {
49
+ headers.set("X-API-Key", this.apiKey);
50
+ }
51
+ const timeoutMs = options.timeoutMs ?? this.defaultTimeoutMs;
52
+ const timeoutController = typeof timeoutMs === "number" && timeoutMs > 0
53
+ ? new AbortController()
54
+ : null;
55
+ const signal = mergeSignals(options.signal, timeoutController?.signal);
56
+ let timeoutHandle;
57
+ if (timeoutController && timeoutMs) {
58
+ timeoutHandle = setTimeout(() => timeoutController.abort("timeout"), timeoutMs);
59
+ }
60
+ try {
61
+ const response = await this.fetchImpl(url, {
62
+ method: options.method,
63
+ headers,
64
+ signal: signal ?? null
65
+ });
66
+ const payload = await parseResponsePayload(response);
67
+ if (!response.ok) {
68
+ const requestId = response.headers.get("x-request-id") ?? undefined;
69
+ const message = extractErrorMessage(payload) ?? (response.statusText || "Request failed");
70
+ const errorOptions = {
71
+ code: mapStatusToErrorCode(response.status),
72
+ message,
73
+ status: response.status,
74
+ details: payload
75
+ };
76
+ throw new CraftyError(requestId
77
+ ? { ...errorOptions, requestId }
78
+ : errorOptions);
79
+ }
80
+ return payload;
81
+ }
82
+ catch (error) {
83
+ if (error instanceof CraftyError) {
84
+ throw error;
85
+ }
86
+ if (isAbortError(error)) {
87
+ const code = timeoutController?.signal.aborted ? "TIMEOUT" : "NETWORK_ERROR";
88
+ const message = code === "TIMEOUT" ? "Request timed out." : "Request was aborted.";
89
+ throw new CraftyError({
90
+ code,
91
+ message,
92
+ cause: error
93
+ });
94
+ }
95
+ throw new CraftyError({
96
+ code: "NETWORK_ERROR",
97
+ message: "Network request failed.",
98
+ cause: error
99
+ });
100
+ }
101
+ finally {
102
+ if (timeoutHandle) {
103
+ clearTimeout(timeoutHandle);
104
+ }
105
+ }
106
+ }
107
+ buildUrl(path, query) {
108
+ const normalizedPath = path.startsWith("/") ? path : `/${path}`;
109
+ const url = new URL(`${this.apiBaseUrl}${normalizedPath}`);
110
+ if (query) {
111
+ for (const [key, value] of Object.entries(query)) {
112
+ if (value === null || value === undefined) {
113
+ continue;
114
+ }
115
+ url.searchParams.set(key, String(value));
116
+ }
117
+ }
118
+ return url.toString();
119
+ }
120
+ }
121
+ function getBoundGlobalFetch() {
122
+ if (typeof globalThis.fetch !== "function") {
123
+ return undefined;
124
+ }
125
+ return globalThis.fetch.bind(globalThis);
126
+ }
127
+ function mergeSignals(a, b) {
128
+ if (!a) {
129
+ return b;
130
+ }
131
+ if (!b) {
132
+ return a;
133
+ }
134
+ const controller = new AbortController();
135
+ const abort = (source) => {
136
+ if (!controller.signal.aborted) {
137
+ controller.abort(source.reason);
138
+ }
139
+ };
140
+ if (a.aborted) {
141
+ abort(a);
142
+ return controller.signal;
143
+ }
144
+ if (b.aborted) {
145
+ abort(b);
146
+ return controller.signal;
147
+ }
148
+ a.addEventListener("abort", () => abort(a), { once: true });
149
+ b.addEventListener("abort", () => abort(b), { once: true });
150
+ return controller.signal;
151
+ }
152
+ async function parseResponsePayload(response) {
153
+ const contentType = response.headers.get("content-type") ?? "";
154
+ if (contentType.includes("application/json")) {
155
+ return response.json();
156
+ }
157
+ const text = await response.text();
158
+ if (text === "") {
159
+ return null;
160
+ }
161
+ try {
162
+ return JSON.parse(text);
163
+ }
164
+ catch {
165
+ return text;
166
+ }
167
+ }
168
+ function extractErrorMessage(payload) {
169
+ if (!payload || typeof payload !== "object") {
170
+ return null;
171
+ }
172
+ const maybeMessage = payload.message;
173
+ return typeof maybeMessage === "string" && maybeMessage.trim() !== "" ? maybeMessage : null;
174
+ }
175
+ function isAbortError(error) {
176
+ return error instanceof DOMException
177
+ ? error.name === "AbortError"
178
+ : typeof error === "object" &&
179
+ error !== null &&
180
+ "name" in error &&
181
+ error.name === "AbortError";
182
+ }
183
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAkB7D,MAAM,OAAO,UAAU;IACJ,UAAU,CAAS;IACnB,SAAS,CAAe;IACxB,cAAc,CAA0B;IACxC,MAAM,CAAqB;IAC3B,gBAAgB,CAAqB;IAEtD,YAAmB,MAA+B;QAChD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC;IAC3C,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,MAA0B;QACvD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,mBAAmB,EAAE,CAAC;QAExD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,WAAW,CAAC;gBACpB,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,6EAA6E;aACvF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;YACtD,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,GAAG,iBAAiB,SAAS,CAAC;QAElC,OAAO,IAAI,UAAU,CAAC;YACpB,UAAU;YACV,SAAS;YACT,cAAc,EAAE,MAAM,CAAC,OAAO;YAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,OAA4B;QAC5D,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,OAAO,CAClB,IAAY,EACZ,OAAqF;QAErF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEjD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClD,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAC7D,MAAM,iBAAiB,GAAG,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,GAAG,CAAC;YACtE,CAAC,CAAC,IAAI,eAAe,EAAE;YACvB,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAEvE,IAAI,aAAwD,CAAC;QAC7D,IAAI,iBAAiB,IAAI,SAAS,EAAE,CAAC;YACnC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;gBACzC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO;gBACP,MAAM,EAAE,MAAM,IAAI,IAAI;aACvB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;gBACpE,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,gBAAgB,CAAC,CAAC;gBAE1F,MAAM,YAAY,GAAG;oBACnB,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC3C,OAAO;oBACP,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,OAAO;iBACR,CAAC;gBAEX,MAAM,IAAI,WAAW,CACnB,SAAS;oBACP,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,SAAS,EAAE;oBAChC,CAAC,CAAC,YAAY,CACjB,CAAC;YACJ,CAAC;YAED,OAAO,OAAY,CAAC;QACtB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC;gBAC7E,MAAM,OAAO,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,CAAC;gBAEnF,MAAM,IAAI,WAAW,CAAC;oBACpB,IAAI;oBACJ,OAAO;oBACP,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,WAAW,CAAC;gBACpB,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,yBAAyB;gBAClC,KAAK,EAAE,KAAK;aACb,CAAC,CAAC;QACL,CAAC;gBAAS,CAAC;YACT,IAAI,aAAa,EAAE,CAAC;gBAClB,YAAY,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,IAAY,EAAE,KAAmB;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,cAAc,EAAE,CAAC,CAAC;QAE3D,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1C,SAAS;gBACX,CAAC;gBACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;CACF;AAED,SAAS,mBAAmB;IAC1B,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAiB,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CACnB,CAAe,EACf,CAAe;IAEf,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAG,CAAC,MAAmB,EAAQ,EAAE;QAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,KAAK,CAAC,CAAC,CAAC,CAAC;QACT,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,KAAK,CAAC,CAAC,CAAC,CAAC;QACT,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5D,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAkB;IACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAE/D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAe,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,YAAY,GAAI,OAAiC,CAAC,OAAO,CAAC;IAChE,OAAO,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9F,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,YAAY;QAClC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY;QAC7B,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACvB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACd,KAA4B,CAAC,IAAI,KAAK,YAAY,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { createCraftyClient } from "./client";
2
+ export type { CraftyClient } from "./client";
3
+ export { CraftyError } from "./errors";
4
+ export type { CraftyErrorCode } from "./errors";
5
+ export type * from "./types/public";
6
+ export type * from "./types/blocks";
7
+ //# 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,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,mBAAmB,gBAAgB,CAAC;AACpC,mBAAmB,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { createCraftyClient } from "./client";
2
+ export { CraftyError } from "./errors";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { HttpClient } from "../http";
2
+ import type { CollectionListResponse, CollectionShowResponse, RequestOptions } from "../types/public";
3
+ export declare class CollectionsResource {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ list(options?: RequestOptions): Promise<CollectionListResponse>;
7
+ get(slug: string, options?: RequestOptions): Promise<CollectionShowResponse>;
8
+ }
9
+ //# sourceMappingURL=collections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../../src/resources/collections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtG,qBAAa,mBAAmB;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI/D,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAGpF"}
@@ -0,0 +1,13 @@
1
+ export class CollectionsResource {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ list(options) {
7
+ return this.http.get("/collections", options);
8
+ }
9
+ get(slug, options) {
10
+ return this.http.get(`/collections/${encodeURIComponent(slug)}`, options);
11
+ }
12
+ }
13
+ //# sourceMappingURL=collections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections.js","sourceRoot":"","sources":["../../src/resources/collections.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,mBAAmB;IACM;IAApC,YAAoC,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,OAAwB;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyB,cAAc,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAEM,GAAG,CAAC,IAAY,EAAE,OAAwB;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAyB,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpG,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { HttpClient } from "../http";
2
+ import type { EntriesListQuery, EntryListResponse, EntryShowResponse, RequestOptions } from "../types/public";
3
+ export declare class EntriesResource {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ list(collectionSlug: string, query?: EntriesListQuery, options?: RequestOptions): Promise<EntryListResponse>;
7
+ get(collectionSlug: string, id: string | number, options?: RequestOptions): Promise<EntryShowResponse>;
8
+ }
9
+ //# sourceMappingURL=entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../src/resources/entries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,eAAe;IACP,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAS5G,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAM9G"}
@@ -0,0 +1,14 @@
1
+ export class EntriesResource {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ list(collectionSlug, query, options) {
7
+ const requestOptions = query ? { ...options, query } : options;
8
+ return this.http.get(`/collections/${encodeURIComponent(collectionSlug)}/entries`, requestOptions);
9
+ }
10
+ get(collectionSlug, id, options) {
11
+ return this.http.get(`/collections/${encodeURIComponent(collectionSlug)}/entries/${encodeURIComponent(String(id))}`, options);
12
+ }
13
+ }
14
+ //# sourceMappingURL=entries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../src/resources/entries.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,eAAe;IACU;IAApC,YAAoC,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,cAAsB,EAAE,KAAwB,EAAE,OAAwB;QACpF,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAE/D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,gBAAgB,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAC5D,cAAc,CACf,CAAC;IACJ,CAAC;IAEM,GAAG,CAAC,cAAsB,EAAE,EAAmB,EAAE,OAAwB;QAC9E,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,gBAAgB,kBAAkB,CAAC,cAAc,CAAC,YAAY,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAC9F,OAAO,CACR,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { HttpClient } from "../http";
2
+ import type { MediaCollectionListResponse, MediaCollectionsListQuery, RequestOptions } from "../types/public";
3
+ export declare class MediaCollectionsResource {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ list(query?: MediaCollectionsListQuery, options?: RequestOptions): Promise<MediaCollectionListResponse>;
7
+ }
8
+ //# sourceMappingURL=mediaCollections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaCollections.d.ts","sourceRoot":"","sources":["../../src/resources/mediaCollections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,2BAA2B,EAE3B,yBAAyB,EACzB,cAAc,EACf,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,wBAAwB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,IAAI,CAAC,KAAK,CAAC,EAAE,yBAAyB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAU/G"}
@@ -0,0 +1,27 @@
1
+ export class MediaCollectionsResource {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ list(query, options) {
7
+ const requestOptions = query
8
+ ? {
9
+ ...options,
10
+ query: serializeQuery(query)
11
+ }
12
+ : options;
13
+ return this.http.get("/media/collections", requestOptions);
14
+ }
15
+ }
16
+ function serializeQuery(query) {
17
+ if (query.include === undefined) {
18
+ return {};
19
+ }
20
+ return {
21
+ include: Array.isArray(query.include) ? joinIncludes(query.include) : query.include
22
+ };
23
+ }
24
+ function joinIncludes(includes) {
25
+ return Array.from(new Set(includes)).join(",");
26
+ }
27
+ //# sourceMappingURL=mediaCollections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaCollections.js","sourceRoot":"","sources":["../../src/resources/mediaCollections.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,wBAAwB;IACC;IAApC,YAAoC,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,KAAiC,EAAE,OAAwB;QACrE,MAAM,cAAc,GAAG,KAAK;YAC1B,CAAC,CAAC;gBACE,GAAG,OAAO;gBACV,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;aAC7B;YACH,CAAC,CAAC,OAAO,CAAC;QAEZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA8B,oBAAoB,EAAE,cAAc,CAAC,CAAC;IAC1F,CAAC;CACF;AAED,SAAS,cAAc,CAAC,KAAgC;IACtD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;KACpF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,QAAmC;IACvD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { HttpClient } from "../http";
2
+ import type { MediaFileListResponse, MediaFilesListQuery, RequestOptions } from "../types/public";
3
+ export declare class MediaFilesResource {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ list(query?: MediaFilesListQuery, options?: RequestOptions): Promise<MediaFileListResponse>;
7
+ }
8
+ //# sourceMappingURL=mediaFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaFiles.d.ts","sourceRoot":"","sources":["../../src/resources/mediaFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElG,qBAAa,kBAAkB;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,IAAI,CAAC,KAAK,CAAC,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAKnG"}
@@ -0,0 +1,11 @@
1
+ export class MediaFilesResource {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ list(query, options) {
7
+ const requestOptions = query ? { ...options, query } : options;
8
+ return this.http.get("/media/files", requestOptions);
9
+ }
10
+ }
11
+ //# sourceMappingURL=mediaFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaFiles.js","sourceRoot":"","sources":["../../src/resources/mediaFiles.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,kBAAkB;IACO;IAApC,YAAoC,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,KAA2B,EAAE,OAAwB;QAC/D,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAE/D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAwB,cAAc,EAAE,cAAc,CAAC,CAAC;IAC9E,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { HttpClient } from "../http";
2
+ import type { PageListResponse, PageShowResponse, PagesListQuery, RequestOptions } from "../types/public";
3
+ export declare class PagesResource {
4
+ private readonly http;
5
+ constructor(http: HttpClient);
6
+ list(siteSlug: string, query?: PagesListQuery, options?: RequestOptions): Promise<PageListResponse>;
7
+ get(siteSlug: string, pageSlug: string, options?: RequestOptions): Promise<PageShowResponse>;
8
+ }
9
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/resources/pages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE1G,qBAAa,aAAa;IACL,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;IASnG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAMpG"}
@@ -0,0 +1,14 @@
1
+ export class PagesResource {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ list(siteSlug, query, options) {
7
+ const requestOptions = query ? { ...options, query } : options;
8
+ return this.http.get(`/sites/${encodeURIComponent(siteSlug)}/pages`, requestOptions);
9
+ }
10
+ get(siteSlug, pageSlug, options) {
11
+ return this.http.get(`/sites/${encodeURIComponent(siteSlug)}/pages/${encodeURIComponent(pageSlug)}`, options);
12
+ }
13
+ }
14
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/resources/pages.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IACY;IAApC,YAAoC,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,IAAI,CAAC,QAAgB,EAAE,KAAsB,EAAE,OAAwB;QAC5E,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAE/D,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,UAAU,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAC9C,cAAc,CACf,CAAC;IACJ,CAAC;IAEM,GAAG,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAwB;QACrE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,UAAU,kBAAkB,CAAC,QAAQ,CAAC,UAAU,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAC9E,OAAO,CACR,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ export type JsonPrimitive = string | number | boolean | null;
2
+ export type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
3
+ export type JsonObject = {
4
+ [key: string]: JsonValue;
5
+ };
6
+ export type CraftyReferenceItem = {
7
+ id: number;
8
+ slug: string | null;
9
+ label: string | null;
10
+ };
11
+ export type CraftyBlockDataValue = JsonValue | CraftyReferenceItem | CraftyReferenceItem[];
12
+ export type CraftyBlock = {
13
+ id: number;
14
+ order: number;
15
+ type: string | null;
16
+ data: Record<string, CraftyBlockDataValue | undefined>;
17
+ };
18
+ export type CraftyBlockTypeSummary = {
19
+ id?: number;
20
+ slug: string;
21
+ name?: string;
22
+ description?: string | null;
23
+ field_definitions?: Record<string, Record<string, unknown>>;
24
+ };
25
+ //# sourceMappingURL=blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/types/blocks.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,EAAE,CAAC;AACjE,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEtD,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAC5B,SAAS,GACT,mBAAmB,GACnB,mBAAmB,EAAE,CAAC;AAE1B,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,CAAC,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC7D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/types/blocks.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Placeholder for generated OpenAPI types.
3
+ *
4
+ * Current public OpenAPI in this repository documents collections and entries.
5
+ * Pages/blocks are supported in the SDK via curated handwritten types until the
6
+ * backend OpenAPI schema is expanded.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/types/generated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/types/generated.ts"],"names":[],"mappings":""}
@@ -0,0 +1,149 @@
1
+ import type { CraftyBlock } from "./blocks";
2
+ export type { CraftyBlock, CraftyBlockTypeSummary, CraftyReferenceItem } from "./blocks";
3
+ export type CraftyFieldDefinition = Record<string, unknown>;
4
+ export type CraftyCollection = {
5
+ id: number;
6
+ name: string;
7
+ slug: string;
8
+ description: string | null;
9
+ field_definitions: Record<string, CraftyFieldDefinition>;
10
+ is_active: boolean;
11
+ created_at: string;
12
+ updated_at: string;
13
+ };
14
+ export type CraftyEntry = {
15
+ id: number;
16
+ created_at: string;
17
+ updated_at: string;
18
+ display_title: string;
19
+ [key: string]: string | number | boolean | null | Record<string, unknown> | Array<unknown>;
20
+ };
21
+ export type CraftyPage = {
22
+ id: number;
23
+ site_id: number;
24
+ title: string;
25
+ slug: string;
26
+ status: string;
27
+ published_at: string | null;
28
+ seo_title: string | null;
29
+ seo_description: string | null;
30
+ seo_image_id: number | null;
31
+ created_at: string | null;
32
+ updated_at: string | null;
33
+ blocks?: CraftyBlock[];
34
+ };
35
+ export type CraftyMediaCollectionStats = {
36
+ files_count: number;
37
+ total_bytes: number;
38
+ last_uploaded_at: string | null;
39
+ };
40
+ export type CraftyMediaDirectory = {
41
+ id: number;
42
+ parent_id: number | null;
43
+ name: string;
44
+ full_path: string;
45
+ is_active: boolean;
46
+ };
47
+ export type CraftyMediaCollection = {
48
+ id: number;
49
+ name: string;
50
+ key: string;
51
+ description: string | null;
52
+ is_active: boolean;
53
+ stats?: CraftyMediaCollectionStats;
54
+ directories?: CraftyMediaDirectory[];
55
+ };
56
+ export type CraftyMediaFile = {
57
+ id: number;
58
+ file_name: string;
59
+ file_path: string;
60
+ url: string;
61
+ mime_type: string;
62
+ file_size: number;
63
+ collection: string;
64
+ directory_id: number | null;
65
+ created_at: string | null;
66
+ };
67
+ export type PaginationLinks = {
68
+ first: string | null;
69
+ last: string | null;
70
+ prev: string | null;
71
+ next: string | null;
72
+ };
73
+ export type PaginationMeta = {
74
+ current_page: number;
75
+ from: number | null;
76
+ last_page: number;
77
+ per_page: number;
78
+ to: number | null;
79
+ total: number;
80
+ };
81
+ export type PaginatedResponse<T> = {
82
+ data: T[];
83
+ links: PaginationLinks;
84
+ meta: PaginationMeta;
85
+ };
86
+ export type SingleResponse<T> = {
87
+ data: T;
88
+ };
89
+ export type CollectionListResponse = {
90
+ data: CraftyCollection[];
91
+ };
92
+ export type CollectionShowResponse = CraftyCollection;
93
+ export type EntryListResponse = PaginatedResponse<CraftyEntry>;
94
+ export type EntryShowResponse = SingleResponse<CraftyEntry>;
95
+ export type PageListResponse = PaginatedResponse<CraftyPage>;
96
+ export type PageShowResponse = SingleResponse<CraftyPage>;
97
+ export type MediaCollectionListResponse = {
98
+ data: CraftyMediaCollection[];
99
+ meta: {
100
+ includes: MediaCollectionsInclude[];
101
+ };
102
+ };
103
+ export type MediaFileListResponse = {
104
+ data: CraftyMediaFile[];
105
+ links: PaginationLinks;
106
+ meta: PaginationMeta & {
107
+ ttl_minutes: number;
108
+ };
109
+ };
110
+ export type EntriesListQuery = {
111
+ sort_by?: "created_at" | "updated_at" | "slug";
112
+ sort_order?: "asc" | "desc";
113
+ per_page?: number;
114
+ page?: number;
115
+ [key: string]: string | number | boolean | null | undefined;
116
+ };
117
+ export type PagesListQuery = {
118
+ per_page?: number;
119
+ page?: number;
120
+ [key: string]: string | number | boolean | null | undefined;
121
+ };
122
+ export type MediaCollectionsInclude = "stats" | "directories";
123
+ export type MediaCollectionsListQuery = {
124
+ include?: MediaCollectionsInclude | MediaCollectionsInclude[] | string;
125
+ };
126
+ export type MediaFilesListQuery = {
127
+ collection?: string;
128
+ directory_id?: number;
129
+ ttl_minutes?: number;
130
+ per_page?: number;
131
+ page?: number;
132
+ };
133
+ export type CraftyClientConfig = {
134
+ baseUrl: string;
135
+ /**
136
+ * Site API token. The SDK sends it as `X-API-Key: <token>`.
137
+ */
138
+ apiKey?: string;
139
+ fetch?: typeof fetch;
140
+ headers?: HeadersInit;
141
+ timeoutMs?: number;
142
+ };
143
+ export type RequestOptions = {
144
+ signal?: AbortSignal;
145
+ headers?: HeadersInit;
146
+ timeoutMs?: number;
147
+ };
148
+ export type JsonRecord = Record<string, unknown>;
149
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/types/public.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=public.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/types/public.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@craftware/crafty-sdk",
3
+ "version": "0.0.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "description": "Official JavaScript SDK for Crafty CMS public API",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "main": "./dist/index.js",
18
+ "module": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "engines": {
24
+ "node": ">=20"
25
+ },
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.json",
28
+ "typecheck": "tsc -p tsconfig.json --noEmit",
29
+ "codegen": "node scripts/codegen.mjs",
30
+ "changeset": "npx -y @changesets/cli@2.29.7",
31
+ "changeset:add": "npm run changeset -- add",
32
+ "changeset:version": "npm run changeset -- version"
33
+ },
34
+ "devDependencies": {
35
+ "typescript": "^5.8.2"
36
+ }
37
+ }