@khoralabs/chat 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +7 -0
  2. package/dist/domain.d.ts +10 -0
  3. package/dist/domain.d.ts.map +1 -0
  4. package/dist/errors.d.ts +20 -0
  5. package/dist/errors.d.ts.map +1 -0
  6. package/dist/events.d.ts +59 -0
  7. package/dist/events.d.ts.map +1 -0
  8. package/dist/hash.d.ts +47 -0
  9. package/dist/hash.d.ts.map +1 -0
  10. package/dist/http/client.d.ts +21 -0
  11. package/dist/http/client.d.ts.map +1 -0
  12. package/dist/http/client.js +367 -0
  13. package/dist/http/config.d.ts +5 -0
  14. package/dist/http/config.d.ts.map +1 -0
  15. package/dist/http/index.d.ts +6 -0
  16. package/dist/http/index.d.ts.map +1 -0
  17. package/dist/http/index.js +1084 -0
  18. package/dist/http/routes.d.ts +15 -0
  19. package/dist/http/routes.d.ts.map +1 -0
  20. package/dist/http/routes.js +645 -0
  21. package/dist/http/server.d.ts +19 -0
  22. package/dist/http/server.d.ts.map +1 -0
  23. package/dist/http/server.js +973 -0
  24. package/dist/http/service.d.ts +34 -0
  25. package/dist/http/service.d.ts.map +1 -0
  26. package/dist/http/service.js +501 -0
  27. package/dist/ids.d.ts +8 -0
  28. package/dist/ids.d.ts.map +1 -0
  29. package/dist/index.d.ts +3 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +453 -0
  32. package/dist/lineage.d.ts +5 -0
  33. package/dist/lineage.d.ts.map +1 -0
  34. package/dist/persistence/core/index.d.ts +2 -0
  35. package/dist/persistence/core/index.d.ts.map +1 -0
  36. package/dist/persistence/core/persistence/base-persistence.d.ts +12 -0
  37. package/dist/persistence/core/persistence/base-persistence.d.ts.map +1 -0
  38. package/dist/persistence/core/persistence/helpers.d.ts +30 -0
  39. package/dist/persistence/core/persistence/helpers.d.ts.map +1 -0
  40. package/dist/persistence/core/persistence/index.d.ts +6 -0
  41. package/dist/persistence/core/persistence/index.d.ts.map +1 -0
  42. package/dist/persistence/core/persistence/index.js +1276 -0
  43. package/dist/persistence/core/persistence/memory-persistence.d.ts +55 -0
  44. package/dist/persistence/core/persistence/memory-persistence.d.ts.map +1 -0
  45. package/dist/persistence/core/persistence/signed-persistence.d.ts +18 -0
  46. package/dist/persistence/core/persistence/signed-persistence.d.ts.map +1 -0
  47. package/dist/persistence/core/persistence/types.d.ts +210 -0
  48. package/dist/persistence/core/persistence/types.d.ts.map +1 -0
  49. package/dist/persistence/sqlite/index.d.ts +3 -0
  50. package/dist/persistence/sqlite/index.d.ts.map +1 -0
  51. package/dist/persistence/sqlite/index.js +1544 -0
  52. package/dist/persistence/sqlite/persistence/persistence.d.ts +49 -0
  53. package/dist/persistence/sqlite/persistence/persistence.d.ts.map +1 -0
  54. package/dist/persistence/sqlite/persistence/schema.d.ts +4 -0
  55. package/dist/persistence/sqlite/persistence/schema.d.ts.map +1 -0
  56. package/dist/persistence/sqlite/persistence/streaming.d.ts +27 -0
  57. package/dist/persistence/sqlite/persistence/streaming.d.ts.map +1 -0
  58. package/dist/persistence/testing/index.d.ts +2 -0
  59. package/dist/persistence/testing/index.d.ts.map +1 -0
  60. package/dist/persistence/testing/index.js +689 -0
  61. package/dist/persistence/testing/persistence/contract.d.ts +3 -0
  62. package/dist/persistence/testing/persistence/contract.d.ts.map +1 -0
  63. package/dist/persistence/turso-serverless/index.d.ts +10 -0
  64. package/dist/persistence/turso-serverless/index.d.ts.map +1 -0
  65. package/dist/persistence/turso-serverless/index.js +1812 -0
  66. package/dist/persistence/turso-serverless/persistence/local-sqlite.d.ts +5 -0
  67. package/dist/persistence/turso-serverless/persistence/local-sqlite.d.ts.map +1 -0
  68. package/dist/persistence/turso-serverless/persistence/persistence.d.ts +49 -0
  69. package/dist/persistence/turso-serverless/persistence/persistence.d.ts.map +1 -0
  70. package/dist/persistence/turso-serverless/persistence/schema.d.ts +4 -0
  71. package/dist/persistence/turso-serverless/persistence/schema.d.ts.map +1 -0
  72. package/dist/persistence/turso-serverless/persistence/sql.d.ts +20 -0
  73. package/dist/persistence/turso-serverless/persistence/sql.d.ts.map +1 -0
  74. package/dist/persistence/turso-serverless/persistence/sql.js +53 -0
  75. package/dist/persistence/turso-serverless/persistence/streaming.d.ts +27 -0
  76. package/dist/persistence/turso-serverless/persistence/streaming.d.ts.map +1 -0
  77. package/dist/service.d.ts +49 -0
  78. package/dist/service.d.ts.map +1 -0
  79. package/dist/stream.d.ts +32 -0
  80. package/dist/stream.d.ts.map +1 -0
  81. package/dist/types.d.ts +201 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/validation.d.ts +4 -0
  84. package/dist/validation.d.ts.map +1 -0
  85. package/package.json +104 -0
@@ -0,0 +1,49 @@
1
+ import type { Database } from "bun:sqlite";
2
+ import { BaseChatPersistence } from "@khoralabs/chat/persistence";
3
+ import type { AddChannelMemberInput, AddThreadParticipantInput, AppendPostInput, AppendPostResult, Channel, ChatAclEvent, ChatPersistence, CreateChannelInput, CreateThreadInput, DeletePostInput, EditPostInput, EditPostResult, ListPostsInput, ListThreadsInput, Post, PostPage, PostVersion, RemoveChannelMemberInput, RemoveThreadParticipantInput, ScopeRef, Thread, ThreadHead, ThreadPage, ThreadTip } from "../../../domain.js";
4
+ export declare class SqliteChatPersistence extends BaseChatPersistence implements ChatPersistence {
5
+ private readonly db;
6
+ constructor(db: Database);
7
+ private getPostVersionSync;
8
+ createChannel(input: CreateChannelInput): Promise<Channel>;
9
+ createThread(input: CreateThreadInput): Promise<Thread>;
10
+ getChannel(id: string): Promise<Channel | null>;
11
+ getThread(id: string): Promise<Thread | null>;
12
+ getPost(id: string): Promise<Post | null>;
13
+ getPostVersion(id: string): Promise<PostVersion | null>;
14
+ getThreadHead(threadId: string, headId?: string): Promise<ThreadHead | null>;
15
+ getThreadTip(threadId: string): Promise<ThreadTip | null>;
16
+ listThreads(input: ListThreadsInput): Promise<ThreadPage>;
17
+ private listThreadRows;
18
+ listPosts(input: ListPostsInput): Promise<PostPage>;
19
+ appendPost(input: AppendPostInput): Promise<AppendPostResult>;
20
+ editPost(input: EditPostInput): Promise<EditPostResult>;
21
+ deletePost(input: DeletePostInput): Promise<Post>;
22
+ addChannelMember(input: AddChannelMemberInput): Promise<ChatAclEvent>;
23
+ removeChannelMember(input: RemoveChannelMemberInput): Promise<ChatAclEvent>;
24
+ addThreadParticipant(input: AddThreadParticipantInput): Promise<ChatAclEvent>;
25
+ removeThreadParticipant(input: RemoveThreadParticipantInput): Promise<ChatAclEvent>;
26
+ createThreadHead(input: {
27
+ threadId: string;
28
+ name: string;
29
+ headPostVersionId: string;
30
+ }): Promise<ThreadHead>;
31
+ listChannelMembers(channelId: string): Promise<ScopeRef[]>;
32
+ listThreadParticipants(threadId: string): Promise<ScopeRef[]>;
33
+ listAclEvents(input: {
34
+ channelId?: string;
35
+ threadId?: string;
36
+ limit?: number;
37
+ }): Promise<ChatAclEvent[]>;
38
+ private latestAclEventId;
39
+ private insertAclEvent;
40
+ listPostStreamEvents(postId: string): Promise<import("../../../types.js").PostStreamEvent[]>;
41
+ startStreamedPost(input: import("../../../domain.js").StartStreamedPostInput): Promise<import("@khoralabs/chat/persistence").StartStreamedPostResult>;
42
+ applyPostDelta(input: import("../../../domain.js").ApplyPostDeltaInput): Promise<import("@khoralabs/chat/persistence").ApplyPostDeltaResult>;
43
+ completeStreamedPost(input: import("../../../domain.js").CompleteStreamedPostInput): Promise<import("@khoralabs/chat/persistence").CompleteStreamedPostResult>;
44
+ abortStreamedPost(input: import("../../../domain.js").AbortStreamedPostInput): Promise<import("@khoralabs/chat/persistence").AbortStreamedPostResult>;
45
+ rebuildStreamedPostCache(postId: string): Promise<import("../../../types.js").StreamingPost>;
46
+ setPostVersionSignature(versionId: string, signature: import("../../../domain.js").SignedEnvelope): Promise<void>;
47
+ }
48
+ export declare function createSqliteChatPersistence(db: Database): SqliteChatPersistence;
49
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../../src/persistence/sqlite/persistence/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,mBAAmB,EAIpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,wBAAwB,EACxB,4BAA4B,EAC5B,QAAQ,EAER,MAAM,EACN,UAAU,EACV,UAAU,EAEV,SAAS,EACV,MAAM,oBAAoB,CAAC;AAmM5B,qBAAa,qBAAsB,SAAQ,mBAAoB,YAAW,eAAe;IAC3E,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,QAAQ;IAIzC,OAAO,CAAC,kBAAkB;IAOpB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB1D,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmCvD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAY/C,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2B7C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAazC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAOvD,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAuB5E,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAQzD,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA6B/D,OAAO,CAAC,cAAc;IA0DhB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4DnD,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4L7D,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAwLvD,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoCrE,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgC3E,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoC7E,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,GAAG,OAAO,CAAC,YAAY,CAAC;IAgCnF,gBAAgB,CAAC,KAAK,EAAE;QAC5B,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO,CAAC,UAAU,CAAC;IAuBjB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAO1D,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAO7D,aAAa,CAAC,KAAK,EAAE;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB3B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,cAAc;IAoChB,oBAAoB,CAAC,MAAM,EAAE,MAAM;IAInC,iBAAiB,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,sBAAsB;IAM5E,cAAc,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,mBAAmB;IAItE,oBAAoB,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,yBAAyB;IAIlF,iBAAiB,CAAC,KAAK,EAAE,OAAO,oBAAoB,EAAE,sBAAsB;IAM5E,wBAAwB,CAAC,MAAM,EAAE,MAAM;IAMvC,uBAAuB,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,OAAO,oBAAoB,EAAE,cAAc,GACrD,OAAO,CAAC,IAAI,CAAC;CAWjB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,EAAE,QAAQ,GAAG,qBAAqB,CAE/E"}
@@ -0,0 +1,4 @@
1
+ import { type Database as DatabaseType } from "bun:sqlite";
2
+ export declare function ensureChatSqliteSchema(db: DatabaseType, busyTimeoutMs?: number): void;
3
+ export declare function createChatDatabase(path?: ":memory:" | string): DatabaseType;
4
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../../src/persistence/sqlite/persistence/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AA0HrE,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,YAAY,EAAE,aAAa,SAAO,GAAG,IAAI,CAoBnF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,UAAU,GAAG,MAAmB,GAAG,YAAY,CAIvF"}
@@ -0,0 +1,27 @@
1
+ import type { Database } from "bun:sqlite";
2
+ import type { AbortStreamedPostInput, AbortStreamedPostResult, ApplyPostDeltaInput, ApplyPostDeltaResult, CompleteStreamedPostInput, CompleteStreamedPostResult, Post, PostStatus, PostStreamEvent, PostVersion, StartStreamedPostInput, StartStreamedPostResult } from "../../../domain.js";
3
+ export type PostRow = {
4
+ id: string;
5
+ thread_id: string;
6
+ post_index: number;
7
+ status: PostStatus;
8
+ stream_message: string | null;
9
+ stream_mentions: string | null;
10
+ stream_model: string | null;
11
+ stream_usage: string | null;
12
+ stream_author_scope_type: string | null;
13
+ stream_author_scope_id: string | null;
14
+ stream_revision: number;
15
+ completed_version_id: string | null;
16
+ created_at_ms: number;
17
+ updated_at_ms: number | null;
18
+ deleted_at_ms: number | null;
19
+ };
20
+ export declare function postFromRow(row: PostRow, getVersion: (versionId: string) => PostVersion | null): Post | null;
21
+ export declare function sqliteListPostStreamEvents(db: Database, postId: string): PostStreamEvent[];
22
+ export declare function sqliteStartStreamedPost(db: Database, input: StartStreamedPostInput, getVersion: (versionId: string) => PostVersion | null): StartStreamedPostResult;
23
+ export declare function sqliteApplyPostDelta(db: Database, input: ApplyPostDeltaInput, getVersion: (versionId: string) => PostVersion | null): ApplyPostDeltaResult;
24
+ export declare function sqliteCompleteStreamedPost(db: Database, input: CompleteStreamedPostInput): CompleteStreamedPostResult;
25
+ export declare function sqliteAbortStreamedPost(db: Database, input: AbortStreamedPostInput, getVersion: (versionId: string) => PostVersion | null): AbortStreamedPostResult;
26
+ export declare function sqliteRebuildStreamedPostCache(db: Database, postId: string, _getVersion: (versionId: string) => PostVersion | null): import("../../../types.js").StreamingPost;
27
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../../../src/persistence/sqlite/persistence/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAE1B,IAAI,EAEJ,UAAU,EACV,eAAe,EAEf,WAAW,EAEX,sBAAsB,EACtB,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AAa5B,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAkBF,wBAAgB,WAAW,CACzB,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,GACpD,IAAI,GAAG,IAAI,CA2Cb;AAiDD,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAkC1F;AAED,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,sBAAsB,EAC7B,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,GACpD,uBAAuB,CA+EzB;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,mBAAmB,EAC1B,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,GACpD,oBAAoB,CA+EtB;AAED,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,yBAAyB,GAC/B,0BAA0B,CA+K5B;AAED,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,sBAAsB,EAC7B,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,GACpD,uBAAuB,CA8BzB;AAED,wBAAgB,8BAA8B,CAC5C,EAAE,EAAE,QAAQ,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,6CAmCvD"}
@@ -0,0 +1,2 @@
1
+ export { runChatPersistenceContractTests } from "./persistence/contract.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/persistence/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC"}