@renderinc/sdk 0.2.0 → 0.3.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 (73) hide show
  1. package/README.md +32 -22
  2. package/dist/experimental/experimental.d.ts +6 -2
  3. package/dist/experimental/experimental.d.ts.map +1 -1
  4. package/dist/experimental/experimental.js +9 -3
  5. package/dist/experimental/index.d.ts +2 -2
  6. package/dist/experimental/index.d.ts.map +1 -1
  7. package/dist/experimental/index.js +6 -5
  8. package/dist/experimental/object/api.d.ts +12 -0
  9. package/dist/experimental/object/api.d.ts.map +1 -0
  10. package/dist/experimental/object/api.js +61 -0
  11. package/dist/experimental/object/client.d.ts +23 -0
  12. package/dist/experimental/object/client.d.ts.map +1 -0
  13. package/dist/experimental/object/client.js +168 -0
  14. package/dist/experimental/object/index.d.ts +5 -0
  15. package/dist/experimental/object/index.d.ts.map +1 -0
  16. package/dist/experimental/object/index.js +8 -0
  17. package/dist/experimental/object/types.d.ts +66 -0
  18. package/dist/experimental/object/types.d.ts.map +1 -0
  19. package/dist/generated/schema.d.ts +289 -22
  20. package/dist/generated/schema.d.ts.map +1 -1
  21. package/dist/workflows/uds.d.ts.map +1 -1
  22. package/dist/workflows/uds.js +27 -51
  23. package/package.json +12 -8
  24. package/CHANGELOG.md +0 -26
  25. package/biome.json +0 -84
  26. package/dist/workflows/client/errors.d.ts +0 -25
  27. package/dist/workflows/client/errors.d.ts.map +0 -1
  28. package/dist/workflows/client/errors.js +0 -56
  29. package/dist/workflows/client/schema.d.ts +0 -9322
  30. package/dist/workflows/client/schema.d.ts.map +0 -1
  31. package/dist/workflows/client/workflows.d.ts +0 -15
  32. package/dist/workflows/client/workflows.d.ts.map +0 -1
  33. package/dist/workflows/client/workflows.js +0 -63
  34. package/examples/client/main.ts +0 -42
  35. package/examples/client/package-lock.json +0 -601
  36. package/examples/client/package.json +0 -16
  37. package/examples/client/tsconfig.json +0 -17
  38. package/examples/task/main.ts +0 -90
  39. package/examples/task/package-lock.json +0 -585
  40. package/examples/task/package.json +0 -16
  41. package/examples/task/tsconfig.json +0 -17
  42. package/src/errors.ts +0 -73
  43. package/src/experimental/blob/api.ts +0 -91
  44. package/src/experimental/blob/client.ts +0 -317
  45. package/src/experimental/blob/index.ts +0 -22
  46. package/src/experimental/blob/types.ts +0 -131
  47. package/src/experimental/experimental.ts +0 -33
  48. package/src/experimental/index.ts +0 -24
  49. package/src/generated/schema.ts +0 -12729
  50. package/src/index.ts +0 -7
  51. package/src/render.ts +0 -35
  52. package/src/utils/create-api-client.ts +0 -13
  53. package/src/utils/get-base-url.ts +0 -16
  54. package/src/version.ts +0 -37
  55. package/src/workflows/client/client.ts +0 -142
  56. package/src/workflows/client/create-client.ts +0 -17
  57. package/src/workflows/client/index.ts +0 -3
  58. package/src/workflows/client/sse.ts +0 -95
  59. package/src/workflows/client/types.ts +0 -56
  60. package/src/workflows/executor.ts +0 -124
  61. package/src/workflows/index.ts +0 -7
  62. package/src/workflows/registry.test.ts +0 -76
  63. package/src/workflows/registry.ts +0 -88
  64. package/src/workflows/runner.ts +0 -38
  65. package/src/workflows/schema.ts +0 -348
  66. package/src/workflows/task.ts +0 -117
  67. package/src/workflows/types.ts +0 -89
  68. package/src/workflows/uds.ts +0 -179
  69. package/test-types.ts +0 -14
  70. package/tsconfig.build.json +0 -4
  71. package/tsconfig.json +0 -23
  72. package/vite.config.ts +0 -7
  73. /package/dist/{workflows/client/schema.js → experimental/object/types.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"uds.d.ts","sourceRoot":"","sources":["../../src/workflows/uds.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,gBAAgB,EAEhB,wBAAwB,EAIxB,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM;IAKzC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI3C,OAAO,CAAC,iBAAiB;IAyBnB,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAUtE,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAa3C,OAAO;CAiFtB"}
1
+ {"version":3,"file":"uds.d.ts","sourceRoot":"","sources":["../../src/workflows/uds.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gBAAgB,EAEhB,wBAAwB,EAIxB,YAAY,EACb,MAAM,YAAY,CAAC;AAKpB,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,MAAM;IAKzC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI3C,OAAO,CAAC,iBAAiB;IAyBnB,YAAY,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1D,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAUtE,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAa3C,OAAO;CA4CtB"}
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.UDSClient = void 0;
4
- const node_net_1 = require("node:net");
7
+ const node_http_1 = __importDefault(require("node:http"));
5
8
  const version_js_1 = require("../version.js");
6
- const CONTENT_LENGTH_REGEX = /Content-Length:\s*(\d+)/i;
7
9
  class UDSClient {
8
10
  constructor(socketPath) {
9
11
  this.socketPath = socketPath;
@@ -58,67 +60,41 @@ class UDSClient {
58
60
  await this.request("/register-tasks", "POST", body);
59
61
  }
60
62
  async request(path, method, body) {
63
+ const bodyString = body ? JSON.stringify(body) : "";
61
64
  return new Promise((resolve, reject) => {
62
- const client = (0, node_net_1.createConnection)({ path: this.socketPath }, () => {
63
- const bodyStr = body ? JSON.stringify(body) : "";
64
- const userAgent = (0, version_js_1.getUserAgent)();
65
- const request = `${method} ${path} HTTP/1.1\r\nHost: unix\r\nContent-Length: ${bodyStr.length}\r\nContent-Type: application/json\r\nUser-Agent: ${userAgent}\r\n\r\n${bodyStr}`;
66
- client.write(request);
67
- });
68
- let data = "";
69
- let contentLength = null;
70
- let headersParsed = false;
71
- let bodyStartIndex = -1;
72
- client.on("data", (chunk) => {
73
- data += chunk.toString();
74
- if (!headersParsed) {
75
- const headerEndIndex = data.indexOf("\r\n\r\n");
76
- if (headerEndIndex !== -1) {
77
- headersParsed = true;
78
- bodyStartIndex = headerEndIndex + 4;
79
- const headers = data.substring(0, headerEndIndex);
80
- const contentLengthMatch = headers.match(CONTENT_LENGTH_REGEX);
81
- if (contentLengthMatch) {
82
- contentLength = Number.parseInt(contentLengthMatch[1], 10);
83
- }
84
- }
65
+ const req = node_http_1.default.request({
66
+ socketPath: this.socketPath,
67
+ path: path,
68
+ method: method,
69
+ headers: {
70
+ "Content-Length": Buffer.byteLength(bodyString),
71
+ "Content-Type": "application/json",
72
+ "User-Agent": (0, version_js_1.getUserAgent)(),
73
+ },
74
+ }, async (res) => {
75
+ const chunks = [];
76
+ for await (const chunk of res)
77
+ chunks.push(chunk);
78
+ const responseBody = Buffer.concat(chunks).toString();
79
+ if (res.statusCode && res.statusCode >= 400) {
80
+ reject(new Error(`HTTP ${res.statusCode}: ${responseBody}`));
81
+ return;
85
82
  }
86
- if (headersParsed && contentLength !== null) {
87
- const bodyReceived = data.length - bodyStartIndex;
88
- if (bodyReceived >= contentLength) {
89
- client.end();
90
- }
83
+ if (responseBody.length === 0) {
84
+ resolve(undefined);
85
+ return;
91
86
  }
92
- });
93
- client.on("end", () => {
94
87
  try {
95
- const lines = data.split("\r\n");
96
- const statusLine = lines[0];
97
- const statusCode = Number.parseInt(statusLine.split(" ")[1], 10);
98
- if (statusCode >= 400) {
99
- reject(new Error(`HTTP ${statusCode}: ${data}`));
100
- return;
101
- }
102
- const emptyLineIndex = lines.indexOf("");
103
- if (emptyLineIndex === -1) {
104
- resolve(undefined);
105
- return;
106
- }
107
- const bodyLines = lines.slice(emptyLineIndex + 1);
108
- const responseBody = bodyLines.join("\r\n").trim();
109
- if (!responseBody) {
110
- resolve(undefined);
111
- return;
112
- }
113
88
  resolve(JSON.parse(responseBody));
114
89
  }
115
90
  catch (error) {
116
91
  reject(error);
117
92
  }
118
93
  });
119
- client.on("error", (error) => {
94
+ req.on("error", (error) => {
120
95
  reject(error);
121
96
  });
97
+ req.end(bodyString);
122
98
  });
123
99
  }
124
100
  }
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@renderinc/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Render SDK for TypeScript",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
7
10
  "scripts": {
8
11
  "build": "tsc -p tsconfig.build.json",
9
12
  "test": "vitest",
13
+ "typecheck": "tsc --noEmit",
10
14
  "lint": "biome lint",
11
15
  "lint:fix": "biome lint --write",
12
16
  "format": "biome format --write",
@@ -27,7 +31,7 @@
27
31
  "@types/node": "^20.0.0",
28
32
  "openapi-typescript": "^7.10.1",
29
33
  "typescript": "^5.9.3",
30
- "vitest": "^1.0.0"
34
+ "vitest": "^4.0.18"
31
35
  },
32
36
  "dependencies": {
33
37
  "eventsource": "^4.0.0",
@@ -38,19 +42,19 @@
38
42
  },
39
43
  "exports": {
40
44
  ".": {
45
+ "types": "./dist/index.d.ts",
41
46
  "import": "./dist/index.js",
42
- "require": "./dist/index.js",
43
- "types": "./dist/index.d.ts"
47
+ "require": "./dist/index.js"
44
48
  },
45
49
  "./workflows": {
50
+ "types": "./dist/workflows/index.d.ts",
46
51
  "import": "./dist/workflows/index.js",
47
- "require": "./dist/workflows/index.js",
48
- "types": "./dist/workflows/index.d.ts"
52
+ "require": "./dist/workflows/index.js"
49
53
  },
50
54
  "./experimental": {
55
+ "types": "./dist/experimental/index.d.ts",
51
56
  "import": "./dist/experimental/index.js",
52
- "require": "./dist/experimental/index.js",
53
- "types": "./dist/experimental/index.d.ts"
57
+ "require": "./dist/experimental/index.js"
54
58
  }
55
59
  }
56
60
  }
package/CHANGELOG.md DELETED
@@ -1,26 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to the `@render/sdk` TypeScript SDK will be documented in this file.
4
-
5
- This project follows [Semantic Versioning](https://semver.org/).
6
-
7
- ## [0.2.0] - 2026-01-26
8
-
9
- ### Added
10
- - Add experimental blob storage API with `BlobClient` and `ScopedBlobClient`
11
- - Add plan support for task execution
12
- - Add per-task timeout override via `timeoutSeconds` option
13
-
14
- ### Changed
15
- - Auto-start task server on task registration (no need to call `startTaskServer()` manually)
16
- - Rename `wait_duration` to `wait_duration_ms` for cross-SDK consistency
17
- - Move generated API schema to `generated/` directory
18
-
19
- ## [0.1.0] - 2025-12-15
20
-
21
- ### Added
22
- - Add initial TypeScript SDK for Render Workflows
23
- - Add task registration and execution via `@render/sdk/workflows`
24
- - Add `TaskContext` for task metadata and subtask execution
25
- - Add configurable retry policies with exponential backoff
26
- - Add generated OpenAPI types for full type safety
package/biome.json DELETED
@@ -1,84 +0,0 @@
1
- {
2
- "$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
3
- "vcs": {
4
- "enabled": true,
5
- "clientKind": "git",
6
- "useIgnoreFile": true
7
- },
8
- "files": {
9
- "ignoreUnknown": false,
10
- "includes": ["**", "!!**/src/generated/**/*"]
11
- },
12
- "formatter": {
13
- "enabled": true,
14
- "indentStyle": "space",
15
- "indentWidth": 2,
16
- "lineWidth": 100
17
- },
18
- "linter": {
19
- "enabled": true,
20
- "rules": {
21
- "recommended": true,
22
- "performance": {
23
- "noAccumulatingSpread": "error",
24
- "noDelete": "error",
25
- "noDynamicNamespaceImportAccess": "error",
26
- "noNamespaceImport": "error",
27
- "useTopLevelRegex": "error"
28
- },
29
- "complexity": {
30
- "noCommaOperator": "error",
31
- "noForEach": "error",
32
- "noUselessConstructor": "error",
33
- "noUselessEmptyExport": "error",
34
- "noUselessFragments": "error",
35
- "noUselessLabel": "error",
36
- "noUselessLoneBlockStatements": "error",
37
- "noUselessRename": "error",
38
- "noUselessSwitchCase": "error",
39
- "noUselessTypeConstraint": "error",
40
- "useArrowFunction": "error",
41
- "useLiteralKeys": "error"
42
- },
43
- "suspicious": {
44
- "noExplicitAny": "off"
45
- },
46
- "style": {
47
- "noImplicitBoolean": "error",
48
- "noNegationElse": "error",
49
- "noParameterAssign": "warn",
50
- "noRestrictedGlobals": "error",
51
- "noRestrictedImports": {
52
- "level": "error",
53
- "options": {
54
- "paths": {
55
- "vitest": {
56
- "message": "Vitest functions are automatically imported.",
57
- "allowImportNames": ["Mock"]
58
- }
59
- }
60
- }
61
- },
62
- "useDefaultParameterLast": "error",
63
- "useExponentiationOperator": "error",
64
- "useNodejsImportProtocol": "error",
65
- "useNumberNamespace": "error",
66
- "useSingleVarDeclarator": "error",
67
- "noCommonJs": "error",
68
- "useNumericSeparators": "error",
69
- "useReadonlyClassProperties": "error",
70
- "useUnifiedTypeSignatures": "error"
71
- }
72
- }
73
- },
74
- "javascript": {
75
- "formatter": {
76
- "quoteStyle": "double",
77
- "trailingCommas": "all",
78
- "semicolons": "always",
79
- "quoteProperties": "asNeeded",
80
- "bracketSpacing": true,
81
- "arrowParentheses": "always"
82
- }
83
- }
84
- }
@@ -1,25 +0,0 @@
1
- export declare class RenderError extends Error {
2
- constructor(message: string);
3
- }
4
- export declare class TaskRunError extends RenderError {
5
- taskRunId?: string | undefined;
6
- taskError?: string | undefined;
7
- constructor(message: string, taskRunId?: string | undefined, taskError?: string | undefined);
8
- }
9
- export declare class ClientError extends RenderError {
10
- statusCode: number;
11
- response?: any | undefined;
12
- constructor(message: string, statusCode: number, response?: any | undefined);
13
- }
14
- export declare class ServerError extends RenderError {
15
- statusCode: number;
16
- response?: any | undefined;
17
- constructor(message: string, statusCode: number, response?: any | undefined);
18
- }
19
- export declare class TimeoutError extends RenderError {
20
- constructor(message: string);
21
- }
22
- export declare class AbortError extends Error {
23
- constructor();
24
- }
25
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/workflows/client/errors.ts"],"names":[],"mappings":"AAGA,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAK5B;AAKD,qBAAa,YAAa,SAAQ,WAAW;IAGlC,SAAS,CAAC,EAAE,MAAM;IAClB,SAAS,CAAC,EAAE,MAAM;gBAFzB,OAAO,EAAE,MAAM,EACR,SAAS,CAAC,EAAE,MAAM,YAAA,EAClB,SAAS,CAAC,EAAE,MAAM,YAAA;CAM5B;AAKD,qBAAa,WAAY,SAAQ,WAAW;IAGjC,UAAU,EAAE,MAAM;IAClB,QAAQ,CAAC,EAAE,GAAG;gBAFrB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,GAAG,YAAA;CAMxB;AAKD,qBAAa,WAAY,SAAQ,WAAW;IAGjC,UAAU,EAAE,MAAM;IAClB,QAAQ,CAAC,EAAE,GAAG;gBAFrB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,GAAG,YAAA;CAMxB;AAKD,qBAAa,YAAa,SAAQ,WAAW;gBAC/B,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,UAAW,SAAQ,KAAK;;CAKpC"}
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AbortError = exports.TimeoutError = exports.ServerError = exports.ClientError = exports.TaskRunError = exports.RenderError = void 0;
4
- class RenderError extends Error {
5
- constructor(message) {
6
- super(message);
7
- this.name = 'RenderError';
8
- Object.setPrototypeOf(this, RenderError.prototype);
9
- }
10
- }
11
- exports.RenderError = RenderError;
12
- class TaskRunError extends RenderError {
13
- constructor(message, taskRunId, taskError) {
14
- super(message);
15
- this.taskRunId = taskRunId;
16
- this.taskError = taskError;
17
- this.name = 'TaskRunError';
18
- Object.setPrototypeOf(this, TaskRunError.prototype);
19
- }
20
- }
21
- exports.TaskRunError = TaskRunError;
22
- class ClientError extends RenderError {
23
- constructor(message, statusCode, response) {
24
- super(message);
25
- this.statusCode = statusCode;
26
- this.response = response;
27
- this.name = 'ClientError';
28
- Object.setPrototypeOf(this, ClientError.prototype);
29
- }
30
- }
31
- exports.ClientError = ClientError;
32
- class ServerError extends RenderError {
33
- constructor(message, statusCode, response) {
34
- super(message);
35
- this.statusCode = statusCode;
36
- this.response = response;
37
- this.name = 'ServerError';
38
- Object.setPrototypeOf(this, ServerError.prototype);
39
- }
40
- }
41
- exports.ServerError = ServerError;
42
- class TimeoutError extends RenderError {
43
- constructor(message) {
44
- super(message);
45
- this.name = 'TimeoutError';
46
- Object.setPrototypeOf(this, TimeoutError.prototype);
47
- }
48
- }
49
- exports.TimeoutError = TimeoutError;
50
- class AbortError extends Error {
51
- constructor() {
52
- super('The operation was aborted.');
53
- this.name = 'AbortError';
54
- }
55
- }
56
- exports.AbortError = AbortError;