@selvajs/platform 0.14.3-beta.0 → 0.15.0-beta.1

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 (145) hide show
  1. package/LICENSE +1 -1
  2. package/dist/auth.d.ts +60 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +12 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/compute.d.ts +47 -0
  7. package/dist/compute.d.ts.map +1 -0
  8. package/dist/compute.js +11 -0
  9. package/dist/compute.js.map +1 -0
  10. package/dist/data/interface.d.ts +33 -0
  11. package/dist/data/interface.d.ts.map +1 -1
  12. package/dist/definitions/interface.d.ts +10 -0
  13. package/dist/definitions/interface.d.ts.map +1 -1
  14. package/dist/definitions/schemas.d.ts +1 -0
  15. package/dist/definitions/schemas.d.ts.map +1 -1
  16. package/dist/definitions/schemas.js +3 -0
  17. package/dist/definitions/schemas.js.map +1 -1
  18. package/dist/definitions/service.d.ts +62 -0
  19. package/dist/definitions/service.d.ts.map +1 -0
  20. package/dist/definitions/service.js +149 -0
  21. package/dist/definitions/service.js.map +1 -0
  22. package/dist/definitions/types.d.ts +24 -1
  23. package/dist/definitions/types.d.ts.map +1 -1
  24. package/dist/definitions.d.ts +146 -0
  25. package/dist/definitions.d.ts.map +1 -0
  26. package/dist/definitions.js +23 -0
  27. package/dist/definitions.js.map +1 -0
  28. package/dist/events/interface.d.ts +23 -0
  29. package/dist/events/interface.d.ts.map +1 -1
  30. package/dist/events/interface.js.map +1 -1
  31. package/dist/index.d.ts +3 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/invites/schemas.d.ts +24 -0
  36. package/dist/invites/schemas.d.ts.map +1 -0
  37. package/dist/invites/schemas.js +17 -0
  38. package/dist/invites/schemas.js.map +1 -0
  39. package/dist/metrics/interface.d.ts +6 -0
  40. package/dist/metrics/interface.d.ts.map +1 -1
  41. package/dist/metrics/interface.js.map +1 -1
  42. package/dist/organizations.d.ts +93 -0
  43. package/dist/organizations.d.ts.map +1 -0
  44. package/dist/organizations.js +14 -0
  45. package/dist/organizations.js.map +1 -0
  46. package/dist/solveCache/interface.d.ts +86 -0
  47. package/dist/solveCache/interface.d.ts.map +1 -0
  48. package/dist/solveCache/interface.js +12 -0
  49. package/dist/solveCache/interface.js.map +1 -0
  50. package/dist/testing/adapterSuite.d.ts +33 -0
  51. package/dist/testing/adapterSuite.d.ts.map +1 -0
  52. package/dist/testing/adapterSuite.js +166 -0
  53. package/dist/testing/adapterSuite.js.map +1 -0
  54. package/dist/testing/suites/definitionStoreSuite.d.ts.map +1 -1
  55. package/dist/testing/suites/definitionStoreSuite.js +57 -0
  56. package/dist/testing/suites/definitionStoreSuite.js.map +1 -1
  57. package/dist/testing/suites/eventSinkSuite.js +1 -0
  58. package/dist/testing/suites/eventSinkSuite.js.map +1 -1
  59. package/dist/testing/suites/platformPermissionStoreSuite.d.ts +9 -0
  60. package/dist/testing/suites/platformPermissionStoreSuite.d.ts.map +1 -1
  61. package/dist/testing/suites/platformPermissionStoreSuite.js +34 -1
  62. package/dist/testing/suites/platformPermissionStoreSuite.js.map +1 -1
  63. package/dist/testing/suites/runner.d.ts +21 -0
  64. package/dist/testing/suites/runner.d.ts.map +1 -0
  65. package/dist/testing/suites/runner.js +7 -0
  66. package/dist/testing/suites/runner.js.map +1 -0
  67. package/package.json +9 -24
  68. package/src/access/index.ts +0 -23
  69. package/src/access/rules.ts +0 -276
  70. package/src/auth/index.ts +0 -8
  71. package/src/auth/interface.ts +0 -279
  72. package/src/auth/types.ts +0 -32
  73. package/src/bindings/index.ts +0 -2
  74. package/src/bindings/interface.ts +0 -61
  75. package/src/computeServer/index.ts +0 -28
  76. package/src/computeServer/interface.ts +0 -73
  77. package/src/computeServer/secrets.ts +0 -102
  78. package/src/computeServer/types.ts +0 -74
  79. package/src/computeServer/utils.ts +0 -112
  80. package/src/config.ts +0 -99
  81. package/src/context.ts +0 -80
  82. package/src/data/index.ts +0 -1
  83. package/src/data/interface.ts +0 -70
  84. package/src/definitions/index.ts +0 -26
  85. package/src/definitions/interface.ts +0 -87
  86. package/src/definitions/paths.ts +0 -31
  87. package/src/definitions/schemas.ts +0 -64
  88. package/src/definitions/types.ts +0 -111
  89. package/src/errors/interface.ts +0 -45
  90. package/src/errors.ts +0 -16
  91. package/src/events/audit.ts +0 -67
  92. package/src/events/index.ts +0 -9
  93. package/src/events/interface.ts +0 -102
  94. package/src/index.ts +0 -247
  95. package/src/invites/index.ts +0 -2
  96. package/src/invites/interface.ts +0 -38
  97. package/src/invites/types.ts +0 -39
  98. package/src/metrics/interface.ts +0 -86
  99. package/src/organizations/index.ts +0 -23
  100. package/src/organizations/interface.ts +0 -68
  101. package/src/organizations/paths.ts +0 -45
  102. package/src/organizations/schemas.ts +0 -61
  103. package/src/organizations/types.ts +0 -41
  104. package/src/pagination.ts +0 -45
  105. package/src/permissions/index.ts +0 -3
  106. package/src/permissions/interface.ts +0 -60
  107. package/src/permissions/types.ts +0 -21
  108. package/src/platformProjects/index.ts +0 -3
  109. package/src/platformProjects/interface.ts +0 -27
  110. package/src/platformProjects/schemas.ts +0 -13
  111. package/src/platformProjects/types.ts +0 -22
  112. package/src/projects/index.ts +0 -4
  113. package/src/projects/interface.ts +0 -58
  114. package/src/projects/schemas.ts +0 -28
  115. package/src/projects/types.ts +0 -36
  116. package/src/shareLinks/index.ts +0 -5
  117. package/src/shareLinks/interface.ts +0 -35
  118. package/src/shareLinks/schemas.ts +0 -21
  119. package/src/shareLinks/types.ts +0 -34
  120. package/src/storage/assetClasses.ts +0 -134
  121. package/src/storage/cacheBust.ts +0 -26
  122. package/src/storage/image.ts +0 -82
  123. package/src/storage/index.ts +0 -12
  124. package/src/storage/interface.ts +0 -27
  125. package/src/testing/index.ts +0 -47
  126. package/src/testing/suites/authProviderSuite.ts +0 -207
  127. package/src/testing/suites/computeServerStoreSuite.ts +0 -195
  128. package/src/testing/suites/definitionStoreSuite.ts +0 -630
  129. package/src/testing/suites/emailLinkAuthSuite.ts +0 -83
  130. package/src/testing/suites/eventSinkSuite.ts +0 -379
  131. package/src/testing/suites/helpers.ts +0 -87
  132. package/src/testing/suites/inviteStoreSuite.ts +0 -143
  133. package/src/testing/suites/orgStoreSuite.ts +0 -429
  134. package/src/testing/suites/platformPermissionStoreSuite.ts +0 -196
  135. package/src/testing/suites/platformProjectGrantStoreSuite.ts +0 -166
  136. package/src/testing/suites/projectStoreSuite.ts +0 -381
  137. package/src/testing/suites/shareLinkStoreSuite.ts +0 -203
  138. package/src/testing/suites/solveMetricSinkSuite.ts +0 -135
  139. package/src/testing/suites/storageProviderSuite.ts +0 -196
  140. package/src/testing/suites/userProfileStoreSuite.ts +0 -134
  141. package/src/userProfile/index.ts +0 -3
  142. package/src/userProfile/interface.ts +0 -48
  143. package/src/userProfile/types.ts +0 -24
  144. package/src/utils/audit.ts +0 -46
  145. 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
- }