@codelockpro/sdk 0.1.10 → 0.1.12

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 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
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,cAAc,EAA0B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAgC,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAuB,MAAM,iBAAiB,CAAC;AAkCtE,MAAM,OAAO,WAAW;IAOvB,YAAY,MAAyB;QACpC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,cAAc,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,EAAE,CAAC;QAEtC,kEAAkE;QAClE,4DAA4D;QAC5D,yCAAyC;QACzC,MAAM,cAAc,GAA4C;YAC/D,CAAC,IAAI,EAAE,cAAc,CAAC;SACtB,CAAC;QACF,MAAM,UAAU,GACf,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,cAAc,CAAC;QAElE,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAI,IAAY,EAAE,OAAyB;QAClD,MAAM,GAAG,GAAkB;YAC1B,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACjC,GAAG,EAAE,IAAI,CAAC,IAAI;SACd,CAAC;QACF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,sDAAsD;IACtD,MAAM,CAAc,IAAY;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAI,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,kDAAkD;IAClD,WAAW;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,0EAA0E;IAC1E,EAAE,CAAc,KAAa,EAAE,OAAwB;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAc,KAAa,EAAE,OAAwB;QACvD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,CAAc,KAAa,EAAE,OAAW;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,IAAI,EAAE;QACL,OAAO,IAAI,CAAC,MAAM,CAAsB,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;6EACyE;IACzE,KAAK,CAAC,QAAQ,CAAc,IAAY,EAAE,OAAoB,EAAE;QAC/D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;QACvE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAClC,GAAG,IAAI;YACP,OAAO,EAAE;gBACR,MAAM,EAAE,kBAAkB;gBAC1B,GAAG,IAAI,CAAC,QAAQ;gBAChB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;aACvB;SACD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAc,CAAC;QAC9C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IAChC,CAAC;CACD;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC7C,YAAmB,MAAc,EAAE,UAAkB,EAAS,IAAY;QACzE,KAAK,CAAC,mBAAmB,MAAM,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC,CAAC;QADxC,WAAM,GAAN,MAAM,CAAQ;QAA6B,SAAI,GAAJ,IAAI,CAAQ;QAEzE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACnC,CAAC;CACD;AAWD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,eAAe,WAAW,CAAC"}
@@ -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.10",
3
+ "version": "0.1.12",
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
+ }