@signa-so/sdk 0.2.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 (98) hide show
  1. package/README.md +180 -0
  2. package/dist/_internals/fetch-with-retry.d.ts +31 -0
  3. package/dist/_internals/fetch-with-retry.d.ts.map +1 -0
  4. package/dist/_internals/fetch-with-retry.js +113 -0
  5. package/dist/_internals/fetch-with-retry.js.map +1 -0
  6. package/dist/_internals/query-string.d.ts +10 -0
  7. package/dist/_internals/query-string.d.ts.map +1 -0
  8. package/dist/_internals/query-string.js +34 -0
  9. package/dist/_internals/query-string.js.map +1 -0
  10. package/dist/_internals/retry.d.ts +7 -0
  11. package/dist/_internals/retry.d.ts.map +1 -0
  12. package/dist/_internals/retry.js +23 -0
  13. package/dist/_internals/retry.js.map +1 -0
  14. package/dist/client.d.ts +68 -0
  15. package/dist/client.d.ts.map +1 -0
  16. package/dist/client.js +104 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/errors.d.ts +66 -0
  19. package/dist/errors.d.ts.map +1 -0
  20. package/dist/errors.js +141 -0
  21. package/dist/errors.js.map +1 -0
  22. package/dist/generated/api-types.d.ts +6219 -0
  23. package/dist/generated/api-types.d.ts.map +1 -0
  24. package/dist/generated/api-types.js +6 -0
  25. package/dist/generated/api-types.js.map +1 -0
  26. package/dist/index.d.ts +6 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +7 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/pagination.d.ts +60 -0
  31. package/dist/pagination.d.ts.map +1 -0
  32. package/dist/pagination.js +98 -0
  33. package/dist/pagination.js.map +1 -0
  34. package/dist/resource.d.ts +27 -0
  35. package/dist/resource.d.ts.map +1 -0
  36. package/dist/resource.js +80 -0
  37. package/dist/resource.js.map +1 -0
  38. package/dist/resources/alerts.d.ts +20 -0
  39. package/dist/resources/alerts.d.ts.map +1 -0
  40. package/dist/resources/alerts.js +30 -0
  41. package/dist/resources/alerts.js.map +1 -0
  42. package/dist/resources/attorneys.d.ts +39 -0
  43. package/dist/resources/attorneys.d.ts.map +1 -0
  44. package/dist/resources/attorneys.js +57 -0
  45. package/dist/resources/attorneys.js.map +1 -0
  46. package/dist/resources/events.d.ts +10 -0
  47. package/dist/resources/events.d.ts.map +1 -0
  48. package/dist/resources/events.js +14 -0
  49. package/dist/resources/events.js.map +1 -0
  50. package/dist/resources/firms.d.ts +40 -0
  51. package/dist/resources/firms.d.ts.map +1 -0
  52. package/dist/resources/firms.js +61 -0
  53. package/dist/resources/firms.js.map +1 -0
  54. package/dist/resources/owners.d.ts +39 -0
  55. package/dist/resources/owners.d.ts.map +1 -0
  56. package/dist/resources/owners.js +60 -0
  57. package/dist/resources/owners.js.map +1 -0
  58. package/dist/resources/platform.d.ts +29 -0
  59. package/dist/resources/platform.d.ts.map +1 -0
  60. package/dist/resources/platform.js +46 -0
  61. package/dist/resources/platform.js.map +1 -0
  62. package/dist/resources/portfolios.d.ts +32 -0
  63. package/dist/resources/portfolios.d.ts.map +1 -0
  64. package/dist/resources/portfolios.js +49 -0
  65. package/dist/resources/portfolios.js.map +1 -0
  66. package/dist/resources/proceedings.d.ts +23 -0
  67. package/dist/resources/proceedings.d.ts.map +1 -0
  68. package/dist/resources/proceedings.js +30 -0
  69. package/dist/resources/proceedings.js.map +1 -0
  70. package/dist/resources/references.d.ts +106 -0
  71. package/dist/resources/references.d.ts.map +1 -0
  72. package/dist/resources/references.js +136 -0
  73. package/dist/resources/references.js.map +1 -0
  74. package/dist/resources/saved-searches.d.ts +22 -0
  75. package/dist/resources/saved-searches.d.ts.map +1 -0
  76. package/dist/resources/saved-searches.js +35 -0
  77. package/dist/resources/saved-searches.js.map +1 -0
  78. package/dist/resources/search.d.ts +27 -0
  79. package/dist/resources/search.d.ts.map +1 -0
  80. package/dist/resources/search.js +36 -0
  81. package/dist/resources/search.js.map +1 -0
  82. package/dist/resources/trademarks.d.ts +80 -0
  83. package/dist/resources/trademarks.d.ts.map +1 -0
  84. package/dist/resources/trademarks.js +117 -0
  85. package/dist/resources/trademarks.js.map +1 -0
  86. package/dist/resources/watches.d.ts +18 -0
  87. package/dist/resources/watches.d.ts.map +1 -0
  88. package/dist/resources/watches.js +31 -0
  89. package/dist/resources/watches.js.map +1 -0
  90. package/dist/types.d.ts +719 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +6 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/version.d.ts +3 -0
  95. package/dist/version.d.ts.map +1 -0
  96. package/dist/version.js +3 -0
  97. package/dist/version.js.map +1 -0
  98. package/package.json +36 -0
@@ -0,0 +1,66 @@
1
+ import type { APIErrorBody } from './types.js';
2
+ /**
3
+ * Base error for all SDK errors. Thrown for client-side issues
4
+ * (missing config, invalid arguments) — not API errors.
5
+ */
6
+ export declare class SignaError extends Error {
7
+ constructor(message: string);
8
+ }
9
+ /**
10
+ * Thrown when the API returns an error response (4xx/5xx).
11
+ * Contains the parsed error body, status, request_id, and response headers.
12
+ */
13
+ export declare class SignaAPIError extends SignaError {
14
+ readonly status: number;
15
+ readonly error: APIErrorBody;
16
+ readonly request_id: string;
17
+ readonly headers: Headers;
18
+ constructor(status: number, error: APIErrorBody, requestId: string, headers: Headers);
19
+ }
20
+ export declare class BadRequestError extends SignaAPIError {
21
+ constructor(error: APIErrorBody, requestId: string, headers: Headers);
22
+ }
23
+ export declare class AuthenticationError extends SignaAPIError {
24
+ constructor(error: APIErrorBody, requestId: string, headers: Headers);
25
+ }
26
+ export declare class PermissionError extends SignaAPIError {
27
+ constructor(error: APIErrorBody, requestId: string, headers: Headers);
28
+ }
29
+ export declare class NotFoundError extends SignaAPIError {
30
+ constructor(error: APIErrorBody, requestId: string, headers: Headers);
31
+ }
32
+ /** Thrown when the API returns 409 Conflict (e.g., duplicate name). */
33
+ export declare class ConflictError extends SignaAPIError {
34
+ constructor(error: APIErrorBody, requestId: string, headers: Headers);
35
+ }
36
+ export declare class RateLimitError extends SignaAPIError {
37
+ /** Seconds until the rate limit resets. Parsed from Retry-After header. */
38
+ readonly retry_after: number;
39
+ constructor(error: APIErrorBody, requestId: string, headers: Headers);
40
+ }
41
+ export declare class InternalServerError extends SignaAPIError {
42
+ constructor(status: number, error: APIErrorBody, requestId: string, headers: Headers);
43
+ }
44
+ /** Thrown when the network request fails (DNS, TCP, TLS). */
45
+ export declare class ConnectionError extends SignaError {
46
+ readonly cause?: Error;
47
+ constructor(message: string, cause?: Error);
48
+ }
49
+ /** Thrown when the request times out. */
50
+ export declare class TimeoutError extends SignaError {
51
+ constructor(timeoutMs: number);
52
+ }
53
+ /**
54
+ * Create the appropriate typed error from an HTTP error response.
55
+ * 5xx -> InternalServerError (carries actual status).
56
+ * Falls back to generic SignaAPIError for unmapped status codes.
57
+ */
58
+ export declare function createAPIError(status: number, body: {
59
+ error: APIErrorBody;
60
+ request_id: string;
61
+ }, headers: Headers): SignaAPIError;
62
+ /**
63
+ * Returns true if this error is retryable (connection, timeout, 429, 5xx).
64
+ */
65
+ export declare function isRetryable(error: unknown): boolean;
66
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;GAGG;AACH,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAI5B;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;gBAGxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO;CASnB;AAID,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIrE;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIrE;AAED,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIrE;AAED,qBAAa,aAAc,SAAQ,aAAa;gBAClC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIrE;AAED,uEAAuE;AACvE,qBAAa,aAAc,SAAQ,aAAa;gBAClC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIrE;AAED,qBAAa,cAAe,SAAQ,aAAa;IAC/C,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAKrE;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;CAIrF;AAED,6DAA6D;AAC7D,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,SAAkB,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAK3C;AAED,yCAAyC;AACzC,qBAAa,YAAa,SAAQ,UAAU;gBAC9B,SAAS,EAAE,MAAM;CAI9B;AAgBD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EACjD,OAAO,EAAE,OAAO,GACf,aAAa,CASf;AAgBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMnD"}
package/dist/errors.js ADDED
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Base error for all SDK errors. Thrown for client-side issues
3
+ * (missing config, invalid arguments) — not API errors.
4
+ */
5
+ export class SignaError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = 'SignaError';
9
+ }
10
+ }
11
+ /**
12
+ * Thrown when the API returns an error response (4xx/5xx).
13
+ * Contains the parsed error body, status, request_id, and response headers.
14
+ */
15
+ export class SignaAPIError extends SignaError {
16
+ status;
17
+ error;
18
+ request_id;
19
+ headers;
20
+ constructor(status, error, requestId, headers) {
21
+ super(`${status} ${error.title}: ${error.detail}`);
22
+ this.name = 'SignaAPIError';
23
+ this.status = status;
24
+ this.error = error;
25
+ this.request_id = requestId;
26
+ this.headers = headers;
27
+ }
28
+ }
29
+ // ── Typed subclasses for common status codes ────────────────────────
30
+ export class BadRequestError extends SignaAPIError {
31
+ constructor(error, requestId, headers) {
32
+ super(400, error, requestId, headers);
33
+ this.name = 'BadRequestError';
34
+ }
35
+ }
36
+ export class AuthenticationError extends SignaAPIError {
37
+ constructor(error, requestId, headers) {
38
+ super(401, error, requestId, headers);
39
+ this.name = 'AuthenticationError';
40
+ }
41
+ }
42
+ export class PermissionError extends SignaAPIError {
43
+ constructor(error, requestId, headers) {
44
+ super(403, error, requestId, headers);
45
+ this.name = 'PermissionError';
46
+ }
47
+ }
48
+ export class NotFoundError extends SignaAPIError {
49
+ constructor(error, requestId, headers) {
50
+ super(404, error, requestId, headers);
51
+ this.name = 'NotFoundError';
52
+ }
53
+ }
54
+ /** Thrown when the API returns 409 Conflict (e.g., duplicate name). */
55
+ export class ConflictError extends SignaAPIError {
56
+ constructor(error, requestId, headers) {
57
+ super(409, error, requestId, headers);
58
+ this.name = 'ConflictError';
59
+ }
60
+ }
61
+ export class RateLimitError extends SignaAPIError {
62
+ /** Seconds until the rate limit resets. Parsed from Retry-After header. */
63
+ retry_after;
64
+ constructor(error, requestId, headers) {
65
+ super(429, error, requestId, headers);
66
+ this.name = 'RateLimitError';
67
+ this.retry_after = parseRetryAfter(headers);
68
+ }
69
+ }
70
+ export class InternalServerError extends SignaAPIError {
71
+ constructor(status, error, requestId, headers) {
72
+ super(status, error, requestId, headers);
73
+ this.name = 'InternalServerError';
74
+ }
75
+ }
76
+ /** Thrown when the network request fails (DNS, TCP, TLS). */
77
+ export class ConnectionError extends SignaError {
78
+ cause;
79
+ constructor(message, cause) {
80
+ super(message);
81
+ this.name = 'ConnectionError';
82
+ this.cause = cause;
83
+ }
84
+ }
85
+ /** Thrown when the request times out. */
86
+ export class TimeoutError extends SignaError {
87
+ constructor(timeoutMs) {
88
+ super(`Request timed out after ${timeoutMs}ms`);
89
+ this.name = 'TimeoutError';
90
+ }
91
+ }
92
+ // ── Factory: maps HTTP status to typed error ────────────────────────
93
+ const STATUS_ERROR_MAP = {
94
+ 400: BadRequestError,
95
+ 401: AuthenticationError,
96
+ 403: PermissionError,
97
+ 404: NotFoundError,
98
+ 409: ConflictError,
99
+ 429: RateLimitError,
100
+ };
101
+ /**
102
+ * Create the appropriate typed error from an HTTP error response.
103
+ * 5xx -> InternalServerError (carries actual status).
104
+ * Falls back to generic SignaAPIError for unmapped status codes.
105
+ */
106
+ export function createAPIError(status, body, headers) {
107
+ const ErrorClass = STATUS_ERROR_MAP[status];
108
+ if (ErrorClass) {
109
+ return new ErrorClass(body.error, body.request_id, headers);
110
+ }
111
+ if (status >= 500) {
112
+ return new InternalServerError(status, body.error, body.request_id, headers);
113
+ }
114
+ return new SignaAPIError(status, body.error, body.request_id, headers);
115
+ }
116
+ // ── Helpers ──────────────────────────────────────────────────────────
117
+ function parseRetryAfter(headers) {
118
+ const value = headers.get('retry-after');
119
+ if (!value)
120
+ return 60;
121
+ const seconds = Number(value);
122
+ if (!Number.isNaN(seconds))
123
+ return seconds;
124
+ const date = new Date(value);
125
+ if (!Number.isNaN(date.getTime())) {
126
+ return Math.max(0, Math.ceil((date.getTime() - Date.now()) / 1000));
127
+ }
128
+ return 60;
129
+ }
130
+ /**
131
+ * Returns true if this error is retryable (connection, timeout, 429, 5xx).
132
+ */
133
+ export function isRetryable(error) {
134
+ if (error instanceof ConnectionError || error instanceof TimeoutError)
135
+ return true;
136
+ if (error instanceof SignaAPIError) {
137
+ return error.status === 429 || error.status >= 500;
138
+ }
139
+ return false;
140
+ }
141
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}