@lilaquadrat/studio 10.0.0-beta.11 → 10.0.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/eslint.config.js +146 -0
  2. package/lib/helpers.d.ts +5 -2
  3. package/lib/helpers.js +8 -2
  4. package/lib/helpers.js.map +1 -1
  5. package/lib/main.d.ts +1 -3
  6. package/lib/main.js +7 -3
  7. package/lib/main.js.map +1 -1
  8. package/lib/services.d.ts +1 -6
  9. package/lib/services.js +18 -7
  10. package/lib/services.js.map +1 -1
  11. package/lib/src/ShareClientFactory.class.d.ts +1 -3
  12. package/lib/src/ShareClientFactory.class.js +1 -9
  13. package/lib/src/ShareClientFactory.class.js.map +1 -1
  14. package/lib/src/classes/models.class.js.map +1 -1
  15. package/lib/src/classes/mongo.class.js +4 -14
  16. package/lib/src/classes/mongo.class.js.map +1 -1
  17. package/lib/src/functions/handleError.d.ts +2 -3
  18. package/lib/src/functions/handleError.js +3 -16
  19. package/lib/src/functions/handleError.js.map +1 -1
  20. package/lib/src/functions/optionsHelper.d.ts +4 -4
  21. package/lib/src/functions/optionsHelper.js +5 -4
  22. package/lib/src/functions/optionsHelper.js.map +1 -1
  23. package/lib/src/helpers/ControllerHelper.d.ts +73 -0
  24. package/lib/src/helpers/ControllerHelper.js +242 -0
  25. package/lib/src/helpers/ControllerHelper.js.map +1 -0
  26. package/lib/src/helpers/EnvMapper.d.ts +0 -0
  27. package/lib/src/helpers/EnvMapper.js +1 -0
  28. package/lib/src/helpers/EnvMapper.js.map +1 -0
  29. package/lib/src/helpers/authPlugin.d.ts +29 -0
  30. package/lib/src/helpers/authPlugin.js +72 -0
  31. package/lib/src/helpers/authPlugin.js.map +1 -0
  32. package/lib/src/helpers/createSasToken.d.ts +0 -2
  33. package/lib/src/helpers/createSasToken.js +35 -32
  34. package/lib/src/helpers/createSasToken.js.map +1 -1
  35. package/lib/src/helpers/getSecrets.d.ts +1 -1
  36. package/lib/src/helpers/getSecrets.js +10 -12
  37. package/lib/src/helpers/getSecrets.js.map +1 -1
  38. package/lib/src/helpers/queryAssertionPlugin.d.ts +3 -0
  39. package/lib/src/helpers/queryAssertionPlugin.js +20 -0
  40. package/lib/src/helpers/queryAssertionPlugin.js.map +1 -0
  41. package/lib/src/helpers/safeObjectId.d.ts +1 -1
  42. package/lib/src/helpers/safeObjectId.js +5 -1
  43. package/lib/src/helpers/safeObjectId.js.map +1 -1
  44. package/lib/src/helpers/studioAppPlugin.d.ts +3 -0
  45. package/lib/src/helpers/studioAppPlugin.js +16 -0
  46. package/lib/src/helpers/studioAppPlugin.js.map +1 -0
  47. package/lib/src/logger.js +40 -2
  48. package/lib/src/logger.js.map +1 -1
  49. package/lib/src/models/certificate-action.model.js +0 -1
  50. package/lib/src/models/certificate-action.model.js.map +1 -1
  51. package/lib/src/models/customers.model.js +3 -0
  52. package/lib/src/models/customers.model.js.map +1 -1
  53. package/lib/src/models/editor.model.js +7 -0
  54. package/lib/src/models/editor.model.js.map +1 -1
  55. package/lib/src/models/project.model.js +2 -4
  56. package/lib/src/models/project.model.js.map +1 -1
  57. package/lib/src/services/access.service.d.ts +0 -37
  58. package/lib/src/services/access.service.js +119 -108
  59. package/lib/src/services/access.service.js.map +1 -1
  60. package/lib/src/services/editor.service.d.ts +4 -0
  61. package/lib/src/services/editor.service.js +28 -0
  62. package/lib/src/services/editor.service.js.map +1 -1
  63. package/lib/src/services/editorBase.service.d.ts +0 -46
  64. package/lib/src/services/editorBase.service.js +184 -160
  65. package/lib/src/services/editorBase.service.js.map +1 -1
  66. package/lib/src/services/hosting.service.js +1 -1
  67. package/lib/src/services/hosting.service.js.map +1 -1
  68. package/lib/src/services/import.service.d.ts +5 -21
  69. package/lib/src/services/import.service.js +63 -65
  70. package/lib/src/services/import.service.js.map +1 -1
  71. package/lib/src/services/listParticipants.service.d.ts +0 -3
  72. package/lib/src/services/listParticipants.service.js +16 -14
  73. package/lib/src/services/listParticipants.service.js.map +1 -1
  74. package/lib/src/services/me.service.d.ts +17 -7
  75. package/lib/src/services/me.service.js +48 -86
  76. package/lib/src/services/me.service.js.map +1 -1
  77. package/lib/src/services/publish.service.d.ts +0 -4
  78. package/lib/src/services/publish.service.js +33 -32
  79. package/lib/src/services/publish.service.js.map +1 -1
  80. package/lib/src/services/publishData.service.d.ts +10 -7
  81. package/lib/src/services/publishData.service.js +32 -75
  82. package/lib/src/services/publishData.service.js.map +1 -1
  83. package/lib/src/services/storage.service.js +4 -4
  84. package/lib/src/services/storage.service.js.map +1 -1
  85. package/package.json +21 -23
  86. package/lib/src/AzureBlobStorage.share.d.ts +0 -19
  87. package/lib/src/AzureBlobStorage.share.js +0 -162
  88. package/lib/src/AzureBlobStorage.share.js.map +0 -1
  89. package/lib/src/AzureFileStorage.share.d.ts +0 -22
  90. package/lib/src/AzureFileStorage.share.js +0 -139
  91. package/lib/src/AzureFileStorage.share.js.map +0 -1
  92. package/lib/src/AzureVault.d.ts +0 -14
  93. package/lib/src/AzureVault.js +0 -28
  94. package/lib/src/AzureVault.js.map +0 -1
  95. package/lib/src/dns.challenge.class.d.ts +0 -17
  96. package/lib/src/dns.challenge.class.js +0 -41
  97. package/lib/src/dns.challenge.class.js.map +0 -1
  98. package/lib/src/http.challenge.class.d.ts +0 -33
  99. package/lib/src/http.challenge.class.js +0 -58
  100. package/lib/src/http.challenge.class.js.map +0 -1
  101. package/lib/src/services/handleFile.service.d.ts +0 -9
  102. package/lib/src/services/handleFile.service.js +0 -45
  103. package/lib/src/services/handleFile.service.js.map +0 -1
  104. package/lib/src/services/media.service.d.ts +0 -35
  105. package/lib/src/services/media.service.js +0 -418
  106. package/lib/src/services/media.service.js.map +0 -1
  107. package/lib/src/services/share.service.d.ts +0 -6
  108. package/lib/src/services/share.service.js +0 -4
  109. package/lib/src/services/share.service.js.map +0 -1
@@ -0,0 +1,242 @@
1
+ export default class ControllerHelper {
2
+ cleanErrors(errors) {
3
+ const errorObject = {};
4
+ if (errors.errors) {
5
+ Object.keys(errors.errors).forEach((key) => {
6
+ errorObject[key] = errors.errors[key].message;
7
+ });
8
+ }
9
+ else if (typeof errors === 'object') {
10
+ if (errors.code === 11000) {
11
+ const message = errors.message.match(/index: (.*)_/i);
12
+ errorObject[message[1]] = `${message[1]}_duplicate`;
13
+ }
14
+ else {
15
+ errorObject.error = errors.message;
16
+ }
17
+ }
18
+ return errorObject;
19
+ }
20
+ response(res, data, count) {
21
+ count || count === 0
22
+ ? res.json({ data, count })
23
+ : res.json({ data, count: data.length });
24
+ }
25
+ static buildResponse(data, site, limit, hardLimit = 30) {
26
+ return {
27
+ data: data.data,
28
+ all: data.all,
29
+ sites: ControllerHelper.getSites(+site, ControllerHelper.getRealLimit(limit, hardLimit), data.all, data.count),
30
+ count: data.count,
31
+ };
32
+ }
33
+ static getLimit(site, limit, hardLimit) {
34
+ const realLimit = ControllerHelper.getRealLimit(limit, hardLimit);
35
+ return {
36
+ skip: site * realLimit || 0,
37
+ limit: realLimit,
38
+ };
39
+ }
40
+ static getRealLimit(limit, hardLimit) {
41
+ let realLimit;
42
+ if (hardLimit) {
43
+ realLimit = limit > hardLimit ? hardLimit : limit;
44
+ }
45
+ else {
46
+ realLimit = limit;
47
+ }
48
+ return realLimit;
49
+ }
50
+ // getSort(sort?: string, order?: '1' | 0) {
51
+ // const sortObject = {};
52
+ // if (sort && order) {
53
+ // sortObject[sort] = order === '1' ? 1 : -1;
54
+ // return sortObject;
55
+ // }
56
+ // return { _id: 1 };
57
+ // }
58
+ /**
59
+ *
60
+ *
61
+ * @param {number} site
62
+ * @param {number} limit
63
+ * @param {number} count all data count regardless of site
64
+ * @param {number} current current count of documents
65
+ * @returns {DatabaseQuerySites}
66
+ * @memberof ControllerBase
67
+ */
68
+ static getSites(site, limit, count, current) {
69
+ const realSite = site - 1;
70
+ if (count === 0) {
71
+ return {
72
+ first: 0,
73
+ current: 0,
74
+ last: 0,
75
+ range: [0, 0],
76
+ };
77
+ }
78
+ return {
79
+ first: 1,
80
+ current: site || 1,
81
+ last: count ? Math.ceil(count / limit) : 1,
82
+ range: [
83
+ (realSite * limit) + 1 || 1,
84
+ realSite * limit + current || current,
85
+ ],
86
+ };
87
+ }
88
+ /**
89
+ *
90
+ *
91
+ * @param {DatabaseQuery} query
92
+ * @param {string} [company]
93
+ * @param {string} [project]
94
+ * @param {DatabaseQueryOptions} [options]
95
+ * @returns
96
+ * @memberof ControllerBase
97
+ */
98
+ static buildQuery(query, company, project, options) {
99
+ const realQuery = { ...query };
100
+ const orArray = [];
101
+ let tags;
102
+ let category;
103
+ let keepTags = false;
104
+ let keepSearch = false;
105
+ let keepSort = false;
106
+ if (company)
107
+ realQuery.company = company;
108
+ if (project)
109
+ realQuery.project = project;
110
+ if (project === false)
111
+ realQuery.project = { $exists: false };
112
+ if (options) {
113
+ if (options.keepTags)
114
+ keepTags = true;
115
+ if (options.keepSearch)
116
+ keepSearch = true;
117
+ if (options.keepSort)
118
+ keepSort = true;
119
+ }
120
+ if (!keepSort) {
121
+ delete realQuery.sort;
122
+ delete realQuery.order;
123
+ }
124
+ if (query.partial !== undefined) {
125
+ realQuery.partial = query.partial
126
+ ? true
127
+ : { $exists: false };
128
+ }
129
+ if (query.layout !== undefined) {
130
+ realQuery.layout = query.layout
131
+ ? true
132
+ : { $exists: false };
133
+ }
134
+ if (query.available) {
135
+ realQuery.available = query.available === true || (query.available === 'true');
136
+ }
137
+ /**
138
+ * make sure tags are an array
139
+ */
140
+ if (query.tags && !keepTags) {
141
+ if (!Array.isArray(query.tags)) {
142
+ tags = [query.tags];
143
+ }
144
+ else {
145
+ tags = query.tags;
146
+ }
147
+ realQuery.tags = { $in: tags };
148
+ }
149
+ if (query.category) {
150
+ if (!Array.isArray(query.category)) {
151
+ category = [query.category];
152
+ }
153
+ else {
154
+ category = query.category;
155
+ }
156
+ realQuery.category = { $in: category };
157
+ }
158
+ if (query.search && !keepSearch) {
159
+ if (options?.search) {
160
+ if (options.search.length > 1) {
161
+ options.search.forEach((single) => {
162
+ orArray.push({ [single]: { $regex: query.search.toString().toLowerCase().trim(), $options: 'i' } });
163
+ });
164
+ realQuery.$or = orArray;
165
+ }
166
+ else {
167
+ realQuery[options.search[0]] = { $regex: query.search.toString().toLowerCase().trim(), $options: 'i' };
168
+ }
169
+ }
170
+ delete realQuery.search;
171
+ }
172
+ return realQuery;
173
+ }
174
+ /**
175
+ *
176
+ *
177
+ * @param {DatabaseQuery} query
178
+ * @param {string} select
179
+ * @param {number} site start counting at 1 instead of zero. no site / zero will be the same as 1
180
+ * @param {number} limit
181
+ * @param {Model<Document>} model
182
+ * @param {string} [sort]
183
+ * @param {string} [order]
184
+ * @returns
185
+ * @memberof ControllerBase
186
+ */
187
+ static async list(query, select, site, limit, model, sort, order, selectDefault) {
188
+ let projection;
189
+ const skipLimitSort = ControllerHelper.getSkipLimitSort(site, limit, sort, order);
190
+ if (select && selectDefault) {
191
+ projection = { projection: { ...select, ...selectDefault } };
192
+ }
193
+ else if (select) {
194
+ projection = { projection: select };
195
+ }
196
+ else if (selectDefault) {
197
+ projection = { projection: selectDefault };
198
+ }
199
+ const all = await model.db.countDocuments(query);
200
+ const data = await model.db.find(query, projection)
201
+ .limit(skipLimitSort.limit)
202
+ .skip(skipLimitSort.skip)
203
+ .sort(skipLimitSort.sort)
204
+ .toArray();
205
+ return { data, all, count: data.length };
206
+ }
207
+ static async listCustomQuery(queries, model) {
208
+ const all = await model.db.countDocuments(queries.countQuery);
209
+ const data = await model.db.aggregate(queries.aggregation)
210
+ .toArray();
211
+ return { all, data, count: data.length };
212
+ }
213
+ static getSkipLimitSort(site, limit, sort, order) {
214
+ let realSite = 0;
215
+ let realSort = {};
216
+ let sortKey;
217
+ /**
218
+ * see comment from this function
219
+ */
220
+ if (site)
221
+ realSite = site - 1;
222
+ const skipLimit = ControllerHelper.getLimit(realSite, limit, limit);
223
+ if (sort && order) {
224
+ if (sort === 'updated') {
225
+ sortKey = 'history.updated';
226
+ }
227
+ else if (sort === 'created') {
228
+ sortKey = 'history.created';
229
+ }
230
+ else
231
+ sortKey = sort;
232
+ realSort[sortKey] = +order;
233
+ }
234
+ else {
235
+ realSort = { _id: 1 };
236
+ }
237
+ return {
238
+ sort: realSort, ...skipLimit,
239
+ };
240
+ }
241
+ }
242
+ //# sourceMappingURL=ControllerHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ControllerHelper.js","sourceRoot":"","sources":["../../../src/helpers/ControllerHelper.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=EnvMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvMapper.js","sourceRoot":"","sources":["../../../src/helpers/EnvMapper.ts"],"names":[],"mappings":""}
@@ -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,72 @@
1
+ import fp from 'fastify-plugin';
2
+ import fastifyJwt from '@fastify/jwt';
3
+ import jwksRsa from 'jwks-rsa';
4
+ import respondCode from '../functions/respondCode.js';
5
+ const authPlugin = async (fastify) => {
6
+ if (process.env.ENV !== 'dev') {
7
+ // Create a single JWKS client instance with aggressive caching
8
+ const jwksClient = jwksRsa({
9
+ cache: true,
10
+ cacheMaxEntries: 5,
11
+ cacheMaxAge: 600000, // 10 minutes in ms
12
+ rateLimit: true,
13
+ jwksRequestsPerMinute: 10,
14
+ jwksUri: process.env.JWT_URL,
15
+ });
16
+ // Production: Register JWT with JWKS
17
+ await fastify.register(fastifyJwt, {
18
+ decode: { complete: true },
19
+ secret: (request, token, callback) => {
20
+ const { header } = token;
21
+ // Use the cached client instance
22
+ jwksClient.getSigningKey(header.kid, (err, key) => {
23
+ if (err) {
24
+ callback(err, undefined);
25
+ }
26
+ else {
27
+ const signingKey = key?.getPublicKey();
28
+ callback(null, signingKey);
29
+ }
30
+ });
31
+ },
32
+ verify: {
33
+ algorithms: ['RS256']
34
+ }
35
+ });
36
+ // Decorate with authenticate method for production
37
+ fastify.decorate('authenticate', async (request, reply) => {
38
+ try {
39
+ await request.jwtVerify();
40
+ request.auth = request.user;
41
+ }
42
+ catch (err) {
43
+ return respondCode("UNAUTHORIZED", reply);
44
+ }
45
+ });
46
+ }
47
+ else {
48
+ // Dev: Mock authentication
49
+ fastify.decorate('authenticate', async (request, reply) => {
50
+ request.auth = {
51
+ sub: process.env.DEV_USER,
52
+ given_name: 'Dev',
53
+ family_name: 'User',
54
+ nickname: 'devuser',
55
+ name: 'Dev User',
56
+ picture: '',
57
+ updated_at: new Date().toISOString(),
58
+ iss: 'dev',
59
+ aud: 'dev',
60
+ iat: Math.floor(Date.now() / 1000),
61
+ exp: Math.floor(Date.now() / 1000) + 3600,
62
+ at_hash: '',
63
+ nonce: '',
64
+ email_verified: true
65
+ };
66
+ });
67
+ }
68
+ };
69
+ export default fp(authPlugin, {
70
+ name: 'auth-plugin'
71
+ });
72
+ //# sourceMappingURL=authPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authPlugin.js","sourceRoot":"","sources":["../../../src/helpers/authPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,WAAW,MAAM,6BAA6B,CAAC;AA+BtD,MAAM,UAAU,GAAuB,KAAK,EAAE,OAAwB,EAAE,EAAE;IAExE,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QAE9B,+DAA+D;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC;YACzB,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,MAAM,EAAE,mBAAmB;YACxC,SAAS,EAAE,IAAI;YACf,qBAAqB,EAAE,EAAE;YACzB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,OAAiB;SACvC,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE;YACjC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC1B,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAEnC,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;gBAEzB,iCAAiC;gBACjC,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;oBAEhD,IAAI,GAAG,EAAE,CAAC;wBAER,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBAE3B,CAAC;yBAAM,CAAC;wBAEN,MAAM,UAAU,GAAG,GAAG,EAAE,YAAY,EAAE,CAAC;wBACvC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAE7B,CAAC;gBAEH,CAAC,CAAC,CAAC;YAEL,CAAC;YACD,MAAM,EAAE;gBACN,UAAU,EAAE,CAAC,OAAO,CAAC;aACtB;SACF,CAAC,CAAC;QAEH,mDAAmD;QACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;YAEtF,IAAI,CAAC;gBAEH,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;gBAE1B,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAE9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBAEb,OAAO,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAE5C,CAAC;QAEH,CAAC,CAAC,CAAC;IAEL,CAAC;SAAM,CAAC;QAEN,2BAA2B;QAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,OAAuB,EAAE,KAAmB,EAAE,EAAE;YAEtF,OAAO,CAAC,IAAI,GAAG;gBACb,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAS;gBAC1B,UAAU,EAAE,KAAK;gBACjB,WAAW,EAAE,MAAM;gBACnB,QAAQ,EAAE,SAAS;gBACnB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,KAAK;gBACV,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gBAClC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI;gBACzC,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,EAAE;gBACT,cAAc,EAAE,IAAI;aACrB,CAAC;QAEJ,CAAC,CAAC,CAAC;IAEL,CAAC;AAEH,CAAC,CAAC;AAEF,eAAe,EAAE,CAAC,UAAU,EAAE;IAC5B,IAAI,EAAE,aAAa;CACpB,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- import { ShareClientOptions } from '@lilaquadrat/interfaces';
2
- export default function generateSasToken(accountName: string, containerName: string, blobName: string, expiresInHours: number, options: ShareClientOptions): Promise<string>;
@@ -1,33 +1,36 @@
1
- import { DefaultAzureCredential } from '@azure/identity';
2
- import { BlobServiceClient, generateBlobSASQueryParameters, BlobSASPermissions } from '@azure/storage-blob';
3
- export default async function generateSasToken(accountName, containerName, blobName, expiresInHours, options) {
4
- let serviceClient;
5
- if (options.accountName) {
6
- console.log('storage.blob.use.storage_account');
7
- const credentials = new DefaultAzureCredential();
8
- serviceClient = new BlobServiceClient(`https://${options.accountName}.blob.core.windows.net`, credentials);
9
- }
10
- else if (options.connectionString) {
11
- console.log('storage.blob.use.connection_string');
12
- serviceClient = new BlobServiceClient(options.connectionString);
13
- }
14
- if (!serviceClient)
15
- throw new Error('BLOB_CREDENTIALS_MISSING');
16
- // Get user delegation key
17
- const delegationKey = await serviceClient.getUserDelegationKey(new Date(), new Date(Date.now() + expiresInHours * 3600 * 1000));
18
- // Define SAS permissions (Read-only)
19
- const permissions = BlobSASPermissions.parse('r'); // Read-only access
20
- const isFolder = !blobName.includes('.');
21
- // Generate SAS token
22
- const sasToken = generateBlobSASQueryParameters({
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
- }, delegationKey, accountName).toString();
29
- return sasToken;
30
- }
31
- // Usage example:
32
- // generateSasToken('yourStorageAccountName', 'yourContainerName', undefined, 2).then(console.log);
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,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG5G,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,aAAqB,EAAE,QAAgB,EAAE,cAAsB,EAAE,OAA2B;IAE9J,IAAI,aAA4C,CAAC;IAEjD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAExB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAEhD,MAAM,WAAW,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACjD,aAAa,GAAG,IAAI,iBAAiB,CAAC,WAAW,OAAO,CAAC,WAAW,wBAAwB,EAAE,WAAW,CAAC,CAAC;IAE7G,CAAC;SAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAEpC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,aAAa,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAElE,CAAC;IAED,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAEhE,0BAA0B;IAC1B,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAEhI,qCAAqC;IACrC,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB;IAEtE,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACzC,qBAAqB;IACrB,MAAM,QAAQ,GAAG,8BAA8B,CAC7C;QACE,aAAa;QACb,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACzC,WAAW;QACX,QAAQ,EAAE,IAAI,IAAI,EAAE;QACpB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,4BAA4B;KAC7F,EACD,aAAa,EACb,WAAW,CACZ,CAAC,QAAQ,EAAE,CAAC;IAEb,OAAO,QAAQ,CAAC;AAElB,CAAC;AAED,iBAAiB;AACjB,mGAAmG"}
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,4 +1,4 @@
1
1
  declare const _default: (name: string, vaultUrl: string, options?: {
2
2
  base64: true;
3
- }) => Promise<string>;
3
+ }) => Promise<void>;
4
4
  export default _default;
@@ -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
- return '';
8
- if (options?.base64) {
9
- return Buffer.from(secret.value, 'base64').toString('ascii');
10
- }
11
- else {
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,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,eAAe,KAAK,EAAE,IAAY,EAAE,QAAgB,EAAE,OAA0B,EAAE,EAAE;IAElF,MAAM,WAAW,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAE7B,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QAEpB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE/D,CAAC;SAAM,CAAC;QAEN,OAAO,MAAM,CAAC,KAAK,CAAC;IAEtB,CAAC;AAEH,CAAC,CAAC"}
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,3 @@
1
+ import { FastifyPluginAsync } from 'fastify';
2
+ declare const _default: FastifyPluginAsync;
3
+ export default _default;
@@ -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 (!possibleObjectId || possibleObjectId?.length !== 24) {
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;AAGlE;;;EAGE;AACF,eAAe,CAAC,gBAAiC,EAAE,KAAc,EAAE,EAAE;IAEnE,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,KAAK,EAAE,EAAE,CAAC;QAEzD,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"}
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,3 @@
1
+ import { FastifyPluginAsync } from 'fastify';
2
+ declare const _default: FastifyPluginAsync;
3
+ export default _default;
@@ -0,0 +1,16 @@
1
+ import fp from 'fastify-plugin';
2
+ import { HttpStatusCode } from './HttpStatusCode.enum.js';
3
+ const studioAppPlugin = async (fastify) => {
4
+ fastify.addHook('onRequest', async (request, reply) => {
5
+ const excludedPaths = ['/health', '/'];
6
+ // Skip validation for excluded paths and OPTIONS requests
7
+ if (excludedPaths.includes(request.url) || request.method === 'OPTIONS')
8
+ return;
9
+ const studioApp = request.headers['studio-app'];
10
+ if (!studioApp)
11
+ return reply.status(HttpStatusCode.BAD_REQUEST).send({ error: 'studio-app missing' });
12
+ request.studioApp = studioApp;
13
+ });
14
+ };
15
+ export default fp(studioAppPlugin);
16
+ //# sourceMappingURL=studioAppPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studioAppPlugin.js","sourceRoot":"","sources":["../../../src/helpers/studioAppPlugin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,eAAe,GAAuB,KAAK,EAAE,OAAwB,EAAE,EAAE;IAE7E,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAEpD,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAEvC,0DAA0D;QAC1D,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QAChF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAEhD,IAAI,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAEtG,OAAO,CAAC,SAAS,GAAG,SAAmB,CAAC;IAE1C,CAAC,CAAC,CAAC;AAEL,CAAC,CAAC;AAEF,eAAe,EAAE,CAAC,eAAe,CAAC,CAAC"}