@codelockpro/sdk 0.1.11 → 0.1.13
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/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/modules/community.d.ts +83 -0
- package/dist/modules/community.d.ts.map +1 -0
- package/dist/modules/community.js +98 -0
- package/dist/modules/community.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +2 -0
- package/src/modules/community.ts +218 -0
package/dist/index.d.ts
CHANGED
|
@@ -97,7 +97,9 @@ export declare class CodeLockProApiError extends Error {
|
|
|
97
97
|
}
|
|
98
98
|
export type { EventBus, EventHandler } from "./core/events.js";
|
|
99
99
|
export type { ModuleContext, ModuleFactory } from "./core/module.js";
|
|
100
|
+
export type { CommunityModule, CommunityPost, CommunityThread } from "./modules/community.js";
|
|
100
101
|
export type { KnowledgeBaseModule, KbArticle, KbCategory, KbListOptions, } from "./modules/kb.js";
|
|
102
|
+
export { createCommunityModule } from "./modules/community.js";
|
|
101
103
|
export { createKbModule };
|
|
102
104
|
export default CodeLockPro;
|
|
103
105
|
//# 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAA4B,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAiB,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IACjC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,WAAW;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;gBAE/B,MAAM,EAAE,iBAAiB;IA2BrC;;;;OAIG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;IAUvD,sDAAsD;IACtD,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;IAIpC,kDAAkD;IAClD,WAAW,IAAI,MAAM,EAAE;IAIvB,0EAA0E;IAC1E,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAIpE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAI/D,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI;IAInD;;;;;OAKG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED;6EACyE;IACnE,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;CAiB7E;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC1B,MAAM,EAAE,MAAM;IAA6B,IAAI,EAAE,MAAM;gBAAvD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM;CAI1E;AAED,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,YAAY,EACX,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,aAAa,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,eAAe,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAA4B,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAiB,aAAa,EAAkB,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IACjC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1D,gEAAgE;IAChE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,qBAAa,WAAW;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;gBAE/B,MAAM,EAAE,iBAAiB;IA2BrC;;;;OAIG;IACH,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;IAUvD,sDAAsD;IACtD,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;IAIpC,kDAAkD;IAClD,WAAW,IAAI,MAAM,EAAE;IAIvB,0EAA0E;IAC1E,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAIpE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAI/D,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI;IAInD;;;;;OAKG;IACH,IAAI,EAAE,IAAI,mBAAmB,CAE5B;IAED;6EACyE;IACnE,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;CAiB7E;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC1B,MAAM,EAAE,MAAM;IAA6B,IAAI,EAAE,MAAM;gBAAvD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM;CAI1E;AAED,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9F,YAAY,EACX,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,aAAa,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,eAAe,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -121,6 +121,7 @@ export class CodeLockProApiError extends Error {
|
|
|
121
121
|
this.name = "CodeLockProApiError";
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
|
+
export { createCommunityModule } from "./modules/community.js";
|
|
124
125
|
export { createKbModule };
|
|
125
126
|
export default CodeLockPro;
|
|
126
127
|
//# 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":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Community forum module for the CodeLockPro SDK.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the developer's server-side proxy for forum/community endpoints.
|
|
5
|
+
* Like every SDK module, this talks to the developer's backend URL from
|
|
6
|
+
* ``CodeLockProConfig.baseUrl`` — never directly to the upstream
|
|
7
|
+
* CodeLockPro API.
|
|
8
|
+
*/
|
|
9
|
+
import type { ModuleFactory } from "../core/module.js";
|
|
10
|
+
export interface CommunityThread {
|
|
11
|
+
id: string;
|
|
12
|
+
application_id: string;
|
|
13
|
+
customer_id: string;
|
|
14
|
+
title: string;
|
|
15
|
+
body: string;
|
|
16
|
+
is_flagged: boolean;
|
|
17
|
+
flag_reason: string | null;
|
|
18
|
+
flagged_at: string | null;
|
|
19
|
+
created_at: string | null;
|
|
20
|
+
updated_at: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface CommunityPost {
|
|
23
|
+
id: string;
|
|
24
|
+
thread_id: string;
|
|
25
|
+
application_id: string;
|
|
26
|
+
customer_id: string;
|
|
27
|
+
body: string;
|
|
28
|
+
is_flagged: boolean;
|
|
29
|
+
flag_reason: string | null;
|
|
30
|
+
flagged_at: string | null;
|
|
31
|
+
created_at: string | null;
|
|
32
|
+
updated_at: string | null;
|
|
33
|
+
}
|
|
34
|
+
export interface CommunityListOptions {
|
|
35
|
+
skip?: number;
|
|
36
|
+
limit?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface CommunityThreadCreateInput {
|
|
39
|
+
title: string;
|
|
40
|
+
body: string;
|
|
41
|
+
}
|
|
42
|
+
export interface CommunityPostCreateInput {
|
|
43
|
+
body: string;
|
|
44
|
+
}
|
|
45
|
+
export interface CommunityFlagInput {
|
|
46
|
+
reason?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface CommunityThreadCreatedPayload {
|
|
49
|
+
thread: CommunityThread;
|
|
50
|
+
}
|
|
51
|
+
export interface CommunityPostCreatedPayload {
|
|
52
|
+
post: CommunityPost;
|
|
53
|
+
}
|
|
54
|
+
export interface CommunityThreadFlaggedPayload {
|
|
55
|
+
thread: CommunityThread;
|
|
56
|
+
}
|
|
57
|
+
export interface CommunityPostFlaggedPayload {
|
|
58
|
+
post: CommunityPost;
|
|
59
|
+
}
|
|
60
|
+
export interface CommunityModule {
|
|
61
|
+
getThreads(opts?: CommunityListOptions): Promise<{
|
|
62
|
+
page_count: number;
|
|
63
|
+
items: CommunityThread[];
|
|
64
|
+
}>;
|
|
65
|
+
getPosts(threadId: string, opts?: CommunityListOptions): Promise<{
|
|
66
|
+
page_count: number;
|
|
67
|
+
items: CommunityPost[];
|
|
68
|
+
}>;
|
|
69
|
+
createThread(input: CommunityThreadCreateInput): Promise<CommunityThread>;
|
|
70
|
+
createPost(threadId: string, input: CommunityPostCreateInput): Promise<CommunityPost>;
|
|
71
|
+
flagThread(threadId: string, input?: CommunityFlagInput): Promise<CommunityThread>;
|
|
72
|
+
flagPost(postId: string, input?: CommunityFlagInput): Promise<CommunityPost>;
|
|
73
|
+
/** Subscribe to an event scoped to this module (``community.<event>``). */
|
|
74
|
+
on<T = unknown>(event: string, handler: (payload: T) => void): () => void;
|
|
75
|
+
off<T = unknown>(event: string, handler: (payload: T) => void): void;
|
|
76
|
+
}
|
|
77
|
+
export interface CommunityModuleOptions {
|
|
78
|
+
/** Override the proxy mount-point (default: ``/community``). */
|
|
79
|
+
basePath?: string;
|
|
80
|
+
}
|
|
81
|
+
export declare const createCommunityModule: ModuleFactory<CommunityModule>;
|
|
82
|
+
export declare function createCommunityModuleWith(options: CommunityModuleOptions): ModuleFactory<CommunityModule>;
|
|
83
|
+
//# sourceMappingURL=community.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community.d.ts","sourceRoot":"","sources":["../../src/modules/community.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
function _qs(params) {
|
|
2
|
+
const usp = new URLSearchParams();
|
|
3
|
+
for (const [k, v] of Object.entries(params)) {
|
|
4
|
+
if (v === undefined || v === null || v === "")
|
|
5
|
+
continue;
|
|
6
|
+
usp.set(k, String(v));
|
|
7
|
+
}
|
|
8
|
+
const s = usp.toString();
|
|
9
|
+
return s ? `?${s}` : "";
|
|
10
|
+
}
|
|
11
|
+
export const createCommunityModule = (ctx) => {
|
|
12
|
+
return _create(ctx, {});
|
|
13
|
+
};
|
|
14
|
+
export function createCommunityModuleWith(options) {
|
|
15
|
+
return (ctx) => _create(ctx, options);
|
|
16
|
+
}
|
|
17
|
+
function _create(ctx, options) {
|
|
18
|
+
const base = (options.basePath ?? "/community").replace(/\/+$/, "");
|
|
19
|
+
const ns = ctx.name; // "community" by convention; whatever the host registered as.
|
|
20
|
+
function _ev(name) {
|
|
21
|
+
return `${ns}.${name}`;
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
async getThreads(opts = {}) {
|
|
25
|
+
return ctx.request(`${base}/threads${_qs({ skip: opts.skip, limit: opts.limit })}`);
|
|
26
|
+
},
|
|
27
|
+
async getPosts(threadId, opts = {}) {
|
|
28
|
+
if (typeof threadId !== "string" || threadId.length === 0) {
|
|
29
|
+
return Promise.reject(new Error("getPosts: threadId required"));
|
|
30
|
+
}
|
|
31
|
+
return ctx.request(`${base}/threads/${encodeURIComponent(threadId)}/posts${_qs({
|
|
32
|
+
skip: opts.skip,
|
|
33
|
+
limit: opts.limit,
|
|
34
|
+
})}`);
|
|
35
|
+
},
|
|
36
|
+
async createThread(input) {
|
|
37
|
+
const title = String(input?.title ?? "").trim();
|
|
38
|
+
const body = String(input?.body ?? "").trim();
|
|
39
|
+
if (!title)
|
|
40
|
+
throw new Error("createThread: title required");
|
|
41
|
+
if (!body)
|
|
42
|
+
throw new Error("createThread: body required");
|
|
43
|
+
const thread = await ctx.request(`${base}/threads`, {
|
|
44
|
+
method: "POST",
|
|
45
|
+
headers: { "Content-Type": "application/json" },
|
|
46
|
+
body: JSON.stringify({ title, body }),
|
|
47
|
+
});
|
|
48
|
+
ctx.bus.emit(_ev("thread.created"), { thread });
|
|
49
|
+
return thread;
|
|
50
|
+
},
|
|
51
|
+
async createPost(threadId, input) {
|
|
52
|
+
if (typeof threadId !== "string" || threadId.length === 0) {
|
|
53
|
+
throw new Error("createPost: threadId required");
|
|
54
|
+
}
|
|
55
|
+
const body = String(input?.body ?? "").trim();
|
|
56
|
+
if (!body)
|
|
57
|
+
throw new Error("createPost: body required");
|
|
58
|
+
const post = await ctx.request(`${base}/threads/${encodeURIComponent(threadId)}/posts`, {
|
|
59
|
+
method: "POST",
|
|
60
|
+
headers: { "Content-Type": "application/json" },
|
|
61
|
+
body: JSON.stringify({ body }),
|
|
62
|
+
});
|
|
63
|
+
ctx.bus.emit(_ev("post.created"), { post });
|
|
64
|
+
return post;
|
|
65
|
+
},
|
|
66
|
+
async flagThread(threadId, input = {}) {
|
|
67
|
+
if (typeof threadId !== "string" || threadId.length === 0) {
|
|
68
|
+
throw new Error("flagThread: threadId required");
|
|
69
|
+
}
|
|
70
|
+
const thread = await ctx.request(`${base}/threads/${encodeURIComponent(threadId)}/flag`, {
|
|
71
|
+
method: "POST",
|
|
72
|
+
headers: { "Content-Type": "application/json" },
|
|
73
|
+
body: JSON.stringify({ reason: input.reason }),
|
|
74
|
+
});
|
|
75
|
+
ctx.bus.emit(_ev("thread.flagged"), { thread });
|
|
76
|
+
return thread;
|
|
77
|
+
},
|
|
78
|
+
async flagPost(postId, input = {}) {
|
|
79
|
+
if (typeof postId !== "string" || postId.length === 0) {
|
|
80
|
+
throw new Error("flagPost: postId required");
|
|
81
|
+
}
|
|
82
|
+
const post = await ctx.request(`${base}/posts/${encodeURIComponent(postId)}/flag`, {
|
|
83
|
+
method: "POST",
|
|
84
|
+
headers: { "Content-Type": "application/json" },
|
|
85
|
+
body: JSON.stringify({ reason: input.reason }),
|
|
86
|
+
});
|
|
87
|
+
ctx.bus.emit(_ev("post.flagged"), { post });
|
|
88
|
+
return post;
|
|
89
|
+
},
|
|
90
|
+
on(event, handler) {
|
|
91
|
+
return ctx.bus.on(_ev(event), handler);
|
|
92
|
+
},
|
|
93
|
+
off(event, handler) {
|
|
94
|
+
ctx.bus.off(_ev(event), handler);
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=community.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../src/modules/community.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codelockpro/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "Framework-agnostic, modular client SDK for CodeLockPro. Module one: Knowledge base. Configured with the developer's own base URL — never communicates directly with the CodeLockPro API.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://github.com/mbos01/codelockpro/tree/main/sdk/js#readme",
|
package/src/index.ts
CHANGED
|
@@ -172,11 +172,13 @@ export class CodeLockProApiError extends Error {
|
|
|
172
172
|
|
|
173
173
|
export type { EventBus, EventHandler } from "./core/events.js";
|
|
174
174
|
export type { ModuleContext, ModuleFactory } from "./core/module.js";
|
|
175
|
+
export type { CommunityModule, CommunityPost, CommunityThread } from "./modules/community.js";
|
|
175
176
|
export type {
|
|
176
177
|
KnowledgeBaseModule,
|
|
177
178
|
KbArticle,
|
|
178
179
|
KbCategory,
|
|
179
180
|
KbListOptions,
|
|
180
181
|
} from "./modules/kb.js";
|
|
182
|
+
export { createCommunityModule } from "./modules/community.js";
|
|
181
183
|
export { createKbModule };
|
|
182
184
|
export default CodeLockPro;
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Community forum module for the CodeLockPro SDK.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the developer's server-side proxy for forum/community endpoints.
|
|
5
|
+
* Like every SDK module, this talks to the developer's backend URL from
|
|
6
|
+
* ``CodeLockProConfig.baseUrl`` — never directly to the upstream
|
|
7
|
+
* CodeLockPro API.
|
|
8
|
+
*/
|
|
9
|
+
import type { ModuleContext, ModuleFactory } from "../core/module.js";
|
|
10
|
+
|
|
11
|
+
export interface CommunityThread {
|
|
12
|
+
id: string;
|
|
13
|
+
application_id: string;
|
|
14
|
+
customer_id: string;
|
|
15
|
+
title: string;
|
|
16
|
+
body: string;
|
|
17
|
+
is_flagged: boolean;
|
|
18
|
+
flag_reason: string | null;
|
|
19
|
+
flagged_at: string | null;
|
|
20
|
+
created_at: string | null;
|
|
21
|
+
updated_at: string | null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface CommunityPost {
|
|
25
|
+
id: string;
|
|
26
|
+
thread_id: string;
|
|
27
|
+
application_id: string;
|
|
28
|
+
customer_id: string;
|
|
29
|
+
body: string;
|
|
30
|
+
is_flagged: boolean;
|
|
31
|
+
flag_reason: string | null;
|
|
32
|
+
flagged_at: string | null;
|
|
33
|
+
created_at: string | null;
|
|
34
|
+
updated_at: string | null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface CommunityListOptions {
|
|
38
|
+
skip?: number;
|
|
39
|
+
limit?: number;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface CommunityThreadCreateInput {
|
|
43
|
+
title: string;
|
|
44
|
+
body: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface CommunityPostCreateInput {
|
|
48
|
+
body: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface CommunityFlagInput {
|
|
52
|
+
reason?: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface CommunityThreadCreatedPayload {
|
|
56
|
+
thread: CommunityThread;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface CommunityPostCreatedPayload {
|
|
60
|
+
post: CommunityPost;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface CommunityThreadFlaggedPayload {
|
|
64
|
+
thread: CommunityThread;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export interface CommunityPostFlaggedPayload {
|
|
68
|
+
post: CommunityPost;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface CommunityModule {
|
|
72
|
+
// --- data accessors ----------------------------------------------------
|
|
73
|
+
getThreads(
|
|
74
|
+
opts?: CommunityListOptions,
|
|
75
|
+
): Promise<{ page_count: number; items: CommunityThread[] }>;
|
|
76
|
+
getPosts(
|
|
77
|
+
threadId: string,
|
|
78
|
+
opts?: CommunityListOptions,
|
|
79
|
+
): Promise<{ page_count: number; items: CommunityPost[] }>;
|
|
80
|
+
|
|
81
|
+
// --- actions -----------------------------------------------------------
|
|
82
|
+
createThread(input: CommunityThreadCreateInput): Promise<CommunityThread>;
|
|
83
|
+
createPost(threadId: string, input: CommunityPostCreateInput): Promise<CommunityPost>;
|
|
84
|
+
flagThread(threadId: string, input?: CommunityFlagInput): Promise<CommunityThread>;
|
|
85
|
+
flagPost(postId: string, input?: CommunityFlagInput): Promise<CommunityPost>;
|
|
86
|
+
|
|
87
|
+
// --- events ------------------------------------------------------------
|
|
88
|
+
/** Subscribe to an event scoped to this module (``community.<event>``). */
|
|
89
|
+
on<T = unknown>(event: string, handler: (payload: T) => void): () => void;
|
|
90
|
+
off<T = unknown>(event: string, handler: (payload: T) => void): void;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface CommunityModuleOptions {
|
|
94
|
+
/** Override the proxy mount-point (default: ``/community``). */
|
|
95
|
+
basePath?: string;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function _qs(params: Record<string, unknown>): string {
|
|
99
|
+
const usp = new URLSearchParams();
|
|
100
|
+
for (const [k, v] of Object.entries(params)) {
|
|
101
|
+
if (v === undefined || v === null || v === "") continue;
|
|
102
|
+
usp.set(k, String(v));
|
|
103
|
+
}
|
|
104
|
+
const s = usp.toString();
|
|
105
|
+
return s ? `?${s}` : "";
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export const createCommunityModule: ModuleFactory<CommunityModule> = (
|
|
109
|
+
ctx: ModuleContext,
|
|
110
|
+
): CommunityModule => {
|
|
111
|
+
return _create(ctx, {});
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export function createCommunityModuleWith(
|
|
115
|
+
options: CommunityModuleOptions,
|
|
116
|
+
): ModuleFactory<CommunityModule> {
|
|
117
|
+
return (ctx) => _create(ctx, options);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function _create(
|
|
121
|
+
ctx: ModuleContext,
|
|
122
|
+
options: CommunityModuleOptions,
|
|
123
|
+
): CommunityModule {
|
|
124
|
+
const base = (options.basePath ?? "/community").replace(/\/+$/, "");
|
|
125
|
+
const ns = ctx.name; // "community" by convention; whatever the host registered as.
|
|
126
|
+
|
|
127
|
+
function _ev(name: string): string {
|
|
128
|
+
return `${ns}.${name}`;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return {
|
|
132
|
+
async getThreads(opts: CommunityListOptions = {}) {
|
|
133
|
+
return ctx.request(`${base}/threads${_qs({ skip: opts.skip, limit: opts.limit })}`);
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
async getPosts(threadId: string, opts: CommunityListOptions = {}) {
|
|
137
|
+
if (typeof threadId !== "string" || threadId.length === 0) {
|
|
138
|
+
return Promise.reject(new Error("getPosts: threadId required"));
|
|
139
|
+
}
|
|
140
|
+
return ctx.request(
|
|
141
|
+
`${base}/threads/${encodeURIComponent(threadId)}/posts${_qs({
|
|
142
|
+
skip: opts.skip,
|
|
143
|
+
limit: opts.limit,
|
|
144
|
+
})}`,
|
|
145
|
+
);
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
async createThread(input: CommunityThreadCreateInput) {
|
|
149
|
+
const title = String(input?.title ?? "").trim();
|
|
150
|
+
const body = String(input?.body ?? "").trim();
|
|
151
|
+
if (!title) throw new Error("createThread: title required");
|
|
152
|
+
if (!body) throw new Error("createThread: body required");
|
|
153
|
+
|
|
154
|
+
const thread = await ctx.request<CommunityThread>(`${base}/threads`, {
|
|
155
|
+
method: "POST",
|
|
156
|
+
headers: { "Content-Type": "application/json" },
|
|
157
|
+
body: JSON.stringify({ title, body }),
|
|
158
|
+
});
|
|
159
|
+
ctx.bus.emit<CommunityThreadCreatedPayload>(_ev("thread.created"), { thread });
|
|
160
|
+
return thread;
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
async createPost(threadId: string, input: CommunityPostCreateInput) {
|
|
164
|
+
if (typeof threadId !== "string" || threadId.length === 0) {
|
|
165
|
+
throw new Error("createPost: threadId required");
|
|
166
|
+
}
|
|
167
|
+
const body = String(input?.body ?? "").trim();
|
|
168
|
+
if (!body) throw new Error("createPost: body required");
|
|
169
|
+
|
|
170
|
+
const post = await ctx.request<CommunityPost>(
|
|
171
|
+
`${base}/threads/${encodeURIComponent(threadId)}/posts`,
|
|
172
|
+
{
|
|
173
|
+
method: "POST",
|
|
174
|
+
headers: { "Content-Type": "application/json" },
|
|
175
|
+
body: JSON.stringify({ body }),
|
|
176
|
+
},
|
|
177
|
+
);
|
|
178
|
+
ctx.bus.emit<CommunityPostCreatedPayload>(_ev("post.created"), { post });
|
|
179
|
+
return post;
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
async flagThread(threadId: string, input: CommunityFlagInput = {}) {
|
|
183
|
+
if (typeof threadId !== "string" || threadId.length === 0) {
|
|
184
|
+
throw new Error("flagThread: threadId required");
|
|
185
|
+
}
|
|
186
|
+
const thread = await ctx.request<CommunityThread>(
|
|
187
|
+
`${base}/threads/${encodeURIComponent(threadId)}/flag`,
|
|
188
|
+
{
|
|
189
|
+
method: "POST",
|
|
190
|
+
headers: { "Content-Type": "application/json" },
|
|
191
|
+
body: JSON.stringify({ reason: input.reason }),
|
|
192
|
+
},
|
|
193
|
+
);
|
|
194
|
+
ctx.bus.emit<CommunityThreadFlaggedPayload>(_ev("thread.flagged"), { thread });
|
|
195
|
+
return thread;
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
async flagPost(postId: string, input: CommunityFlagInput = {}) {
|
|
199
|
+
if (typeof postId !== "string" || postId.length === 0) {
|
|
200
|
+
throw new Error("flagPost: postId required");
|
|
201
|
+
}
|
|
202
|
+
const post = await ctx.request<CommunityPost>(`${base}/posts/${encodeURIComponent(postId)}/flag`, {
|
|
203
|
+
method: "POST",
|
|
204
|
+
headers: { "Content-Type": "application/json" },
|
|
205
|
+
body: JSON.stringify({ reason: input.reason }),
|
|
206
|
+
});
|
|
207
|
+
ctx.bus.emit<CommunityPostFlaggedPayload>(_ev("post.flagged"), { post });
|
|
208
|
+
return post;
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
on<T = unknown>(event: string, handler: (payload: T) => void): () => void {
|
|
212
|
+
return ctx.bus.on<T>(_ev(event), handler);
|
|
213
|
+
},
|
|
214
|
+
off<T = unknown>(event: string, handler: (payload: T) => void): void {
|
|
215
|
+
ctx.bus.off<T>(_ev(event), handler);
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
}
|