digitaltwin-core 0.14.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -20
- package/README.md +494 -359
- package/dist/auth/apisix_parser.d.ts +141 -0
- package/dist/auth/apisix_parser.d.ts.map +1 -0
- package/dist/auth/apisix_parser.js +161 -0
- package/dist/auth/apisix_parser.js.map +1 -0
- package/dist/auth/auth_config.d.ts +126 -0
- package/dist/auth/auth_config.d.ts.map +1 -0
- package/dist/auth/auth_config.js +169 -0
- package/dist/auth/auth_config.js.map +1 -0
- package/dist/auth/auth_provider.d.ts +118 -0
- package/dist/auth/auth_provider.d.ts.map +1 -0
- package/dist/auth/auth_provider.js +8 -0
- package/dist/auth/auth_provider.js.map +1 -0
- package/dist/auth/auth_provider_factory.d.ts +91 -0
- package/dist/auth/auth_provider_factory.d.ts.map +1 -0
- package/dist/auth/auth_provider_factory.js +146 -0
- package/dist/auth/auth_provider_factory.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/providers/gateway_auth_provider.d.ts +78 -0
- package/dist/auth/providers/gateway_auth_provider.d.ts.map +1 -0
- package/dist/auth/providers/gateway_auth_provider.js +109 -0
- package/dist/auth/providers/gateway_auth_provider.js.map +1 -0
- package/dist/auth/providers/index.d.ts +4 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +4 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/providers/jwt_auth_provider.d.ts +91 -0
- package/dist/auth/providers/jwt_auth_provider.d.ts.map +1 -0
- package/dist/auth/providers/jwt_auth_provider.js +204 -0
- package/dist/auth/providers/jwt_auth_provider.js.map +1 -0
- package/dist/auth/providers/no_auth_provider.d.ts +61 -0
- package/dist/auth/providers/no_auth_provider.d.ts.map +1 -0
- package/dist/auth/providers/no_auth_provider.js +76 -0
- package/dist/auth/providers/no_auth_provider.js.map +1 -0
- package/dist/auth/types.d.ts +100 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/user_service.d.ts +86 -0
- package/dist/auth/user_service.d.ts.map +1 -0
- package/dist/auth/user_service.js +237 -0
- package/dist/auth/user_service.js.map +1 -0
- package/dist/components/assets_manager.d.ts +662 -0
- package/dist/components/assets_manager.d.ts.map +1 -0
- package/dist/components/assets_manager.js +1537 -0
- package/dist/components/assets_manager.js.map +1 -0
- package/dist/components/async_upload.d.ts +20 -0
- package/dist/components/async_upload.d.ts.map +1 -0
- package/dist/components/async_upload.js +10 -0
- package/dist/components/async_upload.js.map +1 -0
- package/dist/components/collector.d.ts +203 -0
- package/dist/components/collector.d.ts.map +1 -0
- package/dist/components/collector.js +214 -0
- package/dist/components/collector.js.map +1 -0
- package/dist/components/custom_table_manager.d.ts +503 -0
- package/dist/components/custom_table_manager.d.ts.map +1 -0
- package/dist/components/custom_table_manager.js +1023 -0
- package/dist/components/custom_table_manager.js.map +1 -0
- package/dist/components/global_assets_handler.d.ts +63 -0
- package/dist/components/global_assets_handler.d.ts.map +1 -0
- package/dist/components/global_assets_handler.js +127 -0
- package/dist/components/global_assets_handler.js.map +1 -0
- package/dist/components/handler.d.ts +104 -0
- package/dist/components/handler.d.ts.map +1 -0
- package/dist/components/handler.js +110 -0
- package/dist/components/handler.js.map +1 -0
- package/dist/components/harvester.d.ts +182 -0
- package/dist/components/harvester.d.ts.map +1 -0
- package/dist/components/harvester.js +406 -0
- package/dist/components/harvester.js.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/interfaces.d.ts +126 -0
- package/dist/components/interfaces.d.ts.map +1 -0
- package/dist/components/interfaces.js +8 -0
- package/dist/components/interfaces.js.map +1 -0
- package/dist/components/map_manager.d.ts +61 -0
- package/dist/components/map_manager.d.ts.map +1 -0
- package/dist/components/map_manager.js +242 -0
- package/dist/components/map_manager.js.map +1 -0
- package/dist/components/tileset_manager.d.ts +125 -0
- package/dist/components/tileset_manager.d.ts.map +1 -0
- package/dist/components/tileset_manager.js +623 -0
- package/dist/components/tileset_manager.js.map +1 -0
- package/dist/components/types.d.ts +226 -0
- package/dist/components/types.d.ts.map +1 -0
- package/dist/components/types.js +8 -0
- package/dist/components/types.js.map +1 -0
- package/dist/database/adapters/knex_database_adapter.d.ts +97 -0
- package/dist/database/adapters/knex_database_adapter.d.ts.map +1 -0
- package/dist/database/adapters/knex_database_adapter.js +729 -0
- package/dist/database/adapters/knex_database_adapter.js.map +1 -0
- package/dist/database/database_adapter.d.ts +262 -0
- package/dist/database/database_adapter.d.ts.map +1 -0
- package/dist/database/database_adapter.js +46 -0
- package/dist/database/database_adapter.js.map +1 -0
- package/dist/engine/digital_twin_engine.d.ts +295 -0
- package/dist/engine/digital_twin_engine.d.ts.map +1 -0
- package/dist/engine/digital_twin_engine.js +907 -0
- package/dist/engine/digital_twin_engine.js.map +1 -0
- package/dist/engine/endpoints.d.ts +47 -0
- package/dist/engine/endpoints.d.ts.map +1 -0
- package/dist/engine/endpoints.js +88 -0
- package/dist/engine/endpoints.js.map +1 -0
- package/dist/engine/error_handler.d.ts +20 -0
- package/dist/engine/error_handler.d.ts.map +1 -0
- package/dist/engine/error_handler.js +69 -0
- package/dist/engine/error_handler.js.map +1 -0
- package/dist/engine/events.d.ts +93 -0
- package/dist/engine/events.d.ts.map +1 -0
- package/dist/engine/events.js +71 -0
- package/dist/engine/events.js.map +1 -0
- package/dist/engine/health.d.ts +112 -0
- package/dist/engine/health.d.ts.map +1 -0
- package/dist/engine/health.js +190 -0
- package/dist/engine/health.js.map +1 -0
- package/dist/engine/initializer.d.ts +62 -0
- package/dist/engine/initializer.d.ts.map +1 -0
- package/dist/engine/initializer.js +108 -0
- package/dist/engine/initializer.js.map +1 -0
- package/dist/engine/queue_manager.d.ts +87 -0
- package/dist/engine/queue_manager.d.ts.map +1 -0
- package/dist/engine/queue_manager.js +196 -0
- package/dist/engine/queue_manager.js.map +1 -0
- package/dist/engine/scheduler.d.ts +30 -0
- package/dist/engine/scheduler.d.ts.map +1 -0
- package/dist/engine/scheduler.js +378 -0
- package/dist/engine/scheduler.js.map +1 -0
- package/dist/engine/upload_processor.d.ts +36 -0
- package/dist/engine/upload_processor.d.ts.map +1 -0
- package/dist/engine/upload_processor.js +113 -0
- package/dist/engine/upload_processor.js.map +1 -0
- package/dist/env/env.d.ts +134 -0
- package/dist/env/env.d.ts.map +1 -0
- package/dist/env/env.js +177 -0
- package/dist/env/env.js.map +1 -0
- package/dist/errors/index.d.ts +94 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +149 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/dist/openapi/generator.d.ts +93 -0
- package/dist/openapi/generator.d.ts.map +1 -0
- package/dist/openapi/generator.js +293 -0
- package/dist/openapi/generator.js.map +1 -0
- package/dist/openapi/index.d.ts +9 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +9 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/types.d.ts +182 -0
- package/dist/openapi/types.d.ts.map +1 -0
- package/dist/openapi/types.js +16 -0
- package/dist/openapi/types.js.map +1 -0
- package/dist/storage/adapters/local_storage_service.d.ts +57 -0
- package/dist/storage/adapters/local_storage_service.d.ts.map +1 -0
- package/dist/storage/adapters/local_storage_service.js +132 -0
- package/dist/storage/adapters/local_storage_service.js.map +1 -0
- package/dist/storage/adapters/ovh_storage_service.d.ts +72 -0
- package/dist/storage/adapters/ovh_storage_service.d.ts.map +1 -0
- package/dist/storage/adapters/ovh_storage_service.js +205 -0
- package/dist/storage/adapters/ovh_storage_service.js.map +1 -0
- package/dist/storage/storage_factory.d.ts +14 -0
- package/dist/storage/storage_factory.d.ts.map +1 -0
- package/dist/storage/storage_factory.js +43 -0
- package/dist/storage/storage_factory.js.map +1 -0
- package/dist/storage/storage_service.d.ts +163 -0
- package/dist/storage/storage_service.d.ts.map +1 -0
- package/dist/storage/storage_service.js +58 -0
- package/dist/storage/storage_service.js.map +1 -0
- package/dist/types/data_record.d.ts +123 -0
- package/dist/types/data_record.d.ts.map +1 -0
- package/dist/types/data_record.js +8 -0
- package/dist/types/data_record.js.map +1 -0
- package/dist/utils/graceful_shutdown.d.ts +44 -0
- package/dist/utils/graceful_shutdown.d.ts.map +1 -0
- package/dist/utils/graceful_shutdown.js +79 -0
- package/dist/utils/graceful_shutdown.js.map +1 -0
- package/dist/utils/http_responses.d.ts +175 -0
- package/dist/utils/http_responses.d.ts.map +1 -0
- package/dist/utils/http_responses.js +216 -0
- package/dist/utils/http_responses.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +74 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +92 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/map_to_data_record.d.ts +10 -0
- package/dist/utils/map_to_data_record.d.ts.map +1 -0
- package/dist/utils/map_to_data_record.js +36 -0
- package/dist/utils/map_to_data_record.js.map +1 -0
- package/dist/utils/safe_async.d.ts +50 -0
- package/dist/utils/safe_async.d.ts.map +1 -0
- package/dist/utils/safe_async.js +90 -0
- package/dist/utils/safe_async.js.map +1 -0
- package/dist/utils/servable_endpoint.d.ts +63 -0
- package/dist/utils/servable_endpoint.d.ts.map +1 -0
- package/dist/utils/servable_endpoint.js +67 -0
- package/dist/utils/servable_endpoint.js.map +1 -0
- package/dist/utils/zip_utils.d.ts +66 -0
- package/dist/utils/zip_utils.d.ts.map +1 -0
- package/dist/utils/zip_utils.js +169 -0
- package/dist/utils/zip_utils.js.map +1 -0
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +7 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/schemas.d.ts +273 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +82 -0
- package/dist/validation/schemas.js.map +1 -0
- package/dist/validation/validate.d.ts +49 -0
- package/dist/validation/validate.d.ts.map +1 -0
- package/dist/validation/validate.js +110 -0
- package/dist/validation/validate.js.map +1 -0
- package/package.json +23 -13
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview OpenAPI 3.0 type definitions for automatic documentation generation
|
|
3
|
+
*
|
|
4
|
+
* These types provide a structured way to define OpenAPI specifications
|
|
5
|
+
* for digital twin components.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* OpenAPI Info object
|
|
9
|
+
*/
|
|
10
|
+
export interface OpenAPIInfo {
|
|
11
|
+
title: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
version: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* OpenAPI Server object
|
|
17
|
+
*/
|
|
18
|
+
export interface OpenAPIServer {
|
|
19
|
+
url: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* OpenAPI Tag object
|
|
24
|
+
*/
|
|
25
|
+
export interface OpenAPITag {
|
|
26
|
+
name: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* OpenAPI Parameter object
|
|
31
|
+
*/
|
|
32
|
+
export interface OpenAPIParameter {
|
|
33
|
+
name: string;
|
|
34
|
+
in: 'path' | 'query' | 'header' | 'cookie';
|
|
35
|
+
description?: string;
|
|
36
|
+
required?: boolean;
|
|
37
|
+
schema: OpenAPISchema;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* OpenAPI Schema object (simplified)
|
|
41
|
+
*/
|
|
42
|
+
export interface OpenAPISchema {
|
|
43
|
+
type?: 'string' | 'number' | 'integer' | 'boolean' | 'array' | 'object';
|
|
44
|
+
format?: string;
|
|
45
|
+
items?: OpenAPISchema;
|
|
46
|
+
properties?: Record<string, OpenAPISchema>;
|
|
47
|
+
required?: string[];
|
|
48
|
+
$ref?: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
nullable?: boolean;
|
|
51
|
+
enum?: string[];
|
|
52
|
+
default?: unknown;
|
|
53
|
+
additionalProperties?: boolean | OpenAPISchema;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* OpenAPI Media Type object
|
|
57
|
+
*/
|
|
58
|
+
export interface OpenAPIMediaType {
|
|
59
|
+
schema: OpenAPISchema;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* OpenAPI Request Body object
|
|
63
|
+
*/
|
|
64
|
+
export interface OpenAPIRequestBody {
|
|
65
|
+
description?: string;
|
|
66
|
+
required?: boolean;
|
|
67
|
+
content: Record<string, OpenAPIMediaType>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* OpenAPI Response object
|
|
71
|
+
*/
|
|
72
|
+
export interface OpenAPIResponse {
|
|
73
|
+
description: string;
|
|
74
|
+
content?: Record<string, OpenAPIMediaType>;
|
|
75
|
+
headers?: Record<string, {
|
|
76
|
+
description?: string;
|
|
77
|
+
schema: OpenAPISchema;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* OpenAPI Security Requirement object
|
|
82
|
+
*/
|
|
83
|
+
export interface OpenAPISecurityRequirement {
|
|
84
|
+
[name: string]: string[];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* OpenAPI Operation object
|
|
88
|
+
*/
|
|
89
|
+
export interface OpenAPIOperation {
|
|
90
|
+
summary?: string;
|
|
91
|
+
description?: string;
|
|
92
|
+
operationId?: string;
|
|
93
|
+
tags?: string[];
|
|
94
|
+
parameters?: OpenAPIParameter[];
|
|
95
|
+
requestBody?: OpenAPIRequestBody;
|
|
96
|
+
responses: Record<string, OpenAPIResponse>;
|
|
97
|
+
security?: OpenAPISecurityRequirement[];
|
|
98
|
+
deprecated?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* OpenAPI Path Item object
|
|
102
|
+
*/
|
|
103
|
+
export interface OpenAPIPathItem {
|
|
104
|
+
get?: OpenAPIOperation;
|
|
105
|
+
post?: OpenAPIOperation;
|
|
106
|
+
put?: OpenAPIOperation;
|
|
107
|
+
delete?: OpenAPIOperation;
|
|
108
|
+
patch?: OpenAPIOperation;
|
|
109
|
+
options?: OpenAPIOperation;
|
|
110
|
+
head?: OpenAPIOperation;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* OpenAPI Security Scheme object
|
|
114
|
+
*/
|
|
115
|
+
export interface OpenAPISecurityScheme {
|
|
116
|
+
type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
|
|
117
|
+
description?: string;
|
|
118
|
+
name?: string;
|
|
119
|
+
in?: 'query' | 'header' | 'cookie';
|
|
120
|
+
scheme?: string;
|
|
121
|
+
bearerFormat?: string;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* OpenAPI Components object
|
|
125
|
+
*/
|
|
126
|
+
export interface OpenAPIComponents {
|
|
127
|
+
schemas?: Record<string, OpenAPISchema>;
|
|
128
|
+
securitySchemes?: Record<string, OpenAPISecurityScheme>;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Complete OpenAPI Document
|
|
132
|
+
*/
|
|
133
|
+
export interface OpenAPIDocument {
|
|
134
|
+
openapi: string;
|
|
135
|
+
info: OpenAPIInfo;
|
|
136
|
+
servers?: OpenAPIServer[];
|
|
137
|
+
tags?: OpenAPITag[];
|
|
138
|
+
paths: Record<string, OpenAPIPathItem>;
|
|
139
|
+
components?: OpenAPIComponents;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Specification returned by a component's getOpenAPISpec() method
|
|
143
|
+
*/
|
|
144
|
+
export interface OpenAPIComponentSpec {
|
|
145
|
+
/** Paths contributed by this component */
|
|
146
|
+
paths: Record<string, OpenAPIPathItem>;
|
|
147
|
+
/** Tags used by this component */
|
|
148
|
+
tags?: OpenAPITag[];
|
|
149
|
+
/** Schemas contributed by this component */
|
|
150
|
+
schemas?: Record<string, OpenAPISchema>;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Options for OpenAPI generation
|
|
154
|
+
*/
|
|
155
|
+
export interface OpenAPIGeneratorOptions {
|
|
156
|
+
/** API information */
|
|
157
|
+
info: OpenAPIInfo;
|
|
158
|
+
/** Server URLs */
|
|
159
|
+
servers?: OpenAPIServer[];
|
|
160
|
+
/** Components to document */
|
|
161
|
+
components: OpenAPIDocumentable[];
|
|
162
|
+
/** Additional schemas to merge (e.g., from external file) */
|
|
163
|
+
additionalSchemas?: Record<string, OpenAPISchema>;
|
|
164
|
+
/** Additional tags to include */
|
|
165
|
+
additionalTags?: OpenAPITag[];
|
|
166
|
+
/** Include security scheme for authentication */
|
|
167
|
+
includeAuth?: boolean;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Interface for components that can provide OpenAPI documentation
|
|
171
|
+
*/
|
|
172
|
+
export interface OpenAPIDocumentable {
|
|
173
|
+
/**
|
|
174
|
+
* Returns the OpenAPI specification for this component's endpoints
|
|
175
|
+
*/
|
|
176
|
+
getOpenAPISpec(): OpenAPIComponentSpec;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Type guard to check if an object implements OpenAPIDocumentable
|
|
180
|
+
*/
|
|
181
|
+
export declare function isOpenAPIDocumentable(obj: unknown): obj is OpenAPIDocumentable;
|
|
182
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/openapi/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,aAAa,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAA;IACvE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC1C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oBAAoB,CAAC,EAAE,OAAO,GAAG,aAAa,CAAA;CACjD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,aAAa,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAA;CAC5E;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACvC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IAC1C,QAAQ,CAAC,EAAE,0BAA0B,EAAE,CAAA;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,GAAG,CAAC,EAAE,gBAAgB,CAAA;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,OAAO,CAAC,EAAE,gBAAgB,CAAA;IAC1B,IAAI,CAAC,EAAE,gBAAgB,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,CAAA;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAClC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CAC1D;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,UAAU,EAAE,CAAA;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACtC,UAAU,CAAC,EAAE,iBAAiB,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACtC,kCAAkC;IAClC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAA;IACnB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,sBAAsB;IACtB,IAAI,EAAE,WAAW,CAAA;IACjB,kBAAkB;IAClB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,6BAA6B;IAC7B,UAAU,EAAE,mBAAmB,EAAE,CAAA;IACjC,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACjD,iCAAiC;IACjC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAA;IAC7B,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,cAAc,IAAI,oBAAoB,CAAA;CACzC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,mBAAmB,CAO9E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview OpenAPI 3.0 type definitions for automatic documentation generation
|
|
3
|
+
*
|
|
4
|
+
* These types provide a structured way to define OpenAPI specifications
|
|
5
|
+
* for digital twin components.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Type guard to check if an object implements OpenAPIDocumentable
|
|
9
|
+
*/
|
|
10
|
+
export function isOpenAPIDocumentable(obj) {
|
|
11
|
+
return (typeof obj === 'object' &&
|
|
12
|
+
obj !== null &&
|
|
13
|
+
'getOpenAPISpec' in obj &&
|
|
14
|
+
typeof obj.getOpenAPISpec === 'function');
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/openapi/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2LH;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAC9C,OAAO,CACH,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,gBAAgB,IAAI,GAAG;QACvB,OAAQ,GAA2B,CAAC,cAAc,KAAK,UAAU,CACpE,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { StorageService } from '../storage_service.js';
|
|
2
|
+
/**
|
|
3
|
+
* Local filesystem-based implementation of the StorageService.
|
|
4
|
+
* Saves files in a configured folder using a timestamp as filename.
|
|
5
|
+
*/
|
|
6
|
+
export declare class LocalStorageService extends StorageService {
|
|
7
|
+
#private;
|
|
8
|
+
private baseDir;
|
|
9
|
+
constructor(baseDir?: string);
|
|
10
|
+
/**
|
|
11
|
+
* Saves the given buffer to disk under a unique filename.
|
|
12
|
+
* @param buffer - Content to save
|
|
13
|
+
* @param collectorName - Name of the collector (used for folder)
|
|
14
|
+
* @param extension - Optional file extension (e.g. 'json', 'txt')
|
|
15
|
+
* @returns Relative path to the saved file
|
|
16
|
+
*/
|
|
17
|
+
save(buffer: Buffer, collectorName: string, extension?: string): Promise<string>;
|
|
18
|
+
/**
|
|
19
|
+
* Retrieves a file as buffer using its relative path.
|
|
20
|
+
* @param relativePath - Filename previously returned by `save`
|
|
21
|
+
* @returns File content as Buffer
|
|
22
|
+
* @throws Error if path traversal is detected
|
|
23
|
+
*/
|
|
24
|
+
retrieve(relativePath: string): Promise<Buffer>;
|
|
25
|
+
/**
|
|
26
|
+
* Deletes a stored file.
|
|
27
|
+
* @param relativePath - Filename previously returned by `save`
|
|
28
|
+
* @throws Error if path traversal is detected
|
|
29
|
+
*/
|
|
30
|
+
delete(relativePath: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Saves the given buffer to disk at a specific path (preserves filename).
|
|
33
|
+
* Unlike save(), this method does not auto-generate a timestamp filename.
|
|
34
|
+
* @param buffer - Content to save
|
|
35
|
+
* @param relativePath - Full relative path including filename (e.g., 'tilesets/123/tileset.json')
|
|
36
|
+
* @returns The same relative path that was provided
|
|
37
|
+
* @throws Error if path traversal is detected
|
|
38
|
+
*/
|
|
39
|
+
saveWithPath(buffer: Buffer, relativePath: string): Promise<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Returns a local file path for the stored file.
|
|
42
|
+
* Note: For local storage, this returns a relative file path, not an HTTP URL.
|
|
43
|
+
* In production, use a cloud storage service (OVH, S3) for public URLs.
|
|
44
|
+
* @param relativePath - The storage path of the file
|
|
45
|
+
* @returns The file path (relative to baseDir)
|
|
46
|
+
* @throws Error if path traversal is detected
|
|
47
|
+
*/
|
|
48
|
+
getPublicUrl(relativePath: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Deletes all files under a given prefix (folder).
|
|
51
|
+
* @param prefix - The folder/prefix to delete (e.g., 'tilesets/123')
|
|
52
|
+
* @returns Number of files deleted
|
|
53
|
+
* @throws Error if path traversal is detected
|
|
54
|
+
*/
|
|
55
|
+
deleteByPrefix(prefix: string): Promise<number>;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=local_storage_service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local_storage_service.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/local_storage_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAItD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;;IAGvC,OAAO,CAAC,OAAO;gBAAP,OAAO,GAAE,MAAe;IAqB5C;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAetF;;;;;OAKG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrD;;;;OAIG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjD;;;;;;;OAOG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzE;;;;;;;OAOG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAQ1C;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgCxD"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { StorageService } from '../storage_service.js';
|
|
2
|
+
import fs from 'fs/promises';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
/**
|
|
5
|
+
* Local filesystem-based implementation of the StorageService.
|
|
6
|
+
* Saves files in a configured folder using a timestamp as filename.
|
|
7
|
+
*/
|
|
8
|
+
export class LocalStorageService extends StorageService {
|
|
9
|
+
#normalizedBase;
|
|
10
|
+
constructor(baseDir = 'data') {
|
|
11
|
+
super();
|
|
12
|
+
this.baseDir = baseDir;
|
|
13
|
+
this.#normalizedBase = path.resolve(this.baseDir);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validates that a path does not escape the base directory (path traversal protection).
|
|
17
|
+
* @param relativePath - The relative path to validate
|
|
18
|
+
* @returns The resolved absolute path if valid
|
|
19
|
+
* @throws Error if path traversal is detected
|
|
20
|
+
*/
|
|
21
|
+
#validatePath(relativePath) {
|
|
22
|
+
const resolved = path.resolve(this.#normalizedBase, relativePath);
|
|
23
|
+
if (!resolved.startsWith(this.#normalizedBase + path.sep) && resolved !== this.#normalizedBase) {
|
|
24
|
+
throw new Error(`Invalid path: path traversal detected for "${relativePath}"`);
|
|
25
|
+
}
|
|
26
|
+
return resolved;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Saves the given buffer to disk under a unique filename.
|
|
30
|
+
* @param buffer - Content to save
|
|
31
|
+
* @param collectorName - Name of the collector (used for folder)
|
|
32
|
+
* @param extension - Optional file extension (e.g. 'json', 'txt')
|
|
33
|
+
* @returns Relative path to the saved file
|
|
34
|
+
*/
|
|
35
|
+
async save(buffer, collectorName, extension) {
|
|
36
|
+
const now = new Date();
|
|
37
|
+
const timestamp = now.toISOString().replace(/[:.]/g, '-');
|
|
38
|
+
const folder = collectorName || 'default';
|
|
39
|
+
const filename = extension ? `${timestamp}.${extension}` : timestamp;
|
|
40
|
+
const dirPath = path.join(this.baseDir, folder);
|
|
41
|
+
const filePath = path.join(dirPath, filename);
|
|
42
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
43
|
+
await fs.writeFile(filePath, buffer);
|
|
44
|
+
// return relative path (e.g., 'mycollector/2025-07-07T15-45-22-456Z.json')
|
|
45
|
+
return path.join(folder, filename);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Retrieves a file as buffer using its relative path.
|
|
49
|
+
* @param relativePath - Filename previously returned by `save`
|
|
50
|
+
* @returns File content as Buffer
|
|
51
|
+
* @throws Error if path traversal is detected
|
|
52
|
+
*/
|
|
53
|
+
async retrieve(relativePath) {
|
|
54
|
+
const filePath = this.#validatePath(relativePath);
|
|
55
|
+
return fs.readFile(filePath);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Deletes a stored file.
|
|
59
|
+
* @param relativePath - Filename previously returned by `save`
|
|
60
|
+
* @throws Error if path traversal is detected
|
|
61
|
+
*/
|
|
62
|
+
async delete(relativePath) {
|
|
63
|
+
const filePath = this.#validatePath(relativePath);
|
|
64
|
+
await fs.rm(filePath, { force: true });
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Saves the given buffer to disk at a specific path (preserves filename).
|
|
68
|
+
* Unlike save(), this method does not auto-generate a timestamp filename.
|
|
69
|
+
* @param buffer - Content to save
|
|
70
|
+
* @param relativePath - Full relative path including filename (e.g., 'tilesets/123/tileset.json')
|
|
71
|
+
* @returns The same relative path that was provided
|
|
72
|
+
* @throws Error if path traversal is detected
|
|
73
|
+
*/
|
|
74
|
+
async saveWithPath(buffer, relativePath) {
|
|
75
|
+
const filePath = this.#validatePath(relativePath);
|
|
76
|
+
const dirPath = path.dirname(filePath);
|
|
77
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
78
|
+
await fs.writeFile(filePath, buffer);
|
|
79
|
+
return relativePath;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns a local file path for the stored file.
|
|
83
|
+
* Note: For local storage, this returns a relative file path, not an HTTP URL.
|
|
84
|
+
* In production, use a cloud storage service (OVH, S3) for public URLs.
|
|
85
|
+
* @param relativePath - The storage path of the file
|
|
86
|
+
* @returns The file path (relative to baseDir)
|
|
87
|
+
* @throws Error if path traversal is detected
|
|
88
|
+
*/
|
|
89
|
+
getPublicUrl(relativePath) {
|
|
90
|
+
// Validate path to prevent traversal (even though this just returns a string)
|
|
91
|
+
this.#validatePath(relativePath);
|
|
92
|
+
// For local storage, return the file path
|
|
93
|
+
// In a real deployment, you'd need Express static serving or similar
|
|
94
|
+
return path.join(this.baseDir, relativePath);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Deletes all files under a given prefix (folder).
|
|
98
|
+
* @param prefix - The folder/prefix to delete (e.g., 'tilesets/123')
|
|
99
|
+
* @returns Number of files deleted
|
|
100
|
+
* @throws Error if path traversal is detected
|
|
101
|
+
*/
|
|
102
|
+
async deleteByPrefix(prefix) {
|
|
103
|
+
const folderPath = this.#validatePath(prefix);
|
|
104
|
+
try {
|
|
105
|
+
// Check if folder exists
|
|
106
|
+
await fs.access(folderPath);
|
|
107
|
+
// Count files before deletion
|
|
108
|
+
const countFiles = async (dir) => {
|
|
109
|
+
let count = 0;
|
|
110
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
111
|
+
for (const entry of entries) {
|
|
112
|
+
if (entry.isDirectory()) {
|
|
113
|
+
count += await countFiles(path.join(dir, entry.name));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
count++;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return count;
|
|
120
|
+
};
|
|
121
|
+
const fileCount = await countFiles(folderPath);
|
|
122
|
+
// Delete folder recursively
|
|
123
|
+
await fs.rm(folderPath, { recursive: true, force: true });
|
|
124
|
+
return fileCount;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
// Folder doesn't exist
|
|
128
|
+
return 0;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=local_storage_service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local_storage_service.js","sourceRoot":"","sources":["../../../src/storage/adapters/local_storage_service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { StorageService } from '../storage_service.js';
|
|
2
|
+
export interface OvhS3Config {
|
|
3
|
+
accessKey: string;
|
|
4
|
+
secretKey: string;
|
|
5
|
+
endpoint: string;
|
|
6
|
+
region?: string;
|
|
7
|
+
bucket: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class OvhS3StorageService extends StorageService {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(config: OvhS3Config);
|
|
12
|
+
/**
|
|
13
|
+
* Uploads a file to the OVH S3-compatible object storage.
|
|
14
|
+
* @param buffer - File contents to upload
|
|
15
|
+
* @param collectorName - Folder/prefix to store under
|
|
16
|
+
* @param extension - Optional file extension (e.g. 'json')
|
|
17
|
+
* @returns The relative path (key) of the stored object
|
|
18
|
+
*/
|
|
19
|
+
save(buffer: Buffer, collectorName: string, extension?: string): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Downloads and returns a stored object as a Buffer.
|
|
22
|
+
* @param relativePath - The key/path of the object to retrieve
|
|
23
|
+
* @returns The object contents as a Buffer
|
|
24
|
+
*/
|
|
25
|
+
retrieve(relativePath: string): Promise<Buffer>;
|
|
26
|
+
/**
|
|
27
|
+
* Deletes an object from the storage bucket.
|
|
28
|
+
* @param relativePath - The key/path of the object to delete
|
|
29
|
+
*/
|
|
30
|
+
delete(relativePath: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Uploads a file to OVH S3 at a specific path (preserves filename).
|
|
33
|
+
* Unlike save(), this method does not auto-generate a timestamp filename.
|
|
34
|
+
* Files are uploaded with public-read ACL for direct access (e.g., Cesium tilesets).
|
|
35
|
+
* @param buffer - File contents to upload
|
|
36
|
+
* @param relativePath - Full relative path including filename (e.g., 'tilesets/123/tileset.json')
|
|
37
|
+
* @returns The same relative path that was provided
|
|
38
|
+
*/
|
|
39
|
+
saveWithPath(buffer: Buffer, relativePath: string): Promise<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Deletes multiple objects in batch using S3 DeleteObjects API.
|
|
42
|
+
* Much faster than individual deletes - can delete up to 1000 objects per request.
|
|
43
|
+
* @param paths - Array of object keys to delete
|
|
44
|
+
*/
|
|
45
|
+
deleteBatch(paths: string[]): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Returns the public URL for a stored file.
|
|
48
|
+
* Constructs the OVH S3 public URL format: https://{bucket}.{endpoint_host}/{key}
|
|
49
|
+
* @param relativePath - The storage path/key of the file
|
|
50
|
+
* @returns The public URL to access the file directly
|
|
51
|
+
*/
|
|
52
|
+
getPublicUrl(relativePath: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Deletes all objects under a given prefix (folder).
|
|
55
|
+
* Lists objects by prefix and deletes them in batches for performance.
|
|
56
|
+
* @param prefix - The folder/prefix to delete (e.g., 'tilesets/123')
|
|
57
|
+
* @returns Number of files deleted
|
|
58
|
+
*/
|
|
59
|
+
deleteByPrefix(prefix: string): Promise<number>;
|
|
60
|
+
/**
|
|
61
|
+
* Configure CORS settings for the bucket.
|
|
62
|
+
* Required for browser-based access to public files (e.g., Cesium loading tilesets).
|
|
63
|
+
* Should be called once during application startup.
|
|
64
|
+
*
|
|
65
|
+
* @param allowedOrigins - List of allowed origins (default: ['*'])
|
|
66
|
+
* @param allowedMethods - List of allowed HTTP methods (default: ['GET', 'HEAD'])
|
|
67
|
+
* @param allowedHeaders - List of allowed headers (default: ['*', 'Authorization'])
|
|
68
|
+
* @returns true if successful, false otherwise
|
|
69
|
+
*/
|
|
70
|
+
configureCors(allowedOrigins?: string[], allowedMethods?: string[], allowedHeaders?: string[]): Promise<boolean>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=ovh_storage_service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ovh_storage_service.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/ovh_storage_service.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAOtD,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,mBAAoB,SAAQ,cAAc;;gBAKvC,MAAM,EAAE,WAAW;IAkB/B;;;;;;OAMG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBtF;;;;OAIG;IACG,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBrD;;;OAGG;IACG,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD;;;;;;;OAOG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAazE;;;;OAIG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCjD;;;;;OAKG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAO1C;;;;;OAKG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0CrD;;;;;;;;;OASG;IACG,aAAa,CACf,cAAc,GAAE,MAAM,EAAU,EAChC,cAAc,GAAE,MAAM,EAAoB,EAC1C,cAAc,GAAE,MAAM,EAA2B,GAClD,OAAO,CAAC,OAAO,CAAC;CAyBtB"}
|