frontend-hamroun 1.2.74 → 1.2.75

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 (99) hide show
  1. package/dist/Counter.d.ts +0 -0
  2. package/dist/hooks-0728361a.cjs +1 -0
  3. package/dist/hooks-b58f947c.js +133 -0
  4. package/dist/hooks.js +1 -0
  5. package/dist/hooks.mjs +13 -0
  6. package/dist/index.js +1 -384
  7. package/dist/index.mjs +130 -374
  8. package/dist/jsx-runtime.js +1 -0
  9. package/dist/jsx-runtime.mjs +64 -0
  10. package/dist/renderer.js +1 -0
  11. package/dist/renderer.mjs +27 -0
  12. package/dist/server/src/batch.d.ts +3 -0
  13. package/dist/server/src/batch.js +23 -0
  14. package/dist/server/src/batch.js.map +1 -0
  15. package/dist/server/src/component.d.ts +14 -0
  16. package/dist/server/src/component.js +106 -0
  17. package/dist/server/src/component.js.map +1 -0
  18. package/dist/server/src/context.d.ts +13 -0
  19. package/dist/server/src/context.js +21 -0
  20. package/dist/server/src/context.js.map +1 -0
  21. package/dist/server/src/hooks.d.ts +12 -0
  22. package/dist/server/src/hooks.js +170 -0
  23. package/dist/server/src/hooks.js.map +1 -0
  24. package/dist/server/src/index.client.d.ts +12 -0
  25. package/dist/server/src/index.client.js +14 -0
  26. package/dist/server/src/index.client.js.map +1 -0
  27. package/dist/server/src/index.d.ts +88 -0
  28. package/dist/server/src/index.js +70 -0
  29. package/dist/server/src/index.js.map +1 -0
  30. package/dist/server/src/jsx-runtime/jsx-dev-runtime.d.ts +1 -0
  31. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js +2 -0
  32. package/dist/server/src/jsx-runtime/jsx-dev-runtime.js.map +1 -0
  33. package/dist/server/src/jsx-runtime/jsx-runtime.d.ts +4 -0
  34. package/dist/server/src/jsx-runtime/jsx-runtime.js +41 -0
  35. package/dist/server/src/jsx-runtime/jsx-runtime.js.map +1 -0
  36. package/dist/server/src/jsx-runtime.d.ts +20 -0
  37. package/dist/server/src/jsx-runtime.js +105 -0
  38. package/dist/server/src/jsx-runtime.js.map +1 -0
  39. package/dist/server/src/renderComponent.d.ts +14 -0
  40. package/dist/server/src/renderComponent.js +25 -0
  41. package/dist/server/src/renderComponent.js.map +1 -0
  42. package/dist/server/src/renderer.d.ts +2 -0
  43. package/dist/server/src/renderer.js +31 -0
  44. package/dist/server/src/renderer.js.map +1 -0
  45. package/dist/server/src/server/api-router.d.ts +15 -0
  46. package/dist/server/src/server/api-router.js +111 -0
  47. package/dist/server/src/server/api-router.js.map +1 -0
  48. package/dist/server/src/server/auth.d.ts +32 -0
  49. package/dist/server/src/server/auth.js +80 -0
  50. package/dist/server/src/server/auth.js.map +1 -0
  51. package/dist/server/src/server/database.d.ts +24 -0
  52. package/dist/server/src/server/database.js +135 -0
  53. package/dist/server/src/server/database.js.map +1 -0
  54. package/dist/server/src/server/index.d.ts +54 -0
  55. package/dist/server/src/server/index.js +172 -0
  56. package/dist/server/src/server/index.js.map +1 -0
  57. package/dist/server/src/server/middleware.d.ts +11 -0
  58. package/dist/server/src/server/middleware.js +46 -0
  59. package/dist/server/src/server/middleware.js.map +1 -0
  60. package/dist/server/src/server/server.d.ts +9 -0
  61. package/dist/server/src/server/server.js +87 -0
  62. package/dist/server/src/server/server.js.map +1 -0
  63. package/dist/server/src/server/types.d.ts +38 -0
  64. package/dist/server/src/server/types.js +4 -0
  65. package/dist/server/src/server/types.js.map +1 -0
  66. package/dist/server/src/server/wasm.d.ts +9 -0
  67. package/dist/server/src/server/wasm.js +117 -0
  68. package/dist/server/src/server/wasm.js.map +1 -0
  69. package/dist/server/src/server-renderer.d.ts +5 -0
  70. package/dist/server/src/server-renderer.js +106 -0
  71. package/dist/server/src/server-renderer.js.map +1 -0
  72. package/dist/server/src/server-types.d.ts +42 -0
  73. package/dist/server/src/server-types.js +6 -0
  74. package/dist/server/src/server-types.js.map +1 -0
  75. package/dist/server/src/types.d.ts +19 -0
  76. package/dist/server/src/types.js +2 -0
  77. package/dist/server/src/types.js.map +1 -0
  78. package/dist/server/src/vdom.d.ts +8 -0
  79. package/dist/server/src/vdom.js +22 -0
  80. package/dist/server/src/vdom.js.map +1 -0
  81. package/dist/server/src/wasm.d.ts +36 -0
  82. package/dist/server/src/wasm.js +159 -0
  83. package/dist/server/src/wasm.js.map +1 -0
  84. package/dist/server/tsconfig.server.tsbuildinfo +1 -0
  85. package/dist/server/wasm.d.ts +7 -0
  86. package/dist/server-renderer.js +1 -0
  87. package/dist/server-renderer.mjs +64 -0
  88. package/dist/wasm.d.ts +37 -0
  89. package/dist/wasm.js +1 -0
  90. package/dist/wasm.mjs +103 -0
  91. package/package.json +1 -1
  92. package/templates/go/build.sh +43 -43
  93. package/templates/go-wasm-app/build-wasm.js +84 -84
  94. package/templates/go-wasm-app/package.json +6 -5
  95. package/templates/go-wasm-app/public/index.html +49 -53
  96. package/templates/go-wasm-app/server.js +0 -188
  97. package/dist/index.d.ts +0 -1
  98. package/dist/index.js.map +0 -1
  99. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,105 @@
1
+ function jsx(type, props) {
2
+ console.log('JSX Transform:', { type, props });
3
+ const processedProps = { ...props };
4
+ // Handle children properly
5
+ if (arguments.length > 2) {
6
+ processedProps.children = Array.prototype.slice.call(arguments, 2);
7
+ }
8
+ return { type, props: processedProps };
9
+ }
10
+ const Fragment = ({ children }) => children;
11
+ async function createElement(vnode) {
12
+ console.log('Creating element from:', vnode);
13
+ // Handle primitives and null
14
+ if (vnode == null) {
15
+ return document.createTextNode('');
16
+ }
17
+ if (typeof vnode === 'boolean') {
18
+ return document.createTextNode('');
19
+ }
20
+ if (typeof vnode === 'number' || typeof vnode === 'string') {
21
+ return document.createTextNode(String(vnode));
22
+ }
23
+ // Handle arrays
24
+ if (Array.isArray(vnode)) {
25
+ const fragment = document.createDocumentFragment();
26
+ for (const child of vnode) {
27
+ const node = await createElement(child);
28
+ fragment.appendChild(node);
29
+ }
30
+ return fragment;
31
+ }
32
+ // Handle VNode
33
+ if ('type' in vnode && vnode.props !== undefined) {
34
+ const { type, props } = vnode;
35
+ // Handle function components
36
+ if (typeof type === 'function') {
37
+ try {
38
+ const result = await type(props || {});
39
+ const node = await createElement(result);
40
+ if (node instanceof Element) {
41
+ node.setAttribute('data-component-id', type.name || type.toString());
42
+ }
43
+ return node;
44
+ }
45
+ catch (error) {
46
+ console.error('Error rendering component:', error);
47
+ return document.createTextNode('');
48
+ }
49
+ }
50
+ // Create DOM element
51
+ const element = document.createElement(type);
52
+ // Handle props
53
+ for (const [key, value] of Object.entries(props || {})) {
54
+ if (key === 'children')
55
+ continue;
56
+ if (key.startsWith('on') && typeof value === 'function') {
57
+ const eventName = key.toLowerCase().slice(2);
58
+ // Remove existing event listener if any
59
+ const existingHandler = element.__events?.[eventName];
60
+ if (existingHandler) {
61
+ element.removeEventListener(eventName, existingHandler);
62
+ }
63
+ // Add new event listener
64
+ element.addEventListener(eventName, value);
65
+ if (!element.__events) {
66
+ element.__events = {};
67
+ }
68
+ element.__events[eventName] = value;
69
+ }
70
+ else if (key === 'style' && typeof value === 'object') {
71
+ Object.assign(element.style, value);
72
+ }
73
+ else if (key === 'className') {
74
+ element.setAttribute('class', String(value));
75
+ }
76
+ else if (key !== 'key' && key !== 'ref') {
77
+ element.setAttribute(key, String(value));
78
+ }
79
+ }
80
+ // Handle children
81
+ const children = props?.children;
82
+ if (children != null) {
83
+ const childArray = Array.isArray(children) ? children.flat() : [children];
84
+ for (const child of childArray) {
85
+ const childNode = await createElement(child);
86
+ element.appendChild(childNode);
87
+ }
88
+ }
89
+ return element;
90
+ }
91
+ // Handle other objects by converting to string
92
+ return document.createTextNode(String(vnode));
93
+ }
94
+ // Export named functions and aliases without duplicates
95
+ export { jsx, jsx as jsxs, jsx as jsxDEV, Fragment, createElement };
96
+ // Named exports object
97
+ const jsxRuntime = {
98
+ jsx,
99
+ jsxs: jsx,
100
+ jsxDEV: jsx,
101
+ Fragment,
102
+ createElement
103
+ };
104
+ export default jsxRuntime;
105
+ //# sourceMappingURL=jsx-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../../../src/jsx-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Helper function to render a component to a string
3
+ * Used by the server for SSR
4
+ */
5
+ export declare function renderComponent(Component: any, props?: any): Promise<{
6
+ html: string;
7
+ success: boolean;
8
+ error?: undefined;
9
+ } | {
10
+ html: string;
11
+ success: boolean;
12
+ error: unknown;
13
+ }>;
14
+ export default renderComponent;
@@ -0,0 +1,25 @@
1
+ import { renderToString } from './server-renderer.js';
2
+ /**
3
+ * Helper function to render a component to a string
4
+ * Used by the server for SSR
5
+ */
6
+ export async function renderComponent(Component, props = {}) {
7
+ try {
8
+ // Create HTML string from component
9
+ const html = renderToString(Component(props));
10
+ return {
11
+ html,
12
+ success: true
13
+ };
14
+ }
15
+ catch (error) {
16
+ console.error('Error rendering component:', error);
17
+ return {
18
+ html: `<div class="error">Error rendering component</div>`,
19
+ success: false,
20
+ error
21
+ };
22
+ }
23
+ }
24
+ export default renderComponent;
25
+ //# sourceMappingURL=renderComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderComponent.js","sourceRoot":"","sources":["../../../src/renderComponent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAc,EAAE,QAAa,EAAE;IACnE,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO;YACL,IAAI,EAAE,oDAAoD;YAC1D,OAAO,EAAE,KAAK;YACd,KAAK;SACN,CAAC;IACJ,CAAC;AACH,CAAC;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function hydrate(element: any, container: HTMLElement): Promise<void>;
2
+ export declare function render(element: any, container: HTMLElement): Promise<void>;
@@ -0,0 +1,31 @@
1
+ import { createElement } from './jsx-runtime.js';
2
+ import { prepareRender, finishRender, setRenderCallback } from './hooks.js';
3
+ import { batchUpdates } from './batch.js';
4
+ let isHydrating = false;
5
+ export async function hydrate(element, container) {
6
+ isHydrating = true;
7
+ try {
8
+ await render(element, container);
9
+ }
10
+ finally {
11
+ isHydrating = false;
12
+ }
13
+ }
14
+ export async function render(element, container) {
15
+ console.log('Rendering to:', container.id);
16
+ batchUpdates(async () => {
17
+ const rendererId = prepareRender();
18
+ try {
19
+ setRenderCallback(render, element, container);
20
+ const domNode = await createElement(element);
21
+ if (!isHydrating) {
22
+ container.innerHTML = '';
23
+ }
24
+ container.appendChild(domNode);
25
+ }
26
+ finally {
27
+ finishRender();
28
+ }
29
+ });
30
+ }
31
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAY,EAAE,SAAsB;IAChE,WAAW,GAAG,IAAI,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAY,EAAE,SAAsB;IAC/D,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAE3C,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAE7C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;YAC3B,CAAC;YACD,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEjC,CAAC;gBAAS,CAAC;YACT,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Router } from 'express';
2
+ import { AuthService } from './auth.js';
3
+ export declare class ApiRouter {
4
+ router: Router;
5
+ private apiDir;
6
+ private auth;
7
+ constructor(apiDir: string, auth?: AuthService | null);
8
+ private setupRoutes;
9
+ private scanDirectory;
10
+ private isRouteFile;
11
+ private getRoutePath;
12
+ private registerRoute;
13
+ private isValidRouteModule;
14
+ private wrapHandler;
15
+ }
@@ -0,0 +1,111 @@
1
+ import express from 'express';
2
+ import path from 'path';
3
+ import fs from 'fs';
4
+ export class ApiRouter {
5
+ constructor(apiDir, auth = null) {
6
+ Object.defineProperty(this, "router", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: void 0
11
+ });
12
+ Object.defineProperty(this, "apiDir", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: void 0
17
+ });
18
+ Object.defineProperty(this, "auth", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: void 0
23
+ });
24
+ this.router = express.Router();
25
+ this.apiDir = path.resolve(process.cwd(), apiDir);
26
+ this.auth = auth;
27
+ this.setupRoutes();
28
+ }
29
+ setupRoutes() {
30
+ if (!fs.existsSync(this.apiDir)) {
31
+ console.log(`API directory not found: ${this.apiDir}`);
32
+ return;
33
+ }
34
+ this.scanDirectory(this.apiDir, '');
35
+ }
36
+ scanDirectory(dirPath, routePrefix) {
37
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
38
+ for (const entry of entries) {
39
+ const fullPath = path.join(dirPath, entry.name);
40
+ if (entry.isDirectory()) {
41
+ // Recursively scan subdirectories
42
+ this.scanDirectory(fullPath, `${routePrefix}/${entry.name}`);
43
+ }
44
+ else if (this.isRouteFile(entry.name)) {
45
+ // Process route file
46
+ const routePath = this.getRoutePath(entry.name, routePrefix);
47
+ this.registerRoute(fullPath, routePath);
48
+ }
49
+ }
50
+ }
51
+ isRouteFile(filename) {
52
+ return filename.endsWith('.js') ||
53
+ filename.endsWith('.ts') ||
54
+ filename.endsWith('.mjs');
55
+ }
56
+ getRoutePath(filename, routePrefix) {
57
+ // Remove extension and handle special names
58
+ const baseName = path.basename(filename, path.extname(filename));
59
+ if (baseName === 'index') {
60
+ return routePrefix || '/';
61
+ }
62
+ // Handle dynamic routes [param]
63
+ const paramMatch = baseName.match(/^\[(.+)\]$/);
64
+ if (paramMatch) {
65
+ return `${routePrefix}/:${paramMatch[1]}`;
66
+ }
67
+ return `${routePrefix}/${baseName}`;
68
+ }
69
+ async registerRoute(filePath, routePath) {
70
+ try {
71
+ // Dynamic import the route file
72
+ const routeModule = await import(filePath);
73
+ if (!this.isValidRouteModule(routeModule)) {
74
+ console.warn(`Invalid route module: ${filePath}`);
75
+ return;
76
+ }
77
+ console.log(`Registering API route: ${routePath}`);
78
+ // Register middleware if any
79
+ const middleware = routeModule.middleware || [];
80
+ // Register HTTP methods
81
+ for (const method of ['get', 'post', 'put', 'delete', 'patch', 'options']) {
82
+ const handler = routeModule[method];
83
+ if (typeof handler === 'function') {
84
+ const routerMethod = this.router[method];
85
+ routerMethod(routePath, ...middleware, this.wrapHandler(handler));
86
+ }
87
+ }
88
+ }
89
+ catch (error) {
90
+ console.error(`Error registering route (${filePath}):`, error);
91
+ }
92
+ }
93
+ isValidRouteModule(module) {
94
+ if (!module)
95
+ return false;
96
+ // Check if at least one HTTP method handler is defined
97
+ return ['get', 'post', 'put', 'delete', 'patch', 'options']
98
+ .some(method => typeof module[method] === 'function');
99
+ }
100
+ wrapHandler(handler) {
101
+ return async (req, res, next) => {
102
+ try {
103
+ await handler(req, res, next);
104
+ }
105
+ catch (error) {
106
+ next(error);
107
+ }
108
+ };
109
+ }
110
+ }
111
+ //# sourceMappingURL=api-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-router.js","sourceRoot":"","sources":["../../../../src/server/api-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { SignOptions } from 'jsonwebtoken';
2
+ import { Request, Response, NextFunction } from 'express';
3
+ export interface AuthConfig {
4
+ secret: string;
5
+ expiresIn?: SignOptions['expiresIn'];
6
+ }
7
+ export interface User {
8
+ id: string | number;
9
+ username: string;
10
+ password?: string;
11
+ email?: string;
12
+ roles?: string[];
13
+ [key: string]: any;
14
+ }
15
+ export declare class AuthService {
16
+ private config;
17
+ constructor(config: AuthConfig);
18
+ hashPassword(password: string): Promise<string>;
19
+ comparePasswords(password: string, hashedPassword: string): Promise<boolean>;
20
+ generateToken(user: Omit<User, 'password'>): string;
21
+ verifyToken(token: string): any;
22
+ initialize(): (req: Request & {
23
+ user?: any;
24
+ }, res: Response, next: NextFunction) => void;
25
+ requireAuth(): (req: Request & {
26
+ user?: any;
27
+ }, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
28
+ requireRoles(roles: string[]): (req: Request & {
29
+ user?: any;
30
+ }, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
31
+ private extractToken;
32
+ }
@@ -0,0 +1,80 @@
1
+ import jwt from 'jsonwebtoken';
2
+ import bcrypt from 'bcryptjs';
3
+ export class AuthService {
4
+ constructor(config) {
5
+ Object.defineProperty(this, "config", {
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true,
9
+ value: void 0
10
+ });
11
+ this.config = {
12
+ expiresIn: '24h',
13
+ ...config
14
+ };
15
+ }
16
+ async hashPassword(password) {
17
+ return bcrypt.hash(password, 10);
18
+ }
19
+ async comparePasswords(password, hashedPassword) {
20
+ return bcrypt.compare(password, hashedPassword);
21
+ }
22
+ generateToken(user) {
23
+ const options = {};
24
+ if (this.config.expiresIn) {
25
+ options.expiresIn = this.config.expiresIn;
26
+ }
27
+ return jwt.sign({ id: user.id, username: user.username, roles: user.roles || [] }, this.config.secret, options);
28
+ }
29
+ verifyToken(token) {
30
+ try {
31
+ return jwt.verify(token, this.config.secret);
32
+ }
33
+ catch (error) {
34
+ return null;
35
+ }
36
+ }
37
+ // Express middleware for authentication
38
+ initialize() {
39
+ return (req, res, next) => {
40
+ const token = this.extractToken(req);
41
+ if (token) {
42
+ const decoded = this.verifyToken(token);
43
+ if (decoded) {
44
+ req.user = decoded;
45
+ }
46
+ }
47
+ next();
48
+ };
49
+ }
50
+ // Express middleware for requiring authentication
51
+ requireAuth() {
52
+ return (req, res, next) => {
53
+ if (!req.user) {
54
+ return res.status(401).json({ message: 'Unauthorized' });
55
+ }
56
+ return next();
57
+ };
58
+ }
59
+ // Express middleware for requiring specific roles
60
+ requireRoles(roles) {
61
+ return (req, res, next) => {
62
+ if (!req.user) {
63
+ return res.status(401).json({ message: 'Unauthorized' });
64
+ }
65
+ const userRoles = req.user.roles || [];
66
+ const hasRequiredRole = roles.some(role => userRoles.includes(role));
67
+ if (!hasRequiredRole) {
68
+ return res.status(403).json({ message: 'Forbidden' });
69
+ }
70
+ return next();
71
+ };
72
+ }
73
+ extractToken(req) {
74
+ if (req.headers.authorization && req.headers.authorization.startsWith('Bearer ')) {
75
+ return req.headers.authorization.substring(7);
76
+ }
77
+ return null;
78
+ }
79
+ }
80
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/server/auth.ts"],"names":[],"mappings":"AAAA,OAAO,GAAoB,MAAM,cAAc,CAAC;AAChD,OAAO,MAAM,MAAM,UAAU,CAAC;AAiB9B,MAAM,OAAO,WAAW;IAGtB,YAAY,MAAkB;QAFtB;;;;;WAAmB;QAGzB,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,KAAK;YAChB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,cAAsB;QAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,aAAa,CAAC,IAA4B;QACxC,MAAM,OAAO,GAAgB,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAC5C,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,CACb,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,EACjE,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,OAAO,CACR,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,UAAU;QACR,OAAO,CAAC,GAA6B,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,OAAO,EAAE,CAAC;oBACZ,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;gBACrB,CAAC;YACH,CAAC;YACD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,WAAW;QACT,OAAO,CAAC,GAA6B,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YAC1E,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;IAED,kDAAkD;IAClD,YAAY,CAAC,KAAe;QAC1B,OAAO,CAAC,GAA6B,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;YAC1E,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAErE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,GAAY;QAC/B,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjF,OAAO,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import { Db } from 'mongodb';
2
+ import mysql from 'mysql2/promise';
3
+ import pg from 'pg';
4
+ export interface DbConfig {
5
+ url: string;
6
+ type: 'mongodb' | 'mysql' | 'postgres';
7
+ }
8
+ export declare class Database {
9
+ private config;
10
+ private mongoClient;
11
+ private mongoDb;
12
+ private mysqlPool;
13
+ private pgPool;
14
+ constructor(config: DbConfig);
15
+ connect(): Promise<void>;
16
+ private connectMongo;
17
+ private connectMysql;
18
+ private connectPostgres;
19
+ disconnect(): Promise<void>;
20
+ getMongoDb(): Db | null;
21
+ getMysqlPool(): mysql.Pool | null;
22
+ getPgPool(): pg.Pool | null;
23
+ query(sql: string, values?: any[]): Promise<any>;
24
+ }
@@ -0,0 +1,135 @@
1
+ import { MongoClient } from 'mongodb';
2
+ import mysql from 'mysql2/promise';
3
+ import pg from 'pg';
4
+ export class Database {
5
+ constructor(config) {
6
+ Object.defineProperty(this, "config", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: void 0
11
+ });
12
+ Object.defineProperty(this, "mongoClient", {
13
+ enumerable: true,
14
+ configurable: true,
15
+ writable: true,
16
+ value: null
17
+ });
18
+ Object.defineProperty(this, "mongoDb", {
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true,
22
+ value: null
23
+ });
24
+ Object.defineProperty(this, "mysqlPool", {
25
+ enumerable: true,
26
+ configurable: true,
27
+ writable: true,
28
+ value: null
29
+ });
30
+ Object.defineProperty(this, "pgPool", {
31
+ enumerable: true,
32
+ configurable: true,
33
+ writable: true,
34
+ value: null
35
+ });
36
+ this.config = config;
37
+ }
38
+ async connect() {
39
+ switch (this.config.type) {
40
+ case 'mongodb':
41
+ await this.connectMongo();
42
+ break;
43
+ case 'mysql':
44
+ await this.connectMysql();
45
+ break;
46
+ case 'postgres':
47
+ await this.connectPostgres();
48
+ break;
49
+ default:
50
+ throw new Error(`Unsupported database type: ${this.config.type}`);
51
+ }
52
+ }
53
+ async connectMongo() {
54
+ try {
55
+ this.mongoClient = new MongoClient(this.config.url);
56
+ await this.mongoClient.connect();
57
+ this.mongoDb = this.mongoClient.db();
58
+ console.log('Connected to MongoDB');
59
+ }
60
+ catch (error) {
61
+ console.error('MongoDB connection error:', error);
62
+ throw error;
63
+ }
64
+ }
65
+ async connectMysql() {
66
+ try {
67
+ this.mysqlPool = mysql.createPool(this.config.url);
68
+ // Test connection
69
+ await this.mysqlPool.getConnection();
70
+ console.log('Connected to MySQL');
71
+ }
72
+ catch (error) {
73
+ console.error('MySQL connection error:', error);
74
+ throw error;
75
+ }
76
+ }
77
+ async connectPostgres() {
78
+ try {
79
+ this.pgPool = new pg.Pool({ connectionString: this.config.url });
80
+ // Test connection
81
+ const client = await this.pgPool.connect();
82
+ client.release();
83
+ console.log('Connected to PostgreSQL');
84
+ }
85
+ catch (error) {
86
+ console.error('PostgreSQL connection error:', error);
87
+ throw error;
88
+ }
89
+ }
90
+ async disconnect() {
91
+ if (this.mongoClient) {
92
+ await this.mongoClient.close();
93
+ this.mongoClient = null;
94
+ this.mongoDb = null;
95
+ }
96
+ if (this.mysqlPool) {
97
+ await this.mysqlPool.end();
98
+ this.mysqlPool = null;
99
+ }
100
+ if (this.pgPool) {
101
+ await this.pgPool.end();
102
+ this.pgPool = null;
103
+ }
104
+ }
105
+ // Database-specific methods
106
+ getMongoDb() {
107
+ return this.mongoDb;
108
+ }
109
+ getMysqlPool() {
110
+ return this.mysqlPool;
111
+ }
112
+ getPgPool() {
113
+ return this.pgPool;
114
+ }
115
+ // Generic query method
116
+ async query(sql, values) {
117
+ switch (this.config.type) {
118
+ case 'mongodb':
119
+ throw new Error('For MongoDB, use getMongoDb() instead of query()');
120
+ case 'mysql':
121
+ if (!this.mysqlPool)
122
+ throw new Error('MySQL not connected');
123
+ const [rows] = await this.mysqlPool.execute(sql, values || []);
124
+ return rows;
125
+ case 'postgres':
126
+ if (!this.pgPool)
127
+ throw new Error('PostgreSQL not connected');
128
+ const result = await this.pgPool.query(sql, values || []);
129
+ return result.rows;
130
+ default:
131
+ throw new Error(`Unsupported database type: ${this.config.type}`);
132
+ }
133
+ }
134
+ }
135
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../src/server/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAM,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,MAAM,IAAI,CAAC;AAOpB,MAAM,OAAO,QAAQ;IAOnB,YAAY,MAAgB;QANpB;;;;;WAAiB;QACjB;;;;mBAAkC,IAAI;WAAC;QACvC;;;;mBAAqB,IAAI;WAAC;QAC1B;;;;mBAA+B,IAAI;WAAC;QACpC;;;;mBAAyB,IAAI;WAAC;QAGpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,SAAS;gBACZ,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1B,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1B,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC7B,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpD,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnD,kBAAkB;YAClB,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACjE,kBAAkB;YAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3C,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,uBAAuB;IACvB,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,MAAc;QACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,SAAS;gBACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACtE,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC;YACd,KAAK,UAAU;gBACb,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;gBAC1D,OAAO,MAAM,CAAC,IAAI,CAAC;YACrB;gBACE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;CACF"}