@abyss-project/beam 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/.eslintrc.js +32 -0
  2. package/.prettierrc +5 -0
  3. package/README.md +21 -2
  4. package/dist/api/beam.api.d.ts +49 -0
  5. package/dist/api/beam.api.js +110 -0
  6. package/dist/api/beam.api.js.map +1 -0
  7. package/dist/api/index.d.ts +1 -0
  8. package/dist/api/index.js +18 -0
  9. package/dist/api/index.js.map +1 -0
  10. package/dist/constants/beam.constants.d.ts +1 -0
  11. package/dist/constants/beam.constants.js +5 -0
  12. package/dist/constants/beam.constants.js.map +1 -0
  13. package/dist/constants/index.d.ts +1 -0
  14. package/dist/constants/index.js +18 -0
  15. package/dist/constants/index.js.map +1 -0
  16. package/dist/index.d.ts +62 -0
  17. package/dist/index.js +149 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/types/enum/api-error.enum.d.ts +31 -0
  20. package/dist/types/enum/api-error.enum.js +37 -0
  21. package/dist/types/enum/api-error.enum.js.map +1 -0
  22. package/dist/types/enum/beam.enum.d.ts +22 -0
  23. package/dist/types/enum/beam.enum.js +30 -0
  24. package/dist/types/enum/beam.enum.js.map +1 -0
  25. package/dist/types/enum/content-share.enum.d.ts +34 -0
  26. package/dist/types/enum/content-share.enum.js +42 -0
  27. package/dist/types/enum/content-share.enum.js.map +1 -0
  28. package/dist/types/enum/index.d.ts +3 -0
  29. package/dist/types/enum/index.js +20 -0
  30. package/dist/types/enum/index.js.map +1 -0
  31. package/dist/types/index.d.ts +2 -0
  32. package/dist/types/index.js +19 -0
  33. package/dist/types/index.js.map +1 -0
  34. package/dist/types/interface/api/index.d.ts +5 -0
  35. package/dist/types/interface/api/index.js +22 -0
  36. package/dist/types/interface/api/index.js.map +1 -0
  37. package/dist/types/interface/api/requests/beam.request.d.ts +139 -0
  38. package/dist/types/interface/api/requests/beam.request.js +3 -0
  39. package/dist/types/interface/api/requests/beam.request.js.map +1 -0
  40. package/dist/types/interface/api/requests/index.d.ts +1 -0
  41. package/dist/types/interface/api/requests/index.js +18 -0
  42. package/dist/types/interface/api/requests/index.js.map +1 -0
  43. package/dist/types/interface/api/responses/beam.response.d.ts +115 -0
  44. package/dist/types/interface/api/responses/beam.response.js +3 -0
  45. package/dist/types/interface/api/responses/beam.response.js.map +1 -0
  46. package/dist/types/interface/api/responses/index.d.ts +1 -0
  47. package/dist/types/interface/api/responses/index.js +18 -0
  48. package/dist/types/interface/api/responses/index.js.map +1 -0
  49. package/dist/types/interface/api/type-message/api-error.d.ts +6 -0
  50. package/dist/types/interface/api/type-message/api-error.js +3 -0
  51. package/dist/types/interface/api/type-message/api-error.js.map +1 -0
  52. package/dist/types/interface/api/type-message/base-paginate.d.ts +10 -0
  53. package/dist/types/interface/api/type-message/base-paginate.js +3 -0
  54. package/dist/types/interface/api/type-message/base-paginate.js.map +1 -0
  55. package/dist/types/interface/api/type-message/response.d.ts +5 -0
  56. package/dist/types/interface/api/type-message/response.js +3 -0
  57. package/dist/types/interface/api/type-message/response.js.map +1 -0
  58. package/dist/types/interface/index.d.ts +2 -0
  59. package/dist/types/interface/index.js +19 -0
  60. package/dist/types/interface/index.js.map +1 -0
  61. package/dist/types/interface/models/beam.dto.d.ts +70 -0
  62. package/dist/types/interface/models/beam.dto.js +3 -0
  63. package/dist/types/interface/models/beam.dto.js.map +1 -0
  64. package/dist/types/interface/models/content-share.dto.d.ts +15 -0
  65. package/dist/types/interface/models/content-share.dto.js +3 -0
  66. package/dist/types/interface/models/content-share.dto.js.map +1 -0
  67. package/dist/types/interface/models/index.d.ts +5 -0
  68. package/dist/types/interface/models/index.js +22 -0
  69. package/dist/types/interface/models/index.js.map +1 -0
  70. package/dist/types/interface/models/organization.dto.d.ts +11 -0
  71. package/dist/types/interface/models/organization.dto.js +3 -0
  72. package/dist/types/interface/models/organization.dto.js.map +1 -0
  73. package/dist/types/interface/models/project.dto.d.ts +12 -0
  74. package/dist/types/interface/models/project.dto.js +3 -0
  75. package/dist/types/interface/models/project.dto.js.map +1 -0
  76. package/dist/types/interface/models/user.dto.d.ts +11 -0
  77. package/dist/types/interface/models/user.dto.js +3 -0
  78. package/dist/types/interface/models/user.dto.js.map +1 -0
  79. package/dist/utils/enum.utils.d.ts +1 -0
  80. package/dist/utils/enum.utils.js +3 -0
  81. package/dist/utils/enum.utils.js.map +1 -0
  82. package/dist/utils/error.utils.d.ts +15 -0
  83. package/dist/utils/error.utils.js +25 -0
  84. package/dist/utils/error.utils.js.map +1 -0
  85. package/dist/utils/index.d.ts +2 -0
  86. package/dist/utils/index.js +19 -0
  87. package/dist/utils/index.js.map +1 -0
  88. package/package.json +58 -4
  89. package/src/api/beam.api.ts +325 -0
  90. package/src/api/index.ts +1 -0
  91. package/src/api/tests/beam.api.spec.ts +106 -0
  92. package/src/constants/beam.constants.ts +4 -0
  93. package/src/constants/index.ts +1 -0
  94. package/src/index.ts +167 -0
  95. package/src/types/enum/api-error.enum.ts +33 -0
  96. package/src/types/enum/beam.enum.ts +48 -0
  97. package/src/types/enum/content-share.enum.ts +37 -0
  98. package/src/types/enum/index.ts +3 -0
  99. package/src/types/index.ts +2 -0
  100. package/src/types/interface/api/index.ts +5 -0
  101. package/src/types/interface/api/requests/beam.request.ts +180 -0
  102. package/src/types/interface/api/requests/index.ts +1 -0
  103. package/src/types/interface/api/responses/beam.response.ts +162 -0
  104. package/src/types/interface/api/responses/index.ts +1 -0
  105. package/src/types/interface/api/type-message/api-error.ts +7 -0
  106. package/src/types/interface/api/type-message/base-paginate.ts +11 -0
  107. package/src/types/interface/api/type-message/response.ts +6 -0
  108. package/src/types/interface/index.ts +2 -0
  109. package/src/types/interface/models/beam.dto.ts +86 -0
  110. package/src/types/interface/models/content-share.dto.ts +20 -0
  111. package/src/types/interface/models/index.ts +5 -0
  112. package/src/types/interface/models/organization.dto.ts +21 -0
  113. package/src/types/interface/models/project.dto.ts +16 -0
  114. package/src/types/interface/models/user.dto.ts +19 -0
  115. package/src/types/tests/beam-management-types.spec.ts +38 -0
  116. package/src/types/tests/beam-share-enums.spec.ts +11 -0
  117. package/src/types/tests/beam.dto.spec.ts +61 -0
  118. package/src/types/tests/beam.request-response.spec.ts +43 -0
  119. package/src/utils/enum.utils.ts +1 -0
  120. package/src/utils/error.utils.ts +30 -0
  121. package/src/utils/index.ts +2 -0
  122. package/tsconfig.check.json +15 -0
  123. package/tsconfig.json +36 -0
@@ -0,0 +1,61 @@
1
+ import { BeamVisibility } from '../enum/beam.enum';
2
+ import type { IBeamTransfer, IBeamFile, IBeamRecipient } from '../interface/models/beam.dto';
3
+
4
+ describe('beam DTOs', () => {
5
+ it('exposes the BeamVisibility enum with PUBLIC and RESTRICTED only', () => {
6
+ expect(BeamVisibility.PUBLIC).toBe('PUBLIC');
7
+ expect(BeamVisibility.RESTRICTED).toBe('RESTRICTED');
8
+ expect(Object.values(BeamVisibility).sort()).toEqual(['PUBLIC', 'RESTRICTED']);
9
+ });
10
+
11
+ it('IBeamTransfer carries ownership + transfer fields', () => {
12
+ const transfer: IBeamTransfer = {
13
+ id: 't1',
14
+ slug: 'abcdefghij',
15
+ manageTokenHash: null,
16
+ userId: 'u1',
17
+ organizationId: null,
18
+ projectId: null,
19
+ createdByUserId: 'u1',
20
+ visibility: BeamVisibility.PUBLIC,
21
+ passwordHash: null,
22
+ title: 'My transfer',
23
+ message: null,
24
+ isActive: true,
25
+ expiresAt: null,
26
+ maxDownloads: null,
27
+ downloadCount: 0,
28
+ lastDownloadedAt: null,
29
+ totalSizeOctet: 0,
30
+ fileCount: 0,
31
+ };
32
+ expect(transfer.slug).toHaveLength(10);
33
+ });
34
+
35
+ it('IBeamFile and IBeamRecipient carry their row fields', () => {
36
+ const file: IBeamFile = {
37
+ id: 'f1',
38
+ transferId: 't1',
39
+ storageFileId: 'sf1',
40
+ thumbnailStorageFileId: null,
41
+ name: 'photo.png',
42
+ mimeType: 'image/png',
43
+ sizeOctet: 123,
44
+ isImage: true,
45
+ width: 800,
46
+ height: 600,
47
+ downloadCount: 0,
48
+ position: 0,
49
+ };
50
+ const recipient: IBeamRecipient = {
51
+ id: 'r1',
52
+ transferId: 't1',
53
+ email: 'a@b.dev',
54
+ locale: 'fr',
55
+ sentAt: null,
56
+ firstOpenedAt: null,
57
+ };
58
+ expect(file.isImage).toBe(true);
59
+ expect(recipient.email).toBe('a@b.dev');
60
+ });
61
+ });
@@ -0,0 +1,43 @@
1
+ import { BeamVisibility } from '../enum/beam.enum';
2
+ import type {
3
+ ICreateBeamBody,
4
+ IUpdateBeamBody,
5
+ IPaginateBeamQuery,
6
+ } from '../interface/api/requests/beam.request';
7
+ import type {
8
+ ICreateBeamResponse,
9
+ IPaginateBeamResponse,
10
+ } from '../interface/api/responses/beam.response';
11
+
12
+ describe('beam request/response types', () => {
13
+ it('ICreateBeamBody accepts the finalize metadata bundle', () => {
14
+ const body: ICreateBeamBody = {
15
+ title: 'Pictures',
16
+ message: 'enjoy',
17
+ visibility: BeamVisibility.PUBLIC,
18
+ expiresInDays: 7,
19
+ password: 'secret',
20
+ maxDownloads: 100,
21
+ };
22
+ expect(body.visibility).toBe(BeamVisibility.PUBLIC);
23
+ });
24
+
25
+ it('IUpdateBeamBody allows nulling expiry and maxDownloads', () => {
26
+ const body: IUpdateBeamBody = { expiresAt: null, maxDownloads: null, isActive: false };
27
+ expect(body.expiresAt).toBeNull();
28
+ });
29
+
30
+ it('IPaginateBeamQuery extends pagination with filters', () => {
31
+ const q: IPaginateBeamQuery = { page: 1, limit: 10, title: 'pic', isActive: true };
32
+ expect(q.page).toBe(1);
33
+ });
34
+
35
+ it('responses wrap the transfer payload', () => {
36
+ const created: ICreateBeamResponse = { data: { beamTransfer: { id: 't1' } as never } };
37
+ const page: IPaginateBeamResponse = {
38
+ data: { maxPages: 1, currentPage: 1, totalItems: 0, data: [] },
39
+ };
40
+ expect(created.data.beamTransfer.id).toBe('t1');
41
+ expect(page.data.totalItems).toBe(0);
42
+ });
43
+ });
@@ -0,0 +1 @@
1
+ export type ValueOf<T> = T[keyof T];
@@ -0,0 +1,30 @@
1
+ import { Code, ErrorType } from '../types';
2
+
3
+ type ErrorParams = { code: Code; type: ErrorType; message?: string };
4
+
5
+ export class ServiceException extends Error {
6
+ private readonly code: Code;
7
+
8
+ private readonly type: ErrorType;
9
+
10
+ getCode(): Code {
11
+ return this.code;
12
+ }
13
+
14
+ getType(): ErrorType {
15
+ return this.type;
16
+ }
17
+
18
+ constructor(params: ErrorParams) {
19
+ super(params.message);
20
+ this.code = params.code;
21
+ this.type = params.type;
22
+ }
23
+ }
24
+
25
+ export const handleError = (error: Error | ErrorParams, _params?: ErrorParams): Error => {
26
+ if (error instanceof Error) {
27
+ return error;
28
+ }
29
+ return new ServiceException(error);
30
+ };
@@ -0,0 +1,2 @@
1
+ export * from './error.utils';
2
+ export * from './enum.utils';
@@ -0,0 +1,15 @@
1
+ {
2
+ // Perimetre de VERIFICATION, distinct de celui du build.
3
+ //
4
+ // `tsconfig.json` exclut `src/**/*.spec.ts` parce qu'il sert a emettre `dist/`, ou une spec
5
+ // n'a rien a faire. Mais eslint s'appuie sur ce meme fichier via `parserOptions.project` :
6
+ // les cinq specs du paquet sortaient donc en « Parsing error: that TSConfig does not include
7
+ // this file », mesure du 2026-09-09, et n'etaient lintees par personne.
8
+ //
9
+ // Ce fichier sert uniquement a eslint. Il n'emet rien et ne change pas ce que `build` produit.
10
+ "extends": "./tsconfig.json",
11
+ "compilerOptions": {
12
+ "noEmit": true
13
+ },
14
+ "exclude": ["./dist/**/*"]
15
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "compilerOptions": {
3
+ "incremental": false,
4
+ "target": "es2021",
5
+ "lib": [
6
+ "dom",
7
+ "es2021"
8
+ ],
9
+ "experimentalDecorators": true,
10
+ "emitDecoratorMetadata": true,
11
+ "module": "commonjs",
12
+ "rootDir": "src",
13
+ "moduleResolution": "node",
14
+ "resolveJsonModule": true,
15
+ "allowJs": true,
16
+ "declaration": true,
17
+ "sourceMap": true,
18
+ "outDir": "./dist",
19
+ "removeComments": true,
20
+ "allowSyntheticDefaultImports": true,
21
+ "esModuleInterop": true,
22
+ "forceConsistentCasingInFileNames": true,
23
+ "strict": true,
24
+ "strictNullChecks": true,
25
+ "strictFunctionTypes": true,
26
+ "strictPropertyInitialization": false,
27
+ "skipLibCheck": true
28
+ },
29
+ "include": [
30
+ "./src"
31
+ ],
32
+ "exclude": [
33
+ "./dist/**/*",
34
+ "./src/**/*.spec.ts"
35
+ ]
36
+ }