@playcraft/common 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +13 -0
  2. package/dist/auth/index.d.ts +4 -0
  3. package/dist/auth/index.d.ts.map +1 -0
  4. package/dist/auth/index.js +4 -0
  5. package/dist/auth/index.js.map +1 -0
  6. package/dist/auth/jwt.d.ts +18 -0
  7. package/dist/auth/jwt.d.ts.map +1 -0
  8. package/dist/auth/jwt.js +47 -0
  9. package/dist/auth/jwt.js.map +1 -0
  10. package/dist/auth/jwt.test.d.ts +2 -0
  11. package/dist/auth/jwt.test.d.ts.map +1 -0
  12. package/dist/auth/jwt.test.js +13 -0
  13. package/dist/auth/jwt.test.js.map +1 -0
  14. package/dist/auth/local-dev.d.ts +27 -0
  15. package/dist/auth/local-dev.d.ts.map +1 -0
  16. package/dist/auth/local-dev.js +38 -0
  17. package/dist/auth/local-dev.js.map +1 -0
  18. package/dist/auth/types.d.ts +7 -0
  19. package/dist/auth/types.d.ts.map +1 -0
  20. package/dist/auth/types.js +2 -0
  21. package/dist/auth/types.js.map +1 -0
  22. package/dist/constants.d.ts +28 -0
  23. package/dist/constants.d.ts.map +1 -0
  24. package/dist/constants.js +28 -0
  25. package/dist/constants.js.map +1 -0
  26. package/dist/database/index.d.ts +4 -0
  27. package/dist/database/index.d.ts.map +1 -0
  28. package/dist/database/index.js +4 -0
  29. package/dist/database/index.js.map +1 -0
  30. package/dist/database/postgres-adapter.d.ts +8 -0
  31. package/dist/database/postgres-adapter.d.ts.map +1 -0
  32. package/dist/database/postgres-adapter.js +11 -0
  33. package/dist/database/postgres-adapter.js.map +1 -0
  34. package/dist/database/schema.d.ts +919 -0
  35. package/dist/database/schema.d.ts.map +1 -0
  36. package/dist/database/schema.js +70 -0
  37. package/dist/database/schema.js.map +1 -0
  38. package/dist/database/sqlite-adapter.d.ts +11 -0
  39. package/dist/database/sqlite-adapter.d.ts.map +1 -0
  40. package/dist/database/sqlite-adapter.js +78 -0
  41. package/dist/database/sqlite-adapter.js.map +1 -0
  42. package/dist/index.d.ts +10 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +10 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/messenger/index.d.ts +4 -0
  47. package/dist/messenger/index.d.ts.map +1 -0
  48. package/dist/messenger/index.js +4 -0
  49. package/dist/messenger/index.js.map +1 -0
  50. package/dist/messenger/protocol.d.ts +6 -0
  51. package/dist/messenger/protocol.d.ts.map +1 -0
  52. package/dist/messenger/protocol.js +17 -0
  53. package/dist/messenger/protocol.js.map +1 -0
  54. package/dist/messenger/server.d.ts +66 -0
  55. package/dist/messenger/server.d.ts.map +1 -0
  56. package/dist/messenger/server.js +249 -0
  57. package/dist/messenger/server.js.map +1 -0
  58. package/dist/messenger/server.test.d.ts +2 -0
  59. package/dist/messenger/server.test.d.ts.map +1 -0
  60. package/dist/messenger/server.test.js +66 -0
  61. package/dist/messenger/server.test.js.map +1 -0
  62. package/dist/messenger/types.d.ts +32 -0
  63. package/dist/messenger/types.d.ts.map +1 -0
  64. package/dist/messenger/types.js +2 -0
  65. package/dist/messenger/types.js.map +1 -0
  66. package/dist/models/asset.d.ts +57 -0
  67. package/dist/models/asset.d.ts.map +1 -0
  68. package/dist/models/asset.js +33 -0
  69. package/dist/models/asset.js.map +1 -0
  70. package/dist/models/converters.d.ts +11 -0
  71. package/dist/models/converters.d.ts.map +1 -0
  72. package/dist/models/converters.js +25 -0
  73. package/dist/models/converters.js.map +1 -0
  74. package/dist/models/converters.test.d.ts +2 -0
  75. package/dist/models/converters.test.d.ts.map +1 -0
  76. package/dist/models/converters.test.js +18 -0
  77. package/dist/models/converters.test.js.map +1 -0
  78. package/dist/models/index.d.ts +5 -0
  79. package/dist/models/index.d.ts.map +1 -0
  80. package/dist/models/index.js +5 -0
  81. package/dist/models/index.js.map +1 -0
  82. package/dist/models/playcanvas-compat.d.ts +30 -0
  83. package/dist/models/playcanvas-compat.d.ts.map +1 -0
  84. package/dist/models/playcanvas-compat.js +30 -0
  85. package/dist/models/playcanvas-compat.js.map +1 -0
  86. package/dist/models/project.d.ts +28 -0
  87. package/dist/models/project.d.ts.map +1 -0
  88. package/dist/models/project.js +17 -0
  89. package/dist/models/project.js.map +1 -0
  90. package/dist/models/scene.d.ts +52 -0
  91. package/dist/models/scene.d.ts.map +1 -0
  92. package/dist/models/scene.js +49 -0
  93. package/dist/models/scene.js.map +1 -0
  94. package/dist/models/scene.test.d.ts +2 -0
  95. package/dist/models/scene.test.d.ts.map +1 -0
  96. package/dist/models/scene.test.js +12 -0
  97. package/dist/models/scene.test.js.map +1 -0
  98. package/dist/sharedb/index.d.ts +4 -0
  99. package/dist/sharedb/index.d.ts.map +1 -0
  100. package/dist/sharedb/index.js +4 -0
  101. package/dist/sharedb/index.js.map +1 -0
  102. package/dist/sharedb/middleware.d.ts +2 -0
  103. package/dist/sharedb/middleware.d.ts.map +1 -0
  104. package/dist/sharedb/middleware.js +2 -0
  105. package/dist/sharedb/middleware.js.map +1 -0
  106. package/dist/sharedb/server.d.ts +60 -0
  107. package/dist/sharedb/server.d.ts.map +1 -0
  108. package/dist/sharedb/server.js +542 -0
  109. package/dist/sharedb/server.js.map +1 -0
  110. package/dist/sharedb/server.test.d.ts +2 -0
  111. package/dist/sharedb/server.test.d.ts.map +1 -0
  112. package/dist/sharedb/server.test.js +59 -0
  113. package/dist/sharedb/server.test.js.map +1 -0
  114. package/dist/sharedb/snapshot.d.ts +8 -0
  115. package/dist/sharedb/snapshot.d.ts.map +1 -0
  116. package/dist/sharedb/snapshot.js +2 -0
  117. package/dist/sharedb/snapshot.js.map +1 -0
  118. package/dist/storage/cos.d.ts +25 -0
  119. package/dist/storage/cos.d.ts.map +1 -0
  120. package/dist/storage/cos.js +104 -0
  121. package/dist/storage/cos.js.map +1 -0
  122. package/dist/storage/index.d.ts +18 -0
  123. package/dist/storage/index.d.ts.map +1 -0
  124. package/dist/storage/index.js +63 -0
  125. package/dist/storage/index.js.map +1 -0
  126. package/dist/storage/interface.d.ts +19 -0
  127. package/dist/storage/interface.d.ts.map +1 -0
  128. package/dist/storage/interface.js +2 -0
  129. package/dist/storage/interface.js.map +1 -0
  130. package/dist/storage/local.d.ts +16 -0
  131. package/dist/storage/local.d.ts.map +1 -0
  132. package/dist/storage/local.js +57 -0
  133. package/dist/storage/local.js.map +1 -0
  134. package/dist/utils/env.d.ts +2 -0
  135. package/dist/utils/env.d.ts.map +1 -0
  136. package/dist/utils/env.js +10 -0
  137. package/dist/utils/env.js.map +1 -0
  138. package/dist/utils/index.d.ts +3 -0
  139. package/dist/utils/index.d.ts.map +1 -0
  140. package/dist/utils/index.js +3 -0
  141. package/dist/utils/index.js.map +1 -0
  142. package/dist/utils/logger.d.ts +8 -0
  143. package/dist/utils/logger.d.ts.map +1 -0
  144. package/dist/utils/logger.js +10 -0
  145. package/dist/utils/logger.js.map +1 -0
  146. package/dist/websocket/connection.d.ts +4 -0
  147. package/dist/websocket/connection.d.ts.map +1 -0
  148. package/dist/websocket/connection.js +9 -0
  149. package/dist/websocket/connection.js.map +1 -0
  150. package/dist/websocket/heartbeat.d.ts +3 -0
  151. package/dist/websocket/heartbeat.d.ts.map +1 -0
  152. package/dist/websocket/heartbeat.js +16 -0
  153. package/dist/websocket/heartbeat.js.map +1 -0
  154. package/dist/websocket/index.d.ts +4 -0
  155. package/dist/websocket/index.d.ts.map +1 -0
  156. package/dist/websocket/index.js +4 -0
  157. package/dist/websocket/index.js.map +1 -0
  158. package/dist/websocket/server.d.ts +12 -0
  159. package/dist/websocket/server.d.ts.map +1 -0
  160. package/dist/websocket/server.js +12 -0
  161. package/dist/websocket/server.js.map +1 -0
  162. package/package.json +79 -0
package/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # @playcraft/common
2
+
3
+ PlayCraft monorepo 内部共享库,给 CLI Agent / Backend / Realtime / Messenger 提供可复用的通用能力。
4
+
5
+ ## 子模块
6
+
7
+ - `@playcraft/common/auth`: JWT、Local Dev Auth
8
+ - `@playcraft/common/models`: PlayCanvas 兼容数据模型与转换
9
+ - `@playcraft/common/database`: SQLite/Postgres 适配(供 Agent/Backend)
10
+ - `@playcraft/common/sharedb`: ShareDB 服务封装
11
+ - `@playcraft/common/messenger`: Messenger 协议与服务封装
12
+ - `@playcraft/common/utils`: 通用工具(env、logger 等)
13
+
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './jwt.js';
3
+ export * from './local-dev.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export * from './jwt.js';
3
+ export * from './local-dev.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { JwtPayload } from './types.js';
2
+ export type JwtServiceOptions = {
3
+ secret?: string;
4
+ issuer?: string;
5
+ audience?: string;
6
+ };
7
+ export declare class JwtService {
8
+ private readonly secretKey;
9
+ private readonly issuer?;
10
+ private readonly audience?;
11
+ constructor(options?: JwtServiceOptions);
12
+ verify(token: string | undefined | null): Promise<JwtPayload | null>;
13
+ sign(payload: JwtPayload, options?: {
14
+ expiresIn?: string;
15
+ subject?: string;
16
+ }): Promise<string>;
17
+ }
18
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;gBAEvB,OAAO,GAAE,iBAAsB;IAOrC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAapE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAcnF"}
@@ -0,0 +1,47 @@
1
+ import { jwtVerify, SignJWT } from 'jose';
2
+ function requiredEnv(name, fallback) {
3
+ const v = process.env[name];
4
+ if (v == null || v === '')
5
+ return fallback;
6
+ return v;
7
+ }
8
+ export class JwtService {
9
+ secretKey;
10
+ issuer;
11
+ audience;
12
+ constructor(options = {}) {
13
+ const secret = options.secret ?? requiredEnv('JWT_SECRET', 'dev-secret-change-me');
14
+ this.secretKey = new TextEncoder().encode(secret);
15
+ this.issuer = options.issuer;
16
+ this.audience = options.audience;
17
+ }
18
+ async verify(token) {
19
+ if (!token)
20
+ return null;
21
+ try {
22
+ const { payload } = await jwtVerify(token, this.secretKey, {
23
+ issuer: this.issuer,
24
+ audience: this.audience,
25
+ });
26
+ return payload;
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ async sign(payload, options) {
33
+ const expiresIn = options?.expiresIn ?? '365d';
34
+ const jwt = new SignJWT(payload)
35
+ .setProtectedHeader({ alg: 'HS256', typ: 'JWT' })
36
+ .setIssuedAt()
37
+ .setExpirationTime(expiresIn);
38
+ if (options?.subject)
39
+ jwt.setSubject(options.subject);
40
+ if (this.issuer)
41
+ jwt.setIssuer(this.issuer);
42
+ if (this.audience)
43
+ jwt.setAudience(this.audience);
44
+ return await jwt.sign(this.secretKey);
45
+ }
46
+ }
47
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/auth/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG1C,SAAS,WAAW,CAAC,IAAY,EAAE,QAAgB;IACjD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC3C,OAAO,CAAC,CAAC;AACX,CAAC;AAQD,MAAM,OAAO,UAAU;IACJ,SAAS,CAAa;IACtB,MAAM,CAAU;IAChB,QAAQ,CAAU;IAEnC,YAAY,UAA6B,EAAE;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;QACnF,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAgC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;gBACzD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,OAAO,OAAgC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAmB,EAAE,OAAkD;QAChF,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,MAAM,CAAC;QAE/C,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;aAC7B,kBAAkB,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;aAChD,WAAW,EAAE;aACb,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAEhC,IAAI,OAAO,EAAE,OAAO;YAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,MAAM;YAAE,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,QAAQ;YAAE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElD,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=jwt.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.d.ts","sourceRoot":"","sources":["../../src/auth/jwt.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { JwtService } from './jwt.js';
3
+ describe('JwtService', () => {
4
+ it('sign + verify roundtrip', async () => {
5
+ const jwt = new JwtService({ secret: 'test-secret' });
6
+ const token = await jwt.sign({ sub: 'u1', role: 'admin' }, { subject: 'u1', expiresIn: '1h' });
7
+ const payload = await jwt.verify(token);
8
+ expect(payload).not.toBeNull();
9
+ expect(payload?.sub).toBe('u1');
10
+ expect(payload?.role).toBe('admin');
11
+ });
12
+ });
13
+ //# sourceMappingURL=jwt.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.test.js","sourceRoot":"","sources":["../../src/auth/jwt.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { JwtPayload } from './types.js';
2
+ /**
3
+ * 本地开发鉴权工具
4
+ *
5
+ * 用于开发环境绕过鉴权,支持两种使用场景:
6
+ * 1. realtime/messenger: 简化的无 token 模式(shouldAllowWithoutToken)
7
+ * 2. backend HTTP API: 完整的 X-Local-User header 模式(isEnabled)
8
+ *
9
+ * 注意:backend 有更完整的实现(local-dev-auth.ts),包含数据库查询等功能
10
+ */
11
+ export declare class LocalDevAuth {
12
+ /**
13
+ * 检查是否启用本地开发鉴权绕过
14
+ * 仅在 LOCAL_AUTH_BYPASS=true 且非生产环境时生效
15
+ */
16
+ static isEnabled(): boolean;
17
+ /**
18
+ * 获取默认的回退用户(用于 realtime/messenger)
19
+ */
20
+ static getFallbackUser(): JwtPayload;
21
+ /**
22
+ * 判断是否允许无 token 连接(用于 realtime/messenger)
23
+ * 兼容现有行为:开发环境允许无 token
24
+ */
25
+ static shouldAllowWithoutToken(): boolean;
26
+ }
27
+ //# sourceMappingURL=local-dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-dev.d.ts","sourceRoot":"","sources":["../../src/auth/local-dev.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;GAQG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACH,MAAM,CAAC,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,UAAU;IASpC;;;OAGG;IACH,MAAM,CAAC,uBAAuB,IAAI,OAAO;CAI1C"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 本地开发鉴权工具
3
+ *
4
+ * 用于开发环境绕过鉴权,支持两种使用场景:
5
+ * 1. realtime/messenger: 简化的无 token 模式(shouldAllowWithoutToken)
6
+ * 2. backend HTTP API: 完整的 X-Local-User header 模式(isEnabled)
7
+ *
8
+ * 注意:backend 有更完整的实现(local-dev-auth.ts),包含数据库查询等功能
9
+ */
10
+ export class LocalDevAuth {
11
+ /**
12
+ * 检查是否启用本地开发鉴权绕过
13
+ * 仅在 LOCAL_AUTH_BYPASS=true 且非生产环境时生效
14
+ */
15
+ static isEnabled() {
16
+ return process.env.LOCAL_AUTH_BYPASS === 'true' && process.env.NODE_ENV !== 'production';
17
+ }
18
+ /**
19
+ * 获取默认的回退用户(用于 realtime/messenger)
20
+ */
21
+ static getFallbackUser() {
22
+ return {
23
+ id: 1,
24
+ sub: '1',
25
+ username: 'admin',
26
+ role: 'admin',
27
+ };
28
+ }
29
+ /**
30
+ * 判断是否允许无 token 连接(用于 realtime/messenger)
31
+ * 兼容现有行为:开发环境允许无 token
32
+ */
33
+ static shouldAllowWithoutToken() {
34
+ // 兼容现有 realtime/messenger 的行为:开发环境允许无 token
35
+ return !process.env.NODE_ENV || process.env.NODE_ENV === 'development';
36
+ }
37
+ }
38
+ //# sourceMappingURL=local-dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-dev.js","sourceRoot":"","sources":["../../src/auth/local-dev.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;IACvB;;;OAGG;IACH,MAAM,CAAC,SAAS;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC3F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,eAAe;QACpB,OAAO;YACL,EAAE,EAAE,CAAC;YACL,GAAG,EAAE,GAAG;YACR,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,uBAAuB;QAC5B,4CAA4C;QAC5C,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;IACzE,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export type JwtPayload = Record<string, unknown> & {
2
+ id?: string | number;
3
+ sub?: string;
4
+ username?: string;
5
+ role?: string;
6
+ };
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACjD,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 共享常量定义
3
+ */
4
+ /**
5
+ * HTTP 头常量
6
+ * 注意:HTTP 头名称大小写不敏感,但为了代码一致性,我们统一使用小写形式
7
+ */
8
+ export declare const HEADERS: {
9
+ /**
10
+ * 内部服务认证头
11
+ * 用于 backend、realtime、messenger 等内部服务之间的认证
12
+ * 需要匹配环境变量 EMIT_SECRET
13
+ */
14
+ readonly INTERNAL_SECRET: "x-internal-secret";
15
+ /**
16
+ * 旧版认证头名称(已废弃,仅用于向后兼容)
17
+ * @deprecated 使用 INTERNAL_SECRET 代替
18
+ */
19
+ readonly EMIT_SECRET: "x-emit-secret";
20
+ };
21
+ /**
22
+ * 环境变量名称常量
23
+ */
24
+ export declare const ENV_VARS: {
25
+ /** 内部服务认证密钥 */
26
+ readonly EMIT_SECRET: "EMIT_SECRET";
27
+ };
28
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,eAAO,MAAM,OAAO;IAClB;;;;OAIG;;IAGH;;;OAGG;;CAEK,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB,eAAe;;CAEP,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * 共享常量定义
3
+ */
4
+ /**
5
+ * HTTP 头常量
6
+ * 注意:HTTP 头名称大小写不敏感,但为了代码一致性,我们统一使用小写形式
7
+ */
8
+ export const HEADERS = {
9
+ /**
10
+ * 内部服务认证头
11
+ * 用于 backend、realtime、messenger 等内部服务之间的认证
12
+ * 需要匹配环境变量 EMIT_SECRET
13
+ */
14
+ INTERNAL_SECRET: 'x-internal-secret',
15
+ /**
16
+ * 旧版认证头名称(已废弃,仅用于向后兼容)
17
+ * @deprecated 使用 INTERNAL_SECRET 代替
18
+ */
19
+ EMIT_SECRET: 'x-emit-secret',
20
+ };
21
+ /**
22
+ * 环境变量名称常量
23
+ */
24
+ export const ENV_VARS = {
25
+ /** 内部服务认证密钥 */
26
+ EMIT_SECRET: 'EMIT_SECRET',
27
+ };
28
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;;;;OAIG;IACH,eAAe,EAAE,mBAAmB;IAEpC;;;OAGG;IACH,WAAW,EAAE,eAAe;CACpB,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,eAAe;IACf,WAAW,EAAE,aAAa;CAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './schema.js';
2
+ export * from './sqlite-adapter.js';
3
+ export * from './postgres-adapter.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './schema.js';
2
+ export * from './sqlite-adapter.js';
3
+ export * from './postgres-adapter.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { drizzle } from 'drizzle-orm/node-postgres';
2
+ import { Pool } from 'pg';
3
+ export type PostgresAdapter = {
4
+ pool: Pool;
5
+ db: ReturnType<typeof drizzle>;
6
+ };
7
+ export declare function createPostgresAdapter(connectionString: string): PostgresAdapter;
8
+ //# sourceMappingURL=postgres-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-adapter.d.ts","sourceRoot":"","sources":["../../src/database/postgres-adapter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE1B,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,IAAI,CAAC;IACX,EAAE,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG,eAAe,CAI/E"}
@@ -0,0 +1,11 @@
1
+ // 注意:目前仅用于共享类型与未来扩展。
2
+ // 现有 backend 已有自己的数据库初始化逻辑;common 这里提供一个可选 adapter,
3
+ // 方便后续统一数据访问层。
4
+ import { drizzle } from 'drizzle-orm/node-postgres';
5
+ import { Pool } from 'pg';
6
+ export function createPostgresAdapter(connectionString) {
7
+ const pool = new Pool({ connectionString });
8
+ const db = drizzle(pool);
9
+ return { pool, db };
10
+ }
11
+ //# sourceMappingURL=postgres-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-adapter.js","sourceRoot":"","sources":["../../src/database/postgres-adapter.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,oDAAoD;AACpD,eAAe;AAEf,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAO1B,MAAM,UAAU,qBAAqB,CAAC,gBAAwB;IAC5D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtB,CAAC"}