@vibes.diy/identity 3.0.3 → 4.0.2

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.
Files changed (129) hide show
  1. package/README.md +5 -5
  2. package/clerk-claim.d.ts +1 -0
  3. package/clerk-claim.js.map +1 -1
  4. package/dash-api/clerk-token.d.ts +1 -1
  5. package/dash-api/clerk-token.js +1 -1
  6. package/dash-api/clerk-token.js.map +1 -1
  7. package/dash-api/dash-client.d.ts +1 -1
  8. package/dash-api/dash-client.js.map +1 -1
  9. package/dash-api/protocols-base-jwt.d.ts +23 -0
  10. package/dash-api/protocols-base-jwt.js +13 -0
  11. package/dash-api/protocols-base-jwt.js.map +1 -0
  12. package/dash-api/protocols-cloud-types.d.ts +127 -0
  13. package/dash-api/protocols-cloud-types.js +45 -0
  14. package/dash-api/protocols-cloud-types.js.map +1 -0
  15. package/dash-api/protocols-dashboard/dash-types.d.ts +27 -0
  16. package/dash-api/protocols-dashboard/dash-types.js +2 -0
  17. package/dash-api/protocols-dashboard/dash-types.js.map +1 -0
  18. package/dash-api/protocols-dashboard/fp-api-interface.d.ts +24 -0
  19. package/dash-api/protocols-dashboard/fp-api-interface.js +2 -0
  20. package/dash-api/protocols-dashboard/fp-api-interface.js.map +1 -0
  21. package/dash-api/protocols-dashboard/index.d.ts +13 -0
  22. package/dash-api/protocols-dashboard/index.js +6 -0
  23. package/dash-api/protocols-dashboard/index.js.map +1 -0
  24. package/dash-api/protocols-dashboard/msg-is.d.ts +68 -0
  25. package/dash-api/protocols-dashboard/msg-is.js +184 -0
  26. package/dash-api/protocols-dashboard/msg-is.js.map +1 -0
  27. package/dash-api/protocols-dashboard/msg-types.d.ts +429 -0
  28. package/dash-api/protocols-dashboard/msg-types.js +4 -0
  29. package/dash-api/protocols-dashboard/msg-types.js.map +1 -0
  30. package/dash-api/protocols-dashboard/token.d.ts +37 -0
  31. package/dash-api/protocols-dashboard/token.js +7 -0
  32. package/dash-api/protocols-dashboard/token.js.map +1 -0
  33. package/dash-api/token.d.ts +3 -3
  34. package/dash-api/token.js +8 -1
  35. package/dash-api/token.js.map +1 -1
  36. package/device-id/ca.d.ts +6 -2
  37. package/device-id/ca.js.map +1 -1
  38. package/device-id/certor.d.ts +3 -2
  39. package/device-id/certor.js.map +1 -1
  40. package/device-id/csr.d.ts +2 -1
  41. package/device-id/csr.js.map +1 -1
  42. package/device-id/device-id-wire-golden.fixture.json +23 -0
  43. package/device-id/key.d.ts +2 -2
  44. package/device-id/key.js +1 -1
  45. package/device-id/key.js.map +1 -1
  46. package/device-id/register-golden.test.d.ts +1 -0
  47. package/device-id/register-golden.test.js +98 -0
  48. package/device-id/register-golden.test.js.map +1 -0
  49. package/device-id/register.d.ts +22 -0
  50. package/device-id/register.js +162 -0
  51. package/device-id/register.js.map +1 -0
  52. package/device-id/sign.d.ts +3 -1
  53. package/device-id/sign.js.map +1 -1
  54. package/device-id/test-helpers.d.ts +19 -0
  55. package/device-id/test-helpers.js +72 -0
  56. package/device-id/test-helpers.js.map +1 -0
  57. package/device-id/validator.d.ts +2 -1
  58. package/device-id/validator.js +1 -1
  59. package/device-id/validator.js.map +1 -1
  60. package/device-id/verify.d.ts +3 -2
  61. package/device-id/verify.js +1 -1
  62. package/device-id/verify.js.map +1 -1
  63. package/device-id/wire-golden.test.d.ts +1 -0
  64. package/device-id/wire-golden.test.js +20 -0
  65. package/device-id/wire-golden.test.js.map +1 -0
  66. package/golden-fixtures.d.ts +21 -0
  67. package/golden-fixtures.js +48 -0
  68. package/golden-fixtures.js.map +1 -0
  69. package/index.d.ts +8 -4
  70. package/index.js +2 -1
  71. package/index.js.map +1 -1
  72. package/keybag/key-bag-file.d.ts +1 -1
  73. package/keybag/key-bag-memory.d.ts +1 -1
  74. package/keybag/key-bag.d.ts +3 -1
  75. package/keybag/key-bag.js.map +1 -1
  76. package/keybag/keybag-golden.fixture.json +70 -70
  77. package/keybag/keybag-golden.test.js +9 -9
  78. package/keybag/keybag-golden.test.js.map +1 -1
  79. package/keybag/keybag.d.ts +1 -1
  80. package/keybag/sys-file-system/deno-filesystem.d.ts +1 -1
  81. package/keybag/sys-file-system/factory.d.ts +1 -1
  82. package/keybag/sys-file-system/node-filesystem.d.ts +1 -1
  83. package/node.d.ts +4 -4
  84. package/node.js +1 -1
  85. package/node.js.map +1 -1
  86. package/package.json +9 -8
  87. package/runtime/superthis.d.ts +10 -0
  88. package/runtime/superthis.js +276 -0
  89. package/runtime/superthis.js.map +1 -0
  90. package/runtime/superthis.test.d.ts +1 -0
  91. package/runtime/superthis.test.js +47 -0
  92. package/runtime/superthis.test.js.map +1 -0
  93. package/runtime-context.d.ts +1 -1
  94. package/runtime-context.js +1 -1
  95. package/runtime-context.js.map +1 -1
  96. package/server.d.ts +1 -1
  97. package/server.js +1 -1
  98. package/server.js.map +1 -1
  99. package/sts/index.d.ts +53 -0
  100. package/sts/index.js +312 -0
  101. package/sts/index.js.map +1 -0
  102. package/sts/sts-golden.test.d.ts +1 -0
  103. package/sts/sts-golden.test.js +63 -0
  104. package/sts/sts-golden.test.js.map +1 -0
  105. package/sts/text-blocks.d.ts +10 -0
  106. package/sts/text-blocks.js +90 -0
  107. package/sts/text-blocks.js.map +1 -0
  108. package/testing.d.ts +7 -0
  109. package/testing.js +7 -0
  110. package/testing.js.map +1 -0
  111. package/types/cert-payload.d.ts +45 -1
  112. package/types/cert-payload.js.map +1 -1
  113. package/types/device-id-payload.d.ts +67 -1
  114. package/types/device-id-payload.js.map +1 -1
  115. package/types/device-id-payload.test.js +5 -17
  116. package/types/device-id-payload.test.js.map +1 -1
  117. package/types/device-id-types.d.ts +93 -0
  118. package/types/device-id-types.js +2 -0
  119. package/types/device-id-types.js.map +1 -0
  120. package/types/keybag-item.d.ts +15 -0
  121. package/types/keybag-item.js +2 -0
  122. package/types/keybag-item.js.map +1 -0
  123. package/types/sthis.d.ts +84 -0
  124. package/types/sthis.js +2 -0
  125. package/types/sthis.js.map +1 -0
  126. package/types/wire.d.ts +53 -1
  127. package/types/wire.js.map +1 -1
  128. package/types/wire.test.js +5 -9
  129. package/types/wire.test.js.map +1 -1
package/sts/index.js ADDED
@@ -0,0 +1,312 @@
1
+ import { BuildURI, KeyedResolvOnce, Option, Result, exception2Result, timeouted } from "@adviser/cement";
2
+ import { exportJWK, importJWK as joseImportJWK, jwtVerify, importSPKI } from "jose";
3
+ import { base58btc } from "multiformats/bases/base58";
4
+ import { z } from "zod";
5
+ import { ensureSuperThis } from "../runtime/superthis.js";
6
+ import { JWKPrivateSchema, JWKPublicSchema, toJwksAlg } from "../types/wire.js";
7
+ import { mimeBlockParser, filterOk } from "./text-blocks.js";
8
+ export const envKeyDefaults = {
9
+ SECRET: "CLOUD_SESSION_TOKEN_SECRET",
10
+ PUBLIC: "CLOUD_SESSION_TOKEN_PUBLIC",
11
+ };
12
+ export async function importJWK(jwk, alg, options) {
13
+ let algorithm;
14
+ if (alg) {
15
+ algorithm = alg;
16
+ }
17
+ else {
18
+ const rAlg = toJwksAlg(jwk);
19
+ if (rAlg.isErr()) {
20
+ return Result.Err(rAlg);
21
+ }
22
+ algorithm = rAlg.Ok();
23
+ }
24
+ const rKey = await exception2Result(() => joseImportJWK(jwk, algorithm, options));
25
+ if (rKey.isErr()) {
26
+ return Result.Err(rKey);
27
+ }
28
+ return Result.Ok({ key: rKey.Ok(), alg: algorithm });
29
+ }
30
+ export async function jwk2env(jwk, sthis = ensureSuperThis()) {
31
+ const rJwk = await exception2Result(() => exportJWK(jwk));
32
+ const inPubKey = rJwk.isOk() ? rJwk.Ok() : jwk;
33
+ return base58btc.encode(sthis.txt.encode(JSON.stringify(inPubKey)));
34
+ }
35
+ export async function env2jwk(env, alg, sthis = ensureSuperThis()) {
36
+ const jwks = await coerceJWK(sthis, env);
37
+ if (jwks.length === 0) {
38
+ throw new Error("No valid JWK found in env");
39
+ }
40
+ const keys = [];
41
+ for (const jwk of jwks) {
42
+ const rKey = await importJWK(jwk, alg, { extractable: true });
43
+ if (rKey.isErr()) {
44
+ throw rKey.Err();
45
+ }
46
+ keys.push(rKey.Ok().key);
47
+ }
48
+ return keys;
49
+ }
50
+ function coercesJWKplainOrkeysObject(keyOrkeys, validator) {
51
+ const keys = [];
52
+ const isKeys = z.object({ keys: z.array(z.any()) }).safeParse(keyOrkeys);
53
+ if (isKeys.success) {
54
+ keys.push(...isKeys.data.keys);
55
+ }
56
+ else {
57
+ keys.push(keyOrkeys);
58
+ }
59
+ return keys.map((key) => {
60
+ const parsed = validator.safeParse(key);
61
+ if (parsed.success) {
62
+ return Result.Ok(parsed.data);
63
+ }
64
+ else {
65
+ return Result.Err(parsed.error);
66
+ }
67
+ });
68
+ }
69
+ export async function coerceJWKWithSchema(sthis, validator, ...inputs) {
70
+ return Promise.all(inputs.flat().map(async (keys) => {
71
+ if (typeof keys === "string") {
72
+ const jwkKeys = [];
73
+ for (const { content, begin, end } of mimeBlockParser(keys)) {
74
+ if (begin && end) {
75
+ const pem = `${begin}\n${content}\n${end}\n`;
76
+ const rKey = await exception2Result(() => importSPKI(pem, "RS256"));
77
+ if (rKey.isErr()) {
78
+ jwkKeys.push(Result.Err(rKey.Err()));
79
+ continue;
80
+ }
81
+ const key = rKey.Ok();
82
+ const jwk = await exportJWK(key);
83
+ const parsed = validator.safeParse({ ...jwk, alg: "RS256" });
84
+ if (parsed.success) {
85
+ jwkKeys.push(Result.Ok(parsed.data));
86
+ }
87
+ else {
88
+ jwkKeys.push(Result.Err(parsed.error));
89
+ }
90
+ continue;
91
+ }
92
+ let encodingFailed = Option.Some(Result.Err("Failed to decode JWK string with any known encoding"));
93
+ for (const decodeFn of [
94
+ (a) => a,
95
+ (a) => sthis.txt.base64.decode(a),
96
+ (a) => sthis.txt.base58.decode(a),
97
+ ]) {
98
+ const res = exception2Result(() => decodeFn(content));
99
+ if (res.isErr()) {
100
+ continue;
101
+ }
102
+ const resStr = res.Ok();
103
+ const keyOrkeys = exception2Result(() => JSON.parse(resStr));
104
+ if (keyOrkeys.isErr()) {
105
+ continue;
106
+ }
107
+ encodingFailed = Option.None();
108
+ for (const rKey of coercesJWKplainOrkeysObject(keyOrkeys.Ok(), validator)) {
109
+ jwkKeys.push(rKey);
110
+ }
111
+ }
112
+ if (encodingFailed.IsSome()) {
113
+ jwkKeys.push(encodingFailed.Unwrap());
114
+ }
115
+ }
116
+ return jwkKeys;
117
+ }
118
+ else {
119
+ return coercesJWKplainOrkeysObject(keys, validator);
120
+ }
121
+ })).then((a) => a.flat());
122
+ }
123
+ export async function coerceJWK(sthis, ...i) {
124
+ const priv = await coerceJWKWithSchema(sthis, JWKPrivateSchema, ...i);
125
+ const pub = await coerceJWKWithSchema(sthis, JWKPublicSchema, ...i);
126
+ if (priv.length !== pub.length) {
127
+ throw new Error("Mismatched number of private and public keys");
128
+ }
129
+ const ret = [];
130
+ for (let idx = 0; idx < priv.length; idx++) {
131
+ const rPriv = priv[idx];
132
+ const rPub = pub[idx];
133
+ if (rPriv.isOk()) {
134
+ ret.push(rPriv);
135
+ }
136
+ else if (rPub.isOk()) {
137
+ ret.push(rPub);
138
+ }
139
+ else {
140
+ if (rPriv.Err()) {
141
+ ret.push(Result.Err(rPriv.Err()));
142
+ }
143
+ else {
144
+ ret.push(Result.Err(rPub.Err()));
145
+ }
146
+ }
147
+ }
148
+ return filterOk(ret);
149
+ }
150
+ export async function coerceJWKPublic(sthis, ...i) {
151
+ return filterOk(await coerceJWKWithSchema(sthis, JWKPublicSchema, ...i));
152
+ }
153
+ export async function coerceJWKPrivate(sthis, ...i) {
154
+ return filterOk(await coerceJWKWithSchema(sthis, JWKPrivateSchema, ...i));
155
+ }
156
+ export async function verifyToken(token, presetPubKey, wellKnownUrls, iopts = {}) {
157
+ const opts = {
158
+ fetchTimeoutMs: 1000,
159
+ parseSchema: (payload) => {
160
+ return Result.Ok(payload);
161
+ },
162
+ fetch: (...args) => globalThis.fetch(...args),
163
+ verifyToken: async (token, pubKey) => {
164
+ const rKey = await importJWK(pubKey);
165
+ if (rKey.isErr()) {
166
+ return Result.Err(rKey);
167
+ }
168
+ const rRes = await exception2Result(() => jwtVerify(token, rKey.Ok().key));
169
+ if (rRes.isErr()) {
170
+ return Result.Err(rRes);
171
+ }
172
+ const res = rRes.Ok();
173
+ if (!res) {
174
+ return Result.Err("JWT verification failed");
175
+ }
176
+ return Result.Ok(res);
177
+ },
178
+ ...iopts,
179
+ sthis: iopts.sthis ?? ensureSuperThis(),
180
+ };
181
+ for (const pubKey of presetPubKey) {
182
+ const coercedKeys = await coerceJWKPublic(opts.sthis, pubKey);
183
+ for (const key of coercedKeys) {
184
+ const rVerify = await internVerifyToken(token, key, opts);
185
+ if (rVerify.isOk()) {
186
+ return rVerify;
187
+ }
188
+ }
189
+ }
190
+ const errors = [];
191
+ for (const url of wellKnownUrls) {
192
+ const rPubKeys = await fetchWellKnownJwks([url], opts);
193
+ for (const pubKey of rPubKeys) {
194
+ switch (true) {
195
+ case isFetchWellKnownJwksResultErr(pubKey):
196
+ case isFetchWellKnownJwksResultTimeout(pubKey):
197
+ errors.push(pubKey);
198
+ continue;
199
+ case isFetchWellKnownJwksResultOk(pubKey):
200
+ {
201
+ for (const key of pubKey.keys) {
202
+ const rVerify = await internVerifyToken(token, key, opts);
203
+ if (rVerify.isOk()) {
204
+ return rVerify;
205
+ }
206
+ else {
207
+ errors.push({
208
+ type: "error",
209
+ error: rVerify.Err(),
210
+ url: pubKey.url,
211
+ });
212
+ }
213
+ }
214
+ }
215
+ break;
216
+ default:
217
+ throw new Error("unreachable");
218
+ }
219
+ }
220
+ }
221
+ return Result.Err(`No well-known JWKS URL could verify the token:\n${JSON.stringify(errors, null, 2)}`);
222
+ }
223
+ async function internVerifyToken(token, presetPubKey, opts) {
224
+ const rVerify = await opts.verifyToken(token, presetPubKey);
225
+ if (rVerify.isErr()) {
226
+ return Result.Err(rVerify);
227
+ }
228
+ return opts.parseSchema(rVerify.Ok().payload);
229
+ }
230
+ export function isFetchWellKnownJwksResultOk(r) {
231
+ return r.type === "ok";
232
+ }
233
+ export function isFetchWellKnownJwksResultErr(r) {
234
+ return r.type === "error";
235
+ }
236
+ export function isFetchWellKnownJwksResultTimeout(r) {
237
+ return r.type === "timeout";
238
+ }
239
+ const keysFromWellKnownJwksCache = new KeyedResolvOnce({
240
+ resetAfter: 30 * 60 * 1000,
241
+ });
242
+ export async function fetchWellKnownJwks(urls, iopts = {}) {
243
+ const opts = {
244
+ fetchTimeoutMs: 1000,
245
+ fetch: (...args) => globalThis.fetch(...args),
246
+ ...iopts,
247
+ };
248
+ return Promise.all((Array.isArray(urls) ? urls : [urls])
249
+ .flat()
250
+ .map((u) => {
251
+ if (!u) {
252
+ return undefined;
253
+ }
254
+ const buri = BuildURI.from(u);
255
+ const url = buri.URI();
256
+ if (url.pathname === "" || url.pathname === "/") {
257
+ buri.pathname("/.well-known/jwks.json");
258
+ }
259
+ return buri.toString();
260
+ })
261
+ .filter((u) => !!u)
262
+ .map(async (url) => {
263
+ const onceFn = keysFromWellKnownJwksCache.get(url);
264
+ return onceFn.once(async () => {
265
+ const timeout = await timeouted(opts
266
+ .fetch(url, {
267
+ method: "GET",
268
+ })
269
+ .then((res) => {
270
+ if (!res.ok) {
271
+ throw new Error(`Failed to fetch well-known JWKS from ${url}: ${res.status} ${res.statusText}`);
272
+ }
273
+ return res.json();
274
+ }), {
275
+ timeout: opts.fetchTimeoutMs || 1000,
276
+ });
277
+ switch (timeout.state) {
278
+ case "timeout":
279
+ onceFn.reset();
280
+ return {
281
+ type: "timeout",
282
+ url,
283
+ };
284
+ case "error":
285
+ onceFn.reset();
286
+ return {
287
+ type: "error",
288
+ error: timeout.error,
289
+ url,
290
+ };
291
+ case "success": {
292
+ const parsed = z.object({ keys: JWKPublicSchema.array() }).safeParse(timeout.value);
293
+ if (!parsed.success) {
294
+ return {
295
+ type: "error",
296
+ error: new Error(`Invalid JWKS format from ${url}: ${parsed.error.message}`),
297
+ url,
298
+ };
299
+ }
300
+ return {
301
+ type: "ok",
302
+ keys: parsed.data.keys,
303
+ url,
304
+ };
305
+ }
306
+ default:
307
+ throw new Error("unreachable");
308
+ }
309
+ });
310
+ }));
311
+ }
312
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../jsr/sts/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,63 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { importJWK as joseImportJWK, exportJWK, SignJWT } from "jose";
3
+ import { ensureSuperThis } from "../index.js";
4
+ import * as exSts from "./index.js";
5
+ import { ES256_PUB_JWK, ES256_PRIV_JWK, JWK2ENV_PUB } from "../golden-fixtures.js";
6
+ const sthis = ensureSuperThis();
7
+ const PUB = { ...ES256_PUB_JWK, alg: "ES256" };
8
+ async function sign(privJwk, claims, expDelta = 300) {
9
+ const key = await joseImportJWK(privJwk, "ES256");
10
+ const now = Math.floor(Date.now() / 1000);
11
+ return new SignJWT(claims)
12
+ .setProtectedHeader({ alg: "ES256" })
13
+ .setIssuedAt(now)
14
+ .setExpirationTime(now + expDelta)
15
+ .sign(key);
16
+ }
17
+ describe("sts lift — byte-compat against the frozen fireproof contract", () => {
18
+ it("jwk2env: extracted output is byte-identical to the frozen fireproof value", async () => {
19
+ const pubKey = await joseImportJWK({ ...ES256_PUB_JWK }, "ES256", { extractable: true });
20
+ expect(await exSts.jwk2env(pubKey, sthis)).toBe(JWK2ENV_PUB);
21
+ });
22
+ it("env2jwk: decodes the frozen env material back to the exact frozen key (Charlie #2858)", async () => {
23
+ const keys = await exSts.env2jwk(JWK2ENV_PUB, undefined, sthis);
24
+ expect(keys.length).toBe(1);
25
+ const jwk = await exportJWK(keys[0]);
26
+ expect({ kty: jwk.kty, crv: jwk.crv, x: jwk.x, y: jwk.y }).toEqual({
27
+ kty: ES256_PUB_JWK.kty,
28
+ crv: ES256_PUB_JWK.crv,
29
+ x: ES256_PUB_JWK.x,
30
+ y: ES256_PUB_JWK.y,
31
+ });
32
+ });
33
+ it("importJWK: ES256 alg + ok", async () => {
34
+ const r = await exSts.importJWK({ ...PUB });
35
+ expect(r.isOk()).toBe(true);
36
+ expect(r.Ok().alg).toBe("ES256");
37
+ });
38
+ it("verifyToken (preset key): a token signed by the frozen key verifies", async () => {
39
+ const token = await sign({ ...ES256_PRIV_JWK, alg: "ES256" }, { sub: "wire-compat" });
40
+ const r = await exSts.verifyToken(token, [PUB], []);
41
+ expect(r.isOk()).toBe(true);
42
+ });
43
+ it("verifyToken (preset key): a token signed by a DIFFERENT key is rejected (no false accept)", async () => {
44
+ const { privateKey, publicKey } = await (await import("jose")).generateKeyPair("ES256", { extractable: true });
45
+ const token = await new SignJWT({ sub: "x" })
46
+ .setProtectedHeader({ alg: "ES256" })
47
+ .setIssuedAt()
48
+ .setExpirationTime("5m")
49
+ .sign(privateKey);
50
+ void publicKey;
51
+ const r = await exSts.verifyToken(token, [PUB], []);
52
+ expect(r.isOk()).toBe(false);
53
+ });
54
+ it("verifyToken (well-known JWKS): fetches the JWKS and verifies via the URL branch", async () => {
55
+ const token = await sign({ ...ES256_PRIV_JWK, alg: "ES256" }, { sub: "jwks-path" });
56
+ const jwks = { keys: [{ ...(await exportJWK(await joseImportJWK({ ...ES256_PUB_JWK }, "ES256"))), alg: "ES256" }] };
57
+ const fetchMock = (async () => new Response(JSON.stringify(jwks), { status: 200, headers: { "content-type": "application/json" } }));
58
+ const url = `https://clerk.example.test/${Math.random().toString(36).slice(2)}/.well-known/jwks.json`;
59
+ const r = await exSts.verifyToken(token, [], [url], { fetch: fetchMock });
60
+ expect(r.isOk()).toBe(true);
61
+ });
62
+ });
63
+ //# sourceMappingURL=sts-golden.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sts-golden.test.js","sourceRoot":"","sources":["../../jsr/sts/sts-golden.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Result } from "@adviser/cement";
2
+ export interface MimeBlock {
3
+ readonly preBegin: string | undefined;
4
+ readonly begin: string | undefined;
5
+ readonly content: string;
6
+ readonly end: string | undefined;
7
+ readonly postEnd: string | undefined;
8
+ }
9
+ export declare function mimeBlockParser(mime: string): MimeBlock[];
10
+ export declare function filterOk<T>(results: Result<T>[]): T[];
@@ -0,0 +1,90 @@
1
+ export function mimeBlockParser(mime) {
2
+ const blocks = [];
3
+ const lines = mime.split("\n");
4
+ let i = 0;
5
+ let lastProcessedIndex = -1;
6
+ while (i < lines.length) {
7
+ const line = lines[i];
8
+ const beginMatch = line.match(/^(-{3,})\s*(BEGIN)\s+(.+?)\s*(-{3,})$/i);
9
+ if (beginMatch) {
10
+ const leadingDashes = beginMatch[1].length;
11
+ const trailingDashes = beginMatch[4].length;
12
+ const blockType = beginMatch[3];
13
+ const escapedBlockType = blockType.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
14
+ const endPattern = new RegExp(`^-{${leadingDashes}}\\s*(END)\\s+${escapedBlockType}\\s*-{${trailingDashes}}$`, "i");
15
+ const preBegin = [];
16
+ for (let j = lastProcessedIndex + 1; j < i; j++) {
17
+ preBegin.push(lines[j]);
18
+ }
19
+ i++;
20
+ const contentLines = [];
21
+ let foundEnd = false;
22
+ let endLine = "";
23
+ while (i < lines.length) {
24
+ if (endPattern.test(lines[i])) {
25
+ foundEnd = true;
26
+ endLine = lines[i];
27
+ break;
28
+ }
29
+ contentLines.push(lines[i]);
30
+ i++;
31
+ }
32
+ if (foundEnd) {
33
+ i++;
34
+ const postEnd = [];
35
+ while (i < lines.length && !lines[i].match(/^-{3,}\s*BEGIN\s+.+-{3,}$/i)) {
36
+ postEnd.push(lines[i]);
37
+ i++;
38
+ }
39
+ blocks.push({
40
+ preBegin: preBegin.length > 0 ? preBegin.join("\n") : undefined,
41
+ begin: line,
42
+ content: contentLines.join("\n"),
43
+ end: endLine,
44
+ postEnd: postEnd.length > 0 ? postEnd.join("\n") : undefined,
45
+ });
46
+ lastProcessedIndex = i - 1;
47
+ }
48
+ else {
49
+ const allContent = [...preBegin, line, ...contentLines];
50
+ blocks.push({
51
+ begin: undefined,
52
+ end: undefined,
53
+ content: allContent.join("\n"),
54
+ preBegin: undefined,
55
+ postEnd: undefined,
56
+ });
57
+ lastProcessedIndex = i - 1;
58
+ }
59
+ }
60
+ else {
61
+ i++;
62
+ }
63
+ }
64
+ if (lastProcessedIndex < lines.length - 1) {
65
+ const remainingLines = [];
66
+ for (let j = lastProcessedIndex + 1; j < lines.length; j++) {
67
+ remainingLines.push(lines[j]);
68
+ }
69
+ if (remainingLines.length > 0) {
70
+ blocks.push({
71
+ begin: undefined,
72
+ end: undefined,
73
+ content: remainingLines.join("\n"),
74
+ preBegin: undefined,
75
+ postEnd: undefined,
76
+ });
77
+ }
78
+ }
79
+ return blocks;
80
+ }
81
+ export function filterOk(results) {
82
+ const okValues = [];
83
+ for (const res of results) {
84
+ if (res.isOk()) {
85
+ okValues.push(res.Ok());
86
+ }
87
+ }
88
+ return okValues;
89
+ }
90
+ //# sourceMappingURL=text-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-blocks.js","sourceRoot":"","sources":["../../jsr/sts/text-blocks.ts"],"names":[],"mappings":"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"}
package/testing.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export { createTestDeviceCA, createTestUser } from "./device-id/test-helpers.js";
2
+ export type { CreateTestUserParams, TestUser } from "./device-id/test-helpers.js";
3
+ export { DeviceIdKey } from "./device-id/key.js";
4
+ export { DeviceIdSignMsg } from "./device-id/sign.js";
5
+ export { DeviceIdCSR } from "./device-id/csr.js";
6
+ export { DeviceIdVerifyMsg } from "./device-id/verify.js";
7
+ export { DeviceIdCA } from "./device-id/ca.js";
package/testing.js ADDED
@@ -0,0 +1,7 @@
1
+ export { createTestDeviceCA, createTestUser } from "./device-id/test-helpers.js";
2
+ export { DeviceIdKey } from "./device-id/key.js";
3
+ export { DeviceIdSignMsg } from "./device-id/sign.js";
4
+ export { DeviceIdCSR } from "./device-id/csr.js";
5
+ export { DeviceIdVerifyMsg } from "./device-id/verify.js";
6
+ export { DeviceIdCA } from "./device-id/ca.js";
7
+ //# sourceMappingURL=testing.js.map
package/testing.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../jsr/testing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,3 +1,47 @@
1
1
  import { z } from "zod";
2
- import type { CertificatePayload } from "@fireproof/core-types-base";
2
+ import { type Subject, type Extensions } from "./device-id-payload.js";
3
+ import { type JWKPublic } from "./wire.js";
4
+ import { type ClerkClaim } from "../clerk-claim.js";
5
+ export interface Certificate {
6
+ version: "3";
7
+ serialNumber: string;
8
+ subject: Subject;
9
+ issuer: Subject;
10
+ validity: {
11
+ notBefore: string;
12
+ notAfter: string;
13
+ };
14
+ subjectPublicKeyInfo: JWKPublic;
15
+ signatureAlgorithm: "ES256";
16
+ keyUsage: ("digitalSignature" | "nonRepudiation" | "keyEncipherment" | "dataEncipherment" | "keyAgreement" | "keyCertSign" | "cRLSign" | "encipherOnly" | "decipherOnly")[];
17
+ extendedKeyUsage: ("serverAuth" | "clientAuth" | "codeSigning" | "emailProtection" | "timeStamping" | "OCSPSigning" | "ipsecIKE" | "msCodeInd" | "msCodeCom" | "msCTLSign" | "msEFS")[];
18
+ extensions?: Extensions;
19
+ }
20
+ export type CertificatePayload = Readonly<{
21
+ iss: string;
22
+ sub: string;
23
+ aud: string | string[];
24
+ iat: number;
25
+ nbf: number;
26
+ exp: number;
27
+ jti: string;
28
+ certificate: Certificate;
29
+ creatingUser?: {
30
+ type: "clerk";
31
+ claims: ClerkClaim;
32
+ };
33
+ }>;
34
+ export interface IssueCertificateResult {
35
+ readonly certificateJWT: string;
36
+ readonly certificatePayload: CertificatePayload;
37
+ readonly format: "JWS";
38
+ readonly serialNumber: string;
39
+ readonly issuer: string;
40
+ readonly subject: string;
41
+ readonly validityPeriod: {
42
+ readonly notBefore: Date;
43
+ readonly notAfter: Date;
44
+ };
45
+ readonly publicKey: JWKPublic;
46
+ }
3
47
  export declare const CertificatePayloadSchema: z.ZodType<CertificatePayload>;
@@ -1 +1 @@
1
- {"version":3,"file":"cert-payload.js","sourceRoot":"","sources":["../../jsr/types/cert-payload.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQrD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC;IACF,oBAAoB,EAAE,eAAe;IACrC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,IAAI,CAAC;QACL,kBAAkB;QAClB,gBAAgB;QAChB,iBAAiB;QACjB,kBAAkB;QAClB,cAAc;QACd,aAAa;QACb,SAAS;QACT,cAAc;QACd,cAAc;KACf,CAAC,CACH;IACD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CACvB,CAAC,CAAC,IAAI,CAAC;QACL,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,UAAU;QACV,WAAW;QACX,WAAW;QACX,WAAW;QACX,OAAO;KACR,CAAC,CACH;IACD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,wBAAwB,GAAkC,CAAC;KACrE,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,WAAW,EAAE,iBAAiB;IAC9B,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CAC5C,CAAC;KACD,QAAQ,EAAmC,CAAC"}
1
+ {"version":3,"file":"cert-payload.js","sourceRoot":"","sources":["../../jsr/types/cert-payload.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAiC,MAAM,wBAAwB,CAAC;AACxG,OAAO,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAmB,MAAM,mBAAmB,CAAC;AA2EtE,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,aAAa;IACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAChC,CAAC;IACF,oBAAoB,EAAE,eAAe;IACrC,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACtC,QAAQ,EAAE,CAAC,CAAC,KAAK,CACf,CAAC,CAAC,IAAI,CAAC;QACL,kBAAkB;QAClB,gBAAgB;QAChB,iBAAiB;QACjB,kBAAkB;QAClB,cAAc;QACd,aAAa;QACb,SAAS;QACT,cAAc;QACd,cAAc;KACf,CAAC,CACH;IACD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CACvB,CAAC,CAAC,IAAI,CAAC;QACL,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,iBAAiB;QACjB,cAAc;QACd,aAAa;QACb,UAAU;QACV,WAAW;QACX,WAAW;QACX,WAAW;QACX,OAAO;KACR,CAAC,CACH;IACD,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,wBAAwB,GAAkC,CAAC;KACrE,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,WAAW,EAAE,iBAAiB;IAC9B,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CAC5C,CAAC;KACD,QAAQ,EAAmC,CAAC"}