@serve.zone/interfaces 24.2.0 → 25.0.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/changelog.md +9 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/service.d.ts +2 -0
- package/dist_ts/data/service.js +9 -1
- package/dist_ts/requests/service.d.ts +2 -0
- package/package.json +1 -1
- package/readme.md +7 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/service.ts +10 -0
- package/ts/requests/service.ts +2 -0
package/changelog.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-08-01 - 25.0.0
|
|
4
|
+
|
|
5
|
+
### Breaking Changes
|
|
6
|
+
|
|
7
|
+
- require canonical organization authority for service creation (service)
|
|
8
|
+
- Add a required top-level `organizationId` to the `createService` request.
|
|
9
|
+
- Keep organization ownership excluded from caller-writable service data.
|
|
10
|
+
- Export canonical organization identifier validation and contract coverage.
|
|
11
|
+
|
|
3
12
|
## 2026-08-01 - 24.2.0
|
|
4
13
|
|
|
5
14
|
### Features
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/interfaces',
|
|
6
|
-
version: '
|
|
6
|
+
version: '25.0.0',
|
|
7
7
|
description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
|
|
@@ -22,6 +22,8 @@ export interface IServiceVolume {
|
|
|
22
22
|
/** Driver-specific options forwarded to Docker's VolumeDriver.Create request. */
|
|
23
23
|
options?: Record<string, string>;
|
|
24
24
|
}
|
|
25
|
+
/** Validates the canonical organization authority used by service operations. */
|
|
26
|
+
export declare const validateOrganizationId: (valueArg: unknown) => string[];
|
|
25
27
|
export declare const serviceContainerArgLimits: {
|
|
26
28
|
readonly maximumArgs: 64;
|
|
27
29
|
readonly maximumArgBytes: 4096;
|
package/dist_ts/data/service.js
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
const organizationIdRegex = /^[A-Za-z0-9][A-Za-z0-9:._-]{0,199}$/;
|
|
2
|
+
/** Validates the canonical organization authority used by service operations. */
|
|
3
|
+
export const validateOrganizationId = (valueArg) => {
|
|
4
|
+
if (typeof valueArg !== 'string' || !organizationIdRegex.test(valueArg)) {
|
|
5
|
+
return ['organizationId must be a canonical 1-200 character identifier'];
|
|
6
|
+
}
|
|
7
|
+
return [];
|
|
8
|
+
};
|
|
1
9
|
export const serviceContainerArgLimits = {
|
|
2
10
|
maximumArgs: 64,
|
|
3
11
|
maximumArgBytes: 4096,
|
|
@@ -57,4 +65,4 @@ export const validateServiceContainerArgs = (containerArgsArg) => {
|
|
|
57
65
|
}
|
|
58
66
|
return [];
|
|
59
67
|
};
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQ0EsTUFBTSxtQkFBbUIsR0FBRyxxQ0FBcUMsQ0FBQztBQUVsRSxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxRQUFpQixFQUFZLEVBQUU7SUFDcEUsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN4RSxPQUFPLENBQUMsK0RBQStELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxXQUFXLEVBQUUsRUFBRTtJQUNmLGVBQWUsRUFBRSxJQUFJO0lBQ3JCLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxJQUFJO0NBQ3BCLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLE9BQWUsRUFBc0IsRUFBRTtJQUNsRixJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7V0FDMUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztXQUN4QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztXQUN0QixPQUFPLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDOUIsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssR0FBRztZQUFFLFNBQVM7UUFDMUMsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxTQUFTLENBQUM7WUFDNUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2YsU0FBUztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ3pELFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsZ0JBQXlCLEVBQVksRUFBRTtJQUNsRixJQUFJLGdCQUFnQixLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztRQUFFLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ2hGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQywrREFBK0QsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRSxPQUFPLENBQUMsc0NBQXNDLHlCQUF5QixDQUFDLFdBQVcsVUFBVSxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUNELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNuQixLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUMzRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFELE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLHVCQUF1QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDcEUsSUFBSSxhQUFhLEdBQUcseUJBQXlCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDOUQsT0FBTyxDQUFDLGlCQUFpQixLQUFLLG9DQUFvQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELFVBQVUsSUFBSSxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksVUFBVSxHQUFHLHlCQUF5QixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0QsT0FBTyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDIn0=
|
|
@@ -202,6 +202,8 @@ export interface IRequest_Any_Cloudly_CreateService extends plugins.typedrequest
|
|
|
202
202
|
method: 'createService';
|
|
203
203
|
request: {
|
|
204
204
|
identity: IIdentity;
|
|
205
|
+
/** Canonical organization authority assigned by Cloudly to the new service. */
|
|
206
|
+
organizationId: string;
|
|
205
207
|
serviceData: TServiceWritableData;
|
|
206
208
|
};
|
|
207
209
|
response: {
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -30,6 +30,13 @@ import { appstore, data, platform, platformservice, requests } from '@serve.zone
|
|
|
30
30
|
|
|
31
31
|
This package intentionally has no service implementation logic. It is a stable vocabulary for services that need to agree on payload shape, method names, and response types.
|
|
32
32
|
|
|
33
|
+
Service creation carries canonical ownership separately from caller-writable
|
|
34
|
+
service data. `requests.service.IRequest_Any_Cloudly_CreateService` requires a
|
|
35
|
+
top-level `organizationId`, while `data.TServiceWritableData` excludes the
|
|
36
|
+
server-managed ownership field. Consumers should use
|
|
37
|
+
`data.validateOrganizationId()` to validate the identifier shape and verify
|
|
38
|
+
the request's ownership authorization separately before persistence.
|
|
39
|
+
|
|
33
40
|
## Secrets v24 Pre-Cutover Contract
|
|
34
41
|
|
|
35
42
|
Version 24 retains the value-free v23 architecture while replacing the remaining
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/data/service.ts
CHANGED
|
@@ -34,6 +34,16 @@ export interface IServiceVolume {
|
|
|
34
34
|
options?: Record<string, string>;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
const organizationIdRegex = /^[A-Za-z0-9][A-Za-z0-9:._-]{0,199}$/;
|
|
38
|
+
|
|
39
|
+
/** Validates the canonical organization authority used by service operations. */
|
|
40
|
+
export const validateOrganizationId = (valueArg: unknown): string[] => {
|
|
41
|
+
if (typeof valueArg !== 'string' || !organizationIdRegex.test(valueArg)) {
|
|
42
|
+
return ['organizationId must be a canonical 1-200 character identifier'];
|
|
43
|
+
}
|
|
44
|
+
return [];
|
|
45
|
+
};
|
|
46
|
+
|
|
37
47
|
export const serviceContainerArgLimits = {
|
|
38
48
|
maximumArgs: 64,
|
|
39
49
|
maximumArgBytes: 4096,
|
package/ts/requests/service.ts
CHANGED
|
@@ -304,6 +304,8 @@ extends plugins.typedrequestInterfaces.implementsTR<
|
|
|
304
304
|
method: 'createService';
|
|
305
305
|
request: {
|
|
306
306
|
identity: IIdentity;
|
|
307
|
+
/** Canonical organization authority assigned by Cloudly to the new service. */
|
|
308
|
+
organizationId: string;
|
|
307
309
|
serviceData: TServiceWritableData;
|
|
308
310
|
};
|
|
309
311
|
response: {
|