@dugjason/front-node 0.1.0-alpha.3 → 0.1.0-beta.2
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 +110 -213
- package/dist/client.d.ts +8 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +23 -11
- package/dist/client.js.map +1 -1
- package/dist/core/client.d.ts +36 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +89 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/errors.d.ts +55 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +124 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/paginator.d.ts +88 -0
- package/dist/core/paginator.d.ts.map +1 -0
- package/dist/core/paginator.js +129 -0
- package/dist/core/paginator.js.map +1 -0
- package/dist/core/resource.d.ts +143 -0
- package/dist/core/resource.d.ts.map +1 -0
- package/dist/core/resource.js +132 -0
- package/dist/core/resource.js.map +1 -0
- package/dist/endpoints/accounts.d.ts +34 -0
- package/dist/endpoints/accounts.d.ts.map +1 -0
- package/dist/endpoints/accounts.js +85 -0
- package/dist/endpoints/accounts.js.map +1 -0
- package/dist/endpoints/analytics.d.ts +32 -0
- package/dist/endpoints/analytics.d.ts.map +1 -0
- package/dist/endpoints/analytics.js +48 -0
- package/dist/endpoints/analytics.js.map +1 -0
- package/dist/endpoints/applications.d.ts +15 -0
- package/dist/endpoints/applications.d.ts.map +1 -0
- package/dist/endpoints/applications.js +17 -0
- package/dist/endpoints/applications.js.map +1 -0
- package/dist/endpoints/attachments.d.ts +8 -0
- package/dist/endpoints/attachments.d.ts.map +1 -0
- package/dist/endpoints/attachments.js +10 -0
- package/dist/endpoints/attachments.js.map +1 -0
- package/dist/endpoints/channels.d.ts +41 -0
- package/dist/endpoints/channels.d.ts.map +1 -0
- package/dist/endpoints/channels.js +64 -0
- package/dist/endpoints/channels.js.map +1 -0
- package/dist/endpoints/comments.d.ts +30 -0
- package/dist/endpoints/comments.d.ts.map +1 -0
- package/dist/endpoints/comments.js +45 -0
- package/dist/endpoints/comments.js.map +1 -0
- package/dist/endpoints/contacts.d.ts +46 -0
- package/dist/endpoints/contacts.d.ts.map +1 -0
- package/dist/endpoints/contacts.js +99 -0
- package/dist/endpoints/contacts.js.map +1 -0
- package/dist/endpoints/conversations.d.ts +77 -0
- package/dist/endpoints/conversations.d.ts.map +1 -0
- package/dist/endpoints/conversations.js +221 -0
- package/dist/endpoints/conversations.js.map +1 -0
- package/dist/endpoints/drafts.d.ts +12 -0
- package/dist/endpoints/drafts.d.ts.map +1 -0
- package/dist/endpoints/drafts.js +26 -0
- package/dist/endpoints/drafts.js.map +1 -0
- package/dist/endpoints/events.d.ts +13 -0
- package/dist/endpoints/events.d.ts.map +1 -0
- package/dist/endpoints/events.js +21 -0
- package/dist/endpoints/events.js.map +1 -0
- package/dist/endpoints/inboxes.d.ts +42 -0
- package/dist/endpoints/inboxes.d.ts.map +1 -0
- package/dist/endpoints/inboxes.js +83 -0
- package/dist/endpoints/inboxes.js.map +1 -0
- package/dist/endpoints/knowledge-base-articles.d.ts +8 -0
- package/dist/endpoints/knowledge-base-articles.d.ts.map +1 -0
- package/dist/endpoints/knowledge-base-articles.js +10 -0
- package/dist/endpoints/knowledge-base-articles.js.map +1 -0
- package/dist/endpoints/knowledge-bases.d.ts +50 -0
- package/dist/endpoints/knowledge-bases.d.ts.map +1 -0
- package/dist/endpoints/knowledge-bases.js +131 -0
- package/dist/endpoints/knowledge-bases.js.map +1 -0
- package/dist/endpoints/links.d.ts +30 -0
- package/dist/endpoints/links.d.ts.map +1 -0
- package/dist/endpoints/links.js +67 -0
- package/dist/endpoints/links.js.map +1 -0
- package/dist/endpoints/message-template-folders.d.ts +38 -0
- package/dist/endpoints/message-template-folders.d.ts.map +1 -0
- package/dist/endpoints/message-template-folders.js +114 -0
- package/dist/endpoints/message-template-folders.js.map +1 -0
- package/dist/endpoints/message-templates.d.ts +30 -0
- package/dist/endpoints/message-templates.d.ts.map +1 -0
- package/dist/endpoints/message-templates.js +69 -0
- package/dist/endpoints/message-templates.js.map +1 -0
- package/dist/endpoints/messages.d.ts +21 -0
- package/dist/endpoints/messages.d.ts.map +1 -0
- package/dist/endpoints/messages.js +31 -0
- package/dist/endpoints/messages.js.map +1 -0
- package/dist/endpoints/rules.d.ts +16 -0
- package/dist/endpoints/rules.d.ts.map +1 -0
- package/dist/endpoints/rules.js +21 -0
- package/dist/endpoints/rules.js.map +1 -0
- package/dist/endpoints/shifts.d.ts +46 -0
- package/dist/endpoints/shifts.d.ts.map +1 -0
- package/dist/endpoints/shifts.js +70 -0
- package/dist/endpoints/shifts.js.map +1 -0
- package/dist/endpoints/signatures.d.ts +36 -0
- package/dist/endpoints/signatures.d.ts.map +1 -0
- package/dist/endpoints/signatures.js +52 -0
- package/dist/endpoints/signatures.js.map +1 -0
- package/dist/endpoints/statuses.d.ts +15 -0
- package/dist/endpoints/statuses.d.ts.map +1 -0
- package/dist/endpoints/statuses.js +22 -0
- package/dist/endpoints/statuses.js.map +1 -0
- package/dist/endpoints/tags.d.ts +30 -0
- package/dist/endpoints/tags.d.ts.map +1 -0
- package/dist/endpoints/tags.js +49 -0
- package/dist/endpoints/tags.js.map +1 -0
- package/dist/endpoints/teammate-groups.d.ts +47 -0
- package/dist/endpoints/teammate-groups.d.ts.map +1 -0
- package/dist/endpoints/teammate-groups.js +101 -0
- package/dist/endpoints/teammate-groups.js.map +1 -0
- package/dist/endpoints/teammates.d.ts +28 -0
- package/dist/endpoints/teammates.d.ts.map +1 -0
- package/dist/endpoints/teammates.js +59 -0
- package/dist/endpoints/teammates.js.map +1 -0
- package/dist/endpoints/teams.d.ts +37 -0
- package/dist/endpoints/teams.d.ts.map +1 -0
- package/dist/endpoints/teams.js +79 -0
- package/dist/endpoints/teams.js.map +1 -0
- package/dist/front.d.ts +85 -23
- package/dist/front.d.ts.map +1 -1
- package/dist/front.js +137 -36
- package/dist/front.js.map +1 -1
- package/dist/generated/client/client.gen.d.ts +3 -0
- package/dist/generated/client/client.gen.d.ts.map +1 -0
- package/dist/generated/client/client.gen.js +204 -0
- package/dist/generated/client/client.gen.js.map +1 -0
- package/dist/generated/client/index.d.ts +8 -0
- package/dist/generated/client/index.d.ts.map +1 -0
- package/dist/generated/client/index.js +6 -0
- package/dist/generated/client/index.js.map +1 -0
- package/dist/generated/client/types.gen.d.ts +125 -0
- package/dist/generated/client/types.gen.d.ts.map +1 -0
- package/dist/generated/client/types.gen.js +3 -0
- package/dist/generated/client/types.gen.js.map +1 -0
- package/dist/generated/client/utils.gen.d.ts +39 -0
- package/dist/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/generated/client/utils.gen.js +230 -0
- package/dist/generated/client/utils.gen.js.map +1 -0
- package/dist/generated/client.gen.d.ts +13 -0
- package/dist/generated/client.gen.d.ts.map +1 -0
- package/dist/generated/client.gen.js +6 -0
- package/dist/generated/client.gen.js.map +1 -0
- package/dist/generated/core/auth.gen.d.ts +19 -0
- package/dist/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/generated/core/auth.gen.js +15 -0
- package/dist/generated/core/auth.gen.js.map +1 -0
- package/dist/generated/core/bodySerializer.gen.d.ts +18 -0
- package/dist/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/bodySerializer.gen.js +58 -0
- package/dist/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/generated/core/params.gen.d.ts +34 -0
- package/dist/generated/core/params.gen.d.ts.map +1 -0
- package/dist/generated/core/params.gen.js +89 -0
- package/dist/generated/core/params.gen.js.map +1 -0
- package/dist/generated/core/pathSerializer.gen.d.ts +34 -0
- package/dist/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/generated/core/pathSerializer.gen.js +115 -0
- package/dist/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/generated/core/serverSentEvents.gen.js +136 -0
- package/dist/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/generated/core/types.gen.d.ts +79 -0
- package/dist/generated/core/types.gen.d.ts.map +1 -0
- package/dist/generated/core/types.gen.js +3 -0
- package/dist/generated/core/types.gen.js.map +1 -0
- package/dist/generated/core/utils.gen.d.ts +15 -0
- package/dist/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/generated/core/utils.gen.js +70 -0
- package/dist/generated/core/utils.gen.js.map +1 -0
- package/dist/generated/sdk.gen.d.ts +1292 -0
- package/dist/generated/sdk.gen.d.ts.map +1 -0
- package/dist/generated/sdk.gen.js +4202 -0
- package/dist/generated/sdk.gen.js.map +1 -0
- package/dist/generated/types.gen.d.ts +8492 -0
- package/dist/generated/types.gen.d.ts.map +1 -0
- package/dist/generated/types.gen.js +149 -0
- package/dist/generated/types.gen.js.map +1 -0
- package/dist/index.d.ts +25 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -8
- package/dist/index.js.map +1 -1
- package/dist/resources/accounts.d.ts +14 -37
- package/dist/resources/accounts.d.ts.map +1 -1
- package/dist/resources/accounts.js +34 -54
- package/dist/resources/accounts.js.map +1 -1
- package/dist/resources/analytics.d.ts +36 -0
- package/dist/resources/analytics.d.ts.map +1 -0
- package/dist/resources/analytics.js +82 -0
- package/dist/resources/analytics.js.map +1 -0
- package/dist/resources/applications.d.ts +9 -0
- package/dist/resources/applications.d.ts.map +1 -0
- package/dist/resources/applications.js +13 -0
- package/dist/resources/applications.js.map +1 -0
- package/dist/resources/channels.d.ts +18 -0
- package/dist/resources/channels.d.ts.map +1 -0
- package/dist/resources/channels.js +35 -0
- package/dist/resources/channels.js.map +1 -0
- package/dist/resources/comments.d.ts +18 -0
- package/dist/resources/comments.d.ts.map +1 -0
- package/dist/resources/comments.js +36 -0
- package/dist/resources/comments.js.map +1 -0
- package/dist/resources/contacts.d.ts +14 -65
- package/dist/resources/contacts.d.ts.map +1 -1
- package/dist/resources/contacts.js +24 -84
- package/dist/resources/contacts.js.map +1 -1
- package/dist/resources/conversations.d.ts +22 -39
- package/dist/resources/conversations.d.ts.map +1 -1
- package/dist/resources/conversations.js +52 -52
- package/dist/resources/conversations.js.map +1 -1
- package/dist/resources/drafts.d.ts +13 -25
- package/dist/resources/drafts.d.ts.map +1 -1
- package/dist/resources/drafts.js +31 -34
- package/dist/resources/drafts.js.map +1 -1
- package/dist/resources/events.d.ts +23 -0
- package/dist/resources/events.d.ts.map +1 -0
- package/dist/resources/events.js +28 -0
- package/dist/resources/events.js.map +1 -0
- package/dist/resources/inboxes.d.ts +12 -0
- package/dist/resources/inboxes.d.ts.map +1 -0
- package/dist/resources/inboxes.js +25 -0
- package/dist/resources/inboxes.js.map +1 -0
- package/dist/resources/knowledge-base-articles.d.ts +15 -0
- package/dist/resources/knowledge-base-articles.d.ts.map +1 -0
- package/dist/resources/knowledge-base-articles.js +34 -0
- package/dist/resources/knowledge-base-articles.js.map +1 -0
- package/dist/resources/knowledge-base-categories.d.ts +16 -0
- package/dist/resources/knowledge-base-categories.d.ts.map +1 -0
- package/dist/resources/knowledge-base-categories.js +37 -0
- package/dist/resources/knowledge-base-categories.js.map +1 -0
- package/dist/resources/knowledge-bases.d.ts +15 -0
- package/dist/resources/knowledge-bases.d.ts.map +1 -0
- package/dist/resources/knowledge-bases.js +35 -0
- package/dist/resources/knowledge-bases.js.map +1 -0
- package/dist/resources/links.d.ts +12 -0
- package/dist/resources/links.d.ts.map +1 -0
- package/dist/resources/links.js +25 -0
- package/dist/resources/links.js.map +1 -0
- package/dist/resources/message-template-folders.d.ts +13 -0
- package/dist/resources/message-template-folders.d.ts.map +1 -0
- package/dist/resources/message-template-folders.js +41 -0
- package/dist/resources/message-template-folders.js.map +1 -0
- package/dist/resources/message-templates.d.ts +16 -0
- package/dist/resources/message-templates.d.ts.map +1 -0
- package/dist/resources/message-templates.js +50 -0
- package/dist/resources/message-templates.js.map +1 -0
- package/dist/resources/messages.d.ts +36 -0
- package/dist/resources/messages.d.ts.map +1 -0
- package/dist/resources/messages.js +55 -0
- package/dist/resources/messages.js.map +1 -0
- package/dist/resources/rules.d.ts +11 -0
- package/dist/resources/rules.d.ts.map +1 -0
- package/dist/resources/rules.js +22 -0
- package/dist/resources/rules.js.map +1 -0
- package/dist/resources/shifts.d.ts +14 -0
- package/dist/resources/shifts.d.ts.map +1 -0
- package/dist/resources/shifts.js +31 -0
- package/dist/resources/shifts.js.map +1 -0
- package/dist/resources/signatures.d.ts +17 -0
- package/dist/resources/signatures.d.ts.map +1 -0
- package/dist/resources/signatures.js +51 -0
- package/dist/resources/signatures.js.map +1 -0
- package/dist/resources/statuses.d.ts +13 -0
- package/dist/resources/statuses.d.ts.map +1 -0
- package/dist/resources/statuses.js +28 -0
- package/dist/resources/statuses.js.map +1 -0
- package/dist/resources/tags.d.ts +15 -61
- package/dist/resources/tags.d.ts.map +1 -1
- package/dist/resources/tags.js +50 -88
- package/dist/resources/tags.js.map +1 -1
- package/dist/resources/teammate-groups.d.ts +17 -0
- package/dist/resources/teammate-groups.d.ts.map +1 -0
- package/dist/resources/teammate-groups.js +25 -0
- package/dist/resources/teammate-groups.js.map +1 -0
- package/dist/resources/teammates.d.ts +15 -27
- package/dist/resources/teammates.d.ts.map +1 -1
- package/dist/resources/teammates.js +37 -34
- package/dist/resources/teammates.js.map +1 -1
- package/dist/resources/teams.d.ts +11 -0
- package/dist/resources/teams.d.ts.map +1 -0
- package/dist/resources/teams.js +28 -0
- package/dist/resources/teams.js.map +1 -0
- package/dist/types.d.ts +13 -327
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -5
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { client as generatedClient } from "../generated/client.gen";
|
|
2
|
+
import { OAuthTokenManager } from "../oauth";
|
|
3
|
+
import { FrontError, mapToFrontError } from "./errors";
|
|
4
|
+
const DEFAULT_MAX_RETRIES = 3;
|
|
5
|
+
/**
|
|
6
|
+
* Core HTTP client used by the SDK's handwritten resources.
|
|
7
|
+
*
|
|
8
|
+
* Responsibilities:
|
|
9
|
+
* - Configure and expose the generated HTTP client
|
|
10
|
+
* - Inject authentication (API key or OAuth) into every request
|
|
11
|
+
* - Refresh OAuth tokens on 401 responses and retry once
|
|
12
|
+
* - Normalize thrown errors into `FrontError` subclasses
|
|
13
|
+
*/
|
|
14
|
+
export class APIClient {
|
|
15
|
+
gen;
|
|
16
|
+
apiKey;
|
|
17
|
+
oauthManager;
|
|
18
|
+
maxRetries;
|
|
19
|
+
/**
|
|
20
|
+
* Create a new API client.
|
|
21
|
+
*
|
|
22
|
+
* @param config - Front configuration including API key or OAuth settings and optional overrides
|
|
23
|
+
*/
|
|
24
|
+
constructor(config) {
|
|
25
|
+
this.gen = generatedClient;
|
|
26
|
+
this.maxRetries = config?.maxRetries ?? DEFAULT_MAX_RETRIES;
|
|
27
|
+
// Set Auth credentials
|
|
28
|
+
if (config?.oauth) {
|
|
29
|
+
this.oauthManager = new OAuthTokenManager(config.oauth);
|
|
30
|
+
}
|
|
31
|
+
if (config?.apiKey || process.env.FRONT_API_KEY) {
|
|
32
|
+
this.apiKey = config?.apiKey ?? process.env.FRONT_API_KEY;
|
|
33
|
+
}
|
|
34
|
+
if (!this.apiKey && !this.oauthManager) {
|
|
35
|
+
throw new Error("API key or OAuth configuration is required");
|
|
36
|
+
}
|
|
37
|
+
this.gen.setConfig({
|
|
38
|
+
baseUrl: config?.baseUrl ?? "https://api2.frontapp.com",
|
|
39
|
+
throwOnError: true,
|
|
40
|
+
responseStyle: "fields",
|
|
41
|
+
// Use the generated client's `auth` hook to inject the token per request
|
|
42
|
+
auth: async (auth) => {
|
|
43
|
+
const token = await this.getAuthToken();
|
|
44
|
+
if (!token)
|
|
45
|
+
return undefined;
|
|
46
|
+
if (auth.scheme === "bearer")
|
|
47
|
+
return token;
|
|
48
|
+
return token;
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
// Install a response interceptor to handle 401 with OAuth and retry logic
|
|
52
|
+
this.gen.interceptors.response.use(async (response, request) => {
|
|
53
|
+
if (response.status !== 401 || !this.oauthManager)
|
|
54
|
+
return response;
|
|
55
|
+
// Attempt only a single refresh + retry to avoid loops
|
|
56
|
+
const refreshed = await this.oauthManager.refreshToken();
|
|
57
|
+
// Clone request with new Authorization token
|
|
58
|
+
const headers = new Headers(request.headers);
|
|
59
|
+
headers.set("Authorization", `Bearer ${refreshed}`);
|
|
60
|
+
const retryReq = new Request(request, { headers });
|
|
61
|
+
const cfg = this.gen.getConfig();
|
|
62
|
+
const fetchImpl = cfg.fetch ?? globalThis.fetch;
|
|
63
|
+
return fetchImpl(retryReq);
|
|
64
|
+
});
|
|
65
|
+
// Normalize thrown errors
|
|
66
|
+
this.gen.interceptors.error.use(async (err, response) => {
|
|
67
|
+
throw mapToFrontError(err, response);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Access the configured generated client for low-level operations.
|
|
72
|
+
*/
|
|
73
|
+
getGenClient() {
|
|
74
|
+
return this.gen;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve the current auth token used for requests.
|
|
78
|
+
*
|
|
79
|
+
* @throws FrontError when credentials are missing
|
|
80
|
+
*/
|
|
81
|
+
async getAuthToken() {
|
|
82
|
+
if (this.apiKey)
|
|
83
|
+
return this.apiKey;
|
|
84
|
+
if (this.oauthManager)
|
|
85
|
+
return this.oauthManager.getAccessToken();
|
|
86
|
+
throw new FrontError("Missing credentials", 401, "auth_error");
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Front SDK error. All SDK errors extend this class.
|
|
3
|
+
*/
|
|
4
|
+
export declare class FrontError extends Error {
|
|
5
|
+
readonly status?: number | undefined;
|
|
6
|
+
readonly code?: string | undefined;
|
|
7
|
+
readonly details?: unknown | undefined;
|
|
8
|
+
readonly headers?: Headers | undefined;
|
|
9
|
+
constructor(message: string, status?: number | undefined, code?: string | undefined, details?: unknown | undefined, headers?: Headers | undefined);
|
|
10
|
+
}
|
|
11
|
+
/** 400 Bad Request */
|
|
12
|
+
export declare class FrontBadRequestError extends FrontError {
|
|
13
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
14
|
+
}
|
|
15
|
+
/** 401 Unauthorized */
|
|
16
|
+
export declare class FrontUnauthorizedError extends FrontError {
|
|
17
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
18
|
+
}
|
|
19
|
+
/** 403 Forbidden */
|
|
20
|
+
export declare class FrontForbiddenError extends FrontError {
|
|
21
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
22
|
+
}
|
|
23
|
+
/** 404 Not Found */
|
|
24
|
+
export declare class FrontNotFoundError extends FrontError {
|
|
25
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
26
|
+
}
|
|
27
|
+
/** 409 Conflict */
|
|
28
|
+
export declare class FrontConflictError extends FrontError {
|
|
29
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
30
|
+
}
|
|
31
|
+
/** 422 Unprocessable Entity */
|
|
32
|
+
export declare class FrontUnprocessableEntityError extends FrontError {
|
|
33
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
34
|
+
}
|
|
35
|
+
/** 429 Too Many Requests */
|
|
36
|
+
export declare class FrontRateLimitError extends FrontError {
|
|
37
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
38
|
+
}
|
|
39
|
+
/** 5xx Server Error */
|
|
40
|
+
export declare class FrontServerError extends FrontError {
|
|
41
|
+
constructor(...args: ConstructorParameters<typeof FrontError>);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Normalize unknown errors (thrown by fetch/generated client) into FrontError subclasses.
|
|
45
|
+
*
|
|
46
|
+
* - Preserves HTTP status and headers when available
|
|
47
|
+
* - Attempts to read `message` and `code` from the thrown payload
|
|
48
|
+
* - Maps common HTTP status codes to specific subclasses for easier matching
|
|
49
|
+
*
|
|
50
|
+
* @param error - The unknown error payload (string/object/Error)
|
|
51
|
+
* @param response - The corresponding `Response`, if available
|
|
52
|
+
* @returns A typed `FrontError` subclass
|
|
53
|
+
*/
|
|
54
|
+
export declare function mapToFrontError(error: unknown, response?: Response): FrontError;
|
|
55
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,UAAW,SAAQ,KAAK;aAGjB,MAAM,CAAC,EAAE,MAAM;aACf,IAAI,CAAC,EAAE,MAAM;aACb,OAAO,CAAC,EAAE,OAAO;aACjB,OAAO,CAAC,EAAE,OAAO;gBAJjC,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,OAAO,YAAA,EACjB,OAAO,CAAC,EAAE,OAAO,YAAA;CAKpC;AAED,sBAAsB;AACtB,qBAAa,oBAAqB,SAAQ,UAAU;gBACtC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,uBAAuB;AACvB,qBAAa,sBAAuB,SAAQ,UAAU;gBACxC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,oBAAoB;AACpB,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,oBAAoB;AACpB,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,mBAAmB;AACnB,qBAAa,kBAAmB,SAAQ,UAAU;gBACpC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,+BAA+B;AAC/B,qBAAa,6BAA8B,SAAQ,UAAU;gBAC/C,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,4BAA4B;AAC5B,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AACD,uBAAuB;AACvB,qBAAa,gBAAiB,SAAQ,UAAU;gBAClC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,UAAU,CAAC;CAI9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,GAClB,UAAU,CA6CZ"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Front SDK error. All SDK errors extend this class.
|
|
3
|
+
*/
|
|
4
|
+
export class FrontError extends Error {
|
|
5
|
+
status;
|
|
6
|
+
code;
|
|
7
|
+
details;
|
|
8
|
+
headers;
|
|
9
|
+
constructor(message, status, code, details, headers) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.status = status;
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.details = details;
|
|
14
|
+
this.headers = headers;
|
|
15
|
+
this.name = "FrontError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** 400 Bad Request */
|
|
19
|
+
export class FrontBadRequestError extends FrontError {
|
|
20
|
+
constructor(...args) {
|
|
21
|
+
super(...args);
|
|
22
|
+
this.name = "FrontBadRequestError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** 401 Unauthorized */
|
|
26
|
+
export class FrontUnauthorizedError extends FrontError {
|
|
27
|
+
constructor(...args) {
|
|
28
|
+
super(...args);
|
|
29
|
+
this.name = "FrontUnauthorizedError";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** 403 Forbidden */
|
|
33
|
+
export class FrontForbiddenError extends FrontError {
|
|
34
|
+
constructor(...args) {
|
|
35
|
+
super(...args);
|
|
36
|
+
this.name = "FrontForbiddenError";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** 404 Not Found */
|
|
40
|
+
export class FrontNotFoundError extends FrontError {
|
|
41
|
+
constructor(...args) {
|
|
42
|
+
super(...args);
|
|
43
|
+
this.name = "FrontNotFoundError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** 409 Conflict */
|
|
47
|
+
export class FrontConflictError extends FrontError {
|
|
48
|
+
constructor(...args) {
|
|
49
|
+
super(...args);
|
|
50
|
+
this.name = "FrontConflictError";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** 422 Unprocessable Entity */
|
|
54
|
+
export class FrontUnprocessableEntityError extends FrontError {
|
|
55
|
+
constructor(...args) {
|
|
56
|
+
super(...args);
|
|
57
|
+
this.name = "FrontUnprocessableEntityError";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** 429 Too Many Requests */
|
|
61
|
+
export class FrontRateLimitError extends FrontError {
|
|
62
|
+
constructor(...args) {
|
|
63
|
+
super(...args);
|
|
64
|
+
this.name = "FrontRateLimitError";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** 5xx Server Error */
|
|
68
|
+
export class FrontServerError extends FrontError {
|
|
69
|
+
constructor(...args) {
|
|
70
|
+
super(...args);
|
|
71
|
+
this.name = "FrontServerError";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Normalize unknown errors (thrown by fetch/generated client) into FrontError subclasses.
|
|
76
|
+
*
|
|
77
|
+
* - Preserves HTTP status and headers when available
|
|
78
|
+
* - Attempts to read `message` and `code` from the thrown payload
|
|
79
|
+
* - Maps common HTTP status codes to specific subclasses for easier matching
|
|
80
|
+
*
|
|
81
|
+
* @param error - The unknown error payload (string/object/Error)
|
|
82
|
+
* @param response - The corresponding `Response`, if available
|
|
83
|
+
* @returns A typed `FrontError` subclass
|
|
84
|
+
*/
|
|
85
|
+
export function mapToFrontError(error, response) {
|
|
86
|
+
// error could be a string, object, or already an Error/FrontError
|
|
87
|
+
if (error instanceof FrontError)
|
|
88
|
+
return error;
|
|
89
|
+
console.log("error >", error);
|
|
90
|
+
const status = response?.status;
|
|
91
|
+
const headers = response?.headers;
|
|
92
|
+
console.log("headers >", headers);
|
|
93
|
+
const maybeObj = error;
|
|
94
|
+
const code = typeof maybeObj === "object" &&
|
|
95
|
+
maybeObj &&
|
|
96
|
+
typeof maybeObj.code === "string"
|
|
97
|
+
? maybeObj.code
|
|
98
|
+
: undefined;
|
|
99
|
+
const message = typeof maybeObj === "object" &&
|
|
100
|
+
maybeObj &&
|
|
101
|
+
typeof maybeObj.message === "string"
|
|
102
|
+
? maybeObj.message
|
|
103
|
+
: `HTTP ${status ?? "error"}`;
|
|
104
|
+
const ctor = status === 400
|
|
105
|
+
? FrontBadRequestError
|
|
106
|
+
: status === 401
|
|
107
|
+
? FrontUnauthorizedError
|
|
108
|
+
: status === 403
|
|
109
|
+
? FrontForbiddenError
|
|
110
|
+
: status === 404
|
|
111
|
+
? FrontNotFoundError
|
|
112
|
+
: status === 409
|
|
113
|
+
? FrontConflictError
|
|
114
|
+
: status === 422
|
|
115
|
+
? FrontUnprocessableEntityError
|
|
116
|
+
: status === 429
|
|
117
|
+
? FrontRateLimitError
|
|
118
|
+
: status && status >= 500
|
|
119
|
+
? FrontServerError
|
|
120
|
+
: FrontError;
|
|
121
|
+
console.log({ message, status, code, error, headers });
|
|
122
|
+
return new ctor(message, status, code, error, headers);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export declare class Page<T> implements AsyncIterable<T> {
|
|
2
|
+
readonly items: T[];
|
|
3
|
+
private readonly _getNext;
|
|
4
|
+
constructor(items: T[], _getNext: (() => Promise<{
|
|
5
|
+
response: Response;
|
|
6
|
+
page: Page<T>;
|
|
7
|
+
} | null>) | null);
|
|
8
|
+
/**
|
|
9
|
+
* Whether there is another page available after the current one.
|
|
10
|
+
*/
|
|
11
|
+
get hasNextPage(): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Fetch the next page of results, if available.
|
|
14
|
+
*
|
|
15
|
+
* @returns The next page pair (containing `Response` and `Page<T>`) or `null` if no more pages.
|
|
16
|
+
*/
|
|
17
|
+
nextPage(): Promise<{
|
|
18
|
+
response: Response;
|
|
19
|
+
page: Page<T>;
|
|
20
|
+
} | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Iterate over the items in this page.
|
|
23
|
+
*/
|
|
24
|
+
[Symbol.asyncIterator](): AsyncGenerator<Awaited<T>, void, unknown>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parse the `page_token` query parameter from a `_pagination.next` URL.
|
|
28
|
+
*
|
|
29
|
+
* @param nextUrl - The `_pagination.next` absolute or relative URL
|
|
30
|
+
* @returns The `page_token` value or `null` if it cannot be determined
|
|
31
|
+
*/
|
|
32
|
+
export declare function parsePageTokenFromNextUrl(nextUrl?: string | null): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Safely read the `_pagination.next` URL from a list response body.
|
|
35
|
+
*
|
|
36
|
+
* @param data - The list response body
|
|
37
|
+
* @returns The URL string if present, otherwise `null`
|
|
38
|
+
*/
|
|
39
|
+
export declare function getNextUrlFromBody(data: unknown): string | null;
|
|
40
|
+
/**
|
|
41
|
+
* Extract the next `page_token` from a list response body.
|
|
42
|
+
*
|
|
43
|
+
* @param data - The list response body
|
|
44
|
+
* @returns The `page_token` value or `null`
|
|
45
|
+
*/
|
|
46
|
+
export declare function getNextPageTokenFromBody(data: unknown): string | null;
|
|
47
|
+
/**
|
|
48
|
+
* Build a `Page<TItem>` from an initial list response and provide a `fetchNext` closure
|
|
49
|
+
* that retrieves subsequent pages, preserving the underlying `Response` object for each.
|
|
50
|
+
*
|
|
51
|
+
* The caller supplies `mapItems` to transform the list response into `TItem[]` and a `fetchNext`
|
|
52
|
+
* function that accepts a `pageToken` and returns `{ response, data }` for the next page.
|
|
53
|
+
*
|
|
54
|
+
* @typeParam TItem - The item type contained in the page
|
|
55
|
+
* @typeParam TListResponse - The concrete list response body type
|
|
56
|
+
* @param args.data - The first page body
|
|
57
|
+
* @param args.fetchNext - A function to fetch the next page given a token
|
|
58
|
+
* @param args.mapItems - A function mapping a response body to an array of items
|
|
59
|
+
* @returns The constructed `Page<TItem>` for the first page
|
|
60
|
+
*/
|
|
61
|
+
export declare function buildPageFromListResponse<TItem, TListResponse>(args: {
|
|
62
|
+
data: TListResponse;
|
|
63
|
+
fetchNext: (pageToken: string) => Promise<{
|
|
64
|
+
response: Response;
|
|
65
|
+
data: TListResponse | undefined;
|
|
66
|
+
}>;
|
|
67
|
+
mapItems: (data: TListResponse) => TItem[];
|
|
68
|
+
}): Page<TItem>;
|
|
69
|
+
/** A pair of the raw `Response` and a `Page<T>` of items. */
|
|
70
|
+
export type PagePair<T> = {
|
|
71
|
+
response: Response;
|
|
72
|
+
page: Page<T>;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Create an async-iterable result from the first `PagePair<T>` that yields each
|
|
76
|
+
* page pair as it is fetched via `nextPage()`. This allows
|
|
77
|
+
*
|
|
78
|
+
* ```ts
|
|
79
|
+
* for await (const { response, page } of result) { ... }
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* while also providing direct access to the first `{ response, page }`.
|
|
83
|
+
*
|
|
84
|
+
* @param first - The first page pair
|
|
85
|
+
* @returns An object containing the first page pair and an async iterator over subsequent pairs
|
|
86
|
+
*/
|
|
87
|
+
export declare function makePagedResult<T>(first: PagePair<T>): PagePair<T> & AsyncIterable<PagePair<T>>;
|
|
88
|
+
//# sourceMappingURL=paginator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginator.d.ts","sourceRoot":"","sources":["../../src/core/paginator.ts"],"names":[],"mappings":"AAAA,qBAAa,IAAI,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;aAE5B,KAAK,EAAE,CAAC,EAAE;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADT,KAAK,EAAE,CAAC,EAAE,EACT,QAAQ,EACrB,CAAC,MAAM,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC,GAC7D,IAAI;IAEV;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IACD;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAGvE;;OAEG;IACI,CAAC,MAAM,CAAC,aAAa,CAAC;CAG9B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,GAAG,IAAI,CASf;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK/D;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAErE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;IACpE,IAAI,EAAE,aAAa,CAAA;IACnB,SAAS,EAAE,CACT,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAA;KAAE,CAAC,CAAA;IACrE,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,KAAK,EAAE,CAAA;CAC3C,GAAG,IAAI,CAAC,KAAK,CAAC,CAmBd;AAED,6DAA6D;AAC7D,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;CAAE,CAAA;AAE/D;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GACjB,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAa1C"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
export class Page {
|
|
2
|
+
items;
|
|
3
|
+
_getNext;
|
|
4
|
+
constructor(items, _getNext) {
|
|
5
|
+
this.items = items;
|
|
6
|
+
this._getNext = _getNext;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Whether there is another page available after the current one.
|
|
10
|
+
*/
|
|
11
|
+
get hasNextPage() {
|
|
12
|
+
return !!this._getNext;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Fetch the next page of results, if available.
|
|
16
|
+
*
|
|
17
|
+
* @returns The next page pair (containing `Response` and `Page<T>`) or `null` if no more pages.
|
|
18
|
+
*/
|
|
19
|
+
async nextPage() {
|
|
20
|
+
return this._getNext ? this._getNext() : null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Iterate over the items in this page.
|
|
24
|
+
*/
|
|
25
|
+
async *[Symbol.asyncIterator]() {
|
|
26
|
+
for (const i of this.items)
|
|
27
|
+
yield i;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parse the `page_token` query parameter from a `_pagination.next` URL.
|
|
32
|
+
*
|
|
33
|
+
* @param nextUrl - The `_pagination.next` absolute or relative URL
|
|
34
|
+
* @returns The `page_token` value or `null` if it cannot be determined
|
|
35
|
+
*/
|
|
36
|
+
export function parsePageTokenFromNextUrl(nextUrl) {
|
|
37
|
+
if (!nextUrl)
|
|
38
|
+
return null;
|
|
39
|
+
try {
|
|
40
|
+
const u = new URL(nextUrl, "https://api2.frontapp.com");
|
|
41
|
+
const token = u.searchParams.get("page_token");
|
|
42
|
+
return token;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Safely read the `_pagination.next` URL from a list response body.
|
|
50
|
+
*
|
|
51
|
+
* @param data - The list response body
|
|
52
|
+
* @returns The URL string if present, otherwise `null`
|
|
53
|
+
*/
|
|
54
|
+
export function getNextUrlFromBody(data) {
|
|
55
|
+
if (!data || typeof data !== "object")
|
|
56
|
+
return null;
|
|
57
|
+
const body = data;
|
|
58
|
+
const next = body._pagination?.next;
|
|
59
|
+
return typeof next === "string" ? next : null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Extract the next `page_token` from a list response body.
|
|
63
|
+
*
|
|
64
|
+
* @param data - The list response body
|
|
65
|
+
* @returns The `page_token` value or `null`
|
|
66
|
+
*/
|
|
67
|
+
export function getNextPageTokenFromBody(data) {
|
|
68
|
+
return parsePageTokenFromNextUrl(getNextUrlFromBody(data));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Build a `Page<TItem>` from an initial list response and provide a `fetchNext` closure
|
|
72
|
+
* that retrieves subsequent pages, preserving the underlying `Response` object for each.
|
|
73
|
+
*
|
|
74
|
+
* The caller supplies `mapItems` to transform the list response into `TItem[]` and a `fetchNext`
|
|
75
|
+
* function that accepts a `pageToken` and returns `{ response, data }` for the next page.
|
|
76
|
+
*
|
|
77
|
+
* @typeParam TItem - The item type contained in the page
|
|
78
|
+
* @typeParam TListResponse - The concrete list response body type
|
|
79
|
+
* @param args.data - The first page body
|
|
80
|
+
* @param args.fetchNext - A function to fetch the next page given a token
|
|
81
|
+
* @param args.mapItems - A function mapping a response body to an array of items
|
|
82
|
+
* @returns The constructed `Page<TItem>` for the first page
|
|
83
|
+
*/
|
|
84
|
+
export function buildPageFromListResponse(args) {
|
|
85
|
+
const { data, fetchNext, mapItems } = args;
|
|
86
|
+
const items = mapItems(data);
|
|
87
|
+
const makeGetNext = (nextToken) => {
|
|
88
|
+
return async () => {
|
|
89
|
+
const { response, data: nextData } = await fetchNext(nextToken);
|
|
90
|
+
if (!nextData)
|
|
91
|
+
return null;
|
|
92
|
+
const nextItems = mapItems(nextData);
|
|
93
|
+
const token2 = getNextPageTokenFromBody(nextData);
|
|
94
|
+
const nextPage = new Page(nextItems, token2 ? makeGetNext(token2) : null);
|
|
95
|
+
return { response, page: nextPage };
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
const token = getNextPageTokenFromBody(data);
|
|
99
|
+
return new Page(items, token ? makeGetNext(token) : null);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Create an async-iterable result from the first `PagePair<T>` that yields each
|
|
103
|
+
* page pair as it is fetched via `nextPage()`. This allows
|
|
104
|
+
*
|
|
105
|
+
* ```ts
|
|
106
|
+
* for await (const { response, page } of result) { ... }
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* while also providing direct access to the first `{ response, page }`.
|
|
110
|
+
*
|
|
111
|
+
* @param first - The first page pair
|
|
112
|
+
* @returns An object containing the first page pair and an async iterator over subsequent pairs
|
|
113
|
+
*/
|
|
114
|
+
export function makePagedResult(first) {
|
|
115
|
+
return {
|
|
116
|
+
...first,
|
|
117
|
+
async *[Symbol.asyncIterator]() {
|
|
118
|
+
let current = first;
|
|
119
|
+
while (current) {
|
|
120
|
+
yield current;
|
|
121
|
+
const next = await current.page.nextPage();
|
|
122
|
+
if (!next)
|
|
123
|
+
return;
|
|
124
|
+
current = next;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=paginator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginator.js","sourceRoot":"","sources":["../../src/core/paginator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { type PagePair } from "./paginator";
|
|
2
|
+
/**
|
|
3
|
+
* Base class for all resource namespaces.
|
|
4
|
+
*
|
|
5
|
+
* This class encapsulates shared behavior and utilities used by resource
|
|
6
|
+
* wrappers. It is generic over two types:
|
|
7
|
+
*
|
|
8
|
+
* - TItem: The concrete domain instance type exposed by the resource
|
|
9
|
+
* (e.g., FrontTag, FrontAccount).
|
|
10
|
+
* - TRaw: The raw DTO shape returned by the generated client for the item
|
|
11
|
+
* (e.g., TagResponse, AccountResponse).
|
|
12
|
+
*
|
|
13
|
+
* Subclasses must implement {@link makeItem} to define how a raw DTO is
|
|
14
|
+
* transformed into a domain instance. By centralizing this transformation,
|
|
15
|
+
* higher-level helpers such as {@link listPaginated} can construct items
|
|
16
|
+
* without duplicated mapping code in each list method.
|
|
17
|
+
*/
|
|
18
|
+
export declare abstract class APIResource<TItem = unknown, TRaw = unknown> {
|
|
19
|
+
/**
|
|
20
|
+
* Convert a raw DTO returned by the generated client into the domain
|
|
21
|
+
* instance exposed by the resource.
|
|
22
|
+
*
|
|
23
|
+
* Subclasses should implement the minimal logic necessary to wrap the raw
|
|
24
|
+
* data (typically `return new FrontX(raw)`), keeping domain
|
|
25
|
+
* classes thin and delegating network operations back to the generated SDK.
|
|
26
|
+
*
|
|
27
|
+
* @param raw - The raw DTO for a single resource item
|
|
28
|
+
* @returns The resource-specific domain instance
|
|
29
|
+
*/
|
|
30
|
+
protected abstract makeItem(raw: TRaw): TItem;
|
|
31
|
+
/**
|
|
32
|
+
* Helper for list endpoints that use Front's standard pagination shape.
|
|
33
|
+
*
|
|
34
|
+
* This function wires the first page and an async iterator over subsequent
|
|
35
|
+
* pages, while preserving the underlying `Response` object for each request.
|
|
36
|
+
* It expects the list response body to contain an `_results` array and a
|
|
37
|
+
* `_pagination.next` link that encodes the next `page_token`.
|
|
38
|
+
*
|
|
39
|
+
* Usage pattern in a resource wrapper:
|
|
40
|
+
*
|
|
41
|
+
* ```ts
|
|
42
|
+
* async list(query?: ListXData["query"]) {
|
|
43
|
+
* return this.listPaginated<ListXResponse, { query?: ListXData["query"]}>({
|
|
44
|
+
* initialOptions: { query },
|
|
45
|
+
* listCall: (options) => listX({ ...options }),
|
|
46
|
+
* })
|
|
47
|
+
* }
|
|
48
|
+
* ```
|
|
49
|
+
*
|
|
50
|
+
* Notes
|
|
51
|
+
* - The method automatically appends `page_token` to the provided
|
|
52
|
+
* `initialOptions.query` on subsequent page fetches.
|
|
53
|
+
* - Item mapping is handled via {@link makeItem}, avoiding per-call
|
|
54
|
+
* mapping boilerplate.
|
|
55
|
+
*
|
|
56
|
+
* @typeParam TListResponse - The concrete list response type with `_results`
|
|
57
|
+
* @typeParam TOptions - The options accepted by the generated list function,
|
|
58
|
+
* which must include an optional `query.page_token` string
|
|
59
|
+
* @param opts.initialOptions - Initial options passed to the generated list function
|
|
60
|
+
* @param opts.listCall - The generated list function to execute
|
|
61
|
+
* @returns The first page pair and an async iterable over subsequent page pairs
|
|
62
|
+
*/
|
|
63
|
+
protected listPaginated<TListResponse extends {
|
|
64
|
+
_results?: Array<TRaw>;
|
|
65
|
+
}, TOptions extends {
|
|
66
|
+
query?: {
|
|
67
|
+
page_token?: string;
|
|
68
|
+
};
|
|
69
|
+
}>(opts: {
|
|
70
|
+
initialOptions: TOptions;
|
|
71
|
+
listCall: (options: TOptions) => Promise<{
|
|
72
|
+
response: Response;
|
|
73
|
+
data?: TListResponse;
|
|
74
|
+
}>;
|
|
75
|
+
}): Promise<PagePair<TItem> & AsyncIterable<PagePair<TItem>>>;
|
|
76
|
+
/**
|
|
77
|
+
* Helper for list endpoints that return a single, non-paginated array of results.
|
|
78
|
+
*
|
|
79
|
+
* Maps the `_results` array into domain items using {@link makeItem} and returns
|
|
80
|
+
* a simple `{ response, data }` pair.
|
|
81
|
+
*/
|
|
82
|
+
protected listWithoutPagination<TListResponse extends {
|
|
83
|
+
_results?: Array<TRaw>;
|
|
84
|
+
}>(opts: {
|
|
85
|
+
listCall: () => Promise<{
|
|
86
|
+
response: Response;
|
|
87
|
+
data?: TListResponse;
|
|
88
|
+
}>;
|
|
89
|
+
}): Promise<{
|
|
90
|
+
response: Response;
|
|
91
|
+
data: TItem[];
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Helper for singular GET endpoints that return one entity.
|
|
95
|
+
*
|
|
96
|
+
* Provide a GET call closure that performs the request using the
|
|
97
|
+
* generated SDK. The response body type must be assignable to `TRaw`.
|
|
98
|
+
*/
|
|
99
|
+
protected getOne<TGet extends TRaw>(opts: {
|
|
100
|
+
getCall: () => Promise<{
|
|
101
|
+
response: Response;
|
|
102
|
+
data?: TGet;
|
|
103
|
+
}>;
|
|
104
|
+
}): Promise<{
|
|
105
|
+
item: TItem;
|
|
106
|
+
response: Response;
|
|
107
|
+
}>;
|
|
108
|
+
/**
|
|
109
|
+
* Helper for singular CREATE endpoints that return one entity.
|
|
110
|
+
*
|
|
111
|
+
* Provide a CREATE call closure that performs the request using the
|
|
112
|
+
* generated SDK. The response body type must be assignable to `TRaw`.
|
|
113
|
+
*/
|
|
114
|
+
protected createOne<TCreate extends TRaw>(opts: {
|
|
115
|
+
createCall: () => Promise<{
|
|
116
|
+
response: Response;
|
|
117
|
+
data?: TCreate;
|
|
118
|
+
}>;
|
|
119
|
+
}): Promise<{
|
|
120
|
+
item: TItem;
|
|
121
|
+
response: Response;
|
|
122
|
+
}>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Base class for domain instances (e.g., `FrontTag`, `FrontAccount`).
|
|
126
|
+
*
|
|
127
|
+
* Provides a shared shape for thin wrappers around raw API DTOs, exposing a
|
|
128
|
+
* `toJSON()` method that returns the underlying raw data for serialization or
|
|
129
|
+
* persistence. Subclasses can add getters for commonly accessed fields and
|
|
130
|
+
* instance methods that delegate mutations back to the generated SDK.
|
|
131
|
+
*/
|
|
132
|
+
export declare abstract class ResourceInstance<T> {
|
|
133
|
+
protected _data: T;
|
|
134
|
+
protected constructor(_data: T);
|
|
135
|
+
/**
|
|
136
|
+
* Return the underlying raw DTO for this domain instance.
|
|
137
|
+
*
|
|
138
|
+
* Prefer using the typed getters on subclasses for read access and methods
|
|
139
|
+
* that call the generated SDK for mutations.
|
|
140
|
+
*/
|
|
141
|
+
toJSON(): T;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/core/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,aAAa,CAAA;AAEpB;;;;;;;;;;;;;;;GAeG;AACH,8BAAsB,WAAW,CAAC,KAAK,GAAG,OAAO,EAAE,IAAI,GAAG,OAAO;IAC/D;;;;;;;;;;OAUG;IACH,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK;IAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;cACa,aAAa,CAC3B,aAAa,SAAS;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;KAAE,EAChD,QAAQ,SAAS;QAAE,KAAK,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EACpD,IAAI,EAAE;QACN,cAAc,EAAE,QAAQ,CAAA;QACxB,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;YACvC,QAAQ,EAAE,QAAQ,CAAA;YAClB,IAAI,CAAC,EAAE,aAAa,CAAA;SACrB,CAAC,CAAA;KACH,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IA2B7D;;;;;OAKG;cACa,qBAAqB,CACnC,aAAa,SAAS;QAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;KAAE,EAChD,IAAI,EAAE;QACN,QAAQ,EAAE,MAAM,OAAO,CAAC;YAAE,QAAQ,EAAE,QAAQ,CAAC;YAAC,IAAI,CAAC,EAAE,aAAa,CAAA;SAAE,CAAC,CAAA;KACtE,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,KAAK,EAAE,CAAA;KAAE,CAAC;IAQlD;;;;;OAKG;cACa,MAAM,CAAC,IAAI,SAAS,IAAI,EAAE,IAAI,EAAE;QAC9C,OAAO,EAAE,MAAM,OAAO,CAAC;YAAE,QAAQ,EAAE,QAAQ,CAAC;YAAC,IAAI,CAAC,EAAE,IAAI,CAAA;SAAE,CAAC,CAAA;KAC5D,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;IAOhD;;;;;OAKG;cACa,SAAS,CAAC,OAAO,SAAS,IAAI,EAAE,IAAI,EAAE;QACpD,UAAU,EAAE,MAAM,OAAO,CAAC;YAAE,QAAQ,EAAE,QAAQ,CAAC;YAAC,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAClE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC;CAKjD;AAED;;;;;;;GAOG;AACH,8BAAsB,gBAAgB,CAAC,CAAC;IAChB,SAAS,CAAC,KAAK,EAAE,CAAC;IAAxC,SAAS,aAAuB,KAAK,EAAE,CAAC;IACxC;;;;;OAKG;IACH,MAAM,IAAI,CAAC;CAGZ"}
|