@stratum-hq/core 0.1.0

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 (81) hide show
  1. package/dist/__tests__/ancestry.test.d.ts +2 -0
  2. package/dist/__tests__/ancestry.test.d.ts.map +1 -0
  3. package/dist/__tests__/ancestry.test.js +132 -0
  4. package/dist/__tests__/ancestry.test.js.map +1 -0
  5. package/dist/__tests__/config-types.test.d.ts +2 -0
  6. package/dist/__tests__/config-types.test.d.ts.map +1 -0
  7. package/dist/__tests__/config-types.test.js +143 -0
  8. package/dist/__tests__/config-types.test.js.map +1 -0
  9. package/dist/__tests__/errors.test.d.ts +2 -0
  10. package/dist/__tests__/errors.test.d.ts.map +1 -0
  11. package/dist/__tests__/errors.test.js +113 -0
  12. package/dist/__tests__/errors.test.js.map +1 -0
  13. package/dist/__tests__/isolation.test.d.ts +2 -0
  14. package/dist/__tests__/isolation.test.d.ts.map +1 -0
  15. package/dist/__tests__/isolation.test.js +34 -0
  16. package/dist/__tests__/isolation.test.js.map +1 -0
  17. package/dist/__tests__/validation.test.d.ts +2 -0
  18. package/dist/__tests__/validation.test.d.ts.map +1 -0
  19. package/dist/__tests__/validation.test.js +100 -0
  20. package/dist/__tests__/validation.test.js.map +1 -0
  21. package/dist/__tests__/webhook.test.d.ts +2 -0
  22. package/dist/__tests__/webhook.test.d.ts.map +1 -0
  23. package/dist/__tests__/webhook.test.js +165 -0
  24. package/dist/__tests__/webhook.test.js.map +1 -0
  25. package/dist/constants.d.ts +9 -0
  26. package/dist/constants.d.ts.map +1 -0
  27. package/dist/constants.js +12 -0
  28. package/dist/constants.js.map +1 -0
  29. package/dist/index.d.ts +14 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +102 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/types/api-key.d.ts +5 -0
  34. package/dist/types/api-key.d.ts.map +1 -0
  35. package/dist/types/api-key.js +7 -0
  36. package/dist/types/api-key.js.map +1 -0
  37. package/dist/types/audit.d.ts +81 -0
  38. package/dist/types/audit.d.ts.map +1 -0
  39. package/dist/types/audit.js +30 -0
  40. package/dist/types/audit.js.map +1 -0
  41. package/dist/types/config.d.ts +93 -0
  42. package/dist/types/config.d.ts.map +1 -0
  43. package/dist/types/config.js +22 -0
  44. package/dist/types/config.js.map +1 -0
  45. package/dist/types/consent.d.ts +63 -0
  46. package/dist/types/consent.d.ts.map +1 -0
  47. package/dist/types/consent.js +30 -0
  48. package/dist/types/consent.js.map +1 -0
  49. package/dist/types/isolation.d.ts +9 -0
  50. package/dist/types/isolation.d.ts.map +1 -0
  51. package/dist/types/isolation.js +20 -0
  52. package/dist/types/isolation.js.map +1 -0
  53. package/dist/types/permission.d.ts +101 -0
  54. package/dist/types/permission.d.ts.map +1 -0
  55. package/dist/types/permission.js +41 -0
  56. package/dist/types/permission.js.map +1 -0
  57. package/dist/types/region.d.ts +90 -0
  58. package/dist/types/region.d.ts.map +1 -0
  59. package/dist/types/region.js +39 -0
  60. package/dist/types/region.js.map +1 -0
  61. package/dist/types/tenant.d.ts +148 -0
  62. package/dist/types/tenant.d.ts.map +1 -0
  63. package/dist/types/tenant.js +55 -0
  64. package/dist/types/tenant.js.map +1 -0
  65. package/dist/types/webhook.d.ts +181 -0
  66. package/dist/types/webhook.d.ts.map +1 -0
  67. package/dist/types/webhook.js +65 -0
  68. package/dist/types/webhook.js.map +1 -0
  69. package/dist/utils/ancestry.d.ts +53 -0
  70. package/dist/utils/ancestry.d.ts.map +1 -0
  71. package/dist/utils/ancestry.js +100 -0
  72. package/dist/utils/ancestry.js.map +1 -0
  73. package/dist/utils/errors.d.ts +88 -0
  74. package/dist/utils/errors.d.ts.map +1 -0
  75. package/dist/utils/errors.js +173 -0
  76. package/dist/utils/errors.js.map +1 -0
  77. package/dist/utils/validation.d.ts +21 -0
  78. package/dist/utils/validation.d.ts.map +1 -0
  79. package/dist/utils/validation.js +19 -0
  80. package/dist/utils/validation.js.map +1 -0
  81. package/package.json +35 -0
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const webhook_js_1 = require("../types/webhook.js");
5
+ (0, vitest_1.describe)("TenantEvent", () => {
6
+ (0, vitest_1.it)("has correct string values", () => {
7
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.TENANT_CREATED).toBe("tenant.created");
8
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.TENANT_UPDATED).toBe("tenant.updated");
9
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.TENANT_DELETED).toBe("tenant.deleted");
10
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.TENANT_MOVED).toBe("tenant.moved");
11
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.CONFIG_UPDATED).toBe("config.updated");
12
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.CONFIG_DELETED).toBe("config.deleted");
13
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.PERMISSION_CREATED).toBe("permission.created");
14
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.PERMISSION_UPDATED).toBe("permission.updated");
15
+ (0, vitest_1.expect)(webhook_js_1.TenantEvent.PERMISSION_DELETED).toBe("permission.deleted");
16
+ });
17
+ (0, vitest_1.it)("has 9 event types", () => {
18
+ (0, vitest_1.expect)(Object.keys(webhook_js_1.TenantEvent)).toHaveLength(9);
19
+ });
20
+ });
21
+ (0, vitest_1.describe)("WebhookSchema", () => {
22
+ const validWebhook = {
23
+ id: "550e8400-e29b-41d4-a716-446655440000",
24
+ tenant_id: "550e8400-e29b-41d4-a716-446655440001",
25
+ url: "https://example.com/webhook",
26
+ secret_hash: "abc123def456",
27
+ events: ["tenant.created", "tenant.updated"],
28
+ active: true,
29
+ created_at: "2024-01-01T00:00:00.000Z",
30
+ updated_at: "2024-01-01T00:00:00.000Z",
31
+ };
32
+ (0, vitest_1.it)("parses a valid webhook", () => {
33
+ const result = webhook_js_1.WebhookSchema.safeParse(validWebhook);
34
+ (0, vitest_1.expect)(result.success).toBe(true);
35
+ });
36
+ (0, vitest_1.it)("accepts null tenant_id (global webhook)", () => {
37
+ const result = webhook_js_1.WebhookSchema.safeParse({ ...validWebhook, tenant_id: null });
38
+ (0, vitest_1.expect)(result.success).toBe(true);
39
+ });
40
+ (0, vitest_1.it)("accepts optional description", () => {
41
+ const result = webhook_js_1.WebhookSchema.safeParse({ ...validWebhook, description: "My webhook" });
42
+ (0, vitest_1.expect)(result.success).toBe(true);
43
+ if (result.success) {
44
+ (0, vitest_1.expect)(result.data.description).toBe("My webhook");
45
+ }
46
+ });
47
+ (0, vitest_1.it)("rejects description over 255 chars", () => {
48
+ const result = webhook_js_1.WebhookSchema.safeParse({ ...validWebhook, description: "x".repeat(256) });
49
+ (0, vitest_1.expect)(result.success).toBe(false);
50
+ });
51
+ (0, vitest_1.it)("rejects invalid URL", () => {
52
+ const result = webhook_js_1.WebhookSchema.safeParse({ ...validWebhook, url: "not-a-url" });
53
+ (0, vitest_1.expect)(result.success).toBe(false);
54
+ });
55
+ (0, vitest_1.it)("rejects invalid UUID for id", () => {
56
+ const result = webhook_js_1.WebhookSchema.safeParse({ ...validWebhook, id: "not-a-uuid" });
57
+ (0, vitest_1.expect)(result.success).toBe(false);
58
+ });
59
+ });
60
+ (0, vitest_1.describe)("CreateWebhookInputSchema", () => {
61
+ const validInput = {
62
+ tenant_id: null,
63
+ url: "https://example.com/webhook",
64
+ secret: "mysecretatleast16chars",
65
+ events: [webhook_js_1.TenantEvent.TENANT_CREATED],
66
+ };
67
+ (0, vitest_1.it)("parses valid input", () => {
68
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse(validInput);
69
+ (0, vitest_1.expect)(result.success).toBe(true);
70
+ });
71
+ (0, vitest_1.it)("rejects secret shorter than 16 chars", () => {
72
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse({ ...validInput, secret: "tooshort" });
73
+ (0, vitest_1.expect)(result.success).toBe(false);
74
+ });
75
+ (0, vitest_1.it)("rejects secret longer than 255 chars", () => {
76
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse({ ...validInput, secret: "x".repeat(256) });
77
+ (0, vitest_1.expect)(result.success).toBe(false);
78
+ });
79
+ (0, vitest_1.it)("rejects empty events array", () => {
80
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse({ ...validInput, events: [] });
81
+ (0, vitest_1.expect)(result.success).toBe(false);
82
+ });
83
+ (0, vitest_1.it)("rejects invalid event type", () => {
84
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse({ ...validInput, events: ["unknown.event"] });
85
+ (0, vitest_1.expect)(result.success).toBe(false);
86
+ });
87
+ (0, vitest_1.it)("rejects invalid URL", () => {
88
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse({ ...validInput, url: "not-a-url-at-all" });
89
+ (0, vitest_1.expect)(result.success).toBe(false);
90
+ });
91
+ (0, vitest_1.it)("defaults tenant_id to null", () => {
92
+ const { tenant_id: _t, ...withoutTenantId } = validInput;
93
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse(withoutTenantId);
94
+ (0, vitest_1.expect)(result.success).toBe(true);
95
+ if (result.success) {
96
+ (0, vitest_1.expect)(result.data.tenant_id).toBeNull();
97
+ }
98
+ });
99
+ (0, vitest_1.it)("accepts a description", () => {
100
+ const result = webhook_js_1.CreateWebhookInputSchema.safeParse({ ...validInput, description: "Test hook" });
101
+ (0, vitest_1.expect)(result.success).toBe(true);
102
+ });
103
+ });
104
+ (0, vitest_1.describe)("UpdateWebhookInputSchema", () => {
105
+ (0, vitest_1.it)("accepts empty object (no-op update)", () => {
106
+ const result = webhook_js_1.UpdateWebhookInputSchema.safeParse({});
107
+ (0, vitest_1.expect)(result.success).toBe(true);
108
+ });
109
+ (0, vitest_1.it)("accepts partial updates", () => {
110
+ const result = webhook_js_1.UpdateWebhookInputSchema.safeParse({ active: false });
111
+ (0, vitest_1.expect)(result.success).toBe(true);
112
+ });
113
+ (0, vitest_1.it)("rejects events with invalid event type", () => {
114
+ const result = webhook_js_1.UpdateWebhookInputSchema.safeParse({ events: ["bad.event"] });
115
+ (0, vitest_1.expect)(result.success).toBe(false);
116
+ });
117
+ (0, vitest_1.it)("rejects empty events array", () => {
118
+ const result = webhook_js_1.UpdateWebhookInputSchema.safeParse({ events: [] });
119
+ (0, vitest_1.expect)(result.success).toBe(false);
120
+ });
121
+ });
122
+ (0, vitest_1.describe)("WebhookDeliveryStatus", () => {
123
+ (0, vitest_1.it)("has correct values", () => {
124
+ (0, vitest_1.expect)(webhook_js_1.WebhookDeliveryStatus.PENDING).toBe("pending");
125
+ (0, vitest_1.expect)(webhook_js_1.WebhookDeliveryStatus.SUCCESS).toBe("success");
126
+ (0, vitest_1.expect)(webhook_js_1.WebhookDeliveryStatus.FAILED).toBe("failed");
127
+ });
128
+ });
129
+ (0, vitest_1.describe)("WebhookDeliverySchema", () => {
130
+ const validDelivery = {
131
+ id: "550e8400-e29b-41d4-a716-446655440000",
132
+ webhook_id: "550e8400-e29b-41d4-a716-446655440001",
133
+ event_id: "550e8400-e29b-41d4-a716-446655440002",
134
+ status: "pending",
135
+ attempts: 0,
136
+ next_retry_at: null,
137
+ last_error: null,
138
+ response_code: null,
139
+ created_at: "2024-01-01T00:00:00.000Z",
140
+ completed_at: null,
141
+ };
142
+ (0, vitest_1.it)("parses a valid pending delivery", () => {
143
+ const result = webhook_js_1.WebhookDeliverySchema.safeParse(validDelivery);
144
+ (0, vitest_1.expect)(result.success).toBe(true);
145
+ });
146
+ (0, vitest_1.it)("parses a successful delivery", () => {
147
+ const result = webhook_js_1.WebhookDeliverySchema.safeParse({
148
+ ...validDelivery,
149
+ status: "success",
150
+ attempts: 1,
151
+ response_code: 200,
152
+ completed_at: "2024-01-01T00:00:01.000Z",
153
+ });
154
+ (0, vitest_1.expect)(result.success).toBe(true);
155
+ });
156
+ (0, vitest_1.it)("rejects invalid status", () => {
157
+ const result = webhook_js_1.WebhookDeliverySchema.safeParse({ ...validDelivery, status: "retrying" });
158
+ (0, vitest_1.expect)(result.success).toBe(false);
159
+ });
160
+ (0, vitest_1.it)("rejects negative attempts", () => {
161
+ const result = webhook_js_1.WebhookDeliverySchema.safeParse({ ...validDelivery, attempts: -1 });
162
+ (0, vitest_1.expect)(result.success).toBe(false);
163
+ });
164
+ });
165
+ //# sourceMappingURL=webhook.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.test.js","sourceRoot":"","sources":["../../src/__tests__/webhook.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const MAX_TREE_DEPTH = 20;
2
+ export declare const MAX_SLUG_LENGTH = 63;
3
+ export declare const DEFAULT_CACHE_TTL_MS = 60000;
4
+ export declare const DEFAULT_PAGE_SIZE = 50;
5
+ export declare const MAX_PAGE_SIZE = 100;
6
+ export declare const API_KEY_PREFIX = "sk_live_";
7
+ export declare const API_KEY_BYTES = 32;
8
+ export declare const TENANT_HEADER = "X-Tenant-ID";
9
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,aAAa,gBAAgB,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TENANT_HEADER = exports.API_KEY_BYTES = exports.API_KEY_PREFIX = exports.MAX_PAGE_SIZE = exports.DEFAULT_PAGE_SIZE = exports.DEFAULT_CACHE_TTL_MS = exports.MAX_SLUG_LENGTH = exports.MAX_TREE_DEPTH = void 0;
4
+ exports.MAX_TREE_DEPTH = 20;
5
+ exports.MAX_SLUG_LENGTH = 63;
6
+ exports.DEFAULT_CACHE_TTL_MS = 60_000;
7
+ exports.DEFAULT_PAGE_SIZE = 50;
8
+ exports.MAX_PAGE_SIZE = 100;
9
+ exports.API_KEY_PREFIX = "sk_live_";
10
+ exports.API_KEY_BYTES = 32;
11
+ exports.TENANT_HEADER = "X-Tenant-ID";
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,EAAE,CAAC;AACpB,QAAA,eAAe,GAAG,EAAE,CAAC;AACrB,QAAA,oBAAoB,GAAG,MAAM,CAAC;AAC9B,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,QAAA,aAAa,GAAG,GAAG,CAAC;AACpB,QAAA,cAAc,GAAG,UAAU,CAAC;AAC5B,QAAA,aAAa,GAAG,EAAE,CAAC;AACnB,QAAA,aAAa,GAAG,aAAa,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { ConsentPurpose, ConsentRecordSchema, GrantConsentInputSchema, type ConsentRecord, type GrantConsentInput, } from "./types/consent.js";
2
+ export { API_KEY_SCOPES, ApiKeyScopeSchema, type ApiKeyScope, } from "./types/api-key.js";
3
+ export { AuditEntrySchema, AuditLogQuerySchema, type AuditContext, type AuditEntry, type AuditLogQuery, } from "./types/audit.js";
4
+ export { TenantEvent, WebhookSchema, CreateWebhookInputSchema, UpdateWebhookInputSchema, WebhookEventSchema, WebhookDeliveryStatus, WebhookDeliverySchema, type Webhook, type CreateWebhookInput, type UpdateWebhookInput, type WebhookEvent, type WebhookDelivery, } from "./types/webhook.js";
5
+ export { RegionStatus, RegionSchema, CreateRegionInputSchema, UpdateRegionInputSchema, MigrateRegionInputSchema, type Region, type CreateRegionInput, type UpdateRegionInput, type MigrateRegionInput, } from "./types/region.js";
6
+ export { IsolationStrategy, TenantStatus, TenantNodeSchema, CreateTenantInputSchema, UpdateTenantInputSchema, MoveTenantInputSchema, type TenantNode, type CreateTenantInput, type UpdateTenantInput, type MoveTenantInput, type TenantContext, type TenantContextLegacy, type ResolvedPermission, } from "./types/tenant.js";
7
+ export { PermissionMode, RevocationMode, PermissionPolicySchema, CreatePermissionInputSchema, UpdatePermissionInputSchema, type PermissionPolicy, type CreatePermissionInput, type UpdatePermissionInput, } from "./types/permission.js";
8
+ export { ConfigEntrySchema, SetConfigInputSchema, type ConfigEntry, type SetConfigInput, type ResolvedConfigEntry, type ResolvedConfig, type BatchSetConfigKeyResult, type BatchSetConfigResult, type ConfigDiffEntry, type ConfigDiffItem, type ConfigDiffTenantInfo, type ConfigDiff, } from "./types/config.js";
9
+ export { SUPPORTED_ISOLATION_STRATEGIES_V1, isSupportedIsolationStrategy, } from "./types/isolation.js";
10
+ export { parseAncestryPath, buildAncestryPath, getDepth, isAncestorOf, isDescendantOf, getParentPath, appendToPath, getAncestorIds, getSelfId, } from "./utils/ancestry.js";
11
+ export { SlugSchema, UUIDSchema, PaginationSchema, validateSlug, type PaginationInput, type PaginatedResult, } from "./utils/validation.js";
12
+ export { ErrorCode, StratumError, TenantNotFoundError, TenantAlreadyExistsError, TenantHasChildrenError, TenantCycleDetectedError, TenantArchivedError, TenantContextNotFoundError, IsolationViolationError, IsolationStrategyUnsupportedError, PermissionLockedError, PermissionNotFoundError, PermissionRevocationDeniedError, ConfigLockedError, ConfigNotFoundError, ValidationError, UnauthorizedError, ForbiddenError, WebhookNotFoundError, WebhookDeliveryError, } from "./utils/errors.js";
13
+ export { MAX_TREE_DEPTH, MAX_SLUG_LENGTH, DEFAULT_CACHE_TTL_MS, DEFAULT_PAGE_SIZE, MAX_PAGE_SIZE, API_KEY_PREFIX, API_KEY_BYTES, TENANT_HEADER, } from "./constants.js";
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,WAAW,EACX,aAAa,EACb,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,UAAU,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,iCAAiC,EACjC,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,cAAc,EACd,SAAS,GACV,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EACvB,iCAAiC,EACjC,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TenantNotFoundError = exports.StratumError = exports.ErrorCode = exports.validateSlug = exports.PaginationSchema = exports.UUIDSchema = exports.SlugSchema = exports.getSelfId = exports.getAncestorIds = exports.appendToPath = exports.getParentPath = exports.isDescendantOf = exports.isAncestorOf = exports.getDepth = exports.buildAncestryPath = exports.parseAncestryPath = exports.isSupportedIsolationStrategy = exports.SUPPORTED_ISOLATION_STRATEGIES_V1 = exports.SetConfigInputSchema = exports.ConfigEntrySchema = exports.UpdatePermissionInputSchema = exports.CreatePermissionInputSchema = exports.PermissionPolicySchema = exports.RevocationMode = exports.PermissionMode = exports.MoveTenantInputSchema = exports.UpdateTenantInputSchema = exports.CreateTenantInputSchema = exports.TenantNodeSchema = exports.TenantStatus = exports.IsolationStrategy = exports.MigrateRegionInputSchema = exports.UpdateRegionInputSchema = exports.CreateRegionInputSchema = exports.RegionSchema = exports.RegionStatus = exports.WebhookDeliverySchema = exports.WebhookDeliveryStatus = exports.WebhookEventSchema = exports.UpdateWebhookInputSchema = exports.CreateWebhookInputSchema = exports.WebhookSchema = exports.TenantEvent = exports.AuditLogQuerySchema = exports.AuditEntrySchema = exports.ApiKeyScopeSchema = exports.API_KEY_SCOPES = exports.GrantConsentInputSchema = exports.ConsentRecordSchema = exports.ConsentPurpose = void 0;
4
+ exports.TENANT_HEADER = exports.API_KEY_BYTES = exports.API_KEY_PREFIX = exports.MAX_PAGE_SIZE = exports.DEFAULT_PAGE_SIZE = exports.DEFAULT_CACHE_TTL_MS = exports.MAX_SLUG_LENGTH = exports.MAX_TREE_DEPTH = exports.WebhookDeliveryError = exports.WebhookNotFoundError = exports.ForbiddenError = exports.UnauthorizedError = exports.ValidationError = exports.ConfigNotFoundError = exports.ConfigLockedError = exports.PermissionRevocationDeniedError = exports.PermissionNotFoundError = exports.PermissionLockedError = exports.IsolationStrategyUnsupportedError = exports.IsolationViolationError = exports.TenantContextNotFoundError = exports.TenantArchivedError = exports.TenantCycleDetectedError = exports.TenantHasChildrenError = exports.TenantAlreadyExistsError = void 0;
5
+ // Consent types
6
+ var consent_js_1 = require("./types/consent.js");
7
+ Object.defineProperty(exports, "ConsentPurpose", { enumerable: true, get: function () { return consent_js_1.ConsentPurpose; } });
8
+ Object.defineProperty(exports, "ConsentRecordSchema", { enumerable: true, get: function () { return consent_js_1.ConsentRecordSchema; } });
9
+ Object.defineProperty(exports, "GrantConsentInputSchema", { enumerable: true, get: function () { return consent_js_1.GrantConsentInputSchema; } });
10
+ // API Key types
11
+ var api_key_js_1 = require("./types/api-key.js");
12
+ Object.defineProperty(exports, "API_KEY_SCOPES", { enumerable: true, get: function () { return api_key_js_1.API_KEY_SCOPES; } });
13
+ Object.defineProperty(exports, "ApiKeyScopeSchema", { enumerable: true, get: function () { return api_key_js_1.ApiKeyScopeSchema; } });
14
+ // Audit types
15
+ var audit_js_1 = require("./types/audit.js");
16
+ Object.defineProperty(exports, "AuditEntrySchema", { enumerable: true, get: function () { return audit_js_1.AuditEntrySchema; } });
17
+ Object.defineProperty(exports, "AuditLogQuerySchema", { enumerable: true, get: function () { return audit_js_1.AuditLogQuerySchema; } });
18
+ // Webhook types
19
+ var webhook_js_1 = require("./types/webhook.js");
20
+ Object.defineProperty(exports, "TenantEvent", { enumerable: true, get: function () { return webhook_js_1.TenantEvent; } });
21
+ Object.defineProperty(exports, "WebhookSchema", { enumerable: true, get: function () { return webhook_js_1.WebhookSchema; } });
22
+ Object.defineProperty(exports, "CreateWebhookInputSchema", { enumerable: true, get: function () { return webhook_js_1.CreateWebhookInputSchema; } });
23
+ Object.defineProperty(exports, "UpdateWebhookInputSchema", { enumerable: true, get: function () { return webhook_js_1.UpdateWebhookInputSchema; } });
24
+ Object.defineProperty(exports, "WebhookEventSchema", { enumerable: true, get: function () { return webhook_js_1.WebhookEventSchema; } });
25
+ Object.defineProperty(exports, "WebhookDeliveryStatus", { enumerable: true, get: function () { return webhook_js_1.WebhookDeliveryStatus; } });
26
+ Object.defineProperty(exports, "WebhookDeliverySchema", { enumerable: true, get: function () { return webhook_js_1.WebhookDeliverySchema; } });
27
+ // Region types
28
+ var region_js_1 = require("./types/region.js");
29
+ Object.defineProperty(exports, "RegionStatus", { enumerable: true, get: function () { return region_js_1.RegionStatus; } });
30
+ Object.defineProperty(exports, "RegionSchema", { enumerable: true, get: function () { return region_js_1.RegionSchema; } });
31
+ Object.defineProperty(exports, "CreateRegionInputSchema", { enumerable: true, get: function () { return region_js_1.CreateRegionInputSchema; } });
32
+ Object.defineProperty(exports, "UpdateRegionInputSchema", { enumerable: true, get: function () { return region_js_1.UpdateRegionInputSchema; } });
33
+ Object.defineProperty(exports, "MigrateRegionInputSchema", { enumerable: true, get: function () { return region_js_1.MigrateRegionInputSchema; } });
34
+ // Types
35
+ var tenant_js_1 = require("./types/tenant.js");
36
+ Object.defineProperty(exports, "IsolationStrategy", { enumerable: true, get: function () { return tenant_js_1.IsolationStrategy; } });
37
+ Object.defineProperty(exports, "TenantStatus", { enumerable: true, get: function () { return tenant_js_1.TenantStatus; } });
38
+ Object.defineProperty(exports, "TenantNodeSchema", { enumerable: true, get: function () { return tenant_js_1.TenantNodeSchema; } });
39
+ Object.defineProperty(exports, "CreateTenantInputSchema", { enumerable: true, get: function () { return tenant_js_1.CreateTenantInputSchema; } });
40
+ Object.defineProperty(exports, "UpdateTenantInputSchema", { enumerable: true, get: function () { return tenant_js_1.UpdateTenantInputSchema; } });
41
+ Object.defineProperty(exports, "MoveTenantInputSchema", { enumerable: true, get: function () { return tenant_js_1.MoveTenantInputSchema; } });
42
+ var permission_js_1 = require("./types/permission.js");
43
+ Object.defineProperty(exports, "PermissionMode", { enumerable: true, get: function () { return permission_js_1.PermissionMode; } });
44
+ Object.defineProperty(exports, "RevocationMode", { enumerable: true, get: function () { return permission_js_1.RevocationMode; } });
45
+ Object.defineProperty(exports, "PermissionPolicySchema", { enumerable: true, get: function () { return permission_js_1.PermissionPolicySchema; } });
46
+ Object.defineProperty(exports, "CreatePermissionInputSchema", { enumerable: true, get: function () { return permission_js_1.CreatePermissionInputSchema; } });
47
+ Object.defineProperty(exports, "UpdatePermissionInputSchema", { enumerable: true, get: function () { return permission_js_1.UpdatePermissionInputSchema; } });
48
+ var config_js_1 = require("./types/config.js");
49
+ Object.defineProperty(exports, "ConfigEntrySchema", { enumerable: true, get: function () { return config_js_1.ConfigEntrySchema; } });
50
+ Object.defineProperty(exports, "SetConfigInputSchema", { enumerable: true, get: function () { return config_js_1.SetConfigInputSchema; } });
51
+ var isolation_js_1 = require("./types/isolation.js");
52
+ Object.defineProperty(exports, "SUPPORTED_ISOLATION_STRATEGIES_V1", { enumerable: true, get: function () { return isolation_js_1.SUPPORTED_ISOLATION_STRATEGIES_V1; } });
53
+ Object.defineProperty(exports, "isSupportedIsolationStrategy", { enumerable: true, get: function () { return isolation_js_1.isSupportedIsolationStrategy; } });
54
+ // Utilities
55
+ var ancestry_js_1 = require("./utils/ancestry.js");
56
+ Object.defineProperty(exports, "parseAncestryPath", { enumerable: true, get: function () { return ancestry_js_1.parseAncestryPath; } });
57
+ Object.defineProperty(exports, "buildAncestryPath", { enumerable: true, get: function () { return ancestry_js_1.buildAncestryPath; } });
58
+ Object.defineProperty(exports, "getDepth", { enumerable: true, get: function () { return ancestry_js_1.getDepth; } });
59
+ Object.defineProperty(exports, "isAncestorOf", { enumerable: true, get: function () { return ancestry_js_1.isAncestorOf; } });
60
+ Object.defineProperty(exports, "isDescendantOf", { enumerable: true, get: function () { return ancestry_js_1.isDescendantOf; } });
61
+ Object.defineProperty(exports, "getParentPath", { enumerable: true, get: function () { return ancestry_js_1.getParentPath; } });
62
+ Object.defineProperty(exports, "appendToPath", { enumerable: true, get: function () { return ancestry_js_1.appendToPath; } });
63
+ Object.defineProperty(exports, "getAncestorIds", { enumerable: true, get: function () { return ancestry_js_1.getAncestorIds; } });
64
+ Object.defineProperty(exports, "getSelfId", { enumerable: true, get: function () { return ancestry_js_1.getSelfId; } });
65
+ var validation_js_1 = require("./utils/validation.js");
66
+ Object.defineProperty(exports, "SlugSchema", { enumerable: true, get: function () { return validation_js_1.SlugSchema; } });
67
+ Object.defineProperty(exports, "UUIDSchema", { enumerable: true, get: function () { return validation_js_1.UUIDSchema; } });
68
+ Object.defineProperty(exports, "PaginationSchema", { enumerable: true, get: function () { return validation_js_1.PaginationSchema; } });
69
+ Object.defineProperty(exports, "validateSlug", { enumerable: true, get: function () { return validation_js_1.validateSlug; } });
70
+ // Errors
71
+ var errors_js_1 = require("./utils/errors.js");
72
+ Object.defineProperty(exports, "ErrorCode", { enumerable: true, get: function () { return errors_js_1.ErrorCode; } });
73
+ Object.defineProperty(exports, "StratumError", { enumerable: true, get: function () { return errors_js_1.StratumError; } });
74
+ Object.defineProperty(exports, "TenantNotFoundError", { enumerable: true, get: function () { return errors_js_1.TenantNotFoundError; } });
75
+ Object.defineProperty(exports, "TenantAlreadyExistsError", { enumerable: true, get: function () { return errors_js_1.TenantAlreadyExistsError; } });
76
+ Object.defineProperty(exports, "TenantHasChildrenError", { enumerable: true, get: function () { return errors_js_1.TenantHasChildrenError; } });
77
+ Object.defineProperty(exports, "TenantCycleDetectedError", { enumerable: true, get: function () { return errors_js_1.TenantCycleDetectedError; } });
78
+ Object.defineProperty(exports, "TenantArchivedError", { enumerable: true, get: function () { return errors_js_1.TenantArchivedError; } });
79
+ Object.defineProperty(exports, "TenantContextNotFoundError", { enumerable: true, get: function () { return errors_js_1.TenantContextNotFoundError; } });
80
+ Object.defineProperty(exports, "IsolationViolationError", { enumerable: true, get: function () { return errors_js_1.IsolationViolationError; } });
81
+ Object.defineProperty(exports, "IsolationStrategyUnsupportedError", { enumerable: true, get: function () { return errors_js_1.IsolationStrategyUnsupportedError; } });
82
+ Object.defineProperty(exports, "PermissionLockedError", { enumerable: true, get: function () { return errors_js_1.PermissionLockedError; } });
83
+ Object.defineProperty(exports, "PermissionNotFoundError", { enumerable: true, get: function () { return errors_js_1.PermissionNotFoundError; } });
84
+ Object.defineProperty(exports, "PermissionRevocationDeniedError", { enumerable: true, get: function () { return errors_js_1.PermissionRevocationDeniedError; } });
85
+ Object.defineProperty(exports, "ConfigLockedError", { enumerable: true, get: function () { return errors_js_1.ConfigLockedError; } });
86
+ Object.defineProperty(exports, "ConfigNotFoundError", { enumerable: true, get: function () { return errors_js_1.ConfigNotFoundError; } });
87
+ Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return errors_js_1.ValidationError; } });
88
+ Object.defineProperty(exports, "UnauthorizedError", { enumerable: true, get: function () { return errors_js_1.UnauthorizedError; } });
89
+ Object.defineProperty(exports, "ForbiddenError", { enumerable: true, get: function () { return errors_js_1.ForbiddenError; } });
90
+ Object.defineProperty(exports, "WebhookNotFoundError", { enumerable: true, get: function () { return errors_js_1.WebhookNotFoundError; } });
91
+ Object.defineProperty(exports, "WebhookDeliveryError", { enumerable: true, get: function () { return errors_js_1.WebhookDeliveryError; } });
92
+ // Constants
93
+ var constants_js_1 = require("./constants.js");
94
+ Object.defineProperty(exports, "MAX_TREE_DEPTH", { enumerable: true, get: function () { return constants_js_1.MAX_TREE_DEPTH; } });
95
+ Object.defineProperty(exports, "MAX_SLUG_LENGTH", { enumerable: true, get: function () { return constants_js_1.MAX_SLUG_LENGTH; } });
96
+ Object.defineProperty(exports, "DEFAULT_CACHE_TTL_MS", { enumerable: true, get: function () { return constants_js_1.DEFAULT_CACHE_TTL_MS; } });
97
+ Object.defineProperty(exports, "DEFAULT_PAGE_SIZE", { enumerable: true, get: function () { return constants_js_1.DEFAULT_PAGE_SIZE; } });
98
+ Object.defineProperty(exports, "MAX_PAGE_SIZE", { enumerable: true, get: function () { return constants_js_1.MAX_PAGE_SIZE; } });
99
+ Object.defineProperty(exports, "API_KEY_PREFIX", { enumerable: true, get: function () { return constants_js_1.API_KEY_PREFIX; } });
100
+ Object.defineProperty(exports, "API_KEY_BYTES", { enumerable: true, get: function () { return constants_js_1.API_KEY_BYTES; } });
101
+ Object.defineProperty(exports, "TENANT_HEADER", { enumerable: true, get: function () { return constants_js_1.TENANT_HEADER; } });
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,gBAAgB;AAChB,iDAM4B;AAL1B,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA;AACnB,qHAAA,uBAAuB,OAAA;AAKzB,gBAAgB;AAChB,iDAI4B;AAH1B,4GAAA,cAAc,OAAA;AACd,+GAAA,iBAAiB,OAAA;AAInB,cAAc;AACd,6CAM0B;AALxB,4GAAA,gBAAgB,OAAA;AAChB,+GAAA,mBAAmB,OAAA;AAMrB,gBAAgB;AAChB,iDAa4B;AAZ1B,yGAAA,WAAW,OAAA;AACX,2GAAA,aAAa,OAAA;AACb,sHAAA,wBAAwB,OAAA;AACxB,sHAAA,wBAAwB,OAAA;AACxB,gHAAA,kBAAkB,OAAA;AAClB,mHAAA,qBAAqB,OAAA;AACrB,mHAAA,qBAAqB,OAAA;AAQvB,eAAe;AACf,+CAU2B;AATzB,yGAAA,YAAY,OAAA;AACZ,yGAAA,YAAY,OAAA;AACZ,oHAAA,uBAAuB,OAAA;AACvB,oHAAA,uBAAuB,OAAA;AACvB,qHAAA,wBAAwB,OAAA;AAO1B,QAAQ;AACR,+CAc2B;AAbzB,8GAAA,iBAAiB,OAAA;AACjB,yGAAA,YAAY,OAAA;AACZ,6GAAA,gBAAgB,OAAA;AAChB,oHAAA,uBAAuB,OAAA;AACvB,oHAAA,uBAAuB,OAAA;AACvB,kHAAA,qBAAqB,OAAA;AAUvB,uDAS+B;AAR7B,+GAAA,cAAc,OAAA;AACd,+GAAA,cAAc,OAAA;AACd,uHAAA,sBAAsB,OAAA;AACtB,4HAAA,2BAA2B,OAAA;AAC3B,4HAAA,2BAA2B,OAAA;AAM7B,+CAa2B;AAZzB,8GAAA,iBAAiB,OAAA;AACjB,iHAAA,oBAAoB,OAAA;AAatB,qDAG8B;AAF5B,iIAAA,iCAAiC,OAAA;AACjC,4HAAA,4BAA4B,OAAA;AAG9B,YAAY;AACZ,mDAU6B;AAT3B,gHAAA,iBAAiB,OAAA;AACjB,gHAAA,iBAAiB,OAAA;AACjB,uGAAA,QAAQ,OAAA;AACR,2GAAA,YAAY,OAAA;AACZ,6GAAA,cAAc,OAAA;AACd,4GAAA,aAAa,OAAA;AACb,2GAAA,YAAY,OAAA;AACZ,6GAAA,cAAc,OAAA;AACd,wGAAA,SAAS,OAAA;AAGX,uDAO+B;AAN7B,2GAAA,UAAU,OAAA;AACV,2GAAA,UAAU,OAAA;AACV,iHAAA,gBAAgB,OAAA;AAChB,6GAAA,YAAY,OAAA;AAKd,SAAS;AACT,+CAqB2B;AApBzB,sGAAA,SAAS,OAAA;AACT,yGAAA,YAAY,OAAA;AACZ,gHAAA,mBAAmB,OAAA;AACnB,qHAAA,wBAAwB,OAAA;AACxB,mHAAA,sBAAsB,OAAA;AACtB,qHAAA,wBAAwB,OAAA;AACxB,gHAAA,mBAAmB,OAAA;AACnB,uHAAA,0BAA0B,OAAA;AAC1B,oHAAA,uBAAuB,OAAA;AACvB,8HAAA,iCAAiC,OAAA;AACjC,kHAAA,qBAAqB,OAAA;AACrB,oHAAA,uBAAuB,OAAA;AACvB,4HAAA,+BAA+B,OAAA;AAC/B,8GAAA,iBAAiB,OAAA;AACjB,gHAAA,mBAAmB,OAAA;AACnB,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,iHAAA,oBAAoB,OAAA;AACpB,iHAAA,oBAAoB,OAAA;AAGtB,YAAY;AACZ,+CASwB;AARtB,8GAAA,cAAc,OAAA;AACd,+GAAA,eAAe,OAAA;AACf,oHAAA,oBAAoB,OAAA;AACpB,iHAAA,iBAAiB,OAAA;AACjB,6GAAA,aAAa,OAAA;AACb,8GAAA,cAAc,OAAA;AACd,6GAAA,aAAa,OAAA;AACb,6GAAA,aAAa,OAAA"}
@@ -0,0 +1,5 @@
1
+ import { z } from "zod";
2
+ export declare const API_KEY_SCOPES: readonly ["read", "write", "admin"];
3
+ export type ApiKeyScope = (typeof API_KEY_SCOPES)[number];
4
+ export declare const ApiKeyScopeSchema: z.ZodEnum<["read", "write", "admin"]>;
5
+ //# sourceMappingURL=api-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../src/types/api-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc,qCAAsC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,eAAO,MAAM,iBAAiB,uCAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiKeyScopeSchema = exports.API_KEY_SCOPES = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.API_KEY_SCOPES = ["read", "write", "admin"];
6
+ exports.ApiKeyScopeSchema = zod_1.z.enum(exports.API_KEY_SCOPES);
7
+ //# sourceMappingURL=api-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../src/types/api-key.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAGrD,QAAA,iBAAiB,GAAG,OAAC,CAAC,IAAI,CAAC,sBAAc,CAAC,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ export interface AuditContext {
3
+ actor_id: string;
4
+ actor_type: "api_key" | "jwt" | "system";
5
+ source_ip?: string;
6
+ request_id?: string;
7
+ }
8
+ export declare const AuditEntrySchema: z.ZodObject<{
9
+ id: z.ZodString;
10
+ actor_id: z.ZodString;
11
+ actor_type: z.ZodString;
12
+ action: z.ZodString;
13
+ resource_type: z.ZodString;
14
+ resource_id: z.ZodNullable<z.ZodString>;
15
+ tenant_id: z.ZodNullable<z.ZodString>;
16
+ source_ip: z.ZodNullable<z.ZodString>;
17
+ request_id: z.ZodNullable<z.ZodString>;
18
+ before_state: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
19
+ after_state: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
20
+ metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
21
+ created_at: z.ZodString;
22
+ }, "strip", z.ZodTypeAny, {
23
+ id: string;
24
+ tenant_id: string | null;
25
+ metadata: Record<string, unknown>;
26
+ created_at: string;
27
+ actor_id: string;
28
+ actor_type: string;
29
+ action: string;
30
+ resource_type: string;
31
+ resource_id: string | null;
32
+ source_ip: string | null;
33
+ request_id: string | null;
34
+ before_state: Record<string, unknown> | null;
35
+ after_state: Record<string, unknown> | null;
36
+ }, {
37
+ id: string;
38
+ tenant_id: string | null;
39
+ metadata: Record<string, unknown>;
40
+ created_at: string;
41
+ actor_id: string;
42
+ actor_type: string;
43
+ action: string;
44
+ resource_type: string;
45
+ resource_id: string | null;
46
+ source_ip: string | null;
47
+ request_id: string | null;
48
+ before_state: Record<string, unknown> | null;
49
+ after_state: Record<string, unknown> | null;
50
+ }>;
51
+ export type AuditEntry = z.infer<typeof AuditEntrySchema>;
52
+ export declare const AuditLogQuerySchema: z.ZodObject<{
53
+ tenant_id: z.ZodOptional<z.ZodString>;
54
+ action: z.ZodOptional<z.ZodString>;
55
+ resource_type: z.ZodOptional<z.ZodString>;
56
+ actor_id: z.ZodOptional<z.ZodString>;
57
+ from: z.ZodOptional<z.ZodString>;
58
+ to: z.ZodOptional<z.ZodString>;
59
+ limit: z.ZodDefault<z.ZodNumber>;
60
+ cursor: z.ZodOptional<z.ZodString>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ limit: number;
63
+ tenant_id?: string | undefined;
64
+ actor_id?: string | undefined;
65
+ action?: string | undefined;
66
+ resource_type?: string | undefined;
67
+ from?: string | undefined;
68
+ to?: string | undefined;
69
+ cursor?: string | undefined;
70
+ }, {
71
+ tenant_id?: string | undefined;
72
+ actor_id?: string | undefined;
73
+ action?: string | undefined;
74
+ resource_type?: string | undefined;
75
+ from?: string | undefined;
76
+ to?: string | undefined;
77
+ limit?: number | undefined;
78
+ cursor?: string | undefined;
79
+ }>;
80
+ export type AuditLogQuery = z.infer<typeof AuditLogQuerySchema>;
81
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuditLogQuerySchema = exports.AuditEntrySchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.AuditEntrySchema = zod_1.z.object({
6
+ id: zod_1.z.string().uuid(),
7
+ actor_id: zod_1.z.string(),
8
+ actor_type: zod_1.z.string(),
9
+ action: zod_1.z.string(),
10
+ resource_type: zod_1.z.string(),
11
+ resource_id: zod_1.z.string().nullable(),
12
+ tenant_id: zod_1.z.string().uuid().nullable(),
13
+ source_ip: zod_1.z.string().nullable(),
14
+ request_id: zod_1.z.string().nullable(),
15
+ before_state: zod_1.z.record(zod_1.z.unknown()).nullable(),
16
+ after_state: zod_1.z.record(zod_1.z.unknown()).nullable(),
17
+ metadata: zod_1.z.record(zod_1.z.unknown()),
18
+ created_at: zod_1.z.string().datetime(),
19
+ });
20
+ exports.AuditLogQuerySchema = zod_1.z.object({
21
+ tenant_id: zod_1.z.string().uuid().optional(),
22
+ action: zod_1.z.string().optional(),
23
+ resource_type: zod_1.z.string().optional(),
24
+ actor_id: zod_1.z.string().optional(),
25
+ from: zod_1.z.string().datetime().optional(),
26
+ to: zod_1.z.string().datetime().optional(),
27
+ limit: zod_1.z.coerce.number().int().min(1).max(100).default(50),
28
+ cursor: zod_1.z.string().uuid().optional(),
29
+ });
30
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/types/audit.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AASX,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAClB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE;IACzB,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACvC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,YAAY,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC9C,WAAW,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC7C,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;IAC/B,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAGU,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1D,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { z } from "zod";
2
+ export declare const ConfigEntrySchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ tenant_id: z.ZodString;
5
+ key: z.ZodString;
6
+ value: z.ZodUnknown;
7
+ inherited: z.ZodDefault<z.ZodBoolean>;
8
+ source_tenant_id: z.ZodString;
9
+ locked: z.ZodDefault<z.ZodBoolean>;
10
+ sensitive: z.ZodDefault<z.ZodBoolean>;
11
+ created_at: z.ZodString;
12
+ updated_at: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ id: string;
15
+ tenant_id: string;
16
+ created_at: string;
17
+ updated_at: string;
18
+ key: string;
19
+ inherited: boolean;
20
+ source_tenant_id: string;
21
+ locked: boolean;
22
+ sensitive: boolean;
23
+ value?: unknown;
24
+ }, {
25
+ id: string;
26
+ tenant_id: string;
27
+ created_at: string;
28
+ updated_at: string;
29
+ key: string;
30
+ source_tenant_id: string;
31
+ value?: unknown;
32
+ inherited?: boolean | undefined;
33
+ locked?: boolean | undefined;
34
+ sensitive?: boolean | undefined;
35
+ }>;
36
+ export type ConfigEntry = z.infer<typeof ConfigEntrySchema>;
37
+ export declare const SetConfigInputSchema: z.ZodObject<{
38
+ value: z.ZodUnknown;
39
+ locked: z.ZodDefault<z.ZodBoolean>;
40
+ sensitive: z.ZodDefault<z.ZodBoolean>;
41
+ }, "strip", z.ZodTypeAny, {
42
+ locked: boolean;
43
+ sensitive: boolean;
44
+ value?: unknown;
45
+ }, {
46
+ value?: unknown;
47
+ locked?: boolean | undefined;
48
+ sensitive?: boolean | undefined;
49
+ }>;
50
+ export type SetConfigInput = z.infer<typeof SetConfigInputSchema>;
51
+ export interface ResolvedConfigEntry {
52
+ key: string;
53
+ value: unknown;
54
+ source_tenant_id: string;
55
+ inherited: boolean;
56
+ locked: boolean;
57
+ }
58
+ export type ResolvedConfig = Record<string, ResolvedConfigEntry>;
59
+ export interface BatchSetConfigKeyResult {
60
+ key: string;
61
+ status: "ok" | "error";
62
+ entry?: ConfigEntry;
63
+ error?: string;
64
+ }
65
+ export interface BatchSetConfigResult {
66
+ results: BatchSetConfigKeyResult[];
67
+ succeeded: number;
68
+ failed: number;
69
+ }
70
+ /** Per-key diff entry showing the value and status for one tenant side. */
71
+ export interface ConfigDiffEntry {
72
+ value: unknown;
73
+ status: "inherited" | "own" | "locked";
74
+ source: string;
75
+ }
76
+ /** A single key comparison between two tenants. */
77
+ export interface ConfigDiffItem {
78
+ key: string;
79
+ tenant_a: ConfigDiffEntry | null;
80
+ tenant_b: ConfigDiffEntry | null;
81
+ }
82
+ /** Summary info for a tenant in the diff response. */
83
+ export interface ConfigDiffTenantInfo {
84
+ id: string;
85
+ name: string;
86
+ }
87
+ /** Full config diff response. */
88
+ export interface ConfigDiff {
89
+ tenant_a: ConfigDiffTenantInfo;
90
+ tenant_b: ConfigDiffTenantInfo;
91
+ diff: ConfigDiffItem[];
92
+ }
93
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAEjE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAClC;AAED,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,IAAI,EAAE,cAAc,EAAE,CAAC;CACxB"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SetConfigInputSchema = exports.ConfigEntrySchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.ConfigEntrySchema = zod_1.z.object({
6
+ id: zod_1.z.string().uuid(),
7
+ tenant_id: zod_1.z.string().uuid(),
8
+ key: zod_1.z.string().min(1).max(255),
9
+ value: zod_1.z.unknown(),
10
+ inherited: zod_1.z.boolean().default(false),
11
+ source_tenant_id: zod_1.z.string().uuid(),
12
+ locked: zod_1.z.boolean().default(false),
13
+ sensitive: zod_1.z.boolean().default(false),
14
+ created_at: zod_1.z.string().datetime(),
15
+ updated_at: zod_1.z.string().datetime(),
16
+ });
17
+ exports.SetConfigInputSchema = zod_1.z.object({
18
+ value: zod_1.z.unknown(),
19
+ locked: zod_1.z.boolean().default(false),
20
+ sensitive: zod_1.z.boolean().default(false),
21
+ });
22
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACrB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC5B,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IAC/B,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE;IAClB,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,gBAAgB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IACnC,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAIU,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE;IAClB,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAClC,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACtC,CAAC,CAAC"}