@ariestools/aries-datalake-client 0.1.16 → 0.1.18
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/dist/browser/AuthToken.d.ts +6 -2
- package/dist/browser/AuthToken.d.ts.map +1 -1
- package/dist/browser/DatalakeClient.d.ts +3 -1
- package/dist/browser/DatalakeClient.d.ts.map +1 -1
- package/dist/browser/PayloadsClient.d.ts +13 -5
- package/dist/browser/PayloadsClient.d.ts.map +1 -1
- package/dist/browser/RestDatalakeClient.d.ts +12 -4
- package/dist/browser/RestDatalakeClient.d.ts.map +1 -1
- package/dist/browser/browser.mjs +9 -5
- package/dist/browser/browser.mjs.map +2 -2
- package/dist/node/AuthToken.d.ts +6 -2
- package/dist/node/AuthToken.d.ts.map +1 -1
- package/dist/node/DatalakeClient.d.ts +3 -1
- package/dist/node/DatalakeClient.d.ts.map +1 -1
- package/dist/node/PayloadsClient.d.ts +13 -5
- package/dist/node/PayloadsClient.d.ts.map +1 -1
- package/dist/node/RestDatalakeClient.d.ts +12 -4
- package/dist/node/RestDatalakeClient.d.ts.map +1 -1
- package/dist/node/createDatalakeClient.d.ts +3 -1
- package/dist/node/createDatalakeClient.d.ts.map +1 -1
- package/dist/node/credentials.d.ts +18 -6
- package/dist/node/credentials.d.ts.map +1 -1
- package/dist/node/index.mjs +9 -5
- package/dist/node/index.mjs.map +2 -2
- package/package.json +11 -11
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export interface AuthTokenRequest {
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
Exact JWT audience required by the target service or datalake.
|
|
4
|
+
*/
|
|
3
5
|
audience: string;
|
|
4
6
|
}
|
|
5
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
Invoked for every request so callers can obtain a fresh wallet JWT.
|
|
9
|
+
*/
|
|
6
10
|
export type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>;
|
|
7
11
|
export type AuthTokenSource = AuthTokenSupplier | string;
|
|
8
12
|
export declare function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthToken.d.ts","sourceRoot":"","sources":["../../src/AuthToken.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B
|
|
1
|
+
{"version":3,"file":"AuthToken.d.ts","sourceRoot":"","sources":["../../src/AuthToken.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B;;MAEE;IACF,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;EAEE;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAE9E,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAAA;AAExD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjG"}
|
|
@@ -26,7 +26,9 @@ export interface RevokeRequest {
|
|
|
26
26
|
export interface TokenRequest {
|
|
27
27
|
datalakeId: string;
|
|
28
28
|
role: DatalakeRole;
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
Lifetime in seconds. Capped server-side. Defaults to 1 hour.
|
|
31
|
+
*/
|
|
30
32
|
ttlSeconds?: number;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatalakeClient.d.ts","sourceRoot":"","sources":["../../src/DatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,yCAAyC,CAAA;AAEhD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,YAAY,CAAA;IAClB
|
|
1
|
+
{"version":3,"file":"DatalakeClient.d.ts","sourceRoot":"","sources":["../../src/DatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,yCAAyC,CAAA;AAEhD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,YAAY,CAAA;IAClB;;MAEE;IACF,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACvD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACzD,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACrC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACxD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC5D"}
|
|
@@ -43,20 +43,28 @@ export interface PayloadsClient {
|
|
|
43
43
|
*/
|
|
44
44
|
export type PayloadsAuthTokenSource = AuthTokenSource;
|
|
45
45
|
export interface RestPayloadsClientOptions {
|
|
46
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
Static bearer token, or async factory minted per-request.
|
|
48
|
+
*/
|
|
47
49
|
authToken: PayloadsAuthTokenSource;
|
|
48
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
Data-plane base URL without trailing slash.
|
|
52
|
+
*/
|
|
49
53
|
baseUrl: string;
|
|
50
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
Datalake id; appended to `/v1/datalakes/:id/...`.
|
|
56
|
+
*/
|
|
51
57
|
datalakeId: string;
|
|
52
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
Optional `fetch` override; defaults to global `fetch`.
|
|
60
|
+
*/
|
|
53
61
|
fetchImpl?: typeof fetch;
|
|
54
62
|
}
|
|
55
63
|
export declare class RestPayloadsClient implements PayloadsClient {
|
|
56
64
|
private readonly authToken;
|
|
57
65
|
private readonly datalakeId;
|
|
58
66
|
private readonly fetchImpl;
|
|
59
|
-
private readonly
|
|
67
|
+
private readonly requestBase;
|
|
60
68
|
constructor(options: RestPayloadsClientOptions);
|
|
61
69
|
clear(): Promise<{
|
|
62
70
|
removed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadsClient.d.ts","sourceRoot":"","sources":["../../src/PayloadsClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,oBAAoB,EACpB,mBAAmB,EAEnB,kBAAkB,EAClB,OAAO,EACP,eAAe,EAChB,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"PayloadsClient.d.ts","sourceRoot":"","sources":["../../src/PayloadsClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,oBAAoB,EACpB,mBAAmB,EAEnB,kBAAkB,EAClB,OAAO,EACP,eAAe,EAChB,MAAM,yCAAyC,CAAA;AAgBhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;QAChD,aAAa,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KACrD,CAAA;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;IACpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC9D,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1D,IAAI,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChE,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACtC;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAA;AAErD,MAAM,WAAW,yBAAyB;IACxC;;MAEE;IACF,SAAS,EAAE,uBAAuB,CAAA;IAClC;;MAEE;IACF,OAAO,EAAE,MAAM,CAAA;IACf;;MAEE;IACF,UAAU,EAAE,MAAM,CAAA;IAClB;;MAEE;IACF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAiCD,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAExB,OAAO,EAAE,yBAAyB;IAOxC,KAAK,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAOrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAIpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAQ9D,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAY1D,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAepE,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;YAI7B,OAAO;YAKP,kBAAkB;CAkCjC"}
|
|
@@ -2,13 +2,21 @@ import type { DatalakeDescriptor, DatalakeToken } from '@ariestools/aries-datala
|
|
|
2
2
|
import type { AuthTokenSource } from './AuthToken.ts';
|
|
3
3
|
import type { CreateDatalakeRequest, DatalakeClient, GrantRequest, RevokeRequest, TokenRequest } from './DatalakeClient.ts';
|
|
4
4
|
export interface RestDatalakeClientOptions {
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
Exact control-plane JWT audience.
|
|
7
|
+
*/
|
|
6
8
|
audience?: string;
|
|
7
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
Static token, or async factory minted per-request.
|
|
11
|
+
*/
|
|
8
12
|
authToken: AuthTokenSource;
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
Control-plane base URL, e.g. `https://dl-control.xylabs.io`.
|
|
15
|
+
*/
|
|
10
16
|
baseUrl: string;
|
|
11
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
Optional `fetch` override; defaults to global `fetch`.
|
|
19
|
+
*/
|
|
12
20
|
fetchImpl?: typeof fetch;
|
|
13
21
|
}
|
|
14
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestDatalakeClient.d.ts","sourceRoot":"","sources":["../../src/RestDatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAClB,aAAa,EAGd,MAAM,yCAAyC,CAAA;AAWhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,yBAAyB;IACxC
|
|
1
|
+
{"version":3,"file":"RestDatalakeClient.d.ts","sourceRoot":"","sources":["../../src/RestDatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAClB,aAAa,EAGd,MAAM,yCAAyC,CAAA;AAWhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,yBAAyB;IACxC;;MAEE;IACF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;MAEE;IACF,SAAS,EAAE,eAAe,CAAA;IAC1B;;MAEE;IACF,OAAO,EAAE,MAAM,CAAA;IACf;;MAEE;IACF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAOD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;gBAE5B,OAAO,EAAE,yBAAyB;IAOxC,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQzD,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIrC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAQxD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAOnD,OAAO;CAqCtB"}
|
package/dist/browser/browser.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// src/PayloadsClient.ts
|
|
2
2
|
import {
|
|
3
|
+
DATALAKE_API_VERSION,
|
|
3
4
|
DATALAKE_HEADER_DUPLICATES,
|
|
4
5
|
DATALAKE_HEADER_NEXT_CURSOR,
|
|
5
6
|
DATALAKE_HEADER_REJECTED,
|
|
@@ -19,10 +20,13 @@ async function resolveAuthToken(source, audience) {
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
// src/PayloadsClient.ts
|
|
22
|
-
function
|
|
23
|
+
function extractRequestBase(urlWithPossiblePath) {
|
|
23
24
|
try {
|
|
24
25
|
const parsed = new URL(urlWithPossiblePath);
|
|
25
|
-
|
|
26
|
+
const apiMarker = `/${DATALAKE_API_VERSION}/datalakes`;
|
|
27
|
+
const markerIndex = parsed.pathname.indexOf(apiMarker);
|
|
28
|
+
const prefix = markerIndex === -1 ? parsed.pathname.replace(/\/$/, "") : parsed.pathname.slice(0, markerIndex);
|
|
29
|
+
return `${parsed.protocol}//${parsed.host}${prefix}`;
|
|
26
30
|
} catch {
|
|
27
31
|
return urlWithPossiblePath.replace(/\/$/, "");
|
|
28
32
|
}
|
|
@@ -31,9 +35,9 @@ var RestPayloadsClient = class {
|
|
|
31
35
|
authToken;
|
|
32
36
|
datalakeId;
|
|
33
37
|
fetchImpl;
|
|
34
|
-
|
|
38
|
+
requestBase;
|
|
35
39
|
constructor(options) {
|
|
36
|
-
this.
|
|
40
|
+
this.requestBase = extractRequestBase(options.baseUrl);
|
|
37
41
|
this.datalakeId = options.datalakeId;
|
|
38
42
|
this.authToken = options.authToken;
|
|
39
43
|
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
@@ -107,7 +111,7 @@ var RestPayloadsClient = class {
|
|
|
107
111
|
headers["content-type"] = "application/json";
|
|
108
112
|
init.body = JSON.stringify(options.body);
|
|
109
113
|
}
|
|
110
|
-
const response = await this.fetchImpl(`${this.
|
|
114
|
+
const response = await this.fetchImpl(`${this.requestBase}${path}`, init);
|
|
111
115
|
if (response.status === 204) return { data: void 0, headers: response.headers };
|
|
112
116
|
const text = await response.text();
|
|
113
117
|
const payload = text.length > 0 ? JSON.parse(text) : void 0;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/PayloadsClient.ts", "../../src/AuthToken.ts", "../../src/RestDatalakeClient.ts", "../../src/browser.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n ApiErrorBody,\n DatalakeInsertSummary,\n InsertPayloadsBody,\n InsertPayloadsResponse,\n InsertPayloadsResult,\n NextPayloadsOptions,\n NextPayloadsResponse,\n NextPayloadsResult,\n Payload,\n WithStorageMeta,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_HEADER_DUPLICATES,\n DATALAKE_HEADER_NEXT_CURSOR,\n DATALAKE_HEADER_REJECTED,\n DatalakeApiError,\n datalakePlaneClearPath,\n datalakePlaneDeletePath,\n datalakePlaneGetManyPath,\n datalakePlaneGetPath,\n datalakePlaneInsertPath,\n datalakePlaneNextPath,\n datalakePlaneUsagePath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\n\nexport interface DatalakeUsageReport {\n datalakeId: string\n payloadCount: number\n rateLimits?: {\n anonymous?: { limit: number; remaining: number }\n authenticated?: { limit: number; remaining: number }\n }\n}\n\n/**\n * HTTP client for a single datalake's data plane. Clients send bare\n * `Payload` objects (no `_hash` / `_dataHash` \u2014 those are stamped on\n * insert by the data plane's archivist). Responses always carry the\n * archivist-computed storage meta.\n *\n * Wire format mirrors the XYO archivist REST middleware: `/insert`,\n * `/get/:hash`, `/next`, bare arrays as bodies. Datalake-specific\n * extras (duplicates count, rejected hashes, next cursor) are delivered\n * via response headers.\n */\nexport interface PayloadsClient {\n clear(): Promise<{ removed: number }>\n delete(hash: string): Promise<void>\n get(hash: string): Promise<WithStorageMeta<Payload>>\n getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]>\n insert(payloads: Payload[]): Promise<InsertPayloadsResult>\n next(options?: NextPayloadsOptions): Promise<NextPayloadsResult>\n usage(): Promise<DatalakeUsageReport>\n}\n\n/**\n * Either a static bearer token, or a factory invoked per-request. The factory\n * form lets callers mint a fresh self-signed wallet JWT per call (with\n * `aud` bound to the datalake id).\n */\nexport type PayloadsAuthTokenSource = AuthTokenSource\n\nexport interface RestPayloadsClientOptions {\n /** Static bearer token, or async factory minted per-request. */\n authToken: PayloadsAuthTokenSource\n /** Data-plane base URL without trailing slash. */\n baseUrl: string\n /** Datalake id; appended to `/v1/datalakes/:id/...`. */\n datalakeId: string\n /** Optional `fetch` override; defaults to global `fetch`. */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\ninterface RequestResult<T> {\n data: T\n headers: Headers\n}\n\n/**\n * The data plane is typically addressed by a URL that already includes the\n * datalake id (e.g. `https://plane/v1/datalakes/dl_abc`). We only need the\n * scheme + host portion for path composition, because the helpers in\n * `datalake-core` regenerate the full path from the id.\n */\nfunction extractOrigin(urlWithPossiblePath: string): string {\n try {\n const parsed = new URL(urlWithPossiblePath)\n return `${parsed.protocol}//${parsed.host}`\n } catch {\n return urlWithPossiblePath.replace(/\\/$/, '')\n }\n}\n\nexport class RestPayloadsClient implements PayloadsClient {\n private readonly authToken: PayloadsAuthTokenSource\n private readonly datalakeId: string\n private readonly fetchImpl: typeof fetch\n private readonly origin: string\n\n constructor(options: RestPayloadsClientOptions) {\n this.origin = extractOrigin(options.baseUrl)\n this.datalakeId = options.datalakeId\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async clear(): Promise<{ removed: number }> {\n return this.request<{ removed: number }>(\n datalakePlaneClearPath(this.datalakeId),\n { method: 'POST' },\n )\n }\n\n async delete(hash: string): Promise<void> {\n await this.request<void>(\n datalakePlaneDeletePath(this.datalakeId, hash),\n { method: 'DELETE' },\n )\n }\n\n async get(hash: string): Promise<WithStorageMeta<Payload>> {\n return this.request<WithStorageMeta<Payload>>(datalakePlaneGetPath(this.datalakeId, hash))\n }\n\n async getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]> {\n if (hashes.length === 0) return []\n return this.request<WithStorageMeta<Payload>[]>(\n datalakePlaneGetManyPath(this.datalakeId),\n { method: 'POST', body: hashes },\n )\n }\n\n async insert(payloads: Payload[]): Promise<InsertPayloadsResult> {\n const body: InsertPayloadsBody = payloads\n const { data, headers } = await this.requestWithHeaders<InsertPayloadsResponse>(\n datalakePlaneInsertPath(this.datalakeId),\n { method: 'POST', body },\n )\n return {\n inserted: data,\n summary: readInsertSummary(headers),\n }\n }\n\n async next(options: NextPayloadsOptions = {}): Promise<NextPayloadsResult> {\n const params = new URLSearchParams()\n if (options.limit !== undefined) params.set('limit', String(options.limit))\n if (options.cursor) params.set('cursor', options.cursor)\n if (options.schemas && options.schemas.length > 0) params.set('schemas', options.schemas.join(','))\n if (options.order) params.set('order', options.order)\n const suffix = params.toString()\n const path = suffix\n ? `${datalakePlaneNextPath(this.datalakeId)}?${suffix}`\n : datalakePlaneNextPath(this.datalakeId)\n const { data, headers } = await this.requestWithHeaders<NextPayloadsResponse>(path)\n const nextCursor = headers.get(DATALAKE_HEADER_NEXT_CURSOR) ?? undefined\n return { payloads: data, nextCursor }\n }\n\n async usage(): Promise<DatalakeUsageReport> {\n return this.request<DatalakeUsageReport>(datalakePlaneUsagePath(this.datalakeId))\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { data } = await this.requestWithHeaders<T>(path, options)\n return data\n }\n\n private async requestWithHeaders<T>(path: string, options: RequestOptions = {}): Promise<RequestResult<T>> {\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.datalakeId)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(`${this.origin}${path}`, init)\n if (response.status === 204) return { data: undefined as T, headers: response.headers }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} data plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return { data: payload as T, headers: response.headers }\n }\n}\n\nfunction readInsertSummary(headers: Headers): DatalakeInsertSummary {\n const duplicatesRaw = headers.get(DATALAKE_HEADER_DUPLICATES)\n const duplicates = duplicatesRaw === null ? 0 : Number.parseInt(duplicatesRaw, 10)\n const rejectedRaw = headers.get(DATALAKE_HEADER_REJECTED)\n const rejected = rejectedRaw === null || rejectedRaw.length === 0\n ? []\n : rejectedRaw.split(',').map(value => value.trim()).filter(value => value.length > 0)\n return {\n duplicates: Number.isFinite(duplicates) ? duplicates : 0,\n rejected,\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n", "export interface AuthTokenRequest {\n /** Exact JWT audience required by the target service or datalake. */\n audience: string\n}\n\n/** Invoked for every request so callers can obtain a fresh wallet JWT. */\nexport type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>\n\nexport type AuthTokenSource = AuthTokenSupplier | string\n\nexport async function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string> {\n return typeof source === 'function' ? await source({ audience }) : source\n}\n", "import type {\n ApiErrorBody,\n CreateDatalakeBody,\n DatalakeDescriptor,\n DatalakeToken,\n GrantBody,\n MintTokenBody,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_CONTROL_AUDIENCE,\n DatalakeApiError,\n datalakeCollectionPath,\n datalakeGrantPath,\n datalakeGrantsPath,\n datalakeResourcePath,\n datalakeTokensPath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\nimport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\n\nexport interface RestDatalakeClientOptions {\n /** Exact control-plane JWT audience. */\n audience?: string\n /** Static token, or async factory minted per-request. */\n authToken: AuthTokenSource\n /** Control-plane base URL, e.g. `https://dl-control.xylabs.io`. */\n baseUrl: string\n /** Optional `fetch` override; defaults to global `fetch`. */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\n/**\n * HTTP client for the datalake control plane. Implements the stable\n * `DatalakeClient` contract so callers are independent of transport.\n */\nexport class RestDatalakeClient implements DatalakeClient {\n private readonly audience: string\n private readonly authToken: AuthTokenSource\n private readonly baseUrl: string\n private readonly fetchImpl: typeof fetch\n\n constructor(options: RestDatalakeClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n this.audience = options.audience ?? DATALAKE_CONTROL_AUDIENCE\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor> {\n const body: CreateDatalakeBody = { name: request.name, config: request.config }\n return this.request<DatalakeDescriptor>(datalakeCollectionPath(), { method: 'POST', body })\n }\n\n async describe(idOrName: string): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(datalakeResourcePath(idOrName))\n }\n\n async destroy(idOrName: string): Promise<void> {\n await this.request<void>(datalakeResourcePath(idOrName), { method: 'DELETE' })\n }\n\n async grant(request: GrantRequest): Promise<DatalakeDescriptor> {\n const body: GrantBody = { principal: request.principal, role: request.role }\n return this.request<DatalakeDescriptor>(\n datalakeGrantsPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async list(): Promise<DatalakeDescriptor[]> {\n return this.request<DatalakeDescriptor[]>(datalakeCollectionPath())\n }\n\n async mintToken(request: TokenRequest): Promise<DatalakeToken> {\n const body: MintTokenBody = { role: request.role, ttlSeconds: request.ttlSeconds }\n return this.request<DatalakeToken>(\n datalakeTokensPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async revoke(request: RevokeRequest): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(\n datalakeGrantPath(request.datalakeId, request.principal),\n { method: 'DELETE' },\n )\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.audience)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(url, init)\n if (response.status === 204) {\n return undefined as T\n }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} control plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return payload as T\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n", "export type {\n AuthTokenRequest, AuthTokenSource, AuthTokenSupplier,\n} from './AuthToken.ts'\nexport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\nexport type {\n DatalakeUsageReport,\n PayloadsAuthTokenSource,\n PayloadsClient,\n RestPayloadsClientOptions,\n} from './PayloadsClient.ts'\nexport { RestPayloadsClient } from './PayloadsClient.ts'\nexport type { RestDatalakeClientOptions } from './RestDatalakeClient.ts'\nexport { RestDatalakeClient } from './RestDatalakeClient.ts'\nexport * from '@ariestools/aries-datalake-core/browser'\n"],
|
|
5
|
-
"mappings": ";AAYA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;
|
|
4
|
+
"sourcesContent": ["import type {\n ApiErrorBody,\n DatalakeInsertSummary,\n InsertPayloadsBody,\n InsertPayloadsResponse,\n InsertPayloadsResult,\n NextPayloadsOptions,\n NextPayloadsResponse,\n NextPayloadsResult,\n Payload,\n WithStorageMeta,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_API_VERSION,\n DATALAKE_HEADER_DUPLICATES,\n DATALAKE_HEADER_NEXT_CURSOR,\n DATALAKE_HEADER_REJECTED,\n DatalakeApiError,\n datalakePlaneClearPath,\n datalakePlaneDeletePath,\n datalakePlaneGetManyPath,\n datalakePlaneGetPath,\n datalakePlaneInsertPath,\n datalakePlaneNextPath,\n datalakePlaneUsagePath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\n\nexport interface DatalakeUsageReport {\n datalakeId: string\n payloadCount: number\n rateLimits?: {\n anonymous?: { limit: number; remaining: number }\n authenticated?: { limit: number; remaining: number }\n }\n}\n\n/**\n * HTTP client for a single datalake's data plane. Clients send bare\n * `Payload` objects (no `_hash` / `_dataHash` \u2014 those are stamped on\n * insert by the data plane's archivist). Responses always carry the\n * archivist-computed storage meta.\n *\n * Wire format mirrors the XYO archivist REST middleware: `/insert`,\n * `/get/:hash`, `/next`, bare arrays as bodies. Datalake-specific\n * extras (duplicates count, rejected hashes, next cursor) are delivered\n * via response headers.\n */\nexport interface PayloadsClient {\n clear(): Promise<{ removed: number }>\n delete(hash: string): Promise<void>\n get(hash: string): Promise<WithStorageMeta<Payload>>\n getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]>\n insert(payloads: Payload[]): Promise<InsertPayloadsResult>\n next(options?: NextPayloadsOptions): Promise<NextPayloadsResult>\n usage(): Promise<DatalakeUsageReport>\n}\n\n/**\n * Either a static bearer token, or a factory invoked per-request. The factory\n * form lets callers mint a fresh self-signed wallet JWT per call (with\n * `aud` bound to the datalake id).\n */\nexport type PayloadsAuthTokenSource = AuthTokenSource\n\nexport interface RestPayloadsClientOptions {\n /**\n Static bearer token, or async factory minted per-request.\n */\n authToken: PayloadsAuthTokenSource\n /**\n Data-plane base URL without trailing slash.\n */\n baseUrl: string\n /**\n Datalake id; appended to `/v1/datalakes/:id/...`.\n */\n datalakeId: string\n /**\n Optional `fetch` override; defaults to global `fetch`.\n */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\ninterface RequestResult<T> {\n data: T\n headers: Headers\n}\n\n/**\n * The data plane is typically addressed by a URL that already includes the\n * datalake id (e.g. `https://plane/v1/datalakes/dl_abc`). Preserve any path\n * prefix before `/v1/datalakes` so a shared ALB can expose the data plane at\n * `https://host/plane` while the path helpers regenerate the canonical API\n * suffix from the id.\n */\nfunction extractRequestBase(urlWithPossiblePath: string): string {\n try {\n const parsed = new URL(urlWithPossiblePath)\n const apiMarker = `/${DATALAKE_API_VERSION}/datalakes`\n const markerIndex = parsed.pathname.indexOf(apiMarker)\n const prefix = markerIndex === -1\n ? parsed.pathname.replace(/\\/$/, '')\n : parsed.pathname.slice(0, markerIndex)\n return `${parsed.protocol}//${parsed.host}${prefix}`\n } catch {\n return urlWithPossiblePath.replace(/\\/$/, '')\n }\n}\n\nexport class RestPayloadsClient implements PayloadsClient {\n private readonly authToken: PayloadsAuthTokenSource\n private readonly datalakeId: string\n private readonly fetchImpl: typeof fetch\n private readonly requestBase: string\n\n constructor(options: RestPayloadsClientOptions) {\n this.requestBase = extractRequestBase(options.baseUrl)\n this.datalakeId = options.datalakeId\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async clear(): Promise<{ removed: number }> {\n return this.request<{ removed: number }>(\n datalakePlaneClearPath(this.datalakeId),\n { method: 'POST' },\n )\n }\n\n async delete(hash: string): Promise<void> {\n await this.request<void>(\n datalakePlaneDeletePath(this.datalakeId, hash),\n { method: 'DELETE' },\n )\n }\n\n async get(hash: string): Promise<WithStorageMeta<Payload>> {\n return this.request<WithStorageMeta<Payload>>(datalakePlaneGetPath(this.datalakeId, hash))\n }\n\n async getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]> {\n if (hashes.length === 0) return []\n return this.request<WithStorageMeta<Payload>[]>(\n datalakePlaneGetManyPath(this.datalakeId),\n { method: 'POST', body: hashes },\n )\n }\n\n async insert(payloads: Payload[]): Promise<InsertPayloadsResult> {\n const body: InsertPayloadsBody = payloads\n const { data, headers } = await this.requestWithHeaders<InsertPayloadsResponse>(\n datalakePlaneInsertPath(this.datalakeId),\n { method: 'POST', body },\n )\n return {\n inserted: data,\n summary: readInsertSummary(headers),\n }\n }\n\n async next(options: NextPayloadsOptions = {}): Promise<NextPayloadsResult> {\n const params = new URLSearchParams()\n if (options.limit !== undefined) params.set('limit', String(options.limit))\n if (options.cursor) params.set('cursor', options.cursor)\n if (options.schemas && options.schemas.length > 0) params.set('schemas', options.schemas.join(','))\n if (options.order) params.set('order', options.order)\n const suffix = params.toString()\n const path = suffix\n ? `${datalakePlaneNextPath(this.datalakeId)}?${suffix}`\n : datalakePlaneNextPath(this.datalakeId)\n const { data, headers } = await this.requestWithHeaders<NextPayloadsResponse>(path)\n const nextCursor = headers.get(DATALAKE_HEADER_NEXT_CURSOR) ?? undefined\n return { payloads: data, nextCursor }\n }\n\n async usage(): Promise<DatalakeUsageReport> {\n return this.request<DatalakeUsageReport>(datalakePlaneUsagePath(this.datalakeId))\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { data } = await this.requestWithHeaders<T>(path, options)\n return data\n }\n\n private async requestWithHeaders<T>(path: string, options: RequestOptions = {}): Promise<RequestResult<T>> {\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.datalakeId)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(`${this.requestBase}${path}`, init)\n if (response.status === 204) return { data: undefined as T, headers: response.headers }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} data plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return { data: payload as T, headers: response.headers }\n }\n}\n\nfunction readInsertSummary(headers: Headers): DatalakeInsertSummary {\n const duplicatesRaw = headers.get(DATALAKE_HEADER_DUPLICATES)\n const duplicates = duplicatesRaw === null ? 0 : Number.parseInt(duplicatesRaw, 10)\n const rejectedRaw = headers.get(DATALAKE_HEADER_REJECTED)\n const rejected = rejectedRaw === null || rejectedRaw.length === 0\n ? []\n : rejectedRaw.split(',').map(value => value.trim()).filter(value => value.length > 0)\n return {\n duplicates: Number.isFinite(duplicates) ? duplicates : 0,\n rejected,\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n", "export interface AuthTokenRequest {\n /**\n Exact JWT audience required by the target service or datalake.\n */\n audience: string\n}\n\n/**\nInvoked for every request so callers can obtain a fresh wallet JWT.\n*/\nexport type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>\n\nexport type AuthTokenSource = AuthTokenSupplier | string\n\nexport async function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string> {\n return typeof source === 'function' ? await source({ audience }) : source\n}\n", "import type {\n ApiErrorBody,\n CreateDatalakeBody,\n DatalakeDescriptor,\n DatalakeToken,\n GrantBody,\n MintTokenBody,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_CONTROL_AUDIENCE,\n DatalakeApiError,\n datalakeCollectionPath,\n datalakeGrantPath,\n datalakeGrantsPath,\n datalakeResourcePath,\n datalakeTokensPath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\nimport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\n\nexport interface RestDatalakeClientOptions {\n /**\n Exact control-plane JWT audience.\n */\n audience?: string\n /**\n Static token, or async factory minted per-request.\n */\n authToken: AuthTokenSource\n /**\n Control-plane base URL, e.g. `https://dl-control.xylabs.io`.\n */\n baseUrl: string\n /**\n Optional `fetch` override; defaults to global `fetch`.\n */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\n/**\n * HTTP client for the datalake control plane. Implements the stable\n * `DatalakeClient` contract so callers are independent of transport.\n */\nexport class RestDatalakeClient implements DatalakeClient {\n private readonly audience: string\n private readonly authToken: AuthTokenSource\n private readonly baseUrl: string\n private readonly fetchImpl: typeof fetch\n\n constructor(options: RestDatalakeClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n this.audience = options.audience ?? DATALAKE_CONTROL_AUDIENCE\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor> {\n const body: CreateDatalakeBody = { name: request.name, config: request.config }\n return this.request<DatalakeDescriptor>(datalakeCollectionPath(), { method: 'POST', body })\n }\n\n async describe(idOrName: string): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(datalakeResourcePath(idOrName))\n }\n\n async destroy(idOrName: string): Promise<void> {\n await this.request<void>(datalakeResourcePath(idOrName), { method: 'DELETE' })\n }\n\n async grant(request: GrantRequest): Promise<DatalakeDescriptor> {\n const body: GrantBody = { principal: request.principal, role: request.role }\n return this.request<DatalakeDescriptor>(\n datalakeGrantsPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async list(): Promise<DatalakeDescriptor[]> {\n return this.request<DatalakeDescriptor[]>(datalakeCollectionPath())\n }\n\n async mintToken(request: TokenRequest): Promise<DatalakeToken> {\n const body: MintTokenBody = { role: request.role, ttlSeconds: request.ttlSeconds }\n return this.request<DatalakeToken>(\n datalakeTokensPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async revoke(request: RevokeRequest): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(\n datalakeGrantPath(request.datalakeId, request.principal),\n { method: 'DELETE' },\n )\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.audience)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(url, init)\n if (response.status === 204) {\n return undefined as T\n }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} control plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return payload as T\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n", "export type {\n AuthTokenRequest, AuthTokenSource, AuthTokenSupplier,\n} from './AuthToken.ts'\nexport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\nexport type {\n DatalakeUsageReport,\n PayloadsAuthTokenSource,\n PayloadsClient,\n RestPayloadsClientOptions,\n} from './PayloadsClient.ts'\nexport { RestPayloadsClient } from './PayloadsClient.ts'\nexport type { RestDatalakeClientOptions } from './RestDatalakeClient.ts'\nexport { RestDatalakeClient } from './RestDatalakeClient.ts'\nexport * from '@ariestools/aries-datalake-core/browser'\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["DatalakeApiError", "isApiErrorBody", "DatalakeApiError"]
|
|
7
7
|
}
|
package/dist/node/AuthToken.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export interface AuthTokenRequest {
|
|
2
|
-
/**
|
|
2
|
+
/**
|
|
3
|
+
Exact JWT audience required by the target service or datalake.
|
|
4
|
+
*/
|
|
3
5
|
audience: string;
|
|
4
6
|
}
|
|
5
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
Invoked for every request so callers can obtain a fresh wallet JWT.
|
|
9
|
+
*/
|
|
6
10
|
export type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>;
|
|
7
11
|
export type AuthTokenSource = AuthTokenSupplier | string;
|
|
8
12
|
export declare function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthToken.d.ts","sourceRoot":"","sources":["../../src/AuthToken.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B
|
|
1
|
+
{"version":3,"file":"AuthToken.d.ts","sourceRoot":"","sources":["../../src/AuthToken.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B;;MAEE;IACF,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;EAEE;AACF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAE9E,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,MAAM,CAAA;AAExD,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjG"}
|
|
@@ -26,7 +26,9 @@ export interface RevokeRequest {
|
|
|
26
26
|
export interface TokenRequest {
|
|
27
27
|
datalakeId: string;
|
|
28
28
|
role: DatalakeRole;
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
Lifetime in seconds. Capped server-side. Defaults to 1 hour.
|
|
31
|
+
*/
|
|
30
32
|
ttlSeconds?: number;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatalakeClient.d.ts","sourceRoot":"","sources":["../../src/DatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,yCAAyC,CAAA;AAEhD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,YAAY,CAAA;IAClB
|
|
1
|
+
{"version":3,"file":"DatalakeClient.d.ts","sourceRoot":"","sources":["../../src/DatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACd,MAAM,yCAAyC,CAAA;AAEhD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;IAC5B,IAAI,EAAE,YAAY,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,YAAY,CAAA;IAClB;;MAEE;IACF,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACvD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACzD,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACrC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACxD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAC5D"}
|
|
@@ -43,20 +43,28 @@ export interface PayloadsClient {
|
|
|
43
43
|
*/
|
|
44
44
|
export type PayloadsAuthTokenSource = AuthTokenSource;
|
|
45
45
|
export interface RestPayloadsClientOptions {
|
|
46
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
Static bearer token, or async factory minted per-request.
|
|
48
|
+
*/
|
|
47
49
|
authToken: PayloadsAuthTokenSource;
|
|
48
|
-
/**
|
|
50
|
+
/**
|
|
51
|
+
Data-plane base URL without trailing slash.
|
|
52
|
+
*/
|
|
49
53
|
baseUrl: string;
|
|
50
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
Datalake id; appended to `/v1/datalakes/:id/...`.
|
|
56
|
+
*/
|
|
51
57
|
datalakeId: string;
|
|
52
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
Optional `fetch` override; defaults to global `fetch`.
|
|
60
|
+
*/
|
|
53
61
|
fetchImpl?: typeof fetch;
|
|
54
62
|
}
|
|
55
63
|
export declare class RestPayloadsClient implements PayloadsClient {
|
|
56
64
|
private readonly authToken;
|
|
57
65
|
private readonly datalakeId;
|
|
58
66
|
private readonly fetchImpl;
|
|
59
|
-
private readonly
|
|
67
|
+
private readonly requestBase;
|
|
60
68
|
constructor(options: RestPayloadsClientOptions);
|
|
61
69
|
clear(): Promise<{
|
|
62
70
|
removed: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadsClient.d.ts","sourceRoot":"","sources":["../../src/PayloadsClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,oBAAoB,EACpB,mBAAmB,EAEnB,kBAAkB,EAClB,OAAO,EACP,eAAe,EAChB,MAAM,yCAAyC,CAAA;
|
|
1
|
+
{"version":3,"file":"PayloadsClient.d.ts","sourceRoot":"","sources":["../../src/PayloadsClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,oBAAoB,EACpB,mBAAmB,EAEnB,kBAAkB,EAClB,OAAO,EACP,eAAe,EAChB,MAAM,yCAAyC,CAAA;AAgBhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrD,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;QAChD,aAAa,CAAC,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KACrD,CAAA;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;IACpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC9D,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAC1D,IAAI,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChE,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACtC;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAA;AAErD,MAAM,WAAW,yBAAyB;IACxC;;MAEE;IACF,SAAS,EAAE,uBAAuB,CAAA;IAClC;;MAEE;IACF,OAAO,EAAE,MAAM,CAAA;IACf;;MAEE;IACF,UAAU,EAAE,MAAM,CAAA;IAClB;;MAEE;IACF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAiCD,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAExB,OAAO,EAAE,yBAAyB;IAOxC,KAAK,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAOrC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAIpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAQ9D,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAY1D,IAAI,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAepE,KAAK,IAAI,OAAO,CAAC,mBAAmB,CAAC;YAI7B,OAAO;YAKP,kBAAkB;CAkCjC"}
|
|
@@ -2,13 +2,21 @@ import type { DatalakeDescriptor, DatalakeToken } from '@ariestools/aries-datala
|
|
|
2
2
|
import type { AuthTokenSource } from './AuthToken.ts';
|
|
3
3
|
import type { CreateDatalakeRequest, DatalakeClient, GrantRequest, RevokeRequest, TokenRequest } from './DatalakeClient.ts';
|
|
4
4
|
export interface RestDatalakeClientOptions {
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
Exact control-plane JWT audience.
|
|
7
|
+
*/
|
|
6
8
|
audience?: string;
|
|
7
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
Static token, or async factory minted per-request.
|
|
11
|
+
*/
|
|
8
12
|
authToken: AuthTokenSource;
|
|
9
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
Control-plane base URL, e.g. `https://dl-control.xylabs.io`.
|
|
15
|
+
*/
|
|
10
16
|
baseUrl: string;
|
|
11
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
Optional `fetch` override; defaults to global `fetch`.
|
|
19
|
+
*/
|
|
12
20
|
fetchImpl?: typeof fetch;
|
|
13
21
|
}
|
|
14
22
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestDatalakeClient.d.ts","sourceRoot":"","sources":["../../src/RestDatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAClB,aAAa,EAGd,MAAM,yCAAyC,CAAA;AAWhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,yBAAyB;IACxC
|
|
1
|
+
{"version":3,"file":"RestDatalakeClient.d.ts","sourceRoot":"","sources":["../../src/RestDatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAClB,aAAa,EAGd,MAAM,yCAAyC,CAAA;AAWhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,yBAAyB;IACxC;;MAEE;IACF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;MAEE;IACF,SAAS,EAAE,eAAe,CAAA;IAC1B;;MAEE;IACF,OAAO,EAAE,MAAM,CAAA;IACf;;MAEE;IACF,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AAOD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;gBAE5B,OAAO,EAAE,yBAAyB;IAOxC,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIvD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQzD,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIrC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAQxD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAOnD,OAAO;CAqCtB"}
|
|
@@ -7,7 +7,9 @@ export interface CreateDatalakeClientOptions {
|
|
|
7
7
|
* self-signed wallet JWTs per request.
|
|
8
8
|
*/
|
|
9
9
|
authToken?: AuthTokenSource;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
Override the control-plane URL (otherwise read from env / credentials).
|
|
12
|
+
*/
|
|
11
13
|
baseUrl?: string;
|
|
12
14
|
/**
|
|
13
15
|
* Force a specific driver. Defaults to:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDatalakeClient.d.ts","sourceRoot":"","sources":["../../src/createDatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIzD,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B
|
|
1
|
+
{"version":3,"file":"createDatalakeClient.d.ts","sourceRoot":"","sources":["../../src/createDatalakeClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAIzD,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B;;MAEE;IACF,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,2BAAgC,GAAG,cAAc,CAoB9F"}
|
|
@@ -4,11 +4,17 @@
|
|
|
4
4
|
* server-side `authToken` field is unused in this mode.
|
|
5
5
|
*/
|
|
6
6
|
export interface WalletJwtCredentials {
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
`aud` claim to use for control-plane calls (default `aries-datalake-control`).
|
|
9
|
+
*/
|
|
8
10
|
controlAudience?: string;
|
|
9
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
Derivation offset of the signing account (default `'0'`).
|
|
13
|
+
*/
|
|
10
14
|
offset?: string;
|
|
11
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
TTL (seconds) for each minted JWT (default `120`).
|
|
17
|
+
*/
|
|
12
18
|
ttlSeconds?: number;
|
|
13
19
|
}
|
|
14
20
|
export interface StoredCredentials {
|
|
@@ -18,12 +24,18 @@ export interface StoredCredentials {
|
|
|
18
24
|
*/
|
|
19
25
|
authToken?: string;
|
|
20
26
|
baseUrl: string;
|
|
21
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
ISO-8601 expiration of the access token.
|
|
29
|
+
*/
|
|
22
30
|
expiresAt?: string;
|
|
23
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
Optional refresh token for long-lived sessions.
|
|
33
|
+
*/
|
|
24
34
|
refreshToken?: string;
|
|
25
35
|
userId?: string;
|
|
26
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
Wallet-JWT mode hints. When set, the CLI mints self-signed JWTs.
|
|
38
|
+
*/
|
|
27
39
|
walletJwt?: WalletJwtCredentials;
|
|
28
40
|
}
|
|
29
41
|
export declare function saveCredentials(credentials: StoredCredentials): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/credentials.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/credentials.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC;;MAEE;IACF,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;MAEE;IACF,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;MAEE;IACF,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf;;MAEE;IACF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;MAEE;IACF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;MAEE;IACF,SAAS,CAAC,EAAE,oBAAoB,CAAA;CACjC;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAUpE;AAED,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,SAAS,CAS/D;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
|
package/dist/node/index.mjs
CHANGED
|
@@ -362,6 +362,7 @@ function clearDefaultDatalake() {
|
|
|
362
362
|
|
|
363
363
|
// src/PayloadsClient.ts
|
|
364
364
|
import {
|
|
365
|
+
DATALAKE_API_VERSION,
|
|
365
366
|
DATALAKE_HEADER_DUPLICATES,
|
|
366
367
|
DATALAKE_HEADER_NEXT_CURSOR,
|
|
367
368
|
DATALAKE_HEADER_REJECTED,
|
|
@@ -374,10 +375,13 @@ import {
|
|
|
374
375
|
datalakePlaneNextPath,
|
|
375
376
|
datalakePlaneUsagePath
|
|
376
377
|
} from "@ariestools/aries-datalake-core/browser";
|
|
377
|
-
function
|
|
378
|
+
function extractRequestBase(urlWithPossiblePath) {
|
|
378
379
|
try {
|
|
379
380
|
const parsed = new URL(urlWithPossiblePath);
|
|
380
|
-
|
|
381
|
+
const apiMarker = `/${DATALAKE_API_VERSION}/datalakes`;
|
|
382
|
+
const markerIndex = parsed.pathname.indexOf(apiMarker);
|
|
383
|
+
const prefix = markerIndex === -1 ? parsed.pathname.replace(/\/$/, "") : parsed.pathname.slice(0, markerIndex);
|
|
384
|
+
return `${parsed.protocol}//${parsed.host}${prefix}`;
|
|
381
385
|
} catch {
|
|
382
386
|
return urlWithPossiblePath.replace(/\/$/, "");
|
|
383
387
|
}
|
|
@@ -386,9 +390,9 @@ var RestPayloadsClient = class {
|
|
|
386
390
|
authToken;
|
|
387
391
|
datalakeId;
|
|
388
392
|
fetchImpl;
|
|
389
|
-
|
|
393
|
+
requestBase;
|
|
390
394
|
constructor(options) {
|
|
391
|
-
this.
|
|
395
|
+
this.requestBase = extractRequestBase(options.baseUrl);
|
|
392
396
|
this.datalakeId = options.datalakeId;
|
|
393
397
|
this.authToken = options.authToken;
|
|
394
398
|
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
@@ -462,7 +466,7 @@ var RestPayloadsClient = class {
|
|
|
462
466
|
headers["content-type"] = "application/json";
|
|
463
467
|
init.body = JSON.stringify(options.body);
|
|
464
468
|
}
|
|
465
|
-
const response = await this.fetchImpl(`${this.
|
|
469
|
+
const response = await this.fetchImpl(`${this.requestBase}${path4}`, init);
|
|
466
470
|
if (response.status === 204) return { data: void 0, headers: response.headers };
|
|
467
471
|
const text = await response.text();
|
|
468
472
|
const payload = text.length > 0 ? JSON.parse(text) : void 0;
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/credentials.ts", "../../src/paths.ts", "../../src/LocalDatalakeClient.ts", "../../src/RestDatalakeClient.ts", "../../src/AuthToken.ts", "../../src/createDatalakeClient.ts", "../../src/defaultDatalake.ts", "../../src/PayloadsClient.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n chmodSync, existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport { getAriesHome, getCredentialsPath } from './paths.ts'\n\n/**\n * Hints for self-signed wallet-JWT mode. When present, the CLI is expected to\n * mint a fresh ES256K JWT per request using the active aries wallet. The\n * server-side `authToken` field is unused in this mode.\n */\nexport interface WalletJwtCredentials {\n /** `aud` claim to use for control-plane calls (default `aries-datalake-control`). */\n controlAudience?: string\n /** Derivation offset of the signing account (default `'0'`). */\n offset?: string\n /** TTL (seconds) for each minted JWT (default `120`). */\n ttlSeconds?: number\n}\n\nexport interface StoredCredentials {\n /**\n * Static bearer token for legacy/static-token mode. Absent when `walletJwt`\n * mode is configured \u2014 the CLI mints a token per request instead.\n */\n authToken?: string\n baseUrl: string\n /** ISO-8601 expiration of the access token. */\n expiresAt?: string\n /** Optional refresh token for long-lived sessions. */\n refreshToken?: string\n userId?: string\n /** Wallet-JWT mode hints. When set, the CLI mints self-signed JWTs. */\n walletJwt?: WalletJwtCredentials\n}\n\nexport function saveCredentials(credentials: StoredCredentials): void {\n const home = getAriesHome()\n if (!existsSync(home)) mkdirSync(home, { recursive: true })\n const filePath = getCredentialsPath()\n writeFileSync(filePath, JSON.stringify(credentials, undefined, 2), 'utf8')\n try {\n chmodSync(filePath, 0o600)\n } catch {\n // chmod can fail on some filesystems (e.g. Windows); tolerate silently.\n }\n}\n\nexport function loadCredentials(): StoredCredentials | undefined {\n const filePath = getCredentialsPath()\n if (!existsSync(filePath)) return undefined\n try {\n const raw = readFileSync(filePath, 'utf8')\n return JSON.parse(raw) as StoredCredentials\n } catch {\n return undefined\n }\n}\n\nexport function clearCredentials(): void {\n const filePath = getCredentialsPath()\n if (existsSync(filePath)) unlinkSync(filePath)\n}\n\nexport function getCredentialsLocation(): string {\n return path.resolve(getCredentialsPath())\n}\n", "import { homedir } from 'node:os'\nimport path from 'node:path'\n\n/**\n * Root directory for all Aries state (credentials, local datalake stub, etc.).\n * Overridable via `ARIES_HOME` so tests can redirect to a temp dir.\n */\nexport function getAriesHome(): string {\n return process.env.ARIES_HOME ?? path.join(homedir(), '.aries')\n}\n\nexport function getDatalakeStoreDir(): string {\n return path.join(getAriesHome(), 'datalakes')\n}\n\n/**\n * JSON file backing the `LocalDatalakeClient`. A lightweight substitute for\n * the real control plane during P0 development.\n */\nexport function getLocalDatalakeStorePath(): string {\n return path.join(getDatalakeStoreDir(), 'local-store.json')\n}\n\nexport function getCredentialsPath(): string {\n return path.join(getAriesHome(), 'credentials.json')\n}\n\nexport function getDefaultDatalakePath(): string {\n return path.join(getAriesHome(), 'datalake-default.json')\n}\n", "import {\n existsSync, mkdirSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport type {\n DatalakeDescriptor,\n DatalakeTier,\n DatalakeToken,\n} from '@ariestools/aries-datalake-core'\n\nimport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\nimport { getDatalakeStoreDir, getLocalDatalakeStorePath } from './paths.ts'\n\ninterface LocalStore {\n datalakes: DatalakeDescriptor[]\n}\n\nconst LOCAL_OWNER_ID = 'local-user'\n\nconst TIER_SIZE_DEFAULTS: Record<DatalakeTier, number> = {\n small: 10 * 1024 * 1024 * 1024,\n medium: 100 * 1024 * 1024 * 1024,\n large: 1024 * 1024 * 1024 * 1024,\n archive: 10 * 1024 * 1024 * 1024 * 1024,\n}\n\nconst TIER_IOPS_DEFAULTS: Record<DatalakeTier, number> = {\n small: 500,\n medium: 2000,\n large: 10_000,\n archive: 0,\n}\n\nfunction readStore(): LocalStore {\n const filePath = getLocalDatalakeStorePath()\n if (!existsSync(filePath)) return { datalakes: [] }\n try {\n const raw = readFileSync(filePath, 'utf8')\n return JSON.parse(raw) as LocalStore\n } catch {\n return { datalakes: [] }\n }\n}\n\nfunction writeStore(store: LocalStore): void {\n const dir = getDatalakeStoreDir()\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true })\n writeFileSync(getLocalDatalakeStorePath(), JSON.stringify(store, undefined, 2), 'utf8')\n}\n\nfunction generateId(): string {\n return `dl_${Math.random().toString(36).slice(2, 10)}${Date.now().toString(36)}`\n}\n\nfunction findDatalake(store: LocalStore, idOrName: string): DatalakeDescriptor | undefined {\n return store.datalakes.find(dl => dl.id === idOrName || dl.name === idOrName)\n}\n\nfunction requireDatalake(store: LocalStore, idOrName: string): DatalakeDescriptor {\n const found = findDatalake(store, idOrName)\n if (!found) throw new Error(`Datalake not found: ${idOrName}`)\n return found\n}\n\n/**\n * Filesystem-backed stub implementation of `DatalakeClient` used during P0\n * development. Pretends to provision datalakes instantly, persists metadata\n * to `~/.aries/datalakes/local-store.json`, and mints opaque non-JWT tokens.\n *\n * Not suitable for production use \u2014 replace with `RestDatalakeClient` once\n * the control plane is live.\n */\nexport class LocalDatalakeClient implements DatalakeClient {\n async create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor> {\n const store = readStore()\n if (store.datalakes.some(dl => dl.name === request.name)) {\n throw new Error(`Datalake already exists: ${request.name}`)\n }\n\n const now = new Date().toISOString()\n const tier = request.config.tier\n const descriptor: DatalakeDescriptor = {\n id: generateId(),\n name: request.name,\n ownerId: LOCAL_OWNER_ID,\n config: {\n tier,\n sizeBytes: request.config.sizeBytes ?? TIER_SIZE_DEFAULTS[tier],\n iops: request.config.iops ?? TIER_IOPS_DEFAULTS[tier],\n retentionDays: request.config.retentionDays ?? 30,\n region: request.config.region ?? 'us-west-2',\n allowedSchemas: request.config.allowedSchemas ?? [],\n disallowedSchemas: request.config.disallowedSchemas ?? [],\n },\n status: 'ready',\n url: `http://localhost:8080/datalakes/${request.name}`,\n acl: [],\n usage: {\n payloadCount: 0,\n bytesStored: 0,\n bytesStoredLimit: request.config.sizeBytes ?? TIER_SIZE_DEFAULTS[tier],\n readsLast24h: 0,\n writesLast24h: 0,\n },\n createdAt: now,\n updatedAt: now,\n }\n\n store.datalakes.push(descriptor)\n writeStore(store)\n return descriptor\n }\n\n async describe(idOrName: string): Promise<DatalakeDescriptor> {\n const store = readStore()\n return requireDatalake(store, idOrName)\n }\n\n async destroy(idOrName: string): Promise<void> {\n const store = readStore()\n const found = findDatalake(store, idOrName)\n if (!found) throw new Error(`Datalake not found: ${idOrName}`)\n store.datalakes = store.datalakes.filter(dl => dl.id !== found.id)\n writeStore(store)\n }\n\n async grant(request: GrantRequest): Promise<DatalakeDescriptor> {\n const store = readStore()\n const datalake = requireDatalake(store, request.datalakeId)\n const existing = datalake.acl.findIndex(entry => entry.principal === request.principal)\n const entry = {\n principal: request.principal,\n role: request.role,\n grantedAt: new Date().toISOString(),\n grantedBy: LOCAL_OWNER_ID,\n }\n if (existing === -1) {\n datalake.acl.push(entry)\n } else {\n datalake.acl[existing] = entry\n }\n datalake.updatedAt = entry.grantedAt\n writeStore(store)\n return datalake\n }\n\n async list(): Promise<DatalakeDescriptor[]> {\n return readStore().datalakes\n }\n\n async mintToken(request: TokenRequest): Promise<DatalakeToken> {\n const store = readStore()\n const datalake = requireDatalake(store, request.datalakeId)\n const ttl = request.ttlSeconds ?? 3600\n const issued = Buffer.from(\n JSON.stringify({\n dl: datalake.id,\n role: request.role,\n exp: Math.floor(Date.now() / 1000) + ttl,\n }),\n ).toString('base64url')\n return {\n token: `local.${issued}`,\n datalakeId: datalake.id,\n role: request.role,\n expiresAt: new Date(Date.now() + ttl * 1000).toISOString(),\n url: datalake.url ?? `http://localhost:8080/datalakes/${datalake.name}`,\n }\n }\n\n async revoke(request: RevokeRequest): Promise<DatalakeDescriptor> {\n const store = readStore()\n const datalake = requireDatalake(store, request.datalakeId)\n datalake.acl = datalake.acl.filter(entry => entry.principal !== request.principal)\n datalake.updatedAt = new Date().toISOString()\n writeStore(store)\n return datalake\n }\n}\n\n/**\n * Convenience: the absolute path where the local store persists state.\n * Useful in tests and for `aries datalake describe --debug`.\n */\nexport function getLocalStoreLocation(): string {\n return path.resolve(getLocalDatalakeStorePath())\n}\n", "import type {\n ApiErrorBody,\n CreateDatalakeBody,\n DatalakeDescriptor,\n DatalakeToken,\n GrantBody,\n MintTokenBody,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_CONTROL_AUDIENCE,\n DatalakeApiError,\n datalakeCollectionPath,\n datalakeGrantPath,\n datalakeGrantsPath,\n datalakeResourcePath,\n datalakeTokensPath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\nimport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\n\nexport interface RestDatalakeClientOptions {\n /** Exact control-plane JWT audience. */\n audience?: string\n /** Static token, or async factory minted per-request. */\n authToken: AuthTokenSource\n /** Control-plane base URL, e.g. `https://dl-control.xylabs.io`. */\n baseUrl: string\n /** Optional `fetch` override; defaults to global `fetch`. */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\n/**\n * HTTP client for the datalake control plane. Implements the stable\n * `DatalakeClient` contract so callers are independent of transport.\n */\nexport class RestDatalakeClient implements DatalakeClient {\n private readonly audience: string\n private readonly authToken: AuthTokenSource\n private readonly baseUrl: string\n private readonly fetchImpl: typeof fetch\n\n constructor(options: RestDatalakeClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n this.audience = options.audience ?? DATALAKE_CONTROL_AUDIENCE\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor> {\n const body: CreateDatalakeBody = { name: request.name, config: request.config }\n return this.request<DatalakeDescriptor>(datalakeCollectionPath(), { method: 'POST', body })\n }\n\n async describe(idOrName: string): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(datalakeResourcePath(idOrName))\n }\n\n async destroy(idOrName: string): Promise<void> {\n await this.request<void>(datalakeResourcePath(idOrName), { method: 'DELETE' })\n }\n\n async grant(request: GrantRequest): Promise<DatalakeDescriptor> {\n const body: GrantBody = { principal: request.principal, role: request.role }\n return this.request<DatalakeDescriptor>(\n datalakeGrantsPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async list(): Promise<DatalakeDescriptor[]> {\n return this.request<DatalakeDescriptor[]>(datalakeCollectionPath())\n }\n\n async mintToken(request: TokenRequest): Promise<DatalakeToken> {\n const body: MintTokenBody = { role: request.role, ttlSeconds: request.ttlSeconds }\n return this.request<DatalakeToken>(\n datalakeTokensPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async revoke(request: RevokeRequest): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(\n datalakeGrantPath(request.datalakeId, request.principal),\n { method: 'DELETE' },\n )\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.audience)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(url, init)\n if (response.status === 204) {\n return undefined as T\n }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} control plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return payload as T\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n", "export interface AuthTokenRequest {\n /** Exact JWT audience required by the target service or datalake. */\n audience: string\n}\n\n/** Invoked for every request so callers can obtain a fresh wallet JWT. */\nexport type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>\n\nexport type AuthTokenSource = AuthTokenSupplier | string\n\nexport async function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string> {\n return typeof source === 'function' ? await source({ audience }) : source\n}\n", "import type { AuthTokenSource } from './AuthToken.ts'\nimport { loadCredentials } from './credentials.ts'\nimport type { DatalakeClient } from './DatalakeClient.ts'\nimport { LocalDatalakeClient } from './LocalDatalakeClient.ts'\nimport { RestDatalakeClient } from './RestDatalakeClient.ts'\n\nexport interface CreateDatalakeClientOptions {\n /**\n * Override the auth token (otherwise read from credentials). Accepts either\n * a static bearer string or an async factory \u2014 pass a factory when minting\n * self-signed wallet JWTs per request.\n */\n authToken?: AuthTokenSource\n /** Override the control-plane URL (otherwise read from env / credentials). */\n baseUrl?: string\n /**\n * Force a specific driver. Defaults to:\n * - `rest` when `ARIES_DATALAKE_API` is set or credentials are present\n * - `local` otherwise\n */\n driver?: 'local' | 'rest'\n}\n\n/**\n * Returns a `DatalakeClient` wired for the current environment. The CLI uses\n * this factory so every command picks up the same resolution rules.\n */\nexport function createDatalakeClient(options: CreateDatalakeClientOptions = {}): DatalakeClient {\n const envBaseUrl = process.env.ARIES_DATALAKE_API\n const credentials = loadCredentials()\n const baseUrl = options.baseUrl ?? envBaseUrl ?? credentials?.baseUrl\n const authToken: AuthTokenSource | undefined = options.authToken ?? credentials?.authToken\n\n const driver = options.driver\n ?? (baseUrl && authToken ? 'rest' : 'local')\n\n if (driver === 'rest') {\n if (!baseUrl || !authToken) {\n throw new Error(\n 'REST driver requires a baseUrl and authToken. '\n + 'Run `aries datalake login` or set ARIES_DATALAKE_API and sign in.',\n )\n }\n return new RestDatalakeClient({ baseUrl, authToken })\n }\n\n return new LocalDatalakeClient()\n}\n", "import {\n existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\n\nimport { getAriesHome, getDefaultDatalakePath } from './paths.ts'\n\ninterface DefaultDatalakeFile {\n id?: string\n name: string\n setAt: string\n}\n\n/**\n * Remembers which datalake the user selected via `aries datalake use`. Read by\n * commands that accept an optional `<name>` and fall back to the default.\n */\nexport function setDefaultDatalake(name: string, id?: string): void {\n const home = getAriesHome()\n if (!existsSync(home)) mkdirSync(home, { recursive: true })\n const payload: DefaultDatalakeFile = {\n name, id, setAt: new Date().toISOString(),\n }\n writeFileSync(getDefaultDatalakePath(), JSON.stringify(payload, undefined, 2), 'utf8')\n}\n\nexport function getDefaultDatalake(): string | undefined {\n const filePath = getDefaultDatalakePath()\n if (!existsSync(filePath)) return undefined\n try {\n const raw = readFileSync(filePath, 'utf8')\n const parsed = JSON.parse(raw) as DefaultDatalakeFile\n return parsed.name\n } catch {\n return undefined\n }\n}\n\nexport function clearDefaultDatalake(): void {\n const filePath = getDefaultDatalakePath()\n if (existsSync(filePath)) unlinkSync(filePath)\n}\n", "import type {\n ApiErrorBody,\n DatalakeInsertSummary,\n InsertPayloadsBody,\n InsertPayloadsResponse,\n InsertPayloadsResult,\n NextPayloadsOptions,\n NextPayloadsResponse,\n NextPayloadsResult,\n Payload,\n WithStorageMeta,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_HEADER_DUPLICATES,\n DATALAKE_HEADER_NEXT_CURSOR,\n DATALAKE_HEADER_REJECTED,\n DatalakeApiError,\n datalakePlaneClearPath,\n datalakePlaneDeletePath,\n datalakePlaneGetManyPath,\n datalakePlaneGetPath,\n datalakePlaneInsertPath,\n datalakePlaneNextPath,\n datalakePlaneUsagePath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\n\nexport interface DatalakeUsageReport {\n datalakeId: string\n payloadCount: number\n rateLimits?: {\n anonymous?: { limit: number; remaining: number }\n authenticated?: { limit: number; remaining: number }\n }\n}\n\n/**\n * HTTP client for a single datalake's data plane. Clients send bare\n * `Payload` objects (no `_hash` / `_dataHash` \u2014 those are stamped on\n * insert by the data plane's archivist). Responses always carry the\n * archivist-computed storage meta.\n *\n * Wire format mirrors the XYO archivist REST middleware: `/insert`,\n * `/get/:hash`, `/next`, bare arrays as bodies. Datalake-specific\n * extras (duplicates count, rejected hashes, next cursor) are delivered\n * via response headers.\n */\nexport interface PayloadsClient {\n clear(): Promise<{ removed: number }>\n delete(hash: string): Promise<void>\n get(hash: string): Promise<WithStorageMeta<Payload>>\n getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]>\n insert(payloads: Payload[]): Promise<InsertPayloadsResult>\n next(options?: NextPayloadsOptions): Promise<NextPayloadsResult>\n usage(): Promise<DatalakeUsageReport>\n}\n\n/**\n * Either a static bearer token, or a factory invoked per-request. The factory\n * form lets callers mint a fresh self-signed wallet JWT per call (with\n * `aud` bound to the datalake id).\n */\nexport type PayloadsAuthTokenSource = AuthTokenSource\n\nexport interface RestPayloadsClientOptions {\n /** Static bearer token, or async factory minted per-request. */\n authToken: PayloadsAuthTokenSource\n /** Data-plane base URL without trailing slash. */\n baseUrl: string\n /** Datalake id; appended to `/v1/datalakes/:id/...`. */\n datalakeId: string\n /** Optional `fetch` override; defaults to global `fetch`. */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\ninterface RequestResult<T> {\n data: T\n headers: Headers\n}\n\n/**\n * The data plane is typically addressed by a URL that already includes the\n * datalake id (e.g. `https://plane/v1/datalakes/dl_abc`). We only need the\n * scheme + host portion for path composition, because the helpers in\n * `datalake-core` regenerate the full path from the id.\n */\nfunction extractOrigin(urlWithPossiblePath: string): string {\n try {\n const parsed = new URL(urlWithPossiblePath)\n return `${parsed.protocol}//${parsed.host}`\n } catch {\n return urlWithPossiblePath.replace(/\\/$/, '')\n }\n}\n\nexport class RestPayloadsClient implements PayloadsClient {\n private readonly authToken: PayloadsAuthTokenSource\n private readonly datalakeId: string\n private readonly fetchImpl: typeof fetch\n private readonly origin: string\n\n constructor(options: RestPayloadsClientOptions) {\n this.origin = extractOrigin(options.baseUrl)\n this.datalakeId = options.datalakeId\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async clear(): Promise<{ removed: number }> {\n return this.request<{ removed: number }>(\n datalakePlaneClearPath(this.datalakeId),\n { method: 'POST' },\n )\n }\n\n async delete(hash: string): Promise<void> {\n await this.request<void>(\n datalakePlaneDeletePath(this.datalakeId, hash),\n { method: 'DELETE' },\n )\n }\n\n async get(hash: string): Promise<WithStorageMeta<Payload>> {\n return this.request<WithStorageMeta<Payload>>(datalakePlaneGetPath(this.datalakeId, hash))\n }\n\n async getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]> {\n if (hashes.length === 0) return []\n return this.request<WithStorageMeta<Payload>[]>(\n datalakePlaneGetManyPath(this.datalakeId),\n { method: 'POST', body: hashes },\n )\n }\n\n async insert(payloads: Payload[]): Promise<InsertPayloadsResult> {\n const body: InsertPayloadsBody = payloads\n const { data, headers } = await this.requestWithHeaders<InsertPayloadsResponse>(\n datalakePlaneInsertPath(this.datalakeId),\n { method: 'POST', body },\n )\n return {\n inserted: data,\n summary: readInsertSummary(headers),\n }\n }\n\n async next(options: NextPayloadsOptions = {}): Promise<NextPayloadsResult> {\n const params = new URLSearchParams()\n if (options.limit !== undefined) params.set('limit', String(options.limit))\n if (options.cursor) params.set('cursor', options.cursor)\n if (options.schemas && options.schemas.length > 0) params.set('schemas', options.schemas.join(','))\n if (options.order) params.set('order', options.order)\n const suffix = params.toString()\n const path = suffix\n ? `${datalakePlaneNextPath(this.datalakeId)}?${suffix}`\n : datalakePlaneNextPath(this.datalakeId)\n const { data, headers } = await this.requestWithHeaders<NextPayloadsResponse>(path)\n const nextCursor = headers.get(DATALAKE_HEADER_NEXT_CURSOR) ?? undefined\n return { payloads: data, nextCursor }\n }\n\n async usage(): Promise<DatalakeUsageReport> {\n return this.request<DatalakeUsageReport>(datalakePlaneUsagePath(this.datalakeId))\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { data } = await this.requestWithHeaders<T>(path, options)\n return data\n }\n\n private async requestWithHeaders<T>(path: string, options: RequestOptions = {}): Promise<RequestResult<T>> {\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.datalakeId)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(`${this.origin}${path}`, init)\n if (response.status === 204) return { data: undefined as T, headers: response.headers }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} data plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return { data: payload as T, headers: response.headers }\n }\n}\n\nfunction readInsertSummary(headers: Headers): DatalakeInsertSummary {\n const duplicatesRaw = headers.get(DATALAKE_HEADER_DUPLICATES)\n const duplicates = duplicatesRaw === null ? 0 : Number.parseInt(duplicatesRaw, 10)\n const rejectedRaw = headers.get(DATALAKE_HEADER_REJECTED)\n const rejected = rejectedRaw === null || rejectedRaw.length === 0\n ? []\n : rejectedRaw.split(',').map(value => value.trim()).filter(value => value.length > 0)\n return {\n duplicates: Number.isFinite(duplicates) ? duplicates : 0,\n rejected,\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n chmodSync, existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport { getAriesHome, getCredentialsPath } from './paths.ts'\n\n/**\n * Hints for self-signed wallet-JWT mode. When present, the CLI is expected to\n * mint a fresh ES256K JWT per request using the active aries wallet. The\n * server-side `authToken` field is unused in this mode.\n */\nexport interface WalletJwtCredentials {\n /**\n `aud` claim to use for control-plane calls (default `aries-datalake-control`).\n */\n controlAudience?: string\n /**\n Derivation offset of the signing account (default `'0'`).\n */\n offset?: string\n /**\n TTL (seconds) for each minted JWT (default `120`).\n */\n ttlSeconds?: number\n}\n\nexport interface StoredCredentials {\n /**\n * Static bearer token for legacy/static-token mode. Absent when `walletJwt`\n * mode is configured \u2014 the CLI mints a token per request instead.\n */\n authToken?: string\n baseUrl: string\n /**\n ISO-8601 expiration of the access token.\n */\n expiresAt?: string\n /**\n Optional refresh token for long-lived sessions.\n */\n refreshToken?: string\n userId?: string\n /**\n Wallet-JWT mode hints. When set, the CLI mints self-signed JWTs.\n */\n walletJwt?: WalletJwtCredentials\n}\n\nexport function saveCredentials(credentials: StoredCredentials): void {\n const home = getAriesHome()\n if (!existsSync(home)) mkdirSync(home, { recursive: true })\n const filePath = getCredentialsPath()\n writeFileSync(filePath, JSON.stringify(credentials, undefined, 2), 'utf8')\n try {\n chmodSync(filePath, 0o600)\n } catch {\n // chmod can fail on some filesystems (e.g. Windows); tolerate silently.\n }\n}\n\nexport function loadCredentials(): StoredCredentials | undefined {\n const filePath = getCredentialsPath()\n if (!existsSync(filePath)) return undefined\n try {\n const raw = readFileSync(filePath, 'utf8')\n return JSON.parse(raw) as StoredCredentials\n } catch {\n return undefined\n }\n}\n\nexport function clearCredentials(): void {\n const filePath = getCredentialsPath()\n if (existsSync(filePath)) unlinkSync(filePath)\n}\n\nexport function getCredentialsLocation(): string {\n return path.resolve(getCredentialsPath())\n}\n", "import { homedir } from 'node:os'\nimport path from 'node:path'\n\n/**\n * Root directory for all Aries state (credentials, local datalake stub, etc.).\n * Overridable via `ARIES_HOME` so tests can redirect to a temp dir.\n */\nexport function getAriesHome(): string {\n return process.env.ARIES_HOME ?? path.join(homedir(), '.aries')\n}\n\nexport function getDatalakeStoreDir(): string {\n return path.join(getAriesHome(), 'datalakes')\n}\n\n/**\n * JSON file backing the `LocalDatalakeClient`. A lightweight substitute for\n * the real control plane during P0 development.\n */\nexport function getLocalDatalakeStorePath(): string {\n return path.join(getDatalakeStoreDir(), 'local-store.json')\n}\n\nexport function getCredentialsPath(): string {\n return path.join(getAriesHome(), 'credentials.json')\n}\n\nexport function getDefaultDatalakePath(): string {\n return path.join(getAriesHome(), 'datalake-default.json')\n}\n", "import {\n existsSync, mkdirSync, readFileSync, writeFileSync,\n} from 'node:fs'\nimport path from 'node:path'\n\nimport type {\n DatalakeDescriptor,\n DatalakeTier,\n DatalakeToken,\n} from '@ariestools/aries-datalake-core'\n\nimport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\nimport { getDatalakeStoreDir, getLocalDatalakeStorePath } from './paths.ts'\n\ninterface LocalStore {\n datalakes: DatalakeDescriptor[]\n}\n\nconst LOCAL_OWNER_ID = 'local-user'\n\nconst TIER_SIZE_DEFAULTS: Record<DatalakeTier, number> = {\n small: 10 * 1024 * 1024 * 1024,\n medium: 100 * 1024 * 1024 * 1024,\n large: 1024 * 1024 * 1024 * 1024,\n archive: 10 * 1024 * 1024 * 1024 * 1024,\n}\n\nconst TIER_IOPS_DEFAULTS: Record<DatalakeTier, number> = {\n small: 500,\n medium: 2000,\n large: 10_000,\n archive: 0,\n}\n\nfunction readStore(): LocalStore {\n const filePath = getLocalDatalakeStorePath()\n if (!existsSync(filePath)) return { datalakes: [] }\n try {\n const raw = readFileSync(filePath, 'utf8')\n return JSON.parse(raw) as LocalStore\n } catch {\n return { datalakes: [] }\n }\n}\n\nfunction writeStore(store: LocalStore): void {\n const dir = getDatalakeStoreDir()\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true })\n writeFileSync(getLocalDatalakeStorePath(), JSON.stringify(store, undefined, 2), 'utf8')\n}\n\nfunction generateId(): string {\n return `dl_${Math.random().toString(36).slice(2, 10)}${Date.now().toString(36)}`\n}\n\nfunction findDatalake(store: LocalStore, idOrName: string): DatalakeDescriptor | undefined {\n return store.datalakes.find(dl => dl.id === idOrName || dl.name === idOrName)\n}\n\nfunction requireDatalake(store: LocalStore, idOrName: string): DatalakeDescriptor {\n const found = findDatalake(store, idOrName)\n if (!found) throw new Error(`Datalake not found: ${idOrName}`)\n return found\n}\n\n/**\n * Filesystem-backed stub implementation of `DatalakeClient` used during P0\n * development. Pretends to provision datalakes instantly, persists metadata\n * to `~/.aries/datalakes/local-store.json`, and mints opaque non-JWT tokens.\n *\n * Not suitable for production use \u2014 replace with `RestDatalakeClient` once\n * the control plane is live.\n */\nexport class LocalDatalakeClient implements DatalakeClient {\n async create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor> {\n const store = readStore()\n if (store.datalakes.some(dl => dl.name === request.name)) {\n throw new Error(`Datalake already exists: ${request.name}`)\n }\n\n const now = new Date().toISOString()\n const tier = request.config.tier\n const descriptor: DatalakeDescriptor = {\n id: generateId(),\n name: request.name,\n ownerId: LOCAL_OWNER_ID,\n config: {\n tier,\n sizeBytes: request.config.sizeBytes ?? TIER_SIZE_DEFAULTS[tier],\n iops: request.config.iops ?? TIER_IOPS_DEFAULTS[tier],\n retentionDays: request.config.retentionDays ?? 30,\n region: request.config.region ?? 'us-west-2',\n allowedSchemas: request.config.allowedSchemas ?? [],\n disallowedSchemas: request.config.disallowedSchemas ?? [],\n },\n status: 'ready',\n url: `http://localhost:8080/datalakes/${request.name}`,\n acl: [],\n usage: {\n payloadCount: 0,\n bytesStored: 0,\n bytesStoredLimit: request.config.sizeBytes ?? TIER_SIZE_DEFAULTS[tier],\n readsLast24h: 0,\n writesLast24h: 0,\n },\n createdAt: now,\n updatedAt: now,\n }\n\n store.datalakes.push(descriptor)\n writeStore(store)\n return descriptor\n }\n\n async describe(idOrName: string): Promise<DatalakeDescriptor> {\n const store = readStore()\n return requireDatalake(store, idOrName)\n }\n\n async destroy(idOrName: string): Promise<void> {\n const store = readStore()\n const found = findDatalake(store, idOrName)\n if (!found) throw new Error(`Datalake not found: ${idOrName}`)\n store.datalakes = store.datalakes.filter(dl => dl.id !== found.id)\n writeStore(store)\n }\n\n async grant(request: GrantRequest): Promise<DatalakeDescriptor> {\n const store = readStore()\n const datalake = requireDatalake(store, request.datalakeId)\n const existing = datalake.acl.findIndex(entry => entry.principal === request.principal)\n const entry = {\n principal: request.principal,\n role: request.role,\n grantedAt: new Date().toISOString(),\n grantedBy: LOCAL_OWNER_ID,\n }\n if (existing === -1) {\n datalake.acl.push(entry)\n } else {\n datalake.acl[existing] = entry\n }\n datalake.updatedAt = entry.grantedAt\n writeStore(store)\n return datalake\n }\n\n async list(): Promise<DatalakeDescriptor[]> {\n return readStore().datalakes\n }\n\n async mintToken(request: TokenRequest): Promise<DatalakeToken> {\n const store = readStore()\n const datalake = requireDatalake(store, request.datalakeId)\n const ttl = request.ttlSeconds ?? 3600\n const issued = Buffer.from(\n JSON.stringify({\n dl: datalake.id,\n role: request.role,\n exp: Math.floor(Date.now() / 1000) + ttl,\n }),\n ).toString('base64url')\n return {\n token: `local.${issued}`,\n datalakeId: datalake.id,\n role: request.role,\n expiresAt: new Date(Date.now() + ttl * 1000).toISOString(),\n url: datalake.url ?? `http://localhost:8080/datalakes/${datalake.name}`,\n }\n }\n\n async revoke(request: RevokeRequest): Promise<DatalakeDescriptor> {\n const store = readStore()\n const datalake = requireDatalake(store, request.datalakeId)\n datalake.acl = datalake.acl.filter(entry => entry.principal !== request.principal)\n datalake.updatedAt = new Date().toISOString()\n writeStore(store)\n return datalake\n }\n}\n\n/**\n * Convenience: the absolute path where the local store persists state.\n * Useful in tests and for `aries datalake describe --debug`.\n */\nexport function getLocalStoreLocation(): string {\n return path.resolve(getLocalDatalakeStorePath())\n}\n", "import type {\n ApiErrorBody,\n CreateDatalakeBody,\n DatalakeDescriptor,\n DatalakeToken,\n GrantBody,\n MintTokenBody,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_CONTROL_AUDIENCE,\n DatalakeApiError,\n datalakeCollectionPath,\n datalakeGrantPath,\n datalakeGrantsPath,\n datalakeResourcePath,\n datalakeTokensPath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\nimport type {\n CreateDatalakeRequest,\n DatalakeClient,\n GrantRequest,\n RevokeRequest,\n TokenRequest,\n} from './DatalakeClient.ts'\n\nexport interface RestDatalakeClientOptions {\n /**\n Exact control-plane JWT audience.\n */\n audience?: string\n /**\n Static token, or async factory minted per-request.\n */\n authToken: AuthTokenSource\n /**\n Control-plane base URL, e.g. `https://dl-control.xylabs.io`.\n */\n baseUrl: string\n /**\n Optional `fetch` override; defaults to global `fetch`.\n */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\n/**\n * HTTP client for the datalake control plane. Implements the stable\n * `DatalakeClient` contract so callers are independent of transport.\n */\nexport class RestDatalakeClient implements DatalakeClient {\n private readonly audience: string\n private readonly authToken: AuthTokenSource\n private readonly baseUrl: string\n private readonly fetchImpl: typeof fetch\n\n constructor(options: RestDatalakeClientOptions) {\n this.baseUrl = options.baseUrl.replace(/\\/$/, '')\n this.audience = options.audience ?? DATALAKE_CONTROL_AUDIENCE\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor> {\n const body: CreateDatalakeBody = { name: request.name, config: request.config }\n return this.request<DatalakeDescriptor>(datalakeCollectionPath(), { method: 'POST', body })\n }\n\n async describe(idOrName: string): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(datalakeResourcePath(idOrName))\n }\n\n async destroy(idOrName: string): Promise<void> {\n await this.request<void>(datalakeResourcePath(idOrName), { method: 'DELETE' })\n }\n\n async grant(request: GrantRequest): Promise<DatalakeDescriptor> {\n const body: GrantBody = { principal: request.principal, role: request.role }\n return this.request<DatalakeDescriptor>(\n datalakeGrantsPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async list(): Promise<DatalakeDescriptor[]> {\n return this.request<DatalakeDescriptor[]>(datalakeCollectionPath())\n }\n\n async mintToken(request: TokenRequest): Promise<DatalakeToken> {\n const body: MintTokenBody = { role: request.role, ttlSeconds: request.ttlSeconds }\n return this.request<DatalakeToken>(\n datalakeTokensPath(request.datalakeId),\n { method: 'POST', body },\n )\n }\n\n async revoke(request: RevokeRequest): Promise<DatalakeDescriptor> {\n return this.request<DatalakeDescriptor>(\n datalakeGrantPath(request.datalakeId, request.principal),\n { method: 'DELETE' },\n )\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const url = `${this.baseUrl}${path}`\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.audience)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(url, init)\n if (response.status === 204) {\n return undefined as T\n }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} control plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return payload as T\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n", "export interface AuthTokenRequest {\n /**\n Exact JWT audience required by the target service or datalake.\n */\n audience: string\n}\n\n/**\nInvoked for every request so callers can obtain a fresh wallet JWT.\n*/\nexport type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>\n\nexport type AuthTokenSource = AuthTokenSupplier | string\n\nexport async function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string> {\n return typeof source === 'function' ? await source({ audience }) : source\n}\n", "import type { AuthTokenSource } from './AuthToken.ts'\nimport { loadCredentials } from './credentials.ts'\nimport type { DatalakeClient } from './DatalakeClient.ts'\nimport { LocalDatalakeClient } from './LocalDatalakeClient.ts'\nimport { RestDatalakeClient } from './RestDatalakeClient.ts'\n\nexport interface CreateDatalakeClientOptions {\n /**\n * Override the auth token (otherwise read from credentials). Accepts either\n * a static bearer string or an async factory \u2014 pass a factory when minting\n * self-signed wallet JWTs per request.\n */\n authToken?: AuthTokenSource\n /**\n Override the control-plane URL (otherwise read from env / credentials).\n */\n baseUrl?: string\n /**\n * Force a specific driver. Defaults to:\n * - `rest` when `ARIES_DATALAKE_API` is set or credentials are present\n * - `local` otherwise\n */\n driver?: 'local' | 'rest'\n}\n\n/**\n * Returns a `DatalakeClient` wired for the current environment. The CLI uses\n * this factory so every command picks up the same resolution rules.\n */\nexport function createDatalakeClient(options: CreateDatalakeClientOptions = {}): DatalakeClient {\n const envBaseUrl = process.env.ARIES_DATALAKE_API\n const credentials = loadCredentials()\n const baseUrl = options.baseUrl ?? envBaseUrl ?? credentials?.baseUrl\n const authToken: AuthTokenSource | undefined = options.authToken ?? credentials?.authToken\n\n const driver = options.driver\n ?? (baseUrl && authToken ? 'rest' : 'local')\n\n if (driver === 'rest') {\n if (!baseUrl || !authToken) {\n throw new Error(\n 'REST driver requires a baseUrl and authToken. '\n + 'Run `aries datalake login` or set ARIES_DATALAKE_API and sign in.',\n )\n }\n return new RestDatalakeClient({ baseUrl, authToken })\n }\n\n return new LocalDatalakeClient()\n}\n", "import {\n existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync,\n} from 'node:fs'\n\nimport { getAriesHome, getDefaultDatalakePath } from './paths.ts'\n\ninterface DefaultDatalakeFile {\n id?: string\n name: string\n setAt: string\n}\n\n/**\n * Remembers which datalake the user selected via `aries datalake use`. Read by\n * commands that accept an optional `<name>` and fall back to the default.\n */\nexport function setDefaultDatalake(name: string, id?: string): void {\n const home = getAriesHome()\n if (!existsSync(home)) mkdirSync(home, { recursive: true })\n const payload: DefaultDatalakeFile = {\n name, id, setAt: new Date().toISOString(),\n }\n writeFileSync(getDefaultDatalakePath(), JSON.stringify(payload, undefined, 2), 'utf8')\n}\n\nexport function getDefaultDatalake(): string | undefined {\n const filePath = getDefaultDatalakePath()\n if (!existsSync(filePath)) return undefined\n try {\n const raw = readFileSync(filePath, 'utf8')\n const parsed = JSON.parse(raw) as DefaultDatalakeFile\n return parsed.name\n } catch {\n return undefined\n }\n}\n\nexport function clearDefaultDatalake(): void {\n const filePath = getDefaultDatalakePath()\n if (existsSync(filePath)) unlinkSync(filePath)\n}\n", "import type {\n ApiErrorBody,\n DatalakeInsertSummary,\n InsertPayloadsBody,\n InsertPayloadsResponse,\n InsertPayloadsResult,\n NextPayloadsOptions,\n NextPayloadsResponse,\n NextPayloadsResult,\n Payload,\n WithStorageMeta,\n} from '@ariestools/aries-datalake-core/browser'\nimport {\n DATALAKE_API_VERSION,\n DATALAKE_HEADER_DUPLICATES,\n DATALAKE_HEADER_NEXT_CURSOR,\n DATALAKE_HEADER_REJECTED,\n DatalakeApiError,\n datalakePlaneClearPath,\n datalakePlaneDeletePath,\n datalakePlaneGetManyPath,\n datalakePlaneGetPath,\n datalakePlaneInsertPath,\n datalakePlaneNextPath,\n datalakePlaneUsagePath,\n} from '@ariestools/aries-datalake-core/browser'\n\nimport type { AuthTokenSource } from './AuthToken.ts'\nimport { resolveAuthToken } from './AuthToken.ts'\n\nexport interface DatalakeUsageReport {\n datalakeId: string\n payloadCount: number\n rateLimits?: {\n anonymous?: { limit: number; remaining: number }\n authenticated?: { limit: number; remaining: number }\n }\n}\n\n/**\n * HTTP client for a single datalake's data plane. Clients send bare\n * `Payload` objects (no `_hash` / `_dataHash` \u2014 those are stamped on\n * insert by the data plane's archivist). Responses always carry the\n * archivist-computed storage meta.\n *\n * Wire format mirrors the XYO archivist REST middleware: `/insert`,\n * `/get/:hash`, `/next`, bare arrays as bodies. Datalake-specific\n * extras (duplicates count, rejected hashes, next cursor) are delivered\n * via response headers.\n */\nexport interface PayloadsClient {\n clear(): Promise<{ removed: number }>\n delete(hash: string): Promise<void>\n get(hash: string): Promise<WithStorageMeta<Payload>>\n getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]>\n insert(payloads: Payload[]): Promise<InsertPayloadsResult>\n next(options?: NextPayloadsOptions): Promise<NextPayloadsResult>\n usage(): Promise<DatalakeUsageReport>\n}\n\n/**\n * Either a static bearer token, or a factory invoked per-request. The factory\n * form lets callers mint a fresh self-signed wallet JWT per call (with\n * `aud` bound to the datalake id).\n */\nexport type PayloadsAuthTokenSource = AuthTokenSource\n\nexport interface RestPayloadsClientOptions {\n /**\n Static bearer token, or async factory minted per-request.\n */\n authToken: PayloadsAuthTokenSource\n /**\n Data-plane base URL without trailing slash.\n */\n baseUrl: string\n /**\n Datalake id; appended to `/v1/datalakes/:id/...`.\n */\n datalakeId: string\n /**\n Optional `fetch` override; defaults to global `fetch`.\n */\n fetchImpl?: typeof fetch\n}\n\ninterface RequestOptions {\n body?: unknown\n method?: string\n}\n\ninterface RequestResult<T> {\n data: T\n headers: Headers\n}\n\n/**\n * The data plane is typically addressed by a URL that already includes the\n * datalake id (e.g. `https://plane/v1/datalakes/dl_abc`). Preserve any path\n * prefix before `/v1/datalakes` so a shared ALB can expose the data plane at\n * `https://host/plane` while the path helpers regenerate the canonical API\n * suffix from the id.\n */\nfunction extractRequestBase(urlWithPossiblePath: string): string {\n try {\n const parsed = new URL(urlWithPossiblePath)\n const apiMarker = `/${DATALAKE_API_VERSION}/datalakes`\n const markerIndex = parsed.pathname.indexOf(apiMarker)\n const prefix = markerIndex === -1\n ? parsed.pathname.replace(/\\/$/, '')\n : parsed.pathname.slice(0, markerIndex)\n return `${parsed.protocol}//${parsed.host}${prefix}`\n } catch {\n return urlWithPossiblePath.replace(/\\/$/, '')\n }\n}\n\nexport class RestPayloadsClient implements PayloadsClient {\n private readonly authToken: PayloadsAuthTokenSource\n private readonly datalakeId: string\n private readonly fetchImpl: typeof fetch\n private readonly requestBase: string\n\n constructor(options: RestPayloadsClientOptions) {\n this.requestBase = extractRequestBase(options.baseUrl)\n this.datalakeId = options.datalakeId\n this.authToken = options.authToken\n this.fetchImpl = options.fetchImpl ?? fetch\n }\n\n async clear(): Promise<{ removed: number }> {\n return this.request<{ removed: number }>(\n datalakePlaneClearPath(this.datalakeId),\n { method: 'POST' },\n )\n }\n\n async delete(hash: string): Promise<void> {\n await this.request<void>(\n datalakePlaneDeletePath(this.datalakeId, hash),\n { method: 'DELETE' },\n )\n }\n\n async get(hash: string): Promise<WithStorageMeta<Payload>> {\n return this.request<WithStorageMeta<Payload>>(datalakePlaneGetPath(this.datalakeId, hash))\n }\n\n async getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]> {\n if (hashes.length === 0) return []\n return this.request<WithStorageMeta<Payload>[]>(\n datalakePlaneGetManyPath(this.datalakeId),\n { method: 'POST', body: hashes },\n )\n }\n\n async insert(payloads: Payload[]): Promise<InsertPayloadsResult> {\n const body: InsertPayloadsBody = payloads\n const { data, headers } = await this.requestWithHeaders<InsertPayloadsResponse>(\n datalakePlaneInsertPath(this.datalakeId),\n { method: 'POST', body },\n )\n return {\n inserted: data,\n summary: readInsertSummary(headers),\n }\n }\n\n async next(options: NextPayloadsOptions = {}): Promise<NextPayloadsResult> {\n const params = new URLSearchParams()\n if (options.limit !== undefined) params.set('limit', String(options.limit))\n if (options.cursor) params.set('cursor', options.cursor)\n if (options.schemas && options.schemas.length > 0) params.set('schemas', options.schemas.join(','))\n if (options.order) params.set('order', options.order)\n const suffix = params.toString()\n const path = suffix\n ? `${datalakePlaneNextPath(this.datalakeId)}?${suffix}`\n : datalakePlaneNextPath(this.datalakeId)\n const { data, headers } = await this.requestWithHeaders<NextPayloadsResponse>(path)\n const nextCursor = headers.get(DATALAKE_HEADER_NEXT_CURSOR) ?? undefined\n return { payloads: data, nextCursor }\n }\n\n async usage(): Promise<DatalakeUsageReport> {\n return this.request<DatalakeUsageReport>(datalakePlaneUsagePath(this.datalakeId))\n }\n\n private async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { data } = await this.requestWithHeaders<T>(path, options)\n return data\n }\n\n private async requestWithHeaders<T>(path: string, options: RequestOptions = {}): Promise<RequestResult<T>> {\n const method = options.method ?? 'GET'\n const token = await resolveAuthToken(this.authToken, this.datalakeId)\n const headers: Record<string, string> = {\n accept: 'application/json',\n authorization: `Bearer ${token}`,\n }\n const init: RequestInit = {\n credentials: 'omit',\n headers,\n method,\n redirect: 'error',\n }\n if (options.body !== undefined) {\n headers['content-type'] = 'application/json'\n init.body = JSON.stringify(options.body)\n }\n\n const response = await this.fetchImpl(`${this.requestBase}${path}`, init)\n if (response.status === 204) return { data: undefined as T, headers: response.headers }\n const text = await response.text()\n const payload: unknown = text.length > 0 ? JSON.parse(text) : undefined\n\n if (!response.ok) {\n const errorBody: ApiErrorBody = isApiErrorBody(payload)\n ? payload\n : {\n code: 'internal',\n message: `Unexpected ${response.status} response from ${method} data plane`,\n }\n throw new DatalakeApiError(response.status, errorBody)\n }\n return { data: payload as T, headers: response.headers }\n }\n}\n\nfunction readInsertSummary(headers: Headers): DatalakeInsertSummary {\n const duplicatesRaw = headers.get(DATALAKE_HEADER_DUPLICATES)\n const duplicates = duplicatesRaw === null ? 0 : Number.parseInt(duplicatesRaw, 10)\n const rejectedRaw = headers.get(DATALAKE_HEADER_REJECTED)\n const rejected = rejectedRaw === null || rejectedRaw.length === 0\n ? []\n : rejectedRaw.split(',').map(value => value.trim()).filter(value => value.length > 0)\n return {\n duplicates: Number.isFinite(duplicates) ? duplicates : 0,\n rejected,\n }\n}\n\nfunction isApiErrorBody(value: unknown): value is ApiErrorBody {\n if (typeof value !== 'object' || value === null) return false\n const maybe = value as Record<string, unknown>\n return typeof maybe.code === 'string' && typeof maybe.message === 'string'\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["path", "path", "existsSync", "mkdirSync", "readFileSync", "writeFileSync", "path", "existsSync", "readFileSync", "mkdirSync", "writeFileSync", "entry", "path", "path", "existsSync", "mkdirSync", "readFileSync", "unlinkSync", "writeFileSync", "existsSync", "mkdirSync", "writeFileSync", "readFileSync", "unlinkSync", "DatalakeApiError", "path", "isApiErrorBody", "DatalakeApiError"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ariestools/aries-datalake-client",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.18",
|
|
4
4
|
"description": "Client SDK for the Aries on-demand XL1 datalake control plane",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xylabs",
|
|
@@ -42,23 +42,23 @@
|
|
|
42
42
|
"README.md"
|
|
43
43
|
],
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@ariestools/aries-datalake-core": "~0.1.
|
|
45
|
+
"@ariestools/aries-datalake-core": "~0.1.18"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@ariestools/sdk": "~8.1.
|
|
49
|
-
"@ariestools/toolchain": "~
|
|
50
|
-
"@ariestools/tsconfig": "~
|
|
48
|
+
"@ariestools/sdk": "~8.1.9",
|
|
49
|
+
"@ariestools/toolchain": "~9.0.2",
|
|
50
|
+
"@ariestools/tsconfig": "~9.0.2",
|
|
51
51
|
"@opentelemetry/api": "~1.9.1",
|
|
52
|
-
"@types/node": "~26.
|
|
52
|
+
"@types/node": "~26.2.0",
|
|
53
53
|
"@xyo-network/sdk": "~7.2.3",
|
|
54
|
-
"@xyo-network/sdk-protocol": "~7.2.
|
|
55
|
-
"fastify": "~5.
|
|
54
|
+
"@xyo-network/sdk-protocol": "~7.2.4",
|
|
55
|
+
"fastify": "~5.12.0",
|
|
56
56
|
"typescript": "~6.0.3",
|
|
57
|
-
"vite": "~8.1
|
|
57
|
+
"vite": "~8.2.1",
|
|
58
58
|
"vitest": "~4.1.10",
|
|
59
59
|
"zod": "~4.4.3",
|
|
60
|
-
"@ariestools/aries-datalake-control": "~0.1.
|
|
61
|
-
"@ariestools/aries-datalake-plane": "~0.1.
|
|
60
|
+
"@ariestools/aries-datalake-control": "~0.1.18",
|
|
61
|
+
"@ariestools/aries-datalake-plane": "~0.1.18"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=18.17.1"
|