@intelligo-dev/auth 1.0.0-beta.13 → 1.0.0-beta.15
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/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/profile/schemas.js +8 -0
- package/dist/profile/schemas.js.map +1 -1
- package/dist/profile/service.js +22 -1
- package/dist/profile/service.js.map +1 -1
- package/dist/team/schemas.js +3 -2
- package/dist/team/schemas.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +1 -0
- package/src/profile/schemas.ts +9 -0
- package/src/profile/service.ts +31 -1
- package/src/team/schemas.ts +3 -2
package/dist/index.js
CHANGED
|
@@ -17,7 +17,7 @@ export { WorkspaceServiceError, isWorkspaceServiceError, } from "./workspace/err
|
|
|
17
17
|
export { createWorkspaceSchema, updateWorkspaceSchema, } from "./workspace/schemas.js";
|
|
18
18
|
export { createProfileService, } from "./profile/service.js";
|
|
19
19
|
export { ProfileServiceError, isProfileServiceError, } from "./profile/errors.js";
|
|
20
|
-
export { updateProfileSchema, } from "./profile/schemas.js";
|
|
20
|
+
export { updateProfileSchema, preferredLanguageSchema, } from "./profile/schemas.js";
|
|
21
21
|
export { createOnboardingService, } from "./onboarding/service.js";
|
|
22
22
|
export { OnboardingServiceError, isOnboardingServiceError, } from "./onboarding/errors.js";
|
|
23
23
|
export { setStepSchema } from "./onboarding/schemas.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,gBAAgB,GAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,MAAM,GAOP,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,GAGlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAGjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,GAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GAGxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,oBAAoB,GAIrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EACL,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,gBAAgB,GAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,iBAAiB,GAElB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,MAAM,GAOP,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,GAGlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAGnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAGjB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,GAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GAGxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,oBAAoB,GAIrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,uBAAuB,GAGxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC"}
|
package/dist/profile/schemas.js
CHANGED
|
@@ -8,4 +8,12 @@ export const updateProfileSchema = z.object({
|
|
|
8
8
|
.optional(),
|
|
9
9
|
image: z.string().url("Image must be a valid URL").optional().nullable(),
|
|
10
10
|
});
|
|
11
|
+
/**
|
|
12
|
+
* A BCP 47 language tag as next-intl routes it ("en", "mn", "pt-BR").
|
|
13
|
+
* Which tags an app actually ships is the app's `routing.locales`; the
|
|
14
|
+
* transport checks against that before calling the service.
|
|
15
|
+
*/
|
|
16
|
+
export const preferredLanguageSchema = z
|
|
17
|
+
.string()
|
|
18
|
+
.regex(/^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/, "Not a language tag");
|
|
11
19
|
//# sourceMappingURL=schemas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/profile/schemas.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;SAC5C,GAAG,CAAC,GAAG,EAAE,qCAAqC,CAAC;SAC/C,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACzE,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/profile/schemas.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAE9E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;SAC5C,GAAG,CAAC,GAAG,EAAE,qCAAqC,CAAC;SAC/C,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACzE,CAAC,CAAC;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,MAAM,EAAE;KACR,KAAK,CAAC,kCAAkC,EAAE,oBAAoB,CAAC,CAAC"}
|
package/dist/profile/service.js
CHANGED
|
@@ -11,7 +11,7 @@ import { db } from "@intelligo-dev/core/db";
|
|
|
11
11
|
import { users, sessions } from "@intelligo-dev/core/db/schema";
|
|
12
12
|
import { auth } from "../server.js";
|
|
13
13
|
import { requireAuth } from "../helpers.js";
|
|
14
|
-
import { updateProfileSchema } from "./schemas.js";
|
|
14
|
+
import { preferredLanguageSchema, updateProfileSchema, } from "./schemas.js";
|
|
15
15
|
import { ProfileServiceError, isProfileServiceError } from "./errors.js";
|
|
16
16
|
const log = createLogger("ProfileService");
|
|
17
17
|
function errorMessage(error) {
|
|
@@ -77,6 +77,26 @@ export function createProfileService(ports = {}) {
|
|
|
77
77
|
throw new ProfileServiceError("provider_error", "Failed to update profile", { cause: error });
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Record the caller's preferred language (`users.preferred_language`),
|
|
82
|
+
* which emails and a returning session's default locale read. A column
|
|
83
|
+
* Intelligo owns rather than a Better-Auth user field, so it is written
|
|
84
|
+
* directly.
|
|
85
|
+
*/
|
|
86
|
+
async function setPreferredLanguage(locale) {
|
|
87
|
+
const { user } = await callRequireAuth();
|
|
88
|
+
const validated = parseInput(preferredLanguageSchema, locale);
|
|
89
|
+
try {
|
|
90
|
+
await db
|
|
91
|
+
.update(users)
|
|
92
|
+
.set({ preferredLanguage: validated, updatedAt: new Date() })
|
|
93
|
+
.where(eq(users.id, user.id));
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
log.error("setPreferredLanguage failed", { error: errorMessage(error) });
|
|
97
|
+
throw new ProfileServiceError("provider_error", "Failed to update the preferred language", { cause: error });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
80
100
|
/**
|
|
81
101
|
* Delete the caller's own account: soft delete (`users.deletedAt`),
|
|
82
102
|
* invalidate every session (force logout), then fire the
|
|
@@ -110,6 +130,7 @@ export function createProfileService(ports = {}) {
|
|
|
110
130
|
return {
|
|
111
131
|
getProfile,
|
|
112
132
|
updateProfile,
|
|
133
|
+
setPreferredLanguage,
|
|
113
134
|
deleteAccount,
|
|
114
135
|
};
|
|
115
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/profile/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/profile/service.ts"],"names":[],"mappings":"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"}
|
package/dist/team/schemas.js
CHANGED
|
@@ -4,8 +4,9 @@ export const inviteMemberSchema = z.object({
|
|
|
4
4
|
email: z.string().email("Please enter a valid email address"),
|
|
5
5
|
role: z.enum(["admin", "member"], {
|
|
6
6
|
// One message for a missing role and an unknown one: to the person
|
|
7
|
-
// filling in the form they are the same mistake.
|
|
8
|
-
error
|
|
7
|
+
// filling in the form they are the same mistake. `message`, not
|
|
8
|
+
// `error`: the peer range admits zod 3, which reads only `message`.
|
|
9
|
+
message: "Please select a role",
|
|
9
10
|
}),
|
|
10
11
|
});
|
|
11
12
|
export const updateRoleSchema = z.object({
|
package/dist/team/schemas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/team/schemas.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;QAChC,mEAAmE;QACnE,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/team/schemas.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oCAAoC,CAAC;IAC7D,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;QAChC,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,OAAO,EAAE,sBAAsB;KAChC,CAAC;CACH,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;CAClC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intelligo-dev/auth",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.15",
|
|
4
4
|
"description": "Multi-tenant authentication on Better-Auth: sign-up, workspaces, invitations and role-based access control.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"intelligo",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"server-only": "^0.0.1",
|
|
44
|
-
"@intelligo-dev/core": "1.0.0-beta.
|
|
44
|
+
"@intelligo-dev/core": "1.0.0-beta.15"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"better-auth": "~1.6.30",
|
package/src/index.ts
CHANGED
package/src/profile/schemas.ts
CHANGED
|
@@ -12,3 +12,12 @@ export const updateProfileSchema = z.object({
|
|
|
12
12
|
});
|
|
13
13
|
|
|
14
14
|
export type UpdateProfileInput = z.infer<typeof updateProfileSchema>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A BCP 47 language tag as next-intl routes it ("en", "mn", "pt-BR").
|
|
18
|
+
* Which tags an app actually ships is the app's `routing.locales`; the
|
|
19
|
+
* transport checks against that before calling the service.
|
|
20
|
+
*/
|
|
21
|
+
export const preferredLanguageSchema = z
|
|
22
|
+
.string()
|
|
23
|
+
.regex(/^[a-z]{2,3}(-[A-Za-z0-9]{2,8})*$/, "Not a language tag");
|
package/src/profile/service.ts
CHANGED
|
@@ -14,7 +14,11 @@ import { users, sessions } from "@intelligo-dev/core/db/schema";
|
|
|
14
14
|
|
|
15
15
|
import { auth } from "../server";
|
|
16
16
|
import { requireAuth } from "../helpers";
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
preferredLanguageSchema,
|
|
19
|
+
updateProfileSchema,
|
|
20
|
+
type UpdateProfileInput,
|
|
21
|
+
} from "./schemas";
|
|
18
22
|
import { ProfileServiceError, isProfileServiceError } from "./errors";
|
|
19
23
|
|
|
20
24
|
const log = createLogger("ProfileService");
|
|
@@ -118,6 +122,31 @@ export function createProfileService(ports: ProfileServicePorts = {}) {
|
|
|
118
122
|
}
|
|
119
123
|
}
|
|
120
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Record the caller's preferred language (`users.preferred_language`),
|
|
127
|
+
* which emails and a returning session's default locale read. A column
|
|
128
|
+
* Intelligo owns rather than a Better-Auth user field, so it is written
|
|
129
|
+
* directly.
|
|
130
|
+
*/
|
|
131
|
+
async function setPreferredLanguage(locale: string): Promise<void> {
|
|
132
|
+
const { user } = await callRequireAuth();
|
|
133
|
+
const validated = parseInput(preferredLanguageSchema, locale);
|
|
134
|
+
|
|
135
|
+
try {
|
|
136
|
+
await db
|
|
137
|
+
.update(users)
|
|
138
|
+
.set({ preferredLanguage: validated, updatedAt: new Date() })
|
|
139
|
+
.where(eq(users.id, user.id));
|
|
140
|
+
} catch (error) {
|
|
141
|
+
log.error("setPreferredLanguage failed", { error: errorMessage(error) });
|
|
142
|
+
throw new ProfileServiceError(
|
|
143
|
+
"provider_error",
|
|
144
|
+
"Failed to update the preferred language",
|
|
145
|
+
{ cause: error }
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
121
150
|
/**
|
|
122
151
|
* Delete the caller's own account: soft delete (`users.deletedAt`),
|
|
123
152
|
* invalidate every session (force logout), then fire the
|
|
@@ -160,6 +189,7 @@ export function createProfileService(ports: ProfileServicePorts = {}) {
|
|
|
160
189
|
return {
|
|
161
190
|
getProfile,
|
|
162
191
|
updateProfile,
|
|
192
|
+
setPreferredLanguage,
|
|
163
193
|
deleteAccount,
|
|
164
194
|
};
|
|
165
195
|
}
|
package/src/team/schemas.ts
CHANGED
|
@@ -6,8 +6,9 @@ export const inviteMemberSchema = z.object({
|
|
|
6
6
|
email: z.string().email("Please enter a valid email address"),
|
|
7
7
|
role: z.enum(["admin", "member"], {
|
|
8
8
|
// One message for a missing role and an unknown one: to the person
|
|
9
|
-
// filling in the form they are the same mistake.
|
|
10
|
-
error
|
|
9
|
+
// filling in the form they are the same mistake. `message`, not
|
|
10
|
+
// `error`: the peer range admits zod 3, which reads only `message`.
|
|
11
|
+
message: "Please select a role",
|
|
11
12
|
}),
|
|
12
13
|
});
|
|
13
14
|
|