@pantheon-systems/css-client 0.4.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 (89) hide show
  1. package/dist/auth.d.ts +54 -0
  2. package/dist/auth.d.ts.map +1 -0
  3. package/dist/auth.js +72 -0
  4. package/dist/auth.js.map +1 -0
  5. package/dist/broker.d.ts +41 -0
  6. package/dist/broker.d.ts.map +1 -0
  7. package/dist/broker.js +187 -0
  8. package/dist/broker.js.map +1 -0
  9. package/dist/client.d.ts +138 -0
  10. package/dist/client.d.ts.map +1 -0
  11. package/dist/client.js +130 -0
  12. package/dist/client.js.map +1 -0
  13. package/dist/content.d.ts +45 -0
  14. package/dist/content.d.ts.map +1 -0
  15. package/dist/content.js +65 -0
  16. package/dist/content.js.map +1 -0
  17. package/dist/endpoints/agent-edit.d.ts +79 -0
  18. package/dist/endpoints/agent-edit.d.ts.map +1 -0
  19. package/dist/endpoints/agent-edit.js +125 -0
  20. package/dist/endpoints/agent-edit.js.map +1 -0
  21. package/dist/endpoints/agent-registry.d.ts +59 -0
  22. package/dist/endpoints/agent-registry.d.ts.map +1 -0
  23. package/dist/endpoints/agent-registry.js +96 -0
  24. package/dist/endpoints/agent-registry.js.map +1 -0
  25. package/dist/endpoints/base.d.ts +49 -0
  26. package/dist/endpoints/base.d.ts.map +1 -0
  27. package/dist/endpoints/base.js +150 -0
  28. package/dist/endpoints/base.js.map +1 -0
  29. package/dist/endpoints/branches.d.ts +32 -0
  30. package/dist/endpoints/branches.d.ts.map +1 -0
  31. package/dist/endpoints/branches.js +69 -0
  32. package/dist/endpoints/branches.js.map +1 -0
  33. package/dist/endpoints/checkpoints.d.ts +36 -0
  34. package/dist/endpoints/checkpoints.d.ts.map +1 -0
  35. package/dist/endpoints/checkpoints.js +76 -0
  36. package/dist/endpoints/checkpoints.js.map +1 -0
  37. package/dist/endpoints/documents.d.ts +46 -0
  38. package/dist/endpoints/documents.d.ts.map +1 -0
  39. package/dist/endpoints/documents.js +101 -0
  40. package/dist/endpoints/documents.js.map +1 -0
  41. package/dist/endpoints/index.d.ts +15 -0
  42. package/dist/endpoints/index.d.ts.map +1 -0
  43. package/dist/endpoints/index.js +16 -0
  44. package/dist/endpoints/index.js.map +1 -0
  45. package/dist/endpoints/merge.d.ts +51 -0
  46. package/dist/endpoints/merge.d.ts.map +1 -0
  47. package/dist/endpoints/merge.js +104 -0
  48. package/dist/endpoints/merge.js.map +1 -0
  49. package/dist/endpoints/presence.d.ts +55 -0
  50. package/dist/endpoints/presence.d.ts.map +1 -0
  51. package/dist/endpoints/presence.js +72 -0
  52. package/dist/endpoints/presence.js.map +1 -0
  53. package/dist/endpoints/sites.d.ts +20 -0
  54. package/dist/endpoints/sites.d.ts.map +1 -0
  55. package/dist/endpoints/sites.js +38 -0
  56. package/dist/endpoints/sites.js.map +1 -0
  57. package/dist/endpoints/versions.d.ts +37 -0
  58. package/dist/endpoints/versions.d.ts.map +1 -0
  59. package/dist/endpoints/versions.js +64 -0
  60. package/dist/endpoints/versions.js.map +1 -0
  61. package/dist/errors.d.ts +61 -0
  62. package/dist/errors.d.ts.map +1 -0
  63. package/dist/errors.js +87 -0
  64. package/dist/errors.js.map +1 -0
  65. package/dist/index.d.ts +20 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +20 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/jwt-utils.d.ts +13 -0
  70. package/dist/jwt-utils.d.ts.map +1 -0
  71. package/dist/jwt-utils.js +45 -0
  72. package/dist/jwt-utils.js.map +1 -0
  73. package/dist/oauth.d.ts +64 -0
  74. package/dist/oauth.d.ts.map +1 -0
  75. package/dist/oauth.js +62 -0
  76. package/dist/oauth.js.map +1 -0
  77. package/dist/realtime.d.ts +314 -0
  78. package/dist/realtime.d.ts.map +1 -0
  79. package/dist/realtime.js +615 -0
  80. package/dist/realtime.js.map +1 -0
  81. package/dist/types.d.ts +703 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +7 -0
  84. package/dist/types.js.map +1 -0
  85. package/dist/utils.d.ts +3 -0
  86. package/dist/utils.d.ts.map +1 -0
  87. package/dist/utils.js +17 -0
  88. package/dist/utils.js.map +1 -0
  89. package/package.json +56 -0
@@ -0,0 +1,45 @@
1
+ /**
2
+ * P1 Content Client
3
+ *
4
+ * Read-only client for fetching published content from the P1 content delivery API.
5
+ * Designed for server-side use (e.g., Next.js SSR/SSG) without pulling in
6
+ * browser dependencies like partysocket.
7
+ */
8
+ export interface P1ContentClientConfig {
9
+ baseUrl: string;
10
+ apiToken: string;
11
+ siteId: string;
12
+ branchId?: string;
13
+ }
14
+ export interface PageContent {
15
+ documentId: string;
16
+ path: string;
17
+ data: Record<string, unknown>;
18
+ branchId: string;
19
+ branchName: string;
20
+ isMainBranch: boolean;
21
+ versionNumber: number;
22
+ versionCreatedAt: string;
23
+ etag: string;
24
+ }
25
+ export interface PageListEntry {
26
+ path: string;
27
+ documentId: string;
28
+ lastModifiedAt: string;
29
+ }
30
+ export interface PageListResult {
31
+ pages: PageListEntry[];
32
+ branchId: string;
33
+ branchName: string;
34
+ isMainBranch: boolean;
35
+ }
36
+ export declare class P1ContentClient {
37
+ private baseUrl;
38
+ private apiToken;
39
+ private siteId;
40
+ private branchId?;
41
+ constructor(config: P1ContentClientConfig);
42
+ getPage(documentPath: string): Promise<PageContent | null>;
43
+ getPagePaths(): Promise<PageListResult>;
44
+ }
45
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB;AAcD,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,MAAM,EAAE,qBAAqB;IAOnC,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsB1D,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;CAiB9C"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * P1 Content Client
3
+ *
4
+ * Read-only client for fetching published content from the P1 content delivery API.
5
+ * Designed for server-side use (e.g., Next.js SSR/SSG) without pulling in
6
+ * browser dependencies like partysocket.
7
+ */
8
+ import { P1ApiError } from './errors.js';
9
+ function trimTrailingSlashes(value) {
10
+ let end = value.length;
11
+ while (end > 0 && value[end - 1] === '/')
12
+ end--;
13
+ return value.slice(0, end);
14
+ }
15
+ function trimLeadingSlashes(value) {
16
+ let start = 0;
17
+ while (start < value.length && value[start] === '/')
18
+ start++;
19
+ return value.slice(start);
20
+ }
21
+ export class P1ContentClient {
22
+ baseUrl;
23
+ apiToken;
24
+ siteId;
25
+ branchId;
26
+ constructor(config) {
27
+ this.baseUrl = trimTrailingSlashes(config.baseUrl);
28
+ this.apiToken = config.apiToken;
29
+ this.siteId = config.siteId;
30
+ this.branchId = config.branchId;
31
+ }
32
+ async getPage(documentPath) {
33
+ const cleanPath = trimLeadingSlashes(documentPath);
34
+ let url = `${this.baseUrl}/api/sites/${this.siteId}/content/${cleanPath}`;
35
+ if (this.branchId) {
36
+ url += `?branch=${this.branchId}`;
37
+ }
38
+ const response = await fetch(url, {
39
+ headers: { 'X-API-Key': this.apiToken },
40
+ });
41
+ if (response.status === 404) {
42
+ return null;
43
+ }
44
+ if (!response.ok) {
45
+ const body = await response.json().catch(() => ({ error: 'Unknown error' }));
46
+ throw new P1ApiError(body.error || `HTTP ${response.status}`, response.status);
47
+ }
48
+ return response.json();
49
+ }
50
+ async getPagePaths() {
51
+ let url = `${this.baseUrl}/api/sites/${this.siteId}/content-pages`;
52
+ if (this.branchId) {
53
+ url += `?branch=${this.branchId}`;
54
+ }
55
+ const response = await fetch(url, {
56
+ headers: { 'X-API-Key': this.apiToken },
57
+ });
58
+ if (!response.ok) {
59
+ const body = await response.json().catch(() => ({ error: 'Unknown error' }));
60
+ throw new P1ApiError(body.error || `HTTP ${response.status}`, response.status);
61
+ }
62
+ return response.json();
63
+ }
64
+ }
65
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Agent Edit Endpoint
3
+ *
4
+ * API endpoints for the agent edit workflow (politeness protocol).
5
+ */
6
+ import type { BaseEndpoint } from './base.js';
7
+ import type { AgentEditContext, AgentEditPermission, AgentEditSession, AgentEditCompleteResult, AgentEditAbortResult, AgentStopResult } from '../types.js';
8
+ /**
9
+ * Agent edit endpoint for managing agent edit sessions.
10
+ */
11
+ export declare class AgentEditEndpoint {
12
+ private readonly base;
13
+ constructor(base: BaseEndpoint);
14
+ /**
15
+ * Encode document path for URL.
16
+ * Document paths start with / which needs proper encoding.
17
+ */
18
+ private encodeDocumentPath;
19
+ /**
20
+ * Check if an agent can edit a document.
21
+ *
22
+ * Returns whether the agent can proceed and, if not, the reason why.
23
+ *
24
+ * @param siteId - Site ID
25
+ * @param branchId - Branch ID
26
+ * @param documentPath - Document path (e.g., "/home")
27
+ * @param context - Agent edit context (agentId, trigger, intent, targetRegions)
28
+ */
29
+ canEdit(siteId: string, branchId: string, documentPath: string, context: AgentEditContext): Promise<AgentEditPermission>;
30
+ /**
31
+ * Start an agent edit session.
32
+ *
33
+ * Reserves the edit session, sets focus regions, and optionally creates
34
+ * a checkpoint for autonomous edits.
35
+ *
36
+ * @param siteId - Site ID
37
+ * @param branchId - Branch ID
38
+ * @param documentPath - Document path
39
+ * @param context - Agent edit context
40
+ */
41
+ startEdit(siteId: string, branchId: string, documentPath: string, context: AgentEditContext): Promise<AgentEditSession>;
42
+ /**
43
+ * Complete an agent edit session.
44
+ *
45
+ * Clears focus regions and updates checkpoint status.
46
+ *
47
+ * @param siteId - Site ID
48
+ * @param branchId - Branch ID
49
+ * @param documentPath - Document path
50
+ * @param agentId - Agent ID
51
+ */
52
+ completeEdit(siteId: string, branchId: string, documentPath: string, agentId: string): Promise<AgentEditCompleteResult>;
53
+ /**
54
+ * Abort an agent edit session.
55
+ *
56
+ * Rolls back to the checkpoint created at edit-start.
57
+ *
58
+ * @param siteId - Site ID
59
+ * @param branchId - Branch ID
60
+ * @param documentPath - Document path
61
+ * @param agentId - Agent ID
62
+ * @param checkpointId - Checkpoint to rollback to
63
+ */
64
+ abortEdit(siteId: string, branchId: string, documentPath: string, agentId: string, checkpointId: string): Promise<AgentEditAbortResult>;
65
+ /**
66
+ * Stop an agent's edit session (human-initiated).
67
+ *
68
+ * Server looks up the agent's active session and rolls back
69
+ * to the checkpoint created at edit-start. This allows humans
70
+ * to stop an agent without knowing the session/checkpoint IDs.
71
+ *
72
+ * @param siteId - Site ID
73
+ * @param branchId - Branch ID
74
+ * @param documentPath - Document path
75
+ * @param agentId - Agent ID to stop
76
+ */
77
+ stopAgent(siteId: string, branchId: string, documentPath: string, agentId: string): Promise<AgentStopResult>;
78
+ }
79
+ //# sourceMappingURL=agent-edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-edit.d.ts","sourceRoot":"","sources":["../../src/endpoints/agent-edit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,YAAY;IAE/C;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;;;;;;OASG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,mBAAmB,CAAC;IAmB/B;;;;;;;;;;OAUG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,gBAAgB,CAAC;IAmB5B;;;;;;;;;OASG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC;IAYnC;;;;;;;;;;OAUG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAYhC;;;;;;;;;;;OAWG;IACG,SAAS,CACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;CAW5B"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Agent Edit Endpoint
3
+ *
4
+ * API endpoints for the agent edit workflow (politeness protocol).
5
+ */
6
+ /**
7
+ * Agent edit endpoint for managing agent edit sessions.
8
+ */
9
+ export class AgentEditEndpoint {
10
+ base;
11
+ constructor(base) {
12
+ this.base = base;
13
+ }
14
+ /**
15
+ * Encode document path for URL.
16
+ * Document paths start with / which needs proper encoding.
17
+ */
18
+ encodeDocumentPath(documentPath) {
19
+ return encodeURIComponent(documentPath);
20
+ }
21
+ /**
22
+ * Check if an agent can edit a document.
23
+ *
24
+ * Returns whether the agent can proceed and, if not, the reason why.
25
+ *
26
+ * @param siteId - Site ID
27
+ * @param branchId - Branch ID
28
+ * @param documentPath - Document path (e.g., "/home")
29
+ * @param context - Agent edit context (agentId, trigger, intent, targetRegions)
30
+ */
31
+ async canEdit(siteId, branchId, documentPath, context) {
32
+ const encodedPath = this.encodeDocumentPath(documentPath);
33
+ return this.base.request(`/api/sites/${siteId}/branches/${branchId}/documents/${encodedPath}/can-agent-edit`, {
34
+ method: 'POST',
35
+ body: JSON.stringify({
36
+ agentId: context.agentId,
37
+ trigger: context.trigger,
38
+ requestedById: context.requestedById,
39
+ intent: context.intent,
40
+ targetRegions: context.targetRegions,
41
+ operationType: context.operationType,
42
+ }),
43
+ });
44
+ }
45
+ /**
46
+ * Start an agent edit session.
47
+ *
48
+ * Reserves the edit session, sets focus regions, and optionally creates
49
+ * a checkpoint for autonomous edits.
50
+ *
51
+ * @param siteId - Site ID
52
+ * @param branchId - Branch ID
53
+ * @param documentPath - Document path
54
+ * @param context - Agent edit context
55
+ */
56
+ async startEdit(siteId, branchId, documentPath, context) {
57
+ const encodedPath = this.encodeDocumentPath(documentPath);
58
+ return this.base.request(`/api/sites/${siteId}/branches/${branchId}/documents/${encodedPath}/agent-edit-start`, {
59
+ method: 'POST',
60
+ body: JSON.stringify({
61
+ agentId: context.agentId,
62
+ trigger: context.trigger,
63
+ requestedById: context.requestedById,
64
+ intent: context.intent,
65
+ targetRegions: context.targetRegions,
66
+ operationType: context.operationType,
67
+ }),
68
+ });
69
+ }
70
+ /**
71
+ * Complete an agent edit session.
72
+ *
73
+ * Clears focus regions and updates checkpoint status.
74
+ *
75
+ * @param siteId - Site ID
76
+ * @param branchId - Branch ID
77
+ * @param documentPath - Document path
78
+ * @param agentId - Agent ID
79
+ */
80
+ async completeEdit(siteId, branchId, documentPath, agentId) {
81
+ const encodedPath = this.encodeDocumentPath(documentPath);
82
+ return this.base.request(`/api/sites/${siteId}/branches/${branchId}/documents/${encodedPath}/agent-edit-complete`, {
83
+ method: 'POST',
84
+ body: JSON.stringify({ agentId }),
85
+ });
86
+ }
87
+ /**
88
+ * Abort an agent edit session.
89
+ *
90
+ * Rolls back to the checkpoint created at edit-start.
91
+ *
92
+ * @param siteId - Site ID
93
+ * @param branchId - Branch ID
94
+ * @param documentPath - Document path
95
+ * @param agentId - Agent ID
96
+ * @param checkpointId - Checkpoint to rollback to
97
+ */
98
+ async abortEdit(siteId, branchId, documentPath, agentId, checkpointId) {
99
+ const encodedPath = this.encodeDocumentPath(documentPath);
100
+ return this.base.request(`/api/sites/${siteId}/branches/${branchId}/documents/${encodedPath}/agent-edit-abort`, {
101
+ method: 'POST',
102
+ body: JSON.stringify({ agentId, checkpointId }),
103
+ });
104
+ }
105
+ /**
106
+ * Stop an agent's edit session (human-initiated).
107
+ *
108
+ * Server looks up the agent's active session and rolls back
109
+ * to the checkpoint created at edit-start. This allows humans
110
+ * to stop an agent without knowing the session/checkpoint IDs.
111
+ *
112
+ * @param siteId - Site ID
113
+ * @param branchId - Branch ID
114
+ * @param documentPath - Document path
115
+ * @param agentId - Agent ID to stop
116
+ */
117
+ async stopAgent(siteId, branchId, documentPath, agentId) {
118
+ const encodedPath = this.encodeDocumentPath(documentPath);
119
+ return this.base.request(`/api/sites/${siteId}/branches/${branchId}/documents/${encodedPath}/agent-stop`, {
120
+ method: 'POST',
121
+ body: JSON.stringify({ agentId }),
122
+ });
123
+ }
124
+ }
125
+ //# sourceMappingURL=agent-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-edit.js","sourceRoot":"","sources":["../../src/endpoints/agent-edit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Agent Registry Endpoint
3
+ *
4
+ * API endpoints for managing registered agents in an organization.
5
+ */
6
+ import type { BaseEndpoint } from './base.js';
7
+ import type { RegisteredAgent, CreateAgentParams, UpdateAgentParams, ListAgentsOptions, AgentStatus } from '../types.js';
8
+ /**
9
+ * Agent registry endpoint for managing organization agents.
10
+ */
11
+ export declare class AgentRegistryEndpoint {
12
+ private readonly base;
13
+ constructor(base: BaseEndpoint);
14
+ /**
15
+ * List all agents in an organization.
16
+ *
17
+ * @param orgId - Organization ID
18
+ * @param options - Optional filters (status)
19
+ */
20
+ list(orgId: string, options?: ListAgentsOptions): Promise<RegisteredAgent[]>;
21
+ /**
22
+ * Get a specific agent by ID.
23
+ *
24
+ * @param orgId - Organization ID
25
+ * @param agentId - Agent ID
26
+ */
27
+ get(orgId: string, agentId: string): Promise<RegisteredAgent>;
28
+ /**
29
+ * Create a new agent in an organization.
30
+ *
31
+ * @param orgId - Organization ID
32
+ * @param params - Agent creation parameters
33
+ */
34
+ create(orgId: string, params: CreateAgentParams): Promise<RegisteredAgent>;
35
+ /**
36
+ * Update an agent's properties.
37
+ *
38
+ * @param orgId - Organization ID
39
+ * @param agentId - Agent ID
40
+ * @param params - Properties to update
41
+ */
42
+ update(orgId: string, agentId: string, params: UpdateAgentParams): Promise<RegisteredAgent>;
43
+ /**
44
+ * Update an agent's status.
45
+ *
46
+ * @param orgId - Organization ID
47
+ * @param agentId - Agent ID
48
+ * @param status - New status (active, suspended, disabled)
49
+ */
50
+ updateStatus(orgId: string, agentId: string, status: AgentStatus): Promise<RegisteredAgent>;
51
+ /**
52
+ * Delete an agent.
53
+ *
54
+ * @param orgId - Organization ID
55
+ * @param agentId - Agent ID
56
+ */
57
+ delete(orgId: string, agentId: string): Promise<void>;
58
+ }
59
+ //# sourceMappingURL=agent-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.d.ts","sourceRoot":"","sources":["../../src/endpoints/agent-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,YAAY;IAE/C;;;;;OAKG;IACG,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgBlF;;;;;OAKG;IACG,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAOnE;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAYhF;;;;;;OAMG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,eAAe,CAAC;IAU3B;;;;;;OAMG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,eAAe,CAAC;IAU3B;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK5D"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Agent Registry Endpoint
3
+ *
4
+ * API endpoints for managing registered agents in an organization.
5
+ */
6
+ /**
7
+ * Agent registry endpoint for managing organization agents.
8
+ */
9
+ export class AgentRegistryEndpoint {
10
+ base;
11
+ constructor(base) {
12
+ this.base = base;
13
+ }
14
+ /**
15
+ * List all agents in an organization.
16
+ *
17
+ * @param orgId - Organization ID
18
+ * @param options - Optional filters (status)
19
+ */
20
+ async list(orgId, options) {
21
+ let path = `/api/organizations/${orgId}/agents`;
22
+ if (options?.status) {
23
+ const params = new URLSearchParams();
24
+ params.set('status', options.status);
25
+ path += `?${params.toString()}`;
26
+ }
27
+ const response = await this.base.request(path, {
28
+ method: 'GET',
29
+ });
30
+ return response.agents;
31
+ }
32
+ /**
33
+ * Get a specific agent by ID.
34
+ *
35
+ * @param orgId - Organization ID
36
+ * @param agentId - Agent ID
37
+ */
38
+ async get(orgId, agentId) {
39
+ return this.base.request(`/api/organizations/${orgId}/agents/${agentId}`, { method: 'GET' });
40
+ }
41
+ /**
42
+ * Create a new agent in an organization.
43
+ *
44
+ * @param orgId - Organization ID
45
+ * @param params - Agent creation parameters
46
+ */
47
+ async create(orgId, params) {
48
+ return this.base.request(`/api/organizations/${orgId}/agents`, {
49
+ method: 'POST',
50
+ body: JSON.stringify({
51
+ name: params.name,
52
+ description: params.description,
53
+ capabilities: params.capabilities,
54
+ settings: params.settings,
55
+ }),
56
+ });
57
+ }
58
+ /**
59
+ * Update an agent's properties.
60
+ *
61
+ * @param orgId - Organization ID
62
+ * @param agentId - Agent ID
63
+ * @param params - Properties to update
64
+ */
65
+ async update(orgId, agentId, params) {
66
+ return this.base.request(`/api/organizations/${orgId}/agents/${agentId}`, {
67
+ method: 'PATCH',
68
+ body: JSON.stringify(params),
69
+ });
70
+ }
71
+ /**
72
+ * Update an agent's status.
73
+ *
74
+ * @param orgId - Organization ID
75
+ * @param agentId - Agent ID
76
+ * @param status - New status (active, suspended, disabled)
77
+ */
78
+ async updateStatus(orgId, agentId, status) {
79
+ return this.base.request(`/api/organizations/${orgId}/agents/${agentId}/status`, {
80
+ method: 'PUT',
81
+ body: JSON.stringify({ status }),
82
+ });
83
+ }
84
+ /**
85
+ * Delete an agent.
86
+ *
87
+ * @param orgId - Organization ID
88
+ * @param agentId - Agent ID
89
+ */
90
+ async delete(orgId, agentId) {
91
+ await this.base.request(`/api/organizations/${orgId}/agents/${agentId}`, {
92
+ method: 'DELETE',
93
+ });
94
+ }
95
+ }
96
+ //# sourceMappingURL=agent-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/endpoints/agent-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,IAAkB;QAAlB,SAAI,GAAJ,IAAI,CAAc;IAAG,CAAC;IAEnD;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,OAA2B;QACnD,IAAI,IAAI,GAAG,sBAAsB,KAAK,SAAS,CAAC;QAEhD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAgC,IAAI,EAAE;YAC5E,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,MAAM,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,KAAa,EAAE,OAAe;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CACtB,sBAAsB,KAAK,WAAW,OAAO,EAAE,EAC/C,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAyB;QACnD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAkB,sBAAsB,KAAK,SAAS,EAAE;YAC9E,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,KAAa,EACb,OAAe,EACf,MAAyB;QAEzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CACtB,sBAAsB,KAAK,WAAW,OAAO,EAAE,EAC/C;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CACF,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAChB,KAAa,EACb,OAAe,EACf,MAAmB;QAEnB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CACtB,sBAAsB,KAAK,WAAW,OAAO,SAAS,EACtD;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;SACjC,CACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAe;QACzC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO,sBAAsB,KAAK,WAAW,OAAO,EAAE,EAAE;YAC7E,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Base Endpoint
3
+ *
4
+ * Shared HTTP request logic for all endpoints.
5
+ */
6
+ import type { AuthProvider } from '../auth.js';
7
+ import type { Principal } from '../types.js';
8
+ export interface BaseEndpointConfig {
9
+ baseUrl: string;
10
+ authProvider?: AuthProvider;
11
+ principal?: Principal;
12
+ /**
13
+ * Session ID for agent authorization.
14
+ * When set, the X-Agent-Session-Id header will be sent with all requests.
15
+ */
16
+ sessionId?: string;
17
+ /**
18
+ * Optional token refresher for dynamic token management.
19
+ * Called when a 401 Unauthorized response is received.
20
+ * Returns a fresh token string, or null if the session cannot be refreshed.
21
+ */
22
+ tokenRefresher?: () => Promise<string | null>;
23
+ }
24
+ export interface RequestOptions {
25
+ method: 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
26
+ body?: string;
27
+ headers?: Record<string, string>;
28
+ }
29
+ export declare class BaseEndpoint {
30
+ private readonly baseUrl;
31
+ private readonly authProvider?;
32
+ private readonly principal?;
33
+ private readonly sessionId?;
34
+ private readonly tokenRefresher?;
35
+ constructor(config: BaseEndpointConfig);
36
+ /**
37
+ * Make an authenticated HTTP request to the P1 API.
38
+ */
39
+ request<T>(path: string, options: RequestOptions): Promise<T>;
40
+ /**
41
+ * Create a new BaseEndpoint with updated principal.
42
+ */
43
+ withPrincipal(principal: Principal): BaseEndpoint;
44
+ /**
45
+ * Create a new BaseEndpoint with session ID for agent authorization.
46
+ */
47
+ withSessionId(sessionId: string): BaseEndpoint;
48
+ }
49
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/endpoints/base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAW7C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAA+B;gBAEnD,MAAM,EAAE,kBAAkB;IAStC;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IAkHnE;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY;IAUjD;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;CAS/C"}