@happyvertical/smrt-users 0.37.2 → 0.37.4
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/chunks/TerminalAuthService-BXAAuaXf.js +4531 -0
- package/dist/chunks/TerminalAuthService-BXAAuaXf.js.map +1 -0
- package/dist/index.js +1564 -2024
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +2 -2
- package/dist/playground.js +114 -136
- package/dist/playground.js.map +1 -1
- package/dist/smrt-knowledge.json +12 -12
- package/dist/sveltekit.js +685 -881
- package/dist/sveltekit.js.map +1 -1
- package/dist/ui.js +79 -73
- package/dist/ui.js.map +1 -1
- package/package.json +19 -19
- package/dist/chunks/TerminalAuthService-DcgimQYo.js +0 -5261
- package/dist/chunks/TerminalAuthService-DcgimQYo.js.map +0 -1
- package/dist/chunks/index-C3E55ikp.js +0 -169
- package/dist/chunks/index-C3E55ikp.js.map +0 -1
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
import { _ as getSigKey, $ as checkKeyLength, a0 as subtleAlgorithm, a1 as JWSInvalid, a2 as isDisjoint, a3 as validateCrit, a4 as checkKeyType, a5 as encode, a6 as encode$1, a7 as concat, a8 as normalizeKey, a9 as JWTClaimsBuilder, aa as JWTInvalid, ab as errors, ac as jwtVerify } from "./TerminalAuthService-DcgimQYo.js";
|
|
2
|
-
import { ad, ae, af, ag, ah, ai, aj } from "./TerminalAuthService-DcgimQYo.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
|
-
ad as compactVerify,
|
|
160
|
-
ae as createLocalJWKSet,
|
|
161
|
-
af as createRemoteJWKSet,
|
|
162
|
-
ag as customFetch,
|
|
163
|
-
errors,
|
|
164
|
-
ah as flattenedVerify,
|
|
165
|
-
ai as importJWK,
|
|
166
|
-
aj as jwksCache,
|
|
167
|
-
jwtVerify
|
|
168
|
-
};
|
|
169
|
-
//# sourceMappingURL=index-C3E55ikp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-C3E55ikp.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]}
|