@stackframe/stack-shared 2.5.25 → 2.5.27
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/CHANGELOG.md +16 -0
- package/dist/interface/crud/current-user.d.ts +2 -1
- package/dist/interface/crud/current-user.js +1 -0
- package/dist/interface/crud/users.d.ts +4 -4
- package/dist/interface/crud/users.js +1 -1
- package/dist/schema-fields.js +5 -5
- package/dist/utils/base64.d.ts +2 -0
- package/dist/utils/base64.js +12 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @stackframe/stack-shared
|
|
2
2
|
|
|
3
|
+
## 2.5.27
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Bugfixes
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @stackframe/stack-sc@2.5.27
|
|
10
|
+
|
|
11
|
+
## 2.5.26
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Bugfixes
|
|
16
|
+
- Updated dependencies
|
|
17
|
+
- @stackframe/stack-sc@2.5.26
|
|
18
|
+
|
|
3
19
|
## 2.5.25
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -154,6 +154,7 @@ export declare const currentUserCrud: import("../../crud").CrudSchemaFromOptions
|
|
|
154
154
|
}, "">;
|
|
155
155
|
clientUpdateSchema: import("yup").ObjectSchema<{
|
|
156
156
|
display_name: string | null | undefined;
|
|
157
|
+
profile_image_url: string | null | undefined;
|
|
157
158
|
client_metadata: {} | null | undefined;
|
|
158
159
|
totp_secret_base64: string | null | undefined;
|
|
159
160
|
selected_team_id: string | null | undefined;
|
|
@@ -172,7 +173,7 @@ export declare const currentUserCrud: import("../../crud").CrudSchemaFromOptions
|
|
|
172
173
|
}, "">;
|
|
173
174
|
serverUpdateSchema: import("yup").ObjectSchema<{
|
|
174
175
|
display_name: string | null | undefined;
|
|
175
|
-
profile_image_url: string | undefined;
|
|
176
|
+
profile_image_url: string | null | undefined;
|
|
176
177
|
client_metadata: {} | null | undefined;
|
|
177
178
|
client_read_only_metadata: {} | null | undefined;
|
|
178
179
|
server_metadata: {} | null | undefined;
|
|
@@ -4,6 +4,7 @@ import { teamsCrudClientReadSchema } from "./teams";
|
|
|
4
4
|
import { usersCrudServerDeleteSchema, usersCrudServerReadSchema, usersCrudServerUpdateSchema } from "./users";
|
|
5
5
|
const clientUpdateSchema = usersCrudServerUpdateSchema.pick([
|
|
6
6
|
"display_name",
|
|
7
|
+
"profile_image_url",
|
|
7
8
|
"client_metadata",
|
|
8
9
|
"selected_team_id",
|
|
9
10
|
"totp_secret_base64",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CrudTypeOf } from "../../crud";
|
|
2
2
|
export declare const usersCrudServerUpdateSchema: import("yup").ObjectSchema<{
|
|
3
3
|
display_name: string | null | undefined;
|
|
4
|
-
profile_image_url: string | undefined;
|
|
4
|
+
profile_image_url: string | null | undefined;
|
|
5
5
|
client_metadata: {} | null | undefined;
|
|
6
6
|
client_read_only_metadata: {} | null | undefined;
|
|
7
7
|
server_metadata: {} | null | undefined;
|
|
@@ -104,7 +104,7 @@ export declare const usersCrudServerReadSchema: import("yup").ObjectSchema<{
|
|
|
104
104
|
}, "">;
|
|
105
105
|
export declare const usersCrudServerCreateSchema: import("yup").ObjectSchema<{
|
|
106
106
|
display_name: string | null | undefined;
|
|
107
|
-
profile_image_url: string | undefined;
|
|
107
|
+
profile_image_url: string | null | undefined;
|
|
108
108
|
client_metadata: {} | null | undefined;
|
|
109
109
|
client_read_only_metadata: {} | null | undefined;
|
|
110
110
|
server_metadata: {} | null | undefined;
|
|
@@ -216,7 +216,7 @@ export declare const usersCrud: import("../../crud").CrudSchemaFromOptions<{
|
|
|
216
216
|
}, "">;
|
|
217
217
|
serverUpdateSchema: import("yup").ObjectSchema<{
|
|
218
218
|
display_name: string | null | undefined;
|
|
219
|
-
profile_image_url: string | undefined;
|
|
219
|
+
profile_image_url: string | null | undefined;
|
|
220
220
|
client_metadata: {} | null | undefined;
|
|
221
221
|
client_read_only_metadata: {} | null | undefined;
|
|
222
222
|
server_metadata: {} | null | undefined;
|
|
@@ -241,7 +241,7 @@ export declare const usersCrud: import("../../crud").CrudSchemaFromOptions<{
|
|
|
241
241
|
}, "">;
|
|
242
242
|
serverCreateSchema: import("yup").ObjectSchema<{
|
|
243
243
|
display_name: string | null | undefined;
|
|
244
|
-
profile_image_url: string | undefined;
|
|
244
|
+
profile_image_url: string | null | undefined;
|
|
245
245
|
client_metadata: {} | null | undefined;
|
|
246
246
|
client_read_only_metadata: {} | null | undefined;
|
|
247
247
|
server_metadata: {} | null | undefined;
|
|
@@ -3,7 +3,7 @@ import * as fieldSchema from "../../schema-fields";
|
|
|
3
3
|
import { teamsCrudServerReadSchema } from "./teams";
|
|
4
4
|
export const usersCrudServerUpdateSchema = fieldSchema.yupObject({
|
|
5
5
|
display_name: fieldSchema.userDisplayNameSchema.optional(),
|
|
6
|
-
profile_image_url: fieldSchema.profileImageUrlSchema.optional(),
|
|
6
|
+
profile_image_url: fieldSchema.profileImageUrlSchema.nullable().optional(),
|
|
7
7
|
client_metadata: fieldSchema.userClientMetadataSchema.optional(),
|
|
8
8
|
client_read_only_metadata: fieldSchema.userClientReadOnlyMetadataSchema.optional(),
|
|
9
9
|
server_metadata: fieldSchema.userServerMetadataSchema.optional(),
|
package/dist/schema-fields.js
CHANGED
|
@@ -7,7 +7,7 @@ const _idDescription = (identify) => `The unique identifier of this ${identify}`
|
|
|
7
7
|
const _displayNameDescription = (identify) => `Human-readable ${identify} display name. This is not a unique identifier.`;
|
|
8
8
|
const _clientMetaDataDescription = (identify) => `Client metadata. Used as a data store, accessible from the client side. Do not store information that should not be exposed to the client.`;
|
|
9
9
|
const _clientReadOnlyMetaDataDescription = (identify) => `Client read-only, server-writable metadata. Used as a data store, accessible from the client side. Do not store information that should not be exposed to the client. The client can read this data, but cannot modify it. This is useful for things like subscription status.`;
|
|
10
|
-
const _profileImageUrlDescription = (identify) => `URL of the profile image for ${identify}. Can be a Base64 encoded image. Please compress and crop to a square before passing in.`;
|
|
10
|
+
const _profileImageUrlDescription = (identify) => `URL of the profile image for ${identify}. Can be a Base64 encoded image. Must be smaller than 100KB. Please compress and crop to a square before passing in.`;
|
|
11
11
|
const _serverMetaDataDescription = (identify) => `Server metadata. Used as a data store, only accessible from the server side. You can store secret information related to the ${identify} here.`;
|
|
12
12
|
const _atMillisDescription = (identify) => `(the number of milliseconds since epoch, January 1, 1970, UTC)`;
|
|
13
13
|
const _createdAtMillisDescription = (identify) => `The time the ${identify} was created ${_atMillisDescription(identify)}`;
|
|
@@ -93,7 +93,7 @@ export const urlSchema = yupString().test({
|
|
|
93
93
|
name: 'url',
|
|
94
94
|
message: 'Invalid URL',
|
|
95
95
|
test: (value) => {
|
|
96
|
-
if (value
|
|
96
|
+
if (!value)
|
|
97
97
|
return true;
|
|
98
98
|
try {
|
|
99
99
|
new URL(value);
|
|
@@ -192,7 +192,7 @@ export const primaryEmailSchema = emailSchema.meta({ openapiField: { description
|
|
|
192
192
|
export const primaryEmailVerifiedSchema = yupBoolean().meta({ openapiField: { description: 'Whether the primary email has been verified to belong to this user', exampleValue: true } });
|
|
193
193
|
export const userDisplayNameSchema = yupString().nullable().meta({ openapiField: { description: _displayNameDescription('user'), exampleValue: 'John Doe' } });
|
|
194
194
|
export const selectedTeamIdSchema = yupString().uuid().meta({ openapiField: { description: 'ID of the team currently selected by the user', exampleValue: 'team-id' } });
|
|
195
|
-
export const profileImageUrlSchema =
|
|
195
|
+
export const profileImageUrlSchema = urlSchema.max(1000000).meta({ openapiField: { description: _profileImageUrlDescription('user'), exampleValue: 'https://example.com/image.jpg' } });
|
|
196
196
|
export const signedUpAtMillisSchema = yupNumber().meta({ openapiField: { description: _signedUpAtMillisDescription, exampleValue: 1630000000000 } });
|
|
197
197
|
export const userClientMetadataSchema = jsonSchema.meta({ openapiField: { description: _clientMetaDataDescription('user'), exampleValue: { key: 'value' } } });
|
|
198
198
|
export const userClientReadOnlyMetadataSchema = jsonSchema.meta({ openapiField: { description: _clientReadOnlyMetaDataDescription('user'), exampleValue: { key: 'value' } } });
|
|
@@ -240,7 +240,7 @@ export const containedPermissionIdsSchema = yupArray(teamPermissionDefinitionIdS
|
|
|
240
240
|
// Teams
|
|
241
241
|
export const teamIdSchema = yupString().uuid().meta({ openapiField: { description: _idDescription('team'), exampleValue: 'ad962777-8244-496a-b6a2-e0c6a449c79e' } });
|
|
242
242
|
export const teamDisplayNameSchema = yupString().meta({ openapiField: { description: _displayNameDescription('team'), exampleValue: 'My Team' } });
|
|
243
|
-
export const teamProfileImageUrlSchema =
|
|
243
|
+
export const teamProfileImageUrlSchema = urlSchema.max(1000000).meta({ openapiField: { description: _profileImageUrlDescription('team'), exampleValue: 'https://example.com/image.jpg' } });
|
|
244
244
|
export const teamClientMetadataSchema = jsonSchema.meta({ openapiField: { description: _clientMetaDataDescription('team'), exampleValue: { key: 'value' } } });
|
|
245
245
|
export const teamClientReadOnlyMetadataSchema = jsonSchema.meta({ openapiField: { description: _clientReadOnlyMetaDataDescription('team'), exampleValue: { key: 'value' } } });
|
|
246
246
|
export const teamServerMetadataSchema = jsonSchema.meta({ openapiField: { description: _serverMetaDataDescription('team'), exampleValue: { key: 'value' } } });
|
|
@@ -249,7 +249,7 @@ export const teamInvitationEmailSchema = emailSchema.meta({ openapiField: { desc
|
|
|
249
249
|
export const teamInvitationCallbackUrlSchema = urlSchema.meta({ openapiField: { description: 'The base callback URL to construct a verification link for the verification e-mail. A query argument `code` with the verification code will be appended to it. The page should then make a request to the `/contact-channels/verify` endpoint.', exampleValue: 'https://example.com/handler/email-verification' } });
|
|
250
250
|
// Team member profiles
|
|
251
251
|
export const teamMemberDisplayNameSchema = yupString().meta({ openapiField: { description: _displayNameDescription('team member') + ' Note that this is separate from the display_name of the user.', exampleValue: 'John Doe' } });
|
|
252
|
-
export const teamMemberProfileImageUrlSchema =
|
|
252
|
+
export const teamMemberProfileImageUrlSchema = urlSchema.max(1000000).meta({ openapiField: { description: _profileImageUrlDescription('team member'), exampleValue: 'https://example.com/image.jpg' } });
|
|
253
253
|
// Utils
|
|
254
254
|
export function yupRequiredWhen(schema, triggerName, isValue) {
|
|
255
255
|
return schema.when(triggerName, {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function fileToBase64(file) {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
const reader = new FileReader();
|
|
4
|
+
reader.readAsDataURL(file);
|
|
5
|
+
reader.onload = () => resolve(reader.result);
|
|
6
|
+
reader.onerror = error => reject(error);
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
export function validateBase64Image(base64) {
|
|
10
|
+
const base64ImageRegex = /^data:image\/(png|jpg|jpeg|gif|bmp|webp);base64,[A-Za-z0-9+/]+={0,2}$|^[A-Za-z0-9+/]+={0,2}$/;
|
|
11
|
+
return base64ImageRegex.test(base64);
|
|
12
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackframe/stack-shared",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.27",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"jose": "^5.2.2",
|
|
37
37
|
"oauth4webapi": "^2.10.3",
|
|
38
38
|
"uuid": "^9.0.1",
|
|
39
|
-
"@stackframe/stack-sc": "2.5.
|
|
39
|
+
"@stackframe/stack-sc": "2.5.27"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"rimraf": "^5.0.5",
|