@sylphx/management 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @sylphx/management
2
2
 
3
+ ## 0.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`03dbd29`](https://github.com/SylphxAI/platform/commit/03dbd2986024fa650378e10958890d6ac063f516)]:
8
+ - @sylphx/contract@0.3.0
9
+
3
10
  ## 0.2.0
4
11
 
5
12
  ### Minor Changes
package/dist/admin.d.ts CHANGED
@@ -98,7 +98,7 @@ export declare const retireJwtKey: (client: Client, keyId: string) => Promise<{
98
98
  /**
99
99
  * Trigger a project migration between regions. Phase 4b Matrix-2 gap.
100
100
  * Underlying endpoint on the platform API is
101
- * `POST /admin/projects/:id/migrate` — the SDK wraps it directly rather
101
+ * `POST /operator/projects/:id/migrate` — the SDK wraps it directly rather
102
102
  * than going through `adminProjectsEndpoints` because migration is its
103
103
  * own operational concern (drain → cut-over → warm-up).
104
104
  */
@@ -138,4 +138,31 @@ export declare const updateUserRole: (client: Client, userId: string, body: {
138
138
  }) => Promise<{
139
139
  user: AdminUserView;
140
140
  }>;
141
+ /**
142
+ * L-15 (2026-05-02): manually verify a user's email. Super-admin only on the
143
+ * platform tenant. The Management API endpoint exists at
144
+ * `POST /admin/users/users/:userId/verify-email`; the SDK helper was the
145
+ * missing piece blocking operators from validating the new-user E2E flow
146
+ * without (a) a real email inbox or (b) a forbidden direct DB UPDATE.
147
+ */
148
+ export declare const verifyUserEmail: (client: Client, userId: string) => Promise<{
149
+ readonly id: string;
150
+ readonly email: string;
151
+ }>;
152
+ /**
153
+ * L-15 (2026-05-02): soft-delete a platform user. Super-admin only;
154
+ * cannot delete oneself. Existing sessions are revoked first.
155
+ */
156
+ export declare const deleteUser: (client: Client, userId: string) => Promise<{
157
+ readonly id: string;
158
+ readonly email: string;
159
+ }>;
160
+ /**
161
+ * L-15 (2026-05-02): revoke ALL sessions for a user (force re-login).
162
+ * Super-admin only.
163
+ */
164
+ export declare const revokeUserSessions: (client: Client, userId: string) => Promise<{
165
+ readonly userId: string;
166
+ readonly revokedCount: number;
167
+ }>;
141
168
  //# sourceMappingURL=admin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
package/dist/admin.js CHANGED
@@ -68,11 +68,11 @@ export const retireJwtKey = (client, keyId) => {
68
68
  /**
69
69
  * Trigger a project migration between regions. Phase 4b Matrix-2 gap.
70
70
  * Underlying endpoint on the platform API is
71
- * `POST /admin/projects/:id/migrate` — the SDK wraps it directly rather
71
+ * `POST /operator/projects/:id/migrate` — the SDK wraps it directly rather
72
72
  * than going through `adminProjectsEndpoints` because migration is its
73
73
  * own operational concern (drain → cut-over → warm-up).
74
74
  */
75
- export const migrateProject = (client, projectId, body) => request(client, 'POST', `/admin/projects/${encodeURIComponent(projectId)}/migrate`, { body });
75
+ export const migrateProject = (client, projectId, body) => request(client, 'POST', `/operator/projects/${encodeURIComponent(projectId)}/migrate`, { body });
76
76
  /**
77
77
  * Regenerate an environment's deploy / API key. Already exposed on
78
78
  * `adminProjectsEndpoints.regenerateKey`; surfaced here under the `admin`
@@ -94,3 +94,30 @@ export const updateUserRole = (client, userId, body) => {
94
94
  const { method, path } = adminUsersEndpoints.updateRole;
95
95
  return request(client, method, interpolatePath(path, { userId }), { body });
96
96
  };
97
+ /**
98
+ * L-15 (2026-05-02): manually verify a user's email. Super-admin only on the
99
+ * platform tenant. The Management API endpoint exists at
100
+ * `POST /admin/users/users/:userId/verify-email`; the SDK helper was the
101
+ * missing piece blocking operators from validating the new-user E2E flow
102
+ * without (a) a real email inbox or (b) a forbidden direct DB UPDATE.
103
+ */
104
+ export const verifyUserEmail = (client, userId) => {
105
+ const { method, path } = adminUsersEndpoints.verifyEmail;
106
+ return request(client, method, interpolatePath(path, { userId }));
107
+ };
108
+ /**
109
+ * L-15 (2026-05-02): soft-delete a platform user. Super-admin only;
110
+ * cannot delete oneself. Existing sessions are revoked first.
111
+ */
112
+ export const deleteUser = (client, userId) => {
113
+ const { method, path } = adminUsersEndpoints.delete;
114
+ return request(client, method, interpolatePath(path, { userId }));
115
+ };
116
+ /**
117
+ * L-15 (2026-05-02): revoke ALL sessions for a user (force re-login).
118
+ * Super-admin only.
119
+ */
120
+ export const revokeUserSessions = (client, userId) => {
121
+ const { method, path } = adminUsersEndpoints.revokeSessions;
122
+ return request(client, method, interpolatePath(path, { userId }));
123
+ };
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `@sylphx/management/adminProjectCredentials` — operator BaaS credential rotation.
3
+ *
4
+ * Rotates an environment's `sk_*` / `pk_*` pair and optionally syncs the new
5
+ * `sk_*` into the environment-level `SYLPHX_SECRET_KEY` app secret so the
6
+ * reconciler updates deployed workloads through the normal desired-state path.
7
+ */
8
+ import type { Client } from './client.js';
9
+ export interface RotateEnvironmentCredentialsInput {
10
+ /** TypeID (`env_*`) of the target environment. */
11
+ readonly environmentId: string;
12
+ /** Audit narrative. Min 3 chars. */
13
+ readonly reason: string;
14
+ /** When true, upsert shared env var `SYLPHX_SECRET_KEY` and queue reconciliation. */
15
+ readonly syncDeploymentSecret?: boolean;
16
+ }
17
+ export interface RotateEnvironmentCredentialsBySlugInput {
18
+ /** Project slug, e.g. `keen-wave-x3m9p2`. */
19
+ readonly projectSlug: string;
20
+ /** Environment display name, e.g. `Production`. */
21
+ readonly environmentName: string;
22
+ /** Audit narrative. Min 3 chars. */
23
+ readonly reason: string;
24
+ /** When true, upsert shared env var `SYLPHX_SECRET_KEY` and queue reconciliation. */
25
+ readonly syncDeploymentSecret?: boolean;
26
+ }
27
+ export interface RotateEnvironmentCredentialsResult {
28
+ readonly environmentId: string;
29
+ readonly envType: 'development' | 'staging' | 'production';
30
+ /** Raw secret key, returned once. Do not log. */
31
+ readonly secretKey: string;
32
+ readonly publicKey: string;
33
+ readonly syncedDeploymentSecret: boolean;
34
+ readonly queued: boolean;
35
+ readonly generation: number;
36
+ }
37
+ export declare const rotateEnvironmentCredentials: (client: Client, input: RotateEnvironmentCredentialsInput) => Promise<RotateEnvironmentCredentialsResult>;
38
+ export declare const rotateEnvironmentCredentialsBySlug: (client: Client, input: RotateEnvironmentCredentialsBySlugInput) => Promise<RotateEnvironmentCredentialsResult>;
39
+ //# sourceMappingURL=adminProjectCredentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminProjectCredentials.d.ts","sourceRoot":"","sources":["../src/adminProjectCredentials.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,WAAW,iCAAiC;IACjD,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qFAAqF;IACrF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CACvC;AAED,MAAM,WAAW,uCAAuC;IACvD,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qFAAqF;IACrF,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;CACvC;AAED,MAAM,WAAW,kCAAkC;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,CAAA;IAC1D,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAA;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,4BAA4B,GACxC,QAAQ,MAAM,EACd,OAAO,iCAAiC,KACtC,OAAO,CAAC,kCAAkC,CAa5C,CAAA;AAED,eAAO,MAAM,kCAAkC,GAC9C,QAAQ,MAAM,EACd,OAAO,uCAAuC,KAC5C,OAAO,CAAC,kCAAkC,CAe5C,CAAA"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `@sylphx/management/adminProjectCredentials` — operator BaaS credential rotation.
3
+ *
4
+ * Rotates an environment's `sk_*` / `pk_*` pair and optionally syncs the new
5
+ * `sk_*` into the environment-level `SYLPHX_SECRET_KEY` app secret so the
6
+ * reconciler updates deployed workloads through the normal desired-state path.
7
+ */
8
+ import { adminProjectsEndpoints } from '@sylphx/contract';
9
+ import { request } from './http.js';
10
+ export const rotateEnvironmentCredentials = (client, input) => {
11
+ const { method, path } = adminProjectsEndpoints.rotateEnvironmentCredentials;
12
+ return request(client, method, path.replace(':environmentId', encodeURIComponent(input.environmentId)), {
13
+ body: {
14
+ reason: input.reason,
15
+ syncDeploymentSecret: input.syncDeploymentSecret ?? false,
16
+ },
17
+ });
18
+ };
19
+ export const rotateEnvironmentCredentialsBySlug = (client, input) => {
20
+ const { method, path } = adminProjectsEndpoints.rotateEnvironmentCredentialsBySlug;
21
+ return request(client, method, path
22
+ .replace(':projectSlug', encodeURIComponent(input.projectSlug))
23
+ .replace(':environmentName', encodeURIComponent(input.environmentName)), {
24
+ body: {
25
+ reason: input.reason,
26
+ syncDeploymentSecret: input.syncDeploymentSecret ?? false,
27
+ },
28
+ });
29
+ };
@@ -9,40 +9,21 @@
9
9
  * Mirrors `apps/api/src/server/platform/routes/branch-databases.ts`.
10
10
  * Route paths sourced from `@sylphx/contract` (ADR-084).
11
11
  */
12
+ import type { BranchDatabase as ContractBranchDatabase, CreateBranchDatabaseInput as ContractCreateBranchDatabaseInput, DestroyBranchDatabaseResult, ListBranchDatabasesResult } from '@sylphx/contract';
12
13
  import type { Client } from './client.js';
13
- export interface BranchDatabase {
14
- readonly id: string;
15
- readonly projectId: string;
16
- readonly envId: string;
17
- readonly parentDatabaseId: string;
18
- readonly branchName: string;
19
- readonly connectionUrl: string | null;
20
- readonly createdAt: string;
21
- readonly status: 'ready' | 'provisioning' | 'failed' | 'deleting';
22
- }
23
- export interface CreateBranchDatabaseInput {
24
- readonly parentDatabaseId?: string;
25
- readonly branchName?: string;
26
- }
27
- export declare const list: (client: Client, projectId: string) => Promise<{
28
- branches: readonly BranchDatabase[];
29
- }>;
30
- export declare const create: (client: Client, projectId: string, envId: string, body?: CreateBranchDatabaseInput) => Promise<{
31
- branch: BranchDatabase;
32
- }>;
33
- export declare const get: (client: Client, projectId: string, envId: string) => Promise<{
34
- branch: BranchDatabase;
35
- }>;
36
- declare const _delete: (client: Client, projectId: string, envId: string) => Promise<{
37
- success: boolean;
38
- }>;
14
+ export type BranchDatabase = ContractBranchDatabase;
15
+ export type CreateBranchDatabaseInput = ContractCreateBranchDatabaseInput;
16
+ export declare const list: (client: Client, projectId: string) => Promise<ListBranchDatabasesResult>;
17
+ export declare const create: (client: Client, projectId: string, envId: string, body: CreateBranchDatabaseInput) => Promise<BranchDatabase>;
18
+ export declare const get: (client: Client, projectId: string, envId: string) => Promise<BranchDatabase>;
19
+ declare const _delete: (client: Client, projectId: string, envId: string) => Promise<DestroyBranchDatabaseResult>;
39
20
  export { _delete as delete };
40
21
  /**
41
- * Merge a branch database back into its parent. ADR-089 Phase 4b adds
42
- * the Management SDK surface; the underlying platform endpoint is wired
43
- * via the contract's `merge` key (Expand-and-contract safe: no-op if the
44
- * server hasn't shipped the route yet it returns 404 which ApiError
45
- * propagates to the caller).
22
+ * Merge a branch database back into its parent.
23
+ *
24
+ * The current server route is not contract-backed, so callers should treat
25
+ * this as an experimental management helper until the merge endpoint joins
26
+ * the contract SSOT.
46
27
  */
47
28
  export declare const merge: (client: Client, projectId: string, envId: string, body?: {
48
29
  readonly strategy?: "fast-forward" | "squash" | "rebase";
@@ -1 +1 @@
1
- {"version":3,"file":"branchDatabases.d.ts","sourceRoot":"","sources":["../src/branchDatabases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,UAAU,CAAA;CACjE;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,eAAO,MAAM,IAAI,GAChB,QAAQ,MAAM,EACd,WAAW,MAAM,KACf,OAAO,CAAC;IAAE,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CAGjD,CAAA;AAED,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,OAAM,yBAA8B,KAClC,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAGpC,CAAA;AAED,eAAO,MAAM,GAAG,GACf,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,MAAM,KACX,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAGpC,CAAA;AAED,QAAA,MAAM,OAAO,GACZ,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,MAAM,KACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAG9B,CAAA;AACD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GACjB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,OAAM;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAO,KACrE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAM/C,CAAA"}
1
+ {"version":3,"file":"branchDatabases.d.ts","sourceRoot":"","sources":["../src/branchDatabases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACX,cAAc,IAAI,sBAAsB,EACxC,yBAAyB,IAAI,iCAAiC,EAC9D,2BAA2B,EAC3B,yBAAyB,EACzB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,MAAM,cAAc,GAAG,sBAAsB,CAAA;AACnD,MAAM,MAAM,yBAAyB,GAAG,iCAAiC,CAAA;AAEzE,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,OAAO,CAAC,yBAAyB,CAGzF,CAAA;AAED,eAAO,MAAM,MAAM,GAClB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,MAAM,yBAAyB,KAC7B,OAAO,CAAC,cAAc,CAGxB,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,cAAc,CAG5F,CAAA;AAED,QAAA,MAAM,OAAO,GACZ,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,MAAM,KACX,OAAO,CAAC,2BAA2B,CAGrC,CAAA;AACD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAA;AAE5B;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GACjB,QAAQ,MAAM,EACd,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,OAAM;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAA;CAAO,KACrE,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAM/C,CAAA"}
@@ -15,7 +15,7 @@ export const list = (client, projectId) => {
15
15
  const { method, path } = branchDatabasesEndpoints.list;
16
16
  return request(client, method, interpolatePath(path, { id: projectId }));
17
17
  };
18
- export const create = (client, projectId, envId, body = {}) => {
18
+ export const create = (client, projectId, envId, body) => {
19
19
  const { method, path } = branchDatabasesEndpoints.create;
20
20
  return request(client, method, interpolatePath(path, { id: projectId, envId }), { body });
21
21
  };
@@ -29,10 +29,10 @@ const _delete = (client, projectId, envId) => {
29
29
  };
30
30
  export { _delete as delete };
31
31
  /**
32
- * Merge a branch database back into its parent. ADR-089 Phase 4b adds
33
- * the Management SDK surface; the underlying platform endpoint is wired
34
- * via the contract's `merge` key (Expand-and-contract safe: no-op if the
35
- * server hasn't shipped the route yet it returns 404 which ApiError
36
- * propagates to the caller).
32
+ * Merge a branch database back into its parent.
33
+ *
34
+ * The current server route is not contract-backed, so callers should treat
35
+ * this as an experimental management helper until the merge endpoint joins
36
+ * the contract SSOT.
37
37
  */
38
38
  export const merge = (client, projectId, envId, body = {}) => request(client, 'POST', `/projects/${encodeURIComponent(projectId)}/preview-envs/${encodeURIComponent(envId)}/branch-db/merge`, { body });
package/dist/client.d.ts CHANGED
@@ -28,12 +28,19 @@ export interface ClientOptions {
28
28
  readonly baseUrl?: string;
29
29
  /** User-Agent header value. Default: `@sylphx/management/1.0.0`. */
30
30
  readonly userAgent?: string;
31
+ /**
32
+ * Optional organization selector for user-context Management API calls.
33
+ * Multi-org operators use this to scope requests without minting a separate
34
+ * OAuth token per org.
35
+ */
36
+ readonly preferredOrgId?: string;
31
37
  }
32
38
  export interface Client {
33
39
  readonly token: string;
34
40
  readonly baseUrl: string;
35
41
  readonly apiBase: string;
36
42
  readonly userAgent: string;
43
+ readonly preferredOrgId?: string;
37
44
  }
38
45
  export declare function createClient(opts: ClientOptions): Client;
39
46
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,oEAAoE;IACpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAQxD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,oEAAoE;IACpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAUxD"}
package/dist/client.js CHANGED
@@ -24,10 +24,12 @@
24
24
  */
25
25
  export function createClient(opts) {
26
26
  const baseUrl = opts.baseUrl ?? 'https://api.sylphx.com';
27
- return Object.freeze({
27
+ const client = {
28
28
  token: opts.token,
29
29
  baseUrl,
30
30
  apiBase: `${baseUrl}/v1`,
31
31
  userAgent: opts.userAgent ?? '@sylphx/management/1.0.0',
32
- });
32
+ ...(opts.preferredOrgId ? { preferredOrgId: opts.preferredOrgId } : {}),
33
+ };
34
+ return Object.freeze(client);
33
35
  }
package/dist/http.d.ts CHANGED
@@ -9,11 +9,32 @@
9
9
  * the raw text.
10
10
  * - Returns `undefined` for 204 No Content.
11
11
  * - Accepts optional `body` (JSON-stringified) and `query` (URL-encoded).
12
+ * - Auto-injects an `Idempotency-Key` header on every mutation
13
+ * (POST / PUT / PATCH / DELETE) unless one is explicitly provided
14
+ * or `idempotency: false` is set. See `RequestOptions.idempotencyKey`.
12
15
  */
13
16
  import type { Client } from './client.js';
14
17
  export interface RequestOptions {
15
18
  readonly body?: unknown;
16
19
  readonly query?: Readonly<Record<string, string | undefined>>;
20
+ /**
21
+ * Explicit Idempotency-Key. When omitted on a mutating method, the
22
+ * SDK auto-generates a fresh UUID v4 per call so accidental
23
+ * network-retries of the SAME SDK invocation are server-side
24
+ * dedup'd (server middleware `idempotencyMiddleware` enforces).
25
+ *
26
+ * Pass an explicit key when:
27
+ * - The caller wants cross-process retry safety (e.g. a CI script
28
+ * re-running on retry must produce the same logical mutation).
29
+ * - The caller is replaying the SAME deterministic operation and
30
+ * expects the cached response.
31
+ *
32
+ * Pass `null` to opt out entirely (the server middleware no-ops on
33
+ * absent header — this is the "I know what I'm doing" escape hatch
34
+ * for endpoints that DO accept duplicate non-idempotent submissions
35
+ * by design, e.g. usage-counter increments).
36
+ */
37
+ readonly idempotencyKey?: string | null;
17
38
  }
18
39
  /**
19
40
  * Substitute `:param` tokens in a contract-sourced path with URL-encoded
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;CAC7D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAO9F;AAED,wBAAsB,OAAO,CAAC,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,CAAC,CA6CZ"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMzC,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;IAC7D;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvC;AAYD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAO9F;AAED,wBAAsB,OAAO,CAAC,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,CAAC,CA2DZ"}
package/dist/http.js CHANGED
@@ -9,8 +9,22 @@
9
9
  * the raw text.
10
10
  * - Returns `undefined` for 204 No Content.
11
11
  * - Accepts optional `body` (JSON-stringified) and `query` (URL-encoded).
12
+ * - Auto-injects an `Idempotency-Key` header on every mutation
13
+ * (POST / PUT / PATCH / DELETE) unless one is explicitly provided
14
+ * or `idempotency: false` is set. See `RequestOptions.idempotencyKey`.
12
15
  */
13
16
  import { ApiError } from './errors.js';
17
+ /** HTTP methods we treat as mutations for idempotency-key injection. */
18
+ const MUTATING_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
19
+ /**
20
+ * Generate a fresh idempotency key per call. We use `crypto.randomUUID`
21
+ * (available in Bun, Node 20+, Deno, Workers, modern browsers — all our
22
+ * supported runtimes). The server accepts any opaque string ≤256 chars;
23
+ * UUID v4 is 36 chars and collision-free at our volumes.
24
+ */
25
+ function newIdempotencyKey() {
26
+ return crypto.randomUUID();
27
+ }
14
28
  /**
15
29
  * Substitute `:param` tokens in a contract-sourced path with URL-encoded
16
30
  * values. Throws if any token is missing from `params` — the SDK should
@@ -41,11 +55,25 @@ export async function request(client, method, path, opts) {
41
55
  Accept: 'application/json',
42
56
  'User-Agent': client.userAgent,
43
57
  };
58
+ if (client.preferredOrgId)
59
+ headers['X-Preferred-Org-Id'] = client.preferredOrgId;
44
60
  // Only send Content-Type when we actually have a body to describe.
45
61
  // Some strict proxies (Cloudflare in non-standard modes, certain
46
62
  // WAFs) reject GET / DELETE requests carrying a bodyless Content-Type.
47
63
  if (hasBody)
48
64
  headers['Content-Type'] = 'application/json';
65
+ // Auto-inject Idempotency-Key on mutations. The server middleware
66
+ // at `apps/api/.../idempotency.ts` is mounted globally and no-ops
67
+ // on safe methods + on requests without the header — sending it
68
+ // gratuitously is harmless on routes that don't expect it. The key
69
+ // is ALWAYS sent for mutations unless caller passes `null` to opt
70
+ // out (e.g. usage-counter endpoints that want duplicate writes).
71
+ if (MUTATING_METHODS.has(method.toUpperCase())) {
72
+ const explicit = opts?.idempotencyKey;
73
+ if (explicit !== null) {
74
+ headers['Idempotency-Key'] = explicit ?? newIdempotencyKey();
75
+ }
76
+ }
49
77
  const res = await fetch(url, {
50
78
  method,
51
79
  headers,
package/dist/index.d.ts CHANGED
@@ -19,6 +19,7 @@ export * as admin from './admin.js';
19
19
  export * as adminBootstrap from './adminBootstrap.js';
20
20
  export * as adminBuilds from './adminBuilds.js';
21
21
  export * as adminEnvServices from './adminEnvServices.js';
22
+ export * as adminProjectCredentials from './adminProjectCredentials.js';
22
23
  export * as adminRateLimits from './adminRateLimits.js';
23
24
  export * as adminReconcile from './adminReconcile.js';
24
25
  export * as adminResources from './adminResources.js';
@@ -66,6 +67,7 @@ export * as referrals from './referrals.js';
66
67
  export * as refresh from './refresh.js';
67
68
  export * as remoteConfig from './remoteConfig.js';
68
69
  export * as resourceBindings from './resourceBindings.js';
70
+ export * as resources from './resources.js';
69
71
  export * as runners from './runners.js';
70
72
  export * as saml from './saml.js';
71
73
  export * as sandboxes from './sandboxes.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ export * as admin from './admin.js';
20
20
  export * as adminBootstrap from './adminBootstrap.js';
21
21
  export * as adminBuilds from './adminBuilds.js';
22
22
  export * as adminEnvServices from './adminEnvServices.js';
23
+ export * as adminProjectCredentials from './adminProjectCredentials.js';
23
24
  export * as adminRateLimits from './adminRateLimits.js';
24
25
  export * as adminReconcile from './adminReconcile.js';
25
26
  export * as adminResources from './adminResources.js';
@@ -68,6 +69,7 @@ export * as referrals from './referrals.js';
68
69
  export * as refresh from './refresh.js';
69
70
  export * as remoteConfig from './remoteConfig.js';
70
71
  export * as resourceBindings from './resourceBindings.js';
72
+ export * as resources from './resources.js';
71
73
  export * as runners from './runners.js';
72
74
  export * as saml from './saml.js';
73
75
  export * as sandboxes from './sandboxes.js';
@@ -3,10 +3,11 @@
3
3
  *
4
4
  * Wire shape sourced from `@sylphx/contract` (ADR-084).
5
5
  */
6
- import type { Organization as Org, OrgMember, OrgMemberRole, UpdateMemberRoleResult } from '@sylphx/contract';
6
+ import type { MyOrgResponse, OrgMember, OrgMemberRole, UpdateMemberRoleResult, UserOrganizationsResponse } from '@sylphx/contract';
7
7
  import type { Client } from './client.js';
8
8
  export type { OrgMemberRole, UpdateMemberRoleResult };
9
- export declare const current: (client: Client) => Promise<Org>;
9
+ export declare const current: (client: Client) => Promise<MyOrgResponse>;
10
+ export declare const listMemberships: (client: Client) => Promise<UserOrganizationsResponse>;
10
11
  export declare const listMembers: (client: Client, orgId: string) => Promise<OrgMember[]>;
11
12
  export declare const inviteMember: (client: Client, orgId: string, email: string, role: "admin" | "member") => Promise<void>;
12
13
  export declare const removeMember: (client: Client, orgId: string, userId: string) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../src/organizations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,YAAY,IAAI,GAAG,EACnB,SAAS,EACT,aAAa,EACb,sBAAsB,EACtB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAA;AAErD,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,GAAG,CAGnD,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,SAAS,EAAE,CAQpF,CAAA;AAED,eAAO,MAAM,YAAY,GACxB,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,OAAO,MAAM,EACb,MAAM,OAAO,GAAG,QAAQ,KACtB,OAAO,CAAC,IAAI,CAKd,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAGxF,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAC5B,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,MAAM,aAAa,KACjB,OAAO,CAAC,sBAAsB,CAKhC,CAAA"}
1
+ {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../src/organizations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,aAAa,EACb,SAAS,EACT,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAA;AAErD,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,aAAa,CAG7D,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,yBAAyB,CAGjF,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,SAAS,EAAE,CAQpF,CAAA;AAED,eAAO,MAAM,YAAY,GACxB,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,OAAO,MAAM,EACb,MAAM,OAAO,GAAG,QAAQ,KACtB,OAAO,CAAC,IAAI,CAKd,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAGxF,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAC5B,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,MAAM,aAAa,KACjB,OAAO,CAAC,sBAAsB,CAKhC,CAAA"}
@@ -9,6 +9,10 @@ export const current = (client) => {
9
9
  const { method, path } = organizationsEndpoints.current;
10
10
  return request(client, method, path);
11
11
  };
12
+ export const listMemberships = (client) => {
13
+ const { method, path } = organizationsEndpoints.memberships;
14
+ return request(client, method, path);
15
+ };
12
16
  export const listMembers = async (client, orgId) => {
13
17
  const { method, path } = organizationsEndpoints.listMembers;
14
18
  const res = await request(client, method, interpolatePath(path, { orgId }));
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generic managed resources — list/get across database, kv, blob, search, and
3
+ * volume resources through the unified `/resources` Management API.
4
+ */
5
+ import type { Database as Resource } from '@sylphx/contract';
6
+ import type { Client } from './client.js';
7
+ export type ResourceKind = 'database' | 'kv' | 'blob' | 'search' | 'volume';
8
+ export type { Resource };
9
+ export declare const list: (client: Client, options?: {
10
+ readonly kind?: ResourceKind | string;
11
+ }) => Promise<Resource[]>;
12
+ export declare const get: (client: Client, id: string) => Promise<Resource>;
13
+ //# sourceMappingURL=resources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGzC,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAC3E,YAAY,EAAE,QAAQ,EAAE,CAAA;AAExB,eAAO,MAAM,IAAI,GAChB,QAAQ,MAAM,EACd,UAAS;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAAA;CAAO,KACrD,OAAO,CAAC,QAAQ,EAAE,CASpB,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,QAAQ,MAAM,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,QAAQ,CAGhE,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Generic managed resources — list/get across database, kv, blob, search, and
3
+ * volume resources through the unified `/resources` Management API.
4
+ */
5
+ import { resourcesEndpoints } from '@sylphx/contract';
6
+ import { interpolatePath, request } from './http.js';
7
+ export const list = async (client, options = {}) => {
8
+ const { method, path } = resourcesEndpoints.list;
9
+ const res = await request(client, method, path, options.kind ? { query: { kind: options.kind } } : undefined);
10
+ return Array.isArray(res) ? res : (res.data ?? []);
11
+ };
12
+ export const get = (client, id) => {
13
+ const { method, path } = resourcesEndpoints.get;
14
+ return request(client, method, interpolatePath(path, { id }));
15
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sylphx/management",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Sylphx Management SDK — pure-FP Promise client for the Sylphx Platform Management API. 55+ namespaces covering the full PaaS surface (ADR-089 Phase 4b 100% coverage), types derived from @sylphx/contract (Effect Schema SSOT).",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -37,6 +37,10 @@
37
37
  "import": "./dist/billing.js",
38
38
  "types": "./dist/billing.d.ts"
39
39
  },
40
+ "./branchDatabases": {
41
+ "import": "./dist/branchDatabases.js",
42
+ "types": "./dist/branchDatabases.d.ts"
43
+ },
40
44
  "./certs": {
41
45
  "import": "./dist/certs.js",
42
46
  "types": "./dist/certs.d.ts"
@@ -133,6 +137,10 @@
133
137
  "import": "./dist/resourceBindings.js",
134
138
  "types": "./dist/resourceBindings.d.ts"
135
139
  },
140
+ "./resources": {
141
+ "import": "./dist/resources.js",
142
+ "types": "./dist/resources.d.ts"
143
+ },
136
144
  "./runners": {
137
145
  "import": "./dist/runners.js",
138
146
  "types": "./dist/runners.d.ts"
@@ -193,7 +201,7 @@
193
201
  "prepublishOnly": "bun run build"
194
202
  },
195
203
  "dependencies": {
196
- "@sylphx/contract": "workspace:*"
204
+ "@sylphx/contract": "0.3.0"
197
205
  },
198
206
  "files": [
199
207
  "dist",