@selvajs/platform 0.15.0-beta.1 → 0.15.0-beta.3

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 (88) hide show
  1. package/dist/computeServer/index.d.ts +1 -1
  2. package/dist/computeServer/index.d.ts.map +1 -1
  3. package/dist/computeServer/interface.d.ts +29 -1
  4. package/dist/computeServer/interface.d.ts.map +1 -1
  5. package/dist/computeServer/types.d.ts +12 -1
  6. package/dist/computeServer/types.d.ts.map +1 -1
  7. package/dist/computeServer/types.js.map +1 -1
  8. package/dist/data/index.d.ts +2 -1
  9. package/dist/data/index.d.ts.map +1 -1
  10. package/dist/data/index.js +1 -1
  11. package/dist/data/index.js.map +1 -1
  12. package/dist/data/interface.d.ts +36 -8
  13. package/dist/data/interface.d.ts.map +1 -1
  14. package/dist/data/interface.js +7 -1
  15. package/dist/data/interface.js.map +1 -1
  16. package/dist/definitions/interface.d.ts +6 -1
  17. package/dist/definitions/interface.d.ts.map +1 -1
  18. package/dist/definitions/schemas.d.ts.map +1 -1
  19. package/dist/definitions/schemas.js +5 -0
  20. package/dist/definitions/schemas.js.map +1 -1
  21. package/dist/events/index.d.ts +1 -1
  22. package/dist/events/index.d.ts.map +1 -1
  23. package/dist/events/index.js +1 -1
  24. package/dist/events/index.js.map +1 -1
  25. package/dist/events/interface.d.ts +7 -0
  26. package/dist/events/interface.d.ts.map +1 -1
  27. package/dist/events/interface.js +7 -0
  28. package/dist/events/interface.js.map +1 -1
  29. package/dist/index.d.ts +7 -4
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +4 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/logging/interface.d.ts +82 -0
  34. package/dist/logging/interface.d.ts.map +1 -0
  35. package/dist/logging/interface.js +33 -0
  36. package/dist/logging/interface.js.map +1 -0
  37. package/dist/organizations/__tests__/slug-schema.test.d.ts +2 -0
  38. package/dist/organizations/__tests__/slug-schema.test.d.ts.map +1 -0
  39. package/dist/organizations/__tests__/slug-schema.test.js +59 -0
  40. package/dist/organizations/__tests__/slug-schema.test.js.map +1 -0
  41. package/dist/organizations/index.d.ts +1 -1
  42. package/dist/organizations/index.d.ts.map +1 -1
  43. package/dist/organizations/index.js +1 -1
  44. package/dist/organizations/index.js.map +1 -1
  45. package/dist/organizations/schemas.d.ts +24 -2
  46. package/dist/organizations/schemas.d.ts.map +1 -1
  47. package/dist/organizations/schemas.js +47 -2
  48. package/dist/organizations/schemas.js.map +1 -1
  49. package/dist/testing/suites/solveMetricSinkSuite.d.ts +5 -0
  50. package/dist/testing/suites/solveMetricSinkSuite.d.ts.map +1 -1
  51. package/dist/testing/suites/solveMetricSinkSuite.js +17 -8
  52. package/dist/testing/suites/solveMetricSinkSuite.js.map +1 -1
  53. package/dist/testing/suites/storageProviderSuite.d.ts.map +1 -1
  54. package/dist/testing/suites/storageProviderSuite.js +23 -2
  55. package/dist/testing/suites/storageProviderSuite.js.map +1 -1
  56. package/package.json +12 -2
  57. package/dist/auth.d.ts +0 -60
  58. package/dist/auth.d.ts.map +0 -1
  59. package/dist/auth.js +0 -12
  60. package/dist/auth.js.map +0 -1
  61. package/dist/compute.d.ts +0 -47
  62. package/dist/compute.d.ts.map +0 -1
  63. package/dist/compute.js +0 -11
  64. package/dist/compute.js.map +0 -1
  65. package/dist/definitions/service.d.ts +0 -62
  66. package/dist/definitions/service.d.ts.map +0 -1
  67. package/dist/definitions/service.js +0 -149
  68. package/dist/definitions/service.js.map +0 -1
  69. package/dist/definitions.d.ts +0 -146
  70. package/dist/definitions.d.ts.map +0 -1
  71. package/dist/definitions.js +0 -23
  72. package/dist/definitions.js.map +0 -1
  73. package/dist/invites/schemas.d.ts +0 -24
  74. package/dist/invites/schemas.d.ts.map +0 -1
  75. package/dist/invites/schemas.js +0 -17
  76. package/dist/invites/schemas.js.map +0 -1
  77. package/dist/organizations.d.ts +0 -93
  78. package/dist/organizations.d.ts.map +0 -1
  79. package/dist/organizations.js +0 -14
  80. package/dist/organizations.js.map +0 -1
  81. package/dist/testing/adapterSuite.d.ts +0 -33
  82. package/dist/testing/adapterSuite.d.ts.map +0 -1
  83. package/dist/testing/adapterSuite.js +0 -166
  84. package/dist/testing/adapterSuite.js.map +0 -1
  85. package/dist/testing/suites/runner.d.ts +0 -21
  86. package/dist/testing/suites/runner.d.ts.map +0 -1
  87. package/dist/testing/suites/runner.js +0 -7
  88. package/dist/testing/suites/runner.js.map +0 -1
@@ -0,0 +1,59 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { SlugSchema, RESERVED_SLUGS, slugify } from '../schemas.js';
3
+ /**
4
+ * Reserved-slug guard (audit D4). A tenant slug must never equal a top-level
5
+ * route segment, or it could shadow (or be shadowed by) a route once flat
6
+ * tenant URLs — `/o/{slug}/…` per ADR 0006 — exist. These tests pin that the
7
+ * guard rejects every reserved word and still accepts ordinary slugs, so the
8
+ * reservation can't silently regress before the multi-org routing is built.
9
+ */
10
+ describe('SlugSchema', () => {
11
+ it('accepts a normal lowercase-hyphenated slug', () => {
12
+ expect(SlugSchema.safeParse('acme-studio').success).toBe(true);
13
+ });
14
+ it('rejects every reserved slug', () => {
15
+ for (const reserved of RESERVED_SLUGS) {
16
+ const result = SlugSchema.safeParse(reserved);
17
+ expect(result.success, `"${reserved}" must be rejected`).toBe(false);
18
+ }
19
+ });
20
+ it('reserves the multi-org namespace prefix `o` even though the length gate already blocks it', () => {
21
+ // `o` is 1 char, so `min(3)` rejects it regardless — but it stays in the
22
+ // reserved set so intent survives any future relaxation of the length rule.
23
+ expect(RESERVED_SLUGS).toContain('o');
24
+ expect(SlugSchema.safeParse('o').success).toBe(false);
25
+ });
26
+ it('still enforces the format rules (length, charset)', () => {
27
+ expect(SlugSchema.safeParse('ab').success).toBe(false); // too short
28
+ expect(SlugSchema.safeParse('-lead').success).toBe(false); // leading hyphen
29
+ expect(SlugSchema.safeParse('UPPER').success).toBe(false); // uppercase
30
+ expect(SlugSchema.safeParse('a'.repeat(64)).success).toBe(false); // too long
31
+ });
32
+ it('does not over-reject: a slug that merely contains a reserved word is fine', () => {
33
+ // The guard is exact-match, not substring — `team-alpha` is not `team`.
34
+ expect(SlugSchema.safeParse('team-alpha').success).toBe(true);
35
+ expect(SlugSchema.safeParse('my-api').success).toBe(true);
36
+ });
37
+ });
38
+ describe('slugify', () => {
39
+ it('lowercases, trims, and hyphenates non-alphanumeric runs', () => {
40
+ expect(slugify(' Acme Studio!! ')).toBe('acme-studio');
41
+ expect(slugify('Foo___Bar / Baz')).toBe('foo-bar-baz');
42
+ });
43
+ it('strips leading and trailing hyphens', () => {
44
+ expect(slugify('---hello---')).toBe('hello');
45
+ expect(slugify('!leading and trailing.')).toBe('leading-and-trailing');
46
+ });
47
+ it('caps output at 63 characters', () => {
48
+ expect(slugify('a'.repeat(100))).toHaveLength(63);
49
+ });
50
+ it('yields an empty string when nothing survives (caller must still validate)', () => {
51
+ expect(slugify('!!!')).toBe('');
52
+ // It does not itself guarantee validity — the output must pass SlugSchema.
53
+ expect(SlugSchema.safeParse(slugify('!!!')).success).toBe(false);
54
+ });
55
+ it('produces slugs that SlugSchema accepts for ordinary names', () => {
56
+ expect(SlugSchema.safeParse(slugify('Acme Studio')).success).toBe(true);
57
+ });
58
+ });
59
+ //# sourceMappingURL=slug-schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug-schema.test.js","sourceRoot":"","sources":["../../../src/organizations/__tests__/slug-schema.test.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@ export type { Organization, OrgMember, OrgAssets } from './types.js';
2
2
  export type { IOrgStore } from './interface.js';
3
3
  export { orgPaths } from './paths.js';
4
4
  export type { OrgRole, OrgPermission, OrgAssetKind, CreateOrgInput, UpdateOrgInput } from './schemas.js';
5
- export { OrgRoleSchema, OrgPermissionSchema, OrgAssetKindSchema, ALL_ORG_ASSET_KINDS, SlugSchema, CreateOrgSchema, UpdateOrgSchema, ALL_ORG_PERMISSIONS, DEFAULT_ORG_PERMISSIONS, OWNER_ADMIN_ONLY_PERMISSIONS, MEMBER_ASSIGNABLE_PERMISSIONS } from './schemas.js';
5
+ export { OrgRoleSchema, OrgPermissionSchema, OrgAssetKindSchema, ALL_ORG_ASSET_KINDS, SlugSchema, slugify, RESERVED_SLUGS, CreateOrgSchema, UpdateOrgSchema, ALL_ORG_PERMISSIONS, DEFAULT_ORG_PERMISSIONS, OWNER_ADMIN_ONLY_PERMISSIONS, MEMBER_ASSIGNABLE_PERMISSIONS } from './schemas.js';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/organizations/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EACX,OAAO,EACP,aAAa,EACb,YAAY,EACZ,cAAc,EACd,cAAc,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/organizations/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACrE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EACX,OAAO,EACP,aAAa,EACb,YAAY,EACZ,cAAc,EACd,cAAc,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,OAAO,EACP,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,MAAM,cAAc,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { orgPaths } from './paths.js';
2
- export { OrgRoleSchema, OrgPermissionSchema, OrgAssetKindSchema, ALL_ORG_ASSET_KINDS, SlugSchema, CreateOrgSchema, UpdateOrgSchema, ALL_ORG_PERMISSIONS, DEFAULT_ORG_PERMISSIONS, OWNER_ADMIN_ONLY_PERMISSIONS, MEMBER_ASSIGNABLE_PERMISSIONS } from './schemas.js';
2
+ export { OrgRoleSchema, OrgPermissionSchema, OrgAssetKindSchema, ALL_ORG_ASSET_KINDS, SlugSchema, slugify, RESERVED_SLUGS, CreateOrgSchema, UpdateOrgSchema, ALL_ORG_PERMISSIONS, DEFAULT_ORG_PERMISSIONS, OWNER_ADMIN_ONLY_PERMISSIONS, MEMBER_ASSIGNABLE_PERMISSIONS } from './schemas.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/organizations/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/organizations/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,UAAU,EACV,OAAO,EACP,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,MAAM,cAAc,CAAC"}
@@ -1,9 +1,31 @@
1
1
  import { z } from 'zod';
2
- /** Lowercase alphanumeric with internal hyphens, 3–63 chars. */
2
+ /**
3
+ * Top-level path segments a tenant slug must never equal, so a slug can never
4
+ * shadow (or be shadowed by) a route (audit D4). Two forces meet here:
5
+ * - Reserved multi-org namespace: `/o/{slug}/` is the decided shape for
6
+ * per-org URLs (see ADR 0006). `o` is reserved even though the length gate
7
+ * below already makes a 1-char slug impossible — belt-and-suspenders, and it
8
+ * documents intent for anyone relaxing the length rule later.
9
+ * - Existing flat top-level routes: reserving these keeps a future move to
10
+ * `/o/{slug}/…` (or any flat tenant route) collision-free from day one,
11
+ * before any external link is minted against a slug.
12
+ * Lowercase; the slug is lowercased/matched case-insensitively so `Admin` can't
13
+ * slip through. Keep in sync with the route tree's top-level directories.
14
+ */
15
+ export declare const RESERVED_SLUGS: readonly string[];
16
+ /**
17
+ * Coerce an arbitrary name into a slug candidate: lowercase, non-alphanumeric
18
+ * runs collapsed to single hyphens, trimmed of edge hyphens, capped at 63 chars.
19
+ * Produces the shape `SlugSchema` validates — but does not itself guarantee
20
+ * validity (a name of all-symbols yields `''`, and reserved words pass through);
21
+ * run the result through `SlugSchema` where a valid slug is required.
22
+ */
23
+ export declare function slugify(name: string): string;
24
+ /** Lowercase alphanumeric with internal hyphens, 3–63 chars, not a reserved word. */
3
25
  export declare const SlugSchema: z.ZodString;
4
26
  export declare const OrgRoleSchema: z.ZodEnum<{
5
- owner: "owner";
6
27
  admin: "admin";
28
+ owner: "owner";
7
29
  member: "member";
8
30
  }>;
9
31
  export type OrgRole = z.infer<typeof OrgRoleSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/organizations/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,eAAO,MAAM,UAAU,aAOrB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;EAAuC,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;EAA8B,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAA+B,CAAC;AAEvF,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB,EAAE,SAAS,aAAa,EAAgC,CAAC;AAEzF,sDAAsD;AACtD,eAAO,MAAM,4BAA4B,EAAE,SAAS,aAAa,EAGhE,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,SAAS,aAAa,EAEjE,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAI7E,CAAC;AAEF,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAA4B,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/organizations/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAY3C,CAAC;AAIF;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO5C;AAED,qFAAqF;AACrF,eAAO,MAAM,UAAU,aAUpB,CAAC;AAEJ,eAAO,MAAM,aAAa;;;;EAAuC,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;EAA8B,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB,EAAE,SAAS,YAAY,EAA+B,CAAC;AAEvF,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB;;;;;EAK9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,mBAAmB,EAAE,SAAS,aAAa,EAAgC,CAAC;AAEzF,sDAAsD;AACtD,eAAO,MAAM,4BAA4B,EAAE,SAAS,aAAa,EAGhE,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,SAAS,aAAa,EAEjE,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAI7E,CAAC;AAEF,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;iBAA4B,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAC7D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -1,10 +1,55 @@
1
1
  import { z } from 'zod';
2
- /** Lowercase alphanumeric with internal hyphens, 3–63 chars. */
2
+ /**
3
+ * Top-level path segments a tenant slug must never equal, so a slug can never
4
+ * shadow (or be shadowed by) a route (audit D4). Two forces meet here:
5
+ * - Reserved multi-org namespace: `/o/{slug}/` is the decided shape for
6
+ * per-org URLs (see ADR 0006). `o` is reserved even though the length gate
7
+ * below already makes a 1-char slug impossible — belt-and-suspenders, and it
8
+ * documents intent for anyone relaxing the length rule later.
9
+ * - Existing flat top-level routes: reserving these keeps a future move to
10
+ * `/o/{slug}/…` (or any flat tenant route) collision-free from day one,
11
+ * before any external link is minted against a slug.
12
+ * Lowercase; the slug is lowercased/matched case-insensitively so `Admin` can't
13
+ * slip through. Keep in sync with the route tree's top-level directories.
14
+ */
15
+ export const RESERVED_SLUGS = [
16
+ 'o',
17
+ 'api',
18
+ 'admin',
19
+ 'auth',
20
+ 'login',
21
+ 'logout',
22
+ 'setup',
23
+ 'team',
24
+ 'library',
25
+ 'projects',
26
+ 'accept-invite'
27
+ ];
28
+ const RESERVED_SLUG_SET = new Set(RESERVED_SLUGS);
29
+ /**
30
+ * Coerce an arbitrary name into a slug candidate: lowercase, non-alphanumeric
31
+ * runs collapsed to single hyphens, trimmed of edge hyphens, capped at 63 chars.
32
+ * Produces the shape `SlugSchema` validates — but does not itself guarantee
33
+ * validity (a name of all-symbols yields `''`, and reserved words pass through);
34
+ * run the result through `SlugSchema` where a valid slug is required.
35
+ */
36
+ export function slugify(name) {
37
+ return name
38
+ .trim()
39
+ .toLowerCase()
40
+ .replace(/[^a-z0-9]+/g, '-')
41
+ .replace(/^-|-$/g, '')
42
+ .slice(0, 63);
43
+ }
44
+ /** Lowercase alphanumeric with internal hyphens, 3–63 chars, not a reserved word. */
3
45
  export const SlugSchema = z
4
46
  .string()
5
47
  .min(3, 'Slug must be at least 3 characters')
6
48
  .max(63, 'Slug must be at most 63 characters')
7
- .regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/, 'Slug must be lowercase alphanumeric with hyphens (no leading/trailing/consecutive hyphens)');
49
+ .regex(/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/, 'Slug must be lowercase alphanumeric with hyphens (no leading/trailing/consecutive hyphens)')
50
+ .refine((s) => !RESERVED_SLUG_SET.has(s), {
51
+ message: 'Slug is reserved and cannot be used'
52
+ });
8
53
  export const OrgRoleSchema = z.enum(['owner', 'admin', 'member']);
9
54
  /**
10
55
  * Kinds of org-scoped branding asset. Adding a new kind is a single entry here
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/organizations/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACzB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;KAC5C,GAAG,CAAC,EAAE,EAAE,oCAAoC,CAAC;KAC7C,KAAK,CACL,iCAAiC,EACjC,4FAA4F,CAC5F,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGlE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAG9D,MAAM,CAAC,MAAM,mBAAmB,GAA4B,kBAAkB,CAAC,OAAO,CAAC;AAEvF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,iBAAiB;CACjB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAA6B,mBAAmB,CAAC,OAAO,CAAC;AAEzF,sDAAsD;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAA6B;IACrE,oBAAoB;IACpB,oBAAoB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAA6B,mBAAmB,CAAC,MAAM,CAChG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChD,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAA8C;IACjF,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC;IAC/B,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC;IAC/B,MAAM,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjE,IAAI,EAAE,UAAU;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/organizations/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAChD,GAAG;IACH,KAAK;IACL,OAAO;IACP,MAAM;IACN,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,SAAS;IACT,UAAU;IACV,eAAe;CACf,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IACnC,OAAO,IAAI;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChB,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACzB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,oCAAoC,CAAC;KAC5C,GAAG,CAAC,EAAE,EAAE,oCAAoC,CAAC;KAC7C,KAAK,CACL,iCAAiC,EACjC,4FAA4F,CAC5F;KACA,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;IACzC,OAAO,EAAE,qCAAqC;CAC9C,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGlE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAG9D,MAAM,CAAC,MAAM,mBAAmB,GAA4B,kBAAkB,CAAC,OAAO,CAAC;AAEvF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACzC,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,iBAAiB;CACjB,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,mBAAmB,GAA6B,mBAAmB,CAAC,OAAO,CAAC;AAEzF,sDAAsD;AACtD,MAAM,CAAC,MAAM,4BAA4B,GAA6B;IACrE,oBAAoB;IACpB,oBAAoB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAA6B,mBAAmB,CAAC,MAAM,CAChG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,4BAA4B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChD,CAAC;AAEF,yEAAyE;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAA8C;IACjF,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC;IAC/B,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC;IAC/B,MAAM,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjE,IAAI,EAAE,UAAU;CAChB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC"}
@@ -26,6 +26,11 @@ export interface SolveMetricSinkConformanceOptions {
26
26
  createSink: () => Promise<ISolveMetricSink> | ISolveMetricSink;
27
27
  /** Read every persisted metric back, normalized to `RecordedSolveMetric`. */
28
28
  readRows: () => Promise<RecordedSolveMetric[]>;
29
+ /**
30
+ * Force a buffering sink to write everything it holds. Called before every
31
+ * `readRows`. Omit for sinks that persist synchronously on `record`.
32
+ */
33
+ flushSink?: (sink: ISolveMetricSink) => Promise<void> | void;
29
34
  /**
30
35
  * Build a sink whose backing store is broken so writes fail. Used to prove
31
36
  * `record` swallows errors. Omit if the adapter can't simulate a failure;
@@ -1 +1 @@
1
- {"version":3,"file":"solveMetricSinkSuite.d.ts","sourceRoot":"","sources":["../../../src/testing/suites/solveMetricSinkSuite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAEpF;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACvD,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,UAAU,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;IAC/D,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/C;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;IACvE,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACrC;AAsBD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,iCAAiC,GAAG,IAAI,CAwE3F"}
1
+ {"version":3,"file":"solveMetricSinkSuite.d.ts","sourceRoot":"","sources":["../../../src/testing/suites/solveMetricSinkSuite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAEpF;;;;GAIG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACvD,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,UAAU,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;IAC/D,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/C;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;IACvE,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACrC;AAsBD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,iCAAiC,GAAG,IAAI,CAgF3F"}
@@ -30,9 +30,15 @@ function baseMetric(overrides = {}) {
30
30
  };
31
31
  }
32
32
  export function runSolveMetricSinkConformance(opts) {
33
- const { name, createSink, readRows, createFailingSink, cleanup } = opts;
33
+ const { name, createSink, readRows, flushSink, createFailingSink, cleanup } = opts;
34
34
  describe(`ISolveMetricSink conformance: ${name}`, () => {
35
35
  let sink;
36
+ /** Read persisted rows, first draining anything the sink is buffering. */
37
+ async function drainAndRead() {
38
+ if (flushSink)
39
+ await flushSink(sink);
40
+ return readRows();
41
+ }
36
42
  beforeEach(async () => {
37
43
  sink = await createSink();
38
44
  });
@@ -43,28 +49,28 @@ export function runSolveMetricSinkConformance(opts) {
43
49
  it('persists a successful solve with all fields intact', async () => {
44
50
  const metric = baseMetric();
45
51
  await sink.record(sysCtx('user-1'), metric);
46
- const rows = await readRows();
52
+ const rows = await drainAndRead();
47
53
  expect(rows).toHaveLength(1);
48
54
  expect(rows[0]).toMatchObject({ ...metric, actorId: 'user-1' });
49
55
  });
50
56
  it('records the actor from the RequestContext', async () => {
51
57
  await sink.record(sysCtx('user-xyz'), baseMetric());
52
- const rows = await readRows();
58
+ const rows = await drainAndRead();
53
59
  expect(rows[0].actorId).toBe('user-xyz');
54
60
  });
55
61
  it('falls back to "system" when the context has no user id', async () => {
56
62
  await sink.record(sysCtx(''), baseMetric());
57
- const rows = await readRows();
63
+ const rows = await drainAndRead();
58
64
  expect(rows[0].actorId).toBe('system');
59
65
  });
60
66
  it('persists a failed solve with its failureKind and zero duration', async () => {
61
67
  await sink.record(sysCtx('user-1'), baseMetric({ ok: false, failureKind: 'timeout', durationMs: 0 }));
62
- const rows = await readRows();
68
+ const rows = await drainAndRead();
63
69
  expect(rows[0]).toMatchObject({ ok: false, failureKind: 'timeout', durationMs: 0 });
64
70
  });
65
71
  it('persists error/warning counts on an otherwise-ok solve', async () => {
66
72
  await sink.record(sysCtx('user-1'), baseMetric({ errorCount: 2, warningCount: 5 }));
67
- const rows = await readRows();
73
+ const rows = await drainAndRead();
68
74
  expect(rows[0]).toMatchObject({ ok: true, errorCount: 2, warningCount: 5 });
69
75
  });
70
76
  it('persists null definition/version/org for remote-URL solves', async () => {
@@ -74,14 +80,17 @@ export function runSolveMetricSinkConformance(opts) {
74
80
  versionId: null,
75
81
  orgId: null
76
82
  }));
77
- const rows = await readRows();
83
+ const rows = await drainAndRead();
78
84
  expect(rows[0]).toMatchObject({ definitionId: null, versionId: null, orgId: null });
79
85
  });
80
86
  if (createFailingSink) {
81
87
  it('does not throw when the backing write fails', async () => {
82
88
  const failing = await createFailingSink();
83
- // The contract: record swallows the failure and resolves.
89
+ // The contract: record swallows the failure and resolves. For a
90
+ // buffering sink the write happens on flush, so that must swallow too.
84
91
  await expect(failing.record(sysCtx('user-1'), baseMetric())).resolves.toBeUndefined();
92
+ if (flushSink)
93
+ await expect(flushSink(failing)).resolves.not.toThrow();
85
94
  });
86
95
  }
87
96
  });
@@ -1 +1 @@
1
- {"version":3,"file":"solveMetricSinkSuite.js","sourceRoot":"","sources":["../../../src/testing/suites/solveMetricSinkSuite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AA6BrE,SAAS,MAAM,CAAC,MAAc;IAC7B,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,YAAkC,EAAE;IACvD,OAAO;QACN,aAAa,EAAE,4CAA4C;QAC3D,YAAY,EAAE,sCAAsC;QACpD,SAAS,EAAE,sCAAsC;QACjD,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,sCAAsC;QAC7C,UAAU,EAAE,KAAK;QACjB,EAAE,EAAE,IAAI;QACR,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,GAAG,SAAS;KACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAuC;IACpF,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAExE,QAAQ,CAAC,iCAAiC,IAAI,EAAE,EAAE,GAAG,EAAE;QACtD,IAAI,IAAsB,CAAC;QAE3B,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,IAAI,GAAG,MAAM,UAAU,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACpB,IAAI,OAAO;gBAAE,MAAM,OAAO,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;YAE5C,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC/E,MAAM,IAAI,CAAC,MAAM,CAChB,MAAM,CAAC,QAAQ,CAAC,EAChB,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAChE,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpF,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,IAAI,CAAC,MAAM,CAChB,MAAM,CAAC,QAAQ,CAAC,EAChB,UAAU,CAAC;gBACV,aAAa,EAAE,4BAA4B;gBAC3C,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,IAAI;aACX,CAAC,CACF,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,IAAI,iBAAiB,EAAE,CAAC;YACvB,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;gBAC1C,0DAA0D;gBAC1D,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YACvF,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"solveMetricSinkSuite.js","sourceRoot":"","sources":["../../../src/testing/suites/solveMetricSinkSuite.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"storageProviderSuite.d.ts","sourceRoot":"","sources":["../../../src/testing/suites/storageProviderSuite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,iCAAiC;IACjD,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,aAAa,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;CAClE;AAMD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,iCAAiC,GAAG,IAAI,CA8K3F"}
1
+ {"version":3,"file":"storageProviderSuite.d.ts","sourceRoot":"","sources":["../../../src/testing/suites/storageProviderSuite.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,WAAW,iCAAiC;IACjD,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,aAAa,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;CAClE;AAoBD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,iCAAiC,GAAG,IAAI,CAsL3F"}
@@ -8,6 +8,19 @@ import { describe, it, expect } from 'vitest';
8
8
  function bytes(text) {
9
9
  return new TextEncoder().encode(text);
10
10
  }
11
+ /**
12
+ * Fast content fingerprint (FNV-1a) for large-payload comparison. A single
13
+ * linear pass — orders of magnitude cheaper than vitest's `toEqual` deep
14
+ * walk over a megabyte-scale typed array.
15
+ */
16
+ function checksum(data) {
17
+ let h = 0x811c9dc5;
18
+ for (let i = 0; i < data.length; i++) {
19
+ h ^= data[i];
20
+ h = Math.imul(h, 0x01000193);
21
+ }
22
+ return h >>> 0;
23
+ }
11
24
  export function runStorageProviderConformance(opts) {
12
25
  const { name, createStorage } = opts;
13
26
  describe(`IStorageProvider conformance: ${name}`, () => {
@@ -94,6 +107,12 @@ export function runStorageProviderConformance(opts) {
94
107
  const got = await storage.get('binary/data.bin');
95
108
  expect(got).toEqual(binary);
96
109
  });
110
+ // Runs with a raised timeout: the round-trip itself is ~1ms, but this test
111
+ // carries fixed worker overhead (~1.5s locally) that inflates several-fold
112
+ // on a loaded CI runner where all packages' suites run concurrently — enough
113
+ // to blow the default 5s. Comparison uses a checksum, not `toEqual`, whose
114
+ // element-by-element deep walk over a million-entry Uint8Array alone cost
115
+ // >1.5s.
97
116
  it('handles large data', async () => {
98
117
  const storage = await createStorage();
99
118
  const large = new Uint8Array(1024 * 1024); // 1 MB
@@ -102,8 +121,10 @@ export function runStorageProviderConformance(opts) {
102
121
  }
103
122
  await storage.put('large/file.bin', large);
104
123
  const got = await storage.get('large/file.bin');
105
- expect(got).toEqual(large);
106
- });
124
+ expect(got).not.toBeNull();
125
+ expect(got.length).toBe(large.length);
126
+ expect(checksum(got)).toBe(checksum(large));
127
+ }, 30_000);
107
128
  it('put with contentType is stored', async () => {
108
129
  const storage = await createStorage();
109
130
  const data = bytes('{"type":"octet"}');
@@ -1 +1 @@
1
- {"version":3,"file":"storageProviderSuite.js","sourceRoot":"","sources":["../../../src/testing/suites/storageProviderSuite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storageProviderSuite.js","sourceRoot":"","sources":["../../../src/testing/suites/storageProviderSuite.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,18 @@
1
1
  {
2
2
  "name": "@selvajs/platform",
3
- "version": "0.15.0-beta.1",
3
+ "version": "0.15.0-beta.3",
4
4
  "description": "Pure TypeScript interfaces for Selva platform providers (auth, definitions, compute)",
5
5
  "license": "MIT",
6
+ "author": "VektorNode",
7
+ "homepage": "https://github.com/VektorNode/selva#readme",
8
+ "bugs": "https://github.com/VektorNode/selva/issues",
9
+ "keywords": [
10
+ "selva",
11
+ "providers",
12
+ "auth",
13
+ "interfaces",
14
+ "platform"
15
+ ],
6
16
  "publishConfig": {
7
17
  "access": "public"
8
18
  },
@@ -92,7 +102,7 @@
92
102
  ],
93
103
  "dependencies": {
94
104
  "zod": "^4.3.6",
95
- "@selvajs/schemas": "^4.7.0-beta.0"
105
+ "@selvajs/schemas": "^4.7.0-beta.1"
96
106
  },
97
107
  "peerDependencies": {
98
108
  "sharp": "^0.34.0",
package/dist/auth.d.ts DELETED
@@ -1,60 +0,0 @@
1
- /**
2
- * Authentication provider interface.
3
- *
4
- * Implement this to plug in any auth backend:
5
- * - Local HMAC sessions (built-in default)
6
- * - Firebase Auth
7
- * - Supabase Auth
8
- * - AWS Cognito
9
- * - Any OIDC/JWT provider
10
- */
11
- export type UserRole = 'platform_admin' | 'user';
12
- export interface AuthUser {
13
- id: string;
14
- email?: string;
15
- displayName?: string;
16
- role: UserRole;
17
- metadata?: Record<string, unknown>;
18
- }
19
- export interface IAuthProvider {
20
- /**
21
- * Verify a token string — session cookie value, JWT, Firebase ID token, etc.
22
- * Returns the authenticated user, or null if the token is invalid or expired.
23
- */
24
- verifyToken(token: string): Promise<AuthUser | null>;
25
- /**
26
- * Look up a user by their provider-specific ID.
27
- * Returns null if the user does not exist.
28
- */
29
- getUser(id: string): Promise<AuthUser | null>;
30
- /**
31
- * Create a new opaque session token for an authenticated user.
32
- * Stored in a cookie by the transport layer. Format is provider-specific:
33
- * HMAC string, signed JWT, Firebase custom token, etc.
34
- */
35
- createSessionToken(user: AuthUser): Promise<string>;
36
- /**
37
- * Verify login credentials (email + password).
38
- * Returns the authenticated user, or null if credentials are invalid.
39
- * Email may be an empty string for password-only auth (no users.json configured).
40
- */
41
- verifyLoginCredentials(email: string, password: string): Promise<AuthUser | null>;
42
- /**
43
- * List all users. Returns null if this provider does not support user management
44
- * (e.g. single-password mode).
45
- */
46
- listUsers(): Promise<AuthUser[] | null>;
47
- /**
48
- * Create a new user. Returns null if not supported.
49
- */
50
- createUser(email: string, password: string, role: UserRole): Promise<AuthUser | null>;
51
- /**
52
- * Update a user's role. Returns false if not supported or user not found.
53
- */
54
- updateUserRole(id: string, role: UserRole): Promise<boolean>;
55
- /**
56
- * Delete a user by ID. Returns false if not supported or user not found.
57
- */
58
- deleteUser(id: string): Promise<boolean>;
59
- }
60
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,MAAM,QAAQ,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAErD;;;OAGG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAE9C;;;;OAIG;IACH,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEpD;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAIlF;;;OAGG;IACH,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEtF;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7D;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzC"}
package/dist/auth.js DELETED
@@ -1,12 +0,0 @@
1
- /**
2
- * Authentication provider interface.
3
- *
4
- * Implement this to plug in any auth backend:
5
- * - Local HMAC sessions (built-in default)
6
- * - Firebase Auth
7
- * - Supabase Auth
8
- * - AWS Cognito
9
- * - Any OIDC/JWT provider
10
- */
11
- export {};
12
- //# sourceMappingURL=auth.js.map
package/dist/auth.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
package/dist/compute.d.ts DELETED
@@ -1,47 +0,0 @@
1
- /**
2
- * Compute server provider interface.
3
- *
4
- * Implement to support:
5
- * - Single server (built-in default)
6
- * - Server pool with load balancing
7
- * - Per-definition routing (e.g. definition A always goes to server B)
8
- * - Dynamic provisioning
9
- */
10
- export interface ComputeServerConfig {
11
- /** UUID v4 primary key */
12
- id: string;
13
- /** Human-readable display label */
14
- label: string;
15
- /** Base URL of the Rhino.Compute instance, e.g. http://localhost:5000 */
16
- serverUrl: string;
17
- /** Optional API key sent as RhinoComputeKey header */
18
- apiKey?: string;
19
- /** Request timeout in milliseconds. Default: 30000 */
20
- timeoutMs?: number;
21
- /** Number of retries on transient failure. Default: 0 */
22
- retryCount?: number;
23
- }
24
- export interface ComputeConfig {
25
- servers: ComputeServerConfig[];
26
- /** UUID of the server to use when no routing rule matches. Falls back to servers[0]. */
27
- defaultServerId?: string;
28
- }
29
- export interface SolveRequest {
30
- /** GUID of the definition being solved — enables per-definition routing */
31
- definitionGuid?: string;
32
- /** Arbitrary hints for routing decisions (e.g. required plugin versions) */
33
- hints?: Record<string, string>;
34
- }
35
- export interface IComputeServerProvider {
36
- /** Resolve which compute server to use for a given solve request. */
37
- getServer(request?: SolveRequest): Promise<ComputeServerConfig>;
38
- /** Return the default server, or undefined if none configured. */
39
- getDefaultServer(): Promise<ComputeServerConfig | undefined>;
40
- /** Look up a specific server by its UUID. Returns undefined if not found. */
41
- getServerById(id: string): Promise<ComputeServerConfig | undefined>;
42
- /** Return the full config. Used by the admin UI. */
43
- getConfig(): Promise<ComputeConfig>;
44
- /** Replace the full config atomically. Used by the admin UI. */
45
- saveConfig(config: ComputeConfig): Promise<void>;
46
- }
47
- //# sourceMappingURL=compute.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../src/compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,mBAAmB;IACnC,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,wFAAwF;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC5B,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACtC,qEAAqE;IACrE,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEhE,kEAAkE;IAClE,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAE7D,6EAA6E;IAC7E,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAC;IAEpE,oDAAoD;IACpD,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAEpC,gEAAgE;IAChE,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
package/dist/compute.js DELETED
@@ -1,11 +0,0 @@
1
- /**
2
- * Compute server provider interface.
3
- *
4
- * Implement to support:
5
- * - Single server (built-in default)
6
- * - Server pool with load balancing
7
- * - Per-definition routing (e.g. definition A always goes to server B)
8
- * - Dynamic provisioning
9
- */
10
- export {};
11
- //# sourceMappingURL=compute.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute.js","sourceRoot":"","sources":["../src/compute.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}