@native-knowledge/knowledge-sdk 0.1.0-rc.1 → 0.1.0-rc.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.
Files changed (206) hide show
  1. package/LICENSE +202 -21
  2. package/NOTICE +29 -0
  3. package/README.md +26 -38
  4. package/dist/{types/sdk/agent-entry.d.ts → agent-entry.d.ts} +3 -3
  5. package/dist/agent-entry.js +153 -0
  6. package/dist/{types/sdk/agent-guidance-error.d.ts → agent-guidance-error.d.ts} +1 -1
  7. package/dist/agent-guidance-error.js +46 -0
  8. package/dist/auth.d.ts +124 -0
  9. package/dist/auth.js +165 -0
  10. package/dist/{types/sdk/index.d.ts → index.d.ts} +15 -14
  11. package/dist/index.js +159 -6570
  12. package/dist/internal/contracts/artifact.js +103 -0
  13. package/dist/internal/contracts/collection-control.js +69 -0
  14. package/dist/internal/contracts/collection.js +174 -0
  15. package/dist/internal/contracts/common.js +16 -0
  16. package/dist/internal/contracts/currentness.js +221 -0
  17. package/dist/internal/contracts/event.js +35 -0
  18. package/dist/internal/contracts/evidence.js +171 -0
  19. package/dist/{types → internal}/contracts/index.d.ts +0 -1
  20. package/dist/internal/contracts/index.js +54 -0
  21. package/dist/internal/contracts/material-capability.js +8 -0
  22. package/dist/internal/contracts/material-carrier.js +15 -0
  23. package/dist/internal/contracts/material-context.js +9 -0
  24. package/dist/internal/contracts/material-read.js +12 -0
  25. package/dist/internal/contracts/observation.js +39 -0
  26. package/dist/internal/contracts/persistence.js +239 -0
  27. package/dist/internal/contracts/project-intent.js +121 -0
  28. package/dist/internal/contracts/projection.js +194 -0
  29. package/dist/internal/contracts/public-reference.js +87 -0
  30. package/dist/internal/contracts/reference-record.js +55 -0
  31. package/dist/internal/contracts/remote-file.js +159 -0
  32. package/dist/internal/contracts/resource-scope.js +38 -0
  33. package/dist/internal/contracts/review-packet.js +61 -0
  34. package/dist/internal/contracts/review-plane.js +89 -0
  35. package/dist/internal/contracts/rich-document.js +184 -0
  36. package/dist/internal/contracts/runtime-compatibility.js +55 -0
  37. package/dist/internal/contracts/runtime.js +68 -0
  38. package/dist/internal/contracts/scheduler.js +256 -0
  39. package/dist/internal/contracts/signal.js +77 -0
  40. package/dist/internal/contracts/source-governance.js +194 -0
  41. package/dist/internal/contracts/source.js +32 -0
  42. package/dist/internal/contracts/tenant-budget.js +34 -0
  43. package/dist/internal/contracts/tenant-collection-request.js +58 -0
  44. package/dist/internal/contracts/tenant-collection.js +66 -0
  45. package/dist/internal/contracts/tenant-currentness.js +26 -0
  46. package/dist/internal/contracts/tenant-management.js +27 -0
  47. package/dist/internal/contracts/tenant-material-api.js +46 -0
  48. package/dist/internal/contracts/tenant-material-json-schema.js +16 -0
  49. package/dist/internal/contracts/tenant-pdf-text.js +13 -0
  50. package/dist/internal/contracts/tenant-project-control.js +19 -0
  51. package/dist/internal/contracts/tenant-public-reference.js +26 -0
  52. package/dist/internal/contracts/tenant-resource-api.js +70 -0
  53. package/dist/internal/contracts/tenant-resource.js +118 -0
  54. package/dist/internal/contracts/tenant-rich-document.js +17 -0
  55. package/dist/internal/contracts/tenant-source-binding.js +33 -0
  56. package/dist/internal/contracts/tenant-source-bridge.js +9 -0
  57. package/dist/internal/contracts/tenant-source-cutover.js +26 -0
  58. package/dist/internal/contracts/tenant-source-document.js +38 -0
  59. package/dist/internal/contracts/tenant-source-lease.js +5 -0
  60. package/dist/internal/contracts/tenant-source.js +83 -0
  61. package/dist/internal/contracts/tenant-web-collection.js +118 -0
  62. package/dist/internal/contracts/tenant-web-content-plan.js +39 -0
  63. package/dist/internal/contracts/tenant-web-content-result.js +15 -0
  64. package/dist/internal/contracts/tenant-web-content.js +16 -0
  65. package/dist/internal/contracts/tenant-web-crawl.js +55 -0
  66. package/dist/internal/contracts/tenant-web-dynamic.js +68 -0
  67. package/dist/internal/contracts/tenant-web-results.js +41 -0
  68. package/dist/internal/contracts/tenant-web-workflow.js +29 -0
  69. package/dist/internal/serving-contracts/agent-catalog.js +56 -0
  70. package/dist/internal/serving-contracts/agent-entry.js +57 -0
  71. package/dist/internal/serving-contracts/agent-guidance-shapes.js +12 -0
  72. package/dist/internal/serving-contracts/agent-input-hints.js +104 -0
  73. package/dist/internal/serving-contracts/body-search.js +16 -0
  74. package/dist/internal/serving-contracts/consumer.js +45 -0
  75. package/dist/internal/serving-contracts/core.js +76 -0
  76. package/dist/internal/serving-contracts/http.js +64 -0
  77. package/dist/{types → internal}/serving-contracts/index.d.ts +1 -0
  78. package/dist/internal/serving-contracts/index.js +25 -0
  79. package/dist/internal/serving-contracts/management.js +15 -0
  80. package/dist/internal/serving-contracts/material-capabilities.js +14 -0
  81. package/dist/internal/serving-contracts/material-index-status.js +5 -0
  82. package/dist/internal/serving-contracts/mcp.js +140 -0
  83. package/dist/internal/serving-contracts/tenant-governance.js +13 -0
  84. package/dist/internal/serving-contracts/tenant-management.js +89 -0
  85. package/dist/internal/serving-contracts/tenant-project.js +39 -0
  86. package/dist/internal/serving-contracts/tenant-runtime.js +37 -0
  87. package/dist/internal/serving-contracts/tenant-session.d.ts +87 -0
  88. package/dist/internal/serving-contracts/tenant-session.js +8 -0
  89. package/dist/internal/serving-contracts/tenant-web-content.js +20 -0
  90. package/dist/internal/serving-contracts/tenant-web-crawl.js +13 -0
  91. package/dist/internal/serving-contracts/tenant-web-dynamic.js +20 -0
  92. package/dist/internal/serving-contracts/tenant-web-workflow.js +36 -0
  93. package/dist/internal/serving-contracts/tenant-web.js +53 -0
  94. package/dist/internal/serving-contracts/tenant-workspace.js +28 -0
  95. package/dist/internal/serving-contracts/workflow.js +37 -0
  96. package/dist/material-stream.js +29 -0
  97. package/dist/{types/sdk/oauth.d.ts → oauth.d.ts} +18 -18
  98. package/dist/oauth.js +539 -0
  99. package/dist/{types/sdk/resource.d.ts → resource.d.ts} +5 -5
  100. package/dist/resource.js +123 -0
  101. package/dist/session.d.ts +4 -0
  102. package/dist/session.js +3 -0
  103. package/dist/tenant-client.d.ts +169 -0
  104. package/dist/tenant-client.js +58 -0
  105. package/dist/{types/sdk/tenant-management.d.ts → tenant-management.d.ts} +6 -6
  106. package/dist/tenant-management.js +149 -0
  107. package/dist/{types/sdk/tenant-project.d.ts → tenant-project.d.ts} +1 -1
  108. package/dist/tenant-project.js +63 -0
  109. package/dist/{types/sdk/tenant-runtime.d.ts → tenant-runtime.d.ts} +1 -1
  110. package/dist/tenant-runtime.js +17 -0
  111. package/dist/{types/sdk/tenant-web-content.d.ts → tenant-web-content.d.ts} +1 -1
  112. package/dist/tenant-web-content.js +70 -0
  113. package/dist/{types/sdk/tenant-web-crawl.d.ts → tenant-web-crawl.d.ts} +1 -1
  114. package/dist/tenant-web-crawl.js +39 -0
  115. package/dist/{types/sdk/tenant-web-dynamic.d.ts → tenant-web-dynamic.d.ts} +1 -1
  116. package/dist/tenant-web-dynamic.js +39 -0
  117. package/dist/{types/sdk/tenant-web-workflow.d.ts → tenant-web-workflow.d.ts} +1 -1
  118. package/dist/tenant-web-workflow.js +63 -0
  119. package/dist/{types/sdk/tenant-web.d.ts → tenant-web.d.ts} +1 -1
  120. package/dist/tenant-web.js +39 -0
  121. package/dist/{types/sdk/tenant-workspace.d.ts → tenant-workspace.d.ts} +1 -1
  122. package/dist/tenant-workspace.js +21 -0
  123. package/dist/token-provider.d.ts +14 -0
  124. package/dist/token-provider.js +21 -0
  125. package/package.json +27 -15
  126. package/dist/types/contracts/resource-transfer.d.ts +0 -24
  127. package/dist/types/sdk/resource-integrity.d.ts +0 -21
  128. package/dist/types/sdk/transport.d.ts +0 -16
  129. /package/dist/{types → internal}/contracts/artifact.d.ts +0 -0
  130. /package/dist/{types → internal}/contracts/collection-control.d.ts +0 -0
  131. /package/dist/{types → internal}/contracts/collection.d.ts +0 -0
  132. /package/dist/{types → internal}/contracts/common.d.ts +0 -0
  133. /package/dist/{types → internal}/contracts/currentness.d.ts +0 -0
  134. /package/dist/{types → internal}/contracts/event.d.ts +0 -0
  135. /package/dist/{types → internal}/contracts/evidence.d.ts +0 -0
  136. /package/dist/{types → internal}/contracts/material-capability.d.ts +0 -0
  137. /package/dist/{types → internal}/contracts/material-carrier.d.ts +0 -0
  138. /package/dist/{types → internal}/contracts/material-context.d.ts +0 -0
  139. /package/dist/{types → internal}/contracts/material-read.d.ts +0 -0
  140. /package/dist/{types → internal}/contracts/observation.d.ts +0 -0
  141. /package/dist/{types → internal}/contracts/persistence.d.ts +0 -0
  142. /package/dist/{types → internal}/contracts/project-intent.d.ts +0 -0
  143. /package/dist/{types → internal}/contracts/projection.d.ts +0 -0
  144. /package/dist/{types → internal}/contracts/public-reference.d.ts +0 -0
  145. /package/dist/{types → internal}/contracts/reference-record.d.ts +0 -0
  146. /package/dist/{types → internal}/contracts/remote-file.d.ts +0 -0
  147. /package/dist/{types → internal}/contracts/resource-scope.d.ts +0 -0
  148. /package/dist/{types → internal}/contracts/review-packet.d.ts +0 -0
  149. /package/dist/{types → internal}/contracts/review-plane.d.ts +0 -0
  150. /package/dist/{types → internal}/contracts/rich-document.d.ts +0 -0
  151. /package/dist/{types → internal}/contracts/runtime-compatibility.d.ts +0 -0
  152. /package/dist/{types → internal}/contracts/runtime.d.ts +0 -0
  153. /package/dist/{types → internal}/contracts/scheduler.d.ts +0 -0
  154. /package/dist/{types → internal}/contracts/signal.d.ts +0 -0
  155. /package/dist/{types → internal}/contracts/source-governance.d.ts +0 -0
  156. /package/dist/{types → internal}/contracts/source.d.ts +0 -0
  157. /package/dist/{types → internal}/contracts/tenant-budget.d.ts +0 -0
  158. /package/dist/{types → internal}/contracts/tenant-collection-request.d.ts +0 -0
  159. /package/dist/{types → internal}/contracts/tenant-collection.d.ts +0 -0
  160. /package/dist/{types → internal}/contracts/tenant-currentness.d.ts +0 -0
  161. /package/dist/{types → internal}/contracts/tenant-management.d.ts +0 -0
  162. /package/dist/{types → internal}/contracts/tenant-material-api.d.ts +0 -0
  163. /package/dist/{types → internal}/contracts/tenant-pdf-text.d.ts +0 -0
  164. /package/dist/{types → internal}/contracts/tenant-project-control.d.ts +0 -0
  165. /package/dist/{types → internal}/contracts/tenant-public-reference.d.ts +0 -0
  166. /package/dist/{types → internal}/contracts/tenant-resource-api.d.ts +0 -0
  167. /package/dist/{types → internal}/contracts/tenant-resource.d.ts +0 -0
  168. /package/dist/{types → internal}/contracts/tenant-rich-document.d.ts +0 -0
  169. /package/dist/{types → internal}/contracts/tenant-source-binding.d.ts +0 -0
  170. /package/dist/{types → internal}/contracts/tenant-source-bridge.d.ts +0 -0
  171. /package/dist/{types → internal}/contracts/tenant-source-cutover.d.ts +0 -0
  172. /package/dist/{types → internal}/contracts/tenant-source-document.d.ts +0 -0
  173. /package/dist/{types → internal}/contracts/tenant-source-lease.d.ts +0 -0
  174. /package/dist/{types → internal}/contracts/tenant-source.d.ts +0 -0
  175. /package/dist/{types → internal}/contracts/tenant-web-collection.d.ts +0 -0
  176. /package/dist/{types → internal}/contracts/tenant-web-content-plan.d.ts +0 -0
  177. /package/dist/{types → internal}/contracts/tenant-web-content-result.d.ts +0 -0
  178. /package/dist/{types → internal}/contracts/tenant-web-content.d.ts +0 -0
  179. /package/dist/{types → internal}/contracts/tenant-web-crawl.d.ts +0 -0
  180. /package/dist/{types → internal}/contracts/tenant-web-dynamic.d.ts +0 -0
  181. /package/dist/{types → internal}/contracts/tenant-web-results.d.ts +0 -0
  182. /package/dist/{types → internal}/contracts/tenant-web-workflow.d.ts +0 -0
  183. /package/dist/{types → internal}/serving-contracts/agent-catalog.d.ts +0 -0
  184. /package/dist/{types → internal}/serving-contracts/agent-entry.d.ts +0 -0
  185. /package/dist/{types → internal}/serving-contracts/agent-guidance-shapes.d.ts +0 -0
  186. /package/dist/{types → internal}/serving-contracts/agent-input-hints.d.ts +0 -0
  187. /package/dist/{types → internal}/serving-contracts/body-search.d.ts +0 -0
  188. /package/dist/{types → internal}/serving-contracts/consumer.d.ts +0 -0
  189. /package/dist/{types → internal}/serving-contracts/core.d.ts +0 -0
  190. /package/dist/{types → internal}/serving-contracts/http.d.ts +0 -0
  191. /package/dist/{types → internal}/serving-contracts/management.d.ts +0 -0
  192. /package/dist/{types → internal}/serving-contracts/material-capabilities.d.ts +0 -0
  193. /package/dist/{types → internal}/serving-contracts/material-index-status.d.ts +0 -0
  194. /package/dist/{types → internal}/serving-contracts/mcp.d.ts +0 -0
  195. /package/dist/{types → internal}/serving-contracts/tenant-governance.d.ts +0 -0
  196. /package/dist/{types → internal}/serving-contracts/tenant-management.d.ts +0 -0
  197. /package/dist/{types → internal}/serving-contracts/tenant-project.d.ts +0 -0
  198. /package/dist/{types → internal}/serving-contracts/tenant-runtime.d.ts +0 -0
  199. /package/dist/{types → internal}/serving-contracts/tenant-web-content.d.ts +0 -0
  200. /package/dist/{types → internal}/serving-contracts/tenant-web-crawl.d.ts +0 -0
  201. /package/dist/{types → internal}/serving-contracts/tenant-web-dynamic.d.ts +0 -0
  202. /package/dist/{types → internal}/serving-contracts/tenant-web-workflow.d.ts +0 -0
  203. /package/dist/{types → internal}/serving-contracts/tenant-web.d.ts +0 -0
  204. /package/dist/{types → internal}/serving-contracts/tenant-workspace.d.ts +0 -0
  205. /package/dist/{types → internal}/serving-contracts/workflow.d.ts +0 -0
  206. /package/dist/{types/sdk/material-stream.d.ts → material-stream.d.ts} +0 -0
package/dist/auth.d.ts ADDED
@@ -0,0 +1,124 @@
1
+ /// <reference types="node" />
2
+ import { type TenantClientProvider, type TenantSession } from './internal/serving-contracts/index.js';
3
+ export { type TenantSession, type TenantClientProvider };
4
+ export interface OAuthTokens {
5
+ accessToken: string;
6
+ refreshToken: string;
7
+ expiresAt: string;
8
+ scopes: string[];
9
+ }
10
+ export interface AuthorizationTransaction {
11
+ issuer: string;
12
+ resource: string;
13
+ clientId: string;
14
+ redirectUri: string;
15
+ state: string;
16
+ verifier: string;
17
+ authorizationUrl: string;
18
+ expiresAt: number;
19
+ scopes: string[];
20
+ }
21
+ export interface AuthClientOptions {
22
+ baseUrl: string;
23
+ expectedIssuer?: string;
24
+ expectedResource?: string;
25
+ allowInsecureHttp?: boolean;
26
+ fetchImpl?: typeof fetch;
27
+ }
28
+ export declare class AuthError extends Error {
29
+ readonly code: string;
30
+ readonly status: number;
31
+ constructor(code: string, status?: number);
32
+ }
33
+ export declare function authUrl(raw: string, insecure?: boolean): URL;
34
+ export declare class KnowledgeAuthClient {
35
+ private options;
36
+ private root;
37
+ private fetchImpl;
38
+ private cached;
39
+ constructor(options: AuthClientOptions);
40
+ private request;
41
+ discover(): Promise<{
42
+ schemaVersion: 26;
43
+ provider: "knowledge-v2";
44
+ revision: string;
45
+ issuer: string;
46
+ resource: string;
47
+ authorizationServerMetadataUrl: string;
48
+ tenantSessionEndpoint: string;
49
+ tenantOperationStatusEndpoint: string;
50
+ resourceCallEndpoint: string;
51
+ resourceFileEndpoint: string;
52
+ registrationModes: ("PRE_REGISTERED_NATIVE" | "CIMD_READ_ONLY")[];
53
+ callbackModes: "NATIVE_LOOPBACK_PORT_V1"[];
54
+ providers: {
55
+ version: number;
56
+ endpoint: string;
57
+ }[];
58
+ tools: {
59
+ name: string;
60
+ endpoint: string;
61
+ method: "GET" | "POST";
62
+ inputSchema: import("zod").JSONType;
63
+ outputSchema: import("zod").JSONType;
64
+ scopeAlternatives: string[][];
65
+ }[];
66
+ limits: {
67
+ requestMaxBytes: 131072;
68
+ resultMaxBytes: 524288;
69
+ };
70
+ }>;
71
+ metadata(): Promise<{
72
+ issuer: string;
73
+ authorizationEndpoint: string;
74
+ tokenEndpoint: string;
75
+ revocationEndpoint: string;
76
+ }>;
77
+ begin(input: {
78
+ clientId: string;
79
+ redirectUri: string;
80
+ scopes: string[];
81
+ authorityVersion?: 1 | 2;
82
+ expectedTenantRef?: string;
83
+ }): Promise<{
84
+ issuer: string;
85
+ resource: string;
86
+ clientId: string;
87
+ redirectUri: string;
88
+ state: string;
89
+ verifier: string;
90
+ authorizationUrl: string;
91
+ expiresAt: number;
92
+ scopes: string[];
93
+ }>;
94
+ exchange(t: AuthorizationTransaction, callback: URL): Promise<OAuthTokens>;
95
+ private tokens;
96
+ refresh(clientId: string, refreshToken: string, scopes?: string[]): Promise<OAuthTokens>;
97
+ session(token: string, expected?: Partial<Pick<TenantSession, 'issuer' | 'resource' | 'clientId' | 'userId' | 'tenantId' | 'authorityVersion'>>): Promise<{
98
+ schemaVersion: 1;
99
+ issuer: string;
100
+ resource: string;
101
+ clientId: string;
102
+ userId: string;
103
+ tenantId: string;
104
+ tenantRef: string;
105
+ contextType: "TENANT";
106
+ authorityVersion: 2 | 1;
107
+ tokenScopes: string[];
108
+ effectiveScopes: string[];
109
+ expiresAt: string;
110
+ managementConfigured: boolean;
111
+ blockers: string[];
112
+ }>;
113
+ operationStatus(token: string, raw: unknown, expectedTenantId?: string): Promise<{
114
+ schemaVersion: 1;
115
+ tenantId: string;
116
+ requestId: string;
117
+ state: "NOT_FOUND" | "INTENT_PERSISTED";
118
+ operationRef: string | null;
119
+ action: string | null;
120
+ receivedAt: string | null;
121
+ completion: "NOT_PROVEN";
122
+ }>;
123
+ revoke(clientId: string, token: string): Promise<void>;
124
+ }
package/dist/auth.js ADDED
@@ -0,0 +1,165 @@
1
+ import { randomBytes, createHash } from 'node:crypto';
2
+ import { tenantClientProviderSchema, tenantSessionSchema, tenantOperationStatusInputSchema, tenantOperationStatusSchema } from './internal/serving-contracts/index.js';
3
+ export {};
4
+ export class AuthError extends Error {
5
+ code;
6
+ status;
7
+ constructor(code, status = 0) {
8
+ super(code);
9
+ this.code = code;
10
+ this.status = status;
11
+ this.name = 'AuthError';
12
+ }
13
+ }
14
+ export function authUrl(raw, insecure = false) { let u; try {
15
+ u = new URL(raw);
16
+ }
17
+ catch {
18
+ throw new AuthError('AUTH_URL_INVALID');
19
+ } if (u.username || u.password || u.search || u.hash || u.protocol !== 'https:' && !(insecure && u.protocol === 'http:' && ['127.0.0.1', '[::1]', 'localhost'].includes(u.hostname)))
20
+ throw new AuthError('AUTH_URL_INVALID'); return u; }
21
+ export class KnowledgeAuthClient {
22
+ options;
23
+ root;
24
+ fetchImpl;
25
+ cached;
26
+ constructor(options) {
27
+ this.options = options;
28
+ this.root = authUrl(options.baseUrl, options.allowInsecureHttp);
29
+ this.fetchImpl = options.fetchImpl ?? fetch;
30
+ }
31
+ async request(url, init = {}) {
32
+ let response;
33
+ try {
34
+ response = await this.fetchImpl(url, { ...init, redirect: 'error', signal: AbortSignal.timeout(15000) });
35
+ }
36
+ catch {
37
+ throw new AuthError('AUTH_TRANSPORT_FAILURE');
38
+ }
39
+ if (!response.body)
40
+ throw new AuthError('AUTH_RESPONSE_INVALID', response.status);
41
+ const reader = response.body.getReader(), chunks = [];
42
+ let n = 0;
43
+ try {
44
+ while (true) {
45
+ const p = await reader.read();
46
+ if (p.done)
47
+ break;
48
+ n += p.value.length;
49
+ if (n > 524288) {
50
+ await reader.cancel();
51
+ throw new AuthError('AUTH_RESPONSE_BUDGET');
52
+ }
53
+ chunks.push(p.value);
54
+ }
55
+ }
56
+ finally {
57
+ reader.releaseLock();
58
+ }
59
+ let data;
60
+ try {
61
+ data = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(Buffer.concat(chunks)));
62
+ }
63
+ catch {
64
+ throw new AuthError('AUTH_RESPONSE_INVALID', response.status);
65
+ }
66
+ if (!response.ok)
67
+ throw new AuthError(response.status === 401 ? 'AUTH_REQUIRED' : response.status === 403 ? 'AUTH_FORBIDDEN' : response.status === 404 ? 'SERVER_CAPABILITY_UNAVAILABLE' : 'AUTH_REQUEST_FAILED', response.status);
68
+ return data;
69
+ }
70
+ async discover() {
71
+ if (this.cached)
72
+ return this.cached;
73
+ let p;
74
+ try {
75
+ p = tenantClientProviderSchema.parse(await this.request(new URL(this.root.pathname.replace(/\/$/, '') + '/v1/tenant/client-provider', this.root.origin)));
76
+ }
77
+ catch (e) {
78
+ if (e instanceof AuthError)
79
+ throw e;
80
+ throw new AuthError('AUTH_DISCOVERY_INVALID');
81
+ }
82
+ if (this.options.expectedIssuer && p.issuer !== this.options.expectedIssuer || this.options.expectedResource && p.resource !== this.options.expectedResource)
83
+ throw new AuthError('AUTH_ISSUER_MISMATCH');
84
+ authUrl(p.issuer, this.options.allowInsecureHttp);
85
+ authUrl(p.resource, this.options.allowInsecureHttp);
86
+ for (const raw of [p.tenantSessionEndpoint, p.tenantOperationStatusEndpoint, p.resourceCallEndpoint, p.resourceFileEndpoint, ...p.tools.map(t => t.endpoint), ...p.providers.map(t => t.endpoint)])
87
+ if (authUrl(raw, this.options.allowInsecureHttp).origin !== this.root.origin)
88
+ throw new AuthError('AUTH_ENDPOINT_MISMATCH');
89
+ const issuer = authUrl(p.issuer, this.options.allowInsecureHttp);
90
+ if (authUrl(p.authorizationServerMetadataUrl, this.options.allowInsecureHttp).origin !== issuer.origin)
91
+ throw new AuthError('AUTH_ISSUER_MISMATCH');
92
+ this.cached = p;
93
+ return p;
94
+ }
95
+ async metadata() { const p = await this.discover(), m = await this.request(p.authorizationServerMetadataUrl); if (m.issuer !== p.issuer || !Array.isArray(m.code_challenge_methods_supported) || !m.code_challenge_methods_supported.includes('S256') || !Array.isArray(m.grant_types_supported) || !m.grant_types_supported.includes('authorization_code'))
96
+ throw new AuthError('AUTH_DISCOVERY_INVALID'); for (const key of ['authorization_endpoint', 'token_endpoint', 'revocation_endpoint'])
97
+ if (typeof m[key] !== 'string' || (key !== 'authorization_endpoint' && authUrl(m[key], this.options.allowInsecureHttp).origin !== new URL(p.issuer).origin))
98
+ throw new AuthError('AUTH_ENDPOINT_MISMATCH'); authUrl(m.authorization_endpoint, this.options.allowInsecureHttp); return { issuer: p.issuer, authorizationEndpoint: m.authorization_endpoint, tokenEndpoint: m.token_endpoint, revocationEndpoint: m.revocation_endpoint }; }
99
+ async begin(input) {
100
+ const p = await this.discover();
101
+ if (!p.registrationModes.includes('PRE_REGISTERED_NATIVE'))
102
+ throw new AuthError('SERVER_CAPABILITY_UNAVAILABLE');
103
+ const m = await this.metadata(), state = randomBytes(32).toString('base64url'), verifier = randomBytes(48).toString('base64url'), u = new URL(m.authorizationEndpoint);
104
+ const redirect = new URL(input.redirectUri);
105
+ if (redirect.protocol !== 'http:' || !['127.0.0.1', '[::1]'].includes(redirect.hostname) || redirect.search || redirect.hash || redirect.username || redirect.password || !input.scopes.length || input.scopes.length > 32)
106
+ throw new AuthError('AUTH_INPUT_INVALID');
107
+ for (const [k, v] of Object.entries({ response_type: 'code', client_id: input.clientId, redirect_uri: redirect.href, resource: p.resource, scope: input.scopes.join(' '), authority_version: String(input.authorityVersion ?? 1), state, code_challenge: createHash('sha256').update(verifier).digest('base64url'), code_challenge_method: 'S256', ...(input.expectedTenantRef ? { tenant_ref: input.expectedTenantRef } : {}) }))
108
+ u.searchParams.set(k, v);
109
+ return { issuer: p.issuer, resource: p.resource, clientId: input.clientId, redirectUri: redirect.href, state, verifier, authorizationUrl: u.href, expiresAt: Date.now() + 300000, scopes: input.scopes };
110
+ }
111
+ async exchange(t, callback) {
112
+ if (Date.now() >= t.expiresAt || callback.origin !== new URL(t.redirectUri).origin || callback.pathname !== new URL(t.redirectUri).pathname || callback.hash || callback.username || callback.password)
113
+ throw new AuthError('AUTH_CALLBACK_INVALID');
114
+ for (const k of callback.searchParams.keys())
115
+ if (!['state', 'iss', 'code', 'error', 'error_description', 'error_uri'].includes(k) || callback.searchParams.getAll(k).length !== 1)
116
+ throw new AuthError('AUTH_CALLBACK_INVALID');
117
+ if (callback.searchParams.get('state') !== t.state || callback.searchParams.get('iss') !== t.issuer)
118
+ throw new AuthError('AUTH_CALLBACK_INVALID');
119
+ if (callback.searchParams.has('error'))
120
+ throw new AuthError('AUTH_CONSENT_DENIED');
121
+ const code = callback.searchParams.get('code');
122
+ if (!code)
123
+ throw new AuthError('AUTH_CALLBACK_INVALID');
124
+ const p = await this.discover();
125
+ if (p.issuer !== t.issuer || p.resource !== t.resource)
126
+ throw new AuthError('AUTH_ISSUER_MISMATCH');
127
+ return this.tokens(new URLSearchParams({ grant_type: 'authorization_code', client_id: t.clientId, resource: t.resource, redirect_uri: t.redirectUri, code, code_verifier: t.verifier }), t.scopes);
128
+ }
129
+ async tokens(body, allowed) {
130
+ const m = await this.metadata();
131
+ let raw;
132
+ try {
133
+ raw = await this.request(m.tokenEndpoint, { method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded' }, body });
134
+ }
135
+ catch (e) {
136
+ throw new AuthError(e instanceof AuthError && e.status === 400 ? 'AUTH_REAUTH_REQUIRED' : 'AUTH_TOKEN_RESULT_UNKNOWN');
137
+ }
138
+ const r = raw;
139
+ if (r.token_type !== 'Bearer' || typeof r.access_token !== 'string' || typeof r.refresh_token !== 'string' || !/^[-\w]{43}$/.test(r.access_token) || !/^[-\w]{43}$/.test(r.refresh_token) || typeof r.expires_in !== 'number' || !Number.isSafeInteger(r.expires_in) || r.expires_in < 1 || r.expires_in > 86400 || typeof r.scope !== 'string')
140
+ throw new AuthError('AUTH_TOKEN_RESULT_UNKNOWN');
141
+ const scopes = r.scope.split(' ');
142
+ if (allowed && scopes.some(s => !allowed.includes(s)))
143
+ throw new AuthError('AUTH_SCOPE_MISMATCH');
144
+ return { accessToken: r.access_token, refreshToken: r.refresh_token, expiresAt: new Date(Date.now() + r.expires_in * 1000).toISOString(), scopes };
145
+ }
146
+ async refresh(clientId, refreshToken, scopes) { const p = await this.discover(); return this.tokens(new URLSearchParams({ grant_type: 'refresh_token', client_id: clientId, resource: p.resource, refresh_token: refreshToken }), scopes); }
147
+ async session(token, expected) {
148
+ const p = await this.discover();
149
+ let s;
150
+ try {
151
+ s = tenantSessionSchema.parse(await this.request(p.tenantSessionEndpoint, { headers: { authorization: 'Bearer ' + token } }));
152
+ }
153
+ catch (e) {
154
+ if (e instanceof AuthError)
155
+ throw e;
156
+ throw new AuthError('AUTH_SESSION_INVALID');
157
+ }
158
+ if (s.issuer !== p.issuer || s.resource !== p.resource || expected && Object.entries(expected).some(([k, v]) => s[k] !== v))
159
+ throw new AuthError('AUTH_CONTEXT_MISMATCH');
160
+ return s;
161
+ }
162
+ async operationStatus(token, raw, expectedTenantId) { const input = tenantOperationStatusInputSchema.parse(raw), p = await this.discover(), url = new URL(p.tenantOperationStatusEndpoint); url.searchParams.set('requestId', input.requestId); const result = tenantOperationStatusSchema.parse(await this.request(url, { headers: { authorization: 'Bearer ' + token } })); if (expectedTenantId && result.tenantId !== expectedTenantId)
163
+ throw new AuthError('AUTH_CONTEXT_MISMATCH'); return result; }
164
+ async revoke(clientId, token) { const m = await this.metadata(); await this.request(m.revocationEndpoint, { method: 'POST', headers: { 'content-type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ client_id: clientId, token }) }); }
165
+ }
@@ -1,11 +1,10 @@
1
- import { type SdkTransportOptions } from './transport.js';
2
- export type { SdkTransportOptions } from './transport.js';
1
+ /// <reference types="node" />
3
2
  import { type MaterialStreamOptions } from './material-stream.js';
4
3
  export * from './resource.js';
5
4
  export type { MaterialStreamOptions, MaterialStreamResponse } from './material-stream.js';
6
5
  export * from './oauth.js';
7
- import { type MaterialOutboxWindow, type ServingArtifactListResponse, type ServingArtifactPageResponse, type ServingArtifactMaterialPageResponse, type ServingArtifactMaterialResponse, type ServingMaterialPageResponse, type ServingMaterialRoutePageResponse, type ServingMaterialPartitionsResponse, type ServingMaterialPartitionPageResponse, type ServingMaterialSearchResponse, type ServingArtifactResponse, type ServingContentDecisionResponse, type ServingCurrentnessResponse, type ServingEvidenceListResponse, type ServingEvidencePageResponse, type ServingEvidencePresentationResponse, type ServingEvidenceResponse, type ServingHealthResponse, type ServingReferenceListResponse, type ServingReferenceLookupResponse, type ServingReferenceResponse, type ServingReferenceMaterialPageResponse, type ServingReferenceMaterialResponse, type ReferenceLookupFilter, type ServingProjectIntentResponse, type ServingProjectSourceListResponse, type ServingProjectSourceResponse, type ServingSourceResponse } from '../serving-contracts/index.js';
8
- export interface KnowledgeServingClientOptions extends SdkTransportOptions {
6
+ import { type MaterialOutboxWindow, type ServingArtifactListResponse, type ServingArtifactPageResponse, type ServingArtifactMaterialPageResponse, type ServingArtifactMaterialResponse, type ServingMaterialPageResponse, type ServingMaterialRoutePageResponse, type ServingMaterialPartitionsResponse, type ServingMaterialPartitionPageResponse, type ServingMaterialSearchResponse, type ServingArtifactResponse, type ServingContentDecisionResponse, type ServingCurrentnessResponse, type ServingEvidenceListResponse, type ServingEvidencePageResponse, type ServingEvidencePresentationResponse, type ServingEvidenceResponse, type ServingHealthResponse, type ServingReferenceListResponse, type ServingReferenceLookupResponse, type ServingReferenceResponse, type ServingReferenceMaterialPageResponse, type ServingReferenceMaterialResponse, type ReferenceLookupFilter, type ServingProjectIntentResponse, type ServingProjectSourceListResponse, type ServingProjectSourceResponse, type ServingSourceResponse } from './internal/serving-contracts/index.js';
7
+ export interface KnowledgeServingClientOptions {
9
8
  baseUrl: string;
10
9
  token: string;
11
10
  projectKey: string;
@@ -22,7 +21,6 @@ export interface ServingContentResponse {
22
21
  content: Buffer;
23
22
  }
24
23
  export declare class KnowledgeServingClient {
25
- private readonly limits;
26
24
  readonly projectKey: string;
27
25
  private readonly root;
28
26
  private readonly basePath;
@@ -128,19 +126,19 @@ export declare class KnowledgeServingClient {
128
126
  sourceProjectKey: string;
129
127
  identityHash: string;
130
128
  kind: string;
131
- classification: "PUBLIC" | "PUBLIC_METADATA" | "TENANT" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
129
+ classification: "TENANT" | "PUBLIC" | "PUBLIC_METADATA" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
132
130
  mediaType: string;
133
131
  decision: {
134
132
  schemaVersion: 1;
135
133
  action: "ALLOW" | "DENY";
136
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
134
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
137
135
  assessedAt: string;
138
136
  };
139
137
  };
140
138
  materialAccess: {
141
139
  schemaVersion: 1;
142
140
  action: "ALLOW" | "DENY";
143
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
141
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
144
142
  assessedAt: string;
145
143
  };
146
144
  representation: {
@@ -150,7 +148,7 @@ export declare class KnowledgeServingClient {
150
148
  contentHash: string | null;
151
149
  mediaType: string;
152
150
  byteLength: number | null;
153
- methods: ("HEAD" | "GET")[];
151
+ methods: ("GET" | "HEAD")[];
154
152
  range: "NONE" | "SINGLE";
155
153
  verification: "ON_READ";
156
154
  verificationChunkBytes: number | null;
@@ -173,19 +171,19 @@ export declare class KnowledgeServingClient {
173
171
  sourceProjectKey: string;
174
172
  identityHash: string;
175
173
  kind: string;
176
- classification: "PUBLIC" | "PUBLIC_METADATA" | "TENANT" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
174
+ classification: "TENANT" | "PUBLIC" | "PUBLIC_METADATA" | "INTERNAL" | "FDE_INTERNAL" | "ACCESS_CONTROLLED" | "UNKNOWN";
177
175
  mediaType: string;
178
176
  decision: {
179
177
  schemaVersion: 1;
180
178
  action: "ALLOW" | "DENY";
181
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
179
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
182
180
  assessedAt: string;
183
181
  };
184
182
  };
185
183
  materialAccess: {
186
184
  schemaVersion: 1;
187
185
  action: "ALLOW" | "DENY";
188
- reasonCodes: ("UNAVAILABLE" | "INTEGRITY_MISMATCH" | "NOT_FOUND" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
186
+ reasonCodes: ("NOT_FOUND" | "UNAVAILABLE" | "INTEGRITY_MISMATCH" | "CONTENT_ACCESS_DENIED" | "UNSUPPORTED_RESOURCE")[];
189
187
  assessedAt: string;
190
188
  };
191
189
  representation: {
@@ -195,7 +193,7 @@ export declare class KnowledgeServingClient {
195
193
  contentHash: string | null;
196
194
  mediaType: string;
197
195
  byteLength: number | null;
198
- methods: ("HEAD" | "GET")[];
196
+ methods: ("GET" | "HEAD")[];
199
197
  range: "NONE" | "SINGLE";
200
198
  verification: "ON_READ";
201
199
  verificationChunkBytes: number | null;
@@ -233,7 +231,7 @@ export declare class KnowledgeServingClient {
233
231
  contentHash: string | null;
234
232
  mediaType: string;
235
233
  byteLength: number | null;
236
- methods: ("HEAD" | "GET")[];
234
+ methods: ("GET" | "HEAD")[];
237
235
  range: "NONE" | "SINGLE";
238
236
  verification: "ON_READ";
239
237
  verificationChunkBytes: number | null;
@@ -285,5 +283,8 @@ export * from './tenant-web-crawl.js';
285
283
  export * from './tenant-web-dynamic.js';
286
284
  export * from './tenant-web-content.js';
287
285
  export * from './tenant-web-workflow.js';
286
+ export * from './auth.js';
287
+ export * from './token-provider.js';
288
+ export * from './tenant-client.js';
288
289
  export * from './agent-entry.js';
289
290
  export * from './agent-guidance-error.js';