@tbs-fitness/contract 0.2.0 → 0.4.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.
- package/README.md +21 -0
- package/dist/cjs/app-settings/app-settings.dto.d.ts +124 -0
- package/dist/cjs/app-settings/app-settings.dto.js +94 -0
- package/dist/cjs/app-settings/index.d.ts +1 -0
- package/dist/cjs/app-settings/index.js +17 -0
- package/dist/cjs/audit/audit-log.dto.js +2 -1
- package/dist/cjs/auth/auth.dto.d.ts +36 -0
- package/dist/cjs/auth/auth.dto.js +28 -8
- package/dist/cjs/coach/coach-auth.dto.d.ts +12 -0
- package/dist/cjs/coach/coach-auth.dto.js +18 -6
- package/dist/cjs/common/api-response.schema.js +2 -1
- package/dist/cjs/common/date-time.schema.d.ts +39 -0
- package/dist/cjs/common/date-time.schema.js +112 -0
- package/dist/cjs/common/index.d.ts +1 -0
- package/dist/cjs/common/index.js +1 -0
- package/dist/cjs/communication/index.d.ts +2 -0
- package/dist/cjs/communication/index.js +18 -0
- package/dist/cjs/communication/message-catalogue.d.ts +26 -0
- package/dist/cjs/communication/message-catalogue.js +53 -0
- package/dist/cjs/communication/template.dto.d.ts +240 -0
- package/dist/cjs/communication/template.dto.js +206 -0
- package/dist/cjs/enums/index.d.ts +26 -0
- package/dist/cjs/enums/index.js +32 -1
- package/dist/cjs/feature-flags/feature-flag.dto.js +10 -9
- package/dist/esm/app-settings/app-settings.dto.d.ts +124 -0
- package/dist/esm/app-settings/app-settings.dto.js +90 -0
- package/dist/esm/app-settings/index.d.ts +1 -0
- package/dist/esm/app-settings/index.js +1 -0
- package/dist/esm/audit/audit-log.dto.js +2 -1
- package/dist/esm/auth/auth.dto.d.ts +36 -0
- package/dist/esm/auth/auth.dto.js +28 -8
- package/dist/esm/coach/coach-auth.dto.d.ts +12 -0
- package/dist/esm/coach/coach-auth.dto.js +19 -7
- package/dist/esm/common/api-response.schema.js +2 -1
- package/dist/esm/common/date-time.schema.d.ts +39 -0
- package/dist/esm/common/date-time.schema.js +107 -0
- package/dist/esm/common/index.d.ts +1 -0
- package/dist/esm/common/index.js +1 -0
- package/dist/esm/communication/index.d.ts +2 -0
- package/dist/esm/communication/index.js +2 -0
- package/dist/esm/communication/message-catalogue.d.ts +26 -0
- package/dist/esm/communication/message-catalogue.js +50 -0
- package/dist/esm/communication/template.dto.d.ts +240 -0
- package/dist/esm/communication/template.dto.js +200 -0
- package/dist/esm/enums/index.d.ts +26 -0
- package/dist/esm/enums/index.js +31 -0
- package/dist/esm/feature-flags/feature-flag.dto.js +10 -9
- package/package.json +21 -1
package/dist/esm/enums/index.js
CHANGED
|
@@ -18,6 +18,12 @@ export const ACCOUNT_STATUSES = [
|
|
|
18
18
|
];
|
|
19
19
|
/** The statuses an administrator may set. Verification is never set by hand. */
|
|
20
20
|
export const ADMIN_SETTABLE_ACCOUNT_STATUSES = ['active', 'disabled'];
|
|
21
|
+
/**
|
|
22
|
+
* Where a user's time zone came from. `AUTO` was detected from their browser
|
|
23
|
+
* and may be updated when they sign in elsewhere. `MANUAL` was chosen by the
|
|
24
|
+
* user, and only the user changes it.
|
|
25
|
+
*/
|
|
26
|
+
export const TIMEZONE_SOURCES = ['AUTO', 'MANUAL'];
|
|
21
27
|
export const TOKEN_TRANSPORTS = ['body', 'cookie'];
|
|
22
28
|
export const AUDIT_OUTCOMES = ['success', 'failure'];
|
|
23
29
|
export const FEATURE_FLAG_RULE_TYPES = [
|
|
@@ -26,3 +32,28 @@ export const FEATURE_FLAG_RULE_TYPES = [
|
|
|
26
32
|
'trainer',
|
|
27
33
|
'role',
|
|
28
34
|
];
|
|
35
|
+
/**
|
|
36
|
+
* The ways a message can reach someone. WhatsApp and push are added here when
|
|
37
|
+
* their channel modules are built.
|
|
38
|
+
*/
|
|
39
|
+
export const COMMUNICATION_CHANNELS = ['EMAIL', 'SMS'];
|
|
40
|
+
/**
|
|
41
|
+
* Every message the platform sends. Each has a catalogue entry in
|
|
42
|
+
* `@tbs-fitness/contract/communication` saying which channels may carry it and
|
|
43
|
+
* which variables its sender supplies.
|
|
44
|
+
*/
|
|
45
|
+
export const MESSAGE_TYPES = [
|
|
46
|
+
'auth.otp.signup_verification',
|
|
47
|
+
'auth.otp.password_reset',
|
|
48
|
+
'auth.password_reset_link',
|
|
49
|
+
];
|
|
50
|
+
/** What happened to one message on one channel. */
|
|
51
|
+
export const DELIVERY_STATUSES = [
|
|
52
|
+
'sent',
|
|
53
|
+
'skipped_disabled',
|
|
54
|
+
'skipped_unreachable',
|
|
55
|
+
'failed',
|
|
56
|
+
'failed_missing_variables',
|
|
57
|
+
];
|
|
58
|
+
/** Only one version of a template per message type and channel is active. */
|
|
59
|
+
export const TEMPLATE_STATUSES = ['draft', 'active', 'archived'];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { instantInputSchema, utcTimestampSchema, } from '../common/date-time.schema.js';
|
|
2
3
|
import { paginationQuerySchema } from '../common/pagination.schema.js';
|
|
3
4
|
import { safeTextSchema } from '../common/safe-text.schema.js';
|
|
4
5
|
import { APP_ENVIRONMENTS, FEATURE_FLAG_RULE_TYPES, ROLES, } from '../enums/index.js';
|
|
@@ -14,7 +15,7 @@ const keySchema = z
|
|
|
14
15
|
const nameSchema = safeTextSchema(120);
|
|
15
16
|
const descriptionSchema = safeTextSchema(500);
|
|
16
17
|
const percentageSchema = z.number().int().min(0).max(100);
|
|
17
|
-
const timestampSchema =
|
|
18
|
+
const timestampSchema = instantInputSchema;
|
|
18
19
|
/** Lower-cased, so that it matches IDs as they come from the database. */
|
|
19
20
|
const accountIdSchema = z.string().toLowerCase().pipe(z.uuid());
|
|
20
21
|
const scheduleIsOrdered = ({ activationAt, expiresAt, }) => !activationAt || !expiresAt || new Date(activationAt) < new Date(expiresAt);
|
|
@@ -92,8 +93,8 @@ export const ruleResponseSchema = z.object({
|
|
|
92
93
|
ruleType: z.enum(FEATURE_FLAG_RULE_TYPES),
|
|
93
94
|
ruleValue: z.string(),
|
|
94
95
|
enabled: z.boolean(),
|
|
95
|
-
createdAt:
|
|
96
|
-
updatedAt:
|
|
96
|
+
createdAt: utcTimestampSchema,
|
|
97
|
+
updatedAt: utcTimestampSchema,
|
|
97
98
|
});
|
|
98
99
|
export const flagResponseSchema = z.object({
|
|
99
100
|
id: z.uuid(),
|
|
@@ -103,13 +104,13 @@ export const flagResponseSchema = z.object({
|
|
|
103
104
|
environment: z.enum(APP_ENVIRONMENTS),
|
|
104
105
|
enabled: z.boolean(),
|
|
105
106
|
rolloutPercentage: z.number().int(),
|
|
106
|
-
activationAt:
|
|
107
|
-
expiresAt:
|
|
107
|
+
activationAt: utcTimestampSchema.nullable(),
|
|
108
|
+
expiresAt: utcTimestampSchema.nullable(),
|
|
108
109
|
version: z.number().int(),
|
|
109
110
|
createdBy: z.uuid(),
|
|
110
111
|
updatedBy: z.uuid(),
|
|
111
|
-
createdAt:
|
|
112
|
-
updatedAt:
|
|
112
|
+
createdAt: utcTimestampSchema,
|
|
113
|
+
updatedAt: utcTimestampSchema,
|
|
113
114
|
rules: z.array(ruleResponseSchema),
|
|
114
115
|
});
|
|
115
116
|
export const auditLogResponseSchema = z.object({
|
|
@@ -121,12 +122,12 @@ export const auditLogResponseSchema = z.object({
|
|
|
121
122
|
action: z.string(),
|
|
122
123
|
previousValue: z.record(z.string(), z.unknown()).nullable(),
|
|
123
124
|
newValue: z.record(z.string(), z.unknown()).nullable(),
|
|
124
|
-
createdAt:
|
|
125
|
+
createdAt: utcTimestampSchema,
|
|
125
126
|
});
|
|
126
127
|
export const killSwitchResponseSchema = z.object({
|
|
127
128
|
environment: z.enum(APP_ENVIRONMENTS),
|
|
128
129
|
engaged: z.boolean(),
|
|
129
130
|
reason: z.string().nullable(),
|
|
130
131
|
updatedBy: z.uuid().nullable(),
|
|
131
|
-
updatedAt:
|
|
132
|
+
updatedAt: utcTimestampSchema.nullable(),
|
|
132
133
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tbs-fitness/contract",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "TBS API contract: Zod schemas, DTO types and enums shared by the backend, web and mobile apps",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -13,6 +13,16 @@
|
|
|
13
13
|
"dist"
|
|
14
14
|
],
|
|
15
15
|
"exports": {
|
|
16
|
+
"./app-settings": {
|
|
17
|
+
"import": {
|
|
18
|
+
"types": "./dist/esm/app-settings/index.d.ts",
|
|
19
|
+
"default": "./dist/esm/app-settings/index.js"
|
|
20
|
+
},
|
|
21
|
+
"require": {
|
|
22
|
+
"types": "./dist/cjs/app-settings/index.d.ts",
|
|
23
|
+
"default": "./dist/cjs/app-settings/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
16
26
|
"./audit": {
|
|
17
27
|
"import": {
|
|
18
28
|
"types": "./dist/esm/audit/index.d.ts",
|
|
@@ -53,6 +63,16 @@
|
|
|
53
63
|
"default": "./dist/cjs/common/index.js"
|
|
54
64
|
}
|
|
55
65
|
},
|
|
66
|
+
"./communication": {
|
|
67
|
+
"import": {
|
|
68
|
+
"types": "./dist/esm/communication/index.d.ts",
|
|
69
|
+
"default": "./dist/esm/communication/index.js"
|
|
70
|
+
},
|
|
71
|
+
"require": {
|
|
72
|
+
"types": "./dist/cjs/communication/index.d.ts",
|
|
73
|
+
"default": "./dist/cjs/communication/index.js"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
56
76
|
"./enums": {
|
|
57
77
|
"import": {
|
|
58
78
|
"types": "./dist/esm/enums/index.d.ts",
|