@selvajs/platform 0.14.3-beta.0 → 0.15.0-beta.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 (154) hide show
  1. package/LICENSE +1 -1
  2. package/dist/computeServer/index.d.ts +1 -1
  3. package/dist/computeServer/index.d.ts.map +1 -1
  4. package/dist/computeServer/interface.d.ts +29 -1
  5. package/dist/computeServer/interface.d.ts.map +1 -1
  6. package/dist/computeServer/types.d.ts +12 -1
  7. package/dist/computeServer/types.d.ts.map +1 -1
  8. package/dist/computeServer/types.js.map +1 -1
  9. package/dist/data/index.d.ts +2 -1
  10. package/dist/data/index.d.ts.map +1 -1
  11. package/dist/data/index.js +1 -1
  12. package/dist/data/index.js.map +1 -1
  13. package/dist/data/interface.d.ts +69 -8
  14. package/dist/data/interface.d.ts.map +1 -1
  15. package/dist/data/interface.js +7 -1
  16. package/dist/data/interface.js.map +1 -1
  17. package/dist/definitions/interface.d.ts +16 -1
  18. package/dist/definitions/interface.d.ts.map +1 -1
  19. package/dist/definitions/schemas.d.ts +1 -0
  20. package/dist/definitions/schemas.d.ts.map +1 -1
  21. package/dist/definitions/schemas.js +8 -0
  22. package/dist/definitions/schemas.js.map +1 -1
  23. package/dist/definitions/types.d.ts +24 -1
  24. package/dist/definitions/types.d.ts.map +1 -1
  25. package/dist/events/index.d.ts +1 -1
  26. package/dist/events/index.d.ts.map +1 -1
  27. package/dist/events/index.js +1 -1
  28. package/dist/events/index.js.map +1 -1
  29. package/dist/events/interface.d.ts +30 -0
  30. package/dist/events/interface.d.ts.map +1 -1
  31. package/dist/events/interface.js +7 -0
  32. package/dist/events/interface.js.map +1 -1
  33. package/dist/index.d.ts +9 -4
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +5 -2
  36. package/dist/index.js.map +1 -1
  37. package/dist/logging/interface.d.ts +82 -0
  38. package/dist/logging/interface.d.ts.map +1 -0
  39. package/dist/logging/interface.js +33 -0
  40. package/dist/logging/interface.js.map +1 -0
  41. package/dist/metrics/interface.d.ts +6 -0
  42. package/dist/metrics/interface.d.ts.map +1 -1
  43. package/dist/metrics/interface.js.map +1 -1
  44. package/dist/organizations/__tests__/slug-schema.test.d.ts +2 -0
  45. package/dist/organizations/__tests__/slug-schema.test.d.ts.map +1 -0
  46. package/dist/organizations/__tests__/slug-schema.test.js +38 -0
  47. package/dist/organizations/__tests__/slug-schema.test.js.map +1 -0
  48. package/dist/organizations/index.d.ts +1 -1
  49. package/dist/organizations/index.d.ts.map +1 -1
  50. package/dist/organizations/index.js +1 -1
  51. package/dist/organizations/index.js.map +1 -1
  52. package/dist/organizations/schemas.d.ts +16 -2
  53. package/dist/organizations/schemas.d.ts.map +1 -1
  54. package/dist/organizations/schemas.js +32 -2
  55. package/dist/organizations/schemas.js.map +1 -1
  56. package/dist/solveCache/interface.d.ts +86 -0
  57. package/dist/solveCache/interface.d.ts.map +1 -0
  58. package/dist/solveCache/interface.js +12 -0
  59. package/dist/solveCache/interface.js.map +1 -0
  60. package/dist/testing/suites/definitionStoreSuite.d.ts.map +1 -1
  61. package/dist/testing/suites/definitionStoreSuite.js +57 -0
  62. package/dist/testing/suites/definitionStoreSuite.js.map +1 -1
  63. package/dist/testing/suites/eventSinkSuite.js +1 -0
  64. package/dist/testing/suites/eventSinkSuite.js.map +1 -1
  65. package/dist/testing/suites/platformPermissionStoreSuite.d.ts +9 -0
  66. package/dist/testing/suites/platformPermissionStoreSuite.d.ts.map +1 -1
  67. package/dist/testing/suites/platformPermissionStoreSuite.js +34 -1
  68. package/dist/testing/suites/platformPermissionStoreSuite.js.map +1 -1
  69. package/dist/testing/suites/solveMetricSinkSuite.d.ts +5 -0
  70. package/dist/testing/suites/solveMetricSinkSuite.d.ts.map +1 -1
  71. package/dist/testing/suites/solveMetricSinkSuite.js +17 -8
  72. package/dist/testing/suites/solveMetricSinkSuite.js.map +1 -1
  73. package/dist/testing/suites/storageProviderSuite.d.ts.map +1 -1
  74. package/dist/testing/suites/storageProviderSuite.js +23 -2
  75. package/dist/testing/suites/storageProviderSuite.js.map +1 -1
  76. package/package.json +9 -24
  77. package/src/access/index.ts +0 -23
  78. package/src/access/rules.ts +0 -276
  79. package/src/auth/index.ts +0 -8
  80. package/src/auth/interface.ts +0 -279
  81. package/src/auth/types.ts +0 -32
  82. package/src/bindings/index.ts +0 -2
  83. package/src/bindings/interface.ts +0 -61
  84. package/src/computeServer/index.ts +0 -28
  85. package/src/computeServer/interface.ts +0 -73
  86. package/src/computeServer/secrets.ts +0 -102
  87. package/src/computeServer/types.ts +0 -74
  88. package/src/computeServer/utils.ts +0 -112
  89. package/src/config.ts +0 -99
  90. package/src/context.ts +0 -80
  91. package/src/data/index.ts +0 -1
  92. package/src/data/interface.ts +0 -70
  93. package/src/definitions/index.ts +0 -26
  94. package/src/definitions/interface.ts +0 -87
  95. package/src/definitions/paths.ts +0 -31
  96. package/src/definitions/schemas.ts +0 -64
  97. package/src/definitions/types.ts +0 -111
  98. package/src/errors/interface.ts +0 -45
  99. package/src/errors.ts +0 -16
  100. package/src/events/audit.ts +0 -67
  101. package/src/events/index.ts +0 -9
  102. package/src/events/interface.ts +0 -102
  103. package/src/index.ts +0 -247
  104. package/src/invites/index.ts +0 -2
  105. package/src/invites/interface.ts +0 -38
  106. package/src/invites/types.ts +0 -39
  107. package/src/metrics/interface.ts +0 -86
  108. package/src/organizations/index.ts +0 -23
  109. package/src/organizations/interface.ts +0 -68
  110. package/src/organizations/paths.ts +0 -45
  111. package/src/organizations/schemas.ts +0 -61
  112. package/src/organizations/types.ts +0 -41
  113. package/src/pagination.ts +0 -45
  114. package/src/permissions/index.ts +0 -3
  115. package/src/permissions/interface.ts +0 -60
  116. package/src/permissions/types.ts +0 -21
  117. package/src/platformProjects/index.ts +0 -3
  118. package/src/platformProjects/interface.ts +0 -27
  119. package/src/platformProjects/schemas.ts +0 -13
  120. package/src/platformProjects/types.ts +0 -22
  121. package/src/projects/index.ts +0 -4
  122. package/src/projects/interface.ts +0 -58
  123. package/src/projects/schemas.ts +0 -28
  124. package/src/projects/types.ts +0 -36
  125. package/src/shareLinks/index.ts +0 -5
  126. package/src/shareLinks/interface.ts +0 -35
  127. package/src/shareLinks/schemas.ts +0 -21
  128. package/src/shareLinks/types.ts +0 -34
  129. package/src/storage/assetClasses.ts +0 -134
  130. package/src/storage/cacheBust.ts +0 -26
  131. package/src/storage/image.ts +0 -82
  132. package/src/storage/index.ts +0 -12
  133. package/src/storage/interface.ts +0 -27
  134. package/src/testing/index.ts +0 -47
  135. package/src/testing/suites/authProviderSuite.ts +0 -207
  136. package/src/testing/suites/computeServerStoreSuite.ts +0 -195
  137. package/src/testing/suites/definitionStoreSuite.ts +0 -630
  138. package/src/testing/suites/emailLinkAuthSuite.ts +0 -83
  139. package/src/testing/suites/eventSinkSuite.ts +0 -379
  140. package/src/testing/suites/helpers.ts +0 -87
  141. package/src/testing/suites/inviteStoreSuite.ts +0 -143
  142. package/src/testing/suites/orgStoreSuite.ts +0 -429
  143. package/src/testing/suites/platformPermissionStoreSuite.ts +0 -196
  144. package/src/testing/suites/platformProjectGrantStoreSuite.ts +0 -166
  145. package/src/testing/suites/projectStoreSuite.ts +0 -381
  146. package/src/testing/suites/shareLinkStoreSuite.ts +0 -203
  147. package/src/testing/suites/solveMetricSinkSuite.ts +0 -135
  148. package/src/testing/suites/storageProviderSuite.ts +0 -196
  149. package/src/testing/suites/userProfileStoreSuite.ts +0 -134
  150. package/src/userProfile/index.ts +0 -3
  151. package/src/userProfile/interface.ts +0 -48
  152. package/src/userProfile/types.ts +0 -24
  153. package/src/utils/audit.ts +0 -46
  154. package/src/utils/index.ts +0 -2
@@ -1,195 +0,0 @@
1
- /**
2
- * Adapter conformance suite for IComputeServerStore.
3
- *
4
- * Architecture spec §4.8 — servers are scoped (platform vs. org-private), with a global
5
- * `defaultServerId` and per-org `orgDefaults`. The store surface exposes
6
- * scope-targeted mutations; visibility filtering is done by callers via
7
- * the pure helpers in `@selvajs/platform`.
8
- */
9
-
10
- import { describe, it, expect } from 'vitest';
11
- import type { IComputeServerStore } from '../../computeServer/interface.js';
12
- import type {
13
- ComputeServerConfig,
14
- OrgComputeServer,
15
- PlatformComputeServer
16
- } from '../../computeServer/types.js';
17
- import { isOrgServer, isPlatformServer } from '../../computeServer/types.js';
18
- import { SYSTEM_CONTEXT } from '../../context.js';
19
- import { makeUuid } from './helpers.js';
20
-
21
- export interface ComputeServerStoreConformanceOptions {
22
- name: string;
23
- createStore: () => Promise<IComputeServerStore> | IComputeServerStore;
24
- /**
25
- * Optional hook adapters with FK constraints use to seed an `orgs` row
26
- * before the suite writes an org-scoped compute config that FK-references
27
- * it. Adapters without org FKs (local JSON) can omit this.
28
- */
29
- seedOrg?: (orgId: string) => Promise<void>;
30
- }
31
-
32
- function platformServer(
33
- overrides: Partial<Omit<PlatformComputeServer, 'scope'>> = {}
34
- ): PlatformComputeServer {
35
- return {
36
- id: overrides.id ?? makeUuid(),
37
- scope: 'platform',
38
- sharedWith: overrides.sharedWith ?? 'all',
39
- label: overrides.label ?? 'Test Server',
40
- serverUrl: overrides.serverUrl ?? 'http://localhost:5000',
41
- apiKey: overrides.apiKey,
42
- timeoutMs: overrides.timeoutMs,
43
- retryCount: overrides.retryCount
44
- };
45
- }
46
-
47
- function orgServer(
48
- ownerOrgId: string,
49
- overrides: Partial<Omit<OrgComputeServer, 'scope' | 'ownerOrgId'>> = {}
50
- ): OrgComputeServer {
51
- return {
52
- id: overrides.id ?? makeUuid(),
53
- scope: 'org',
54
- ownerOrgId,
55
- label: overrides.label ?? 'Org Server',
56
- serverUrl: overrides.serverUrl ?? 'http://localhost:5001',
57
- apiKey: overrides.apiKey,
58
- timeoutMs: overrides.timeoutMs,
59
- retryCount: overrides.retryCount
60
- };
61
- }
62
-
63
- export function runComputeServerStoreConformance(opts: ComputeServerStoreConformanceOptions): void {
64
- const { name, createStore, seedOrg } = opts;
65
- const seed = async (): Promise<string> => {
66
- const id = makeUuid();
67
- if (seedOrg) await seedOrg(id);
68
- return id;
69
- };
70
-
71
- describe(`IComputeServerStore conformance: ${name}`, () => {
72
- it('savePlatformServers + getConfig round-trips servers and defaultServerId', async () => {
73
- const store = await createStore();
74
- const s1 = platformServer({ label: 'Primary' });
75
- const s2 = platformServer({ label: 'Secondary', apiKey: 'secret' });
76
- await store.savePlatformServers(SYSTEM_CONTEXT, [s1, s2], s1.id);
77
-
78
- const got = await store.getConfig(SYSTEM_CONTEXT);
79
- const platformIds = got.servers.filter(isPlatformServer).map((s) => s.id);
80
- expect(platformIds.sort()).toEqual([s1.id, s2.id].sort());
81
- expect(got.defaultServerId).toBe(s1.id);
82
- });
83
-
84
- it('savePlatformServers replaces the previous platform set', async () => {
85
- const store = await createStore();
86
- await store.savePlatformServers(
87
- SYSTEM_CONTEXT,
88
- [platformServer({ label: 'Old' })],
89
- undefined
90
- );
91
-
92
- const newS = platformServer({ label: 'New' });
93
- await store.savePlatformServers(SYSTEM_CONTEXT, [newS], newS.id);
94
-
95
- const got = await store.getConfig(SYSTEM_CONTEXT);
96
- const platformIds = got.servers.filter(isPlatformServer).map((s) => s.id);
97
- expect(platformIds).toEqual([newS.id]);
98
- });
99
-
100
- it('getConfig on empty returns an empty servers list', async () => {
101
- const store = await createStore();
102
- const got = await store.getConfig(SYSTEM_CONTEXT);
103
- expect(Array.isArray(got.servers)).toBe(true);
104
- });
105
-
106
- // ============================================================================
107
- // Org-private servers + orgDefaults (Architecture spec §4.8)
108
- // ============================================================================
109
-
110
- it('saveOrgServers stores rows owned by the org', async () => {
111
- const store = await createStore();
112
- const orgId = await seed();
113
- const s = orgServer(orgId, { label: "Org's BYO" });
114
- await store.saveOrgServers(SYSTEM_CONTEXT, orgId, [s], s.id);
115
-
116
- const got = await store.getConfig(SYSTEM_CONTEXT);
117
- const ownRows = got.servers.filter(
118
- (row): row is OrgComputeServer => isOrgServer(row) && row.ownerOrgId === orgId
119
- );
120
- expect(ownRows.map((r) => r.id)).toEqual([s.id]);
121
- expect(got.orgDefaults?.[orgId]).toBe(s.id);
122
- });
123
-
124
- it('saveOrgServers does not clobber platform rows (and vice versa)', async () => {
125
- const store = await createStore();
126
- const orgId = await seed();
127
- const platS = platformServer({ label: 'Platform' });
128
- const orgS = orgServer(orgId, { label: 'Org' });
129
-
130
- await store.savePlatformServers(SYSTEM_CONTEXT, [platS], platS.id);
131
- await store.saveOrgServers(SYSTEM_CONTEXT, orgId, [orgS], orgS.id);
132
-
133
- // Replacing the platform set should leave org rows untouched.
134
- const replacement = platformServer({ label: 'Replacement' });
135
- await store.savePlatformServers(SYSTEM_CONTEXT, [replacement], replacement.id);
136
-
137
- const got = await store.getConfig(SYSTEM_CONTEXT);
138
- const platformIds = got.servers.filter(isPlatformServer).map((s) => s.id);
139
- expect(platformIds).toEqual([replacement.id]);
140
- const orgIds = got.servers
141
- .filter((s): s is OrgComputeServer => isOrgServer(s) && s.ownerOrgId === orgId)
142
- .map((s) => s.id);
143
- expect(orgIds).toEqual([orgS.id]);
144
- expect(got.defaultServerId).toBe(replacement.id);
145
- expect(got.orgDefaults?.[orgId]).toBe(orgS.id);
146
- });
147
-
148
- it('setOrgDefault updates and clears the per-org default', async () => {
149
- const store = await createStore();
150
- const orgId = await seed();
151
- const s = orgServer(orgId);
152
- await store.saveOrgServers(SYSTEM_CONTEXT, orgId, [s]);
153
-
154
- await store.setOrgDefault(SYSTEM_CONTEXT, orgId, s.id);
155
- let got = await store.getConfig(SYSTEM_CONTEXT);
156
- expect(got.orgDefaults?.[orgId]).toBe(s.id);
157
-
158
- await store.setOrgDefault(SYSTEM_CONTEXT, orgId, null);
159
- got = await store.getConfig(SYSTEM_CONTEXT);
160
- expect(got.orgDefaults?.[orgId]).toBeUndefined();
161
- });
162
-
163
- it('deleteByOrg removes org-private rows and the orgDefaults entry', async () => {
164
- const store = await createStore();
165
- const orgId = await seed();
166
- const orgS = orgServer(orgId);
167
- await store.saveOrgServers(SYSTEM_CONTEXT, orgId, [orgS], orgS.id);
168
-
169
- await store.deleteByOrg(SYSTEM_CONTEXT, orgId);
170
-
171
- const got = await store.getConfig(SYSTEM_CONTEXT);
172
- const remaining = got.servers.filter(
173
- (s): s is ComputeServerConfig => isOrgServer(s) && s.ownerOrgId === orgId
174
- );
175
- expect(remaining).toEqual([]);
176
- expect(got.orgDefaults?.[orgId]).toBeUndefined();
177
- });
178
-
179
- it('deleteByOrg strips this org from platform sharedWith allowlists', async () => {
180
- const store = await createStore();
181
- const orgId = await seed();
182
- const otherOrgId = await seed();
183
- const platS = platformServer({ sharedWith: [orgId, otherOrgId] });
184
- await store.savePlatformServers(SYSTEM_CONTEXT, [platS], platS.id);
185
-
186
- await store.deleteByOrg(SYSTEM_CONTEXT, orgId);
187
-
188
- const got = await store.getConfig(SYSTEM_CONTEXT);
189
- const found = got.servers.find(
190
- (s): s is PlatformComputeServer => isPlatformServer(s) && s.id === platS.id
191
- );
192
- expect(found?.sharedWith).toEqual([otherOrgId]);
193
- });
194
- });
195
- }