@lilaquadrat/studio 10.0.0-beta.5 → 10.0.0-beta.51
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/eslint.config.js +146 -0
- package/lib/fastify-plugins.d.ts +4 -0
- package/lib/fastify-plugins.js +5 -0
- package/lib/fastify-plugins.js.map +1 -0
- package/lib/helpers.d.ts +4 -2
- package/lib/helpers.js +13 -2
- package/lib/helpers.js.map +1 -1
- package/lib/main.d.ts +1 -3
- package/lib/main.js +7 -3
- package/lib/main.js.map +1 -1
- package/lib/models.d.ts +4 -4
- package/lib/models.js +4 -4
- package/lib/models.js.map +1 -1
- package/lib/services.d.ts +5 -8
- package/lib/services.js +27 -9
- package/lib/services.js.map +1 -1
- package/lib/src/Immutable.class.d.ts +8 -1
- package/lib/src/Immutable.class.js +52 -8
- package/lib/src/Immutable.class.js.map +1 -1
- package/lib/src/ShareClientFactory.class.d.ts +1 -3
- package/lib/src/ShareClientFactory.class.js +1 -9
- package/lib/src/ShareClientFactory.class.js.map +1 -1
- package/lib/src/classes/models.class.js.map +1 -1
- package/lib/src/classes/modelv2.class.d.ts +2 -0
- package/lib/src/classes/modelv2.class.js +1 -1
- package/lib/src/classes/modelv2.class.js.map +1 -1
- package/lib/src/classes/mongo.class.js +4 -14
- package/lib/src/classes/mongo.class.js.map +1 -1
- package/lib/src/functions/handleError.d.ts +2 -3
- package/lib/src/functions/handleError.js +3 -16
- package/lib/src/functions/handleError.js.map +1 -1
- package/lib/src/functions/optionsHelper.d.ts +4 -4
- package/lib/src/functions/optionsHelper.js +5 -4
- package/lib/src/functions/optionsHelper.js.map +1 -1
- package/lib/src/functions/respondCode.d.ts +2 -1
- package/lib/src/functions/respondCode.js +1 -1
- package/lib/src/functions/respondCode.js.map +1 -1
- package/lib/src/helpers/ControllerHelper.d.ts +73 -0
- package/lib/src/helpers/ControllerHelper.js +242 -0
- package/lib/src/helpers/ControllerHelper.js.map +1 -0
- package/lib/src/helpers/EnvMapper.d.ts +0 -0
- package/lib/src/helpers/EnvMapper.js +1 -0
- package/lib/src/helpers/EnvMapper.js.map +1 -0
- package/lib/src/helpers/auth0config.d.ts +6 -0
- package/lib/src/helpers/auth0config.js +23 -0
- package/lib/src/helpers/auth0config.js.map +1 -0
- package/lib/src/helpers/authPlugin.d.ts +29 -0
- package/lib/src/helpers/authPlugin.js +77 -0
- package/lib/src/helpers/authPlugin.js.map +1 -0
- package/lib/src/helpers/cacheHelper.d.ts +69 -0
- package/lib/src/helpers/cacheHelper.js +235 -0
- package/lib/src/helpers/cacheHelper.js.map +1 -0
- package/lib/src/helpers/createSasToken.d.ts +0 -2
- package/lib/src/helpers/createSasToken.js +35 -32
- package/lib/src/helpers/createSasToken.js.map +1 -1
- package/lib/src/helpers/getSecrets.d.ts +1 -1
- package/lib/src/helpers/getSecrets.js +10 -12
- package/lib/src/helpers/getSecrets.js.map +1 -1
- package/lib/src/helpers/queryAssertionPlugin.d.ts +3 -0
- package/lib/src/helpers/queryAssertionPlugin.js +20 -0
- package/lib/src/helpers/queryAssertionPlugin.js.map +1 -0
- package/lib/src/helpers/safeObjectId.d.ts +1 -1
- package/lib/src/helpers/safeObjectId.js +5 -1
- package/lib/src/helpers/safeObjectId.js.map +1 -1
- package/lib/src/helpers/storageSdkFactory.d.ts +2 -0
- package/lib/src/helpers/storageSdkFactory.js +11 -0
- package/lib/src/helpers/storageSdkFactory.js.map +1 -0
- package/lib/src/helpers/studioAppPlugin.d.ts +3 -0
- package/lib/src/helpers/studioAppPlugin.js +16 -0
- package/lib/src/helpers/studioAppPlugin.js.map +1 -0
- package/lib/src/logger.js +154 -32
- package/lib/src/logger.js.map +1 -1
- package/lib/src/models/customers.model.js +14 -4
- package/lib/src/models/customers.model.js.map +1 -1
- package/lib/src/models/design.model.d.ts +4 -0
- package/lib/src/models/design.model.js +58 -0
- package/lib/src/models/design.model.js.map +1 -0
- package/lib/src/models/domain.model.js +1 -1
- package/lib/src/models/domain.model.js.map +1 -1
- package/lib/src/models/editor.model.js +7 -0
- package/lib/src/models/editor.model.js.map +1 -1
- package/lib/src/models/emailLimit.model.d.ts +4 -0
- package/lib/src/models/emailLimit.model.js +31 -0
- package/lib/src/models/emailLimit.model.js.map +1 -0
- package/lib/src/models/hosting.model.js +1 -3
- package/lib/src/models/hosting.model.js.map +1 -1
- package/lib/src/models/hostingSettings.model.js +6 -4
- package/lib/src/models/hostingSettings.model.js.map +1 -1
- package/lib/src/models/invoice.model.d.ts +4 -0
- package/lib/src/models/invoice.model.js +235 -0
- package/lib/src/models/invoice.model.js.map +1 -0
- package/lib/src/models/mailFrom.model.js +53 -10
- package/lib/src/models/mailFrom.model.js.map +1 -1
- package/lib/src/models/project.model.js +2 -4
- package/lib/src/models/project.model.js.map +1 -1
- package/lib/src/models/publish-method.model.js +79 -430
- package/lib/src/models/publish-method.model.js.map +1 -1
- package/lib/src/models/storage.model.js +11 -3
- package/lib/src/models/storage.model.js.map +1 -1
- package/lib/src/prompts/textGeneration.js +88 -0
- package/lib/src/prompts/textGeneration.js.map +1 -1
- package/lib/src/prompts/textGenerationMulti.js +78 -44
- package/lib/src/prompts/textGenerationMulti.js.map +1 -1
- package/lib/src/services/access.service.d.ts +0 -37
- package/lib/src/services/access.service.js +119 -108
- package/lib/src/services/access.service.js.map +1 -1
- package/lib/src/services/ai.service.d.ts +4 -3
- package/lib/src/services/ai.service.js +22 -29
- package/lib/src/services/ai.service.js.map +1 -1
- package/lib/src/services/auth.service.d.ts +10 -0
- package/lib/src/services/auth.service.js +63 -0
- package/lib/src/services/auth.service.js.map +1 -0
- package/lib/src/services/conf.service.d.ts +3 -31
- package/lib/src/services/conf.service.js +58 -167
- package/lib/src/services/conf.service.js.map +1 -1
- package/lib/src/services/customers.service.d.ts +8 -4
- package/lib/src/services/customers.service.js +34 -7
- package/lib/src/services/customers.service.js.map +1 -1
- package/lib/src/services/designs.service.d.ts +7 -0
- package/lib/src/services/designs.service.js +10 -0
- package/lib/src/services/designs.service.js.map +1 -0
- package/lib/src/services/domains.service.d.ts +18 -91
- package/lib/src/services/domains.service.js +91 -559
- package/lib/src/services/domains.service.js.map +1 -1
- package/lib/src/services/editor.service.d.ts +4 -0
- package/lib/src/services/editor.service.js +28 -0
- package/lib/src/services/editor.service.js.map +1 -1
- package/lib/src/services/emailLimit.service.d.ts +21 -0
- package/lib/src/services/emailLimit.service.js +51 -0
- package/lib/src/services/emailLimit.service.js.map +1 -0
- package/lib/src/services/hosting.service.d.ts +12 -24
- package/lib/src/services/hosting.service.js +32 -122
- package/lib/src/services/hosting.service.js.map +1 -1
- package/lib/src/services/hostingAdmin.service.d.ts +1 -1
- package/lib/src/services/hostingAdmin.service.js +2 -2
- package/lib/src/services/hostingAdmin.service.js.map +1 -1
- package/lib/src/services/import.service.d.ts +6 -22
- package/lib/src/services/import.service.js +63 -65
- package/lib/src/services/import.service.js.map +1 -1
- package/lib/src/services/invoices.service.d.ts +30 -0
- package/lib/src/services/invoices.service.js +265 -0
- package/lib/src/services/invoices.service.js.map +1 -0
- package/lib/src/services/jetstream.service.d.ts +5 -3
- package/lib/src/services/jetstream.service.js +63 -7
- package/lib/src/services/jetstream.service.js.map +1 -1
- package/lib/src/services/listParticipants.service.d.ts +2 -5
- package/lib/src/services/listParticipants.service.js +17 -14
- package/lib/src/services/listParticipants.service.js.map +1 -1
- package/lib/src/services/mailFrom.service.d.ts +14 -1
- package/lib/src/services/mailFrom.service.js +55 -0
- package/lib/src/services/mailFrom.service.js.map +1 -1
- package/lib/src/services/me.service.d.ts +22 -12
- package/lib/src/services/me.service.js +58 -89
- package/lib/src/services/me.service.js.map +1 -1
- package/lib/src/services/publish.service.d.ts +3 -7
- package/lib/src/services/publish.service.js +32 -32
- package/lib/src/services/publish.service.js.map +1 -1
- package/lib/src/services/publishData.service.d.ts +10 -7
- package/lib/src/services/publishData.service.js +32 -75
- package/lib/src/services/publishData.service.js.map +1 -1
- package/lib/src/services/spamAnalasys.service.d.ts +4 -4
- package/lib/src/services/spamAnalasys.service.js +36 -44
- package/lib/src/services/spamAnalasys.service.js.map +1 -1
- package/lib/src/services/storage.service.d.ts +22 -29
- package/lib/src/services/storage.service.js +123 -57
- package/lib/src/services/storage.service.js.map +1 -1
- package/lib/src/services/structures.service.d.ts +1 -1
- package/lib/src/services/upload.service.js +6 -1
- package/lib/src/services/upload.service.js.map +1 -1
- package/package.json +28 -29
- package/lib/src/AzureBlobStorage.share.d.ts +0 -19
- package/lib/src/AzureBlobStorage.share.js +0 -162
- package/lib/src/AzureBlobStorage.share.js.map +0 -1
- package/lib/src/AzureFileStorage.share.d.ts +0 -22
- package/lib/src/AzureFileStorage.share.js +0 -139
- package/lib/src/AzureFileStorage.share.js.map +0 -1
- package/lib/src/AzureVault.d.ts +0 -14
- package/lib/src/AzureVault.js +0 -28
- package/lib/src/AzureVault.js.map +0 -1
- package/lib/src/dns.challenge.class.d.ts +0 -17
- package/lib/src/dns.challenge.class.js +0 -41
- package/lib/src/dns.challenge.class.js.map +0 -1
- package/lib/src/http.challenge.class.d.ts +0 -33
- package/lib/src/http.challenge.class.js +0 -58
- package/lib/src/http.challenge.class.js.map +0 -1
- package/lib/src/models/certificate-action.model.d.ts +0 -5
- package/lib/src/models/certificate-action.model.js +0 -230
- package/lib/src/models/certificate-action.model.js.map +0 -1
- package/lib/src/models/certificate.model.d.ts +0 -4
- package/lib/src/models/certificate.model.js +0 -96
- package/lib/src/models/certificate.model.js.map +0 -1
- package/lib/src/models/editorBase.model.d.ts +0 -4
- package/lib/src/models/editorBase.model.js +0 -39
- package/lib/src/models/editorBase.model.js.map +0 -1
- package/lib/src/services/certificates.service.d.ts +0 -56
- package/lib/src/services/certificates.service.js +0 -169
- package/lib/src/services/certificates.service.js.map +0 -1
- package/lib/src/services/certificatesAction.service.d.ts +0 -41
- package/lib/src/services/certificatesAction.service.js +0 -188
- package/lib/src/services/certificatesAction.service.js.map +0 -1
- package/lib/src/services/editorBase.service.d.ts +0 -46
- package/lib/src/services/editorBase.service.js +0 -161
- package/lib/src/services/editorBase.service.js.map +0 -1
- package/lib/src/services/handleFile.service.d.ts +0 -9
- package/lib/src/services/handleFile.service.js +0 -45
- package/lib/src/services/handleFile.service.js.map +0 -1
- package/lib/src/services/media.service.d.ts +0 -35
- package/lib/src/services/media.service.js +0 -418
- package/lib/src/services/media.service.js.map +0 -1
- package/lib/src/services/share.service.d.ts +0 -6
- package/lib/src/services/share.service.js +0 -4
- package/lib/src/services/share.service.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth0config.js","sourceRoot":"","sources":["../../../src/helpers/auth0config.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,4BAA4B,CAAC;AAEtD,eAAe,KAAK,EAAE,GAAW,EAAE,EAAE;IAEnC,IAAI,QAAQ,GAAG;QACb,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,OAAiB;QAClC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAoB;QACxC,MAAM,EAAE,KAAK;KACd,CAAC;IAEF,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QAEzB,MAAM,YAAY,GAAG,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,YAAY,EAAE,CAAC;YAEjB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEjG,IAAI,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBAE3B,QAAQ,GAAG;oBACT,GAAG,EAAE,WAAW,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB;oBAC9D,MAAM,EAAE,WAAW,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;oBAC5C,MAAM,EAAE,IAAI;iBACb,CAAC;YAEJ,CAAC;QAEH,CAAC;IAEH,CAAC;IAED,OAAO,QAAQ,CAAC;AAElB,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FastifyPluginAsync } from 'fastify';
|
|
2
|
+
type OAuthJwtUser = {
|
|
3
|
+
given_name: string;
|
|
4
|
+
family_name: string;
|
|
5
|
+
nickname: string;
|
|
6
|
+
name: string;
|
|
7
|
+
picture: string;
|
|
8
|
+
updated_at: string;
|
|
9
|
+
iss: string;
|
|
10
|
+
sub: string;
|
|
11
|
+
aud: string;
|
|
12
|
+
iat: number;
|
|
13
|
+
exp: number;
|
|
14
|
+
at_hash: string;
|
|
15
|
+
nonce: string;
|
|
16
|
+
email_verified: boolean;
|
|
17
|
+
gty?: string;
|
|
18
|
+
scope?: string;
|
|
19
|
+
permissions?: string[];
|
|
20
|
+
azp?: string;
|
|
21
|
+
customerInternalId?: any;
|
|
22
|
+
};
|
|
23
|
+
declare module '@fastify/jwt' {
|
|
24
|
+
interface FastifyJWT {
|
|
25
|
+
user: OAuthJwtUser;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
declare const _default: FastifyPluginAsync;
|
|
29
|
+
export default _default;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { promisify } from 'node:util';
|
|
2
|
+
import fp from 'fastify-plugin';
|
|
3
|
+
import fastifyJwt from '@fastify/jwt';
|
|
4
|
+
import jwksRsa from 'jwks-rsa';
|
|
5
|
+
import respondCode from '../functions/respondCode.js';
|
|
6
|
+
import auth0config from './auth0config.js';
|
|
7
|
+
const authPlugin = async (fastify) => {
|
|
8
|
+
if (process.env.ENV !== 'dev') {
|
|
9
|
+
// Per-domain JWKS client cache to avoid re-creating clients on every request
|
|
10
|
+
const jwksClients = new Map();
|
|
11
|
+
const getJwksClient = (jwksUri) => {
|
|
12
|
+
if (!jwksClients.has(jwksUri)) {
|
|
13
|
+
jwksClients.set(jwksUri, jwksRsa({
|
|
14
|
+
cache: true,
|
|
15
|
+
cacheMaxEntries: 5,
|
|
16
|
+
cacheMaxAge: 600000, // 10 minutes in ms
|
|
17
|
+
rateLimit: true,
|
|
18
|
+
jwksRequestsPerMinute: 10,
|
|
19
|
+
jwksUri,
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
return jwksClients.get(jwksUri);
|
|
23
|
+
};
|
|
24
|
+
// Production: Register JWT with JWKS
|
|
25
|
+
await fastify.register(fastifyJwt, {
|
|
26
|
+
decode: { complete: true },
|
|
27
|
+
secret: async (request, token) => {
|
|
28
|
+
const header = 'header' in token ? token.header : token;
|
|
29
|
+
const app = request.studioApp ?? 'editor-app';
|
|
30
|
+
const settings = await auth0config(app);
|
|
31
|
+
request.customApp = settings.custom;
|
|
32
|
+
const jwksUri = settings.url;
|
|
33
|
+
const client = getJwksClient(jwksUri);
|
|
34
|
+
const key = await promisify(client.getSigningKey.bind(client))(header.kid);
|
|
35
|
+
return key.getPublicKey();
|
|
36
|
+
},
|
|
37
|
+
verify: {
|
|
38
|
+
algorithms: ['RS256']
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
// Decorate with authenticate method for production
|
|
42
|
+
fastify.decorate('authenticate', async (request, reply) => {
|
|
43
|
+
try {
|
|
44
|
+
await request.jwtVerify();
|
|
45
|
+
request.auth = request.user;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
return respondCode("UNAUTHORIZED", reply);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Dev: Mock authentication
|
|
54
|
+
fastify.decorate('authenticate', async (request, reply) => {
|
|
55
|
+
request.auth = {
|
|
56
|
+
sub: process.env.DEV_USER,
|
|
57
|
+
given_name: 'Dev',
|
|
58
|
+
family_name: 'User',
|
|
59
|
+
nickname: 'devuser',
|
|
60
|
+
name: 'Dev User',
|
|
61
|
+
picture: '',
|
|
62
|
+
updated_at: new Date().toISOString(),
|
|
63
|
+
iss: 'dev',
|
|
64
|
+
aud: 'dev',
|
|
65
|
+
iat: Math.floor(Date.now() / 1000),
|
|
66
|
+
exp: Math.floor(Date.now() / 1000) + 3600,
|
|
67
|
+
at_hash: '',
|
|
68
|
+
nonce: '',
|
|
69
|
+
email_verified: true
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
export default fp(authPlugin, {
|
|
75
|
+
name: 'auth-plugin'
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=authPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authPlugin.js","sourceRoot":"","sources":["../../../src/helpers/authPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache duration constants (in seconds)
|
|
3
|
+
*/
|
|
4
|
+
export declare const CacheDuration: {
|
|
5
|
+
/** 1 year - for immutable/versioned assets */
|
|
6
|
+
readonly IMMUTABLE: 31536000;
|
|
7
|
+
/** 1 month - for stable assets */
|
|
8
|
+
readonly LONG: 2592000;
|
|
9
|
+
/** 1 week - for semi-stable assets */
|
|
10
|
+
readonly MEDIUM: 604800;
|
|
11
|
+
/** 1 day - for frequently updated assets */
|
|
12
|
+
readonly SHORT: 86400;
|
|
13
|
+
/** 1 hour - for dynamic content */
|
|
14
|
+
readonly DYNAMIC: 3600;
|
|
15
|
+
/** No cache - for always fresh content */
|
|
16
|
+
readonly NONE: 0;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Cache helper class for managing HTTP cache headers and durations
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // Get cache duration
|
|
23
|
+
* const duration = CacheHelper.getCacheDuration('image/jpeg'); // 2592000
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // Build cache control header
|
|
27
|
+
* const header = CacheHelper.buildCacheControlHeader('image/jpeg');
|
|
28
|
+
* // "public, max-age=2592000, stale-while-revalidate=86400"
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Get full config
|
|
32
|
+
* const config = CacheHelper.getCacheConfig('font/woff2');
|
|
33
|
+
* // { cache: 31536000, immutable: true }
|
|
34
|
+
*/
|
|
35
|
+
export default class CacheHelper {
|
|
36
|
+
/**
|
|
37
|
+
* Get cache configuration for a given mime type
|
|
38
|
+
*
|
|
39
|
+
* @param mimeType - The mime type to get configuration for
|
|
40
|
+
* @returns Cache configuration object
|
|
41
|
+
*/
|
|
42
|
+
static getCacheConfig(mimeType: string): {
|
|
43
|
+
cache: number;
|
|
44
|
+
immutable?: boolean;
|
|
45
|
+
staleWhileRevalidate?: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Get cache duration in seconds for a given mime type
|
|
49
|
+
*
|
|
50
|
+
* @param mimeType - The mime type to get cache duration for
|
|
51
|
+
* @returns Cache duration in seconds
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* const cacheTime = CacheHelper.getCacheDuration('image/jpeg'); // Returns 2592000 (1 month)
|
|
55
|
+
* const cacheTime = CacheHelper.getCacheDuration('text/html'); // Returns 0 (no cache)
|
|
56
|
+
*/
|
|
57
|
+
static getCacheDuration(mimeType: string): number;
|
|
58
|
+
/**
|
|
59
|
+
* Build Cache-Control header value for a given mime type
|
|
60
|
+
*
|
|
61
|
+
* @param mimeType - The mime type to build header for
|
|
62
|
+
* @returns Cache-Control header value
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* const header = CacheHelper.buildCacheControlHeader('image/jpeg');
|
|
66
|
+
* // Returns: "public, max-age=2592000, stale-while-revalidate=86400"
|
|
67
|
+
*/
|
|
68
|
+
static buildCacheControlHeader(mimeType: string): string;
|
|
69
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache duration constants (in seconds)
|
|
3
|
+
*/
|
|
4
|
+
export const CacheDuration = {
|
|
5
|
+
/** 1 year - for immutable/versioned assets */
|
|
6
|
+
IMMUTABLE: 31536000,
|
|
7
|
+
/** 1 month - for stable assets */
|
|
8
|
+
LONG: 2592000,
|
|
9
|
+
/** 1 week - for semi-stable assets */
|
|
10
|
+
MEDIUM: 604800,
|
|
11
|
+
/** 1 day - for frequently updated assets */
|
|
12
|
+
SHORT: 86400,
|
|
13
|
+
/** 1 hour - for dynamic content */
|
|
14
|
+
DYNAMIC: 3600,
|
|
15
|
+
/** No cache - for always fresh content */
|
|
16
|
+
NONE: 0,
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Mime type cache configuration
|
|
20
|
+
* Maps mime types to cache duration and other headers
|
|
21
|
+
*/
|
|
22
|
+
const MimeCacheConfig = {
|
|
23
|
+
// HTML - no cache (always fetch fresh)
|
|
24
|
+
'text/html': {
|
|
25
|
+
cache: CacheDuration.NONE,
|
|
26
|
+
},
|
|
27
|
+
// JSON/API responses - no cache
|
|
28
|
+
'application/json': {
|
|
29
|
+
cache: CacheDuration.NONE,
|
|
30
|
+
},
|
|
31
|
+
// Images - long cache (1 month)
|
|
32
|
+
'image/jpeg': {
|
|
33
|
+
cache: CacheDuration.LONG,
|
|
34
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
35
|
+
},
|
|
36
|
+
'image/jpg': {
|
|
37
|
+
cache: CacheDuration.LONG,
|
|
38
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
39
|
+
},
|
|
40
|
+
'image/png': {
|
|
41
|
+
cache: CacheDuration.LONG,
|
|
42
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
43
|
+
},
|
|
44
|
+
'image/gif': {
|
|
45
|
+
cache: CacheDuration.LONG,
|
|
46
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
47
|
+
},
|
|
48
|
+
'image/webp': {
|
|
49
|
+
cache: CacheDuration.LONG,
|
|
50
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
51
|
+
},
|
|
52
|
+
'image/avif': {
|
|
53
|
+
cache: CacheDuration.LONG,
|
|
54
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
55
|
+
},
|
|
56
|
+
'image/svg+xml': {
|
|
57
|
+
cache: CacheDuration.LONG,
|
|
58
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
59
|
+
},
|
|
60
|
+
// Videos - long cache
|
|
61
|
+
'video/mp4': {
|
|
62
|
+
cache: CacheDuration.LONG,
|
|
63
|
+
},
|
|
64
|
+
'video/webm': {
|
|
65
|
+
cache: CacheDuration.LONG,
|
|
66
|
+
},
|
|
67
|
+
'video/ogg': {
|
|
68
|
+
cache: CacheDuration.LONG,
|
|
69
|
+
},
|
|
70
|
+
// Audio - long cache
|
|
71
|
+
'audio/mpeg': {
|
|
72
|
+
cache: CacheDuration.LONG,
|
|
73
|
+
},
|
|
74
|
+
'audio/mp3': {
|
|
75
|
+
cache: CacheDuration.LONG,
|
|
76
|
+
},
|
|
77
|
+
'audio/wav': {
|
|
78
|
+
cache: CacheDuration.LONG,
|
|
79
|
+
},
|
|
80
|
+
'audio/ogg': {
|
|
81
|
+
cache: CacheDuration.LONG,
|
|
82
|
+
},
|
|
83
|
+
// Fonts - immutable (1 year)
|
|
84
|
+
'font/woff': {
|
|
85
|
+
cache: CacheDuration.IMMUTABLE,
|
|
86
|
+
immutable: true,
|
|
87
|
+
},
|
|
88
|
+
'font/woff2': {
|
|
89
|
+
cache: CacheDuration.IMMUTABLE,
|
|
90
|
+
immutable: true,
|
|
91
|
+
},
|
|
92
|
+
'font/ttf': {
|
|
93
|
+
cache: CacheDuration.IMMUTABLE,
|
|
94
|
+
immutable: true,
|
|
95
|
+
},
|
|
96
|
+
'font/otf': {
|
|
97
|
+
cache: CacheDuration.IMMUTABLE,
|
|
98
|
+
immutable: true,
|
|
99
|
+
},
|
|
100
|
+
'application/font-woff': {
|
|
101
|
+
cache: CacheDuration.IMMUTABLE,
|
|
102
|
+
immutable: true,
|
|
103
|
+
},
|
|
104
|
+
'application/font-woff2': {
|
|
105
|
+
cache: CacheDuration.IMMUTABLE,
|
|
106
|
+
immutable: true,
|
|
107
|
+
},
|
|
108
|
+
// CSS/JS - long cache with stale-while-revalidate
|
|
109
|
+
'text/css': {
|
|
110
|
+
cache: CacheDuration.LONG,
|
|
111
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
112
|
+
},
|
|
113
|
+
'application/javascript': {
|
|
114
|
+
cache: CacheDuration.LONG,
|
|
115
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
116
|
+
},
|
|
117
|
+
'text/javascript': {
|
|
118
|
+
cache: CacheDuration.LONG,
|
|
119
|
+
staleWhileRevalidate: CacheDuration.SHORT,
|
|
120
|
+
},
|
|
121
|
+
// Documents - medium cache
|
|
122
|
+
'application/pdf': {
|
|
123
|
+
cache: CacheDuration.MEDIUM,
|
|
124
|
+
},
|
|
125
|
+
'application/msword': {
|
|
126
|
+
cache: CacheDuration.MEDIUM,
|
|
127
|
+
},
|
|
128
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': {
|
|
129
|
+
cache: CacheDuration.MEDIUM,
|
|
130
|
+
},
|
|
131
|
+
'application/vnd.ms-excel': {
|
|
132
|
+
cache: CacheDuration.MEDIUM,
|
|
133
|
+
},
|
|
134
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': {
|
|
135
|
+
cache: CacheDuration.MEDIUM,
|
|
136
|
+
},
|
|
137
|
+
// Archives - long cache
|
|
138
|
+
'application/zip': {
|
|
139
|
+
cache: CacheDuration.LONG,
|
|
140
|
+
},
|
|
141
|
+
'application/x-rar-compressed': {
|
|
142
|
+
cache: CacheDuration.LONG,
|
|
143
|
+
},
|
|
144
|
+
'application/x-7z-compressed': {
|
|
145
|
+
cache: CacheDuration.LONG,
|
|
146
|
+
},
|
|
147
|
+
// Text files - short cache
|
|
148
|
+
'text/plain': {
|
|
149
|
+
cache: CacheDuration.SHORT,
|
|
150
|
+
},
|
|
151
|
+
'text/csv': {
|
|
152
|
+
cache: CacheDuration.SHORT,
|
|
153
|
+
},
|
|
154
|
+
// XML - no cache (often dynamic)
|
|
155
|
+
'application/xml': {
|
|
156
|
+
cache: CacheDuration.NONE,
|
|
157
|
+
},
|
|
158
|
+
'text/xml': {
|
|
159
|
+
cache: CacheDuration.NONE,
|
|
160
|
+
},
|
|
161
|
+
// Default fallback - 1 year cache for everything else
|
|
162
|
+
'*': {
|
|
163
|
+
cache: CacheDuration.IMMUTABLE,
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Cache helper class for managing HTTP cache headers and durations
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* // Get cache duration
|
|
171
|
+
* const duration = CacheHelper.getCacheDuration('image/jpeg'); // 2592000
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* // Build cache control header
|
|
175
|
+
* const header = CacheHelper.buildCacheControlHeader('image/jpeg');
|
|
176
|
+
* // "public, max-age=2592000, stale-while-revalidate=86400"
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* // Get full config
|
|
180
|
+
* const config = CacheHelper.getCacheConfig('font/woff2');
|
|
181
|
+
* // { cache: 31536000, immutable: true }
|
|
182
|
+
*/
|
|
183
|
+
export default class CacheHelper {
|
|
184
|
+
/**
|
|
185
|
+
* Get cache configuration for a given mime type
|
|
186
|
+
*
|
|
187
|
+
* @param mimeType - The mime type to get configuration for
|
|
188
|
+
* @returns Cache configuration object
|
|
189
|
+
*/
|
|
190
|
+
static getCacheConfig(mimeType) {
|
|
191
|
+
return MimeCacheConfig[mimeType] || MimeCacheConfig['*'];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get cache duration in seconds for a given mime type
|
|
195
|
+
*
|
|
196
|
+
* @param mimeType - The mime type to get cache duration for
|
|
197
|
+
* @returns Cache duration in seconds
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* const cacheTime = CacheHelper.getCacheDuration('image/jpeg'); // Returns 2592000 (1 month)
|
|
201
|
+
* const cacheTime = CacheHelper.getCacheDuration('text/html'); // Returns 0 (no cache)
|
|
202
|
+
*/
|
|
203
|
+
static getCacheDuration(mimeType) {
|
|
204
|
+
const config = this.getCacheConfig(mimeType);
|
|
205
|
+
return config.cache;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Build Cache-Control header value for a given mime type
|
|
209
|
+
*
|
|
210
|
+
* @param mimeType - The mime type to build header for
|
|
211
|
+
* @returns Cache-Control header value
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* const header = CacheHelper.buildCacheControlHeader('image/jpeg');
|
|
215
|
+
* // Returns: "public, max-age=2592000, stale-while-revalidate=86400"
|
|
216
|
+
*/
|
|
217
|
+
static buildCacheControlHeader(mimeType) {
|
|
218
|
+
const config = this.getCacheConfig(mimeType);
|
|
219
|
+
const parts = [];
|
|
220
|
+
if (config.cache === 0) {
|
|
221
|
+
parts.push('no-cache', 'no-store', 'must-revalidate');
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
parts.push('public', `max-age=${config.cache}`);
|
|
225
|
+
if (config.immutable) {
|
|
226
|
+
parts.push('immutable');
|
|
227
|
+
}
|
|
228
|
+
if (config.staleWhileRevalidate) {
|
|
229
|
+
parts.push(`stale-while-revalidate=${config.staleWhileRevalidate}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return parts.join(', ');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=cacheHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheHelper.js","sourceRoot":"","sources":["../../../src/helpers/cacheHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +1,36 @@
|
|
|
1
|
-
import { DefaultAzureCredential } from '@azure/identity';
|
|
2
|
-
import { BlobServiceClient, generateBlobSASQueryParameters, BlobSASPermissions } from '@azure/storage-blob';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
//
|
|
32
|
-
//
|
|
1
|
+
// import { DefaultAzureCredential } from '@azure/identity';
|
|
2
|
+
// import { BlobServiceClient, generateBlobSASQueryParameters, BlobSASPermissions } from '@azure/storage-blob';
|
|
3
|
+
// import { ShareClientOptions } from '@lilaquadrat/interfaces';
|
|
4
|
+
// export default async function generateSasToken(accountName: string, containerName: string, blobName: string, expiresInHours: number, options: ShareClientOptions) {
|
|
5
|
+
// let serviceClient: BlobServiceClient | undefined;
|
|
6
|
+
// if (options.accountName) {
|
|
7
|
+
// console.log('storage.blob.use.storage_account');
|
|
8
|
+
// const credentials = new DefaultAzureCredential();
|
|
9
|
+
// serviceClient = new BlobServiceClient(`https://${options.accountName}.blob.core.windows.net`, credentials);
|
|
10
|
+
// } else if (options.connectionString) {
|
|
11
|
+
// console.log('storage.blob.use.connection_string');
|
|
12
|
+
// serviceClient = new BlobServiceClient(options.connectionString);
|
|
13
|
+
// }
|
|
14
|
+
// if (!serviceClient) throw new Error('BLOB_CREDENTIALS_MISSING');
|
|
15
|
+
// // Get user delegation key
|
|
16
|
+
// const delegationKey = await serviceClient.getUserDelegationKey(new Date(), new Date(Date.now() + expiresInHours * 3600 * 1000));
|
|
17
|
+
// // Define SAS permissions (Read-only)
|
|
18
|
+
// const permissions = BlobSASPermissions.parse('r'); // Read-only access
|
|
19
|
+
// const isFolder = !blobName.includes('.');
|
|
20
|
+
// // Generate SAS token
|
|
21
|
+
// const sasToken = generateBlobSASQueryParameters(
|
|
22
|
+
// {
|
|
23
|
+
// containerName,
|
|
24
|
+
// blobName: isFolder ? undefined : blobName,
|
|
25
|
+
// permissions,
|
|
26
|
+
// startsOn: new Date(),
|
|
27
|
+
// expiresOn: new Date(Date.now() + expiresInHours * 3600 * 1000), // Expire in specified hours
|
|
28
|
+
// },
|
|
29
|
+
// delegationKey,
|
|
30
|
+
// accountName,
|
|
31
|
+
// ).toString();
|
|
32
|
+
// return sasToken;
|
|
33
|
+
// }
|
|
34
|
+
// // Usage example:
|
|
35
|
+
// // generateSasToken('yourStorageAccountName', 'yourContainerName', undefined, 2).then(console.log);
|
|
33
36
|
//# sourceMappingURL=createSasToken.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSasToken.js","sourceRoot":"","sources":["../../../src/helpers/createSasToken.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"createSasToken.js","sourceRoot":"","sources":["../../../src/helpers/createSasToken.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,+GAA+G;AAC/G,gEAAgE;AAEhE,sKAAsK;AAEtK,sDAAsD;AAEtD,+BAA+B;AAE/B,uDAAuD;AAEvD,wDAAwD;AACxD,kHAAkH;AAElH,2CAA2C;AAE3C,yDAAyD;AACzD,uEAAuE;AAEvE,MAAM;AAEN,qEAAqE;AAErE,+BAA+B;AAC/B,qIAAqI;AAErI,0CAA0C;AAC1C,2EAA2E;AAE3E,8CAA8C;AAC9C,0BAA0B;AAC1B,qDAAqD;AACrD,QAAQ;AACR,uBAAuB;AACvB,mDAAmD;AACnD,qBAAqB;AACrB,8BAA8B;AAC9B,qGAAqG;AACrG,SAAS;AACT,qBAAqB;AACrB,mBAAmB;AACnB,kBAAkB;AAElB,qBAAqB;AAErB,IAAI;AAEJ,oBAAoB;AACpB,sGAAsG"}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
import { DefaultAzureCredential } from '@azure/identity';
|
|
2
|
-
import AzureVault from '../AzureVault.js';
|
|
1
|
+
// import { DefaultAzureCredential } from '@azure/identity';
|
|
2
|
+
// import AzureVault from '../AzureVault.js';
|
|
3
3
|
export default async (name, vaultUrl, options) => {
|
|
4
|
-
const credentials = new DefaultAzureCredential();
|
|
5
|
-
const secret = await AzureVault.secrets.get(name, vaultUrl, credentials);
|
|
6
|
-
if (!secret.value)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return secret.value;
|
|
13
|
-
}
|
|
4
|
+
// const credentials = new DefaultAzureCredential();
|
|
5
|
+
// const secret = await AzureVault.secrets.get(name, vaultUrl, credentials);
|
|
6
|
+
// if (!secret.value) return '';
|
|
7
|
+
// if (options?.base64) {
|
|
8
|
+
// return Buffer.from(secret.value, 'base64').toString('ascii');
|
|
9
|
+
// } else {
|
|
10
|
+
// return secret.value;
|
|
11
|
+
// }
|
|
14
12
|
};
|
|
15
13
|
//# sourceMappingURL=getSecrets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSecrets.js","sourceRoot":"","sources":["../../../src/helpers/getSecrets.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"getSecrets.js","sourceRoot":"","sources":["../../../src/helpers/getSecrets.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,6CAA6C;AAE7C,eAAe,KAAK,EAAE,IAAY,EAAE,QAAgB,EAAE,OAA0B,EAAE,EAAE;IAElF,oDAAoD;IAEpD,4EAA4E;IAC5E,gCAAgC;IAEhC,yBAAyB;IAEzB,kEAAkE;IAElE,WAAW;IAEX,yBAAyB;IAEzB,IAAI;AAEN,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import fp from 'fastify-plugin';
|
|
2
|
+
import queryString from 'query-string';
|
|
3
|
+
// Custom query parser to handle booleans, numbers, and bracket arrays
|
|
4
|
+
const queryAssertionPlugin = async (fastify) => {
|
|
5
|
+
fastify.addHook('onRequest', async (request, reply) => {
|
|
6
|
+
const url = new URL(request.url, `http://${request.headers.host}`);
|
|
7
|
+
if (url.search) {
|
|
8
|
+
const parsed = queryString.parse(url.search, {
|
|
9
|
+
parseBooleans: true,
|
|
10
|
+
parseNumbers: true,
|
|
11
|
+
arrayFormat: 'bracket'
|
|
12
|
+
});
|
|
13
|
+
request.query = parsed;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
export default fp(queryAssertionPlugin, {
|
|
18
|
+
name: 'query-assertion-plugin'
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=queryAssertionPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryAssertionPlugin.js","sourceRoot":"","sources":["../../../src/helpers/queryAssertionPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,WAAW,MAAM,cAAc,CAAC;AAEvC,sEAAsE;AACtE,MAAM,oBAAoB,GAAuB,KAAK,EAAE,OAAwB,EAAE,EAAE;IAElF,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAEpD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAEf,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;gBAC3C,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,IAAI;gBAClB,WAAW,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,GAAG,MAAa,CAAC;QAEhC,CAAC;IAEH,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC;AAEF,eAAe,EAAE,CAAC,oBAAoB,EAAE;IACtC,IAAI,EAAE,wBAAwB;CAC/B,CAAC,CAAC"}
|
|
@@ -4,5 +4,5 @@ import { ObjectIdString } from '@lilaquadrat/interfaces';
|
|
|
4
4
|
* check if the provided string can be a ObjectId and returns a real ObjectId Object.
|
|
5
5
|
* if the string is not a compatible objectid string it will retun undefined
|
|
6
6
|
*/
|
|
7
|
-
declare const _default: (possibleObjectId?: ObjectIdString, field?: string) => ObjectId;
|
|
7
|
+
declare const _default: (possibleObjectId?: ObjectIdString | ObjectId, field?: string) => ObjectId;
|
|
8
8
|
export default _default;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { ObjectId } from 'mongodb';
|
|
2
2
|
import InvalidIdError from '../classes/errors/InvalidId.error.js';
|
|
3
|
+
import isValidObjectId from './isValidObjectId.js';
|
|
3
4
|
/**
|
|
4
5
|
* check if the provided string can be a ObjectId and returns a real ObjectId Object.
|
|
5
6
|
* if the string is not a compatible objectid string it will retun undefined
|
|
6
7
|
*/
|
|
7
8
|
export default (possibleObjectId, field) => {
|
|
8
|
-
if (
|
|
9
|
+
if (isValidObjectId(possibleObjectId)) {
|
|
10
|
+
return possibleObjectId;
|
|
11
|
+
}
|
|
12
|
+
if (!possibleObjectId || (typeof possibleObjectId === 'string' && possibleObjectId?.length !== 24)) {
|
|
9
13
|
throw new InvalidIdError('INVALID_ID', undefined, { invalid: field });
|
|
10
14
|
}
|
|
11
15
|
return new ObjectId(possibleObjectId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safeObjectId.js","sourceRoot":"","sources":["../../../src/helpers/safeObjectId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,cAAc,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"safeObjectId.js","sourceRoot":"","sources":["../../../src/helpers/safeObjectId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,cAAc,MAAM,sCAAsC,CAAC;AAElE,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAEnD;;;EAGE;AACF,eAAe,CAAC,gBAA4C,EAAE,KAAc,EAAE,EAAE;IAE9E,IAAG,eAAe,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAErC,OAAO,gBAA4B,CAAC;IAEtC,CAAC;IAED,IAAI,CAAC,gBAAgB,IAAG,CAAC,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,EAAE,MAAM,KAAK,EAAE,CAAC,EAAE,CAAC;QAElG,MAAM,IAAI,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AAExC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import authService from "../services/auth.service.js";
|
|
2
|
+
import StorageSDK from "@lilaquadrat/storage-sdk";
|
|
3
|
+
export default async function storageSdkFactory() {
|
|
4
|
+
const token = await authService.token(process.env.OAUTH_CLIENTID, process.env.OAUTH_CLIENTSECRET);
|
|
5
|
+
return new StorageSDK({
|
|
6
|
+
api: process.env.API_URL,
|
|
7
|
+
public: process.env.CDN_URL,
|
|
8
|
+
secure: process.env.SECURE_URL,
|
|
9
|
+
}, 5, 'debug', token);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=storageSdkFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageSdkFactory.js","sourceRoot":"","sources":["../../../src/helpers/storageSdkFactory.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,6BAA6B,CAAC;AACtD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAElD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,iBAAiB;IAE7C,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,cAAe,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAmB,CAAC,CAAC;IACpG,OAAO,IAAI,UAAU,CACnB;QACE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,OAAQ;QACzB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,OAAQ;QAC5B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAW;KAChC,EACD,CAAC,EACD,OAAO,EACL,KAAM,CACT,CAAC;AAEJ,CAAC"}
|