@animalabs/membrane 0.5.50 → 0.5.52

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 (123) hide show
  1. package/dist/context/index.d.ts +12 -0
  2. package/dist/context/index.js +11 -0
  3. package/dist/context/index.js.map +1 -0
  4. package/dist/context/process.d.ts +43 -0
  5. package/dist/context/process.js +381 -0
  6. package/dist/context/process.js.map +1 -0
  7. package/dist/context/types.d.ts +164 -0
  8. package/dist/context/types.js +61 -0
  9. package/dist/context/types.js.map +1 -0
  10. package/dist/formatters/anthropic-xml.d.ts +63 -0
  11. package/dist/formatters/anthropic-xml.js +417 -0
  12. package/dist/formatters/anthropic-xml.js.map +1 -0
  13. package/dist/formatters/completions.d.ts +68 -0
  14. package/dist/formatters/completions.js +261 -0
  15. package/dist/formatters/completions.js.map +1 -0
  16. package/dist/formatters/index.d.ts +8 -0
  17. package/dist/formatters/index.js +7 -0
  18. package/dist/formatters/index.js.map +1 -0
  19. package/dist/formatters/native.d.ts +35 -0
  20. package/dist/formatters/native.js +336 -0
  21. package/dist/formatters/native.js.map +1 -0
  22. package/dist/formatters/types.d.ts +167 -0
  23. package/dist/formatters/types.js +7 -0
  24. package/dist/formatters/types.js.map +1 -0
  25. package/dist/index.d.ts +13 -0
  26. package/dist/index.js +20 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/membrane.d.ts +155 -0
  29. package/dist/providers/anthropic.d.ts +36 -0
  30. package/dist/providers/bedrock.d.ts +43 -0
  31. package/dist/providers/gemini.d.ts +68 -0
  32. package/dist/providers/gemini.js +538 -0
  33. package/dist/providers/gemini.js.map +1 -0
  34. package/dist/providers/index.d.ts +13 -0
  35. package/dist/providers/index.js +13 -0
  36. package/dist/providers/index.js.map +1 -0
  37. package/dist/providers/mock.d.ts +90 -0
  38. package/dist/providers/mock.d.ts.map +1 -0
  39. package/dist/providers/mock.js +210 -0
  40. package/dist/providers/mock.js.map +1 -0
  41. package/dist/providers/openai-compatible.d.ts +82 -0
  42. package/dist/providers/openai-compatible.js +480 -0
  43. package/dist/providers/openai-compatible.js.map +1 -0
  44. package/dist/providers/openai-completions.d.ts +89 -0
  45. package/dist/providers/openai-completions.js +347 -0
  46. package/dist/providers/openai-completions.js.map +1 -0
  47. package/dist/providers/openai-responses.d.ts +77 -0
  48. package/dist/providers/openai-responses.js +333 -0
  49. package/dist/providers/openai-responses.js.map +1 -0
  50. package/dist/providers/openai.d.ts +77 -0
  51. package/dist/providers/openai.js +533 -0
  52. package/dist/providers/openai.js.map +1 -0
  53. package/dist/providers/openrouter.d.ts +82 -0
  54. package/dist/providers/openrouter.js +556 -0
  55. package/dist/providers/openrouter.js.map +1 -0
  56. package/dist/providers/utils.d.ts +44 -0
  57. package/dist/providers/utils.d.ts.map +1 -0
  58. package/dist/providers/utils.js +100 -0
  59. package/dist/providers/utils.js.map +1 -0
  60. package/dist/registry/default-pricing.d.ts +3 -0
  61. package/dist/registry/default-pricing.d.ts.map +1 -0
  62. package/dist/registry/default-pricing.js +75 -0
  63. package/dist/registry/default-pricing.js.map +1 -0
  64. package/dist/transforms/chat.d.ts +52 -0
  65. package/dist/transforms/chat.js +136 -0
  66. package/dist/transforms/chat.js.map +1 -0
  67. package/dist/transforms/index.d.ts +5 -0
  68. package/dist/transforms/index.js +7 -0
  69. package/dist/transforms/index.js.map +1 -0
  70. package/dist/types/config.d.ts +110 -0
  71. package/dist/types/config.js +21 -0
  72. package/dist/types/config.js.map +1 -0
  73. package/dist/types/content.d.ts +87 -0
  74. package/dist/types/content.d.ts.map +1 -0
  75. package/dist/types/content.js +40 -0
  76. package/dist/types/content.js.map +1 -0
  77. package/dist/types/errors.d.ts +50 -0
  78. package/dist/types/errors.d.ts.map +1 -0
  79. package/dist/types/errors.js +253 -0
  80. package/dist/types/errors.js.map +1 -0
  81. package/dist/types/index.d.ts +20 -0
  82. package/dist/types/index.js +10 -0
  83. package/dist/types/index.js.map +1 -0
  84. package/dist/types/message.d.ts +52 -0
  85. package/dist/types/message.d.ts.map +1 -0
  86. package/dist/types/message.js +38 -0
  87. package/dist/types/message.js.map +1 -0
  88. package/dist/types/provider.d.ts +169 -0
  89. package/dist/types/provider.d.ts.map +1 -0
  90. package/dist/types/provider.js +5 -0
  91. package/dist/types/provider.js.map +1 -0
  92. package/dist/types/request.d.ts +116 -0
  93. package/dist/types/request.d.ts.map +1 -0
  94. package/dist/types/request.js +5 -0
  95. package/dist/types/request.js.map +1 -0
  96. package/dist/types/response.d.ts +131 -0
  97. package/dist/types/response.d.ts.map +1 -0
  98. package/dist/types/response.js +7 -0
  99. package/dist/types/response.js.map +1 -0
  100. package/dist/types/streaming.d.ts +194 -0
  101. package/dist/types/streaming.js +5 -0
  102. package/dist/types/streaming.js.map +1 -0
  103. package/dist/types/tools.d.ts +71 -0
  104. package/dist/types/tools.d.ts.map +1 -0
  105. package/dist/types/tools.js +5 -0
  106. package/dist/types/tools.js.map +1 -0
  107. package/dist/utils/cost.d.ts +10 -0
  108. package/dist/utils/cost.d.ts.map +1 -0
  109. package/dist/utils/cost.js +19 -0
  110. package/dist/utils/cost.js.map +1 -0
  111. package/dist/utils/index.d.ts +7 -0
  112. package/dist/utils/index.js +6 -0
  113. package/dist/utils/index.js.map +1 -0
  114. package/dist/utils/stream-parser.d.ts +84 -0
  115. package/dist/utils/stream-parser.js +418 -0
  116. package/dist/utils/stream-parser.js.map +1 -0
  117. package/dist/utils/tool-parser.d.ts +134 -0
  118. package/dist/utils/tool-parser.js +600 -0
  119. package/dist/utils/tool-parser.js.map +1 -0
  120. package/dist/yielding-stream.d.ts +60 -0
  121. package/dist/yielding-stream.js +206 -0
  122. package/dist/yielding-stream.js.map +1 -0
  123. package/package.json +1 -1
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Content block types for normalized messages
3
+ */
4
+ // ============================================================================
5
+ // Type Guards
6
+ // ============================================================================
7
+ export function isTextContent(block) {
8
+ return block.type === 'text';
9
+ }
10
+ export function isImageContent(block) {
11
+ return block.type === 'image';
12
+ }
13
+ export function isDocumentContent(block) {
14
+ return block.type === 'document';
15
+ }
16
+ export function isAudioContent(block) {
17
+ return block.type === 'audio';
18
+ }
19
+ export function isVideoContent(block) {
20
+ return block.type === 'video';
21
+ }
22
+ export function isGeneratedImageContent(block) {
23
+ return block.type === 'generated_image';
24
+ }
25
+ export function isToolUseContent(block) {
26
+ return block.type === 'tool_use';
27
+ }
28
+ export function isToolResultContent(block) {
29
+ return block.type === 'tool_result';
30
+ }
31
+ export function isThinkingContent(block) {
32
+ return block.type === 'thinking';
33
+ }
34
+ export function isRedactedThinkingContent(block) {
35
+ return block.type === 'redacted_thinking';
36
+ }
37
+ export function isMediaContent(block) {
38
+ return ['image', 'document', 'audio', 'video'].includes(block.type);
39
+ }
40
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/types/content.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwIH,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,UAAU,aAAa,CAAC,KAAmB;IAC/C,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACnD,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAmB;IACzD,OAAO,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,OAAO,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAmB;IACnD,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAmB;IAC3D,OAAO,KAAK,CAAC,IAAI,KAAK,mBAAmB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,KAAmB;IAEnB,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Error types for membrane
3
+ */
4
+ /**
5
+ * Serialize an error for storage in rawError field.
6
+ * Error objects don't JSON.stringify well (become {}), so we extract key properties.
7
+ */
8
+ export declare function serializeError(error: unknown): unknown;
9
+ export type MembraneErrorType = 'rate_limit' | 'context_length' | 'invalid_request' | 'auth' | 'server' | 'network' | 'timeout' | 'abort' | 'safety' | 'unsupported' | 'unknown';
10
+ export interface ErrorInfo {
11
+ /** Normalized error type */
12
+ type: MembraneErrorType;
13
+ /** Human-readable message */
14
+ message: string;
15
+ /** Whether this error is retryable */
16
+ retryable: boolean;
17
+ /** Retry after (milliseconds) - for rate limits */
18
+ retryAfterMs?: number;
19
+ /** HTTP status code if available */
20
+ httpStatus?: number;
21
+ /** Provider-specific error code */
22
+ providerErrorCode?: string;
23
+ /** Raw error object */
24
+ rawError: unknown;
25
+ /** Raw request that caused the error (for logging) */
26
+ rawRequest?: unknown;
27
+ }
28
+ export declare class MembraneError extends Error {
29
+ readonly type: MembraneErrorType;
30
+ readonly retryable: boolean;
31
+ readonly retryAfterMs?: number;
32
+ readonly httpStatus?: number;
33
+ readonly providerErrorCode?: string;
34
+ readonly rawError?: unknown;
35
+ readonly rawRequest?: unknown;
36
+ constructor(info: ErrorInfo);
37
+ toErrorInfo(): ErrorInfo;
38
+ }
39
+ export declare function rateLimitError(message: string, retryAfterMs?: number, raw?: unknown, rawRequest?: unknown): MembraneError;
40
+ export declare function contextLengthError(message: string, raw?: unknown, rawRequest?: unknown): MembraneError;
41
+ export declare function invalidRequestError(message: string, raw?: unknown, rawRequest?: unknown): MembraneError;
42
+ export declare function authError(message: string, raw?: unknown, rawRequest?: unknown): MembraneError;
43
+ export declare function serverError(message: string, httpStatus?: number, raw?: unknown, rawRequest?: unknown): MembraneError;
44
+ export declare function networkError(message: string, raw?: unknown, rawRequest?: unknown): MembraneError;
45
+ export declare function timeoutError(message: string, raw?: unknown, rawRequest?: unknown): MembraneError;
46
+ export declare function abortError(message?: string, rawRequest?: unknown): MembraneError;
47
+ export declare function safetyError(message: string, raw?: unknown, rawRequest?: unknown): MembraneError;
48
+ export declare function unsupportedError(message: string, rawRequest?: unknown): MembraneError;
49
+ export declare function classifyError(error: unknown): ErrorInfo;
50
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CA0BtD;AAMD,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,gBAAgB,GAChB,iBAAiB,GACjB,MAAM,GACN,QAAQ,GACR,SAAS,GACT,SAAS,GACT,OAAO,GACP,QAAQ,GACR,aAAa,GACb,SAAS,CAAC;AAMd,MAAM,WAAW,SAAS;IACxB,4BAA4B;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IAExB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,sCAAsC;IACtC,SAAS,EAAE,OAAO,CAAC;IAEnB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,mCAAmC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,uBAAuB;IACvB,QAAQ,EAAE,OAAO,CAAC;IAElB,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;gBAElB,IAAI,EAAE,SAAS;IAa3B,WAAW,IAAI,SAAS;CAYzB;AAMD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAUzH;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAStG;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CASvG;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAS7F;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CASpH;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAQhG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAQhG;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,MAA8B,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAQvG;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAQ/F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,aAAa,CAQrF;AAMD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CA2FvD"}
@@ -0,0 +1,253 @@
1
+ /**
2
+ * Error types for membrane
3
+ */
4
+ // ============================================================================
5
+ // Error Serialization Helper
6
+ // ============================================================================
7
+ /**
8
+ * Serialize an error for storage in rawError field.
9
+ * Error objects don't JSON.stringify well (become {}), so we extract key properties.
10
+ */
11
+ export function serializeError(error) {
12
+ if (error === undefined || error === null) {
13
+ return error;
14
+ }
15
+ if (error instanceof Error) {
16
+ const serialized = {
17
+ name: error.name,
18
+ message: error.message,
19
+ };
20
+ // Include stack trace in non-production
21
+ if (process.env.NODE_ENV !== 'production' && error.stack) {
22
+ serialized.stack = error.stack;
23
+ }
24
+ // Copy any additional enumerable properties (like status, code, etc.)
25
+ for (const key of Object.keys(error)) {
26
+ serialized[key] = error[key];
27
+ }
28
+ return serialized;
29
+ }
30
+ // For non-Error objects, return as-is (they should serialize fine)
31
+ return error;
32
+ }
33
+ // ============================================================================
34
+ // Membrane Error Class
35
+ // ============================================================================
36
+ export class MembraneError extends Error {
37
+ type;
38
+ retryable;
39
+ retryAfterMs;
40
+ httpStatus;
41
+ providerErrorCode;
42
+ rawError;
43
+ rawRequest;
44
+ constructor(info) {
45
+ super(info.message);
46
+ this.name = 'MembraneError';
47
+ this.type = info.type;
48
+ this.retryable = info.retryable;
49
+ this.retryAfterMs = info.retryAfterMs;
50
+ this.httpStatus = info.httpStatus;
51
+ this.providerErrorCode = info.providerErrorCode;
52
+ // Serialize error objects so they don't become {} when JSON.stringify'd
53
+ this.rawError = serializeError(info.rawError);
54
+ this.rawRequest = info.rawRequest;
55
+ }
56
+ toErrorInfo() {
57
+ return {
58
+ type: this.type,
59
+ message: this.message,
60
+ retryable: this.retryable,
61
+ retryAfterMs: this.retryAfterMs,
62
+ httpStatus: this.httpStatus,
63
+ providerErrorCode: this.providerErrorCode,
64
+ rawError: this.rawError,
65
+ rawRequest: this.rawRequest,
66
+ };
67
+ }
68
+ }
69
+ // ============================================================================
70
+ // Error Factory Functions
71
+ // ============================================================================
72
+ export function rateLimitError(message, retryAfterMs, raw, rawRequest) {
73
+ return new MembraneError({
74
+ type: 'rate_limit',
75
+ message,
76
+ retryable: true,
77
+ retryAfterMs,
78
+ httpStatus: 429,
79
+ rawError: raw,
80
+ rawRequest,
81
+ });
82
+ }
83
+ export function contextLengthError(message, raw, rawRequest) {
84
+ return new MembraneError({
85
+ type: 'context_length',
86
+ message,
87
+ retryable: false,
88
+ httpStatus: 400,
89
+ rawError: raw,
90
+ rawRequest,
91
+ });
92
+ }
93
+ export function invalidRequestError(message, raw, rawRequest) {
94
+ return new MembraneError({
95
+ type: 'invalid_request',
96
+ message,
97
+ retryable: false,
98
+ httpStatus: 400,
99
+ rawError: raw,
100
+ rawRequest,
101
+ });
102
+ }
103
+ export function authError(message, raw, rawRequest) {
104
+ return new MembraneError({
105
+ type: 'auth',
106
+ message,
107
+ retryable: false,
108
+ httpStatus: 401,
109
+ rawError: raw,
110
+ rawRequest,
111
+ });
112
+ }
113
+ export function serverError(message, httpStatus, raw, rawRequest) {
114
+ return new MembraneError({
115
+ type: 'server',
116
+ message,
117
+ retryable: true,
118
+ httpStatus: httpStatus ?? 500,
119
+ rawError: raw,
120
+ rawRequest,
121
+ });
122
+ }
123
+ export function networkError(message, raw, rawRequest) {
124
+ return new MembraneError({
125
+ type: 'network',
126
+ message,
127
+ retryable: true,
128
+ rawError: raw,
129
+ rawRequest,
130
+ });
131
+ }
132
+ export function timeoutError(message, raw, rawRequest) {
133
+ return new MembraneError({
134
+ type: 'timeout',
135
+ message,
136
+ retryable: true,
137
+ rawError: raw,
138
+ rawRequest,
139
+ });
140
+ }
141
+ export function abortError(message = 'Request was aborted', rawRequest) {
142
+ return new MembraneError({
143
+ type: 'abort',
144
+ message,
145
+ retryable: false,
146
+ rawError: undefined,
147
+ rawRequest,
148
+ });
149
+ }
150
+ export function safetyError(message, raw, rawRequest) {
151
+ return new MembraneError({
152
+ type: 'safety',
153
+ message,
154
+ retryable: false,
155
+ rawError: raw,
156
+ rawRequest,
157
+ });
158
+ }
159
+ export function unsupportedError(message, rawRequest) {
160
+ return new MembraneError({
161
+ type: 'unsupported',
162
+ message,
163
+ retryable: false,
164
+ rawError: undefined,
165
+ rawRequest,
166
+ });
167
+ }
168
+ // ============================================================================
169
+ // Error Classification
170
+ // ============================================================================
171
+ export function classifyError(error) {
172
+ if (error instanceof MembraneError) {
173
+ return error.toErrorInfo();
174
+ }
175
+ // Serialize the error once for use in all return paths
176
+ const serializedError = serializeError(error);
177
+ if (error instanceof Error) {
178
+ const message = error.message.toLowerCase();
179
+ // Rate limit
180
+ if (message.includes('rate') || message.includes('429') || message.includes('too many')) {
181
+ return {
182
+ type: 'rate_limit',
183
+ message: error.message,
184
+ retryable: true,
185
+ httpStatus: 429,
186
+ rawError: serializedError,
187
+ };
188
+ }
189
+ // Context length
190
+ if (message.includes('context') || message.includes('too long') || message.includes('maximum')) {
191
+ return {
192
+ type: 'context_length',
193
+ message: error.message,
194
+ retryable: false,
195
+ rawError: serializedError,
196
+ };
197
+ }
198
+ // Auth
199
+ if (message.includes('auth') || message.includes('401') || message.includes('api key')) {
200
+ return {
201
+ type: 'auth',
202
+ message: error.message,
203
+ retryable: false,
204
+ httpStatus: 401,
205
+ rawError: serializedError,
206
+ };
207
+ }
208
+ // Network
209
+ if (message.includes('network') || message.includes('econnreset') || message.includes('socket')) {
210
+ return {
211
+ type: 'network',
212
+ message: error.message,
213
+ retryable: true,
214
+ rawError: serializedError,
215
+ };
216
+ }
217
+ // Timeout
218
+ if (message.includes('timeout') || message.includes('timed out')) {
219
+ return {
220
+ type: 'timeout',
221
+ message: error.message,
222
+ retryable: true,
223
+ rawError: serializedError,
224
+ };
225
+ }
226
+ // Abort
227
+ if (message.includes('abort') || error.name === 'AbortError') {
228
+ return {
229
+ type: 'abort',
230
+ message: error.message,
231
+ retryable: false,
232
+ rawError: serializedError,
233
+ };
234
+ }
235
+ // Server error
236
+ if (message.includes('500') || message.includes('502') || message.includes('503') || message.includes('504')) {
237
+ return {
238
+ type: 'server',
239
+ message: error.message,
240
+ retryable: true,
241
+ rawError: serializedError,
242
+ };
243
+ }
244
+ }
245
+ // Unknown
246
+ return {
247
+ type: 'unknown',
248
+ message: error instanceof Error ? error.message : String(error),
249
+ retryable: false,
250
+ rawError: serializedError,
251
+ };
252
+ }
253
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Type exports for membrane
3
+ */
4
+ export type { CacheControl, MediaSource, Base64Source, UrlSource, ContentBlock, TextContent, ImageContent, DocumentContent, AudioContent, VideoContent, GeneratedImageContent, ToolUseContent, ToolResultContent, ThinkingContent, RedactedThinkingContent, } from './content.js';
5
+ export { isTextContent, isImageContent, isDocumentContent, isAudioContent, isVideoContent, isGeneratedImageContent, isToolUseContent, isToolResultContent, isThinkingContent, isRedactedThinkingContent, isMediaContent, } from './content.js';
6
+ export type { MessageMetadata, NormalizedMessage, } from './message.js';
7
+ export { textMessage, extractText, hasMedia, hasToolUse, } from './message.js';
8
+ export type { ToolParameter, ToolDefinition, ToolCall, ToolResult, ToolResultContentBlock, ToolContext, ParsedToolCalls, } from './tools.js';
9
+ export type { GenerationConfig, StopSequenceStrategy, StopSequenceConfig, RequestOptions, NormalizedRequest, ToolMode, } from './request.js';
10
+ export type { StopReason, BasicUsage, DetailedUsage, CostBreakdown, StopInfo, ModelInfo, TimingInfo, CacheInfo, ResponseDetails, RawAccess, NormalizedResponse, AbortedResponse, } from './response.js';
11
+ export { isAbortedResponse } from './response.js';
12
+ export type { ProviderQuirks, MediaCapabilities, ProviderCapabilities, ModelPricing, ModelDefinition, ModelRegistry, ModelFilter, ProviderAdapter, ProviderRequest, ProviderRequestOptions, ProviderResponse, StreamCallbacks, } from './provider.js';
13
+ export type { StreamState, StreamOptions, CompleteOptions, OnChunkCallback, OnContentBlockCallback, OnToolCallsCallback, OnPreToolContentCallback, OnUsageCallback, OnBlockCallback, OnRequestCallback, OnResponseCallback, BlockEvent, BlockDelta, } from './streaming.js';
14
+ export type { TokensEvent, StreamBlockEvent, ToolCallsEvent, UsageEvent, CompleteEvent, ErrorEvent, AbortedEvent, StreamEvent, YieldingStream, YieldingStreamOptions, } from './yielding-stream.js';
15
+ export { isTokensEvent, isToolCallsEvent, isCompleteEvent, isErrorEvent, isAbortedEvent, isTerminalEvent, } from './yielding-stream.js';
16
+ export type { MembraneErrorType, ErrorInfo, } from './errors.js';
17
+ export { MembraneError, serializeError, rateLimitError, contextLengthError, invalidRequestError, authError, serverError, networkError, timeoutError, abortError, safetyError, unsupportedError, classifyError, } from './errors.js';
18
+ export type { RetryConfig, MediaConfig, MembraneHooks, MembraneLogger, MembraneConfig, } from './config.js';
19
+ export { DEFAULT_RETRY_CONFIG, DEFAULT_MEDIA_CONFIG, } from './config.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Type exports for membrane
3
+ */
4
+ export { isTextContent, isImageContent, isDocumentContent, isAudioContent, isVideoContent, isGeneratedImageContent, isToolUseContent, isToolResultContent, isThinkingContent, isRedactedThinkingContent, isMediaContent, } from './content.js';
5
+ export { textMessage, extractText, hasMedia, hasToolUse, } from './message.js';
6
+ export { isAbortedResponse } from './response.js';
7
+ export { isTokensEvent, isToolCallsEvent, isCompleteEvent, isErrorEvent, isAbortedEvent, isTerminalEvent, } from './yielding-stream.js';
8
+ export { MembraneError, serializeError, rateLimitError, contextLengthError, invalidRequestError, authError, serverError, networkError, timeoutError, abortError, safetyError, unsupportedError, classifyError, } from './errors.js';
9
+ export { DEFAULT_RETRY_CONFIG, DEFAULT_MEDIA_CONFIG, } from './config.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqBH,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,cAAc,GACf,MAAM,cAAc,CAAC;AAQtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,cAAc,CAAC;AAuCtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAiDlD,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,aAAa,GACd,MAAM,aAAa,CAAC;AAWrB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Normalized message types
3
+ */
4
+ import type { ContentBlock, CacheControl } from './content.js';
5
+ export type { CacheControl } from './content.js';
6
+ export interface MessageMetadata {
7
+ /** Original timestamp */
8
+ timestamp?: Date;
9
+ /** Source ID from originating system (Discord message ID, UI message ID, etc.) */
10
+ sourceId?: string;
11
+ /** Cache control for this message */
12
+ cacheControl?: CacheControl;
13
+ /** Stream routing (for VEIL/connectome compatibility) */
14
+ streamId?: string;
15
+ /** Additional metadata (pass-through) */
16
+ [key: string]: unknown;
17
+ }
18
+ /**
19
+ * A message from a single participant.
20
+ * This is the core abstraction - no artificial "user" vs "assistant" roles.
21
+ */
22
+ export interface NormalizedMessage {
23
+ /** Participant name: "Alice", "Bob", "Claude", etc. */
24
+ participant: string;
25
+ /** Content blocks */
26
+ content: ContentBlock[];
27
+ /** Message metadata */
28
+ metadata?: MessageMetadata;
29
+ /**
30
+ * Cache breakpoint for Anthropic prompt caching.
31
+ * When true, content up to and including this message will have cache_control applied.
32
+ * Multiple messages can have cacheBreakpoint for multiple cache points.
33
+ */
34
+ cacheBreakpoint?: boolean;
35
+ }
36
+ /**
37
+ * Create a simple text message
38
+ */
39
+ export declare function textMessage(participant: string, text: string, metadata?: MessageMetadata): NormalizedMessage;
40
+ /**
41
+ * Extract all text content from a message
42
+ */
43
+ export declare function extractText(message: NormalizedMessage): string;
44
+ /**
45
+ * Check if message has any media content
46
+ */
47
+ export declare function hasMedia(message: NormalizedMessage): boolean;
48
+ /**
49
+ * Check if message has tool use
50
+ */
51
+ export declare function hasToolUse(message: NormalizedMessage): boolean;
52
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG/D,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAMjD,MAAM,WAAW,eAAe;IAC9B,yBAAyB;IACzB,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qCAAqC;IACrC,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yCAAyC;IACzC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAEpB,qBAAqB;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IAExB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAM5G;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAK9D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAI5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE9D"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Normalized message types
3
+ */
4
+ // ============================================================================
5
+ // Helpers
6
+ // ============================================================================
7
+ /**
8
+ * Create a simple text message
9
+ */
10
+ export function textMessage(participant, text, metadata) {
11
+ return {
12
+ participant,
13
+ content: [{ type: 'text', text }],
14
+ metadata,
15
+ };
16
+ }
17
+ /**
18
+ * Extract all text content from a message
19
+ */
20
+ export function extractText(message) {
21
+ return message.content
22
+ .filter((block) => block.type === 'text')
23
+ .map((block) => block.text)
24
+ .join('\n');
25
+ }
26
+ /**
27
+ * Check if message has any media content
28
+ */
29
+ export function hasMedia(message) {
30
+ return message.content.some((block) => ['image', 'document', 'audio', 'video'].includes(block.type));
31
+ }
32
+ /**
33
+ * Check if message has tool use
34
+ */
35
+ export function hasToolUse(message) {
36
+ return message.content.some((block) => block.type === 'tool_use');
37
+ }
38
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsDH,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,IAAY,EAAE,QAA0B;IACvF,OAAO;QACL,WAAW;QACX,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAA0B;IACpD,OAAO,OAAO,CAAC,OAAO;SACnB,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;SACjF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAA0B;IACjD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACpC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAA0B;IACnD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;AACpE,CAAC"}