digitaltwin-core 0.8.3 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/apisix_parser.d.ts +24 -0
- package/dist/auth/apisix_parser.d.ts.map +1 -1
- package/dist/auth/apisix_parser.js +28 -0
- package/dist/auth/apisix_parser.js.map +1 -1
- package/dist/auth/auth_config.d.ts +31 -0
- package/dist/auth/auth_config.d.ts.map +1 -1
- package/dist/auth/auth_config.js +48 -4
- package/dist/auth/auth_config.js.map +1 -1
- package/dist/auth/user_service.d.ts.map +1 -1
- package/dist/auth/user_service.js +4 -1
- package/dist/auth/user_service.js.map +1 -1
- package/dist/components/assets_manager.d.ts +79 -8
- package/dist/components/assets_manager.d.ts.map +1 -1
- package/dist/components/assets_manager.js +353 -21
- package/dist/components/assets_manager.js.map +1 -1
- package/dist/components/custom_table_manager.d.ts +142 -1
- package/dist/components/custom_table_manager.d.ts.map +1 -1
- package/dist/components/custom_table_manager.js +313 -3
- package/dist/components/custom_table_manager.js.map +1 -1
- package/dist/components/map_manager.d.ts.map +1 -1
- package/dist/components/map_manager.js +9 -0
- package/dist/components/map_manager.js.map +1 -1
- package/dist/components/tileset_manager.d.ts.map +1 -1
- package/dist/components/tileset_manager.js +9 -0
- package/dist/components/tileset_manager.js.map +1 -1
- package/dist/components/types.d.ts +169 -19
- package/dist/components/types.d.ts.map +1 -1
- package/dist/components/types.js +6 -0
- package/dist/components/types.js.map +1 -1
- package/dist/database/adapters/knex_database_adapter.d.ts +10 -0
- package/dist/database/adapters/knex_database_adapter.d.ts.map +1 -1
- package/dist/database/adapters/knex_database_adapter.js +104 -9
- package/dist/database/adapters/knex_database_adapter.js.map +1 -1
- package/dist/database/database_adapter.d.ts +116 -7
- package/dist/database/database_adapter.d.ts.map +1 -1
- package/dist/database/database_adapter.js +41 -1
- package/dist/database/database_adapter.js.map +1 -1
- package/dist/engine/digital_twin_engine.d.ts +12 -0
- package/dist/engine/digital_twin_engine.d.ts.map +1 -1
- package/dist/engine/digital_twin_engine.js +15 -9
- package/dist/engine/digital_twin_engine.js.map +1 -1
- package/dist/engine/initializer.d.ts +8 -5
- package/dist/engine/initializer.d.ts.map +1 -1
- package/dist/engine/initializer.js +32 -13
- package/dist/engine/initializer.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/data_record.d.ts +8 -0
- package/dist/types/data_record.d.ts.map +1 -1
- package/dist/utils/map_to_data_record.d.ts.map +1 -1
- package/dist/utils/map_to_data_record.js +4 -1
- package/dist/utils/map_to_data_record.js.map +1 -1
- package/package.json +1 -1
|
@@ -118,5 +118,29 @@ export declare class ApisixAuthParser {
|
|
|
118
118
|
* ```
|
|
119
119
|
*/
|
|
120
120
|
static getUserRoles(headers: Record<string, string>): string[];
|
|
121
|
+
/**
|
|
122
|
+
* Checks if a user has the admin role.
|
|
123
|
+
*
|
|
124
|
+
* Determines if the authenticated user has administrative privileges by checking
|
|
125
|
+
* if their roles include the configured admin role name (default: "admin").
|
|
126
|
+
*
|
|
127
|
+
* The admin role name can be configured via DIGITALTWIN_ADMIN_ROLE_NAME environment variable.
|
|
128
|
+
*
|
|
129
|
+
* @param headers - HTTP request headers
|
|
130
|
+
* @returns true if user has admin role, false otherwise
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* if (ApisixAuthParser.isAdmin(req.headers)) {
|
|
135
|
+
* // User has full administrative access
|
|
136
|
+
* // Can view all assets including private assets owned by others
|
|
137
|
+
* console.log('Admin user detected')
|
|
138
|
+
* }
|
|
139
|
+
*
|
|
140
|
+
* // With custom admin role name (DIGITALTWIN_ADMIN_ROLE_NAME=administrator)
|
|
141
|
+
* const isAdmin = ApisixAuthParser.isAdmin(req.headers)
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
static isAdmin(headers: Record<string, string>): boolean;
|
|
121
145
|
}
|
|
122
146
|
//# sourceMappingURL=apisix_parser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apisix_parser.d.ts","sourceRoot":"","sources":["../../src/auth/apisix_parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,gBAAgB;IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,GAAG,IAAI;IAqBlF;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAS7D;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IAShE;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"apisix_parser.d.ts","sourceRoot":"","sources":["../../src/auth/apisix_parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAGnD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,gBAAgB;IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,GAAG,IAAI;IAqBlF;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAS7D;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IAShE;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;IAU9D;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;CAK3D"}
|
|
@@ -153,5 +153,33 @@ export class ApisixAuthParser {
|
|
|
153
153
|
const rolesString = headers['x-user-roles'] || '';
|
|
154
154
|
return rolesString ? rolesString.split(',').map(role => role.trim()) : [];
|
|
155
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Checks if a user has the admin role.
|
|
158
|
+
*
|
|
159
|
+
* Determines if the authenticated user has administrative privileges by checking
|
|
160
|
+
* if their roles include the configured admin role name (default: "admin").
|
|
161
|
+
*
|
|
162
|
+
* The admin role name can be configured via DIGITALTWIN_ADMIN_ROLE_NAME environment variable.
|
|
163
|
+
*
|
|
164
|
+
* @param headers - HTTP request headers
|
|
165
|
+
* @returns true if user has admin role, false otherwise
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* if (ApisixAuthParser.isAdmin(req.headers)) {
|
|
170
|
+
* // User has full administrative access
|
|
171
|
+
* // Can view all assets including private assets owned by others
|
|
172
|
+
* console.log('Admin user detected')
|
|
173
|
+
* }
|
|
174
|
+
*
|
|
175
|
+
* // With custom admin role name (DIGITALTWIN_ADMIN_ROLE_NAME=administrator)
|
|
176
|
+
* const isAdmin = ApisixAuthParser.isAdmin(req.headers)
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
static isAdmin(headers) {
|
|
180
|
+
const roles = this.getUserRoles(headers);
|
|
181
|
+
const adminRoleName = AuthConfig.getAdminRoleName();
|
|
182
|
+
return roles.includes(adminRoleName);
|
|
183
|
+
}
|
|
156
184
|
}
|
|
157
185
|
//# sourceMappingURL=apisix_parser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apisix_parser.js","sourceRoot":"","sources":["../../src/auth/apisix_parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,gBAAgB;IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAA+B;QACnD,uDAAuD;QACvD,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC,gBAAgB,EAAE,CAAA;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAA;QACf,CAAC;QAED,0CAA0C;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEhF,OAAO;YACH,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,KAAK;SACf,CAAA;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,YAAY,CAAC,OAA+B;QAC/C,wDAAwD;QACxD,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACf,CAAC;QAED,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,SAAS,CAAC,OAA+B;QAC5C,0DAA0D;QAC1D,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC,kBAAkB,EAAE,CAAA;QAC1C,CAAC;QAED,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAA;IACvC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,YAAY,CAAC,OAA+B;QAC/C,6DAA6D;QAC7D,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAA;QAC9C,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QACjD,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7E,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"apisix_parser.js","sourceRoot":"","sources":["../../src/auth/apisix_parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,gBAAgB;IACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,MAAM,CAAC,gBAAgB,CAAC,OAA+B;QACnD,uDAAuD;QACvD,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC,gBAAgB,EAAE,CAAA;QACxC,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO,IAAI,CAAA;QACf,CAAC;QAED,0CAA0C;QAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEhF,OAAO;YACH,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,KAAK;SACf,CAAA;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,MAAM,CAAC,YAAY,CAAC,OAA+B;QAC/C,wDAAwD;QACxD,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA;QACf,CAAC;QAED,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACjC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,SAAS,CAAC,OAA+B;QAC5C,0DAA0D;QAC1D,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC,kBAAkB,EAAE,CAAA;QAC1C,CAAC;QAED,OAAO,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAA;IACvC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,YAAY,CAAC,OAA+B;QAC/C,6DAA6D;QAC7D,IAAI,UAAU,CAAC,cAAc,EAAE,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAA;QAC9C,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAA;QACjD,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7E,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,OAAO,CAAC,OAA+B;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QACxC,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAA;QACnD,OAAO,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAA;IACxC,CAAC;CACJ"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* Environment variables:
|
|
9
9
|
* - DIGITALTWIN_DISABLE_AUTH: Set to "true" or "1" to disable authentication (default: false)
|
|
10
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")
|
|
11
12
|
*
|
|
12
13
|
* @example
|
|
13
14
|
* ```bash
|
|
@@ -15,6 +16,9 @@
|
|
|
15
16
|
* export DIGITALTWIN_DISABLE_AUTH=true
|
|
16
17
|
* export DIGITALTWIN_ANONYMOUS_USER_ID=dev-user-123
|
|
17
18
|
*
|
|
19
|
+
* # Configure admin role name
|
|
20
|
+
* export DIGITALTWIN_ADMIN_ROLE_NAME=administrator
|
|
21
|
+
*
|
|
18
22
|
* # Enable authentication (default)
|
|
19
23
|
* export DIGITALTWIN_DISABLE_AUTH=false
|
|
20
24
|
* ```
|
|
@@ -28,6 +32,9 @@
|
|
|
28
32
|
* const anonymousUser = AuthConfig.getAnonymousUser()
|
|
29
33
|
* console.log(`Using anonymous user: ${anonymousUser.id}`)
|
|
30
34
|
* }
|
|
35
|
+
*
|
|
36
|
+
* const adminRole = AuthConfig.getAdminRoleName()
|
|
37
|
+
* console.log(`Admin role is: ${adminRole}`)
|
|
31
38
|
* ```
|
|
32
39
|
*/
|
|
33
40
|
export declare class AuthConfig {
|
|
@@ -37,6 +44,11 @@ export declare class AuthConfig {
|
|
|
37
44
|
* This is called automatically the first time any method is used.
|
|
38
45
|
*/
|
|
39
46
|
private static loadConfig;
|
|
47
|
+
/**
|
|
48
|
+
* Gets the loaded configuration, ensuring it's initialized.
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
private static getConfig;
|
|
40
52
|
/**
|
|
41
53
|
* Checks if authentication is disabled via environment variables.
|
|
42
54
|
*
|
|
@@ -85,6 +97,25 @@ export declare class AuthConfig {
|
|
|
85
97
|
id: string;
|
|
86
98
|
roles: string[];
|
|
87
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;
|
|
88
119
|
/**
|
|
89
120
|
* Resets the cached configuration (useful for testing).
|
|
90
121
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth_config.d.ts","sourceRoot":"","sources":["../../src/auth/auth_config.ts"],"names":[],"mappings":"AAEA
|
|
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"}
|
package/dist/auth/auth_config.js
CHANGED
|
@@ -9,6 +9,7 @@ import { Env } from '../env/env.js';
|
|
|
9
9
|
* Environment variables:
|
|
10
10
|
* - DIGITALTWIN_DISABLE_AUTH: Set to "true" or "1" to disable authentication (default: false)
|
|
11
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")
|
|
12
13
|
*
|
|
13
14
|
* @example
|
|
14
15
|
* ```bash
|
|
@@ -16,6 +17,9 @@ import { Env } from '../env/env.js';
|
|
|
16
17
|
* export DIGITALTWIN_DISABLE_AUTH=true
|
|
17
18
|
* export DIGITALTWIN_ANONYMOUS_USER_ID=dev-user-123
|
|
18
19
|
*
|
|
20
|
+
* # Configure admin role name
|
|
21
|
+
* export DIGITALTWIN_ADMIN_ROLE_NAME=administrator
|
|
22
|
+
*
|
|
19
23
|
* # Enable authentication (default)
|
|
20
24
|
* export DIGITALTWIN_DISABLE_AUTH=false
|
|
21
25
|
* ```
|
|
@@ -29,6 +33,9 @@ import { Env } from '../env/env.js';
|
|
|
29
33
|
* const anonymousUser = AuthConfig.getAnonymousUser()
|
|
30
34
|
* console.log(`Using anonymous user: ${anonymousUser.id}`)
|
|
31
35
|
* }
|
|
36
|
+
*
|
|
37
|
+
* const adminRole = AuthConfig.getAdminRoleName()
|
|
38
|
+
* console.log(`Admin role is: ${adminRole}`)
|
|
32
39
|
* ```
|
|
33
40
|
*/
|
|
34
41
|
export class AuthConfig {
|
|
@@ -47,14 +54,32 @@ export class AuthConfig {
|
|
|
47
54
|
}),
|
|
48
55
|
DIGITALTWIN_ANONYMOUS_USER_ID: Env.schema.string({
|
|
49
56
|
optional: true
|
|
57
|
+
}),
|
|
58
|
+
DIGITALTWIN_ADMIN_ROLE_NAME: Env.schema.string({
|
|
59
|
+
optional: true
|
|
50
60
|
})
|
|
51
61
|
});
|
|
52
62
|
// Set default anonymous user ID if not provided
|
|
53
63
|
if (!config.DIGITALTWIN_ANONYMOUS_USER_ID) {
|
|
54
64
|
config.DIGITALTWIN_ANONYMOUS_USER_ID = 'anonymous';
|
|
55
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
|
+
}
|
|
56
70
|
this._config = config;
|
|
57
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
|
+
}
|
|
58
83
|
/**
|
|
59
84
|
* Checks if authentication is disabled via environment variables.
|
|
60
85
|
*
|
|
@@ -68,8 +93,7 @@ export class AuthConfig {
|
|
|
68
93
|
* ```
|
|
69
94
|
*/
|
|
70
95
|
static isAuthDisabled() {
|
|
71
|
-
this.
|
|
72
|
-
return this._config.DIGITALTWIN_DISABLE_AUTH;
|
|
96
|
+
return this.getConfig().DIGITALTWIN_DISABLE_AUTH;
|
|
73
97
|
}
|
|
74
98
|
/**
|
|
75
99
|
* Checks if authentication is enabled (opposite of isAuthDisabled).
|
|
@@ -91,8 +115,7 @@ export class AuthConfig {
|
|
|
91
115
|
* ```
|
|
92
116
|
*/
|
|
93
117
|
static getAnonymousUserId() {
|
|
94
|
-
this.
|
|
95
|
-
return this._config.DIGITALTWIN_ANONYMOUS_USER_ID;
|
|
118
|
+
return this.getConfig().DIGITALTWIN_ANONYMOUS_USER_ID;
|
|
96
119
|
}
|
|
97
120
|
/**
|
|
98
121
|
* Gets a fake authenticated user object for anonymous access.
|
|
@@ -113,6 +136,27 @@ export class AuthConfig {
|
|
|
113
136
|
roles: ['anonymous']
|
|
114
137
|
};
|
|
115
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
|
+
}
|
|
116
160
|
/**
|
|
117
161
|
* Resets the cached configuration (useful for testing).
|
|
118
162
|
*
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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 +1 @@
|
|
|
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;IAyDvC;;;;;OAKG;IACG,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
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;IAyDvC;;;;;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"}
|
|
@@ -114,6 +114,9 @@ export class UserService {
|
|
|
114
114
|
if (!userRecord) {
|
|
115
115
|
userRecord = await this.createUser(authUser);
|
|
116
116
|
}
|
|
117
|
+
if (!userRecord.id) {
|
|
118
|
+
throw new Error('User record does not have an ID after creation/retrieval');
|
|
119
|
+
}
|
|
117
120
|
// 2. Synchronize roles
|
|
118
121
|
await this.syncUserRoles(userRecord.id, authUser.roles);
|
|
119
122
|
// 3. Return user with current roles
|
|
@@ -225,7 +228,7 @@ export class UserService {
|
|
|
225
228
|
return undefined;
|
|
226
229
|
const userRow = result[0];
|
|
227
230
|
const roles = result
|
|
228
|
-
.filter(row => row.role_name
|
|
231
|
+
.filter((row) => row.role_name !== null)
|
|
229
232
|
.map(row => row.role_name);
|
|
230
233
|
return {
|
|
231
234
|
id: userRow.id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user_service.js","sourceRoot":"","sources":["../../src/auth/user_service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"user_service.js","sourceRoot":"","sources":["../../src/auth/user_service.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,8 @@ import { UserService } from '../auth/user_service.js';
|
|
|
22
22
|
* description: '3D building model',
|
|
23
23
|
* source: 'https://example.com/data-source',
|
|
24
24
|
* owner_id: 123,
|
|
25
|
-
* filename: 'building.glb'
|
|
25
|
+
* filename: 'building.glb',
|
|
26
|
+
* is_public: true
|
|
26
27
|
* }
|
|
27
28
|
* ```
|
|
28
29
|
*/
|
|
@@ -35,6 +36,8 @@ export interface AssetMetadataRow extends MetadataRow {
|
|
|
35
36
|
owner_id: number | null;
|
|
36
37
|
/** Original filename provided by the user */
|
|
37
38
|
filename: string;
|
|
39
|
+
/** Whether the asset is publicly accessible (true) or private (false) */
|
|
40
|
+
is_public: boolean;
|
|
38
41
|
}
|
|
39
42
|
/**
|
|
40
43
|
* Request payload for creating a new asset.
|
|
@@ -48,7 +51,8 @@ export interface AssetMetadataRow extends MetadataRow {
|
|
|
48
51
|
* source: 'https://city-data.example.com/buildings',
|
|
49
52
|
* owner_id: 'user123',
|
|
50
53
|
* filename: 'building.glb',
|
|
51
|
-
* file: fileBuffer
|
|
54
|
+
* file: fileBuffer,
|
|
55
|
+
* is_public: true
|
|
52
56
|
* }
|
|
53
57
|
* ```
|
|
54
58
|
*/
|
|
@@ -63,6 +67,8 @@ export interface CreateAssetRequest {
|
|
|
63
67
|
filename: string;
|
|
64
68
|
/** File content as Buffer */
|
|
65
69
|
file: Buffer;
|
|
70
|
+
/** Whether the asset is publicly accessible (default: true) */
|
|
71
|
+
is_public?: boolean;
|
|
66
72
|
}
|
|
67
73
|
/**
|
|
68
74
|
* Request payload for updating asset metadata.
|
|
@@ -73,7 +79,8 @@ export interface CreateAssetRequest {
|
|
|
73
79
|
* ```typescript
|
|
74
80
|
* const updates: UpdateAssetRequest = {
|
|
75
81
|
* description: 'Updated building model with new textures',
|
|
76
|
-
* source: 'https://updated-source.example.com'
|
|
82
|
+
* source: 'https://updated-source.example.com',
|
|
83
|
+
* is_public: false
|
|
77
84
|
* }
|
|
78
85
|
* ```
|
|
79
86
|
*/
|
|
@@ -82,6 +89,8 @@ export interface UpdateAssetRequest {
|
|
|
82
89
|
description?: string;
|
|
83
90
|
/** Updated source URL (optional, validated if provided) */
|
|
84
91
|
source?: string;
|
|
92
|
+
/** Updated visibility (optional) */
|
|
93
|
+
is_public?: boolean;
|
|
85
94
|
}
|
|
86
95
|
/**
|
|
87
96
|
* Abstract base class for Assets Manager components with authentication and access control.
|
|
@@ -219,6 +228,25 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
219
228
|
* ```
|
|
220
229
|
*/
|
|
221
230
|
private validateFileExtension;
|
|
231
|
+
/**
|
|
232
|
+
* Validates that a string is valid base64-encoded data.
|
|
233
|
+
*
|
|
234
|
+
* Used internally to ensure file data in batch uploads is properly base64-encoded
|
|
235
|
+
* before attempting to decode it.
|
|
236
|
+
*
|
|
237
|
+
* @private
|
|
238
|
+
* @param {any} data - Data to validate as base64
|
|
239
|
+
* @returns {boolean} True if data is a valid base64 string, false otherwise
|
|
240
|
+
*
|
|
241
|
+
* @example
|
|
242
|
+
* ```typescript
|
|
243
|
+
* this.validateBase64('SGVsbG8gV29ybGQ=') // returns true
|
|
244
|
+
* this.validateBase64('not-base64!@#') // returns false
|
|
245
|
+
* this.validateBase64(123) // returns false (not a string)
|
|
246
|
+
* this.validateBase64('') // returns false (empty string)
|
|
247
|
+
* ```
|
|
248
|
+
*/
|
|
249
|
+
private validateBase64;
|
|
222
250
|
/**
|
|
223
251
|
* Upload a new asset file with metadata.
|
|
224
252
|
*
|
|
@@ -235,7 +263,8 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
235
263
|
* source: 'https://city-data.example.com/buildings',
|
|
236
264
|
* owner_id: 'user123',
|
|
237
265
|
* filename: 'building.glb',
|
|
238
|
-
* file: fileBuffer
|
|
266
|
+
* file: fileBuffer,
|
|
267
|
+
* is_public: true
|
|
239
268
|
* })
|
|
240
269
|
* ```
|
|
241
270
|
*/
|
|
@@ -246,9 +275,14 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
246
275
|
* Returns a JSON list of all assets with their metadata, following the
|
|
247
276
|
* framework pattern but adapted for assets management.
|
|
248
277
|
*
|
|
278
|
+
* Access control:
|
|
279
|
+
* - Unauthenticated users: Can only see public assets
|
|
280
|
+
* - Authenticated users: Can see public assets + their own private assets
|
|
281
|
+
* - Admin users: Can see all assets (public and private from all users)
|
|
282
|
+
*
|
|
249
283
|
* @returns {Promise<DataResponse>} JSON response with all assets
|
|
250
284
|
*/
|
|
251
|
-
retrieve(): Promise<DataResponse>;
|
|
285
|
+
retrieve(req?: any): Promise<DataResponse>;
|
|
252
286
|
/**
|
|
253
287
|
* Get all assets for this component type.
|
|
254
288
|
*
|
|
@@ -282,7 +316,7 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
282
316
|
/**
|
|
283
317
|
* Update asset metadata by ID.
|
|
284
318
|
*
|
|
285
|
-
* Updates the metadata (description and/or
|
|
319
|
+
* Updates the metadata (description, source, and/or visibility) of a specific asset.
|
|
286
320
|
* Asset metadata is stored as dedicated columns in the database.
|
|
287
321
|
*
|
|
288
322
|
* @param {string} id - The ID of the asset to update
|
|
@@ -293,7 +327,8 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
293
327
|
* ```typescript
|
|
294
328
|
* await assetsManager.updateAssetMetadata('123', {
|
|
295
329
|
* description: 'Updated building model with new textures',
|
|
296
|
-
* source: 'https://updated-source.example.com'
|
|
330
|
+
* source: 'https://updated-source.example.com',
|
|
331
|
+
* is_public: false
|
|
297
332
|
* })
|
|
298
333
|
* ```
|
|
299
334
|
*/
|
|
@@ -375,7 +410,33 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
375
410
|
responseType?: string;
|
|
376
411
|
}>;
|
|
377
412
|
/**
|
|
378
|
-
* Handle upload
|
|
413
|
+
* Handle single asset upload via HTTP POST.
|
|
414
|
+
*
|
|
415
|
+
* Flow:
|
|
416
|
+
* 1. Validate request structure and authentication
|
|
417
|
+
* 2. Extract user identity from Apache APISIX headers
|
|
418
|
+
* 3. Validate file extension and read uploaded file
|
|
419
|
+
* 4. Store file via storage service and metadata in database
|
|
420
|
+
* 5. Set owner_id to authenticated user (prevents ownership spoofing)
|
|
421
|
+
* 6. Apply is_public setting (defaults to true if not specified)
|
|
422
|
+
*
|
|
423
|
+
* Authentication: Required
|
|
424
|
+
* Ownership: Automatically set to authenticated user
|
|
425
|
+
*
|
|
426
|
+
* @param req - HTTP request with multipart/form-data file upload
|
|
427
|
+
* @returns HTTP response with success/error status
|
|
428
|
+
*
|
|
429
|
+
* @example
|
|
430
|
+
* POST /assets
|
|
431
|
+
* Content-Type: multipart/form-data
|
|
432
|
+
* x-user-id: user-uuid
|
|
433
|
+
* x-user-roles: user,premium
|
|
434
|
+
*
|
|
435
|
+
* Form data:
|
|
436
|
+
* - file: <binary file>
|
|
437
|
+
* - description: "3D model of building"
|
|
438
|
+
* - source: "https://source.com"
|
|
439
|
+
* - is_public: true
|
|
379
440
|
*/
|
|
380
441
|
handleUpload(req: any): Promise<DataResponse>;
|
|
381
442
|
/**
|
|
@@ -399,6 +460,11 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
399
460
|
* Returns the file content of a specific asset by ID for display/use in front-end.
|
|
400
461
|
* No download headers - just the raw file content.
|
|
401
462
|
*
|
|
463
|
+
* Access control:
|
|
464
|
+
* - Public assets: Accessible to everyone
|
|
465
|
+
* - Private assets: Accessible only to owner
|
|
466
|
+
* - Admin users: Can access all assets (public and private)
|
|
467
|
+
*
|
|
402
468
|
* @param {any} req - HTTP request object with params.id
|
|
403
469
|
* @returns {Promise<DataResponse>} HTTP response with file content
|
|
404
470
|
*
|
|
@@ -415,6 +481,11 @@ export declare abstract class AssetsManager implements Component, Servable {
|
|
|
415
481
|
* Downloads the file content of a specific asset by ID with download headers.
|
|
416
482
|
* Forces browser to download the file rather than display it.
|
|
417
483
|
*
|
|
484
|
+
* Access control:
|
|
485
|
+
* - Public assets: Accessible to everyone
|
|
486
|
+
* - Private assets: Accessible only to owner
|
|
487
|
+
* - Admin users: Can download all assets (public and private)
|
|
488
|
+
*
|
|
418
489
|
* @param {any} req - HTTP request object with params.id
|
|
419
490
|
* @returns {Promise<DataResponse>} HTTP response with file content and download headers
|
|
420
491
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets_manager.d.ts","sourceRoot":"","sources":["../../src/components/assets_manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1D,OAAO,KAAK,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAuBrD
|
|
1
|
+
{"version":3,"file":"assets_manager.d.ts","sourceRoot":"","sources":["../../src/components/assets_manager.ts"],"names":[],"mappings":"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"}
|