@studiometa/forge-sdk 0.3.0 → 0.4.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.
- package/README.md +13 -11
- package/dist/forge.d.ts +13 -8
- package/dist/forge.d.ts.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +378 -355
- package/dist/index.js.map +1 -1
- package/dist/pagination.d.ts +8 -5
- package/dist/pagination.d.ts.map +1 -1
- package/dist/resources/backups.d.ts +18 -10
- package/dist/resources/backups.d.ts.map +1 -1
- package/dist/resources/base.d.ts +3 -2
- package/dist/resources/base.d.ts.map +1 -1
- package/dist/resources/certificates.d.ts +22 -59
- package/dist/resources/certificates.d.ts.map +1 -1
- package/dist/resources/commands.d.ts +18 -10
- package/dist/resources/commands.d.ts.map +1 -1
- package/dist/resources/daemons.d.ts +18 -10
- package/dist/resources/daemons.d.ts.map +1 -1
- package/dist/resources/database-users.d.ts +18 -10
- package/dist/resources/database-users.d.ts.map +1 -1
- package/dist/resources/databases.d.ts +18 -10
- package/dist/resources/databases.d.ts.map +1 -1
- package/dist/resources/deployments.d.ts +15 -9
- package/dist/resources/deployments.d.ts.map +1 -1
- package/dist/resources/firewall-rules.d.ts +18 -10
- package/dist/resources/firewall-rules.d.ts.map +1 -1
- package/dist/resources/monitors.d.ts +18 -10
- package/dist/resources/monitors.d.ts.map +1 -1
- package/dist/resources/nginx-templates.d.ts +21 -11
- package/dist/resources/nginx-templates.d.ts.map +1 -1
- package/dist/resources/recipes.d.ts +17 -10
- package/dist/resources/recipes.d.ts.map +1 -1
- package/dist/resources/redirect-rules.d.ts +18 -10
- package/dist/resources/redirect-rules.d.ts.map +1 -1
- package/dist/resources/scheduled-jobs.d.ts +18 -10
- package/dist/resources/scheduled-jobs.d.ts.map +1 -1
- package/dist/resources/security-rules.d.ts +18 -10
- package/dist/resources/security-rules.d.ts.map +1 -1
- package/dist/resources/servers.d.ts +25 -13
- package/dist/resources/servers.d.ts.map +1 -1
- package/dist/resources/sites.d.ts +29 -17
- package/dist/resources/sites.d.ts.map +1 -1
- package/dist/resources/ssh-keys.d.ts +18 -10
- package/dist/resources/ssh-keys.d.ts.map +1 -1
- package/dist/test-utils.d.ts +12 -3
- package/dist/test-utils.d.ts.map +1 -1
- package/dist/test-utils.js +16 -5
- package/dist/test-utils.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateSiteData,
|
|
1
|
+
import type { CreateSiteData, HttpClient, SiteAttributes } from "@studiometa/forge-api";
|
|
2
2
|
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
3
3
|
import type { ResolveResult } from "./servers.ts";
|
|
4
4
|
import { DeploymentsCollection } from "./deployments.ts";
|
|
@@ -11,8 +11,8 @@ import { BaseCollection } from "./base.ts";
|
|
|
11
11
|
* Options for listing sites.
|
|
12
12
|
*/
|
|
13
13
|
export interface SiteListOptions {
|
|
14
|
-
/**
|
|
15
|
-
|
|
14
|
+
/** Cursor for pagination (from previous response's next_cursor). */
|
|
15
|
+
cursor?: string;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
18
|
* Collection of sites on a server.
|
|
@@ -27,7 +27,7 @@ export interface SiteListOptions {
|
|
|
27
27
|
export declare class SitesCollection extends BaseCollection {
|
|
28
28
|
private readonly serverId;
|
|
29
29
|
/** @internal */
|
|
30
|
-
constructor(client: HttpClient, serverId: number);
|
|
30
|
+
constructor(client: HttpClient, orgSlug: string, serverId: number);
|
|
31
31
|
private get basePath();
|
|
32
32
|
/**
|
|
33
33
|
* List sites on this server.
|
|
@@ -36,11 +36,13 @@ export declare class SitesCollection extends BaseCollection {
|
|
|
36
36
|
* ```ts
|
|
37
37
|
* const sites = await forge.server(123).sites.list();
|
|
38
38
|
*
|
|
39
|
-
* // Fetch a specific page:
|
|
40
|
-
* const page2 = await forge.server(123).sites.list({
|
|
39
|
+
* // Fetch a specific cursor page:
|
|
40
|
+
* const page2 = await forge.server(123).sites.list({ cursor: 'next-cursor-value' });
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
list(options?: SiteListOptions): Promise<
|
|
43
|
+
list(options?: SiteListOptions): Promise<Array<SiteAttributes & {
|
|
44
|
+
id: number;
|
|
45
|
+
}>>;
|
|
44
46
|
/**
|
|
45
47
|
* Iterate over all sites across all pages.
|
|
46
48
|
*
|
|
@@ -54,7 +56,9 @@ export declare class SitesCollection extends BaseCollection {
|
|
|
54
56
|
* const sites = await forge.server(123).sites.all().toArray();
|
|
55
57
|
* ```
|
|
56
58
|
*/
|
|
57
|
-
all(
|
|
59
|
+
all(): AsyncPaginatedIterator<SiteAttributes & {
|
|
60
|
+
id: number;
|
|
61
|
+
}>;
|
|
58
62
|
/**
|
|
59
63
|
* Get a specific site by ID.
|
|
60
64
|
*
|
|
@@ -63,20 +67,24 @@ export declare class SitesCollection extends BaseCollection {
|
|
|
63
67
|
* const site = await forge.server(123).sites.get(456);
|
|
64
68
|
* ```
|
|
65
69
|
*/
|
|
66
|
-
get(siteId: number): Promise<
|
|
70
|
+
get(siteId: number): Promise<SiteAttributes & {
|
|
71
|
+
id: number;
|
|
72
|
+
}>;
|
|
67
73
|
/**
|
|
68
74
|
* Create a new site on this server.
|
|
69
75
|
*
|
|
70
76
|
* @example
|
|
71
77
|
* ```ts
|
|
72
78
|
* const site = await forge.server(123).sites.create({
|
|
73
|
-
*
|
|
74
|
-
*
|
|
79
|
+
* type: 'php',
|
|
80
|
+
* name: 'example.com',
|
|
75
81
|
* directory: '/public',
|
|
76
82
|
* });
|
|
77
83
|
* ```
|
|
78
84
|
*/
|
|
79
|
-
create(data: CreateSiteData): Promise<
|
|
85
|
+
create(data: CreateSiteData): Promise<SiteAttributes & {
|
|
86
|
+
id: number;
|
|
87
|
+
}>;
|
|
80
88
|
/**
|
|
81
89
|
* Update a site.
|
|
82
90
|
*
|
|
@@ -85,7 +93,9 @@ export declare class SitesCollection extends BaseCollection {
|
|
|
85
93
|
* await forge.server(123).sites.update(456, { directory: '/public' });
|
|
86
94
|
* ```
|
|
87
95
|
*/
|
|
88
|
-
update(siteId: number, data: Partial<CreateSiteData>): Promise<
|
|
96
|
+
update(siteId: number, data: Partial<CreateSiteData>): Promise<SiteAttributes & {
|
|
97
|
+
id: number;
|
|
98
|
+
}>;
|
|
89
99
|
/**
|
|
90
100
|
* Delete a site.
|
|
91
101
|
*
|
|
@@ -145,7 +155,7 @@ export declare class SiteResource extends BaseCollection {
|
|
|
145
155
|
/** Redirect rules for this site. */
|
|
146
156
|
readonly redirectRules: RedirectRulesCollection;
|
|
147
157
|
/** @internal */
|
|
148
|
-
constructor(client: HttpClient, serverId: number, siteId: number);
|
|
158
|
+
constructor(client: HttpClient, orgSlug: string, serverId: number, siteId: number);
|
|
149
159
|
private get basePath();
|
|
150
160
|
/**
|
|
151
161
|
* Get this site's details.
|
|
@@ -155,7 +165,9 @@ export declare class SiteResource extends BaseCollection {
|
|
|
155
165
|
* const site = await forge.server(123).site(456).get();
|
|
156
166
|
* ```
|
|
157
167
|
*/
|
|
158
|
-
get(): Promise<
|
|
168
|
+
get(): Promise<SiteAttributes & {
|
|
169
|
+
id: number;
|
|
170
|
+
}>;
|
|
159
171
|
/**
|
|
160
172
|
* Deploy this site.
|
|
161
173
|
*
|
|
@@ -188,7 +200,7 @@ export declare class SiteEnvResource extends BaseCollection {
|
|
|
188
200
|
private readonly serverId;
|
|
189
201
|
private readonly siteId;
|
|
190
202
|
/** @internal */
|
|
191
|
-
constructor(client: HttpClient, serverId: number, siteId: number);
|
|
203
|
+
constructor(client: HttpClient, orgSlug: string, serverId: number, siteId: number);
|
|
192
204
|
private get basePath();
|
|
193
205
|
/**
|
|
194
206
|
* Get the environment file content.
|
|
@@ -216,7 +228,7 @@ export declare class SiteNginxResource extends BaseCollection {
|
|
|
216
228
|
private readonly serverId;
|
|
217
229
|
private readonly siteId;
|
|
218
230
|
/** @internal */
|
|
219
|
-
constructor(client: HttpClient, serverId: number, siteId: number);
|
|
231
|
+
constructor(client: HttpClient, orgSlug: string, serverId: number, siteId: number);
|
|
220
232
|
private get basePath();
|
|
221
233
|
/**
|
|
222
234
|
* Get the Nginx configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../src/resources/sites.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../src/resources/sites.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import type { CreateSshKeyData,
|
|
1
|
+
import type { CreateSshKeyData, HttpClient, SshKeyAttributes } from "@studiometa/forge-api";
|
|
2
2
|
import { BaseCollection } from "./base.ts";
|
|
3
3
|
import { AsyncPaginatedIterator } from "../pagination.ts";
|
|
4
4
|
/**
|
|
5
5
|
* Options for listing SSH keys.
|
|
6
6
|
*/
|
|
7
7
|
export interface SshKeyListOptions {
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/** Cursor for pagination (from previous response's next_cursor). */
|
|
9
|
+
cursor?: string;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Collection of SSH keys on a server.
|
|
@@ -21,7 +21,7 @@ export interface SshKeyListOptions {
|
|
|
21
21
|
export declare class SshKeysCollection extends BaseCollection {
|
|
22
22
|
private readonly serverId;
|
|
23
23
|
/** @internal */
|
|
24
|
-
constructor(client: HttpClient, serverId: number);
|
|
24
|
+
constructor(client: HttpClient, orgSlug: string, serverId: number);
|
|
25
25
|
private get basePath();
|
|
26
26
|
/**
|
|
27
27
|
* List SSH keys on this server.
|
|
@@ -30,11 +30,13 @@ export declare class SshKeysCollection extends BaseCollection {
|
|
|
30
30
|
* ```ts
|
|
31
31
|
* const keys = await forge.server(123).sshKeys.list();
|
|
32
32
|
*
|
|
33
|
-
* // Fetch a specific page:
|
|
34
|
-
* const page2 = await forge.server(123).sshKeys.list({
|
|
33
|
+
* // Fetch a specific cursor page:
|
|
34
|
+
* const page2 = await forge.server(123).sshKeys.list({ cursor: 'next-cursor-value' });
|
|
35
35
|
* ```
|
|
36
36
|
*/
|
|
37
|
-
list(options?: SshKeyListOptions): Promise<
|
|
37
|
+
list(options?: SshKeyListOptions): Promise<Array<SshKeyAttributes & {
|
|
38
|
+
id: number;
|
|
39
|
+
}>>;
|
|
38
40
|
/**
|
|
39
41
|
* Iterate over all SSH keys across all pages.
|
|
40
42
|
*
|
|
@@ -48,7 +50,9 @@ export declare class SshKeysCollection extends BaseCollection {
|
|
|
48
50
|
* const keys = await forge.server(123).sshKeys.all().toArray();
|
|
49
51
|
* ```
|
|
50
52
|
*/
|
|
51
|
-
all(
|
|
53
|
+
all(): AsyncPaginatedIterator<SshKeyAttributes & {
|
|
54
|
+
id: number;
|
|
55
|
+
}>;
|
|
52
56
|
/**
|
|
53
57
|
* Get a specific SSH key.
|
|
54
58
|
*
|
|
@@ -57,7 +61,9 @@ export declare class SshKeysCollection extends BaseCollection {
|
|
|
57
61
|
* const key = await forge.server(123).sshKeys.get(789);
|
|
58
62
|
* ```
|
|
59
63
|
*/
|
|
60
|
-
get(keyId: number): Promise<
|
|
64
|
+
get(keyId: number): Promise<SshKeyAttributes & {
|
|
65
|
+
id: number;
|
|
66
|
+
}>;
|
|
61
67
|
/**
|
|
62
68
|
* Create a new SSH key.
|
|
63
69
|
*
|
|
@@ -69,7 +75,9 @@ export declare class SshKeysCollection extends BaseCollection {
|
|
|
69
75
|
* });
|
|
70
76
|
* ```
|
|
71
77
|
*/
|
|
72
|
-
create(data: CreateSshKeyData): Promise<
|
|
78
|
+
create(data: CreateSshKeyData): Promise<SshKeyAttributes & {
|
|
79
|
+
id: number;
|
|
80
|
+
}>;
|
|
73
81
|
/**
|
|
74
82
|
* Delete an SSH key.
|
|
75
83
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-keys.d.ts","sourceRoot":"","sources":["../../src/resources/ssh-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"ssh-keys.d.ts","sourceRoot":"","sources":["../../src/resources/ssh-keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EAGV,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,SAAQ,cAAc;IAKjD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,gBAAgB;gBAEd,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EACE,QAAQ,EAAE,MAAM;IAKnC,OAAO,KAAK,QAAQ,GAEnB;IAED;;;;;;;;;;OAUG;IACG,IAAI,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAQ9F;;;;;;;;;;;;OAYG;IACH,GAAG,IAAI,sBAAsB,CAAC,gBAAgB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAahE;;;;;;;OAOG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAOpE;;;;;;;;;;OAUG;IACG,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAKhF;;;;;;;OAOG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3C"}
|
package/dist/test-utils.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a fetch URL argument to a string.
|
|
3
|
+
* Handles string, URL, and Request objects safely.
|
|
4
|
+
*/
|
|
5
|
+
export declare function toUrlString(url: string | URL | Request): string;
|
|
1
6
|
/**
|
|
2
7
|
* Create a mock `fetch` function for use in SDK tests.
|
|
3
8
|
*
|
|
@@ -15,10 +20,14 @@
|
|
|
15
20
|
*
|
|
16
21
|
* describe('my feature', () => {
|
|
17
22
|
* it('lists servers', async () => {
|
|
18
|
-
* const mockFetch = createMockFetch(() => ({
|
|
19
|
-
*
|
|
23
|
+
* const mockFetch = createMockFetch(() => ({
|
|
24
|
+
* data: [{ id: '1', type: 'server', attributes: { name: 'web-1' } }],
|
|
25
|
+
* links: {},
|
|
26
|
+
* meta: { per_page: 200, next_cursor: null },
|
|
27
|
+
* }));
|
|
28
|
+
* const forge = new Forge('test-token', 'test-org', { fetch: mockFetch });
|
|
20
29
|
* const servers = await forge.servers.list();
|
|
21
|
-
* expect(servers).
|
|
30
|
+
* expect(servers).toHaveLength(1);
|
|
22
31
|
* });
|
|
23
32
|
* });
|
|
24
33
|
* ```
|
package/dist/test-utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,GACpD,OAAO,KAAK,CAUd"}
|
package/dist/test-utils.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { vi } from "vitest";
|
|
2
2
|
/**
|
|
3
|
+
* Convert a fetch URL argument to a string.
|
|
4
|
+
* Handles string, URL, and Request objects safely.
|
|
5
|
+
*/
|
|
6
|
+
function toUrlString(url) {
|
|
7
|
+
return typeof url === "string" ? url : url instanceof URL ? url.toString() : url.url;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
3
10
|
* Create a mock `fetch` function for use in SDK tests.
|
|
4
11
|
*
|
|
5
12
|
* The handler receives the request URL and init options, and should return
|
|
@@ -16,23 +23,27 @@ import { vi } from "vitest";
|
|
|
16
23
|
*
|
|
17
24
|
* describe('my feature', () => {
|
|
18
25
|
* it('lists servers', async () => {
|
|
19
|
-
* const mockFetch = createMockFetch(() => ({
|
|
20
|
-
*
|
|
26
|
+
* const mockFetch = createMockFetch(() => ({
|
|
27
|
+
* data: [{ id: '1', type: 'server', attributes: { name: 'web-1' } }],
|
|
28
|
+
* links: {},
|
|
29
|
+
* meta: { per_page: 200, next_cursor: null },
|
|
30
|
+
* }));
|
|
31
|
+
* const forge = new Forge('test-token', 'test-org', { fetch: mockFetch });
|
|
21
32
|
* const servers = await forge.servers.list();
|
|
22
|
-
* expect(servers).
|
|
33
|
+
* expect(servers).toHaveLength(1);
|
|
23
34
|
* });
|
|
24
35
|
* });
|
|
25
36
|
* ```
|
|
26
37
|
*/
|
|
27
38
|
function createMockFetch(handler) {
|
|
28
39
|
return vi.fn(async (url, init) => {
|
|
29
|
-
const data = handler(
|
|
40
|
+
const data = handler(toUrlString(url), init);
|
|
30
41
|
return new Response(JSON.stringify(data), {
|
|
31
42
|
status: 200,
|
|
32
43
|
headers: { "Content-Type": "application/json" }
|
|
33
44
|
});
|
|
34
45
|
});
|
|
35
46
|
}
|
|
36
|
-
export { createMockFetch };
|
|
47
|
+
export { createMockFetch, toUrlString };
|
|
37
48
|
|
|
38
49
|
//# sourceMappingURL=test-utils.js.map
|
package/dist/test-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.js","names":[],"sources":["../src/test-utils.ts"],"sourcesContent":["import { vi } from \"vitest\";\n\n/**\n * Create a mock `fetch` function for use in SDK tests.\n *\n * The handler receives the request URL and init options, and should return\n * the data to be serialised as JSON in the response body.\n *\n * @param handler A function that receives `(url, init)` and returns response data.\n * @returns A vitest mock function compatible with the `fetch` signature.\n *\n * @example\n * ```ts\n * import { describe, it, expect } from 'vitest';\n * import { Forge } from '@studiometa/forge-sdk';\n * import { createMockFetch } from '@studiometa/forge-sdk/test-utils';\n *\n * describe('my feature', () => {\n * it('lists servers', async () => {\n * const mockFetch = createMockFetch(() => ({
|
|
1
|
+
{"version":3,"file":"test-utils.js","names":[],"sources":["../src/test-utils.ts"],"sourcesContent":["import { vi } from \"vitest\";\n\n/**\n * Convert a fetch URL argument to a string.\n * Handles string, URL, and Request objects safely.\n */\n// eslint-disable-next-line typescript-eslint/no-redundant-type-constituents -- matches fetch() signature\nexport function toUrlString(url: string | URL | Request): string {\n return typeof url === \"string\" ? url : url instanceof URL ? url.toString() : url.url;\n}\n\n/**\n * Create a mock `fetch` function for use in SDK tests.\n *\n * The handler receives the request URL and init options, and should return\n * the data to be serialised as JSON in the response body.\n *\n * @param handler A function that receives `(url, init)` and returns response data.\n * @returns A vitest mock function compatible with the `fetch` signature.\n *\n * @example\n * ```ts\n * import { describe, it, expect } from 'vitest';\n * import { Forge } from '@studiometa/forge-sdk';\n * import { createMockFetch } from '@studiometa/forge-sdk/test-utils';\n *\n * describe('my feature', () => {\n * it('lists servers', async () => {\n * const mockFetch = createMockFetch(() => ({\n * data: [{ id: '1', type: 'server', attributes: { name: 'web-1' } }],\n * links: {},\n * meta: { per_page: 200, next_cursor: null },\n * }));\n * const forge = new Forge('test-token', 'test-org', { fetch: mockFetch });\n * const servers = await forge.servers.list();\n * expect(servers).toHaveLength(1);\n * });\n * });\n * ```\n */\nexport function createMockFetch(\n handler: (url: string, init?: RequestInit) => unknown,\n): typeof fetch {\n // eslint-disable-next-line typescript-eslint/no-redundant-type-constituents -- matches fetch() signature\n return vi.fn(async (url: string | URL | Request, init?: RequestInit) => {\n const urlStr = toUrlString(url);\n const data = handler(urlStr, init);\n return new Response(JSON.stringify(data), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }) as unknown as typeof fetch;\n}\n"],"mappings":";;;;;AAOA,SAAgB,YAAY,KAAqC;AAC/D,QAAO,OAAO,QAAQ,WAAW,MAAM,eAAe,MAAM,IAAI,UAAU,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCnF,SAAgB,gBACd,SACc;AAEd,QAAO,GAAG,GAAG,OAAO,KAA6B,SAAuB;EAEtE,MAAM,OAAO,QADE,YAAY,IAAI,EACF,KAAK;AAClC,SAAO,IAAI,SAAS,KAAK,UAAU,KAAK,EAAE;GACxC,QAAQ;GACR,SAAS,EAAE,gBAAgB,oBAAoB;GAChD,CAAC;GACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@studiometa/forge-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Laravel Forge TypeScript SDK — fluent, chainable, fully-typed API client",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"api-client",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"typecheck": "tsc --noEmit"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@studiometa/forge-api": "0.
|
|
47
|
+
"@studiometa/forge-api": "0.4.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@vitest/coverage-v8": "^4.1.0-beta.4",
|