@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 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(),
@@ -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 === undefined)
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 = yupString().meta({ openapiField: { description: _profileImageUrlDescription('user'), exampleValue: 'https://example.com/image.jpg' } });
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 = yupString().meta({ openapiField: { description: _profileImageUrlDescription('team'), exampleValue: 'https://example.com/image.jpg' } });
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 = yupString().meta({ openapiField: { description: _profileImageUrlDescription('team member'), exampleValue: 'https://example.com/image.jpg' } });
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,2 @@
1
+ export declare function fileToBase64(file: File): Promise<string>;
2
+ export declare function validateBase64Image(base64: string): boolean;
@@ -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.25",
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.25"
39
+ "@stackframe/stack-sc": "2.5.27"
40
40
  },
41
41
  "devDependencies": {
42
42
  "rimraf": "^5.0.5",