pulse-ts-sdk 0.0.52 → 0.0.54

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 (88) hide show
  1. package/README.md +44 -3
  2. package/dist/cjs/BaseClient.js +2 -2
  3. package/dist/cjs/Client.d.ts +8 -10
  4. package/dist/cjs/Client.js +113 -16
  5. package/dist/cjs/api/client/index.d.ts +1 -0
  6. package/dist/cjs/api/client/index.js +17 -0
  7. package/dist/cjs/api/{types/ExtractMultipartInput.d.ts → client/requests/ExtractAsyncRequest.d.ts} +13 -7
  8. package/dist/{esm/api/types/ExtractJsonInput.d.mts → cjs/api/client/requests/ExtractRequest.d.ts} +13 -9
  9. package/dist/cjs/api/client/requests/index.d.ts +2 -0
  10. package/dist/cjs/api/{types/JsonSource.js → client/requests/index.js} +0 -1
  11. package/dist/cjs/api/index.d.ts +1 -0
  12. package/dist/cjs/api/index.js +1 -0
  13. package/dist/cjs/api/types/ExtractInput.d.ts +63 -1
  14. package/dist/cjs/api/types/ExtractSource.d.ts +9 -0
  15. package/dist/cjs/api/types/index.d.ts +1 -5
  16. package/dist/cjs/api/types/index.js +1 -5
  17. package/dist/cjs/core/exports.d.ts +1 -0
  18. package/dist/cjs/core/exports.js +1 -0
  19. package/dist/cjs/core/file/exports.d.ts +1 -0
  20. package/dist/cjs/core/file/exports.js +2 -0
  21. package/dist/cjs/core/file/file.d.ts +10 -0
  22. package/dist/cjs/core/file/file.js +221 -0
  23. package/dist/cjs/core/file/index.d.ts +2 -0
  24. package/dist/cjs/core/file/index.js +18 -0
  25. package/dist/cjs/core/file/types.d.ts +66 -0
  26. package/dist/cjs/core/file/types.js +2 -0
  27. package/dist/cjs/core/form-data-utils/FormDataWrapper.d.ts +15 -0
  28. package/dist/cjs/core/form-data-utils/FormDataWrapper.js +185 -0
  29. package/dist/cjs/core/form-data-utils/encodeAsFormParameter.d.ts +1 -0
  30. package/dist/cjs/core/form-data-utils/encodeAsFormParameter.js +12 -0
  31. package/dist/cjs/core/form-data-utils/index.d.ts +2 -0
  32. package/dist/cjs/core/form-data-utils/index.js +20 -0
  33. package/dist/cjs/core/index.d.ts +2 -0
  34. package/dist/cjs/core/index.js +3 -1
  35. package/dist/cjs/version.d.ts +1 -1
  36. package/dist/cjs/version.js +1 -1
  37. package/dist/esm/BaseClient.mjs +2 -2
  38. package/dist/esm/Client.d.mts +8 -10
  39. package/dist/esm/Client.mjs +114 -17
  40. package/dist/esm/api/client/index.d.mts +1 -0
  41. package/dist/esm/api/client/index.mjs +1 -0
  42. package/dist/esm/api/{types/ExtractMultipartInput.d.mts → client/requests/ExtractAsyncRequest.d.mts} +13 -7
  43. package/dist/{cjs/api/types/ExtractJsonInput.d.ts → esm/api/client/requests/ExtractRequest.d.mts} +13 -9
  44. package/dist/esm/api/client/requests/index.d.mts +2 -0
  45. package/dist/esm/api/client/requests/index.mjs +1 -0
  46. package/dist/esm/api/index.d.mts +1 -0
  47. package/dist/esm/api/index.mjs +1 -0
  48. package/dist/esm/api/types/ExtractInput.d.mts +63 -1
  49. package/dist/esm/api/types/ExtractSource.d.mts +9 -0
  50. package/dist/esm/api/types/index.d.mts +1 -5
  51. package/dist/esm/api/types/index.mjs +1 -5
  52. package/dist/esm/core/exports.d.mts +1 -0
  53. package/dist/esm/core/exports.mjs +1 -0
  54. package/dist/esm/core/file/exports.d.mts +1 -0
  55. package/dist/esm/core/file/exports.mjs +1 -0
  56. package/dist/esm/core/file/file.d.mts +10 -0
  57. package/dist/esm/core/file/file.mjs +184 -0
  58. package/dist/esm/core/file/index.d.mts +2 -0
  59. package/dist/esm/core/file/index.mjs +2 -0
  60. package/dist/esm/core/file/types.d.mts +66 -0
  61. package/dist/esm/core/file/types.mjs +1 -0
  62. package/dist/esm/core/form-data-utils/FormDataWrapper.d.mts +15 -0
  63. package/dist/esm/core/form-data-utils/FormDataWrapper.mjs +147 -0
  64. package/dist/esm/core/form-data-utils/encodeAsFormParameter.d.mts +1 -0
  65. package/dist/esm/core/form-data-utils/encodeAsFormParameter.mjs +9 -0
  66. package/dist/esm/core/form-data-utils/index.d.mts +2 -0
  67. package/dist/esm/core/form-data-utils/index.mjs +2 -0
  68. package/dist/esm/core/index.d.mts +2 -0
  69. package/dist/esm/core/index.mjs +2 -0
  70. package/dist/esm/version.d.mts +1 -1
  71. package/dist/esm/version.mjs +1 -1
  72. package/package.json +1 -1
  73. package/reference.md +4 -8
  74. package/dist/cjs/api/types/ExtractAsyncInput.d.ts +0 -1
  75. package/dist/cjs/api/types/JsonSource.d.ts +0 -7
  76. package/dist/cjs/api/types/MultipartSource.d.ts +0 -10
  77. package/dist/cjs/api/types/MultipartSource.js +0 -3
  78. package/dist/esm/api/types/ExtractAsyncInput.d.mts +0 -1
  79. package/dist/esm/api/types/JsonSource.d.mts +0 -7
  80. package/dist/esm/api/types/JsonSource.mjs +0 -2
  81. package/dist/esm/api/types/MultipartSource.d.mts +0 -10
  82. package/dist/esm/api/types/MultipartSource.mjs +0 -2
  83. /package/dist/cjs/api/{types/ExtractAsyncInput.js → client/requests/ExtractAsyncRequest.js} +0 -0
  84. /package/dist/cjs/api/{types/ExtractJsonInput.js → client/requests/ExtractRequest.js} +0 -0
  85. /package/dist/cjs/api/types/{ExtractMultipartInput.js → ExtractSource.js} +0 -0
  86. /package/dist/esm/api/{types/ExtractAsyncInput.mjs → client/requests/ExtractAsyncRequest.mjs} +0 -0
  87. /package/dist/esm/api/{types/ExtractJsonInput.mjs → client/requests/ExtractRequest.mjs} +0 -0
  88. /package/dist/esm/api/types/{ExtractMultipartInput.mjs → ExtractSource.mjs} +0 -0
@@ -0,0 +1,66 @@
1
+ /**
2
+ * A file that can be uploaded. Can be a file-like object (stream, buffer, blob, etc.),
3
+ * a path to a file, or an object with a file-like object and metadata.
4
+ */
5
+ export type Uploadable = Uploadable.FileLike | Uploadable.FromPath | Uploadable.WithMetadata;
6
+ export declare namespace Uploadable {
7
+ /**
8
+ * Various file-like objects that can be used to upload a file.
9
+ */
10
+ type FileLike = ArrayBuffer | ArrayBufferLike | ArrayBufferView | Uint8Array | import("buffer").Buffer | import("buffer").Blob | import("buffer").File | import("stream").Readable | import("stream/web").ReadableStream | globalThis.Blob | globalThis.File | ReadableStream;
11
+ /**
12
+ * A file path with optional metadata, used for uploading a file from the file system.
13
+ */
14
+ type FromPath = {
15
+ /** The path to the file to upload */
16
+ path: string;
17
+ /**
18
+ * Optional override for the file name (defaults to basename of path).
19
+ * This is used to set the `Content-Disposition` header in upload requests.
20
+ */
21
+ filename?: string;
22
+ /**
23
+ * Optional MIME type of the file (e.g., 'image/jpeg', 'text/plain').
24
+ * This is used to set the `Content-Type` header in upload requests.
25
+ */
26
+ contentType?: string;
27
+ /**
28
+ * Optional file size in bytes.
29
+ * If not provided, the file size will be determined from the file system.
30
+ * The content length is used to set the `Content-Length` header in upload requests.
31
+ */
32
+ contentLength?: number;
33
+ };
34
+ /**
35
+ * A file-like object with metadata, used for uploading files.
36
+ */
37
+ type WithMetadata = {
38
+ /** The file data */
39
+ data: FileLike;
40
+ /**
41
+ * Optional override for the file name (defaults to basename of path).
42
+ * This is used to set the `Content-Disposition` header in upload requests.
43
+ */
44
+ filename?: string;
45
+ /**
46
+ * Optional MIME type of the file (e.g., 'image/jpeg', 'text/plain').
47
+ * This is used to set the `Content-Type` header in upload requests.
48
+ *
49
+ * If not provided, the content type may be determined from the data itself.
50
+ * * If the data is a `File`, `Blob`, or similar, the content type will be determined from the file itself, if the type is set.
51
+ * * Any other data type will not have a content type set, and the upload request will use `Content-Type: application/octet-stream` instead.
52
+ */
53
+ contentType?: string;
54
+ /**
55
+ * Optional file size in bytes.
56
+ * The content length is used to set the `Content-Length` header in upload requests.
57
+ * If the content length is not provided and cannot be determined, the upload request will not include the `Content-Length` header, but will use `Transfer-Encoding: chunked` instead.
58
+ *
59
+ * If not provided, the file size will be determined depending on the data type.
60
+ * * If the data is of type `fs.ReadStream` (`createReadStream`), the size will be determined from the file system.
61
+ * * If the data is a `Buffer`, `ArrayBuffer`, `Uint8Array`, `Blob`, `File`, or similar, the size will be determined from the data itself.
62
+ * * If the data is a `Readable` or `ReadableStream`, the size will not be determined.
63
+ */
64
+ contentLength?: number;
65
+ };
66
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import { type Uploadable } from "../../core/file/index.mjs";
2
+ interface FormDataRequest<Body> {
3
+ body: Body;
4
+ headers: Record<string, string>;
5
+ duplex?: "half";
6
+ }
7
+ export declare function newFormData(): Promise<FormDataWrapper>;
8
+ export declare class FormDataWrapper {
9
+ private fd;
10
+ setup(): Promise<void>;
11
+ append(key: string, value: unknown): void;
12
+ appendFile(key: string, value: Uploadable): Promise<void>;
13
+ getRequest(): FormDataRequest<FormData>;
14
+ }
15
+ export {};
@@ -0,0 +1,147 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
11
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
12
+ var m = o[Symbol.asyncIterator], i;
13
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
14
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
15
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
16
+ };
17
+ import { toMultipartDataPart } from "../../core/file/index.mjs";
18
+ import { toJson } from "../../core/json.mjs";
19
+ import { RUNTIME } from "../runtime/index.mjs";
20
+ export function newFormData() {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ return new FormDataWrapper();
23
+ });
24
+ }
25
+ export class FormDataWrapper {
26
+ constructor() {
27
+ this.fd = new FormData();
28
+ }
29
+ setup() {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ // noop
32
+ });
33
+ }
34
+ append(key, value) {
35
+ this.fd.append(key, String(value));
36
+ }
37
+ appendFile(key, value) {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ const { data, filename, contentType } = yield toMultipartDataPart(value);
40
+ const blob = yield convertToBlob(data, contentType);
41
+ if (filename) {
42
+ this.fd.append(key, blob, filename);
43
+ }
44
+ else {
45
+ this.fd.append(key, blob);
46
+ }
47
+ });
48
+ }
49
+ getRequest() {
50
+ return {
51
+ body: this.fd,
52
+ headers: {},
53
+ duplex: "half",
54
+ };
55
+ }
56
+ }
57
+ function isStreamLike(value) {
58
+ return typeof value === "object" && value != null && ("read" in value || "pipe" in value);
59
+ }
60
+ function isReadableStream(value) {
61
+ return typeof value === "object" && value != null && "getReader" in value;
62
+ }
63
+ function isBuffer(value) {
64
+ return typeof Buffer !== "undefined" && Buffer.isBuffer && Buffer.isBuffer(value);
65
+ }
66
+ function isArrayBufferView(value) {
67
+ return ArrayBuffer.isView(value);
68
+ }
69
+ function streamToBuffer(stream) {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ var _a, stream_1, stream_1_1;
72
+ var _b, e_1, _c, _d;
73
+ if (RUNTIME.type === "node") {
74
+ const { Readable } = yield import("stream");
75
+ if (stream instanceof Readable) {
76
+ const chunks = [];
77
+ try {
78
+ for (_a = true, stream_1 = __asyncValues(stream); stream_1_1 = yield stream_1.next(), _b = stream_1_1.done, !_b; _a = true) {
79
+ _d = stream_1_1.value;
80
+ _a = false;
81
+ const chunk = _d;
82
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
83
+ }
84
+ }
85
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
86
+ finally {
87
+ try {
88
+ if (!_a && !_b && (_c = stream_1.return)) yield _c.call(stream_1);
89
+ }
90
+ finally { if (e_1) throw e_1.error; }
91
+ }
92
+ return Buffer.concat(chunks);
93
+ }
94
+ }
95
+ if (isReadableStream(stream)) {
96
+ const reader = stream.getReader();
97
+ const chunks = [];
98
+ try {
99
+ while (true) {
100
+ const { done, value } = yield reader.read();
101
+ if (done)
102
+ break;
103
+ chunks.push(value);
104
+ }
105
+ }
106
+ finally {
107
+ reader.releaseLock();
108
+ }
109
+ const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
110
+ const result = new Uint8Array(totalLength);
111
+ let offset = 0;
112
+ for (const chunk of chunks) {
113
+ result.set(chunk, offset);
114
+ offset += chunk.length;
115
+ }
116
+ return Buffer.from(result);
117
+ }
118
+ throw new Error(`Unsupported stream type: ${typeof stream}. Expected Node.js Readable stream or Web ReadableStream.`);
119
+ });
120
+ }
121
+ function convertToBlob(value, contentType) {
122
+ return __awaiter(this, void 0, void 0, function* () {
123
+ if (isStreamLike(value) || isReadableStream(value)) {
124
+ const buffer = yield streamToBuffer(value);
125
+ return new Blob([buffer], { type: contentType });
126
+ }
127
+ if (value instanceof Blob) {
128
+ return value;
129
+ }
130
+ if (isBuffer(value)) {
131
+ return new Blob([value], { type: contentType });
132
+ }
133
+ if (value instanceof ArrayBuffer) {
134
+ return new Blob([value], { type: contentType });
135
+ }
136
+ if (isArrayBufferView(value)) {
137
+ return new Blob([value], { type: contentType });
138
+ }
139
+ if (typeof value === "string") {
140
+ return new Blob([value], { type: contentType });
141
+ }
142
+ if (typeof value === "object" && value !== null) {
143
+ return new Blob([toJson(value)], { type: contentType !== null && contentType !== void 0 ? contentType : "application/json" });
144
+ }
145
+ return new Blob([String(value)], { type: contentType });
146
+ });
147
+ }
@@ -0,0 +1 @@
1
+ export declare function encodeAsFormParameter(value: unknown): Record<string, string>;
@@ -0,0 +1,9 @@
1
+ import { toQueryString } from "../url/qs.mjs";
2
+ export function encodeAsFormParameter(value) {
3
+ const stringified = toQueryString(value, { encode: false });
4
+ const keyValuePairs = stringified.split("&").map((pair) => {
5
+ const [key, value] = pair.split("=");
6
+ return [key, value];
7
+ });
8
+ return Object.fromEntries(keyValuePairs);
9
+ }
@@ -0,0 +1,2 @@
1
+ export { encodeAsFormParameter } from "./encodeAsFormParameter.mjs";
2
+ export * from "./FormDataWrapper.mjs";
@@ -0,0 +1,2 @@
1
+ export { encodeAsFormParameter } from "./encodeAsFormParameter.mjs";
2
+ export * from "./FormDataWrapper.mjs";
@@ -1,6 +1,8 @@
1
1
  export * from "./auth/index.mjs";
2
2
  export * from "./base64.mjs";
3
3
  export * from "./fetcher/index.mjs";
4
+ export * as file from "./file/index.mjs";
5
+ export * from "./form-data-utils/index.mjs";
4
6
  export * as logging from "./logging/index.mjs";
5
7
  export * from "./runtime/index.mjs";
6
8
  export * as url from "./url/index.mjs";
@@ -1,6 +1,8 @@
1
1
  export * from "./auth/index.mjs";
2
2
  export * from "./base64.mjs";
3
3
  export * from "./fetcher/index.mjs";
4
+ export * as file from "./file/index.mjs";
5
+ export * from "./form-data-utils/index.mjs";
4
6
  export * as logging from "./logging/index.mjs";
5
7
  export * from "./runtime/index.mjs";
6
8
  export * as url from "./url/index.mjs";
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.0.52";
1
+ export declare const SDK_VERSION = "0.0.54";
@@ -1 +1 @@
1
- export const SDK_VERSION = "0.0.52";
1
+ export const SDK_VERSION = "0.0.54";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pulse-ts-sdk",
3
- "version": "0.0.52",
3
+ "version": "0.0.54",
4
4
  "private": false,
5
5
  "repository": {
6
6
  "type": "git",
package/reference.md CHANGED
@@ -28,9 +28,7 @@ extraction based on user-provided schemas and extraction options.
28
28
  <dd>
29
29
 
30
30
  ```typescript
31
- await client.extract({
32
- fileUrl: "fileUrl"
33
- });
31
+ await client.extract({});
34
32
 
35
33
  ```
36
34
  </dd>
@@ -46,7 +44,7 @@ await client.extract({
46
44
  <dl>
47
45
  <dd>
48
46
 
49
- **request:** `Pulse.ExtractJsonInput`
47
+ **request:** `Pulse.ExtractRequest`
50
48
 
51
49
  </dd>
52
50
  </dl>
@@ -95,9 +93,7 @@ clients can poll for completion status.
95
93
  <dd>
96
94
 
97
95
  ```typescript
98
- await client.extractAsync({
99
- fileUrl: "fileUrl"
100
- });
96
+ await client.extractAsync({});
101
97
 
102
98
  ```
103
99
  </dd>
@@ -113,7 +109,7 @@ await client.extractAsync({
113
109
  <dl>
114
110
  <dd>
115
111
 
116
- **request:** `Pulse.ExtractJsonInput`
112
+ **request:** `Pulse.ExtractAsyncRequest`
117
113
 
118
114
  </dd>
119
115
  </dl>
@@ -1 +0,0 @@
1
- export type ExtractAsyncInput = unknown;
@@ -1,7 +0,0 @@
1
- /**
2
- * Document source definition for JSON requests.
3
- */
4
- export interface JsonSource {
5
- /** Public or pre-signed URL that Pulse will download and extract. */
6
- fileUrl: string;
7
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Document source definition for multipart/form-data requests. Provide exactly one of `file` (direct upload) or `fileUrl` (remote URL).
3
- */
4
- export type MultipartSource = {
5
- file: string;
6
- fileUrl?: unknown | undefined;
7
- } | {
8
- fileUrl: string;
9
- file?: unknown | undefined;
10
- };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- // This file was auto-generated by Fern from our API Definition.
3
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +0,0 @@
1
- export type ExtractAsyncInput = unknown;
@@ -1,7 +0,0 @@
1
- /**
2
- * Document source definition for JSON requests.
3
- */
4
- export interface JsonSource {
5
- /** Public or pre-signed URL that Pulse will download and extract. */
6
- fileUrl: string;
7
- }
@@ -1,2 +0,0 @@
1
- // This file was auto-generated by Fern from our API Definition.
2
- export {};
@@ -1,10 +0,0 @@
1
- /**
2
- * Document source definition for multipart/form-data requests. Provide exactly one of `file` (direct upload) or `fileUrl` (remote URL).
3
- */
4
- export type MultipartSource = {
5
- file: string;
6
- fileUrl?: unknown | undefined;
7
- } | {
8
- fileUrl: string;
9
- file?: unknown | undefined;
10
- };
@@ -1,2 +0,0 @@
1
- // This file was auto-generated by Fern from our API Definition.
2
- export {};