digitaltwin-core 0.14.0 → 0.14.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 (170) hide show
  1. package/README.md +2 -2
  2. package/package.json +102 -106
  3. package/dist/auth/apisix_parser.d.ts +0 -146
  4. package/dist/auth/apisix_parser.d.ts.map +0 -1
  5. package/dist/auth/apisix_parser.js +0 -185
  6. package/dist/auth/apisix_parser.js.map +0 -1
  7. package/dist/auth/auth_config.d.ts +0 -126
  8. package/dist/auth/auth_config.d.ts.map +0 -1
  9. package/dist/auth/auth_config.js +0 -169
  10. package/dist/auth/auth_config.js.map +0 -1
  11. package/dist/auth/index.d.ts +0 -5
  12. package/dist/auth/index.d.ts.map +0 -1
  13. package/dist/auth/index.js +0 -4
  14. package/dist/auth/index.js.map +0 -1
  15. package/dist/auth/types.d.ts +0 -100
  16. package/dist/auth/types.d.ts.map +0 -1
  17. package/dist/auth/types.js +0 -2
  18. package/dist/auth/types.js.map +0 -1
  19. package/dist/auth/user_service.d.ts +0 -86
  20. package/dist/auth/user_service.d.ts.map +0 -1
  21. package/dist/auth/user_service.js +0 -237
  22. package/dist/auth/user_service.js.map +0 -1
  23. package/dist/components/assets_manager.d.ts +0 -662
  24. package/dist/components/assets_manager.d.ts.map +0 -1
  25. package/dist/components/assets_manager.js +0 -1529
  26. package/dist/components/assets_manager.js.map +0 -1
  27. package/dist/components/async_upload.d.ts +0 -20
  28. package/dist/components/async_upload.d.ts.map +0 -1
  29. package/dist/components/async_upload.js +0 -10
  30. package/dist/components/async_upload.js.map +0 -1
  31. package/dist/components/collector.d.ts +0 -203
  32. package/dist/components/collector.d.ts.map +0 -1
  33. package/dist/components/collector.js +0 -202
  34. package/dist/components/collector.js.map +0 -1
  35. package/dist/components/custom_table_manager.d.ts +0 -503
  36. package/dist/components/custom_table_manager.d.ts.map +0 -1
  37. package/dist/components/custom_table_manager.js +0 -1052
  38. package/dist/components/custom_table_manager.js.map +0 -1
  39. package/dist/components/global_assets_handler.d.ts +0 -63
  40. package/dist/components/global_assets_handler.d.ts.map +0 -1
  41. package/dist/components/global_assets_handler.js +0 -127
  42. package/dist/components/global_assets_handler.js.map +0 -1
  43. package/dist/components/handler.d.ts +0 -104
  44. package/dist/components/handler.d.ts.map +0 -1
  45. package/dist/components/handler.js +0 -110
  46. package/dist/components/handler.js.map +0 -1
  47. package/dist/components/harvester.d.ts +0 -182
  48. package/dist/components/harvester.d.ts.map +0 -1
  49. package/dist/components/harvester.js +0 -393
  50. package/dist/components/harvester.js.map +0 -1
  51. package/dist/components/index.d.ts +0 -11
  52. package/dist/components/index.d.ts.map +0 -1
  53. package/dist/components/index.js +0 -9
  54. package/dist/components/index.js.map +0 -1
  55. package/dist/components/interfaces.d.ts +0 -126
  56. package/dist/components/interfaces.d.ts.map +0 -1
  57. package/dist/components/interfaces.js +0 -8
  58. package/dist/components/interfaces.js.map +0 -1
  59. package/dist/components/map_manager.d.ts +0 -61
  60. package/dist/components/map_manager.d.ts.map +0 -1
  61. package/dist/components/map_manager.js +0 -242
  62. package/dist/components/map_manager.js.map +0 -1
  63. package/dist/components/tileset_manager.d.ts +0 -125
  64. package/dist/components/tileset_manager.d.ts.map +0 -1
  65. package/dist/components/tileset_manager.js +0 -618
  66. package/dist/components/tileset_manager.js.map +0 -1
  67. package/dist/components/types.d.ts +0 -226
  68. package/dist/components/types.d.ts.map +0 -1
  69. package/dist/components/types.js +0 -8
  70. package/dist/components/types.js.map +0 -1
  71. package/dist/database/adapters/knex_database_adapter.d.ts +0 -92
  72. package/dist/database/adapters/knex_database_adapter.d.ts.map +0 -1
  73. package/dist/database/adapters/knex_database_adapter.js +0 -647
  74. package/dist/database/adapters/knex_database_adapter.js.map +0 -1
  75. package/dist/database/database_adapter.d.ts +0 -251
  76. package/dist/database/database_adapter.d.ts.map +0 -1
  77. package/dist/database/database_adapter.js +0 -46
  78. package/dist/database/database_adapter.js.map +0 -1
  79. package/dist/engine/digital_twin_engine.d.ts +0 -253
  80. package/dist/engine/digital_twin_engine.d.ts.map +0 -1
  81. package/dist/engine/digital_twin_engine.js +0 -790
  82. package/dist/engine/digital_twin_engine.js.map +0 -1
  83. package/dist/engine/endpoints.d.ts +0 -47
  84. package/dist/engine/endpoints.d.ts.map +0 -1
  85. package/dist/engine/endpoints.js +0 -56
  86. package/dist/engine/endpoints.js.map +0 -1
  87. package/dist/engine/events.d.ts +0 -93
  88. package/dist/engine/events.d.ts.map +0 -1
  89. package/dist/engine/events.js +0 -71
  90. package/dist/engine/events.js.map +0 -1
  91. package/dist/engine/initializer.d.ts +0 -62
  92. package/dist/engine/initializer.d.ts.map +0 -1
  93. package/dist/engine/initializer.js +0 -108
  94. package/dist/engine/initializer.js.map +0 -1
  95. package/dist/engine/queue_manager.d.ts +0 -87
  96. package/dist/engine/queue_manager.d.ts.map +0 -1
  97. package/dist/engine/queue_manager.js +0 -196
  98. package/dist/engine/queue_manager.js.map +0 -1
  99. package/dist/engine/scheduler.d.ts +0 -30
  100. package/dist/engine/scheduler.d.ts.map +0 -1
  101. package/dist/engine/scheduler.js +0 -370
  102. package/dist/engine/scheduler.js.map +0 -1
  103. package/dist/engine/upload_processor.d.ts +0 -36
  104. package/dist/engine/upload_processor.d.ts.map +0 -1
  105. package/dist/engine/upload_processor.js +0 -101
  106. package/dist/engine/upload_processor.js.map +0 -1
  107. package/dist/env/env.d.ts +0 -134
  108. package/dist/env/env.d.ts.map +0 -1
  109. package/dist/env/env.js +0 -177
  110. package/dist/env/env.js.map +0 -1
  111. package/dist/index.d.ts +0 -49
  112. package/dist/index.d.ts.map +0 -1
  113. package/dist/index.js +0 -57
  114. package/dist/index.js.map +0 -1
  115. package/dist/openapi/generator.d.ts +0 -93
  116. package/dist/openapi/generator.d.ts.map +0 -1
  117. package/dist/openapi/generator.js +0 -293
  118. package/dist/openapi/generator.js.map +0 -1
  119. package/dist/openapi/index.d.ts +0 -9
  120. package/dist/openapi/index.d.ts.map +0 -1
  121. package/dist/openapi/index.js +0 -9
  122. package/dist/openapi/index.js.map +0 -1
  123. package/dist/openapi/types.d.ts +0 -182
  124. package/dist/openapi/types.d.ts.map +0 -1
  125. package/dist/openapi/types.js +0 -16
  126. package/dist/openapi/types.js.map +0 -1
  127. package/dist/storage/adapters/local_storage_service.d.ts +0 -51
  128. package/dist/storage/adapters/local_storage_service.d.ts.map +0 -1
  129. package/dist/storage/adapters/local_storage_service.js +0 -110
  130. package/dist/storage/adapters/local_storage_service.js.map +0 -1
  131. package/dist/storage/adapters/ovh_storage_service.d.ts +0 -72
  132. package/dist/storage/adapters/ovh_storage_service.d.ts.map +0 -1
  133. package/dist/storage/adapters/ovh_storage_service.js +0 -206
  134. package/dist/storage/adapters/ovh_storage_service.js.map +0 -1
  135. package/dist/storage/storage_factory.d.ts +0 -14
  136. package/dist/storage/storage_factory.d.ts.map +0 -1
  137. package/dist/storage/storage_factory.js +0 -40
  138. package/dist/storage/storage_factory.js.map +0 -1
  139. package/dist/storage/storage_service.d.ts +0 -163
  140. package/dist/storage/storage_service.d.ts.map +0 -1
  141. package/dist/storage/storage_service.js +0 -54
  142. package/dist/storage/storage_service.js.map +0 -1
  143. package/dist/types/data_record.d.ts +0 -123
  144. package/dist/types/data_record.d.ts.map +0 -1
  145. package/dist/types/data_record.js +0 -8
  146. package/dist/types/data_record.js.map +0 -1
  147. package/dist/utils/http_responses.d.ts +0 -155
  148. package/dist/utils/http_responses.d.ts.map +0 -1
  149. package/dist/utils/http_responses.js +0 -190
  150. package/dist/utils/http_responses.js.map +0 -1
  151. package/dist/utils/index.d.ts +0 -8
  152. package/dist/utils/index.d.ts.map +0 -1
  153. package/dist/utils/index.js +0 -6
  154. package/dist/utils/index.js.map +0 -1
  155. package/dist/utils/logger.d.ts +0 -74
  156. package/dist/utils/logger.d.ts.map +0 -1
  157. package/dist/utils/logger.js +0 -92
  158. package/dist/utils/logger.js.map +0 -1
  159. package/dist/utils/map_to_data_record.d.ts +0 -10
  160. package/dist/utils/map_to_data_record.d.ts.map +0 -1
  161. package/dist/utils/map_to_data_record.js +0 -36
  162. package/dist/utils/map_to_data_record.js.map +0 -1
  163. package/dist/utils/servable_endpoint.d.ts +0 -63
  164. package/dist/utils/servable_endpoint.d.ts.map +0 -1
  165. package/dist/utils/servable_endpoint.js +0 -67
  166. package/dist/utils/servable_endpoint.js.map +0 -1
  167. package/dist/utils/zip_utils.d.ts +0 -66
  168. package/dist/utils/zip_utils.d.ts.map +0 -1
  169. package/dist/utils/zip_utils.js +0 -169
  170. package/dist/utils/zip_utils.js.map +0 -1
@@ -1,126 +0,0 @@
1
- /**
2
- * Authentication configuration for Digital Twin framework.
3
- *
4
- * Controls whether authentication is required for components that support it.
5
- * When authentication is disabled, all requests are treated as authenticated
6
- * with a default anonymous user.
7
- *
8
- * Environment variables:
9
- * - DIGITALTWIN_DISABLE_AUTH: Set to "true" or "1" to disable authentication (default: false)
10
- * - DIGITALTWIN_ANONYMOUS_USER_ID: User ID to use when auth is disabled (default: "anonymous")
11
- * - DIGITALTWIN_ADMIN_ROLE_NAME: Name of the admin role in Keycloak (default: "admin")
12
- *
13
- * @example
14
- * ```bash
15
- * # Disable authentication for development
16
- * export DIGITALTWIN_DISABLE_AUTH=true
17
- * export DIGITALTWIN_ANONYMOUS_USER_ID=dev-user-123
18
- *
19
- * # Configure admin role name
20
- * export DIGITALTWIN_ADMIN_ROLE_NAME=administrator
21
- *
22
- * # Enable authentication (default)
23
- * export DIGITALTWIN_DISABLE_AUTH=false
24
- * ```
25
- *
26
- * @example
27
- * ```typescript
28
- * import { AuthConfig } from './auth_config.js'
29
- *
30
- * if (AuthConfig.isAuthDisabled()) {
31
- * console.log('Authentication is disabled')
32
- * const anonymousUser = AuthConfig.getAnonymousUser()
33
- * console.log(`Using anonymous user: ${anonymousUser.id}`)
34
- * }
35
- *
36
- * const adminRole = AuthConfig.getAdminRoleName()
37
- * console.log(`Admin role is: ${adminRole}`)
38
- * ```
39
- */
40
- export declare class AuthConfig {
41
- private static _config;
42
- /**
43
- * Loads and validates authentication configuration from environment variables.
44
- * This is called automatically the first time any method is used.
45
- */
46
- private static loadConfig;
47
- /**
48
- * Gets the loaded configuration, ensuring it's initialized.
49
- * @private
50
- */
51
- private static getConfig;
52
- /**
53
- * Checks if authentication is disabled via environment variables.
54
- *
55
- * @returns true if DIGITALTWIN_DISABLE_AUTH is set to "true" or "1", false otherwise
56
- *
57
- * @example
58
- * ```typescript
59
- * if (AuthConfig.isAuthDisabled()) {
60
- * console.log('Running in no-auth mode')
61
- * }
62
- * ```
63
- */
64
- static isAuthDisabled(): boolean;
65
- /**
66
- * Checks if authentication is enabled (opposite of isAuthDisabled).
67
- *
68
- * @returns true if authentication should be enforced, false otherwise
69
- */
70
- static isAuthEnabled(): boolean;
71
- /**
72
- * Gets the anonymous user ID to use when authentication is disabled.
73
- *
74
- * @returns The user ID configured for anonymous access
75
- *
76
- * @example
77
- * ```typescript
78
- * const userId = AuthConfig.getAnonymousUserId()
79
- * console.log(`Anonymous user ID: ${userId}`) // "anonymous" by default
80
- * ```
81
- */
82
- static getAnonymousUserId(): string;
83
- /**
84
- * Gets a fake authenticated user object for anonymous access.
85
- *
86
- * @returns An AuthenticatedUser object representing the anonymous user
87
- *
88
- * @example
89
- * ```typescript
90
- * import type { AuthenticatedUser } from './types.js'
91
- *
92
- * const anonymousUser: AuthenticatedUser = AuthConfig.getAnonymousUser()
93
- * console.log(anonymousUser) // { id: "anonymous", roles: ["anonymous"] }
94
- * ```
95
- */
96
- static getAnonymousUser(): {
97
- id: string;
98
- roles: string[];
99
- };
100
- /**
101
- * Gets the name of the admin role configured for the system.
102
- *
103
- * This role name is used to determine if a user has full administrative
104
- * access to all resources, including private assets owned by other users.
105
- *
106
- * @returns The admin role name (default: "admin")
107
- *
108
- * @example
109
- * ```typescript
110
- * const adminRole = AuthConfig.getAdminRoleName()
111
- * console.log(`Admin role: ${adminRole}`) // "admin" by default
112
- *
113
- * // Check if user has admin role
114
- * const userRoles = ['user', 'admin', 'moderator']
115
- * const isAdmin = userRoles.includes(adminRole)
116
- * ```
117
- */
118
- static getAdminRoleName(): string;
119
- /**
120
- * Resets the cached configuration (useful for testing).
121
- *
122
- * @private
123
- */
124
- static _resetConfig(): void;
125
- }
126
- //# sourceMappingURL=auth_config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth_config.d.ts","sourceRoot":"","sources":["../../src/auth/auth_config.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAC,OAAO,CAIP;IAEf;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAqCzB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAQxB;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,cAAc,IAAI,OAAO;IAIhC;;;;OAIG;IACH,MAAM,CAAC,aAAa,IAAI,OAAO;IAI/B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM;IAInC;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,gBAAgB;;;;IAOvB;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;IAIjC;;;;OAIG;IACH,MAAM,CAAC,YAAY;CAGtB"}
@@ -1,169 +0,0 @@
1
- import { Env } from '../env/env.js';
2
- /**
3
- * Authentication configuration for Digital Twin framework.
4
- *
5
- * Controls whether authentication is required for components that support it.
6
- * When authentication is disabled, all requests are treated as authenticated
7
- * with a default anonymous user.
8
- *
9
- * Environment variables:
10
- * - DIGITALTWIN_DISABLE_AUTH: Set to "true" or "1" to disable authentication (default: false)
11
- * - DIGITALTWIN_ANONYMOUS_USER_ID: User ID to use when auth is disabled (default: "anonymous")
12
- * - DIGITALTWIN_ADMIN_ROLE_NAME: Name of the admin role in Keycloak (default: "admin")
13
- *
14
- * @example
15
- * ```bash
16
- * # Disable authentication for development
17
- * export DIGITALTWIN_DISABLE_AUTH=true
18
- * export DIGITALTWIN_ANONYMOUS_USER_ID=dev-user-123
19
- *
20
- * # Configure admin role name
21
- * export DIGITALTWIN_ADMIN_ROLE_NAME=administrator
22
- *
23
- * # Enable authentication (default)
24
- * export DIGITALTWIN_DISABLE_AUTH=false
25
- * ```
26
- *
27
- * @example
28
- * ```typescript
29
- * import { AuthConfig } from './auth_config.js'
30
- *
31
- * if (AuthConfig.isAuthDisabled()) {
32
- * console.log('Authentication is disabled')
33
- * const anonymousUser = AuthConfig.getAnonymousUser()
34
- * console.log(`Using anonymous user: ${anonymousUser.id}`)
35
- * }
36
- *
37
- * const adminRole = AuthConfig.getAdminRoleName()
38
- * console.log(`Admin role is: ${adminRole}`)
39
- * ```
40
- */
41
- export class AuthConfig {
42
- static { this._config = null; }
43
- /**
44
- * Loads and validates authentication configuration from environment variables.
45
- * This is called automatically the first time any method is used.
46
- */
47
- static loadConfig() {
48
- if (this._config !== null)
49
- return;
50
- const config = Env.validate({
51
- DIGITALTWIN_DISABLE_AUTH: Env.schema.boolean({
52
- optional: true,
53
- default: false
54
- }),
55
- DIGITALTWIN_ANONYMOUS_USER_ID: Env.schema.string({
56
- optional: true
57
- }),
58
- DIGITALTWIN_ADMIN_ROLE_NAME: Env.schema.string({
59
- optional: true
60
- })
61
- });
62
- // Set default anonymous user ID if not provided
63
- if (!config.DIGITALTWIN_ANONYMOUS_USER_ID) {
64
- config.DIGITALTWIN_ANONYMOUS_USER_ID = 'anonymous';
65
- }
66
- // Set default admin role name if not provided
67
- if (!config.DIGITALTWIN_ADMIN_ROLE_NAME) {
68
- config.DIGITALTWIN_ADMIN_ROLE_NAME = 'admin';
69
- }
70
- this._config = config;
71
- }
72
- /**
73
- * Gets the loaded configuration, ensuring it's initialized.
74
- * @private
75
- */
76
- static getConfig() {
77
- this.loadConfig();
78
- if (this._config === null) {
79
- throw new Error('Failed to load authentication configuration');
80
- }
81
- return this._config;
82
- }
83
- /**
84
- * Checks if authentication is disabled via environment variables.
85
- *
86
- * @returns true if DIGITALTWIN_DISABLE_AUTH is set to "true" or "1", false otherwise
87
- *
88
- * @example
89
- * ```typescript
90
- * if (AuthConfig.isAuthDisabled()) {
91
- * console.log('Running in no-auth mode')
92
- * }
93
- * ```
94
- */
95
- static isAuthDisabled() {
96
- return this.getConfig().DIGITALTWIN_DISABLE_AUTH;
97
- }
98
- /**
99
- * Checks if authentication is enabled (opposite of isAuthDisabled).
100
- *
101
- * @returns true if authentication should be enforced, false otherwise
102
- */
103
- static isAuthEnabled() {
104
- return !this.isAuthDisabled();
105
- }
106
- /**
107
- * Gets the anonymous user ID to use when authentication is disabled.
108
- *
109
- * @returns The user ID configured for anonymous access
110
- *
111
- * @example
112
- * ```typescript
113
- * const userId = AuthConfig.getAnonymousUserId()
114
- * console.log(`Anonymous user ID: ${userId}`) // "anonymous" by default
115
- * ```
116
- */
117
- static getAnonymousUserId() {
118
- return this.getConfig().DIGITALTWIN_ANONYMOUS_USER_ID;
119
- }
120
- /**
121
- * Gets a fake authenticated user object for anonymous access.
122
- *
123
- * @returns An AuthenticatedUser object representing the anonymous user
124
- *
125
- * @example
126
- * ```typescript
127
- * import type { AuthenticatedUser } from './types.js'
128
- *
129
- * const anonymousUser: AuthenticatedUser = AuthConfig.getAnonymousUser()
130
- * console.log(anonymousUser) // { id: "anonymous", roles: ["anonymous"] }
131
- * ```
132
- */
133
- static getAnonymousUser() {
134
- return {
135
- id: this.getAnonymousUserId(),
136
- roles: ['anonymous']
137
- };
138
- }
139
- /**
140
- * Gets the name of the admin role configured for the system.
141
- *
142
- * This role name is used to determine if a user has full administrative
143
- * access to all resources, including private assets owned by other users.
144
- *
145
- * @returns The admin role name (default: "admin")
146
- *
147
- * @example
148
- * ```typescript
149
- * const adminRole = AuthConfig.getAdminRoleName()
150
- * console.log(`Admin role: ${adminRole}`) // "admin" by default
151
- *
152
- * // Check if user has admin role
153
- * const userRoles = ['user', 'admin', 'moderator']
154
- * const isAdmin = userRoles.includes(adminRole)
155
- * ```
156
- */
157
- static getAdminRoleName() {
158
- return this.getConfig().DIGITALTWIN_ADMIN_ROLE_NAME;
159
- }
160
- /**
161
- * Resets the cached configuration (useful for testing).
162
- *
163
- * @private
164
- */
165
- static _resetConfig() {
166
- this._config = null;
167
- }
168
- }
169
- //# sourceMappingURL=auth_config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth_config.js","sourceRoot":"","sources":["../../src/auth/auth_config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,OAAO,UAAU;aACJ,YAAO,GAIX,IAAI,CAAA;IAEf;;;OAGG;IACK,MAAM,CAAC,UAAU;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAM;QAEjC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;YACxB,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC;gBACzC,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,KAAK;aACjB,CAAC;YACF,6BAA6B,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC7C,QAAQ,EAAE,IAAI;aACjB,CAAC;YACF,2BAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC3C,QAAQ,EAAE,IAAI;aACjB,CAAC;SACL,CAIA,CAAA;QAED,gDAAgD;QAChD,IAAI,CAAC,MAAM,CAAC,6BAA6B,EAAE,CAAC;YACxC,MAAM,CAAC,6BAA6B,GAAG,WAAW,CAAA;QACtD,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,CAAC;YACtC,MAAM,CAAC,2BAA2B,GAAG,OAAO,CAAA;QAChD,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,MAId,CAAA;IACL,CAAC;IAED;;;OAGG;IACK,MAAM,CAAC,SAAS;QACpB,IAAI,CAAC,UAAU,EAAE,CAAA;QACjB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACvB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,cAAc;QACjB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,wBAAwB,CAAA;IACpD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa;QAChB,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,CAAA;IACjC,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM,CAAC,kBAAkB;QACrB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,6BAA6B,CAAA;IACzD,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,gBAAgB;QACnB,OAAO;YACH,EAAE,EAAE,IAAI,CAAC,kBAAkB,EAAE;YAC7B,KAAK,EAAE,CAAC,WAAW,CAAC;SACvB,CAAA;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,MAAM,CAAC,gBAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,2BAA2B,CAAA;IACvD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACvB,CAAC"}
@@ -1,5 +0,0 @@
1
- export { ApisixAuthParser } from './apisix_parser.js';
2
- export { UserService } from './user_service.js';
3
- export { AuthConfig } from './auth_config.js';
4
- export type { AuthenticatedUser, UserRecord, AuthContext, AuthenticatedRequest } from './types.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA"}
@@ -1,4 +0,0 @@
1
- export { ApisixAuthParser } from './apisix_parser.js';
2
- export { UserService } from './user_service.js';
3
- export { AuthConfig } from './auth_config.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA"}
@@ -1,100 +0,0 @@
1
- /**
2
- * User information extracted from Keycloak JWT via Apache APISIX headers.
3
- *
4
- * This interface represents the authenticated user data parsed from APISIX
5
- * headers after Keycloak authentication. APISIX forwards these headers:
6
- * - `x-user-id`: The Keycloak user UUID
7
- * - `x-user-roles`: Comma-separated list of user roles
8
- *
9
- * @example
10
- * ```typescript
11
- * const authUser = ApisixAuthParser.parseAuthHeaders(req.headers)
12
- * if (authUser) {
13
- * console.log(`User ${authUser.id} has roles: ${authUser.roles.join(', ')}`)
14
- * }
15
- * ```
16
- */
17
- export interface AuthenticatedUser {
18
- /** User ID from Keycloak (x-user-id header) - UUID format */
19
- id: string;
20
- /** User roles from Keycloak (x-user-roles header, parsed from comma-separated string) */
21
- roles: string[];
22
- }
23
- /**
24
- * User record stored in the database.
25
- *
26
- * Represents a user stored in the normalized user management system.
27
- * Users are created automatically when they first access the system
28
- * after being authenticated by Keycloak via APISIX.
29
- *
30
- * @example
31
- * ```typescript
32
- * const userService = new UserService(database)
33
- * const userRecord = await userService.findOrCreateUser(authenticatedUser)
34
- * console.log(`User ${userRecord.keycloak_id} has ${userRecord.roles.length} roles`)
35
- * ```
36
- */
37
- export interface UserRecord {
38
- /** Primary key (auto-increment) */
39
- id?: number;
40
- /** Keycloak user ID (UUID, unique across system) */
41
- keycloak_id: string;
42
- /** User roles (populated from user_roles junction table) */
43
- roles: string[];
44
- /** First time the user was seen in the system */
45
- created_at: Date;
46
- /** Last time the user's roles were updated */
47
- updated_at: Date;
48
- }
49
- /**
50
- * Authentication context passed to handlers.
51
- *
52
- * Contains both the raw authentication data from APISIX headers
53
- * and the corresponding database user record. Used internally
54
- * by components that need full user context.
55
- *
56
- * @example
57
- * ```typescript
58
- * const authContext: AuthContext = {
59
- * user: authUser,
60
- * userRecord: await userService.findOrCreateUser(authUser)
61
- * }
62
- * ```
63
- */
64
- export interface AuthContext {
65
- /** Authenticated user information from APISIX headers */
66
- user: AuthenticatedUser;
67
- /** Database user record with full role information */
68
- userRecord: UserRecord;
69
- }
70
- /**
71
- * Request object extended with authentication context.
72
- *
73
- * Represents an HTTP request that has been augmented with
74
- * authentication information. Used by handlers that need
75
- * access to both request data and user context.
76
- *
77
- * @example
78
- * ```typescript
79
- * async function handleRequest(req: AuthenticatedRequest) {
80
- * if (req.auth) {
81
- * console.log(`Request from user: ${req.auth.user.id}`)
82
- * }
83
- * }
84
- * ```
85
- */
86
- export interface AuthenticatedRequest {
87
- /** Original Express request object */
88
- originalRequest: any;
89
- /** Authentication context (undefined if not authenticated) */
90
- auth?: AuthContext;
91
- /** Request headers (including APISIX authentication headers) */
92
- headers: Record<string, string>;
93
- /** URL parameters */
94
- params?: Record<string, string>;
95
- /** Request body */
96
- body?: any;
97
- /** File upload (for multipart requests with assets) */
98
- file?: any;
99
- }
100
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,iBAAiB;IAC9B,6DAA6D;IAC7D,EAAE,EAAE,MAAM,CAAA;IACV,yFAAyF;IACzF,KAAK,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACvB,mCAAmC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAA;IACnB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,iDAAiD;IACjD,UAAU,EAAE,IAAI,CAAA;IAChB,8CAA8C;IAC9C,UAAU,EAAE,IAAI,CAAA;CACnB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,WAAW;IACxB,yDAAyD;IACzD,IAAI,EAAE,iBAAiB,CAAA;IACvB,sDAAsD;IACtD,UAAU,EAAE,UAAU,CAAA;CACzB;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,oBAAoB;IACjC,sCAAsC;IACtC,eAAe,EAAE,GAAG,CAAA;IACpB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,mBAAmB;IACnB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,uDAAuD;IACvD,IAAI,CAAC,EAAE,GAAG,CAAA;CACb"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":""}
@@ -1,86 +0,0 @@
1
- import type { DatabaseAdapter } from '../database/database_adapter.js';
2
- import type { AuthenticatedUser, UserRecord } from './types.js';
3
- /**
4
- * Service for managing users in the Digital Twin framework.
5
- *
6
- * This service handles the complete user lifecycle in a Digital Twin application
7
- * with Keycloak authentication via Apache APISIX. It manages a normalized database
8
- * schema with three tables:
9
- *
10
- * - `users`: Core user records linked to Keycloak IDs
11
- * - `roles`: Master list of available roles
12
- * - `user_roles`: Many-to-many relationship between users and roles
13
- *
14
- * Key features:
15
- * - Automatic user creation on first authentication
16
- * - Role synchronization with Keycloak
17
- * - Optimized queries with proper indexing
18
- * - Transaction-safe role updates
19
- *
20
- * @example
21
- * ```typescript
22
- * // Initialize in your Digital Twin engine
23
- * const userService = new UserService(databaseAdapter)
24
- * await userService.initializeTables()
25
- *
26
- * // Use in AssetsManager handlers
27
- * const authUser = ApisixAuthParser.parseAuthHeaders(req.headers)
28
- * const userRecord = await userService.findOrCreateUser(authUser!)
29
- *
30
- * // Link assets to users
31
- * await this.uploadAsset({
32
- * description: 'My file',
33
- * source: 'upload',
34
- * owner_id: userRecord.id!.toString(),
35
- * filename: 'document.pdf',
36
- * file: buffer
37
- * })
38
- * ```
39
- */
40
- export declare class UserService {
41
- private db;
42
- private readonly usersTable;
43
- private readonly rolesTable;
44
- private readonly userRolesTable;
45
- constructor(db: DatabaseAdapter);
46
- /**
47
- * Ensures all user-related tables exist in the database
48
- */
49
- initializeTables(): Promise<void>;
50
- /**
51
- * Finds or creates a user and synchronizes their roles.
52
- *
53
- * When authentication is disabled, returns a mock user record
54
- * without touching the database.
55
- */
56
- findOrCreateUser(authUser: AuthenticatedUser): Promise<UserRecord>;
57
- /**
58
- * Gets a user by their database ID
59
- */
60
- getUserById(id: number): Promise<UserRecord | undefined>;
61
- /**
62
- * Gets a user by their Keycloak ID with roles
63
- */
64
- getUserByKeycloakId(keycloakId: string): Promise<UserRecord | undefined>;
65
- /**
66
- * Gets the underlying Knex instance from the database adapter
67
- */
68
- private getKnex;
69
- /**
70
- * Finds a user by their Keycloak ID
71
- */
72
- private findUserByKeycloakId;
73
- /**
74
- * Creates a new user record
75
- */
76
- private createUser;
77
- /**
78
- * Synchronizes user roles with what's provided by Keycloak
79
- */
80
- private syncUserRoles;
81
- /**
82
- * Gets a user with their roles populated
83
- */
84
- private getUserWithRoles;
85
- }
86
- //# sourceMappingURL=user_service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user_service.d.ts","sourceRoot":"","sources":["../../src/auth/user_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAI/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;gBAElC,EAAE,EAAE,eAAe;IAI/B;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDvC;;;;;OAKG;IACG,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IA8BxE;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAI9D;;OAEG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAY9E;;OAEG;IACH,OAAO,CAAC,OAAO;IAOf;;OAEG;YACW,oBAAoB;IAgBlC;;OAEG;YACW,UAAU;IAuBxB;;OAEG;YACW,aAAa;IAoC3B;;OAEG;YACW,gBAAgB;CAqCjC"}