assembly-kit 0.0.3 → 0.0.5
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.
- package/CLAUDE.md +42 -39
- package/README.md +47 -32
- package/dist/client/index.d.mts +6 -0
- package/dist/client/index.mjs +9 -0
- package/dist/client/index.mjs.map +1 -1
- package/dist/index.d.mts +14 -11
- package/dist/index.mjs +14 -11
- package/dist/lib/modules/app-installs/resource.d.mts +13 -1
- package/dist/lib/modules/app-installs/resource.mjs +25 -1
- package/dist/lib/modules/app-installs/resource.mjs.map +1 -1
- package/dist/lib/modules/app-installs/schema.d.mts +47 -1
- package/dist/lib/modules/app-installs/schema.mjs +37 -1
- package/dist/lib/modules/app-installs/schema.mjs.map +1 -1
- package/dist/lib/modules/clients/resource.d.mts +3 -1
- package/dist/lib/modules/clients/resource.mjs +9 -1
- package/dist/lib/modules/clients/resource.mjs.map +1 -1
- package/dist/lib/modules/clients/schema.d.mts +11 -3
- package/dist/lib/modules/clients/schema.mjs +12 -4
- package/dist/lib/modules/clients/schema.mjs.map +1 -1
- package/dist/lib/modules/companies/resource.d.mts +7 -1
- package/dist/lib/modules/companies/resource.mjs +10 -1
- package/dist/lib/modules/companies/resource.mjs.map +1 -1
- package/dist/lib/modules/companies/schema.d.mts +18 -1
- package/dist/lib/modules/companies/schema.mjs +13 -1
- package/dist/lib/modules/companies/schema.mjs.map +1 -1
- package/dist/lib/modules/custom-fields/resource.d.mts +3 -1
- package/dist/lib/modules/custom-fields/resource.mjs +9 -1
- package/dist/lib/modules/custom-fields/resource.mjs.map +1 -1
- package/dist/lib/modules/custom-fields/schema.d.mts +19 -1
- package/dist/lib/modules/custom-fields/schema.mjs +9 -1
- package/dist/lib/modules/custom-fields/schema.mjs.map +1 -1
- package/dist/lib/modules/files/resource.d.mts +15 -1
- package/dist/lib/modules/files/resource.mjs +29 -1
- package/dist/lib/modules/files/resource.mjs.map +1 -1
- package/dist/lib/modules/files/schema.d.mts +15 -1
- package/dist/lib/modules/files/schema.mjs +8 -1
- package/dist/lib/modules/files/schema.mjs.map +1 -1
- package/dist/lib/modules/forms/resource.d.mts +15 -1
- package/dist/lib/modules/forms/resource.mjs +25 -0
- package/dist/lib/modules/forms/resource.mjs.map +1 -1
- package/dist/lib/modules/forms/schema.d.mts +35 -1
- package/dist/lib/modules/forms/schema.mjs +40 -1
- package/dist/lib/modules/forms/schema.mjs.map +1 -1
- package/dist/lib/modules/index.d.mts +13 -10
- package/dist/lib/modules/index.mjs +3 -0
- package/dist/lib/modules/internal-users/resource.d.mts +8 -1
- package/dist/lib/modules/internal-users/resource.mjs +17 -1
- package/dist/lib/modules/internal-users/resource.mjs.map +1 -1
- package/dist/lib/modules/internal-users/schema.d.mts +22 -1
- package/dist/lib/modules/internal-users/schema.mjs +22 -1
- package/dist/lib/modules/internal-users/schema.mjs.map +1 -1
- package/dist/lib/modules/invoices/schema.d.mts +1 -1
- package/dist/lib/modules/invoices/schema.mjs +1 -0
- package/dist/lib/modules/invoices/schema.mjs.map +1 -1
- package/dist/lib/modules/me/resource.d.mts +19 -0
- package/dist/lib/modules/me/resource.mjs +23 -0
- package/dist/lib/modules/me/resource.mjs.map +1 -0
- package/dist/lib/modules/me/schema.d.mts +15 -0
- package/dist/lib/modules/me/schema.mjs +13 -0
- package/dist/lib/modules/me/schema.mjs.map +1 -0
- package/dist/lib/modules/message-channels/resource.d.mts +5 -1
- package/dist/lib/modules/message-channels/resource.mjs +9 -1
- package/dist/lib/modules/message-channels/resource.mjs.map +1 -1
- package/dist/lib/modules/message-channels/schema.d.mts +10 -1
- package/dist/lib/modules/message-channels/schema.mjs +7 -1
- package/dist/lib/modules/message-channels/schema.mjs.map +1 -1
- package/dist/lib/modules/notifications/resource.d.mts +2 -0
- package/dist/lib/modules/notifications/resource.mjs +8 -0
- package/dist/lib/modules/notifications/resource.mjs.map +1 -1
- package/dist/lib/modules/prices/resource.d.mts +3 -1
- package/dist/lib/modules/prices/resource.mjs +8 -0
- package/dist/lib/modules/prices/resource.mjs.map +1 -1
- package/dist/lib/modules/prices/schema.d.mts +14 -1
- package/dist/lib/modules/prices/schema.mjs +19 -1
- package/dist/lib/modules/prices/schema.mjs.map +1 -1
- package/dist/lib/modules/products/resource.d.mts +3 -1
- package/dist/lib/modules/products/resource.mjs +8 -0
- package/dist/lib/modules/products/resource.mjs.map +1 -1
- package/dist/lib/modules/products/schema.d.mts +7 -1
- package/dist/lib/modules/products/schema.mjs +6 -1
- package/dist/lib/modules/products/schema.mjs.map +1 -1
- package/dist/lib/modules/refunds/resource.d.mts +27 -0
- package/dist/lib/modules/refunds/resource.mjs +40 -0
- package/dist/lib/modules/refunds/resource.mjs.map +1 -0
- package/dist/lib/modules/refunds/schema.d.mts +35 -0
- package/dist/lib/modules/refunds/schema.mjs +32 -0
- package/dist/lib/modules/refunds/schema.mjs.map +1 -0
- package/dist/lib/modules/task-comments/resource.d.mts +29 -0
- package/dist/lib/modules/task-comments/resource.mjs +44 -0
- package/dist/lib/modules/task-comments/resource.mjs.map +1 -0
- package/dist/lib/modules/task-comments/schema.d.mts +24 -0
- package/dist/lib/modules/task-comments/schema.mjs +21 -0
- package/dist/lib/modules/task-comments/schema.mjs.map +1 -0
- package/dist/lib/modules/tasks/schema.d.mts +1 -1
- package/dist/lib/modules/tasks/schema.mjs +1 -1
- package/dist/lib/modules/tasks/schema.mjs.map +1 -1
- package/dist/logger/index.d.mts +20 -1
- package/dist/logger/index.mjs +37 -2
- package/dist/logger/index.mjs.map +1 -1
- package/dist/schemas/index.d.mts +14 -11
- package/dist/schemas/index.mjs +14 -11
- package/dist/transport/http.d.mts +2 -0
- package/dist/transport/http.mjs +1 -0
- package/dist/transport/http.mjs.map +1 -1
- package/package.json +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.mjs","names":[],"sources":["../../src/transport/http.ts"],"sourcesContent":["import ky, { HTTPError } from \"ky\";\nimport pThrottle from \"p-throttle\";\nimport type { AssemblyError } from \"src/errors/base\";\nimport { AssemblyConnectionError } from \"src/errors/connection\";\nimport { AssemblyForbiddenError } from \"src/errors/forbidden\";\nimport { AssemblyNotFoundError } from \"src/errors/not-found\";\nimport { AssemblyRateLimitError } from \"src/errors/rate-limit\";\nimport { AssemblyServerError } from \"src/errors/server\";\nimport { AssemblyUnauthorizedError } from \"src/errors/unauthorized\";\nimport { AssemblyValidationError } from \"src/errors/validation\";\n\nconst DEFAULT_BASE_URL: string = \"https://api.assembly.com\";\nconst DEFAULT_REQUESTS_PER_SECOND: number = 20;\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface TransportOptions {\n /** Pre-built compound key value for the `X-API-Key` header. */\n compoundKey: string;\n /** SDK version string for the `X-Assembly-SDK-Version` header. */\n sdkVersion: string;\n /** Base URL for all API requests. Defaults to the Assembly API. */\n baseUrl?: string;\n /** Maximum number of retry attempts for retryable errors (ky default: 2). */\n retryCount?: number;\n /** Maximum requests per second for the sliding-window rate limiter. */\n requestsPerSecond?: number;\n /** Injectable fetch function for testing. Defaults to global `fetch`. */\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface RequestOpts {\n searchParams?: Record<string, string | number | boolean>;\n}\n\nexport interface Transport {\n get<T>(path: string, opts?: RequestOpts): Promise<T>;\n post<T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T>;\n put<T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T>;\n patch<T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T>;\n delete(path: string, opts?: RequestOpts): Promise<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Retry-After parsing\n// ---------------------------------------------------------------------------\n\n/**\n * Parses a `Retry-After` header value into seconds.\n * Supports both integer seconds and HTTP-date formats (RFC 7231).\n */\nexport const parseRetryAfter = (header: string | null): number | undefined => {\n if (!header) return undefined;\n\n const seconds = Number(header);\n if (!Number.isNaN(seconds)) return seconds >= 0 ? seconds : undefined;\n\n const dateMs = Date.parse(header);\n if (!Number.isNaN(dateMs)) {\n const delayMs = dateMs - Date.now();\n return delayMs > 0 ? Math.ceil(delayMs / 1000) : 0;\n }\n\n return undefined;\n};\n\n// ---------------------------------------------------------------------------\n// Error mapping\n// ---------------------------------------------------------------------------\n\nconst tryParseBody = async (response: Response): Promise<unknown> => {\n try {\n return await response.clone().json();\n } catch {\n return undefined;\n }\n};\n\nconst createErrorForStatus = (\n status: number,\n cause: HTTPError,\n details: unknown,\n retryAfterHeader: string | null,\n): AssemblyError => {\n switch (status) {\n case 400:\n case 422:\n return new AssemblyValidationError({ cause, details });\n case 401:\n return new AssemblyUnauthorizedError({ cause, details });\n case 403:\n return new AssemblyForbiddenError({ cause, details });\n case 404:\n return new AssemblyNotFoundError({ cause, details });\n case 429:\n return new AssemblyRateLimitError({\n cause,\n details,\n retryAfter: parseRetryAfter(retryAfterHeader),\n });\n default:\n if (status >= 500) {\n return new AssemblyServerError({ cause, details });\n }\n return new AssemblyConnectionError({\n cause,\n details,\n message: `Unexpected HTTP ${status}`,\n });\n }\n};\n\nconst mapHttpError = async (error: HTTPError): Promise<AssemblyError> => {\n const { response } = error;\n const details = await tryParseBody(response);\n return createErrorForStatus(response.status, error, details, response.headers.get(\"Retry-After\"));\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst stripLeadingSlash = (path: string): string => (path.startsWith(\"/\") ? path.slice(1) : path);\n\nconst withErrorMapping = async <T>(request: Promise<T>): Promise<T> => {\n try {\n return await request;\n } catch (error) {\n if (error instanceof HTTPError) {\n throw await mapHttpError(error);\n }\n throw new AssemblyConnectionError({ cause: error });\n }\n};\n\n// ---------------------------------------------------------------------------\n// Transport factory\n// ---------------------------------------------------------------------------\n\n/**\n * Creates an HTTP transport backed by `ky` with rate limiting, retry,\n * auth headers, and structured error mapping. Each call produces a fully\n * independent instance (safe for serverless / multi-tenant).\n */\nexport const createTransport = (options: TransportOptions): Transport => {\n const acquireSlot = pThrottle({\n interval: 1000,\n limit: options.requestsPerSecond ?? DEFAULT_REQUESTS_PER_SECOND,\n })(async (): Promise<void> => {});\n\n const api = ky.create({\n headers: {\n \"X-API-Key\": options.compoundKey,\n \"X-Assembly-SDK-Version\": options.sdkVersion,\n },\n hooks: {\n beforeRequest: [\n async (): Promise<void> => {\n await acquireSlot();\n },\n ],\n },\n prefix: options.baseUrl ?? DEFAULT_BASE_URL,\n retry: {\n limit: options.retryCount ?? 2,\n methods: [\"get\", \"post\", \"put\", \"patch\", \"delete\"],\n },\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n\n return {\n get: <T>(path: string, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .get(stripLeadingSlash(path), {\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n post: <T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .post(stripLeadingSlash(path), {\n json: body,\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n put: <T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .put(stripLeadingSlash(path), {\n json: body,\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n patch: <T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .patch(stripLeadingSlash(path), {\n json: body,\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n delete: async (path: string, opts?: RequestOpts): Promise<void> => {\n try {\n await api.delete(stripLeadingSlash(path), {\n searchParams: opts?.searchParams,\n });\n } catch (error) {\n if (error instanceof HTTPError) {\n throw await mapHttpError(error);\n }\n throw new AssemblyConnectionError({ cause: error });\n }\n },\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.mjs","names":[],"sources":["../../src/transport/http.ts"],"sourcesContent":["import ky, { HTTPError } from \"ky\";\nimport pThrottle from \"p-throttle\";\nimport type { AssemblyError } from \"src/errors/base\";\nimport { AssemblyConnectionError } from \"src/errors/connection\";\nimport { AssemblyForbiddenError } from \"src/errors/forbidden\";\nimport { AssemblyNotFoundError } from \"src/errors/not-found\";\nimport { AssemblyRateLimitError } from \"src/errors/rate-limit\";\nimport { AssemblyServerError } from \"src/errors/server\";\nimport { AssemblyUnauthorizedError } from \"src/errors/unauthorized\";\nimport { AssemblyValidationError } from \"src/errors/validation\";\n\nconst DEFAULT_BASE_URL: string = \"https://api.assembly.com\";\nconst DEFAULT_REQUESTS_PER_SECOND: number = 20;\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface TransportOptions {\n /** Pre-built compound key value for the `X-API-Key` header. */\n compoundKey: string;\n /** SDK version string for the `X-Assembly-SDK-Version` header. */\n sdkVersion: string;\n /** Base URL for all API requests. Defaults to the Assembly API. */\n baseUrl?: string;\n /** Maximum number of retry attempts for retryable errors (ky default: 2). */\n retryCount?: number;\n /** Maximum requests per second for the sliding-window rate limiter. */\n requestsPerSecond?: number;\n /** Injectable fetch function for testing. Defaults to global `fetch`. */\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface RequestOpts {\n searchParams?: Record<string, string | number | boolean>;\n}\n\nexport interface Transport {\n get<T>(path: string, opts?: RequestOpts): Promise<T>;\n /** GET returning raw bytes, for endpoints that stream `application/octet-stream`. */\n getRaw(path: string, opts?: RequestOpts): Promise<ArrayBuffer>;\n post<T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T>;\n put<T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T>;\n patch<T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T>;\n delete(path: string, opts?: RequestOpts): Promise<void>;\n}\n\n// ---------------------------------------------------------------------------\n// Retry-After parsing\n// ---------------------------------------------------------------------------\n\n/**\n * Parses a `Retry-After` header value into seconds.\n * Supports both integer seconds and HTTP-date formats (RFC 7231).\n */\nexport const parseRetryAfter = (header: string | null): number | undefined => {\n if (!header) return undefined;\n\n const seconds = Number(header);\n if (!Number.isNaN(seconds)) return seconds >= 0 ? seconds : undefined;\n\n const dateMs = Date.parse(header);\n if (!Number.isNaN(dateMs)) {\n const delayMs = dateMs - Date.now();\n return delayMs > 0 ? Math.ceil(delayMs / 1000) : 0;\n }\n\n return undefined;\n};\n\n// ---------------------------------------------------------------------------\n// Error mapping\n// ---------------------------------------------------------------------------\n\nconst tryParseBody = async (response: Response): Promise<unknown> => {\n try {\n return await response.clone().json();\n } catch {\n return undefined;\n }\n};\n\nconst createErrorForStatus = (\n status: number,\n cause: HTTPError,\n details: unknown,\n retryAfterHeader: string | null,\n): AssemblyError => {\n switch (status) {\n case 400:\n case 422:\n return new AssemblyValidationError({ cause, details });\n case 401:\n return new AssemblyUnauthorizedError({ cause, details });\n case 403:\n return new AssemblyForbiddenError({ cause, details });\n case 404:\n return new AssemblyNotFoundError({ cause, details });\n case 429:\n return new AssemblyRateLimitError({\n cause,\n details,\n retryAfter: parseRetryAfter(retryAfterHeader),\n });\n default:\n if (status >= 500) {\n return new AssemblyServerError({ cause, details });\n }\n return new AssemblyConnectionError({\n cause,\n details,\n message: `Unexpected HTTP ${status}`,\n });\n }\n};\n\nconst mapHttpError = async (error: HTTPError): Promise<AssemblyError> => {\n const { response } = error;\n const details = await tryParseBody(response);\n return createErrorForStatus(response.status, error, details, response.headers.get(\"Retry-After\"));\n};\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst stripLeadingSlash = (path: string): string => (path.startsWith(\"/\") ? path.slice(1) : path);\n\nconst withErrorMapping = async <T>(request: Promise<T>): Promise<T> => {\n try {\n return await request;\n } catch (error) {\n if (error instanceof HTTPError) {\n throw await mapHttpError(error);\n }\n throw new AssemblyConnectionError({ cause: error });\n }\n};\n\n// ---------------------------------------------------------------------------\n// Transport factory\n// ---------------------------------------------------------------------------\n\n/**\n * Creates an HTTP transport backed by `ky` with rate limiting, retry,\n * auth headers, and structured error mapping. Each call produces a fully\n * independent instance (safe for serverless / multi-tenant).\n */\nexport const createTransport = (options: TransportOptions): Transport => {\n const acquireSlot = pThrottle({\n interval: 1000,\n limit: options.requestsPerSecond ?? DEFAULT_REQUESTS_PER_SECOND,\n })(async (): Promise<void> => {});\n\n const api = ky.create({\n headers: {\n \"X-API-Key\": options.compoundKey,\n \"X-Assembly-SDK-Version\": options.sdkVersion,\n },\n hooks: {\n beforeRequest: [\n async (): Promise<void> => {\n await acquireSlot();\n },\n ],\n },\n prefix: options.baseUrl ?? DEFAULT_BASE_URL,\n retry: {\n limit: options.retryCount ?? 2,\n methods: [\"get\", \"post\", \"put\", \"patch\", \"delete\"],\n },\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n\n return {\n get: <T>(path: string, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .get(stripLeadingSlash(path), {\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n getRaw: (path: string, opts?: RequestOpts): Promise<ArrayBuffer> =>\n withErrorMapping(\n api\n .get(stripLeadingSlash(path), {\n searchParams: opts?.searchParams,\n })\n .arrayBuffer(),\n ),\n\n post: <T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .post(stripLeadingSlash(path), {\n json: body,\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n put: <T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .put(stripLeadingSlash(path), {\n json: body,\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n patch: <T>(path: string, body?: unknown, opts?: RequestOpts): Promise<T> =>\n withErrorMapping(\n api\n .patch(stripLeadingSlash(path), {\n json: body,\n searchParams: opts?.searchParams,\n })\n .json<T>(),\n ),\n\n delete: async (path: string, opts?: RequestOpts): Promise<void> => {\n try {\n await api.delete(stripLeadingSlash(path), {\n searchParams: opts?.searchParams,\n });\n } catch (error) {\n if (error instanceof HTTPError) {\n throw await mapHttpError(error);\n }\n throw new AssemblyConnectionError({ cause: error });\n }\n },\n };\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assembly-kit",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "TypeScript SDK for the Assembly platform",
|
|
5
5
|
"homepage": "https://github.com/madebyoutside/assembly-kit#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -43,12 +43,13 @@
|
|
|
43
43
|
"p-throttle": "^8.1.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@assembly-js/app-bridge": "^1.
|
|
46
|
+
"@assembly-js/app-bridge": "^1.4.0",
|
|
47
47
|
"@types/node": "^25.6.0",
|
|
48
48
|
"@types/react": "^19.2.14",
|
|
49
49
|
"@typescript/native-preview": "7.0.0-dev.20260505.1",
|
|
50
50
|
"bumpp": "^11.0.1",
|
|
51
51
|
"pino": "^10.3.1",
|
|
52
|
+
"pino-pretty": "^13.1.2",
|
|
52
53
|
"react": "^19.2.5",
|
|
53
54
|
"typescript": "^6.0.3",
|
|
54
55
|
"vite-plus": "^0.1.20",
|
|
@@ -57,6 +58,7 @@
|
|
|
57
58
|
"peerDependencies": {
|
|
58
59
|
"@assembly-js/app-bridge": "^1.1.1",
|
|
59
60
|
"pino": ">=9",
|
|
61
|
+
"pino-pretty": ">=11",
|
|
60
62
|
"react": ">=18",
|
|
61
63
|
"typescript": ">=5",
|
|
62
64
|
"zod": ">=4"
|
|
@@ -68,6 +70,9 @@
|
|
|
68
70
|
"pino": {
|
|
69
71
|
"optional": true
|
|
70
72
|
},
|
|
73
|
+
"pino-pretty": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
71
76
|
"react": {
|
|
72
77
|
"optional": true
|
|
73
78
|
},
|