@taico/taico 0.8.5 → 0.9.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 (158) hide show
  1. package/README.md +1 -1
  2. package/dist/access-requests/access-request.entity.d.ts +16 -0
  3. package/dist/access-requests/access-request.entity.js +87 -0
  4. package/dist/access-requests/access-request.entity.js.map +1 -0
  5. package/dist/access-requests/access-request.limits.d.ts +3 -0
  6. package/dist/access-requests/access-request.limits.js +7 -0
  7. package/dist/access-requests/access-request.limits.js.map +1 -0
  8. package/dist/access-requests/access-requests.controller.d.ts +16 -0
  9. package/dist/access-requests/access-requests.controller.js +129 -0
  10. package/dist/access-requests/access-requests.controller.js.map +1 -0
  11. package/dist/access-requests/access-requests.module.d.ts +2 -0
  12. package/dist/access-requests/access-requests.module.js +26 -0
  13. package/dist/access-requests/access-requests.module.js.map +1 -0
  14. package/dist/access-requests/access-requests.service.d.ts +14 -0
  15. package/dist/access-requests/access-requests.service.js +106 -0
  16. package/dist/access-requests/access-requests.service.js.map +1 -0
  17. package/dist/access-requests/dto/http/access-request-admin.dto.d.ts +26 -0
  18. package/dist/access-requests/dto/http/access-request-admin.dto.js +130 -0
  19. package/dist/access-requests/dto/http/access-request-admin.dto.js.map +1 -0
  20. package/dist/access-requests/dto/http/create-access-request.dto.d.ts +11 -0
  21. package/dist/access-requests/dto/http/create-access-request.dto.js +78 -0
  22. package/dist/access-requests/dto/http/create-access-request.dto.js.map +1 -0
  23. package/dist/access-requests/dto/service/access-requests.service.types.d.ts +29 -0
  24. package/dist/access-requests/dto/service/access-requests.service.types.js +3 -0
  25. package/dist/access-requests/dto/service/access-requests.service.types.js.map +1 -0
  26. package/dist/access-requests/enums/access-request-heard-from.enum.d.ts +7 -0
  27. package/dist/access-requests/enums/access-request-heard-from.enum.js +12 -0
  28. package/dist/access-requests/enums/access-request-heard-from.enum.js.map +1 -0
  29. package/dist/access-requests/enums/access-request-status.enum.d.ts +4 -0
  30. package/dist/access-requests/enums/access-request-status.enum.js +9 -0
  31. package/dist/access-requests/enums/access-request-status.enum.js.map +1 -0
  32. package/dist/access-requests/enums/index.d.ts +2 -0
  33. package/dist/access-requests/enums/index.js +8 -0
  34. package/dist/access-requests/enums/index.js.map +1 -0
  35. package/dist/access-requests/errors/access-requests.errors.d.ts +8 -0
  36. package/dist/access-requests/errors/access-requests.errors.js +21 -0
  37. package/dist/access-requests/errors/access-requests.errors.js.map +1 -0
  38. package/dist/access-requests/submission-ceiling.d.ts +7 -0
  39. package/dist/access-requests/submission-ceiling.js +21 -0
  40. package/dist/access-requests/submission-ceiling.js.map +1 -0
  41. package/dist/access-requests/submission-ceiling.spec.d.ts +1 -0
  42. package/dist/access-requests/submission-ceiling.spec.js +18 -0
  43. package/dist/access-requests/submission-ceiling.spec.js.map +1 -0
  44. package/dist/app.module.js +10 -0
  45. package/dist/app.module.js.map +1 -1
  46. package/dist/common/postgres-io.adapter.js +2 -1
  47. package/dist/common/postgres-io.adapter.js.map +1 -1
  48. package/dist/errors/http/error-catalog.js +18 -0
  49. package/dist/errors/http/error-catalog.js.map +1 -1
  50. package/dist/executions/events/execution-traces-changed.event.d.ts +5 -0
  51. package/dist/executions/events/execution-traces-changed.event.js +12 -0
  52. package/dist/executions/events/execution-traces-changed.event.js.map +1 -0
  53. package/dist/executions/executions-worker.gateway.d.ts +17 -2
  54. package/dist/executions/executions-worker.gateway.js +29 -1
  55. package/dist/executions/executions-worker.gateway.js.map +1 -1
  56. package/dist/executions/executions.gateway.d.ts +12 -0
  57. package/dist/executions/executions.gateway.js +39 -0
  58. package/dist/executions/executions.gateway.js.map +1 -1
  59. package/dist/executions/executions.module.js +6 -0
  60. package/dist/executions/executions.module.js.map +1 -1
  61. package/dist/executions/staleness/stale-active-task-execution-pruner.service.js +3 -0
  62. package/dist/executions/staleness/stale-active-task-execution-pruner.service.js.map +1 -1
  63. package/dist/executions/staleness/stale-active-task-execution-pruner.service.spec.js +3 -0
  64. package/dist/executions/staleness/stale-active-task-execution-pruner.service.spec.js.map +1 -1
  65. package/dist/executions/traces/dto/http/execution-traces-response.dto.d.ts +17 -0
  66. package/dist/executions/traces/dto/http/execution-traces-response.dto.js +86 -0
  67. package/dist/executions/traces/dto/http/execution-traces-response.dto.js.map +1 -0
  68. package/dist/executions/traces/dto/http/list-execution-traces-query.dto.d.ts +6 -0
  69. package/dist/executions/traces/dto/http/list-execution-traces-query.dto.js +63 -0
  70. package/dist/executions/traces/dto/http/list-execution-traces-query.dto.js.map +1 -0
  71. package/dist/executions/traces/execution-trace.entity.d.ts +9 -0
  72. package/dist/executions/traces/execution-trace.entity.js +55 -0
  73. package/dist/executions/traces/execution-trace.entity.js.map +1 -0
  74. package/dist/executions/traces/execution-traces.controller.d.ts +8 -0
  75. package/dist/executions/traces/execution-traces.controller.js +68 -0
  76. package/dist/executions/traces/execution-traces.controller.js.map +1 -0
  77. package/dist/executions/traces/execution-traces.errors.d.ts +9 -0
  78. package/dist/executions/traces/execution-traces.errors.js +20 -0
  79. package/dist/executions/traces/execution-traces.errors.js.map +1 -0
  80. package/dist/executions/traces/execution-traces.service.d.ts +20 -0
  81. package/dist/executions/traces/execution-traces.service.js +133 -0
  82. package/dist/executions/traces/execution-traces.service.js.map +1 -0
  83. package/dist/executions/traces/execution-traces.service.spec.d.ts +1 -0
  84. package/dist/executions/traces/execution-traces.service.spec.js +131 -0
  85. package/dist/executions/traces/execution-traces.service.spec.js.map +1 -0
  86. package/dist/migrations/1762300000000-AccessRequests.d.ts +6 -0
  87. package/dist/migrations/1762300000000-AccessRequests.js +29 -0
  88. package/dist/migrations/1762300000000-AccessRequests.js.map +1 -0
  89. package/dist/migrations/1762400000000-AccessRequestHeardFrom.d.ts +6 -0
  90. package/dist/migrations/1762400000000-AccessRequestHeardFrom.js +23 -0
  91. package/dist/migrations/1762400000000-AccessRequestHeardFrom.js.map +1 -0
  92. package/dist/migrations/1762500000000-ExecutionTraces.d.ts +6 -0
  93. package/dist/migrations/1762500000000-ExecutionTraces.js +24 -0
  94. package/dist/migrations/1762500000000-ExecutionTraces.js.map +1 -0
  95. package/dist/migrations/1762500000001-ExecutionTraceJson.d.ts +6 -0
  96. package/dist/migrations/1762500000001-ExecutionTraceJson.js +14 -0
  97. package/dist/migrations/1762500000001-ExecutionTraceJson.js.map +1 -0
  98. package/dist/public/android-chrome-192x192.png +0 -0
  99. package/dist/public/android-chrome-512x512.png +0 -0
  100. package/dist/public/apple-touch-icon.png +0 -0
  101. package/dist/public/assets/index-G5Ht4law.js +118 -0
  102. package/dist/public/assets/index-NjAtMwFI.css +1 -0
  103. package/dist/public/avatar/angus.png +0 -0
  104. package/dist/public/avatar/bruce.png +0 -0
  105. package/dist/public/avatar/claude.webp +0 -0
  106. package/dist/public/avatar/cockatoo.png +0 -0
  107. package/dist/public/avatar/gemini.png +0 -0
  108. package/dist/public/avatar/grace.png +0 -0
  109. package/dist/public/avatar/gustav.png +0 -0
  110. package/dist/public/avatar/openai.svg +15 -0
  111. package/dist/public/avatar/opencode.svg +1 -0
  112. package/dist/public/avatar/qwen.png +0 -0
  113. package/dist/public/avatar/stacy.png +0 -0
  114. package/dist/public/avatar/taico.png +0 -0
  115. package/dist/public/beta/assets/index-BO6PlAsO.js +94 -0
  116. package/dist/public/beta/assets/index-DIzh0pTC.css +1 -0
  117. package/dist/public/beta/index.html +27 -0
  118. package/dist/public/beta/manifest.webmanifest +27 -0
  119. package/dist/public/beta/roo-favicon.svg +13 -0
  120. package/dist/public/favicon-16x16.png +0 -0
  121. package/dist/public/favicon-32x32.png +0 -0
  122. package/dist/public/favicon.ico +0 -0
  123. package/dist/public/favicon.svg +9 -0
  124. package/dist/public/icons/OpenAI-black-monoblossom.svg +15 -0
  125. package/dist/public/icons/OpenAI-white-monoblossom.svg +15 -0
  126. package/dist/public/icons/agent-development-kit.png +0 -0
  127. package/dist/public/icons/claude-ai-icon.webp +0 -0
  128. package/dist/public/icons/cockatoo.png +0 -0
  129. package/dist/public/icons/opencode-logo-dark.svg +1 -0
  130. package/dist/public/icons/qwen.png +0 -0
  131. package/dist/public/index.html +30 -0
  132. package/dist/public/manifest.webmanifest +22 -0
  133. package/dist/public/package.json +40 -0
  134. package/dist/public/vite.svg +1 -0
  135. package/dist/threads/agent/thread-agent-tools.factory.d.ts +3 -1
  136. package/dist/threads/agent/thread-agent-tools.factory.js +17 -2
  137. package/dist/threads/agent/thread-agent-tools.factory.js.map +1 -1
  138. package/dist/threads/agent/thread-agent.prompts.d.ts +1 -0
  139. package/dist/threads/agent/thread-agent.prompts.js +2 -1
  140. package/dist/threads/agent/thread-agent.prompts.js.map +1 -1
  141. package/dist/threads/dto/update-thread.dto.js +3 -0
  142. package/dist/threads/dto/update-thread.dto.js.map +1 -1
  143. package/dist/threads/errors/threads.errors.d.ts +4 -0
  144. package/dist/threads/errors/threads.errors.js +10 -1
  145. package/dist/threads/errors/threads.errors.js.map +1 -1
  146. package/dist/threads/thread-rename.service.d.ts +12 -0
  147. package/dist/threads/thread-rename.service.js +70 -0
  148. package/dist/threads/thread-rename.service.js.map +1 -0
  149. package/dist/threads/thread-rename.service.spec.d.ts +1 -0
  150. package/dist/threads/thread-rename.service.spec.js +47 -0
  151. package/dist/threads/thread-rename.service.spec.js.map +1 -0
  152. package/dist/threads/threads.module.js +2 -0
  153. package/dist/threads/threads.module.js.map +1 -1
  154. package/dist/threads/threads.service.d.ts +3 -1
  155. package/dist/threads/threads.service.js +6 -3
  156. package/dist/threads/threads.service.js.map +1 -1
  157. package/dist/tsconfig.tsbuildinfo +1 -1
  158. package/package.json +6 -6
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Backend
2
2
 
3
- [![Socket Badge](https://badge.socket.dev/npm/package/@taico/taico/0.8.5)](https://badge.socket.dev/npm/package/@taico/taico/0.8.5)
3
+ [![Socket Badge](https://badge.socket.dev/npm/package/@taico/taico/0.9.0)](https://badge.socket.dev/npm/package/@taico/taico/0.9.0)
4
4
 
5
5
  NestJS backend for Taico.
6
6
 
@@ -0,0 +1,16 @@
1
+ import { AccessRequestHeardFrom, AccessRequestStatus } from './enums';
2
+ export declare class AccessRequestEntity {
3
+ id: string;
4
+ email: string;
5
+ emailNormalized: string;
6
+ building: string | null;
7
+ heardFrom: AccessRequestHeardFrom | null;
8
+ heardFromOther: string | null;
9
+ status: AccessRequestStatus;
10
+ submissionCount: number;
11
+ reviewedAt: Date | null;
12
+ reviewedByActorId: string | null;
13
+ createdAt: Date;
14
+ lastSubmittedAt: Date;
15
+ updatedAt: Date;
16
+ }
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AccessRequestEntity = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const enums_1 = require("./enums");
15
+ let AccessRequestEntity = class AccessRequestEntity {
16
+ id;
17
+ email;
18
+ emailNormalized;
19
+ building;
20
+ heardFrom;
21
+ heardFromOther;
22
+ status;
23
+ submissionCount;
24
+ reviewedAt;
25
+ reviewedByActorId;
26
+ createdAt;
27
+ lastSubmittedAt;
28
+ updatedAt;
29
+ };
30
+ exports.AccessRequestEntity = AccessRequestEntity;
31
+ __decorate([
32
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
33
+ __metadata("design:type", String)
34
+ ], AccessRequestEntity.prototype, "id", void 0);
35
+ __decorate([
36
+ (0, typeorm_1.Column)({ type: 'varchar', length: 320 }),
37
+ __metadata("design:type", String)
38
+ ], AccessRequestEntity.prototype, "email", void 0);
39
+ __decorate([
40
+ (0, typeorm_1.Index)('IDX_access_requests_email_normalized', { unique: true }),
41
+ (0, typeorm_1.Column)({ type: 'varchar', length: 320, name: 'email_normalized' }),
42
+ __metadata("design:type", String)
43
+ ], AccessRequestEntity.prototype, "emailNormalized", void 0);
44
+ __decorate([
45
+ (0, typeorm_1.Column)({ type: 'varchar', length: 280, nullable: true }),
46
+ __metadata("design:type", Object)
47
+ ], AccessRequestEntity.prototype, "building", void 0);
48
+ __decorate([
49
+ (0, typeorm_1.Column)({ type: 'varchar', length: 32, nullable: true, name: 'heard_from' }),
50
+ __metadata("design:type", Object)
51
+ ], AccessRequestEntity.prototype, "heardFrom", void 0);
52
+ __decorate([
53
+ (0, typeorm_1.Column)({ type: 'varchar', length: 120, nullable: true, name: 'heard_from_other' }),
54
+ __metadata("design:type", Object)
55
+ ], AccessRequestEntity.prototype, "heardFromOther", void 0);
56
+ __decorate([
57
+ (0, typeorm_1.Column)({ type: 'varchar', length: 16, default: enums_1.AccessRequestStatus.NEW }),
58
+ __metadata("design:type", String)
59
+ ], AccessRequestEntity.prototype, "status", void 0);
60
+ __decorate([
61
+ (0, typeorm_1.Column)({ type: 'int', default: 1, name: 'submission_count' }),
62
+ __metadata("design:type", Number)
63
+ ], AccessRequestEntity.prototype, "submissionCount", void 0);
64
+ __decorate([
65
+ (0, typeorm_1.Column)({ type: 'timestamptz', nullable: true, name: 'reviewed_at' }),
66
+ __metadata("design:type", Object)
67
+ ], AccessRequestEntity.prototype, "reviewedAt", void 0);
68
+ __decorate([
69
+ (0, typeorm_1.Column)({ type: 'uuid', nullable: true, name: 'reviewed_by_actor_id' }),
70
+ __metadata("design:type", Object)
71
+ ], AccessRequestEntity.prototype, "reviewedByActorId", void 0);
72
+ __decorate([
73
+ (0, typeorm_1.CreateDateColumn)({ type: 'timestamptz', name: 'created_at' }),
74
+ __metadata("design:type", Date)
75
+ ], AccessRequestEntity.prototype, "createdAt", void 0);
76
+ __decorate([
77
+ (0, typeorm_1.Column)({ type: 'timestamptz', name: 'last_submitted_at', default: () => 'now()' }),
78
+ __metadata("design:type", Date)
79
+ ], AccessRequestEntity.prototype, "lastSubmittedAt", void 0);
80
+ __decorate([
81
+ (0, typeorm_1.UpdateDateColumn)({ type: 'timestamptz', name: 'updated_at' }),
82
+ __metadata("design:type", Date)
83
+ ], AccessRequestEntity.prototype, "updatedAt", void 0);
84
+ exports.AccessRequestEntity = AccessRequestEntity = __decorate([
85
+ (0, typeorm_1.Entity)('access_requests')
86
+ ], AccessRequestEntity);
87
+ //# sourceMappingURL=access-request.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-request.entity.js","sourceRoot":"","sources":["../../src/access-requests/access-request.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAOiB;AACjB,mCAAsE;AAO/D,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAE9B,EAAE,CAAU;IAIZ,KAAK,CAAU;IAKf,eAAe,CAAU;IAIzB,QAAQ,CAAiB;IAIzB,SAAS,CAAiC;IAI1C,cAAc,CAAiB;IAG/B,MAAM,CAAuB;IAI7B,eAAe,CAAU;IAGzB,UAAU,CAAe;IAGzB,iBAAiB,CAAiB;IAGlC,SAAS,CAAQ;IAGjB,eAAe,CAAQ;IAGvB,SAAS,CAAQ;CAClB,CAAA;AA9CY,kDAAmB;AAE9B;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;+CACnB;AAIZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;kDAC1B;AAKf;IAFC,IAAA,eAAK,EAAC,sCAAsC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC/D,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;4DAC1C;AAIzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDAChC;AAIzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;;sDAClC;AAI1C;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;2DACpD;AAG/B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,2BAAmB,CAAC,GAAG,EAAE,CAAC;;mDAC7C;AAI7B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;;4DACrC;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;;uDAC5C;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;;8DACrC;AAGlC;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAClD,IAAI;sDAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;8BACjE,IAAI;4DAAC;AAGvB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAClD,IAAI;sDAAC;8BA7CN,mBAAmB;IAD/B,IAAA,gBAAM,EAAC,iBAAiB,CAAC;GACb,mBAAmB,CA8C/B"}
@@ -0,0 +1,3 @@
1
+ export declare const ACCESS_REQUEST_EMAIL_MAX = 254;
2
+ export declare const ACCESS_REQUEST_BUILDING_MAX = 280;
3
+ export declare const ACCESS_REQUEST_HEARD_FROM_OTHER_MAX = 120;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ACCESS_REQUEST_HEARD_FROM_OTHER_MAX = exports.ACCESS_REQUEST_BUILDING_MAX = exports.ACCESS_REQUEST_EMAIL_MAX = void 0;
4
+ exports.ACCESS_REQUEST_EMAIL_MAX = 254;
5
+ exports.ACCESS_REQUEST_BUILDING_MAX = 280;
6
+ exports.ACCESS_REQUEST_HEARD_FROM_OTHER_MAX = 120;
7
+ //# sourceMappingURL=access-request.limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-request.limits.js","sourceRoot":"","sources":["../../src/access-requests/access-request.limits.ts"],"names":[],"mappings":";;;AACa,QAAA,wBAAwB,GAAG,GAAG,CAAC;AAC/B,QAAA,2BAA2B,GAAG,GAAG,CAAC;AAElC,QAAA,mCAAmC,GAAG,GAAG,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { UserContext } from '../auth/guards/context/auth-context.types';
2
+ import { AccessRequestsService } from './access-requests.service';
3
+ import { CreateAccessRequestDto, CreateAccessRequestResponseDto } from './dto/http/create-access-request.dto';
4
+ import { AccessRequestListResponseDto, AccessRequestResponseDto, ListAccessRequestsQueryDto, UpdateAccessRequestDto } from './dto/http/access-request-admin.dto';
5
+ export declare class AccessRequestsController {
6
+ private readonly service;
7
+ constructor(service: AccessRequestsService);
8
+ create(dto: CreateAccessRequestDto): Promise<CreateAccessRequestResponseDto>;
9
+ }
10
+ export declare class AccessRequestsAdminController {
11
+ private readonly service;
12
+ constructor(service: AccessRequestsService);
13
+ list(query: ListAccessRequestsQueryDto): Promise<AccessRequestListResponseDto>;
14
+ update(user: UserContext, id: string, dto: UpdateAccessRequestDto): Promise<AccessRequestResponseDto>;
15
+ remove(id: string): Promise<void>;
16
+ }
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AccessRequestsAdminController = exports.AccessRequestsController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const swagger_1 = require("@nestjs/swagger");
18
+ const access_token_guard_1 = require("../auth/guards/guards/access-token.guard");
19
+ const scopes_guard_1 = require("../auth/guards/guards/scopes.guard");
20
+ const require_scopes_decorator_1 = require("../auth/guards/decorators/require-scopes.decorator");
21
+ const current_user_decorator_1 = require("../auth/guards/decorators/current-user.decorator");
22
+ const user_scopes_1 = require("../auth/core/scopes/user.scopes");
23
+ const access_requests_service_1 = require("./access-requests.service");
24
+ const create_access_request_dto_1 = require("./dto/http/create-access-request.dto");
25
+ const access_request_admin_dto_1 = require("./dto/http/access-request-admin.dto");
26
+ let AccessRequestsController = class AccessRequestsController {
27
+ service;
28
+ constructor(service) {
29
+ this.service = service;
30
+ }
31
+ async create(dto) {
32
+ if (dto.website && dto.website.trim() !== '')
33
+ return { received: true };
34
+ await this.service.submit({
35
+ email: dto.email,
36
+ building: dto.building,
37
+ heardFrom: dto.heardFrom,
38
+ heardFromOther: dto.heardFromOther,
39
+ });
40
+ return { received: true };
41
+ }
42
+ };
43
+ exports.AccessRequestsController = AccessRequestsController;
44
+ __decorate([
45
+ (0, common_1.Post)(),
46
+ (0, common_1.HttpCode)(common_1.HttpStatus.CREATED),
47
+ (0, swagger_1.ApiOperation)({ summary: 'Public: express interest in Taico access (write-only)' }),
48
+ (0, swagger_1.ApiCreatedResponse)({ type: create_access_request_dto_1.CreateAccessRequestResponseDto }),
49
+ (0, swagger_1.ApiTooManyRequestsResponse)({ description: 'Submission ceiling reached; try again later' }),
50
+ __param(0, (0, common_1.Body)()),
51
+ __metadata("design:type", Function),
52
+ __metadata("design:paramtypes", [create_access_request_dto_1.CreateAccessRequestDto]),
53
+ __metadata("design:returntype", Promise)
54
+ ], AccessRequestsController.prototype, "create", null);
55
+ exports.AccessRequestsController = AccessRequestsController = __decorate([
56
+ (0, swagger_1.ApiTags)('Access Requests'),
57
+ (0, common_1.Controller)('access-requests'),
58
+ __metadata("design:paramtypes", [access_requests_service_1.AccessRequestsService])
59
+ ], AccessRequestsController);
60
+ let AccessRequestsAdminController = class AccessRequestsAdminController {
61
+ service;
62
+ constructor(service) {
63
+ this.service = service;
64
+ }
65
+ async list(query) {
66
+ const { items, total } = await this.service.list(query);
67
+ return { items: items.map(toDto), total };
68
+ }
69
+ async update(user, id, dto) {
70
+ return toDto(await this.service.setStatus(id, dto.status, user.actorId));
71
+ }
72
+ async remove(id) {
73
+ await this.service.remove(id);
74
+ }
75
+ };
76
+ exports.AccessRequestsAdminController = AccessRequestsAdminController;
77
+ __decorate([
78
+ (0, common_1.Get)(),
79
+ (0, swagger_1.ApiOperation)({ summary: 'Admin: list access requests, most recently submitted first' }),
80
+ (0, swagger_1.ApiOkResponse)({ type: access_request_admin_dto_1.AccessRequestListResponseDto }),
81
+ __param(0, (0, common_1.Query)()),
82
+ __metadata("design:type", Function),
83
+ __metadata("design:paramtypes", [access_request_admin_dto_1.ListAccessRequestsQueryDto]),
84
+ __metadata("design:returntype", Promise)
85
+ ], AccessRequestsAdminController.prototype, "list", null);
86
+ __decorate([
87
+ (0, common_1.Patch)(':id'),
88
+ (0, swagger_1.ApiOperation)({ summary: 'Admin: mark an access request new or reviewed' }),
89
+ (0, swagger_1.ApiOkResponse)({ type: access_request_admin_dto_1.AccessRequestResponseDto }),
90
+ __param(0, (0, current_user_decorator_1.CurrentUser)()),
91
+ __param(1, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
92
+ __param(2, (0, common_1.Body)()),
93
+ __metadata("design:type", Function),
94
+ __metadata("design:paramtypes", [Object, String, access_request_admin_dto_1.UpdateAccessRequestDto]),
95
+ __metadata("design:returntype", Promise)
96
+ ], AccessRequestsAdminController.prototype, "update", null);
97
+ __decorate([
98
+ (0, common_1.Delete)(':id'),
99
+ (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
100
+ (0, swagger_1.ApiOperation)({ summary: 'Admin: delete an access request' }),
101
+ (0, swagger_1.ApiNoContentResponse)(),
102
+ __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
103
+ __metadata("design:type", Function),
104
+ __metadata("design:paramtypes", [String]),
105
+ __metadata("design:returntype", Promise)
106
+ ], AccessRequestsAdminController.prototype, "remove", null);
107
+ exports.AccessRequestsAdminController = AccessRequestsAdminController = __decorate([
108
+ (0, swagger_1.ApiTags)('Access Requests Admin'),
109
+ (0, swagger_1.ApiCookieAuth)('JWT-Cookie'),
110
+ (0, common_1.Controller)('admin/access-requests'),
111
+ (0, common_1.UseGuards)(access_token_guard_1.AccessTokenGuard, scopes_guard_1.ScopesGuard),
112
+ (0, require_scopes_decorator_1.RequireScopes)(user_scopes_1.UserScopes.ADMIN.id),
113
+ __metadata("design:paramtypes", [access_requests_service_1.AccessRequestsService])
114
+ ], AccessRequestsAdminController);
115
+ function toDto(r) {
116
+ return {
117
+ id: r.id,
118
+ email: r.email,
119
+ building: r.building,
120
+ heardFrom: r.heardFrom,
121
+ heardFromOther: r.heardFromOther,
122
+ status: r.status,
123
+ submissionCount: r.submissionCount,
124
+ createdAt: r.createdAt.toISOString(),
125
+ lastSubmittedAt: r.lastSubmittedAt.toISOString(),
126
+ reviewedAt: r.reviewedAt ? r.reviewedAt.toISOString() : null,
127
+ };
128
+ }
129
+ //# sourceMappingURL=access-requests.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-requests.controller.js","sourceRoot":"","sources":["../../src/access-requests/access-requests.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare class AccessRequestsModule {
2
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AccessRequestsModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const typeorm_1 = require("@nestjs/typeorm");
12
+ const auth_guards_module_1 = require("../auth/guards/auth-guards.module");
13
+ const access_request_entity_1 = require("./access-request.entity");
14
+ const access_requests_controller_1 = require("./access-requests.controller");
15
+ const access_requests_service_1 = require("./access-requests.service");
16
+ let AccessRequestsModule = class AccessRequestsModule {
17
+ };
18
+ exports.AccessRequestsModule = AccessRequestsModule;
19
+ exports.AccessRequestsModule = AccessRequestsModule = __decorate([
20
+ (0, common_1.Module)({
21
+ imports: [typeorm_1.TypeOrmModule.forFeature([access_request_entity_1.AccessRequestEntity]), auth_guards_module_1.AuthGuardsModule],
22
+ controllers: [access_requests_controller_1.AccessRequestsController, access_requests_controller_1.AccessRequestsAdminController],
23
+ providers: [access_requests_service_1.AccessRequestsService],
24
+ })
25
+ ], AccessRequestsModule);
26
+ //# sourceMappingURL=access-requests.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-requests.module.js","sourceRoot":"","sources":["../../src/access-requests/access-requests.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,0EAAqE;AACrE,mEAA8D;AAC9D,6EAAuG;AACvG,uEAAkE;AAO3D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAAG,CAAA;AAAvB,oDAAoB;+BAApB,oBAAoB;IALhC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,uBAAa,CAAC,UAAU,CAAC,CAAC,2CAAmB,CAAC,CAAC,EAAE,qCAAgB,CAAC;QAC5E,WAAW,EAAE,CAAC,qDAAwB,EAAE,0DAA6B,CAAC;QACtE,SAAS,EAAE,CAAC,+CAAqB,CAAC;KACnC,CAAC;GACW,oBAAoB,CAAG"}
@@ -0,0 +1,14 @@
1
+ import { Repository } from 'typeorm';
2
+ import { AccessRequestEntity } from './access-request.entity';
3
+ import { AccessRequestStatus } from './enums';
4
+ import { AccessRequestListResult, AccessRequestResult, ListAccessRequestsInput, SubmitAccessRequestInput } from './dto/service/access-requests.service.types';
5
+ export declare const ACCESS_REQUEST_HOURLY_CEILING = 300;
6
+ export declare class AccessRequestsService {
7
+ private readonly repo;
8
+ private readonly ceiling;
9
+ constructor(repo: Repository<AccessRequestEntity>);
10
+ submit(input: SubmitAccessRequestInput): Promise<void>;
11
+ list(input: ListAccessRequestsInput): Promise<AccessRequestListResult>;
12
+ setStatus(id: string, status: AccessRequestStatus, actorId: string): Promise<AccessRequestResult>;
13
+ remove(id: string): Promise<void>;
14
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AccessRequestsService = exports.ACCESS_REQUEST_HOURLY_CEILING = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const typeorm_2 = require("typeorm");
19
+ const access_request_entity_1 = require("./access-request.entity");
20
+ const enums_1 = require("./enums");
21
+ const access_requests_errors_1 = require("./errors/access-requests.errors");
22
+ const submission_ceiling_1 = require("./submission-ceiling");
23
+ exports.ACCESS_REQUEST_HOURLY_CEILING = 300;
24
+ let AccessRequestsService = class AccessRequestsService {
25
+ repo;
26
+ ceiling = new submission_ceiling_1.SubmissionCeiling(exports.ACCESS_REQUEST_HOURLY_CEILING, 60 * 60 * 1000);
27
+ constructor(repo) {
28
+ this.repo = repo;
29
+ }
30
+ async submit(input) {
31
+ if (!this.ceiling.tryHit())
32
+ throw new access_requests_errors_1.AccessRequestsBusyError();
33
+ const email = input.email.trim();
34
+ const building = input.building?.trim() ? input.building.trim() : null;
35
+ const { heardFrom, heardFromOther } = normalizeHeardFrom(input);
36
+ await this.repo.query(`INSERT INTO "access_requests" ("email", "email_normalized", "building", "heard_from", "heard_from_other")
37
+ VALUES ($1, $2, $3, $4, $5)
38
+ ON CONFLICT ("email_normalized") DO UPDATE SET
39
+ "submission_count" = "access_requests"."submission_count" + 1,
40
+ "last_submitted_at" = now(),
41
+ "updated_at" = now(),
42
+ "building" = COALESCE(EXCLUDED."building", "access_requests"."building"),
43
+ "heard_from" = COALESCE(EXCLUDED."heard_from", "access_requests"."heard_from"),
44
+ "heard_from_other" = CASE WHEN EXCLUDED."heard_from" IS NULL
45
+ THEN "access_requests"."heard_from_other" ELSE EXCLUDED."heard_from_other" END`, [email, email.toLowerCase(), building, heardFrom, heardFromOther]);
46
+ }
47
+ async list(input) {
48
+ const qb = this.repo
49
+ .createQueryBuilder('r')
50
+ .orderBy('r.lastSubmittedAt', 'DESC')
51
+ .addOrderBy('r.createdAt', 'DESC');
52
+ if (input.status)
53
+ qb.andWhere('r.status = :status', { status: input.status });
54
+ if (input.search) {
55
+ const term = `%${input.search.replace(/[\\%_]/g, (c) => `\\${c}`)}%`;
56
+ qb.andWhere('(r.email ILIKE :term OR r.building ILIKE :term OR r.heardFromOther ILIKE :term)', { term });
57
+ }
58
+ qb.take(input.limit ?? 50).skip(input.offset ?? 0);
59
+ const [rows, total] = await qb.getManyAndCount();
60
+ return { items: rows.map(toResult), total };
61
+ }
62
+ async setStatus(id, status, actorId) {
63
+ const row = await this.repo.findOne({ where: { id } });
64
+ if (!row)
65
+ throw new access_requests_errors_1.AccessRequestNotFoundError(id);
66
+ const reviewed = status === enums_1.AccessRequestStatus.REVIEWED;
67
+ row.status = status;
68
+ row.reviewedAt = reviewed ? new Date() : null;
69
+ row.reviewedByActorId = reviewed ? actorId : null;
70
+ return toResult(await this.repo.save(row));
71
+ }
72
+ async remove(id) {
73
+ const res = await this.repo.delete({ id });
74
+ if (!res.affected)
75
+ throw new access_requests_errors_1.AccessRequestNotFoundError(id);
76
+ }
77
+ };
78
+ exports.AccessRequestsService = AccessRequestsService;
79
+ exports.AccessRequestsService = AccessRequestsService = __decorate([
80
+ (0, common_1.Injectable)(),
81
+ __param(0, (0, typeorm_1.InjectRepository)(access_request_entity_1.AccessRequestEntity)),
82
+ __metadata("design:paramtypes", [typeorm_2.Repository])
83
+ ], AccessRequestsService);
84
+ function toResult(r) {
85
+ return {
86
+ id: r.id,
87
+ email: r.email,
88
+ building: r.building,
89
+ heardFrom: r.heardFrom,
90
+ heardFromOther: r.heardFromOther,
91
+ status: r.status,
92
+ submissionCount: r.submissionCount,
93
+ createdAt: r.createdAt,
94
+ lastSubmittedAt: r.lastSubmittedAt,
95
+ reviewedAt: r.reviewedAt,
96
+ };
97
+ }
98
+ function normalizeHeardFrom(input) {
99
+ const heardFrom = input.heardFrom ?? null;
100
+ const other = input.heardFromOther?.trim();
101
+ return {
102
+ heardFrom,
103
+ heardFromOther: heardFrom === enums_1.AccessRequestHeardFrom.OTHER && other ? other : null,
104
+ };
105
+ }
106
+ //# sourceMappingURL=access-requests.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-requests.service.js","sourceRoot":"","sources":["../../src/access-requests/access-requests.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { AccessRequestHeardFrom, AccessRequestStatus } from '../../enums';
2
+ export declare class ListAccessRequestsQueryDto {
3
+ status?: AccessRequestStatus;
4
+ search?: string;
5
+ limit?: number;
6
+ offset?: number;
7
+ }
8
+ export declare class UpdateAccessRequestDto {
9
+ status: AccessRequestStatus;
10
+ }
11
+ export declare class AccessRequestResponseDto {
12
+ id: string;
13
+ email: string;
14
+ building: string | null;
15
+ heardFrom: AccessRequestHeardFrom | null;
16
+ heardFromOther: string | null;
17
+ status: AccessRequestStatus;
18
+ submissionCount: number;
19
+ createdAt: string;
20
+ lastSubmittedAt: string;
21
+ reviewedAt: string | null;
22
+ }
23
+ export declare class AccessRequestListResponseDto {
24
+ items: AccessRequestResponseDto[];
25
+ total: number;
26
+ }
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AccessRequestListResponseDto = exports.AccessRequestResponseDto = exports.UpdateAccessRequestDto = exports.ListAccessRequestsQueryDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const class_validator_1 = require("class-validator");
16
+ const enums_1 = require("../../enums");
17
+ class ListAccessRequestsQueryDto {
18
+ status;
19
+ search;
20
+ limit;
21
+ offset;
22
+ }
23
+ exports.ListAccessRequestsQueryDto = ListAccessRequestsQueryDto;
24
+ __decorate([
25
+ (0, swagger_1.ApiPropertyOptional)({ enum: enums_1.AccessRequestStatus, enumName: 'AccessRequestStatus' }),
26
+ (0, class_validator_1.IsOptional)(),
27
+ (0, class_validator_1.IsEnum)(enums_1.AccessRequestStatus),
28
+ __metadata("design:type", String)
29
+ ], ListAccessRequestsQueryDto.prototype, "status", void 0);
30
+ __decorate([
31
+ (0, swagger_1.ApiPropertyOptional)({ description: 'Matches email, answer or "other" source text (case-insensitive)', maxLength: 100 }),
32
+ (0, class_validator_1.IsOptional)(),
33
+ (0, class_transformer_1.Transform)(({ value }) => (typeof value === 'string' ? value.trim() : value)),
34
+ (0, class_validator_1.IsString)(),
35
+ (0, class_validator_1.MaxLength)(100),
36
+ __metadata("design:type", String)
37
+ ], ListAccessRequestsQueryDto.prototype, "search", void 0);
38
+ __decorate([
39
+ (0, swagger_1.ApiPropertyOptional)({ default: 50, minimum: 1, maximum: 200 }),
40
+ (0, class_validator_1.IsOptional)(),
41
+ (0, class_transformer_1.Type)(() => Number),
42
+ (0, class_validator_1.IsInt)(),
43
+ (0, class_validator_1.Min)(1),
44
+ (0, class_validator_1.Max)(200),
45
+ __metadata("design:type", Number)
46
+ ], ListAccessRequestsQueryDto.prototype, "limit", void 0);
47
+ __decorate([
48
+ (0, swagger_1.ApiPropertyOptional)({ default: 0, minimum: 0 }),
49
+ (0, class_validator_1.IsOptional)(),
50
+ (0, class_transformer_1.Type)(() => Number),
51
+ (0, class_validator_1.IsInt)(),
52
+ (0, class_validator_1.Min)(0),
53
+ __metadata("design:type", Number)
54
+ ], ListAccessRequestsQueryDto.prototype, "offset", void 0);
55
+ class UpdateAccessRequestDto {
56
+ status;
57
+ }
58
+ exports.UpdateAccessRequestDto = UpdateAccessRequestDto;
59
+ __decorate([
60
+ (0, swagger_1.ApiProperty)({ enum: enums_1.AccessRequestStatus, enumName: 'AccessRequestStatus' }),
61
+ (0, class_validator_1.IsEnum)(enums_1.AccessRequestStatus),
62
+ __metadata("design:type", String)
63
+ ], UpdateAccessRequestDto.prototype, "status", void 0);
64
+ class AccessRequestResponseDto {
65
+ id;
66
+ email;
67
+ building;
68
+ heardFrom;
69
+ heardFromOther;
70
+ status;
71
+ submissionCount;
72
+ createdAt;
73
+ lastSubmittedAt;
74
+ reviewedAt;
75
+ }
76
+ exports.AccessRequestResponseDto = AccessRequestResponseDto;
77
+ __decorate([
78
+ (0, swagger_1.ApiProperty)(),
79
+ __metadata("design:type", String)
80
+ ], AccessRequestResponseDto.prototype, "id", void 0);
81
+ __decorate([
82
+ (0, swagger_1.ApiProperty)(),
83
+ __metadata("design:type", String)
84
+ ], AccessRequestResponseDto.prototype, "email", void 0);
85
+ __decorate([
86
+ (0, swagger_1.ApiProperty)({ nullable: true, type: String }),
87
+ __metadata("design:type", Object)
88
+ ], AccessRequestResponseDto.prototype, "building", void 0);
89
+ __decorate([
90
+ (0, swagger_1.ApiProperty)({ nullable: true, enum: enums_1.AccessRequestHeardFrom, enumName: 'AccessRequestHeardFrom' }),
91
+ __metadata("design:type", Object)
92
+ ], AccessRequestResponseDto.prototype, "heardFrom", void 0);
93
+ __decorate([
94
+ (0, swagger_1.ApiProperty)({ nullable: true, type: String }),
95
+ __metadata("design:type", Object)
96
+ ], AccessRequestResponseDto.prototype, "heardFromOther", void 0);
97
+ __decorate([
98
+ (0, swagger_1.ApiProperty)({ enum: enums_1.AccessRequestStatus, enumName: 'AccessRequestStatus' }),
99
+ __metadata("design:type", String)
100
+ ], AccessRequestResponseDto.prototype, "status", void 0);
101
+ __decorate([
102
+ (0, swagger_1.ApiProperty)(),
103
+ __metadata("design:type", Number)
104
+ ], AccessRequestResponseDto.prototype, "submissionCount", void 0);
105
+ __decorate([
106
+ (0, swagger_1.ApiProperty)({ format: 'date-time' }),
107
+ __metadata("design:type", String)
108
+ ], AccessRequestResponseDto.prototype, "createdAt", void 0);
109
+ __decorate([
110
+ (0, swagger_1.ApiProperty)({ format: 'date-time' }),
111
+ __metadata("design:type", String)
112
+ ], AccessRequestResponseDto.prototype, "lastSubmittedAt", void 0);
113
+ __decorate([
114
+ (0, swagger_1.ApiProperty)({ nullable: true, type: String, format: 'date-time' }),
115
+ __metadata("design:type", Object)
116
+ ], AccessRequestResponseDto.prototype, "reviewedAt", void 0);
117
+ class AccessRequestListResponseDto {
118
+ items;
119
+ total;
120
+ }
121
+ exports.AccessRequestListResponseDto = AccessRequestListResponseDto;
122
+ __decorate([
123
+ (0, swagger_1.ApiProperty)({ type: [AccessRequestResponseDto] }),
124
+ __metadata("design:type", Array)
125
+ ], AccessRequestListResponseDto.prototype, "items", void 0);
126
+ __decorate([
127
+ (0, swagger_1.ApiProperty)(),
128
+ __metadata("design:type", Number)
129
+ ], AccessRequestListResponseDto.prototype, "total", void 0);
130
+ //# sourceMappingURL=access-request-admin.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-request-admin.dto.js","sourceRoot":"","sources":["../../../../src/access-requests/dto/http/access-request-admin.dto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { AccessRequestHeardFrom } from '../../enums';
2
+ export declare class CreateAccessRequestDto {
3
+ email: string;
4
+ building?: string;
5
+ heardFrom?: AccessRequestHeardFrom;
6
+ heardFromOther?: string;
7
+ website?: string;
8
+ }
9
+ export declare class CreateAccessRequestResponseDto {
10
+ received: boolean;
11
+ }