@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.
- package/dist/__tests__/ancestry.test.d.ts +2 -0
- package/dist/__tests__/ancestry.test.d.ts.map +1 -0
- package/dist/__tests__/ancestry.test.js +132 -0
- package/dist/__tests__/ancestry.test.js.map +1 -0
- package/dist/__tests__/config-types.test.d.ts +2 -0
- package/dist/__tests__/config-types.test.d.ts.map +1 -0
- package/dist/__tests__/config-types.test.js +143 -0
- package/dist/__tests__/config-types.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +113 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/isolation.test.d.ts +2 -0
- package/dist/__tests__/isolation.test.d.ts.map +1 -0
- package/dist/__tests__/isolation.test.js +34 -0
- package/dist/__tests__/isolation.test.js.map +1 -0
- package/dist/__tests__/validation.test.d.ts +2 -0
- package/dist/__tests__/validation.test.d.ts.map +1 -0
- package/dist/__tests__/validation.test.js +100 -0
- package/dist/__tests__/validation.test.js.map +1 -0
- package/dist/__tests__/webhook.test.d.ts +2 -0
- package/dist/__tests__/webhook.test.d.ts.map +1 -0
- package/dist/__tests__/webhook.test.js +165 -0
- package/dist/__tests__/webhook.test.js.map +1 -0
- package/dist/constants.d.ts +9 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +12 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/types/api-key.d.ts +5 -0
- package/dist/types/api-key.d.ts.map +1 -0
- package/dist/types/api-key.js +7 -0
- package/dist/types/api-key.js.map +1 -0
- package/dist/types/audit.d.ts +81 -0
- package/dist/types/audit.d.ts.map +1 -0
- package/dist/types/audit.js +30 -0
- package/dist/types/audit.js.map +1 -0
- package/dist/types/config.d.ts +93 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +22 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/consent.d.ts +63 -0
- package/dist/types/consent.d.ts.map +1 -0
- package/dist/types/consent.js +30 -0
- package/dist/types/consent.js.map +1 -0
- package/dist/types/isolation.d.ts +9 -0
- package/dist/types/isolation.d.ts.map +1 -0
- package/dist/types/isolation.js +20 -0
- package/dist/types/isolation.js.map +1 -0
- package/dist/types/permission.d.ts +101 -0
- package/dist/types/permission.d.ts.map +1 -0
- package/dist/types/permission.js +41 -0
- package/dist/types/permission.js.map +1 -0
- package/dist/types/region.d.ts +90 -0
- package/dist/types/region.d.ts.map +1 -0
- package/dist/types/region.js +39 -0
- package/dist/types/region.js.map +1 -0
- package/dist/types/tenant.d.ts +148 -0
- package/dist/types/tenant.d.ts.map +1 -0
- package/dist/types/tenant.js +55 -0
- package/dist/types/tenant.js.map +1 -0
- package/dist/types/webhook.d.ts +181 -0
- package/dist/types/webhook.d.ts.map +1 -0
- package/dist/types/webhook.js +65 -0
- package/dist/types/webhook.js.map +1 -0
- package/dist/utils/ancestry.d.ts +53 -0
- package/dist/utils/ancestry.d.ts.map +1 -0
- package/dist/utils/ancestry.js +100 -0
- package/dist/utils/ancestry.js.map +1 -0
- package/dist/utils/errors.d.ts +88 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +173 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/validation.d.ts +21 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +19 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
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 = exports.TenantNotFoundError = exports.StratumError = exports.ErrorCode = void 0;
|
|
4
|
+
var ErrorCode;
|
|
5
|
+
(function (ErrorCode) {
|
|
6
|
+
ErrorCode["TENANT_NOT_FOUND"] = "TENANT_NOT_FOUND";
|
|
7
|
+
ErrorCode["TENANT_ALREADY_EXISTS"] = "TENANT_ALREADY_EXISTS";
|
|
8
|
+
ErrorCode["TENANT_HAS_CHILDREN"] = "TENANT_HAS_CHILDREN";
|
|
9
|
+
ErrorCode["TENANT_CYCLE_DETECTED"] = "TENANT_CYCLE_DETECTED";
|
|
10
|
+
ErrorCode["TENANT_ARCHIVED"] = "TENANT_ARCHIVED";
|
|
11
|
+
ErrorCode["TENANT_CONTEXT_NOT_FOUND"] = "TENANT_CONTEXT_NOT_FOUND";
|
|
12
|
+
ErrorCode["ISOLATION_VIOLATION"] = "ISOLATION_VIOLATION";
|
|
13
|
+
ErrorCode["ISOLATION_STRATEGY_UNSUPPORTED"] = "ISOLATION_STRATEGY_UNSUPPORTED";
|
|
14
|
+
ErrorCode["PERMISSION_LOCKED"] = "PERMISSION_LOCKED";
|
|
15
|
+
ErrorCode["PERMISSION_NOT_FOUND"] = "PERMISSION_NOT_FOUND";
|
|
16
|
+
ErrorCode["PERMISSION_REVOCATION_DENIED"] = "PERMISSION_REVOCATION_DENIED";
|
|
17
|
+
ErrorCode["CONFIG_LOCKED"] = "CONFIG_LOCKED";
|
|
18
|
+
ErrorCode["CONFIG_NOT_FOUND"] = "CONFIG_NOT_FOUND";
|
|
19
|
+
ErrorCode["VALIDATION_ERROR"] = "VALIDATION_ERROR";
|
|
20
|
+
ErrorCode["UNAUTHORIZED"] = "UNAUTHORIZED";
|
|
21
|
+
ErrorCode["FORBIDDEN"] = "FORBIDDEN";
|
|
22
|
+
ErrorCode["WEBHOOK_NOT_FOUND"] = "WEBHOOK_NOT_FOUND";
|
|
23
|
+
ErrorCode["WEBHOOK_DELIVERY_FAILED"] = "WEBHOOK_DELIVERY_FAILED";
|
|
24
|
+
})(ErrorCode || (exports.ErrorCode = ErrorCode = {}));
|
|
25
|
+
class StratumError extends Error {
|
|
26
|
+
code;
|
|
27
|
+
statusCode;
|
|
28
|
+
details;
|
|
29
|
+
constructor(code, message, statusCode = 500, details) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = "StratumError";
|
|
32
|
+
this.code = code;
|
|
33
|
+
this.statusCode = statusCode;
|
|
34
|
+
this.details = details;
|
|
35
|
+
}
|
|
36
|
+
toJSON() {
|
|
37
|
+
return {
|
|
38
|
+
error: {
|
|
39
|
+
code: this.code,
|
|
40
|
+
message: this.message,
|
|
41
|
+
...(this.details ? { details: this.details } : {}),
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.StratumError = StratumError;
|
|
47
|
+
class TenantNotFoundError extends StratumError {
|
|
48
|
+
constructor(tenantId) {
|
|
49
|
+
super(ErrorCode.TENANT_NOT_FOUND, `Tenant not found: ${tenantId}`, 404);
|
|
50
|
+
this.name = "TenantNotFoundError";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.TenantNotFoundError = TenantNotFoundError;
|
|
54
|
+
class TenantAlreadyExistsError extends StratumError {
|
|
55
|
+
constructor(slug) {
|
|
56
|
+
super(ErrorCode.TENANT_ALREADY_EXISTS, `Tenant with slug '${slug}' already exists`, 409);
|
|
57
|
+
this.name = "TenantAlreadyExistsError";
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.TenantAlreadyExistsError = TenantAlreadyExistsError;
|
|
61
|
+
class TenantHasChildrenError extends StratumError {
|
|
62
|
+
constructor(tenantId) {
|
|
63
|
+
super(ErrorCode.TENANT_HAS_CHILDREN, `Cannot archive tenant ${tenantId}: it has active children. Archive children first.`, 409);
|
|
64
|
+
this.name = "TenantHasChildrenError";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.TenantHasChildrenError = TenantHasChildrenError;
|
|
68
|
+
class TenantCycleDetectedError extends StratumError {
|
|
69
|
+
constructor(tenantId, newParentId) {
|
|
70
|
+
super(ErrorCode.TENANT_CYCLE_DETECTED, `Moving tenant ${tenantId} under ${newParentId} would create a cycle`, 409);
|
|
71
|
+
this.name = "TenantCycleDetectedError";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.TenantCycleDetectedError = TenantCycleDetectedError;
|
|
75
|
+
class TenantArchivedError extends StratumError {
|
|
76
|
+
constructor(tenantId) {
|
|
77
|
+
super(ErrorCode.TENANT_ARCHIVED, `Tenant ${tenantId} is archived`, 410);
|
|
78
|
+
this.name = "TenantArchivedError";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.TenantArchivedError = TenantArchivedError;
|
|
82
|
+
class TenantContextNotFoundError extends StratumError {
|
|
83
|
+
constructor() {
|
|
84
|
+
super(ErrorCode.TENANT_CONTEXT_NOT_FOUND, "getTenantContext() called outside of a request context. Ensure Stratum middleware is installed and the call is within a request handler.", 500);
|
|
85
|
+
this.name = "TenantContextNotFoundError";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.TenantContextNotFoundError = TenantContextNotFoundError;
|
|
89
|
+
class IsolationViolationError extends StratumError {
|
|
90
|
+
constructor(message) {
|
|
91
|
+
super(ErrorCode.ISOLATION_VIOLATION, message, 403);
|
|
92
|
+
this.name = "IsolationViolationError";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.IsolationViolationError = IsolationViolationError;
|
|
96
|
+
class IsolationStrategyUnsupportedError extends StratumError {
|
|
97
|
+
constructor(strategy) {
|
|
98
|
+
super(ErrorCode.ISOLATION_STRATEGY_UNSUPPORTED, `Isolation strategy '${strategy}' is not supported in v1. Only SHARED_RLS is available.`, 400);
|
|
99
|
+
this.name = "IsolationStrategyUnsupportedError";
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.IsolationStrategyUnsupportedError = IsolationStrategyUnsupportedError;
|
|
103
|
+
class PermissionLockedError extends StratumError {
|
|
104
|
+
constructor(key, sourceTenantId) {
|
|
105
|
+
super(ErrorCode.PERMISSION_LOCKED, `Permission '${key}' is LOCKED by tenant ${sourceTenantId} and cannot be overridden`, 403, { key, source_tenant_id: sourceTenantId });
|
|
106
|
+
this.name = "PermissionLockedError";
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.PermissionLockedError = PermissionLockedError;
|
|
110
|
+
class PermissionNotFoundError extends StratumError {
|
|
111
|
+
constructor(policyId) {
|
|
112
|
+
super(ErrorCode.PERMISSION_NOT_FOUND, `Permission policy not found: ${policyId}`, 404);
|
|
113
|
+
this.name = "PermissionNotFoundError";
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.PermissionNotFoundError = PermissionNotFoundError;
|
|
117
|
+
class PermissionRevocationDeniedError extends StratumError {
|
|
118
|
+
constructor(key) {
|
|
119
|
+
super(ErrorCode.PERMISSION_REVOCATION_DENIED, `Permission '${key}' has PERMANENT revocation mode and cannot be revoked`, 403);
|
|
120
|
+
this.name = "PermissionRevocationDeniedError";
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.PermissionRevocationDeniedError = PermissionRevocationDeniedError;
|
|
124
|
+
class ConfigLockedError extends StratumError {
|
|
125
|
+
constructor(key, sourceTenantId) {
|
|
126
|
+
super(ErrorCode.CONFIG_LOCKED, `Config '${key}' is locked by tenant ${sourceTenantId} and cannot be overridden`, 403, { key, source_tenant_id: sourceTenantId });
|
|
127
|
+
this.name = "ConfigLockedError";
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.ConfigLockedError = ConfigLockedError;
|
|
131
|
+
class ConfigNotFoundError extends StratumError {
|
|
132
|
+
constructor(tenantId, key) {
|
|
133
|
+
super(ErrorCode.CONFIG_NOT_FOUND, `Config key '${key}' not found for tenant ${tenantId}`, 404);
|
|
134
|
+
this.name = "ConfigNotFoundError";
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.ConfigNotFoundError = ConfigNotFoundError;
|
|
138
|
+
class ValidationError extends StratumError {
|
|
139
|
+
constructor(message, details) {
|
|
140
|
+
super(ErrorCode.VALIDATION_ERROR, message, 400, details);
|
|
141
|
+
this.name = "ValidationError";
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.ValidationError = ValidationError;
|
|
145
|
+
class UnauthorizedError extends StratumError {
|
|
146
|
+
constructor(message = "Authentication required") {
|
|
147
|
+
super(ErrorCode.UNAUTHORIZED, message, 401);
|
|
148
|
+
this.name = "UnauthorizedError";
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.UnauthorizedError = UnauthorizedError;
|
|
152
|
+
class ForbiddenError extends StratumError {
|
|
153
|
+
constructor(message = "Access denied") {
|
|
154
|
+
super(ErrorCode.FORBIDDEN, message, 403);
|
|
155
|
+
this.name = "ForbiddenError";
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.ForbiddenError = ForbiddenError;
|
|
159
|
+
class WebhookNotFoundError extends StratumError {
|
|
160
|
+
constructor(webhookId) {
|
|
161
|
+
super(ErrorCode.WEBHOOK_NOT_FOUND, `Webhook not found: ${webhookId}`, 404);
|
|
162
|
+
this.name = "WebhookNotFoundError";
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.WebhookNotFoundError = WebhookNotFoundError;
|
|
166
|
+
class WebhookDeliveryError extends StratumError {
|
|
167
|
+
constructor(webhookId, message) {
|
|
168
|
+
super(ErrorCode.WEBHOOK_DELIVERY_FAILED, `Webhook delivery failed for ${webhookId}: ${message}`, 500);
|
|
169
|
+
this.name = "WebhookDeliveryError";
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.WebhookDeliveryError = WebhookDeliveryError;
|
|
173
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":";;;AAAA,IAAY,SAmBX;AAnBD,WAAY,SAAS;IACnB,kDAAqC,CAAA;IACrC,4DAA+C,CAAA;IAC/C,wDAA2C,CAAA;IAC3C,4DAA+C,CAAA;IAC/C,gDAAmC,CAAA;IACnC,kEAAqD,CAAA;IACrD,wDAA2C,CAAA;IAC3C,8EAAiE,CAAA;IACjE,oDAAuC,CAAA;IACvC,0DAA6C,CAAA;IAC7C,0EAA6D,CAAA;IAC7D,4CAA+B,CAAA;IAC/B,kDAAqC,CAAA;IACrC,kDAAqC,CAAA;IACrC,0CAA6B,CAAA;IAC7B,oCAAuB,CAAA;IACvB,oDAAuC,CAAA;IACvC,gEAAmD,CAAA;AACrD,CAAC,EAnBW,SAAS,yBAAT,SAAS,QAmBpB;AAED,MAAa,YAAa,SAAQ,KAAK;IACrB,IAAI,CAAY;IAChB,UAAU,CAAS;IACnB,OAAO,CAA2B;IAElD,YACE,IAAe,EACf,OAAe,EACf,aAAqB,GAAG,EACxB,OAAiC;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACnD;SACF,CAAC;IACJ,CAAC;CACF;AA3BD,oCA2BC;AAED,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,QAAgB;QAC1B,KAAK,CACH,SAAS,CAAC,gBAAgB,EAC1B,qBAAqB,QAAQ,EAAE,EAC/B,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AATD,kDASC;AAED,MAAa,wBAAyB,SAAQ,YAAY;IACxD,YAAY,IAAY;QACtB,KAAK,CACH,SAAS,CAAC,qBAAqB,EAC/B,qBAAqB,IAAI,kBAAkB,EAC3C,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AATD,4DASC;AAED,MAAa,sBAAuB,SAAQ,YAAY;IACtD,YAAY,QAAgB;QAC1B,KAAK,CACH,SAAS,CAAC,mBAAmB,EAC7B,yBAAyB,QAAQ,mDAAmD,EACpF,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AATD,wDASC;AAED,MAAa,wBAAyB,SAAQ,YAAY;IACxD,YAAY,QAAgB,EAAE,WAAmB;QAC/C,KAAK,CACH,SAAS,CAAC,qBAAqB,EAC/B,iBAAiB,QAAQ,UAAU,WAAW,uBAAuB,EACrE,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AATD,4DASC;AAED,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,QAAgB;QAC1B,KAAK,CACH,SAAS,CAAC,eAAe,EACzB,UAAU,QAAQ,cAAc,EAChC,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AATD,kDASC;AAED,MAAa,0BAA2B,SAAQ,YAAY;IAC1D;QACE,KAAK,CACH,SAAS,CAAC,wBAAwB,EAClC,0IAA0I,EAC1I,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AATD,gEASC;AAED,MAAa,uBAAwB,SAAQ,YAAY;IACvD,YAAY,OAAe;QACzB,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AALD,0DAKC;AAED,MAAa,iCAAkC,SAAQ,YAAY;IACjE,YAAY,QAAgB;QAC1B,KAAK,CACH,SAAS,CAAC,8BAA8B,EACxC,uBAAuB,QAAQ,yDAAyD,EACxF,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF;AATD,8EASC;AAED,MAAa,qBAAsB,SAAQ,YAAY;IACrD,YAAY,GAAW,EAAE,cAAsB;QAC7C,KAAK,CACH,SAAS,CAAC,iBAAiB,EAC3B,eAAe,GAAG,yBAAyB,cAAc,2BAA2B,EACpF,GAAG,EACH,EAAE,GAAG,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAVD,sDAUC;AAED,MAAa,uBAAwB,SAAQ,YAAY;IACvD,YAAY,QAAgB;QAC1B,KAAK,CACH,SAAS,CAAC,oBAAoB,EAC9B,gCAAgC,QAAQ,EAAE,EAC1C,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AATD,0DASC;AAED,MAAa,+BAAgC,SAAQ,YAAY;IAC/D,YAAY,GAAW;QACrB,KAAK,CACH,SAAS,CAAC,4BAA4B,EACtC,eAAe,GAAG,uDAAuD,EACzE,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;IAChD,CAAC;CACF;AATD,0EASC;AAED,MAAa,iBAAkB,SAAQ,YAAY;IACjD,YAAY,GAAW,EAAE,cAAsB;QAC7C,KAAK,CACH,SAAS,CAAC,aAAa,EACvB,WAAW,GAAG,yBAAyB,cAAc,2BAA2B,EAChF,GAAG,EACH,EAAE,GAAG,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAC1C,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAVD,8CAUC;AAED,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,QAAgB,EAAE,GAAW;QACvC,KAAK,CACH,SAAS,CAAC,gBAAgB,EAC1B,eAAe,GAAG,0BAA0B,QAAQ,EAAE,EACtD,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AATD,kDASC;AAED,MAAa,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,MAAa,iBAAkB,SAAQ,YAAY;IACjD,YAAY,UAAkB,yBAAyB;QACrD,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AALD,8CAKC;AAED,MAAa,cAAe,SAAQ,YAAY;IAC9C,YAAY,UAAkB,eAAe;QAC3C,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AALD,wCAKC;AAED,MAAa,oBAAqB,SAAQ,YAAY;IACpD,YAAY,SAAiB;QAC3B,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,sBAAsB,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AALD,oDAKC;AAED,MAAa,oBAAqB,SAAQ,YAAY;IACpD,YAAY,SAAiB,EAAE,OAAe;QAC5C,KAAK,CACH,SAAS,CAAC,uBAAuB,EACjC,+BAA+B,SAAS,KAAK,OAAO,EAAE,EACtD,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AATD,oDASC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const SlugSchema: z.ZodString;
|
|
3
|
+
export declare const UUIDSchema: z.ZodString;
|
|
4
|
+
export declare const PaginationSchema: z.ZodObject<{
|
|
5
|
+
cursor: z.ZodOptional<z.ZodString>;
|
|
6
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
limit: number;
|
|
9
|
+
cursor?: string | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
limit?: number | undefined;
|
|
12
|
+
cursor?: string | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
export type PaginationInput = z.infer<typeof PaginationSchema>;
|
|
15
|
+
export interface PaginatedResult<T> {
|
|
16
|
+
data: T[];
|
|
17
|
+
next_cursor: string | null;
|
|
18
|
+
has_more: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function validateSlug(slug: string): boolean;
|
|
21
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,UAAU,aAKnB,CAAC;AAEL,eAAO,MAAM,UAAU,aAAoB,CAAC;AAE5C,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateSlug = exports.PaginationSchema = exports.UUIDSchema = exports.SlugSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
exports.SlugSchema = zod_1.z
|
|
6
|
+
.string()
|
|
7
|
+
.regex(/^[a-z][a-z0-9_]{0,62}$/, {
|
|
8
|
+
message: "Slug must start with a lowercase letter, contain only lowercase letters, numbers, and underscores, and be at most 63 characters",
|
|
9
|
+
});
|
|
10
|
+
exports.UUIDSchema = zod_1.z.string().uuid();
|
|
11
|
+
exports.PaginationSchema = zod_1.z.object({
|
|
12
|
+
cursor: zod_1.z.string().uuid().optional(),
|
|
13
|
+
limit: zod_1.z.coerce.number().int().min(1).max(100).default(50),
|
|
14
|
+
});
|
|
15
|
+
function validateSlug(slug) {
|
|
16
|
+
return exports.SlugSchema.safeParse(slug).success;
|
|
17
|
+
}
|
|
18
|
+
exports.validateSlug = validateSlug;
|
|
19
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,UAAU,GAAG,OAAC;KACxB,MAAM,EAAE;KACR,KAAK,CAAC,wBAAwB,EAAE;IAC/B,OAAO,EACL,iIAAiI;CACpI,CAAC,CAAC;AAEQ,QAAA,UAAU,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;AAE/B,QAAA,gBAAgB,GAAG,OAAC,CAAC,MAAM,CAAC;IACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,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;CAC3D,CAAC,CAAC;AAUH,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,kBAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAC5C,CAAC;AAFD,oCAEC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@stratum-hq/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Stratum shared types, utilities, and validation schemas",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"lint": "tsc --noEmit",
|
|
22
|
+
"clean": "rm -rf dist"
|
|
23
|
+
},
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public",
|
|
26
|
+
"registry": "https://registry.npmjs.org/"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"zod": "^3.22.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"typescript": "^5.4.0",
|
|
33
|
+
"vitest": "^1.6.0"
|
|
34
|
+
}
|
|
35
|
+
}
|