@dani-builder/strapi-client 0.11.0 → 0.12.1
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 +30 -8
- package/dist/agent/create-agent-client.d.ts +43 -0
- package/dist/agent/create-agent-client.d.ts.map +1 -0
- package/dist/agent/create-agent-client.js +168 -0
- package/dist/agent/create-agent-client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/preview.cjs +55 -0
- package/dist/preview.cjs.map +1 -0
- package/dist/preview.d.cts +5 -0
- package/dist/preview.d.cts.map +1 -0
- package/package.json +17 -2
package/README.md
CHANGED
|
@@ -11,7 +11,8 @@ functions for every content type — pairs with
|
|
|
11
11
|
pnpm add @dani-builder/strapi-client
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
ESM-only (`"type": "module"`).
|
|
14
|
+
Existing client entries are ESM-only (`"type": "module"`). The server-only
|
|
15
|
+
`/preview` entry supports ESM and CommonJS, with no Strapi runtime or peers.
|
|
15
16
|
|
|
16
17
|
## Usage
|
|
17
18
|
|
|
@@ -35,16 +36,37 @@ const draft = await getPageBySlug(strapi, "about", { status: "draft" });
|
|
|
35
36
|
|
|
36
37
|
## Sub-exports
|
|
37
38
|
|
|
38
|
-
| Import
|
|
39
|
-
|
|
40
|
-
| `@dani-builder/strapi-client/types`
|
|
41
|
-
| `@dani-builder/strapi-client/client`
|
|
42
|
-
| `@dani-builder/strapi-client/api`
|
|
43
|
-
| `@dani-builder/strapi-client/populate` | 15 block populate builders
|
|
44
|
-
| `@dani-builder/strapi-client/utils`
|
|
39
|
+
| Import | Contents |
|
|
40
|
+
| -------------------------------------- | ------------------------------------------------------------------------------------ |
|
|
41
|
+
| `@dani-builder/strapi-client/types` | Hand-curated content-type & block types |
|
|
42
|
+
| `@dani-builder/strapi-client/client` | `createStrapiClient` |
|
|
43
|
+
| `@dani-builder/strapi-client/api` | 19 API functions |
|
|
44
|
+
| `@dani-builder/strapi-client/populate` | 15 block populate builders |
|
|
45
|
+
| `@dani-builder/strapi-client/utils` | Media URL helpers |
|
|
46
|
+
| `@dani-builder/strapi-client/preview` | Node.js server-only `verifyPreviewToken`, `isSafePreviewPath`, `PREVIEW_TTL_SECONDS` |
|
|
45
47
|
|
|
46
48
|
See [`docs/block-reference.md`](./docs/block-reference.md) for the full block schema.
|
|
47
49
|
|
|
48
50
|
## License
|
|
49
51
|
|
|
50
52
|
MIT © HJ-company
|
|
53
|
+
|
|
54
|
+
Preview verification requires client 0.12.0 or later. Import it only in Node.js
|
|
55
|
+
server code and keep `PREVIEW_SECRET` private. The shared verifier binds the signed
|
|
56
|
+
path and draft/published status and rejects tokens at expiry (300 seconds).
|
|
57
|
+
The existing plugin `/preview` verifier remains compatible.
|
|
58
|
+
|
|
59
|
+
## Agent browser client
|
|
60
|
+
|
|
61
|
+
`createAgentClient({ baseUrl, apiPrefix?, fetch? })` is exported from the package
|
|
62
|
+
root. It provides `session()` issuance, `session(credentials)` restoration,
|
|
63
|
+
`history(credentials)`, `chat(credentials, request, { onEvent? })` and
|
|
64
|
+
`cancel(credentials, requestId)`. A chat handle exposes its stable `requestId`,
|
|
65
|
+
`result` promise and `cancel()` immediately. Streaming events use the shared
|
|
66
|
+
`@dani-builder/agent-contract` parser. Keep the issued token with the session ID
|
|
67
|
+
in caller-owned storage and handle both result and cancellation rejections. Tokens
|
|
68
|
+
are sent only in Bearer headers; cookies are omitted. Existing Axios APIs continue
|
|
69
|
+
to work independently.
|
|
70
|
+
|
|
71
|
+
See [Agent sessions and conversation context](../../docs/guides/agent-conversation-context.md)
|
|
72
|
+
for browser usage, error/cancellation behavior, retries and the CMS origin allowlist.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ChatDoneEventData, ChatEvent, ChatRequest, ConversationRestoreResponse, SessionResponse } from "@dani-builder/agent-contract";
|
|
2
|
+
export interface AgentClientConfig {
|
|
3
|
+
/** CMS origin, or empty for same-origin requests. */
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
/** Strapi REST prefix; defaults to /api. */
|
|
6
|
+
apiPrefix?: string;
|
|
7
|
+
fetch?: typeof globalThis.fetch;
|
|
8
|
+
}
|
|
9
|
+
export interface AgentSessionCredentials {
|
|
10
|
+
sessionId: string;
|
|
11
|
+
token: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AgentRestoreOptions extends AgentSessionCredentials {
|
|
14
|
+
agentId?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface AgentChatOptions {
|
|
17
|
+
onEvent?: (event: ChatEvent) => void;
|
|
18
|
+
}
|
|
19
|
+
export interface AgentTurn {
|
|
20
|
+
requestId: string;
|
|
21
|
+
result: Promise<ChatDoneEventData>;
|
|
22
|
+
/** Stops local delivery immediately and independently requests server cancellation. */
|
|
23
|
+
cancel(): Promise<{
|
|
24
|
+
cancelled: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
export declare class AgentClientError extends Error {
|
|
28
|
+
readonly code: string;
|
|
29
|
+
readonly status?: number | undefined;
|
|
30
|
+
constructor(code: string, status?: number | undefined);
|
|
31
|
+
}
|
|
32
|
+
export declare function createAgentClient(config: AgentClientConfig): {
|
|
33
|
+
session: {
|
|
34
|
+
(): Promise<SessionResponse>;
|
|
35
|
+
(options: AgentRestoreOptions): Promise<ConversationRestoreResponse>;
|
|
36
|
+
};
|
|
37
|
+
chat: (credentials: AgentSessionCredentials, input: Omit<ChatRequest, "sessionId">, options?: AgentChatOptions) => AgentTurn;
|
|
38
|
+
history: (options: AgentRestoreOptions) => Promise<import("@dani-builder/agent-contract").ConversationHistoryMessage[]>;
|
|
39
|
+
cancel: (credentials: AgentSessionCredentials, requestId: string) => Promise<{
|
|
40
|
+
cancelled: boolean;
|
|
41
|
+
}>;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=create-agent-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-agent-client.d.ts","sourceRoot":"","sources":["../../src/agent/create-agent-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,2BAA2B,EAC3B,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AACD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACtC;AACD,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnC,uFAAuF;IACvF,MAAM,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC3C;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aAEvB,IAAI,EAAE,MAAM;aACZ,MAAM,CAAC,EAAE,MAAM;gBADf,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,YAAA;CAKlC;AAmED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB;;YA8B/B,OAAO,CAAC,eAAe,CAAC;kBAEvC,mBAAmB,GAC3B,OAAO,CAAC,2BAA2B,CAAC;;wBAyBxB,uBAAuB,SAC7B,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,YAC5B,gBAAgB,KACxB,SAAS;uBAmCoB,mBAAmB;0BAlDpC,uBAAuB,aACzB,MAAM,KAChB,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;EAoDnC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { parseSseEvent } from "@dani-builder/agent-contract";
|
|
2
|
+
export class AgentClientError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
status;
|
|
5
|
+
constructor(code, status) {
|
|
6
|
+
super(`Agent request failed: ${code}`);
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.name = "AgentClientError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
// Frame transport here; shared contract owns event validation and normalization.
|
|
13
|
+
async function readEvents(response, signal, onEvent) {
|
|
14
|
+
if (!response.body)
|
|
15
|
+
throw new AgentClientError("missing_stream");
|
|
16
|
+
const reader = response.body.getReader();
|
|
17
|
+
const decoder = new TextDecoder();
|
|
18
|
+
let buffer = "";
|
|
19
|
+
let name = "";
|
|
20
|
+
let data = [];
|
|
21
|
+
const abort = () => {
|
|
22
|
+
void reader.cancel().catch(() => undefined);
|
|
23
|
+
};
|
|
24
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
25
|
+
try {
|
|
26
|
+
for (;;) {
|
|
27
|
+
if (signal.aborted)
|
|
28
|
+
throw new AgentClientError("cancelled");
|
|
29
|
+
const chunk = await reader.read();
|
|
30
|
+
if (signal.aborted)
|
|
31
|
+
throw new AgentClientError("cancelled");
|
|
32
|
+
buffer += decoder.decode(chunk.value, { stream: !chunk.done });
|
|
33
|
+
for (;;) {
|
|
34
|
+
const match = /\r\n|\r|\n/.exec(buffer);
|
|
35
|
+
if (!match)
|
|
36
|
+
break;
|
|
37
|
+
// A CR at a chunk boundary may be the first half of CRLF.
|
|
38
|
+
if (match[0] === "\r" &&
|
|
39
|
+
match.index === buffer.length - 1 &&
|
|
40
|
+
!chunk.done)
|
|
41
|
+
break;
|
|
42
|
+
const line = buffer.slice(0, match.index);
|
|
43
|
+
buffer = buffer.slice(match.index + match[0].length);
|
|
44
|
+
if (line === "") {
|
|
45
|
+
const event = data.length
|
|
46
|
+
? parseSseEvent(name, data.join("\n"))
|
|
47
|
+
: null;
|
|
48
|
+
name = "";
|
|
49
|
+
data = [];
|
|
50
|
+
if (!event)
|
|
51
|
+
continue;
|
|
52
|
+
if (signal.aborted)
|
|
53
|
+
throw new AgentClientError("cancelled");
|
|
54
|
+
onEvent?.(event);
|
|
55
|
+
if (signal.aborted)
|
|
56
|
+
throw new AgentClientError("cancelled");
|
|
57
|
+
if (event.event === "done")
|
|
58
|
+
return event.data;
|
|
59
|
+
if (event.event === "error")
|
|
60
|
+
throw new AgentClientError(event.data.code || "stream_error");
|
|
61
|
+
}
|
|
62
|
+
else if (!line.startsWith(":")) {
|
|
63
|
+
const colon = line.indexOf(":");
|
|
64
|
+
const field = colon < 0 ? line : line.slice(0, colon);
|
|
65
|
+
const value = colon < 0 ? "" : line.slice(colon + 1).replace(/^ /, "");
|
|
66
|
+
if (field === "event")
|
|
67
|
+
name = value;
|
|
68
|
+
if (field === "data")
|
|
69
|
+
data.push(value);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (chunk.done)
|
|
73
|
+
throw new AgentClientError("incomplete_stream");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
signal.removeEventListener("abort", abort);
|
|
78
|
+
await reader.cancel().catch(() => undefined);
|
|
79
|
+
reader.releaseLock();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function createAgentClient(config) {
|
|
83
|
+
const fetcher = config.fetch ?? globalThis.fetch.bind(globalThis);
|
|
84
|
+
const endpoint = `${config.baseUrl.replace(/\/$/, "")}${config.apiPrefix ?? "/api"}/agent`;
|
|
85
|
+
async function request(path, token, init = {}) {
|
|
86
|
+
const response = await fetcher(`${endpoint}${path}`, {
|
|
87
|
+
...init,
|
|
88
|
+
credentials: "omit",
|
|
89
|
+
headers: {
|
|
90
|
+
...(init.body ? { "Content-Type": "application/json" } : {}),
|
|
91
|
+
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
let code = "http_error";
|
|
96
|
+
try {
|
|
97
|
+
const body = await response.json();
|
|
98
|
+
if (body &&
|
|
99
|
+
typeof body === "object" &&
|
|
100
|
+
"error" in body &&
|
|
101
|
+
typeof body.error === "string")
|
|
102
|
+
code = body.error;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
/* Non-JSON error responses retain their HTTP status. */
|
|
106
|
+
}
|
|
107
|
+
throw new AgentClientError(code, response.status);
|
|
108
|
+
}
|
|
109
|
+
return response;
|
|
110
|
+
}
|
|
111
|
+
async function session(options) {
|
|
112
|
+
if (!options)
|
|
113
|
+
return (await request("/session", undefined, { method: "POST", body: "{}" })).json();
|
|
114
|
+
const query = new URLSearchParams({ sessionId: options.sessionId });
|
|
115
|
+
if (options.agentId)
|
|
116
|
+
query.set("agentId", options.agentId);
|
|
117
|
+
return (await request(`/session?${query}`, options.token)).json();
|
|
118
|
+
}
|
|
119
|
+
async function cancel(credentials, requestId) {
|
|
120
|
+
return (await request("/cancel", credentials.token, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
body: JSON.stringify({ sessionId: credentials.sessionId, requestId }),
|
|
123
|
+
signal: new AbortController().signal,
|
|
124
|
+
})).json();
|
|
125
|
+
}
|
|
126
|
+
function chat(credentials, input, options = {}) {
|
|
127
|
+
const requestId = input.requestId ?? globalThis.crypto.randomUUID();
|
|
128
|
+
const controller = new AbortController();
|
|
129
|
+
let cancellation;
|
|
130
|
+
const result = (async () => {
|
|
131
|
+
try {
|
|
132
|
+
const response = await request("/chat", credentials.token, {
|
|
133
|
+
method: "POST",
|
|
134
|
+
body: JSON.stringify({
|
|
135
|
+
...input,
|
|
136
|
+
sessionId: credentials.sessionId,
|
|
137
|
+
requestId,
|
|
138
|
+
}),
|
|
139
|
+
signal: controller.signal,
|
|
140
|
+
});
|
|
141
|
+
if (controller.signal.aborted) {
|
|
142
|
+
await response.body?.cancel().catch(() => undefined);
|
|
143
|
+
throw new AgentClientError("cancelled");
|
|
144
|
+
}
|
|
145
|
+
return await readEvents(response, controller.signal, options.onEvent);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (controller.signal.aborted)
|
|
149
|
+
throw new AgentClientError("cancelled");
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
})();
|
|
153
|
+
return {
|
|
154
|
+
requestId,
|
|
155
|
+
result,
|
|
156
|
+
cancel() {
|
|
157
|
+
controller.abort();
|
|
158
|
+
cancellation ??= cancel(credentials, requestId);
|
|
159
|
+
return cancellation;
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
async function history(options) {
|
|
164
|
+
return (await session(options)).messages;
|
|
165
|
+
}
|
|
166
|
+
return { session, chat, history, cancel };
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=create-agent-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-agent-client.js","sourceRoot":"","sources":["../../src/agent/create-agent-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,4 +5,6 @@ export { coreBlockPopulates, seoPopulate, footerPopulate, getPagePopulate, getPa
|
|
|
5
5
|
export { getPage, getPageBySlug, listPages, listPagesRest, getArticle, getArticleBySlug, listArticles, getGlobal, getGlobalRest, getNavigation, getSiteSettings, listFaqs, listCategories, listTags, listAuthors, getAuthorBySlug, listSeries, getSeriesBySlug, postInquiry, } from "./api/index.js";
|
|
6
6
|
export type { PageQueryOptions, PageListOptions, ArticleQueryOptions, ArticleListOptions, GlobalQueryOptions, NavigationQueryOptions, FaqListOptions, CategoryListOptions, TagListOptions, AuthorListOptions, SeriesListOptions, } from "./api/index.js";
|
|
7
7
|
export { getMediaUrl, getAssetUrl } from "./utils/index.js";
|
|
8
|
+
export { createAgentClient, AgentClientError, } from "./agent/create-agent-client.js";
|
|
9
|
+
export type { AgentClientConfig, AgentSessionCredentials, AgentRestoreOptions, AgentChatOptions, AgentTurn, } from "./agent/create-agent-client.js";
|
|
8
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,IAAI,EACJ,eAAe,EACf,GAAG,EACH,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,eAAe,EACf,GAAG,EACH,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,GAAG,EACH,WAAW,EACX,MAAM,EACN,cAAc,EACd,MAAM,EACN,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,IAAI,EACJ,eAAe,EACf,GAAG,EACH,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,MAAM,EACN,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,OAAO,EACP,eAAe,EACf,GAAG,EACH,WAAW,EACX,OAAO,EACP,eAAe,EACf,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,GAAG,EACH,WAAW,EACX,MAAM,EACN,cAAc,EACd,MAAM,EACN,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,cAAc,EACd,YAAY,EACZ,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,GACV,MAAM,gCAAgC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,4 +7,5 @@ export { coreBlockPopulates, seoPopulate, footerPopulate, getPagePopulate, getPa
|
|
|
7
7
|
export { getPage, getPageBySlug, listPages, listPagesRest, getArticle, getArticleBySlug, listArticles, getGlobal, getGlobalRest, getNavigation, getSiteSettings, listFaqs, listCategories, listTags, listAuthors, getAuthorBySlug, listSeries, getSeriesBySlug, postInquiry, } from "./api/index.js";
|
|
8
8
|
// Utils
|
|
9
9
|
export { getMediaUrl, getAssetUrl } from "./utils/index.js";
|
|
10
|
+
export { createAgentClient, AgentClientError, } from "./agent/create-agent-client.js";
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAoF1D,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,WAAW;AACX,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM;AACN,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAexB,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAoF1D,SAAS;AACT,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,WAAW;AACX,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,MAAM;AACN,OAAO,EACL,OAAO,EACP,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,EACb,eAAe,EACf,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,eAAe,EACf,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAC;AAexB,QAAQ;AACR,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,gCAAgC,CAAC"}
|
package/dist/preview.cjs
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PREVIEW_TTL_SECONDS = void 0;
|
|
4
|
+
exports.isSafePreviewPath = isSafePreviewPath;
|
|
5
|
+
exports.verifyPreviewToken = verifyPreviewToken;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
exports.PREVIEW_TTL_SECONDS = 300;
|
|
8
|
+
function isSafePreviewPath(path) {
|
|
9
|
+
return (path.startsWith("/") &&
|
|
10
|
+
!path.startsWith("//") &&
|
|
11
|
+
!/[\\#]/.test(path) &&
|
|
12
|
+
!Array.from(path).some((character) => character.charCodeAt(0) <= 32) &&
|
|
13
|
+
!/%(?:2f|5c|0[0-9a-f]|1[0-9a-f]|20)/i.test(path));
|
|
14
|
+
}
|
|
15
|
+
/** Verify the server-only shared key and bind both redirect and draft status. */
|
|
16
|
+
function verifyPreviewToken(token, path, status, secret = process.env.PREVIEW_SECRET, now = Date.now()) {
|
|
17
|
+
if (!secret ||
|
|
18
|
+
!token ||
|
|
19
|
+
!path ||
|
|
20
|
+
!["draft", "published"].includes(status ?? ""))
|
|
21
|
+
return false;
|
|
22
|
+
if (!isSafePreviewPath(path))
|
|
23
|
+
return false;
|
|
24
|
+
const parts = token.split(".");
|
|
25
|
+
const payload = parts[0];
|
|
26
|
+
const signature = parts[1];
|
|
27
|
+
if (parts.length !== 2 ||
|
|
28
|
+
!payload ||
|
|
29
|
+
!signature ||
|
|
30
|
+
!/^[A-Za-z0-9_-]+$/.test(payload) ||
|
|
31
|
+
!/^[A-Za-z0-9_-]{43}$/.test(signature))
|
|
32
|
+
return false;
|
|
33
|
+
const expected = (0, node_crypto_1.createHmac)("sha256", secret).update(payload).digest();
|
|
34
|
+
const provided = Buffer.from(signature, "base64url");
|
|
35
|
+
if (provided.length !== expected.length ||
|
|
36
|
+
!(0, node_crypto_1.timingSafeEqual)(provided, expected))
|
|
37
|
+
return false;
|
|
38
|
+
try {
|
|
39
|
+
const claims = JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
|
|
40
|
+
if (typeof claims !== "object" || claims === null)
|
|
41
|
+
return false;
|
|
42
|
+
const value = claims;
|
|
43
|
+
const seconds = Math.floor(now / 1000);
|
|
44
|
+
return (value.path === path &&
|
|
45
|
+
value.status === status &&
|
|
46
|
+
typeof value.exp === "number" &&
|
|
47
|
+
Number.isInteger(value.exp) &&
|
|
48
|
+
value.exp > seconds &&
|
|
49
|
+
value.exp <= seconds + exports.PREVIEW_TTL_SECONDS);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=preview.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.cjs","sourceRoot":"","sources":["../src/preview.cts"],"names":[],"mappings":";;;AAIA,8CAQC;AAGD,gDAmDC;AAlED,6CAA0D;AAE7C,QAAA,mBAAmB,GAAG,GAAG,CAAC;AAEvC,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACtB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpE,CAAC,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjD,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAgB,kBAAkB,CAChC,KAAoB,EACpB,IAAmB,EACnB,MAAqB,EACrB,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EACnC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAEhB,IACE,CAAC,MAAM;QACP,CAAC,KAAK;QACN,CAAC,IAAI;QACL,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QAE9C,OAAO,KAAK,CAAC;IACf,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,OAAO;QACR,CAAC,SAAS;QACV,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;QAEtC,OAAO,KAAK,CAAC;IACf,MAAM,QAAQ,GAAG,IAAA,wBAAU,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,IACE,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;QACnC,CAAC,IAAA,6BAAe,EAAC,QAAQ,EAAE,QAAQ,CAAC;QAEpC,OAAO,KAAK,CAAC;IACf,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAChC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CACnD,CAAC;QACF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChE,MAAM,KAAK,GAAG,MAAiC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,IAAI;YACnB,KAAK,CAAC,MAAM,KAAK,MAAM;YACvB,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;YAC7B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3B,KAAK,CAAC,GAAG,GAAG,OAAO;YACnB,KAAK,CAAC,GAAG,IAAI,OAAO,GAAG,2BAAmB,CAC3C,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const PREVIEW_TTL_SECONDS = 300;
|
|
2
|
+
export declare function isSafePreviewPath(path: string): boolean;
|
|
3
|
+
/** Verify the server-only shared key and bind both redirect and draft status. */
|
|
4
|
+
export declare function verifyPreviewToken(token: string | null, path: string | null, status: string | null, secret?: string | undefined, now?: number): boolean;
|
|
5
|
+
//# sourceMappingURL=preview.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.cts","sourceRoot":"","sources":["../src/preview.cts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQvD;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,qBAA6B,EACnC,GAAG,SAAa,GACf,OAAO,CA6CT"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dani-builder/strapi-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "TypeScript client for Daniworks Builder CMS (Strapi v5)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -28,6 +28,18 @@
|
|
|
28
28
|
"./utils": {
|
|
29
29
|
"types": "./dist/utils/index.d.ts",
|
|
30
30
|
"import": "./dist/utils/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./preview": {
|
|
33
|
+
"types": "./dist/preview.d.cts",
|
|
34
|
+
"import": "./dist/preview.cjs",
|
|
35
|
+
"require": "./dist/preview.cjs"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"typesVersions": {
|
|
39
|
+
"*": {
|
|
40
|
+
"preview": [
|
|
41
|
+
"dist/preview.d.cts"
|
|
42
|
+
]
|
|
31
43
|
}
|
|
32
44
|
},
|
|
33
45
|
"files": [
|
|
@@ -47,12 +59,15 @@
|
|
|
47
59
|
},
|
|
48
60
|
"dependencies": {
|
|
49
61
|
"axios": "^1.19.0",
|
|
50
|
-
"qs": "^6.15.3"
|
|
62
|
+
"qs": "^6.15.3",
|
|
63
|
+
"@dani-builder/agent-contract": ">=0.5.0 <1"
|
|
51
64
|
},
|
|
52
65
|
"devDependencies": {
|
|
53
66
|
"@types/qs": "^6.15.1",
|
|
54
67
|
"eslint": "^10.8.1",
|
|
55
68
|
"typescript": "^6.0.3",
|
|
69
|
+
"@types/node": "^26",
|
|
70
|
+
"@dani-builder/agent-contract-build": "npm:@dani-builder/agent-contract@0.5.0",
|
|
56
71
|
"@repo/eslint-config": "0.0.0",
|
|
57
72
|
"@repo/typescript-config": "0.0.0"
|
|
58
73
|
},
|