@semiont/api-client 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +85 -0
  2. package/dist/__tests__/client.test.d.ts +28 -0
  3. package/dist/__tests__/client.test.d.ts.map +1 -0
  4. package/dist/__tests__/client.test.js +567 -0
  5. package/dist/__tests__/client.test.js.map +1 -0
  6. package/dist/__tests__/sse-client.test.d.ts +7 -0
  7. package/dist/__tests__/sse-client.test.d.ts.map +1 -0
  8. package/dist/__tests__/sse-client.test.js +421 -0
  9. package/dist/__tests__/sse-client.test.js.map +1 -0
  10. package/dist/__tests__/sse-stream.test.d.ts +7 -0
  11. package/dist/__tests__/sse-stream.test.d.ts.map +1 -0
  12. package/dist/__tests__/sse-stream.test.js +394 -0
  13. package/dist/__tests__/sse-stream.test.js.map +1 -0
  14. package/dist/__tests__/svg-selectors.test.d.ts +5 -0
  15. package/dist/__tests__/svg-selectors.test.d.ts.map +1 -0
  16. package/dist/__tests__/svg-selectors.test.js +124 -0
  17. package/dist/__tests__/svg-selectors.test.js.map +1 -0
  18. package/dist/branded-types.d.ts +70 -0
  19. package/dist/branded-types.d.ts.map +1 -0
  20. package/dist/branded-types.js +62 -0
  21. package/dist/branded-types.js.map +1 -0
  22. package/dist/client.d.ts +243 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +460 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/index.d.ts +43 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +62 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/mime-utils.d.ts +27 -0
  31. package/dist/mime-utils.d.ts.map +1 -0
  32. package/dist/mime-utils.js +49 -0
  33. package/dist/mime-utils.js.map +1 -0
  34. package/dist/sse/index.d.ts +343 -0
  35. package/dist/sse/index.d.ts.map +1 -0
  36. package/dist/sse/index.js +404 -0
  37. package/dist/sse/index.js.map +1 -0
  38. package/dist/sse/stream.d.ts +58 -0
  39. package/dist/sse/stream.d.ts.map +1 -0
  40. package/dist/sse/stream.js +187 -0
  41. package/dist/sse/stream.js.map +1 -0
  42. package/dist/sse/types.d.ts +295 -0
  43. package/dist/sse/types.d.ts.map +1 -0
  44. package/dist/sse/types.js +10 -0
  45. package/dist/sse/types.js.map +1 -0
  46. package/dist/types.d.ts +3177 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +7 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/uri-types.d.ts +19 -0
  51. package/dist/uri-types.d.ts.map +1 -0
  52. package/dist/uri-types.js +35 -0
  53. package/dist/uri-types.js.map +1 -0
  54. package/dist/utils/annotations.d.ts +191 -0
  55. package/dist/utils/annotations.d.ts.map +1 -0
  56. package/dist/utils/annotations.js +404 -0
  57. package/dist/utils/annotations.js.map +1 -0
  58. package/dist/utils/events.d.ts +74 -0
  59. package/dist/utils/events.d.ts.map +1 -0
  60. package/dist/utils/events.js +329 -0
  61. package/dist/utils/events.js.map +1 -0
  62. package/dist/utils/index.d.ts +12 -0
  63. package/dist/utils/index.d.ts.map +1 -0
  64. package/dist/utils/index.js +28 -0
  65. package/dist/utils/index.js.map +1 -0
  66. package/dist/utils/locales.d.ts +31 -0
  67. package/dist/utils/locales.d.ts.map +1 -0
  68. package/dist/utils/locales.js +83 -0
  69. package/dist/utils/locales.js.map +1 -0
  70. package/dist/utils/resources.d.ts +34 -0
  71. package/dist/utils/resources.d.ts.map +1 -0
  72. package/dist/utils/resources.js +63 -0
  73. package/dist/utils/resources.js.map +1 -0
  74. package/dist/utils/validation.d.ts +57 -0
  75. package/dist/utils/validation.d.ts.map +1 -0
  76. package/dist/utils/validation.js +89 -0
  77. package/dist/utils/validation.js.map +1 -0
  78. package/package.json +65 -0
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Branded string types for compile-time type safety
4
+ *
5
+ * These types are zero-cost at runtime but prevent mixing
6
+ * different string types at compile time.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.email = email;
10
+ exports.authCode = authCode;
11
+ exports.googleCredential = googleCredential;
12
+ exports.accessToken = accessToken;
13
+ exports.refreshToken = refreshToken;
14
+ exports.mcpToken = mcpToken;
15
+ exports.cloneToken = cloneToken;
16
+ exports.jobId = jobId;
17
+ exports.userDID = userDID;
18
+ exports.entityType = entityType;
19
+ exports.searchQuery = searchQuery;
20
+ exports.baseUrl = baseUrl;
21
+ exports.resourceUri = resourceUri;
22
+ exports.annotationUri = annotationUri;
23
+ exports.resourceAnnotationUri = resourceAnnotationUri;
24
+ // ============================================================================
25
+ // HELPER FUNCTIONS (minimal validation, just branding)
26
+ // ============================================================================
27
+ function email(value) { return value; }
28
+ function authCode(value) { return value; }
29
+ function googleCredential(value) { return value; }
30
+ function accessToken(value) { return value; }
31
+ function refreshToken(value) { return value; }
32
+ function mcpToken(value) { return value; }
33
+ function cloneToken(value) { return value; }
34
+ function jobId(value) { return value; }
35
+ function userDID(value) { return value; }
36
+ function entityType(value) { return value; }
37
+ function searchQuery(value) { return value; }
38
+ function baseUrl(value) { return value; }
39
+ // Factory functions with runtime validation
40
+ function resourceUri(uri) {
41
+ if (!uri.startsWith('http://') && !uri.startsWith('https://')) {
42
+ throw new TypeError(`Expected ResourceUri, got: ${uri}`);
43
+ }
44
+ return uri;
45
+ }
46
+ function annotationUri(uri) {
47
+ if (!uri.startsWith('http://') && !uri.startsWith('https://')) {
48
+ throw new TypeError(`Expected AnnotationUri, got: ${uri}`);
49
+ }
50
+ return uri;
51
+ }
52
+ function resourceAnnotationUri(uri) {
53
+ if (!uri.startsWith('http://') && !uri.startsWith('https://')) {
54
+ throw new TypeError(`Expected ResourceAnnotationUri, got: ${uri}`);
55
+ }
56
+ // Additional validation: must contain /resources/ and /annotations/
57
+ if (!uri.includes('/resources/') || !uri.includes('/annotations/')) {
58
+ throw new TypeError(`Expected nested ResourceAnnotationUri format, got: ${uri}`);
59
+ }
60
+ return uri;
61
+ }
62
+ //# sourceMappingURL=branded-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branded-types.js","sourceRoot":"","sources":["../src/branded-types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAqCH,sBAAsE;AACtE,4BAA+E;AAC/E,4CAAuG;AACvG,kCAAwF;AACxF,oCAA2F;AAC3F,4BAA+E;AAC/E,gCAAqF;AACrF,sBAAsE;AACtE,0BAA4E;AAC5E,gCAAqF;AACrF,kCAAwF;AACxF,0BAA4E;AAmB5E,kCAKC;AAED,sCAKC;AAED,sDASC;AAzDD,+EAA+E;AAC/E,uDAAuD;AACvD,+EAA+E;AAE/E,SAAgB,KAAK,CAAC,KAAa,IAAW,OAAO,KAAc,CAAC,CAAC,CAAC;AACtE,SAAgB,QAAQ,CAAC,KAAa,IAAc,OAAO,KAAiB,CAAC,CAAC,CAAC;AAC/E,SAAgB,gBAAgB,CAAC,KAAa,IAAsB,OAAO,KAAyB,CAAC,CAAC,CAAC;AACvG,SAAgB,WAAW,CAAC,KAAa,IAAiB,OAAO,KAAoB,CAAC,CAAC,CAAC;AACxF,SAAgB,YAAY,CAAC,KAAa,IAAkB,OAAO,KAAqB,CAAC,CAAC,CAAC;AAC3F,SAAgB,QAAQ,CAAC,KAAa,IAAc,OAAO,KAAiB,CAAC,CAAC,CAAC;AAC/E,SAAgB,UAAU,CAAC,KAAa,IAAgB,OAAO,KAAmB,CAAC,CAAC,CAAC;AACrF,SAAgB,KAAK,CAAC,KAAa,IAAW,OAAO,KAAc,CAAC,CAAC,CAAC;AACtE,SAAgB,OAAO,CAAC,KAAa,IAAa,OAAO,KAAgB,CAAC,CAAC,CAAC;AAC5E,SAAgB,UAAU,CAAC,KAAa,IAAgB,OAAO,KAAmB,CAAC,CAAC,CAAC;AACrF,SAAgB,WAAW,CAAC,KAAa,IAAiB,OAAO,KAAoB,CAAC,CAAC,CAAC;AACxF,SAAgB,OAAO,CAAC,KAAa,IAAa,OAAO,KAAgB,CAAC,CAAC,CAAC;AAkB5E,4CAA4C;AAC5C,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,GAAkB,CAAC;AAC5B,CAAC;AAED,SAAgB,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAoB,CAAC;AAC9B,CAAC;AAED,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,oEAAoE;IACpE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,SAAS,CAAC,sDAAsD,GAAG,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,GAA4B,CAAC;AACtC,CAAC"}
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Common API client for Semiont backend
3
+ *
4
+ * This client can be used by:
5
+ * - MCP server (Node.js)
6
+ * - Demo scripts (Node.js)
7
+ * - Frontend (Next.js/React - can wrap with hooks)
8
+ *
9
+ * Uses ky for HTTP requests with built-in retry, timeout, and error handling.
10
+ */
11
+ import type { paths } from './types';
12
+ import type { AnnotationUri, ResourceUri, ResourceAnnotationUri } from './branded-types';
13
+ import type { AccessToken, BaseUrl, CloneToken, ContentFormat, Email, EntityType, GoogleCredential, JobId, Motivation, RefreshToken, SearchQuery, UserDID } from './branded-types';
14
+ import { SSEClient } from './sse';
15
+ type ResponseContent<T> = T extends {
16
+ responses: {
17
+ 200: {
18
+ content: {
19
+ 'application/json': infer R;
20
+ };
21
+ };
22
+ };
23
+ } ? R : T extends {
24
+ responses: {
25
+ 201: {
26
+ content: {
27
+ 'application/json': infer R;
28
+ };
29
+ };
30
+ };
31
+ } ? R : never;
32
+ type RequestContent<T> = T extends {
33
+ requestBody?: {
34
+ content: {
35
+ 'application/json': infer R;
36
+ };
37
+ };
38
+ } ? R : never;
39
+ export declare class APIError extends Error {
40
+ status: number;
41
+ statusText: string;
42
+ details?: unknown | undefined;
43
+ constructor(message: string, status: number, statusText: string, details?: unknown | undefined);
44
+ }
45
+ export interface SemiontApiClientConfig {
46
+ baseUrl: BaseUrl;
47
+ accessToken?: AccessToken;
48
+ timeout?: number;
49
+ retry?: number;
50
+ }
51
+ /**
52
+ * Semiont API Client
53
+ *
54
+ * Provides type-safe methods for all Semiont backend API endpoints.
55
+ */
56
+ export declare class SemiontApiClient {
57
+ private http;
58
+ private baseUrl;
59
+ private accessToken;
60
+ /**
61
+ * SSE streaming client for real-time operations
62
+ *
63
+ * Separate from the main HTTP client to clearly mark streaming endpoints.
64
+ * Uses native fetch() instead of ky for SSE support.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const stream = client.sse.detectAnnotations(
69
+ * resourceId,
70
+ * { entityTypes: ['Person', 'Organization'] }
71
+ * );
72
+ *
73
+ * stream.onProgress((p) => console.log(p.message));
74
+ * stream.onComplete((r) => console.log(`Found ${r.foundCount} entities`));
75
+ * stream.close();
76
+ * ```
77
+ */
78
+ readonly sse: SSEClient;
79
+ constructor(config: SemiontApiClientConfig);
80
+ /**
81
+ * Set the access token for authenticated requests
82
+ */
83
+ setAccessToken(token: AccessToken): void;
84
+ /**
85
+ * Clear the access token
86
+ */
87
+ clearAccessToken(): void;
88
+ authenticatePassword(email: Email, password: string): Promise<ResponseContent<paths['/api/tokens/password']['post']>>;
89
+ refreshToken(token: RefreshToken): Promise<ResponseContent<paths['/api/tokens/refresh']['post']>>;
90
+ authenticateGoogle(credential: GoogleCredential): Promise<ResponseContent<paths['/api/tokens/google']['post']>>;
91
+ generateMCPToken(): Promise<ResponseContent<paths['/api/tokens/mcp-generate']['post']>>;
92
+ getMe(): Promise<ResponseContent<paths['/api/users/me']['get']>>;
93
+ acceptTerms(): Promise<ResponseContent<paths['/api/users/accept-terms']['post']>>;
94
+ logout(): Promise<ResponseContent<paths['/api/users/logout']['post']>>;
95
+ /**
96
+ * Create a new resource with binary content support
97
+ *
98
+ * @param data - Resource creation data
99
+ * @param data.name - Resource name
100
+ * @param data.file - File object or Buffer with binary content
101
+ * @param data.format - MIME type (e.g., 'text/markdown', 'image/png')
102
+ * @param data.entityTypes - Optional array of entity types
103
+ * @param data.language - Optional ISO 639-1 language code
104
+ * @param data.creationMethod - Optional creation method
105
+ * @param data.sourceAnnotationId - Optional source annotation ID
106
+ * @param data.sourceResourceId - Optional source resource ID
107
+ */
108
+ createResource(data: {
109
+ name: string;
110
+ file: File | Buffer;
111
+ format: string;
112
+ entityTypes?: string[];
113
+ language?: string;
114
+ creationMethod?: string;
115
+ sourceAnnotationId?: string;
116
+ sourceResourceId?: string;
117
+ }): Promise<ResponseContent<paths['/resources']['post']>>;
118
+ getResource(resourceUri: ResourceUri): Promise<ResponseContent<paths['/resources/{id}']['get']>>;
119
+ /**
120
+ * Get resource representation using W3C content negotiation
121
+ * Returns raw binary content (images, PDFs, text, etc.) with content type
122
+ *
123
+ * @param resourceUri - Full resource URI
124
+ * @param options - Options including Accept header for content negotiation
125
+ * @returns Object with data (ArrayBuffer) and contentType (string)
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * // Get markdown representation
130
+ * const { data, contentType } = await client.getResourceRepresentation(rUri, { accept: 'text/markdown' });
131
+ * const markdown = new TextDecoder().decode(data);
132
+ *
133
+ * // Get image representation
134
+ * const { data, contentType } = await client.getResourceRepresentation(rUri, { accept: 'image/png' });
135
+ * const blob = new Blob([data], { type: contentType });
136
+ *
137
+ * // Get PDF representation
138
+ * const { data, contentType } = await client.getResourceRepresentation(rUri, { accept: 'application/pdf' });
139
+ * ```
140
+ */
141
+ getResourceRepresentation(resourceUri: ResourceUri, options?: {
142
+ accept?: ContentFormat;
143
+ }): Promise<{
144
+ data: ArrayBuffer;
145
+ contentType: string;
146
+ }>;
147
+ /**
148
+ * Get resource representation as a stream using W3C content negotiation
149
+ * Returns streaming binary content (for large files: videos, large PDFs, etc.)
150
+ *
151
+ * Use this for large files to avoid loading entire content into memory.
152
+ * The stream is consumed incrementally and the backend connection stays open
153
+ * until the stream is fully consumed or closed.
154
+ *
155
+ * @param resourceUri - Full resource URI
156
+ * @param options - Options including Accept header for content negotiation
157
+ * @returns Object with stream (ReadableStream) and contentType (string)
158
+ *
159
+ * @example
160
+ * ```typescript
161
+ * // Stream large file
162
+ * const { stream, contentType } = await client.getResourceRepresentationStream(rUri, {
163
+ * accept: 'video/mp4'
164
+ * });
165
+ *
166
+ * // Consume stream chunk by chunk (never loads entire file into memory)
167
+ * for await (const chunk of stream) {
168
+ * // Process chunk
169
+ * console.log(`Received ${chunk.length} bytes`);
170
+ * }
171
+ *
172
+ * // Or pipe to a file in Node.js
173
+ * const fileStream = fs.createWriteStream('output.mp4');
174
+ * const reader = stream.getReader();
175
+ * while (true) {
176
+ * const { done, value } = await reader.read();
177
+ * if (done) break;
178
+ * fileStream.write(value);
179
+ * }
180
+ * ```
181
+ */
182
+ getResourceRepresentationStream(resourceUri: ResourceUri, options?: {
183
+ accept?: ContentFormat;
184
+ }): Promise<{
185
+ stream: ReadableStream<Uint8Array>;
186
+ contentType: string;
187
+ }>;
188
+ listResources(limit?: number, archived?: boolean, query?: SearchQuery): Promise<ResponseContent<paths['/resources']['get']>>;
189
+ updateResource(resourceUri: ResourceUri, data: RequestContent<paths['/resources/{id}']['patch']>): Promise<ResponseContent<paths['/resources/{id}']['patch']>>;
190
+ getResourceEvents(resourceUri: ResourceUri): Promise<{
191
+ events: any[];
192
+ }>;
193
+ getResourceAnnotations(resourceUri: ResourceUri): Promise<ResponseContent<paths['/resources/{id}/annotations']['get']>>;
194
+ getAnnotationLLMContext(resourceUri: ResourceUri, annotationId: string, options?: {
195
+ contextWindow?: number;
196
+ }): Promise<ResponseContent<paths['/resources/{resourceId}/annotations/{annotationId}/llm-context']['get']>>;
197
+ getResourceReferencedBy(resourceUri: ResourceUri): Promise<{
198
+ referencedBy: any[];
199
+ }>;
200
+ generateCloneToken(resourceUri: ResourceUri): Promise<ResponseContent<paths['/resources/{id}/clone-with-token']['post']>>;
201
+ getResourceByToken(token: CloneToken): Promise<ResponseContent<paths['/api/resources/token/{token}']['get']>>;
202
+ createResourceFromToken(data: RequestContent<paths['/api/resources/create-from-token']['post']>): Promise<ResponseContent<paths['/api/resources/create-from-token']['post']>>;
203
+ createAnnotation(resourceUri: ResourceUri, data: RequestContent<paths['/resources/{id}/annotations']['post']>): Promise<ResponseContent<paths['/resources/{id}/annotations']['post']>>;
204
+ getAnnotation(annotationUri: AnnotationUri): Promise<ResponseContent<paths['/annotations/{id}']['get']>>;
205
+ getResourceAnnotation(annotationUri: ResourceAnnotationUri): Promise<ResponseContent<paths['/resources/{resourceId}/annotations/{annotationId}']['get']>>;
206
+ listAnnotations(resourceUri: ResourceUri, motivation?: Motivation): Promise<ResponseContent<paths['/resources/{id}/annotations']['get']>>;
207
+ deleteAnnotation(annotationUri: ResourceAnnotationUri): Promise<void>;
208
+ updateAnnotationBody(annotationUri: ResourceAnnotationUri, data: RequestContent<paths['/resources/{resourceId}/annotations/{annotationId}/body']['put']>): Promise<ResponseContent<paths['/resources/{resourceId}/annotations/{annotationId}/body']['put']>>;
209
+ getAnnotationHistory(annotationUri: ResourceAnnotationUri): Promise<ResponseContent<paths['/resources/{resourceId}/annotations/{annotationId}/history']['get']>>;
210
+ addEntityType(type: EntityType): Promise<ResponseContent<paths['/api/entity-types']['post']>>;
211
+ addEntityTypesBulk(types: EntityType[]): Promise<ResponseContent<paths['/api/entity-types/bulk']['post']>>;
212
+ listEntityTypes(): Promise<ResponseContent<paths['/api/entity-types']['get']>>;
213
+ listUsers(): Promise<ResponseContent<paths['/api/admin/users']['get']>>;
214
+ getUserStats(): Promise<ResponseContent<paths['/api/admin/users/stats']['get']>>;
215
+ /**
216
+ * Update a user by ID
217
+ * Note: Users use DID identifiers (did:web:domain:users:id), not HTTP URIs.
218
+ */
219
+ updateUser(id: UserDID, data: RequestContent<paths['/api/admin/users/{id}']['patch']>): Promise<ResponseContent<paths['/api/admin/users/{id}']['patch']>>;
220
+ getOAuthConfig(): Promise<ResponseContent<paths['/api/admin/oauth/config']['get']>>;
221
+ getJobStatus(id: JobId): Promise<ResponseContent<paths['/api/jobs/{id}']['get']>>;
222
+ /**
223
+ * Poll a job until it completes or fails
224
+ * @param id - The job ID to poll
225
+ * @param options - Polling options
226
+ * @returns The final job status
227
+ */
228
+ pollJobUntilComplete(id: JobId, options?: {
229
+ interval?: number;
230
+ timeout?: number;
231
+ onProgress?: (status: ResponseContent<paths['/api/jobs/{id}']['get']>) => void;
232
+ }): Promise<ResponseContent<paths['/api/jobs/{id}']['get']>>;
233
+ getResourceLLMContext(resourceUri: ResourceUri, options?: {
234
+ depth?: number;
235
+ maxResources?: number;
236
+ includeContent?: boolean;
237
+ includeSummary?: boolean;
238
+ }): Promise<ResponseContent<paths['/resources/{id}/llm-context']['get']>>;
239
+ healthCheck(): Promise<ResponseContent<paths['/api/health']['get']>>;
240
+ getStatus(): Promise<ResponseContent<paths['/api/status']['get']>>;
241
+ }
242
+ export {};
243
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}