@managemint-solutions/sdk 0.16.0 → 0.18.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.
Files changed (55) hide show
  1. package/dist/audit/index.d.ts +23 -2
  2. package/dist/audit/index.js +56 -21
  3. package/dist/audit/index.js.map +1 -1
  4. package/dist/auth-client/index.d.ts +1 -6
  5. package/dist/auth-client/index.js +3 -18
  6. package/dist/auth-client/index.js.map +1 -1
  7. package/dist/auth.d.ts +36 -1
  8. package/dist/auth.js +52 -22
  9. package/dist/auth.js.map +1 -1
  10. package/dist/billing/index.d.ts +22 -13
  11. package/dist/billing/index.js +51 -48
  12. package/dist/billing/index.js.map +1 -1
  13. package/dist/client.d.ts +18 -1
  14. package/dist/client.js +11 -6
  15. package/dist/client.js.map +1 -1
  16. package/dist/clients/index.js +13 -75
  17. package/dist/clients/index.js.map +1 -1
  18. package/dist/errors.d.ts +4 -1
  19. package/dist/errors.js +7 -58
  20. package/dist/errors.js.map +1 -1
  21. package/dist/index.d.ts +48 -22
  22. package/dist/index.js +116 -36
  23. package/dist/index.js.map +1 -1
  24. package/dist/nest/index.d.ts +26 -3
  25. package/dist/nest/index.js +54 -15
  26. package/dist/nest/index.js.map +1 -1
  27. package/dist/notifications/index.d.ts +0 -1
  28. package/dist/notifications/index.js +4 -16
  29. package/dist/notifications/index.js.map +1 -1
  30. package/dist/organization-invites/index.d.ts +29 -0
  31. package/dist/organization-invites/index.js +48 -0
  32. package/dist/organization-invites/index.js.map +1 -0
  33. package/dist/organizations/index.js +4 -9
  34. package/dist/organizations/index.js.map +1 -1
  35. package/dist/permissions/index.d.ts +8 -0
  36. package/dist/permissions/index.js +16 -1
  37. package/dist/permissions/index.js.map +1 -1
  38. package/dist/projects/index.js +12 -75
  39. package/dist/projects/index.js.map +1 -1
  40. package/dist/service-client/index.d.ts +2 -0
  41. package/dist/service-client/index.js +7 -6
  42. package/dist/service-client/index.js.map +1 -1
  43. package/dist/supporting-files/index.js +31 -15
  44. package/dist/supporting-files/index.js.map +1 -1
  45. package/dist/supporting-files/paths.d.ts +19 -5
  46. package/dist/supporting-files/paths.js +46 -10
  47. package/dist/supporting-files/paths.js.map +1 -1
  48. package/dist/tasks/index.js +7 -33
  49. package/dist/tasks/index.js.map +1 -1
  50. package/dist/transforms.d.ts +43 -0
  51. package/dist/transforms.js +73 -2
  52. package/dist/transforms.js.map +1 -1
  53. package/dist/users/index.js +4 -14
  54. package/dist/users/index.js.map +1 -1
  55. package/package.json +6 -2
@@ -37,6 +37,10 @@ class PermissionsResource {
37
37
  this.auth = auth;
38
38
  this.table = (0, audit_1.auditedTable)(supabase, auth, audit, PERMISSIONS_TABLE);
39
39
  }
40
+ /**
41
+ * The whole permissions row. `*` rather than a select string — the alternative is naming the
42
+ * two role flags and all 78 permission flags — so the internal `id` is dropped on the way out.
43
+ */
40
44
  async getForUser(userId) {
41
45
  const { data, error } = await this.supabase
42
46
  .from('permissions')
@@ -46,14 +50,25 @@ class PermissionsResource {
46
50
  .single();
47
51
  if (error)
48
52
  throw (0, errors_1.mapPostgrestError)(error);
49
- return data;
53
+ return (0, audit_1.withoutInternalId)(data);
50
54
  }
51
55
  /**
52
56
  * The one lookup `PermissionsGuard` makes per gated request: the flag the route asked for,
53
57
  * plus the two that bypass it. Returns null when the caller has no permissions row, which the
54
58
  * guard treats as a denial.
59
+ *
60
+ * `flag` is interpolated into the select string, so it is checked against the shape a column
61
+ * name can take first — a flag never comes from a request, only from a route's own decorator,
62
+ * so anything else is a bug rather than a bad request.
55
63
  */
56
64
  async flagsFor(userId, flag) {
65
+ if (!/^[a-z][a-z0-9_]*$/.test(flag)) {
66
+ throw new errors_1.SupabaseClientError({
67
+ status: 500,
68
+ error: 'Internal Error',
69
+ message: 'Invalid permission flag',
70
+ });
71
+ }
57
72
  const { data, error } = await this.supabase
58
73
  .from('permissions')
59
74
  .select(`is_owner, is_admin, ${flag}`)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"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"}
@@ -54,54 +54,18 @@ const PROJECT_DETAIL_SELECT = `
54
54
  client:client_profiles!client_id (*),
55
55
  manager:user_profiles!manager_id (*),
56
56
  updated_at,
57
- last_updated_by:user_profiles!last_updated_by (
58
- mms_id,
59
- name,
60
- surname,
61
- email,
62
- profile_image
63
- ),
64
- created_by:user_profiles!created_by (
65
- mms_id,
66
- name,
67
- surname,
68
- email,
69
- profile_image
70
- ),
57
+ last_updated_by:user_profiles!last_updated_by ${transforms_1.USER_PROFILE_EMBED},
58
+ created_by:user_profiles!created_by ${transforms_1.USER_PROFILE_EMBED},
71
59
  archived,
72
60
  archived_at,
73
- archived_by:user_profiles!archived_by (
74
- mms_id,
75
- name,
76
- surname,
77
- email,
78
- profile_image
79
- ),
61
+ archived_by:user_profiles!archived_by ${transforms_1.USER_PROFILE_EMBED},
80
62
  unarchived_at,
81
- unarchived_by:user_profiles!unarchived_by (
82
- mms_id,
83
- name,
84
- surname,
85
- email,
86
- profile_image
87
- ),
63
+ unarchived_by:user_profiles!unarchived_by ${transforms_1.USER_PROFILE_EMBED},
88
64
  deleted,
89
65
  deleted_at,
90
- deleted_by:user_profiles!deleted_by (
91
- mms_id,
92
- name,
93
- surname,
94
- email,
95
- profile_image
96
- ),
66
+ deleted_by:user_profiles!deleted_by ${transforms_1.USER_PROFILE_EMBED},
97
67
  restored_at,
98
- restored_by:user_profiles!restored_by (
99
- mms_id,
100
- name,
101
- surname,
102
- email,
103
- profile_image
104
- )
68
+ restored_by:user_profiles!restored_by ${transforms_1.USER_PROFILE_EMBED}
105
69
  `;
106
70
  class ProjectsResource {
107
71
  supabase;
@@ -131,8 +95,7 @@ class ProjectsResource {
131
95
  .range(offset, offset + pageSize - 1)
132
96
  .order('created_at', { ascending: false });
133
97
  if (trimmedSearch) {
134
- const escapedSearch = trimmedSearch.replace(/,/g, '\\,');
135
- projectsQuery = projectsQuery.or(`name.ilike.%${escapedSearch}%,specification.ilike.%${escapedSearch}%`);
98
+ projectsQuery = projectsQuery.or((0, transforms_1.orIlike)(['name', 'specification'], trimmedSearch));
136
99
  }
137
100
  if (query.created_after) {
138
101
  projectsQuery = projectsQuery.gte('created_at', query.created_after);
@@ -161,17 +124,7 @@ class ProjectsResource {
161
124
  const { data, error, count } = await projectsQuery;
162
125
  if (error)
163
126
  throw (0, errors_1.mapPostgrestError)(error);
164
- const totalEstimated = count ?? 0;
165
- const totalPages = totalEstimated > 0 ? Math.ceil(totalEstimated / pageSize) : 0;
166
- return {
167
- results: (data ?? []),
168
- page,
169
- per_page: pageSize,
170
- count: totalEstimated,
171
- total_pages: totalPages,
172
- has_next_page: page < totalPages,
173
- has_previous_page: page > 1,
174
- };
127
+ return (0, transforms_1.toMmsList)(data, page, pageSize, count);
175
128
  }
176
129
  async getById(projectId) {
177
130
  const { data, error } = await this.supabase
@@ -226,36 +179,20 @@ class ProjectsResource {
226
179
  return this.getById(projectId);
227
180
  }
228
181
  async archive(projectId) {
229
- await this.table.transition(projectId, enum_1.AuditTrailAction.ARCHIVE, {
230
- archived: true,
231
- archived_at: new Date().toISOString(),
232
- archived_by: this.auth.mms_id,
233
- });
182
+ await this.table.transition(projectId, enum_1.AuditTrailAction.ARCHIVE, (0, transforms_1.archivedPatch)(this.auth.mms_id));
234
183
  return this.getById(projectId);
235
184
  }
236
185
  async unarchive(projectId) {
237
- await this.table.transition(projectId, enum_1.AuditTrailAction.UNARCHIVE, {
238
- archived: false,
239
- unarchived_at: new Date().toISOString(),
240
- unarchived_by: this.auth.mms_id,
241
- });
186
+ await this.table.transition(projectId, enum_1.AuditTrailAction.UNARCHIVE, (0, transforms_1.unarchivedPatch)(this.auth.mms_id));
242
187
  return this.getById(projectId);
243
188
  }
244
189
  async restore(projectId) {
245
- await this.table.transition(projectId, enum_1.AuditTrailAction.RESTORE, {
246
- deleted: false,
247
- restored_at: new Date().toISOString(),
248
- restored_by: this.auth.mms_id,
249
- });
190
+ await this.table.transition(projectId, enum_1.AuditTrailAction.RESTORE, (0, transforms_1.restoredPatch)(this.auth.mms_id));
250
191
  return this.getById(projectId);
251
192
  }
252
193
  /** Soft delete — the row stays, flagged `deleted`, and `restore()` brings it back. */
253
194
  async remove(projectId) {
254
- await this.table.transition(projectId, enum_1.AuditTrailAction.DELETE, {
255
- deleted: true,
256
- deleted_at: new Date().toISOString(),
257
- deleted_by: this.auth.mms_id,
258
- });
195
+ await this.table.transition(projectId, enum_1.AuditTrailAction.DELETE, (0, transforms_1.deletedPatch)(this.auth.mms_id));
259
196
  }
260
197
  }
261
198
  exports.ProjectsResource = ProjectsResource;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/projects/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/projects/index.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { AuditResource, type AuditActor, type AuditedTable, type AuditedTableOpt
2
2
  import type { TypedSupabaseClient } from '../client';
3
3
  import { BillingResource } from '../billing';
4
4
  import { NotificationsOutboxResource } from '../notifications';
5
+ import { OrganizationInvitesResource } from '../organization-invites';
5
6
  import { OrganizationsResource, OrganizationSignupResource } from '../organizations';
6
7
  import { PermissionsResource } from '../permissions';
7
8
  import { UsersResource } from '../users';
@@ -23,6 +24,7 @@ export declare class SupabaseOrganizationScope {
23
24
  readonly actor: AuditActor;
24
25
  readonly audit: AuditResource;
25
26
  readonly billing: BillingResource;
27
+ readonly invites: OrganizationInvitesResource;
26
28
  readonly organizations: OrganizationsResource;
27
29
  readonly permissions: PermissionsResource;
28
30
  readonly users: UsersResource;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createSupabaseServiceClient = exports.SupabaseServiceClient = exports.SupabaseOrganizationScope = void 0;
4
- const supabase_js_1 = require("@supabase/supabase-js");
4
+ const auth_1 = require("../auth");
5
5
  const audit_1 = require("../audit");
6
6
  const enum_1 = require("@managemint-solutions/entities/audit-trail/enum");
7
7
  const billing_1 = require("../billing");
8
8
  const notifications_1 = require("../notifications");
9
9
  const errors_1 = require("../errors");
10
+ const organization_invites_1 = require("../organization-invites");
10
11
  const organizations_1 = require("../organizations");
11
12
  const permissions_1 = require("../permissions");
12
13
  const users_1 = require("../users");
@@ -21,6 +22,7 @@ class SupabaseOrganizationScope {
21
22
  actor;
22
23
  audit;
23
24
  billing;
25
+ invites;
24
26
  organizations;
25
27
  permissions;
26
28
  users;
@@ -29,6 +31,7 @@ class SupabaseOrganizationScope {
29
31
  this.actor = actor;
30
32
  this.audit = new audit_1.AuditResource(supabase, actor, onAuditError);
31
33
  this.billing = new billing_1.BillingResource(supabase, actor, this.audit);
34
+ this.invites = new organization_invites_1.OrganizationInvitesResource(supabase, actor);
32
35
  this.organizations = new organizations_1.OrganizationsResource(supabase, actor, this.audit);
33
36
  this.permissions = new permissions_1.PermissionsResource(supabase, actor, this.audit);
34
37
  this.users = new users_1.UsersResource(supabase, actor, this.audit);
@@ -62,9 +65,7 @@ class SupabaseServiceClient {
62
65
  resendEvents;
63
66
  constructor(config) {
64
67
  this.config = config;
65
- this.supabase = (0, supabase_js_1.createClient)(config.url, config.serviceRoleKey, {
66
- auth: { persistSession: false, autoRefreshToken: false, detectSessionInUrl: false },
67
- });
68
+ this.supabase = (0, auth_1.createRawClient)(config.url, config.serviceRoleKey);
68
69
  this.paystackEvents = new webhook_events_1.WebhookEventsResource(this.supabase, 'paystack_webhook_events');
69
70
  this.resendEvents = new webhook_events_1.WebhookEventsResource(this.supabase, 'resend_webhook_events');
70
71
  this.signup = new organizations_1.OrganizationSignupResource(this.supabase, (organizationId) => this.forOrganization(organizationId).audit);
@@ -96,7 +97,7 @@ class SupabaseServiceClient {
96
97
  .maybeSingle();
97
98
  if (error)
98
99
  throw (0, errors_1.mapPostgrestError)(error);
99
- return (data ?? null);
100
+ return data ? (0, audit_1.withoutInternalId)(data) : null;
100
101
  }
101
102
  /**
102
103
  * A ledger row by id alone. Also unscoped by necessity: a `charge.success` carries the
@@ -110,7 +111,7 @@ class SupabaseServiceClient {
110
111
  .maybeSingle();
111
112
  if (error)
112
113
  throw (0, errors_1.mapPostgrestError)(error);
113
- return (data ?? null);
114
+ return data ? (0, audit_1.withoutInternalId)(data) : null;
114
115
  }
115
116
  }
116
117
  exports.SupabaseServiceClient = SupabaseServiceClient;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/service-client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/service-client/index.ts"],"names":[],"mappings":"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"}
@@ -27,9 +27,15 @@ const BUCKET = 'supporting-files';
27
27
  const SIGNED_URL_TTL_SECONDS = 300;
28
28
  /** Uploads run concurrently in batches of this size. */
29
29
  const UPLOAD_BATCH_SIZE = 5;
30
+ /** The `name`/`extension` pair rendered back into the file name it was split from. */
31
+ const fileNameOf = (file) => file.extension ? `${file.name}.${file.extension}` : file.name;
30
32
  // The public contract is the shared SupportingFileEntity from @managemint-solutions/entities; the
31
33
  // casts at the returns declare the shape the select strings below produce (the columns are
32
34
  // defined in the api's supabase/migrations).
35
+ //
36
+ // Object keys are `organizationId/entityType/entityId/file` — the organization leads so a storage
37
+ // policy can scope by tenant. A data migration renames the pre-existing objects, which have no
38
+ // organization segment, into that prefix.
33
39
  class SupportingFilesResource {
34
40
  supabase;
35
41
  auth;
@@ -53,7 +59,7 @@ class SupportingFilesResource {
53
59
  throw (0, errors_1.mapPostgrestError)(error);
54
60
  const { data: signed, error: signedError } = await this.supabase.storage
55
61
  .from(BUCKET)
56
- .createSignedUrl((0, paths_1.storagePath)(data.entity_type, data.entity_id, data.name, data.extension), SIGNED_URL_TTL_SECONDS);
62
+ .createSignedUrl((0, paths_1.storagePath)(this.auth.organization_id, data.entity_type, data.entity_id, data.name, data.extension), SIGNED_URL_TTL_SECONDS);
57
63
  if (signedError)
58
64
  throw (0, errors_1.mapStorageError)(signedError);
59
65
  return { url: signed.signedUrl, ttl: SIGNED_URL_TTL_SECONDS };
@@ -79,25 +85,31 @@ class SupportingFilesResource {
79
85
  .eq('organization_id', this.auth.organization_id);
80
86
  if (existingError)
81
87
  throw (0, errors_1.mapPostgrestError)(existingError);
82
- const existingFileNames = existing.map((file) => `${file.name}.${file.extension}`);
88
+ const existingFileNames = existing.map(fileNameOf);
89
+ // Each client name is validated once here, and the object key, the duplicate check and the
90
+ // row are all built from that same split — so what is stored is what presign and remove
91
+ // rebuild later.
92
+ const uploads = input.files.map((file) => ({
93
+ file,
94
+ ...(0, paths_1.splitFileName)((0, paths_1.sanitizeFileName)(file.name)),
95
+ }));
83
96
  // Every file is written to the bucket, duplicates included — an upsert refreshes the object.
84
- for (let index = 0; index < input.files.length; index += UPLOAD_BATCH_SIZE) {
85
- await Promise.all(input.files.slice(index, index + UPLOAD_BATCH_SIZE).map(async (file) => {
97
+ for (let index = 0; index < uploads.length; index += UPLOAD_BATCH_SIZE) {
98
+ await Promise.all(uploads.slice(index, index + UPLOAD_BATCH_SIZE).map(async ({ file, name, extension }) => {
86
99
  const { error } = await this.supabase.storage
87
100
  .from(BUCKET)
88
- .upload(`${entity}/${entityId}/${file.name}`, file, {
89
- cacheControl: '3600',
90
- upsert: true,
91
- });
92
- if (error)
93
- throw (0, errors_1.mapStorageError)(error, `Failed to upload file: ${file.name}`);
101
+ .upload((0, paths_1.storagePath)(this.auth.organization_id, entity, entityId, name, extension), file, { cacheControl: '3600', upsert: true });
102
+ if (error) {
103
+ throw (0, errors_1.mapStorageError)(error, `Failed to upload file: ${fileNameOf({ name, extension })}`);
104
+ }
94
105
  }));
95
106
  }
96
107
  // Only files without an existing row get one — the rest were refreshed in place above.
97
- const newFiles = input.files.filter((file) => !existingFileNames.includes(file.name));
108
+ const newFiles = uploads.filter((file) => !existingFileNames.includes(fileNameOf(file)));
98
109
  if (newFiles.length > 0) {
99
- await this.table.insertMany(newFiles.map((file) => ({
100
- ...(0, paths_1.splitFileName)(file.name),
110
+ await this.table.insertMany(newFiles.map(({ name, extension }) => ({
111
+ name,
112
+ extension,
101
113
  entity_type: entity,
102
114
  entity_id: entityId,
103
115
  organization_id: this.auth.organization_id,
@@ -113,10 +125,14 @@ class SupportingFilesResource {
113
125
  const { error: storageError } = await this.supabase.storage
114
126
  .from(BUCKET)
115
127
  .remove([
116
- (0, paths_1.storagePath)(data.entity_type, data.entity_id, data.name, data.extension),
128
+ (0, paths_1.storagePath)(this.auth.organization_id, data.entity_type, data.entity_id, data.name, data.extension),
117
129
  ]);
118
130
  if (storageError) {
119
- throw (0, errors_1.mapStorageError)(storageError, `Failed to delete file: ${data.name}.${data.extension}`);
131
+ const fileName = fileNameOf({
132
+ name: data.name,
133
+ extension: data.extension,
134
+ });
135
+ throw (0, errors_1.mapStorageError)(storageError, `Failed to delete file: ${fileName}`);
120
136
  }
121
137
  }
122
138
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supporting-files/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/supporting-files/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,26 @@
1
1
  /**
2
- * Splits an uploaded file name into the `name` / `extension` columns.
2
+ * The client-supplied file name, checked before it is allowed anywhere near an object key.
3
3
  *
4
- * This mirrors the api exactly, quirks included: only the segment before the *first* dot becomes
5
- * the name, so `report.final.pdf` stores as name `report`, extension `pdf`.
4
+ * The name is half of the key, so a separator or a `..` in it would let an upload escape its
5
+ * entity's folder — and, now that the key starts with the organization, its tenant's folder.
6
+ * Anything that is not a plain file name is rejected outright rather than rewritten, so what the
7
+ * `supporting_files` row records is exactly what was stored.
8
+ */
9
+ export declare const sanitizeFileName: (fileName: string) => string;
10
+ /**
11
+ * Splits an uploaded file name into the `name` / `extension` columns, on the *last* dot — so
12
+ * `archive.tar.gz` is name `archive.tar`, extension `gz`, and `storagePath` rebuilds the key it
13
+ * was stored under. A name with no dot has no extension.
6
14
  */
7
15
  export declare const splitFileName: (fileName: string) => {
8
16
  name: string;
9
17
  extension: string;
10
18
  };
11
- /** Where an object lives in the `supporting-files` bucket. */
12
- export declare const storagePath: (entityType: string, entityId: string, name: string, extension: string) => string;
19
+ /**
20
+ * Where an object lives in the `supporting-files` bucket. The organization leads the key so a
21
+ * storage policy can scope objects by tenant — nothing below it is trusted for that.
22
+ *
23
+ * A data migration renames the existing objects (keyed `entity/entityId/file`) into their
24
+ * organization's prefix; keys written from here already carry it.
25
+ */
26
+ export declare const storagePath: (organizationId: string, entityType: string, entityId: string, name: string, extension: string) => string;
@@ -1,18 +1,54 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.storagePath = exports.splitFileName = void 0;
3
+ exports.storagePath = exports.splitFileName = exports.sanitizeFileName = void 0;
4
+ const errors_1 = require("../errors");
5
+ /** Longest object-key segment a file name may become. */
6
+ const MAX_FILE_NAME_LENGTH = 255;
7
+ /** What a file name may be made of — no separators, no control characters, no leading dot. */
8
+ const SAFE_FILE_NAME = /^[A-Za-z0-9][A-Za-z0-9 ._()\-]*$/;
9
+ const invalidFileName = () => new errors_1.SupabaseClientError({ status: 400, error: 'Storage Error', message: 'Invalid file name' });
4
10
  /**
5
- * Splits an uploaded file name into the `name` / `extension` columns.
11
+ * The client-supplied file name, checked before it is allowed anywhere near an object key.
6
12
  *
7
- * This mirrors the api exactly, quirks included: only the segment before the *first* dot becomes
8
- * the name, so `report.final.pdf` stores as name `report`, extension `pdf`.
13
+ * The name is half of the key, so a separator or a `..` in it would let an upload escape its
14
+ * entity's folder — and, now that the key starts with the organization, its tenant's folder.
15
+ * Anything that is not a plain file name is rejected outright rather than rewritten, so what the
16
+ * `supporting_files` row records is exactly what was stored.
9
17
  */
10
- const splitFileName = (fileName) => ({
11
- name: fileName.split('.')[0],
12
- extension: fileName.split('.').pop() ?? '',
13
- });
18
+ const sanitizeFileName = (fileName) => {
19
+ const trimmed = fileName.trim();
20
+ if (trimmed === '' ||
21
+ trimmed.length > MAX_FILE_NAME_LENGTH ||
22
+ trimmed === '.' ||
23
+ trimmed === '..' ||
24
+ trimmed.includes('/') ||
25
+ trimmed.includes('\\') ||
26
+ trimmed.includes('\0') ||
27
+ !SAFE_FILE_NAME.test(trimmed)) {
28
+ throw invalidFileName();
29
+ }
30
+ return trimmed;
31
+ };
32
+ exports.sanitizeFileName = sanitizeFileName;
33
+ /**
34
+ * Splits an uploaded file name into the `name` / `extension` columns, on the *last* dot — so
35
+ * `archive.tar.gz` is name `archive.tar`, extension `gz`, and `storagePath` rebuilds the key it
36
+ * was stored under. A name with no dot has no extension.
37
+ */
38
+ const splitFileName = (fileName) => {
39
+ const lastDot = fileName.lastIndexOf('.');
40
+ if (lastDot <= 0)
41
+ return { name: fileName, extension: '' };
42
+ return { name: fileName.slice(0, lastDot), extension: fileName.slice(lastDot + 1) };
43
+ };
14
44
  exports.splitFileName = splitFileName;
15
- /** Where an object lives in the `supporting-files` bucket. */
16
- const storagePath = (entityType, entityId, name, extension) => `${entityType}/${entityId}/${name}.${extension}`;
45
+ /**
46
+ * Where an object lives in the `supporting-files` bucket. The organization leads the key so a
47
+ * storage policy can scope objects by tenant — nothing below it is trusted for that.
48
+ *
49
+ * A data migration renames the existing objects (keyed `entity/entityId/file`) into their
50
+ * organization's prefix; keys written from here already carry it.
51
+ */
52
+ const storagePath = (organizationId, entityType, entityId, name, extension) => `${organizationId}/${entityType}/${entityId}/${name}${extension ? `.${extension}` : ''}`;
17
53
  exports.storagePath = storagePath;
18
54
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/supporting-files/paths.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAuC,EAAE,CAAC,CAAC;IACvF,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC5B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;CAC3C,CAAC,CAAC;AAHU,QAAA,aAAa,iBAGvB;AAEH,8DAA8D;AACvD,MAAM,WAAW,GAAG,CACzB,UAAkB,EAClB,QAAgB,EAChB,IAAY,EACZ,SAAiB,EACT,EAAE,CAAC,GAAG,UAAU,IAAI,QAAQ,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;AALjD,QAAA,WAAW,eAKsC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/supporting-files/paths.ts"],"names":[],"mappings":";;;AAAA,sCAAgD;AAEhD,yDAAyD;AACzD,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,8FAA8F;AAC9F,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAE1D,MAAM,eAAe,GAAG,GAAwB,EAAE,CAChD,IAAI,4BAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAEjG;;;;;;;GAOG;AACI,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhC,IACE,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,MAAM,GAAG,oBAAoB;QACrC,OAAO,KAAK,GAAG;QACf,OAAO,KAAK,IAAI;QAChB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtB,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,EAC7B,CAAC;QACD,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAjBW,QAAA,gBAAgB,oBAiB3B;AAEF;;;;GAIG;AACI,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAuC,EAAE;IACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAE3D,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;AACtF,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB;AAEF;;;;;;GAMG;AACI,MAAM,WAAW,GAAG,CACzB,cAAsB,EACtB,UAAkB,EAClB,QAAgB,EAChB,IAAY,EACZ,SAAiB,EACT,EAAE,CACV,GAAG,cAAc,IAAI,UAAU,IAAI,QAAQ,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAP9E,QAAA,WAAW,eAOmE"}
@@ -18,6 +18,7 @@ exports.TasksResource = void 0;
18
18
  const enum_1 = require("@managemint-solutions/entities/audit-trail/enum");
19
19
  const audit_1 = require("../audit");
20
20
  const errors_1 = require("../errors");
21
+ const transforms_1 = require("../transforms");
21
22
  __exportStar(require("./dto"), exports);
22
23
  // The public contract is the shared TaskSummary / TaskEntity from @managemint-solutions/entities;
23
24
  // the casts at the returns declare the shape the select strings below produce (the columns are
@@ -94,8 +95,7 @@ class TasksResource {
94
95
  .order('created_at', { ascending: false })
95
96
  .range(offset, offset + pageSize - 1);
96
97
  if (trimmedSearch) {
97
- const escapedSearch = trimmedSearch.replace(/,/g, '\\,');
98
- tasksQuery = tasksQuery.or(`name.ilike.%${escapedSearch}%,description.ilike.%${escapedSearch}%`);
98
+ tasksQuery = tasksQuery.or((0, transforms_1.orIlike)(['name', 'description'], trimmedSearch));
99
99
  }
100
100
  if (query.client_id) {
101
101
  tasksQuery = tasksQuery.eq('client_id', query.client_id);
@@ -133,17 +133,7 @@ class TasksResource {
133
133
  const { data, error, count } = await tasksQuery;
134
134
  if (error)
135
135
  throw (0, errors_1.mapPostgrestError)(error);
136
- const totalEstimated = count ?? 0;
137
- const totalPages = totalEstimated > 0 ? Math.ceil(totalEstimated / pageSize) : 0;
138
- return {
139
- results: (data ?? []),
140
- page,
141
- per_page: pageSize,
142
- count: totalEstimated,
143
- total_pages: totalPages,
144
- has_next_page: page < totalPages,
145
- has_previous_page: page > 1,
146
- };
136
+ return (0, transforms_1.toMmsList)(data, page, pageSize, count);
147
137
  }
148
138
  async getById(taskId) {
149
139
  const { data, error } = await this.supabase
@@ -176,36 +166,20 @@ class TasksResource {
176
166
  return this.getById(taskId);
177
167
  }
178
168
  async archive(taskId) {
179
- await this.table.transition(taskId, enum_1.AuditTrailAction.ARCHIVE, {
180
- archived: true,
181
- archived_at: new Date().toISOString(),
182
- archived_by: this.auth.mms_id,
183
- });
169
+ await this.table.transition(taskId, enum_1.AuditTrailAction.ARCHIVE, (0, transforms_1.archivedPatch)(this.auth.mms_id));
184
170
  return this.getById(taskId);
185
171
  }
186
172
  async unarchive(taskId) {
187
- await this.table.transition(taskId, enum_1.AuditTrailAction.UNARCHIVE, {
188
- archived: false,
189
- unarchived_at: new Date().toISOString(),
190
- unarchived_by: this.auth.mms_id,
191
- });
173
+ await this.table.transition(taskId, enum_1.AuditTrailAction.UNARCHIVE, (0, transforms_1.unarchivedPatch)(this.auth.mms_id));
192
174
  return this.getById(taskId);
193
175
  }
194
176
  async restore(taskId) {
195
- await this.table.transition(taskId, enum_1.AuditTrailAction.RESTORE, {
196
- deleted: false,
197
- restored_at: new Date().toISOString(),
198
- restored_by: this.auth.mms_id,
199
- });
177
+ await this.table.transition(taskId, enum_1.AuditTrailAction.RESTORE, (0, transforms_1.restoredPatch)(this.auth.mms_id));
200
178
  return this.getById(taskId);
201
179
  }
202
180
  /** Soft delete — the row stays, flagged `deleted`, and `restore()` brings it back. */
203
181
  async remove(taskId) {
204
- await this.table.transition(taskId, enum_1.AuditTrailAction.DELETE, {
205
- deleted: true,
206
- deleted_at: new Date().toISOString(),
207
- deleted_by: this.auth.mms_id,
208
- });
182
+ await this.table.transition(taskId, enum_1.AuditTrailAction.DELETE, (0, transforms_1.deletedPatch)(this.auth.mms_id));
209
183
  }
210
184
  }
211
185
  exports.TasksResource = TasksResource;