@lobu/connector-sdk 11.1.0 → 11.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.
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Auth-aware HTTP client for connectors.
3
+ *
4
+ * Small fetch-based helper that centralizes the boilerplate every API-backed
5
+ * connector hand-rolls: `Authorization: Bearer` headers, `withHttpRetry`
6
+ * wrapping (exponential backoff with jitter), bounded honoring of 429
7
+ * `Retry-After`, and descriptive errors that include the status code and a
8
+ * truncated response body.
9
+ */
10
+ /** Error thrown for non-2xx responses. Message: `<prefix> <METHOD> <url> failed (<status>): <truncated body>`. */
11
+ export declare class HttpStatusError extends Error {
12
+ readonly status: number;
13
+ readonly statusText: string;
14
+ readonly url: string;
15
+ readonly method: string;
16
+ /** Response body, truncated to the first 500 characters. */
17
+ readonly bodyText: string;
18
+ constructor(params: {
19
+ prefix: string;
20
+ method: string;
21
+ url: string;
22
+ status: number;
23
+ statusText: string;
24
+ bodyText: string;
25
+ });
26
+ }
27
+ interface HttpClientRetryOptions {
28
+ operation?: string;
29
+ context?: Record<string, any>;
30
+ onRetry?: (error: Error, attempt: number) => void;
31
+ }
32
+ export interface CreateHttpClientOptions {
33
+ /**
34
+ * Called once per request; a truthy return value is sent as
35
+ * `Authorization: Bearer <token>` (unless the request already sets one).
36
+ */
37
+ getAccessToken?: () => string | null | undefined | Promise<string | null | undefined>;
38
+ /** Static headers applied to every request (per-request headers win). */
39
+ headers?: Record<string, string>;
40
+ /** `withHttpRetry` options, or `false` to disable retrying entirely. */
41
+ retry?: HttpClientRetryOptions | false;
42
+ /** Prefix for error messages, e.g. `'Spotify API'`. Default `'HTTP'`. */
43
+ errorPrefix?: string;
44
+ /** Upper bound when honoring a 429 `Retry-After` header. Default 30s. */
45
+ maxRetryAfterMs?: number;
46
+ }
47
+ export interface HttpClient {
48
+ /**
49
+ * Fetch with auth + retry, resolving with the raw `Response` for non-2xx
50
+ * statuses so callers can keep their own `response.ok` handling. Transient
51
+ * statuses (429/5xx) still throw to drive the retry loop, so they surface
52
+ * as a thrown `HttpStatusError` once retries are exhausted.
53
+ */
54
+ raw(url: string, init?: RequestInit): Promise<Response>;
55
+ /** Fetch with auth + retry; throws `HttpStatusError` on any non-2xx status. */
56
+ request(url: string, init?: RequestInit): Promise<Response>;
57
+ /** `request()` + parse the response body as JSON (any method via `init`). */
58
+ json<T>(url: string, init?: RequestInit): Promise<T>;
59
+ /** GET returning parsed JSON. */
60
+ get<T>(url: string, init?: RequestInit): Promise<T>;
61
+ /** POST `body` as JSON (unless a Content-Type is supplied) returning parsed JSON. */
62
+ post<T>(url: string, body?: unknown, init?: RequestInit): Promise<T>;
63
+ }
64
+ export declare function createHttpClient(options?: CreateHttpClientOptions): HttpClient;
65
+ export {};
66
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAeH,kHAAkH;AAClH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,MAAM,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB;CAWF;AAED,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACtF,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,wEAAwE;IACxE,KAAK,CAAC,EAAE,sBAAsB,GAAG,KAAK,CAAC;IACvC,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,+EAA+E;IAC/E,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5D,6EAA6E;IAC7E,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrD,iCAAiC;IACjC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACpD,qFAAqF;IACrF,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACtE;AAYD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,UAAU,CA6FlF"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Auth-aware HTTP client for connectors.
3
+ *
4
+ * Small fetch-based helper that centralizes the boilerplate every API-backed
5
+ * connector hand-rolls: `Authorization: Bearer` headers, `withHttpRetry`
6
+ * wrapping (exponential backoff with jitter), bounded honoring of 429
7
+ * `Retry-After`, and descriptive errors that include the status code and a
8
+ * truncated response body.
9
+ */
10
+ import { withHttpRetry } from './retry.js';
11
+ import { sleep } from './sleep.js';
12
+ /**
13
+ * Statuses treated as transient: the client throws an `HttpStatusError` for
14
+ * these so `withHttpRetry` can retry them (its keyword classifier recognizes
15
+ * the status code embedded in the message).
16
+ */
17
+ const TRANSIENT_STATUSES = new Set([429, 500, 502, 503, 504]);
18
+ const BODY_PREVIEW_CHARS = 500;
19
+ const DEFAULT_MAX_RETRY_AFTER_MS = 30_000;
20
+ /** Error thrown for non-2xx responses. Message: `<prefix> <METHOD> <url> failed (<status>): <truncated body>`. */
21
+ export class HttpStatusError extends Error {
22
+ status;
23
+ statusText;
24
+ url;
25
+ method;
26
+ /** Response body, truncated to the first 500 characters. */
27
+ bodyText;
28
+ constructor(params) {
29
+ super(`${params.prefix} ${params.method} ${params.url} failed (${params.status}): ${params.bodyText}`);
30
+ this.name = 'HttpStatusError';
31
+ this.status = params.status;
32
+ this.statusText = params.statusText;
33
+ this.url = params.url;
34
+ this.method = params.method;
35
+ this.bodyText = params.bodyText;
36
+ }
37
+ }
38
+ function parseRetryAfterMs(value) {
39
+ if (!value)
40
+ return null;
41
+ const seconds = Number(value);
42
+ if (Number.isFinite(seconds)) {
43
+ return seconds > 0 ? seconds * 1000 : null;
44
+ }
45
+ const deltaMs = Date.parse(value) - Date.now();
46
+ return Number.isFinite(deltaMs) && deltaMs > 0 ? deltaMs : null;
47
+ }
48
+ export function createHttpClient(options = {}) {
49
+ const errorPrefix = options.errorPrefix ?? 'HTTP';
50
+ const maxRetryAfterMs = options.maxRetryAfterMs ?? DEFAULT_MAX_RETRY_AFTER_MS;
51
+ const retryEnabled = options.retry !== false;
52
+ const retryOptions = options.retry === false ? undefined : options.retry;
53
+ async function buildHeaders(init) {
54
+ const headers = new Headers(options.headers);
55
+ new Headers(init?.headers).forEach((value, key) => {
56
+ headers.set(key, value);
57
+ });
58
+ if (options.getAccessToken && !headers.has('authorization')) {
59
+ const token = await options.getAccessToken();
60
+ if (token)
61
+ headers.set('Authorization', `Bearer ${token}`);
62
+ }
63
+ return headers;
64
+ }
65
+ async function statusError(response, method, url) {
66
+ let bodyText = '';
67
+ try {
68
+ bodyText = await response.text();
69
+ }
70
+ catch {
71
+ /* body unavailable — keep the status-only message */
72
+ }
73
+ if (bodyText.length > BODY_PREVIEW_CHARS) {
74
+ bodyText = `${bodyText.slice(0, BODY_PREVIEW_CHARS)}…`;
75
+ }
76
+ return new HttpStatusError({
77
+ prefix: errorPrefix,
78
+ method,
79
+ url,
80
+ status: response.status,
81
+ statusText: response.statusText,
82
+ bodyText,
83
+ });
84
+ }
85
+ async function attempt(url, init, throwOnAnyError) {
86
+ const method = (init?.method ?? 'GET').toUpperCase();
87
+ const headers = await buildHeaders(init);
88
+ const response = await fetch(url, { ...init, headers });
89
+ if (response.ok)
90
+ return response;
91
+ if (TRANSIENT_STATUSES.has(response.status)) {
92
+ const error = await statusError(response, method, url);
93
+ if (response.status === 429 && retryEnabled) {
94
+ const retryAfterMs = parseRetryAfterMs(response.headers.get('Retry-After'));
95
+ if (retryAfterMs)
96
+ await sleep(Math.min(retryAfterMs, maxRetryAfterMs));
97
+ }
98
+ throw error;
99
+ }
100
+ if (throwOnAnyError)
101
+ throw await statusError(response, method, url);
102
+ return response;
103
+ }
104
+ function withRetry(fn) {
105
+ if (!retryEnabled)
106
+ return fn();
107
+ return withHttpRetry(fn, { operation: `${errorPrefix} request`, ...retryOptions });
108
+ }
109
+ const raw = (url, init) => withRetry(() => attempt(url, init, false));
110
+ const request = (url, init) => withRetry(() => attempt(url, init, true));
111
+ const json = async (url, init) => {
112
+ const response = await request(url, init);
113
+ return (await response.json());
114
+ };
115
+ const get = (url, init) => json(url, { ...init, method: 'GET' });
116
+ const post = (url, body, init = {}) => {
117
+ const headers = new Headers(init.headers);
118
+ if (!headers.has('content-type'))
119
+ headers.set('Content-Type', 'application/json');
120
+ return json(url, {
121
+ ...init,
122
+ method: 'POST',
123
+ headers,
124
+ body: body === undefined ? init.body : JSON.stringify(body),
125
+ });
126
+ };
127
+ return { raw, request, json, get, post };
128
+ }
129
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,7 +10,11 @@ export { IDENTITY } from './connector-types.js';
10
10
  import { AssuranceLevel, assuranceMeets, AutoCreateWhenRule, CLAIM_COLLISION_SEMANTIC_TYPE, ClaimCollisionPayload, ConnectorFact, ConnectorIdentityCapability, DerivedFromProvenance, DerivedRelationshipMetadata, FactEventMetadata, IDENTITY_FACT_SEMANTIC_TYPE, RelationshipTypeIdentityMetadata } from './identity-types.js';
11
11
  export { AssuranceLevel, assuranceMeets, AutoCreateWhenRule, CLAIM_COLLISION_SEMANTIC_TYPE, ClaimCollisionPayload, ConnectorFact, ConnectorIdentityCapability, DerivedFromProvenance, DerivedRelationshipMetadata, FactEventMetadata, IDENTITY_FACT_SEMANTIC_TYPE, RelationshipTypeIdentityMetadata, };
12
12
  export { normalizeAuthUserId, normalizeEmail, normalizeGithubLogin, normalizeGithubRepoFullName, normalizeGoogleContactId, normalizeNumericId, normalizeIdentifier, normalizePhone, normalizeSlackUserId, normalizeWaJid, } from './identity-normalize.js';
13
+ export type { CreateHttpClientOptions, HttpClient } from './http-client.js';
14
+ export { createHttpClient, HttpStatusError } from './http-client.js';
13
15
  export { sdkLogger, sdkLogger as logger } from './logger.js';
16
+ export type { CursorPage, OffsetPage, PaginateByCursorOptions, PaginateByOffsetOptions, } from './pagination.js';
17
+ export { paginateByCursor, paginateByOffset } from './pagination.js';
14
18
  export { withHttpRetry } from './retry.js';
15
19
  export { calculateEngagementScore } from './scoring.js';
16
20
  export type { WatcherTimeGranularity } from './watcher-time.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -18,8 +18,10 @@ export { IDENTITY } from './connector-types.js';
18
18
  import { AssuranceLevel, assuranceMeets, AutoCreateWhenRule, CLAIM_COLLISION_SEMANTIC_TYPE, ClaimCollisionPayload, ConnectorFact, ConnectorIdentityCapability, DerivedFromProvenance, DerivedRelationshipMetadata, FactEventMetadata, IDENTITY_FACT_SEMANTIC_TYPE, RelationshipTypeIdentityMetadata, } from './identity-types.js';
19
19
  export { AssuranceLevel, assuranceMeets, AutoCreateWhenRule, CLAIM_COLLISION_SEMANTIC_TYPE, ClaimCollisionPayload, ConnectorFact, ConnectorIdentityCapability, DerivedFromProvenance, DerivedRelationshipMetadata, FactEventMetadata, IDENTITY_FACT_SEMANTIC_TYPE, RelationshipTypeIdentityMetadata, };
20
20
  export { normalizeAuthUserId, normalizeEmail, normalizeGithubLogin, normalizeGithubRepoFullName, normalizeGoogleContactId, normalizeNumericId, normalizeIdentifier, normalizePhone, normalizeSlackUserId, normalizeWaJid, } from './identity-normalize.js';
21
+ export { createHttpClient, HttpStatusError } from './http-client.js';
21
22
  // Logger
22
23
  export { sdkLogger, sdkLogger as logger } from './logger.js';
24
+ export { paginateByCursor, paginateByOffset } from './pagination.js';
23
25
  // Retry
24
26
  export { withHttpRetry } from './retry.js';
25
27
  // Scoring
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,gFAAgF;AAIhF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,0CAA0C;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA6CxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,sEAAsE;AACtE,2EAA2E;AAC3E,iEAAiE;AACjE,wEAAwE;AACxE,oEAAoE;AACpE,wEAAwE;AACxE,yEAAyE;AACzE,+CAA+C;AAC/C,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,2BAA2B,EAC3B,gCAAgC,GACjC,CAAC;AACF,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7D,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,UAAU;AACV,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,gCAAgC,EAChC,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,+BAA+B,EAC/B,mCAAmC,EACnC,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EACL,mBAAmB,EACnB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EACL,qBAAqB,EACrB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAa/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,gFAAgF;AAIhF,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC9C,0CAA0C;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA6CxD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,sEAAsE;AACtE,2EAA2E;AAC3E,iEAAiE;AACjE,wEAAwE;AACxE,oEAAoE;AACpE,wEAAwE;AACxE,yEAAyE;AACzE,+CAA+C;AAC/C,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,aAAa,EACb,2BAA2B,EAC3B,qBAAqB,EACrB,2BAA2B,EAC3B,iBAAiB,EACjB,2BAA2B,EAC3B,gCAAgC,GACjC,CAAC;AACF,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,cAAc,GACf,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrE,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,SAAS,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAQ7D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,UAAU;AACV,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,gCAAgC,EAChC,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,+BAA+B,EAC/B,mCAAmC,EACnC,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAO3B,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EACL,mBAAmB,EACnB,aAAa,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EACL,qBAAqB,EACrB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAa/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAqB9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pagination generators for connectors.
3
+ *
4
+ * Async generators that capture the two hand-rolled pagination loops most
5
+ * API connectors repeat: offset/limit paging and opaque-cursor paging. Each
6
+ * yields one batch of items per page (including the final, possibly empty,
7
+ * batch) so callers keep full control over transformation, emission, and
8
+ * early exit (`break` stops further fetches).
9
+ */
10
+ export interface OffsetPage<T> {
11
+ items: T[];
12
+ /** Whether another page should be fetched (e.g. `!!data.next`). */
13
+ hasMore: boolean;
14
+ }
15
+ export interface PaginateByOffsetOptions {
16
+ /** Items per page; the offset advances by this amount after each page. */
17
+ pageSize: number;
18
+ /** Maximum number of pages to fetch. Default: unbounded. */
19
+ maxPages?: number;
20
+ /** Offset for the first page. Default 0. */
21
+ startOffset?: number;
22
+ /** Optional politeness delay before each page after the first. */
23
+ delayMs?: number;
24
+ }
25
+ /** Yields item batches from an offset/limit-paginated endpoint. */
26
+ export declare function paginateByOffset<T>(fetchPage: (offset: number, pageSize: number) => Promise<OffsetPage<T>>, options: PaginateByOffsetOptions): AsyncGenerator<T[], void, void>;
27
+ export interface CursorPage<T, C = string> {
28
+ items: T[];
29
+ /** Cursor for the next page; `null`/`undefined` stops pagination. */
30
+ nextCursor: C | null | undefined;
31
+ }
32
+ export interface PaginateByCursorOptions<C = string> {
33
+ /** Maximum number of pages to fetch. Default: unbounded. */
34
+ maxPages?: number;
35
+ /** Cursor passed to the first `fetchPage` call. Default `null`. */
36
+ initialCursor?: C | null;
37
+ /** Optional politeness delay before each page after the first. */
38
+ delayMs?: number;
39
+ }
40
+ /** Yields item batches from a cursor/token-paginated endpoint. */
41
+ export declare function paginateByCursor<T, C = string>(fetchPage: (cursor: C | null) => Promise<CursorPage<T, C>>, options?: PaginateByCursorOptions<C>): AsyncGenerator<T[], void, void>;
42
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,mEAAmE;AACnE,wBAAuB,gBAAgB,CAAC,CAAC,EACvC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACvE,OAAO,EAAE,uBAAuB,GAC/B,cAAc,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAWjC;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;IACvC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,qEAAqE;IACrE,UAAU,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB,CAAC,CAAC,GAAG,MAAM;IACjD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;IACzB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,kEAAkE;AAClE,wBAAuB,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,EACnD,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1D,OAAO,GAAE,uBAAuB,CAAC,CAAC,CAAM,GACvC,cAAc,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAWjC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Pagination generators for connectors.
3
+ *
4
+ * Async generators that capture the two hand-rolled pagination loops most
5
+ * API connectors repeat: offset/limit paging and opaque-cursor paging. Each
6
+ * yields one batch of items per page (including the final, possibly empty,
7
+ * batch) so callers keep full control over transformation, emission, and
8
+ * early exit (`break` stops further fetches).
9
+ */
10
+ import { sleep } from './sleep.js';
11
+ /** Yields item batches from an offset/limit-paginated endpoint. */
12
+ export async function* paginateByOffset(fetchPage, options) {
13
+ const maxPages = options.maxPages ?? Number.POSITIVE_INFINITY;
14
+ let offset = options.startOffset ?? 0;
15
+ for (let page = 0; page < maxPages; page++) {
16
+ if (page > 0 && options.delayMs)
17
+ await sleep(options.delayMs);
18
+ const { items, hasMore } = await fetchPage(offset, options.pageSize);
19
+ yield items;
20
+ if (!hasMore)
21
+ return;
22
+ offset += options.pageSize;
23
+ }
24
+ }
25
+ /** Yields item batches from a cursor/token-paginated endpoint. */
26
+ export async function* paginateByCursor(fetchPage, options = {}) {
27
+ const maxPages = options.maxPages ?? Number.POSITIVE_INFINITY;
28
+ let cursor = options.initialCursor ?? null;
29
+ for (let page = 0; page < maxPages; page++) {
30
+ if (page > 0 && options.delayMs)
31
+ await sleep(options.delayMs);
32
+ const { items, nextCursor } = await fetchPage(cursor);
33
+ yield items;
34
+ if (nextCursor === null || nextCursor === undefined)
35
+ return;
36
+ cursor = nextCursor;
37
+ }
38
+ }
39
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAmBnC,mEAAmE;AACnE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,gBAAgB,CACrC,SAAuE,EACvE,OAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC;IAC9D,IAAI,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;IAEtC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrE,MAAM,KAAK,CAAC;QACZ,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC;IAC7B,CAAC;AACH,CAAC;AAiBD,kEAAkE;AAClE,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,gBAAgB,CACrC,SAA0D,EAC1D,UAAsC,EAAE;IAExC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC;IAC9D,IAAI,MAAM,GAAa,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IAErD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,IAAI,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;QACZ,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO;QAC5D,MAAM,GAAG,UAAU,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function sleep(ms: number): Promise<void>;
2
+ //# sourceMappingURL=sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../src/sleep.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
package/dist/sleep.js ADDED
@@ -0,0 +1,4 @@
1
+ export function sleep(ms) {
2
+ return new Promise((resolve) => setTimeout(resolve, ms));
3
+ }
4
+ //# sourceMappingURL=sleep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.js","sourceRoot":"","sources":["../src/sleep.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobu/connector-sdk",
3
- "version": "11.1.0",
3
+ "version": "11.3.0",
4
4
  "description": "Lobu memory SDK — build pluggable connectors for Lobu memory",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -48,7 +48,7 @@
48
48
  "clean": "rm -rf dist"
49
49
  },
50
50
  "dependencies": {
51
- "@lobu/core": "11.1.0",
51
+ "@lobu/core": "11.3.0",
52
52
  "@sinclair/typebox": "^0.34.41",
53
53
  "isomorphic-git": "^1.34.0",
54
54
  "ky": "^1.14.0",