@happyvertical/smrt-users 0.30.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/AGENTS.md +85 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +459 -0
- package/dist/__smrt-register__.d.ts +2 -0
- package/dist/__smrt-register__.d.ts.map +1 -0
- package/dist/chunks/TerminalAuthService-DoAMQ_yn.js +5118 -0
- package/dist/chunks/TerminalAuthService-DoAMQ_yn.js.map +1 -0
- package/dist/chunks/index-DkoYIvIu.js +169 -0
- package/dist/chunks/index-DkoYIvIu.js.map +1 -0
- package/dist/collections/CliAuthRequestCollection.d.ts +19 -0
- package/dist/collections/CliAuthRequestCollection.d.ts.map +1 -0
- package/dist/collections/GroupCollection.d.ts +17 -0
- package/dist/collections/GroupCollection.d.ts.map +1 -0
- package/dist/collections/GroupMemberCollection.d.ts +43 -0
- package/dist/collections/GroupMemberCollection.d.ts.map +1 -0
- package/dist/collections/GroupRoleCollection.d.ts +33 -0
- package/dist/collections/GroupRoleCollection.d.ts.map +1 -0
- package/dist/collections/MagicLinkTokenCollection.d.ts +26 -0
- package/dist/collections/MagicLinkTokenCollection.d.ts.map +1 -0
- package/dist/collections/MembershipCollection.d.ts +38 -0
- package/dist/collections/MembershipCollection.d.ts.map +1 -0
- package/dist/collections/MembershipOverrideCollection.d.ts +55 -0
- package/dist/collections/MembershipOverrideCollection.d.ts.map +1 -0
- package/dist/collections/PermissionCollection.d.ts +34 -0
- package/dist/collections/PermissionCollection.d.ts.map +1 -0
- package/dist/collections/RoleCollection.d.ts +29 -0
- package/dist/collections/RoleCollection.d.ts.map +1 -0
- package/dist/collections/RolePermissionCollection.d.ts +33 -0
- package/dist/collections/RolePermissionCollection.d.ts.map +1 -0
- package/dist/collections/SessionCollection.d.ts +82 -0
- package/dist/collections/SessionCollection.d.ts.map +1 -0
- package/dist/collections/TenantCollection.d.ts +119 -0
- package/dist/collections/TenantCollection.d.ts.map +1 -0
- package/dist/collections/TenantPermissionOverrideCollection.d.ts +111 -0
- package/dist/collections/TenantPermissionOverrideCollection.d.ts.map +1 -0
- package/dist/collections/UserCollection.d.ts +116 -0
- package/dist/collections/UserCollection.d.ts.map +1 -0
- package/dist/collections/index.d.ts +19 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1482 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.json +5216 -0
- package/dist/models/CliAuthRequest.d.ts +25 -0
- package/dist/models/CliAuthRequest.d.ts.map +1 -0
- package/dist/models/Group.d.ts +34 -0
- package/dist/models/Group.d.ts.map +1 -0
- package/dist/models/GroupMember.d.ts +29 -0
- package/dist/models/GroupMember.d.ts.map +1 -0
- package/dist/models/GroupRole.d.ts +29 -0
- package/dist/models/GroupRole.d.ts.map +1 -0
- package/dist/models/MagicLinkToken.d.ts +22 -0
- package/dist/models/MagicLinkToken.d.ts.map +1 -0
- package/dist/models/Membership.d.ts +48 -0
- package/dist/models/Membership.d.ts.map +1 -0
- package/dist/models/MembershipOverride.d.ts +50 -0
- package/dist/models/MembershipOverride.d.ts.map +1 -0
- package/dist/models/Permission.d.ts +79 -0
- package/dist/models/Permission.d.ts.map +1 -0
- package/dist/models/Role.d.ts +67 -0
- package/dist/models/Role.d.ts.map +1 -0
- package/dist/models/RolePermission.d.ts +29 -0
- package/dist/models/RolePermission.d.ts.map +1 -0
- package/dist/models/Session.d.ts +105 -0
- package/dist/models/Session.d.ts.map +1 -0
- package/dist/models/Tenant.d.ts +138 -0
- package/dist/models/Tenant.d.ts.map +1 -0
- package/dist/models/TenantPermissionOverride.d.ts +74 -0
- package/dist/models/TenantPermissionOverride.d.ts.map +1 -0
- package/dist/models/User.d.ts +72 -0
- package/dist/models/User.d.ts.map +1 -0
- package/dist/models/index.d.ts +19 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/playground.d.ts +2 -0
- package/dist/playground.d.ts.map +1 -0
- package/dist/playground.js +139 -0
- package/dist/playground.js.map +1 -0
- package/dist/services/MagicLinkService.d.ts +84 -0
- package/dist/services/MagicLinkService.d.ts.map +1 -0
- package/dist/services/OidcLoginService.d.ts +134 -0
- package/dist/services/OidcLoginService.d.ts.map +1 -0
- package/dist/services/PermissionCatalogService.d.ts +62 -0
- package/dist/services/PermissionCatalogService.d.ts.map +1 -0
- package/dist/services/PermissionResolver.d.ts +150 -0
- package/dist/services/PermissionResolver.d.ts.map +1 -0
- package/dist/services/PostgresPermissionPolicies.d.ts +29 -0
- package/dist/services/PostgresPermissionPolicies.d.ts.map +1 -0
- package/dist/services/SessionPermissionContext.d.ts +43 -0
- package/dist/services/SessionPermissionContext.d.ts.map +1 -0
- package/dist/services/SessionService.d.ts +139 -0
- package/dist/services/SessionService.d.ts.map +1 -0
- package/dist/services/TenantService.d.ts +135 -0
- package/dist/services/TenantService.d.ts.map +1 -0
- package/dist/services/TerminalAuthService.d.ts +189 -0
- package/dist/services/TerminalAuthService.d.ts.map +1 -0
- package/dist/services/index.d.ts +14 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +2744 -0
- package/dist/svelte/components/InviteUserModal.svelte +351 -0
- package/dist/svelte/components/InviteUserModal.svelte.d.ts +17 -0
- package/dist/svelte/components/InviteUserModal.svelte.d.ts.map +1 -0
- package/dist/svelte/components/UserAvatar.svelte +105 -0
- package/dist/svelte/components/UserAvatar.svelte.d.ts +10 -0
- package/dist/svelte/components/UserAvatar.svelte.d.ts.map +1 -0
- package/dist/svelte/components/UserCard.svelte +179 -0
- package/dist/svelte/components/UserCard.svelte.d.ts +18 -0
- package/dist/svelte/components/UserCard.svelte.d.ts.map +1 -0
- package/dist/svelte/components/UserForm.svelte +194 -0
- package/dist/svelte/components/UserForm.svelte.d.ts +18 -0
- package/dist/svelte/components/UserForm.svelte.d.ts.map +1 -0
- package/dist/svelte/components/UserList.svelte +107 -0
- package/dist/svelte/components/UserList.svelte.d.ts +20 -0
- package/dist/svelte/components/UserList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/UserMenu.svelte +326 -0
- package/dist/svelte/components/UserMenu.svelte.d.ts +33 -0
- package/dist/svelte/components/UserMenu.svelte.d.ts.map +1 -0
- package/dist/svelte/components/__tests__/InviteUserModal.test.js +54 -0
- package/dist/svelte/components/__tests__/UserAvatar.test.js +31 -0
- package/dist/svelte/components/__tests__/UserCard.test.js +39 -0
- package/dist/svelte/components/__tests__/UserForm.test.js +50 -0
- package/dist/svelte/components/__tests__/UserList.test.js +48 -0
- package/dist/svelte/components/__tests__/UserMenu.test.js +38 -0
- package/dist/svelte/i18n.d.ts +15 -0
- package/dist/svelte/i18n.d.ts.map +1 -0
- package/dist/svelte/i18n.js +15 -0
- package/dist/svelte/index.d.ts +23 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +27 -0
- package/dist/svelte/playground.d.ts +151 -0
- package/dist/svelte/playground.d.ts.map +1 -0
- package/dist/svelte/playground.js +134 -0
- package/dist/sveltekit/index.d.ts +379 -0
- package/dist/sveltekit/index.d.ts.map +1 -0
- package/dist/sveltekit/resource-list-handler.d.ts +127 -0
- package/dist/sveltekit/resource-list-handler.d.ts.map +1 -0
- package/dist/sveltekit/types.d.ts +31 -0
- package/dist/sveltekit/types.d.ts.map +1 -0
- package/dist/sveltekit.d.ts +2 -0
- package/dist/sveltekit.d.ts.map +1 -0
- package/dist/sveltekit.js +978 -0
- package/dist/sveltekit.js.map +1 -0
- package/dist/types/index.d.ts +61 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/ui.d.ts +10 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +75 -0
- package/dist/ui.js.map +1 -0
- package/package.json +97 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { Y as getSigKey, Z as checkKeyLength, _ as subtleAlgorithm, $ as JWSInvalid, a0 as isDisjoint, a1 as validateCrit, a2 as checkKeyType, a3 as encode, a4 as encode$1, a5 as concat, a6 as normalizeKey, a7 as JWTClaimsBuilder, a8 as JWTInvalid, a9 as errors, aa as jwtVerify } from "./TerminalAuthService-DoAMQ_yn.js";
|
|
2
|
+
import { ab, ac, ad, ae, af, ag, ah } from "./TerminalAuthService-DoAMQ_yn.js";
|
|
3
|
+
async function sign(alg, key, data) {
|
|
4
|
+
const cryptoKey = await getSigKey(alg, key, "sign");
|
|
5
|
+
checkKeyLength(alg, cryptoKey);
|
|
6
|
+
const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);
|
|
7
|
+
return new Uint8Array(signature);
|
|
8
|
+
}
|
|
9
|
+
class FlattenedSign {
|
|
10
|
+
#payload;
|
|
11
|
+
#protectedHeader;
|
|
12
|
+
#unprotectedHeader;
|
|
13
|
+
constructor(payload) {
|
|
14
|
+
if (!(payload instanceof Uint8Array)) {
|
|
15
|
+
throw new TypeError("payload must be an instance of Uint8Array");
|
|
16
|
+
}
|
|
17
|
+
this.#payload = payload;
|
|
18
|
+
}
|
|
19
|
+
setProtectedHeader(protectedHeader) {
|
|
20
|
+
if (this.#protectedHeader) {
|
|
21
|
+
throw new TypeError("setProtectedHeader can only be called once");
|
|
22
|
+
}
|
|
23
|
+
this.#protectedHeader = protectedHeader;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
setUnprotectedHeader(unprotectedHeader) {
|
|
27
|
+
if (this.#unprotectedHeader) {
|
|
28
|
+
throw new TypeError("setUnprotectedHeader can only be called once");
|
|
29
|
+
}
|
|
30
|
+
this.#unprotectedHeader = unprotectedHeader;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
async sign(key, options) {
|
|
34
|
+
if (!this.#protectedHeader && !this.#unprotectedHeader) {
|
|
35
|
+
throw new JWSInvalid("either setProtectedHeader or setUnprotectedHeader must be called before #sign()");
|
|
36
|
+
}
|
|
37
|
+
if (!isDisjoint(this.#protectedHeader, this.#unprotectedHeader)) {
|
|
38
|
+
throw new JWSInvalid("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");
|
|
39
|
+
}
|
|
40
|
+
const joseHeader = {
|
|
41
|
+
...this.#protectedHeader,
|
|
42
|
+
...this.#unprotectedHeader
|
|
43
|
+
};
|
|
44
|
+
const extensions = validateCrit(JWSInvalid, /* @__PURE__ */ new Map([["b64", true]]), options?.crit, this.#protectedHeader, joseHeader);
|
|
45
|
+
let b64 = true;
|
|
46
|
+
if (extensions.has("b64")) {
|
|
47
|
+
b64 = this.#protectedHeader.b64;
|
|
48
|
+
if (typeof b64 !== "boolean") {
|
|
49
|
+
throw new JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const { alg } = joseHeader;
|
|
53
|
+
if (typeof alg !== "string" || !alg) {
|
|
54
|
+
throw new JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid');
|
|
55
|
+
}
|
|
56
|
+
checkKeyType(alg, key, "sign");
|
|
57
|
+
let payloadS;
|
|
58
|
+
let payloadB;
|
|
59
|
+
if (b64) {
|
|
60
|
+
payloadS = encode(this.#payload);
|
|
61
|
+
payloadB = encode$1(payloadS);
|
|
62
|
+
} else {
|
|
63
|
+
payloadB = this.#payload;
|
|
64
|
+
payloadS = "";
|
|
65
|
+
}
|
|
66
|
+
let protectedHeaderString;
|
|
67
|
+
let protectedHeaderBytes;
|
|
68
|
+
if (this.#protectedHeader) {
|
|
69
|
+
protectedHeaderString = encode(JSON.stringify(this.#protectedHeader));
|
|
70
|
+
protectedHeaderBytes = encode$1(protectedHeaderString);
|
|
71
|
+
} else {
|
|
72
|
+
protectedHeaderString = "";
|
|
73
|
+
protectedHeaderBytes = new Uint8Array();
|
|
74
|
+
}
|
|
75
|
+
const data = concat(protectedHeaderBytes, encode$1("."), payloadB);
|
|
76
|
+
const k = await normalizeKey(key, alg);
|
|
77
|
+
const signature = await sign(alg, k, data);
|
|
78
|
+
const jws = {
|
|
79
|
+
signature: encode(signature),
|
|
80
|
+
payload: payloadS
|
|
81
|
+
};
|
|
82
|
+
if (this.#unprotectedHeader) {
|
|
83
|
+
jws.header = this.#unprotectedHeader;
|
|
84
|
+
}
|
|
85
|
+
if (this.#protectedHeader) {
|
|
86
|
+
jws.protected = protectedHeaderString;
|
|
87
|
+
}
|
|
88
|
+
return jws;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
class CompactSign {
|
|
92
|
+
#flattened;
|
|
93
|
+
constructor(payload) {
|
|
94
|
+
this.#flattened = new FlattenedSign(payload);
|
|
95
|
+
}
|
|
96
|
+
setProtectedHeader(protectedHeader) {
|
|
97
|
+
this.#flattened.setProtectedHeader(protectedHeader);
|
|
98
|
+
return this;
|
|
99
|
+
}
|
|
100
|
+
async sign(key, options) {
|
|
101
|
+
const jws = await this.#flattened.sign(key, options);
|
|
102
|
+
if (jws.payload === void 0) {
|
|
103
|
+
throw new TypeError("use the flattened module for creating JWS with b64: false");
|
|
104
|
+
}
|
|
105
|
+
return `${jws.protected}.${jws.payload}.${jws.signature}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
class SignJWT {
|
|
109
|
+
#protectedHeader;
|
|
110
|
+
#jwt;
|
|
111
|
+
constructor(payload = {}) {
|
|
112
|
+
this.#jwt = new JWTClaimsBuilder(payload);
|
|
113
|
+
}
|
|
114
|
+
setIssuer(issuer) {
|
|
115
|
+
this.#jwt.iss = issuer;
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
setSubject(subject) {
|
|
119
|
+
this.#jwt.sub = subject;
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
122
|
+
setAudience(audience) {
|
|
123
|
+
this.#jwt.aud = audience;
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
setJti(jwtId) {
|
|
127
|
+
this.#jwt.jti = jwtId;
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
setNotBefore(input) {
|
|
131
|
+
this.#jwt.nbf = input;
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
setExpirationTime(input) {
|
|
135
|
+
this.#jwt.exp = input;
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
setIssuedAt(input) {
|
|
139
|
+
this.#jwt.iat = input;
|
|
140
|
+
return this;
|
|
141
|
+
}
|
|
142
|
+
setProtectedHeader(protectedHeader) {
|
|
143
|
+
this.#protectedHeader = protectedHeader;
|
|
144
|
+
return this;
|
|
145
|
+
}
|
|
146
|
+
async sign(key, options) {
|
|
147
|
+
const sig = new CompactSign(this.#jwt.data());
|
|
148
|
+
sig.setProtectedHeader(this.#protectedHeader);
|
|
149
|
+
if (Array.isArray(this.#protectedHeader?.crit) && this.#protectedHeader.crit.includes("b64") && this.#protectedHeader.b64 === false) {
|
|
150
|
+
throw new JWTInvalid("JWTs MUST NOT use unencoded payload");
|
|
151
|
+
}
|
|
152
|
+
return sig.sign(key, options);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export {
|
|
156
|
+
CompactSign,
|
|
157
|
+
FlattenedSign,
|
|
158
|
+
SignJWT,
|
|
159
|
+
ab as compactVerify,
|
|
160
|
+
ac as createLocalJWKSet,
|
|
161
|
+
ad as createRemoteJWKSet,
|
|
162
|
+
ae as customFetch,
|
|
163
|
+
errors,
|
|
164
|
+
af as flattenedVerify,
|
|
165
|
+
ag as importJWK,
|
|
166
|
+
ah as jwksCache,
|
|
167
|
+
jwtVerify
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=index-DkoYIvIu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-DkoYIvIu.js","sources":["../../../../node_modules/.pnpm/jose@6.1.3/node_modules/jose/dist/webapi/lib/sign.js","../../../../node_modules/.pnpm/jose@6.1.3/node_modules/jose/dist/webapi/jws/flattened/sign.js","../../../../node_modules/.pnpm/jose@6.1.3/node_modules/jose/dist/webapi/jws/compact/sign.js","../../../../node_modules/.pnpm/jose@6.1.3/node_modules/jose/dist/webapi/jwt/sign.js"],"sourcesContent":["import { subtleAlgorithm } from './subtle_dsa.js';\nimport { checkKeyLength } from './check_key_length.js';\nimport { getSigKey } from './get_sign_verify_key.js';\nexport async function sign(alg, key, data) {\n const cryptoKey = await getSigKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n}\n","import { encode as b64u } from '../../util/base64url.js';\nimport { sign } from '../../lib/sign.js';\nimport { isDisjoint } from '../../lib/is_disjoint.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { concat, encode } from '../../lib/buffer_utils.js';\nimport { checkKeyType } from '../../lib/check_key_type.js';\nimport { validateCrit } from '../../lib/validate_crit.js';\nimport { normalizeKey } from '../../lib/normalize_key.js';\nexport class FlattenedSign {\n #payload;\n #protectedHeader;\n #unprotectedHeader;\n constructor(payload) {\n if (!(payload instanceof Uint8Array)) {\n throw new TypeError('payload must be an instance of Uint8Array');\n }\n this.#payload = payload;\n }\n setProtectedHeader(protectedHeader) {\n if (this.#protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this.#protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this.#unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this.#unprotectedHeader = unprotectedHeader;\n return this;\n }\n async sign(key, options) {\n if (!this.#protectedHeader && !this.#unprotectedHeader) {\n throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n }\n if (!isDisjoint(this.#protectedHeader, this.#unprotectedHeader)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this.#protectedHeader,\n ...this.#unprotectedHeader,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this.#protectedHeader, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = this.#protectedHeader.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n checkKeyType(alg, key, 'sign');\n let payloadS;\n let payloadB;\n if (b64) {\n payloadS = b64u(this.#payload);\n payloadB = encode(payloadS);\n }\n else {\n payloadB = this.#payload;\n payloadS = '';\n }\n let protectedHeaderString;\n let protectedHeaderBytes;\n if (this.#protectedHeader) {\n protectedHeaderString = b64u(JSON.stringify(this.#protectedHeader));\n protectedHeaderBytes = encode(protectedHeaderString);\n }\n else {\n protectedHeaderString = '';\n protectedHeaderBytes = new Uint8Array();\n }\n const data = concat(protectedHeaderBytes, encode('.'), payloadB);\n const k = await normalizeKey(key, alg);\n const signature = await sign(alg, k, data);\n const jws = {\n signature: b64u(signature),\n payload: payloadS,\n };\n if (this.#unprotectedHeader) {\n jws.header = this.#unprotectedHeader;\n }\n if (this.#protectedHeader) {\n jws.protected = protectedHeaderString;\n }\n return jws;\n }\n}\n","import { FlattenedSign } from '../flattened/sign.js';\nexport class CompactSign {\n #flattened;\n constructor(payload) {\n this.#flattened = new FlattenedSign(payload);\n }\n setProtectedHeader(protectedHeader) {\n this.#flattened.setProtectedHeader(protectedHeader);\n return this;\n }\n async sign(key, options) {\n const jws = await this.#flattened.sign(key, options);\n if (jws.payload === undefined) {\n throw new TypeError('use the flattened module for creating JWS with b64: false');\n }\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n }\n}\n","import { CompactSign } from '../jws/compact/sign.js';\nimport { JWTInvalid } from '../util/errors.js';\nimport { JWTClaimsBuilder } from '../lib/jwt_claims_set.js';\nexport class SignJWT {\n #protectedHeader;\n #jwt;\n constructor(payload = {}) {\n this.#jwt = new JWTClaimsBuilder(payload);\n }\n setIssuer(issuer) {\n this.#jwt.iss = issuer;\n return this;\n }\n setSubject(subject) {\n this.#jwt.sub = subject;\n return this;\n }\n setAudience(audience) {\n this.#jwt.aud = audience;\n return this;\n }\n setJti(jwtId) {\n this.#jwt.jti = jwtId;\n return this;\n }\n setNotBefore(input) {\n this.#jwt.nbf = input;\n return this;\n }\n setExpirationTime(input) {\n this.#jwt.exp = input;\n return this;\n }\n setIssuedAt(input) {\n this.#jwt.iat = input;\n return this;\n }\n setProtectedHeader(protectedHeader) {\n this.#protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n const sig = new CompactSign(this.#jwt.data());\n sig.setProtectedHeader(this.#protectedHeader);\n if (Array.isArray(this.#protectedHeader?.crit) &&\n this.#protectedHeader.crit.includes('b64') &&\n this.#protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n return sig.sign(key, options);\n }\n}\n"],"names":["b64u","encode"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { UsersCliAuthRequest } from '../models/CliAuthRequest.js';
|
|
3
|
+
export declare class UsersCliAuthRequestCollection extends SmrtCollection<UsersCliAuthRequest> {
|
|
4
|
+
static readonly _itemClass: typeof UsersCliAuthRequest;
|
|
5
|
+
/**
|
|
6
|
+
* Look up a pending or completed request by the short user code shown in the CLI.
|
|
7
|
+
*/
|
|
8
|
+
findByUserCode(userCode: string): Promise<UsersCliAuthRequest | null>;
|
|
9
|
+
/**
|
|
10
|
+
* Look up a request by the hash of its device code (the CLI's polling key).
|
|
11
|
+
*/
|
|
12
|
+
findByDeviceCodeHash(deviceCodeHash: string): Promise<UsersCliAuthRequest | null>;
|
|
13
|
+
/**
|
|
14
|
+
* Delete expired pending requests (cleanup job).
|
|
15
|
+
*/
|
|
16
|
+
deleteExpired(): Promise<number>;
|
|
17
|
+
}
|
|
18
|
+
export { UsersCliAuthRequestCollection as CliAuthRequestCollection };
|
|
19
|
+
//# sourceMappingURL=CliAuthRequestCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CliAuthRequestCollection.d.ts","sourceRoot":"","sources":["../../src/collections/CliAuthRequestCollection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,qBAAa,6BAA8B,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IACpF,MAAM,CAAC,QAAQ,CAAC,UAAU,6BAAuB;IAEjD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAQ3E;;OAEG;IACG,oBAAoB,CACxB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAQtC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAevC;AAED,OAAO,EAAE,6BAA6B,IAAI,wBAAwB,EAAE,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { Group } from '../models/Group.js';
|
|
3
|
+
/**
|
|
4
|
+
* Collection for managing Group objects
|
|
5
|
+
*/
|
|
6
|
+
export declare class GroupCollection extends SmrtCollection<Group> {
|
|
7
|
+
static readonly _itemClass: typeof Group;
|
|
8
|
+
/**
|
|
9
|
+
* Find all groups in a tenant
|
|
10
|
+
*/
|
|
11
|
+
findByTenant(tenantId: string): Promise<Group[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Find group by slug within a tenant
|
|
14
|
+
*/
|
|
15
|
+
findBySlug(slug: string, tenantId: string): Promise<Group | null>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=GroupCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupCollection.d.ts","sourceRoot":"","sources":["../../src/collections/GroupCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C;;GAEG;AACH,qBAAa,eAAgB,SAAQ,cAAc,CAAC,KAAK,CAAC;IACxD,MAAM,CAAC,QAAQ,CAAC,UAAU,eAAS;IAEnC;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAOtD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;CAOxE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { GroupMember } from '../models/GroupMember.js';
|
|
3
|
+
/**
|
|
4
|
+
* Collection for managing GroupMember objects
|
|
5
|
+
*/
|
|
6
|
+
export declare class GroupMemberCollection extends SmrtCollection<GroupMember> {
|
|
7
|
+
static readonly _itemClass: typeof GroupMember;
|
|
8
|
+
/**
|
|
9
|
+
* Find all members of a group
|
|
10
|
+
*/
|
|
11
|
+
findByGroup(groupId: string): Promise<GroupMember[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Find all groups a user belongs to
|
|
14
|
+
*/
|
|
15
|
+
findByUser(userId: string): Promise<GroupMember[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if a user is in a group
|
|
18
|
+
*/
|
|
19
|
+
isMember(groupId: string, userId: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Add user to a group
|
|
22
|
+
*/
|
|
23
|
+
addMember(groupId: string, userId: string): Promise<GroupMember>;
|
|
24
|
+
/**
|
|
25
|
+
* Remove user from a group
|
|
26
|
+
*/
|
|
27
|
+
removeMember(groupId: string, userId: string): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Get group IDs for a user
|
|
30
|
+
* @deprecated Use getGroupIdsForTenant to prevent cross-tenant leakage
|
|
31
|
+
*/
|
|
32
|
+
getGroupIds(userId: string): Promise<string[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Get group IDs for a user within a specific tenant
|
|
35
|
+
* This prevents cross-tenant permission leakage by filtering groups by tenant
|
|
36
|
+
*/
|
|
37
|
+
getGroupIdsForTenant(userId: string, tenantId: string): Promise<string[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Get user IDs in a group
|
|
40
|
+
*/
|
|
41
|
+
getUserIds(groupId: string): Promise<string[]>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=GroupMemberCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupMemberCollection.d.ts","sourceRoot":"","sources":["../../src/collections/GroupMemberCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACpE,MAAM,CAAC,QAAQ,CAAC,UAAU,qBAAe;IAEzC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAM1D;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAMxD;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQjE;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAetE;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAarE;;;OAGG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKpD;;;OAGG;IACG,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,EAAE,CAAC;IAapB;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAIrD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { GroupRole } from '../models/GroupRole.js';
|
|
3
|
+
/**
|
|
4
|
+
* Collection for managing GroupRole objects
|
|
5
|
+
*/
|
|
6
|
+
export declare class GroupRoleCollection extends SmrtCollection<GroupRole> {
|
|
7
|
+
static readonly _itemClass: typeof GroupRole;
|
|
8
|
+
/**
|
|
9
|
+
* Find all roles for a group
|
|
10
|
+
*/
|
|
11
|
+
findByGroup(groupId: string): Promise<GroupRole[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Find all groups that have a role
|
|
14
|
+
*/
|
|
15
|
+
findByRole(roleId: string): Promise<GroupRole[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if a group has a role
|
|
18
|
+
*/
|
|
19
|
+
hasRole(groupId: string, roleId: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Add role to a group
|
|
22
|
+
*/
|
|
23
|
+
addRole(groupId: string, roleId: string): Promise<GroupRole>;
|
|
24
|
+
/**
|
|
25
|
+
* Remove role from a group
|
|
26
|
+
*/
|
|
27
|
+
removeRole(groupId: string, roleId: string): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Get role IDs for a group
|
|
30
|
+
*/
|
|
31
|
+
getRoleIds(groupId: string): Promise<string[]>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=GroupRoleCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupRoleCollection.d.ts","sourceRoot":"","sources":["../../src/collections/GroupRoleCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,cAAc,CAAC,SAAS,CAAC;IAChE,MAAM,CAAC,QAAQ,CAAC,UAAU,mBAAa;IAEvC;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMxD;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAMtD;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQhE;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAelE;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAanE;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAIrD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { UsersMagicLinkToken } from '../models/MagicLinkToken.js';
|
|
3
|
+
/**
|
|
4
|
+
* Collection for managing smrt-users magic link token records
|
|
5
|
+
*/
|
|
6
|
+
export declare class UsersMagicLinkTokenCollection extends SmrtCollection<UsersMagicLinkToken> {
|
|
7
|
+
static readonly _itemClass: typeof UsersMagicLinkToken;
|
|
8
|
+
/**
|
|
9
|
+
* Find a token by its nonce
|
|
10
|
+
*/
|
|
11
|
+
findByNonce(nonce: string): Promise<UsersMagicLinkToken | null>;
|
|
12
|
+
/**
|
|
13
|
+
* Atomically mark a token as used (single-use enforcement).
|
|
14
|
+
*
|
|
15
|
+
* Returns true if the nonce was successfully claimed (transitioned from
|
|
16
|
+
* unused to used). Returns false if the nonce was already used, expired,
|
|
17
|
+
* or doesn't exist — preventing race conditions in concurrent verify() calls.
|
|
18
|
+
*/
|
|
19
|
+
markUsed(nonce: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Delete expired tokens (cleanup job)
|
|
22
|
+
*/
|
|
23
|
+
deleteExpired(): Promise<number>;
|
|
24
|
+
}
|
|
25
|
+
export { UsersMagicLinkTokenCollection as MagicLinkTokenCollection };
|
|
26
|
+
//# sourceMappingURL=MagicLinkTokenCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MagicLinkTokenCollection.d.ts","sourceRoot":"","sources":["../../src/collections/MagicLinkTokenCollection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IACpF,MAAM,CAAC,QAAQ,CAAC,UAAU,6BAAuB;IAEjD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAMrE;;;;;;OAMG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB/C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;CAgBvC;AAED,OAAO,EAAE,6BAA6B,IAAI,wBAAwB,EAAE,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { Membership } from '../models/Membership.js';
|
|
3
|
+
import { MembershipStatus } from '../types/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Collection for managing Membership objects
|
|
6
|
+
*/
|
|
7
|
+
export declare class MembershipCollection extends SmrtCollection<Membership> {
|
|
8
|
+
static readonly _itemClass: typeof Membership;
|
|
9
|
+
/**
|
|
10
|
+
* Find all memberships for a user
|
|
11
|
+
*/
|
|
12
|
+
findByUser(userId: string): Promise<Membership[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Find all active memberships for a user
|
|
15
|
+
*/
|
|
16
|
+
findActiveByUser(userId: string): Promise<Membership[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Find all memberships in a tenant
|
|
19
|
+
*/
|
|
20
|
+
findByTenant(tenantId: string): Promise<Membership[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Find active memberships in a tenant
|
|
23
|
+
*/
|
|
24
|
+
findActiveByTenant(tenantId: string): Promise<Membership[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Find a specific user's membership in a tenant
|
|
27
|
+
*/
|
|
28
|
+
findByUserAndTenant(userId: string, tenantId: string): Promise<Membership | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Find memberships by role
|
|
31
|
+
*/
|
|
32
|
+
findByRole(roleId: string): Promise<Membership[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Find memberships by status
|
|
35
|
+
*/
|
|
36
|
+
findByStatus(status: MembershipStatus): Promise<Membership[]>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=MembershipCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembershipCollection.d.ts","sourceRoot":"","sources":["../../src/collections/MembershipCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,cAAc,CAAC,UAAU,CAAC;IAClE,MAAM,CAAC,QAAQ,CAAC,UAAU,oBAAc;IAExC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOvD;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO7D;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO3D;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOjE;;OAEG;IACG,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQ7B;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOvD;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAMpE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { MembershipOverride } from '../models/MembershipOverride.js';
|
|
3
|
+
import { OverrideEffect } from '../types/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Collection for managing MembershipOverride objects
|
|
6
|
+
*/
|
|
7
|
+
export declare class MembershipOverrideCollection extends SmrtCollection<MembershipOverride> {
|
|
8
|
+
static readonly _itemClass: typeof MembershipOverride;
|
|
9
|
+
/**
|
|
10
|
+
* Find all overrides for a membership
|
|
11
|
+
*/
|
|
12
|
+
findByMembership(membershipId: string): Promise<MembershipOverride[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Find grant overrides for a membership.
|
|
15
|
+
*
|
|
16
|
+
* Filters in memory because the `effect` column is JSON-typed and
|
|
17
|
+
* Postgres rejects bare `json = text` comparisons. A single
|
|
18
|
+
* `findByMembership` call is reused for both grant and deny lookups
|
|
19
|
+
* within the same request (see `_overridesByMembership` cache).
|
|
20
|
+
*/
|
|
21
|
+
findGrants(membershipId: string): Promise<MembershipOverride[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Find deny overrides for a membership.
|
|
24
|
+
*
|
|
25
|
+
* See `findGrants` for rationale on in-memory filtering.
|
|
26
|
+
*/
|
|
27
|
+
findDenies(membershipId: string): Promise<MembershipOverride[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Get grant permission IDs for a membership
|
|
30
|
+
*/
|
|
31
|
+
getGrantedPermissionIds(membershipId: string): Promise<string[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Get denied permission IDs for a membership
|
|
34
|
+
*/
|
|
35
|
+
getDeniedPermissionIds(membershipId: string): Promise<string[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Set an override for a membership
|
|
38
|
+
*/
|
|
39
|
+
setOverride(membershipId: string, permissionId: string, effect: OverrideEffect): Promise<MembershipOverride>;
|
|
40
|
+
/**
|
|
41
|
+
* Remove an override
|
|
42
|
+
*/
|
|
43
|
+
removeOverride(membershipId: string, permissionId: string): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Grant a permission to a membership
|
|
46
|
+
* Convenience method for setOverride with GRANT effect
|
|
47
|
+
*/
|
|
48
|
+
grantPermission(membershipId: string, permissionId: string): Promise<MembershipOverride>;
|
|
49
|
+
/**
|
|
50
|
+
* Deny a permission for a membership
|
|
51
|
+
* Convenience method for setOverride with DENY effect
|
|
52
|
+
*/
|
|
53
|
+
denyPermission(membershipId: string, permissionId: string): Promise<MembershipOverride>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=MembershipOverrideCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MembershipOverrideCollection.d.ts","sourceRoot":"","sources":["../../src/collections/MembershipOverrideCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;GAEG;AACH,qBAAa,4BAA6B,SAAQ,cAAc,CAAC,kBAAkB,CAAC;IAClF,MAAM,CAAC,QAAQ,CAAC,UAAU,4BAAsB;IAEhD;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAM3E;;;;;;;OAOG;IACG,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKrE;;;;OAIG;IACG,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAKrE;;OAEG;IACG,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtE;;OAEG;IACG,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKrE;;OAEG;IACG,WAAW,CACf,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAoB9B;;OAEG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAcnB;;;OAGG;IACG,eAAe,CACnB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC;IAQ9B;;;OAGG;IACG,cAAc,CAClB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC;CAO/B"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { Permission } from '../models/Permission.js';
|
|
3
|
+
/**
|
|
4
|
+
* Collection for managing Permission objects
|
|
5
|
+
*/
|
|
6
|
+
export declare class PermissionCollection extends SmrtCollection<Permission> {
|
|
7
|
+
static readonly _itemClass: typeof Permission;
|
|
8
|
+
/**
|
|
9
|
+
* Find permissions by category
|
|
10
|
+
*/
|
|
11
|
+
findByCategory(category: string): Promise<Permission[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Find permission by slug
|
|
14
|
+
*/
|
|
15
|
+
findBySlug(slug: string): Promise<Permission | null>;
|
|
16
|
+
/**
|
|
17
|
+
* Batch fetch permissions by IDs
|
|
18
|
+
* Returns a Map of id -> Permission for efficient lookup
|
|
19
|
+
*/
|
|
20
|
+
findByIds(ids: string[]): Promise<Map<string, Permission>>;
|
|
21
|
+
/**
|
|
22
|
+
* Get all unique categories
|
|
23
|
+
*/
|
|
24
|
+
getCategories(): Promise<string[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Find or create a permission by slug
|
|
27
|
+
*/
|
|
28
|
+
findOrCreate(slug: string, defaults?: Partial<{
|
|
29
|
+
name: string;
|
|
30
|
+
description: string;
|
|
31
|
+
category: string;
|
|
32
|
+
}>): Promise<Permission>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=PermissionCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionCollection.d.ts","sourceRoot":"","sources":["../../src/collections/PermissionCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,cAAc,CAAC,UAAU,CAAC;IAClE,MAAM,CAAC,QAAQ,CAAC,UAAU,oBAAc;IAExC;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAO7D;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQ1D;;;OAGG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAwBhE;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOxC;;OAEG;IACG,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,OAAO,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAM,GACN,OAAO,CAAC,UAAU,CAAC;CAevB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { Role } from '../models/Role.js';
|
|
3
|
+
/**
|
|
4
|
+
* Collection for managing Role objects
|
|
5
|
+
*/
|
|
6
|
+
export declare class RoleCollection extends SmrtCollection<Role> {
|
|
7
|
+
static readonly _itemClass: typeof Role;
|
|
8
|
+
/**
|
|
9
|
+
* Find all system roles (tenantId is null)
|
|
10
|
+
*/
|
|
11
|
+
findSystemRoles(): Promise<Role[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Find roles available for a tenant (system + tenant-specific)
|
|
14
|
+
*/
|
|
15
|
+
findByTenant(tenantId: string): Promise<Role[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Find tenant-specific roles only
|
|
18
|
+
*/
|
|
19
|
+
findTenantRoles(tenantId: string): Promise<Role[]>;
|
|
20
|
+
/**
|
|
21
|
+
* Find role by slug within a tenant context
|
|
22
|
+
*/
|
|
23
|
+
findBySlug(slug: string, tenantId?: string): Promise<Role | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Seed default system roles
|
|
26
|
+
*/
|
|
27
|
+
seedSystemRoles(): Promise<Role[]>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=RoleCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleCollection.d.ts","sourceRoot":"","sources":["../../src/collections/RoleCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAc,CAAC,IAAI,CAAC;IACtD,MAAM,CAAC,QAAQ,CAAC,UAAU,cAAQ;IAElC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAOxC;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IASrD;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAOxD;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAoBvE;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;CAyBzC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { RolePermission } from '../models/RolePermission.js';
|
|
3
|
+
/**
|
|
4
|
+
* Collection for managing RolePermission objects
|
|
5
|
+
*/
|
|
6
|
+
export declare class RolePermissionCollection extends SmrtCollection<RolePermission> {
|
|
7
|
+
static readonly _itemClass: typeof RolePermission;
|
|
8
|
+
/**
|
|
9
|
+
* Find all permissions for a role
|
|
10
|
+
*/
|
|
11
|
+
findByRole(roleId: string): Promise<RolePermission[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Find all roles that have a permission
|
|
14
|
+
*/
|
|
15
|
+
findByPermission(permissionId: string): Promise<RolePermission[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if a role has a specific permission
|
|
18
|
+
*/
|
|
19
|
+
hasPermission(roleId: string, permissionId: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Add a permission to a role
|
|
22
|
+
*/
|
|
23
|
+
addPermission(roleId: string, permissionId: string): Promise<RolePermission>;
|
|
24
|
+
/**
|
|
25
|
+
* Remove a permission from a role
|
|
26
|
+
*/
|
|
27
|
+
removePermission(roleId: string, permissionId: string): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Get permission IDs for a role
|
|
30
|
+
*/
|
|
31
|
+
getPermissionIds(roleId: string): Promise<string[]>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=RolePermissionCollection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RolePermissionCollection.d.ts","sourceRoot":"","sources":["../../src/collections/RolePermissionCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC1E,MAAM,CAAC,QAAQ,CAAC,UAAU,wBAAkB;IAE5C;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAM3D;;OAEG;IACG,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAMvE;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3E;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC;IAe1B;;OAEG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAanB;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAI1D"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { SmrtCollection } from '@happyvertical/smrt-core';
|
|
2
|
+
import { Session } from '../models/Session.js';
|
|
3
|
+
/**
|
|
4
|
+
* Options for creating a new session
|
|
5
|
+
*/
|
|
6
|
+
export interface CreateSessionOptions {
|
|
7
|
+
/** User ID for the session */
|
|
8
|
+
userId: string;
|
|
9
|
+
/** Optional tenant ID for multi-tenant context */
|
|
10
|
+
tenantId?: string;
|
|
11
|
+
/** Session TTL in seconds (default: 7 days) */
|
|
12
|
+
ttl?: number;
|
|
13
|
+
/** User agent string */
|
|
14
|
+
userAgent?: string;
|
|
15
|
+
/** Client IP address */
|
|
16
|
+
ipAddress?: string;
|
|
17
|
+
/** Custom session data */
|
|
18
|
+
data?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Collection for managing Session objects
|
|
22
|
+
*/
|
|
23
|
+
export declare class SessionCollection extends SmrtCollection<Session> {
|
|
24
|
+
static readonly _itemClass: typeof Session;
|
|
25
|
+
/**
|
|
26
|
+
* Create a new session with a secure ID
|
|
27
|
+
*/
|
|
28
|
+
createSession(options: CreateSessionOptions): Promise<Session>;
|
|
29
|
+
/**
|
|
30
|
+
* Find a valid session by ID
|
|
31
|
+
* Returns null if session doesn't exist, is expired, or is revoked
|
|
32
|
+
*/
|
|
33
|
+
findValidSession(sessionId: string): Promise<Session | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Update last accessed time and optionally extend session
|
|
36
|
+
*/
|
|
37
|
+
touch(sessionId: string, extendTtl?: boolean, ttl?: number): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Find all active sessions for a user
|
|
40
|
+
*/
|
|
41
|
+
findByUser(userId: string): Promise<Session[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Delete all sessions for a user (logout from all devices)
|
|
44
|
+
*/
|
|
45
|
+
deleteUserSessions(userId: string): Promise<number>;
|
|
46
|
+
/**
|
|
47
|
+
* Revoke all sessions for a user (soft delete)
|
|
48
|
+
*/
|
|
49
|
+
revokeUserSessions(userId: string): Promise<number>;
|
|
50
|
+
/**
|
|
51
|
+
* Revoke a specific session
|
|
52
|
+
*/
|
|
53
|
+
revokeSession(sessionId: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Delete expired sessions (cleanup job)
|
|
56
|
+
* Returns the number of deleted sessions
|
|
57
|
+
*/
|
|
58
|
+
deleteExpired(): Promise<number>;
|
|
59
|
+
/**
|
|
60
|
+
* Count active sessions for a user
|
|
61
|
+
*/
|
|
62
|
+
countUserSessions(userId: string): Promise<number>;
|
|
63
|
+
/**
|
|
64
|
+
* Update tenant context for a session (low-level primitive).
|
|
65
|
+
*
|
|
66
|
+
* SECURITY (#1400): this does NOT verify that the session's user is a member
|
|
67
|
+
* of `tenantId` — it is the unguarded storage primitive. Application/route
|
|
68
|
+
* code must go through {@link SessionService.switchTenant}, which fail-closes
|
|
69
|
+
* on a missing/inactive membership before calling this. Calling it directly
|
|
70
|
+
* with an untrusted `tenantId` reintroduces the cross-tenant access bug.
|
|
71
|
+
*/
|
|
72
|
+
setSessionTenant(sessionId: string, tenantId: string | null): Promise<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* Set custom session data
|
|
75
|
+
*/
|
|
76
|
+
setSessionData(sessionId: string, key: string, value: unknown): Promise<boolean>;
|
|
77
|
+
/**
|
|
78
|
+
* Get custom session data
|
|
79
|
+
*/
|
|
80
|
+
getSessionData<T>(sessionId: string, key: string): Promise<T | undefined>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=SessionCollection.d.ts.map
|