@ariestools/aries-datalake-client 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +38 -0
  2. package/dist/browser/AuthToken.d.ts +9 -0
  3. package/dist/browser/AuthToken.d.ts.map +1 -0
  4. package/dist/browser/DatalakeClient.d.ts +45 -0
  5. package/dist/browser/DatalakeClient.d.ts.map +1 -0
  6. package/dist/browser/PayloadsClient.d.ts +73 -0
  7. package/dist/browser/PayloadsClient.d.ts.map +1 -0
  8. package/dist/browser/RestDatalakeClient.d.ts +33 -0
  9. package/dist/browser/RestDatalakeClient.d.ts.map +1 -0
  10. package/dist/browser/browser.d.ts +8 -0
  11. package/dist/browser/browser.d.ts.map +1 -0
  12. package/dist/browser/browser.mjs +240 -0
  13. package/dist/browser/browser.mjs.map +7 -0
  14. package/dist/node/AuthToken.d.ts +9 -0
  15. package/dist/node/AuthToken.d.ts.map +1 -0
  16. package/dist/node/DatalakeClient.d.ts +45 -0
  17. package/dist/node/DatalakeClient.d.ts.map +1 -0
  18. package/dist/node/LocalDatalakeClient.d.ts +25 -0
  19. package/dist/node/LocalDatalakeClient.d.ts.map +1 -0
  20. package/dist/node/PayloadsClient.d.ts +73 -0
  21. package/dist/node/PayloadsClient.d.ts.map +1 -0
  22. package/dist/node/RestDatalakeClient.d.ts +33 -0
  23. package/dist/node/RestDatalakeClient.d.ts.map +1 -0
  24. package/dist/node/browser.d.ts +8 -0
  25. package/dist/node/browser.d.ts.map +1 -0
  26. package/dist/node/createDatalakeClient.d.ts +24 -0
  27. package/dist/node/createDatalakeClient.d.ts.map +1 -0
  28. package/dist/node/credentials.d.ts +33 -0
  29. package/dist/node/credentials.d.ts.map +1 -0
  30. package/dist/node/defaultDatalake.d.ts +8 -0
  31. package/dist/node/defaultDatalake.d.ts.map +1 -0
  32. package/dist/node/index.d.ts +13 -0
  33. package/dist/node/index.d.ts.map +1 -0
  34. package/dist/node/index.mjs +508 -0
  35. package/dist/node/index.mjs.map +7 -0
  36. package/dist/node/paths.d.ts +14 -0
  37. package/dist/node/paths.d.ts.map +1 -0
  38. package/package.json +73 -0
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # `@ariestools/aries-datalake-client`
2
+
3
+ REST clients for the Aries datalake control and data planes, with Node-only local development helpers kept behind the Node entry point.
4
+
5
+ ## Entry points
6
+
7
+ - `@ariestools/aries-datalake-client` is the Node entry point. It includes the REST clients plus local filesystem-backed clients, credentials, defaults, and `ARIES_HOME` helpers.
8
+ - `@ariestools/aries-datalake-client/browser` is the browser entry point. It exports only REST clients, their interfaces, the asynchronous token-supplier contract, and browser-safe datalake wire contracts.
9
+
10
+ Use an asynchronous token supplier that is invoked for each request. The application adapter may return a still-valid short-lived token from page memory or request a fresh wallet JWT through the XL1 browser wallet gateway:
11
+
12
+ ```ts
13
+ import {
14
+ RestDatalakeClient,
15
+ RestPayloadsClient,
16
+ } from '@ariestools/aries-datalake-client/browser'
17
+
18
+ // Application-supplied adapter around the installed XL1 wallet gateway.
19
+ // The wallet derives and signs the browser origin; the page does not supply it.
20
+ declare function requestWalletJwt(audience: string): Promise<string>
21
+
22
+ const authToken = async ({ audience }: { audience: string }): Promise<string> => {
23
+ return await requestWalletJwt(audience)
24
+ }
25
+
26
+ const control = new RestDatalakeClient({
27
+ baseUrl: 'https://control.example',
28
+ authToken,
29
+ })
30
+
31
+ const payloads = new RestPayloadsClient({
32
+ baseUrl: 'https://data.example',
33
+ datalakeId: 'dl_example',
34
+ authToken,
35
+ })
36
+ ```
37
+
38
+ The supplier receives the exact control-plane audience or datalake id. Treat its return value as a sensitive, short-lived bearer token: cache it only in page memory when useful, and never persist it in browser storage or logs. The wallet gateway controls key access; the Aries HTTP services independently verify audience, signature, origin, scope, signer identity, and live ACL state.
@@ -0,0 +1,9 @@
1
+ export interface AuthTokenRequest {
2
+ /** Exact JWT audience required by the target service or datalake. */
3
+ audience: string;
4
+ }
5
+ /** Invoked for every request so callers can obtain a fresh wallet JWT. */
6
+ export type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>;
7
+ export type AuthTokenSource = AuthTokenSupplier | string;
8
+ export declare function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string>;
9
+ //# sourceMappingURL=AuthToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthToken.d.ts","sourceRoot":"","sources":["../../src/AuthToken.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,0EAA0E;AAC1E,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"}
@@ -0,0 +1,45 @@
1
+ import type { DatalakeConfig, DatalakeDescriptor, DatalakePrincipal, DatalakeRole, DatalakeToken } from '@ariestools/aries-datalake-core/browser';
2
+ /**
3
+ * Request to create a new datalake. The `name` is scoped to the authenticated
4
+ * owner; two users may each have a datalake named "main" without conflict.
5
+ */
6
+ export interface CreateDatalakeRequest {
7
+ config: DatalakeConfig;
8
+ name: string;
9
+ }
10
+ /**
11
+ * Request to grant access. If `principal === 'public'` the grant opens the
12
+ * datalake to unauthenticated callers at the given role.
13
+ */
14
+ export interface GrantRequest {
15
+ datalakeId: string;
16
+ principal: DatalakePrincipal;
17
+ role: DatalakeRole;
18
+ }
19
+ export interface RevokeRequest {
20
+ datalakeId: string;
21
+ principal: DatalakePrincipal;
22
+ }
23
+ /**
24
+ * Request to mint a scoped JWT for SDK/CI use.
25
+ */
26
+ export interface TokenRequest {
27
+ datalakeId: string;
28
+ role: DatalakeRole;
29
+ /** Lifetime in seconds. Capped server-side. Defaults to 1 hour. */
30
+ ttlSeconds?: number;
31
+ }
32
+ /**
33
+ * Stable interface every Aries datalake implementation conforms to. Concrete
34
+ * implementations can vary in transport without changing callers.
35
+ */
36
+ export interface DatalakeClient {
37
+ create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor>;
38
+ describe(idOrName: string): Promise<DatalakeDescriptor>;
39
+ destroy(idOrName: string): Promise<void>;
40
+ grant(request: GrantRequest): Promise<DatalakeDescriptor>;
41
+ list(): Promise<DatalakeDescriptor[]>;
42
+ mintToken(request: TokenRequest): Promise<DatalakeToken>;
43
+ revoke(request: RevokeRequest): Promise<DatalakeDescriptor>;
44
+ }
45
+ //# sourceMappingURL=DatalakeClient.d.ts.map
@@ -0,0 +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,mEAAmE;IACnE,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"}
@@ -0,0 +1,73 @@
1
+ import type { InsertPayloadsResult, NextPayloadsOptions, NextPayloadsResult, Payload, WithStorageMeta } from '@ariestools/aries-datalake-core/browser';
2
+ import type { AuthTokenSource } from './AuthToken.ts';
3
+ export interface DatalakeUsageReport {
4
+ datalakeId: string;
5
+ payloadCount: number;
6
+ rateLimits?: {
7
+ anonymous?: {
8
+ limit: number;
9
+ remaining: number;
10
+ };
11
+ authenticated?: {
12
+ limit: number;
13
+ remaining: number;
14
+ };
15
+ };
16
+ }
17
+ /**
18
+ * HTTP client for a single datalake's data plane. Clients send bare
19
+ * `Payload` objects (no `_hash` / `_dataHash` — those are stamped on
20
+ * insert by the data plane's archivist). Responses always carry the
21
+ * archivist-computed storage meta.
22
+ *
23
+ * Wire format mirrors the XYO archivist REST middleware: `/insert`,
24
+ * `/get/:hash`, `/next`, bare arrays as bodies. Datalake-specific
25
+ * extras (duplicates count, rejected hashes, next cursor) are delivered
26
+ * via response headers.
27
+ */
28
+ export interface PayloadsClient {
29
+ clear(): Promise<{
30
+ removed: number;
31
+ }>;
32
+ delete(hash: string): Promise<void>;
33
+ get(hash: string): Promise<WithStorageMeta<Payload>>;
34
+ getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]>;
35
+ insert(payloads: Payload[]): Promise<InsertPayloadsResult>;
36
+ next(options?: NextPayloadsOptions): Promise<NextPayloadsResult>;
37
+ usage(): Promise<DatalakeUsageReport>;
38
+ }
39
+ /**
40
+ * Either a static bearer token, or a factory invoked per-request. The factory
41
+ * form lets callers mint a fresh self-signed wallet JWT per call (with
42
+ * `aud` bound to the datalake id).
43
+ */
44
+ export type PayloadsAuthTokenSource = AuthTokenSource;
45
+ export interface RestPayloadsClientOptions {
46
+ /** Static bearer token, or async factory minted per-request. */
47
+ authToken: PayloadsAuthTokenSource;
48
+ /** Data-plane base URL without trailing slash. */
49
+ baseUrl: string;
50
+ /** Datalake id; appended to `/v1/datalakes/:id/...`. */
51
+ datalakeId: string;
52
+ /** Optional `fetch` override; defaults to global `fetch`. */
53
+ fetchImpl?: typeof fetch;
54
+ }
55
+ export declare class RestPayloadsClient implements PayloadsClient {
56
+ private readonly authToken;
57
+ private readonly datalakeId;
58
+ private readonly fetchImpl;
59
+ private readonly origin;
60
+ constructor(options: RestPayloadsClientOptions);
61
+ clear(): Promise<{
62
+ removed: number;
63
+ }>;
64
+ delete(hash: string): Promise<void>;
65
+ get(hash: string): Promise<WithStorageMeta<Payload>>;
66
+ getMany(hashes: string[]): Promise<WithStorageMeta<Payload>[]>;
67
+ insert(payloads: Payload[]): Promise<InsertPayloadsResult>;
68
+ next(options?: NextPayloadsOptions): Promise<NextPayloadsResult>;
69
+ usage(): Promise<DatalakeUsageReport>;
70
+ private request;
71
+ private requestWithHeaders;
72
+ }
73
+ //# sourceMappingURL=PayloadsClient.d.ts.map
@@ -0,0 +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;AAehD,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,gEAAgE;IAChE,SAAS,EAAE,uBAAuB,CAAA;IAClC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CACzB;AA2BD,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,MAAM,CAAQ;gBAEnB,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"}
@@ -0,0 +1,33 @@
1
+ import type { DatalakeDescriptor, DatalakeToken } from '@ariestools/aries-datalake-core/browser';
2
+ import type { AuthTokenSource } from './AuthToken.ts';
3
+ import type { CreateDatalakeRequest, DatalakeClient, GrantRequest, RevokeRequest, TokenRequest } from './DatalakeClient.ts';
4
+ export interface RestDatalakeClientOptions {
5
+ /** Exact control-plane JWT audience. */
6
+ audience?: string;
7
+ /** Static token, or async factory minted per-request. */
8
+ authToken: AuthTokenSource;
9
+ /** Control-plane base URL, e.g. `https://dl-control.xylabs.io`. */
10
+ baseUrl: string;
11
+ /** Optional `fetch` override; defaults to global `fetch`. */
12
+ fetchImpl?: typeof fetch;
13
+ }
14
+ /**
15
+ * HTTP client for the datalake control plane. Implements the stable
16
+ * `DatalakeClient` contract so callers are independent of transport.
17
+ */
18
+ export declare class RestDatalakeClient implements DatalakeClient {
19
+ private readonly audience;
20
+ private readonly authToken;
21
+ private readonly baseUrl;
22
+ private readonly fetchImpl;
23
+ constructor(options: RestDatalakeClientOptions);
24
+ create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor>;
25
+ describe(idOrName: string): Promise<DatalakeDescriptor>;
26
+ destroy(idOrName: string): Promise<void>;
27
+ grant(request: GrantRequest): Promise<DatalakeDescriptor>;
28
+ list(): Promise<DatalakeDescriptor[]>;
29
+ mintToken(request: TokenRequest): Promise<DatalakeToken>;
30
+ revoke(request: RevokeRequest): Promise<DatalakeDescriptor>;
31
+ private request;
32
+ }
33
+ //# sourceMappingURL=RestDatalakeClient.d.ts.map
@@ -0,0 +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,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yDAAyD;IACzD,SAAS,EAAE,eAAe,CAAA;IAC1B,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAA;IACf,6DAA6D;IAC7D,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"}
@@ -0,0 +1,8 @@
1
+ export type { AuthTokenRequest, AuthTokenSource, AuthTokenSupplier, } from './AuthToken.ts';
2
+ export type { CreateDatalakeRequest, DatalakeClient, GrantRequest, RevokeRequest, TokenRequest, } from './DatalakeClient.ts';
3
+ export type { DatalakeUsageReport, PayloadsAuthTokenSource, PayloadsClient, RestPayloadsClientOptions, } from './PayloadsClient.ts';
4
+ export { RestPayloadsClient } from './PayloadsClient.ts';
5
+ export type { RestDatalakeClientOptions } from './RestDatalakeClient.ts';
6
+ export { RestDatalakeClient } from './RestDatalakeClient.ts';
7
+ export * from '@ariestools/aries-datalake-core/browser';
8
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,GACrD,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,YAAY,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,cAAc,yCAAyC,CAAA"}
@@ -0,0 +1,240 @@
1
+ // src/PayloadsClient.ts
2
+ import {
3
+ DATALAKE_HEADER_DUPLICATES,
4
+ DATALAKE_HEADER_NEXT_CURSOR,
5
+ DATALAKE_HEADER_REJECTED,
6
+ DatalakeApiError,
7
+ datalakePlaneClearPath,
8
+ datalakePlaneDeletePath,
9
+ datalakePlaneGetManyPath,
10
+ datalakePlaneGetPath,
11
+ datalakePlaneInsertPath,
12
+ datalakePlaneNextPath,
13
+ datalakePlaneUsagePath
14
+ } from "@ariestools/aries-datalake-core/browser";
15
+
16
+ // src/AuthToken.ts
17
+ async function resolveAuthToken(source, audience) {
18
+ return typeof source === "function" ? await source({ audience }) : source;
19
+ }
20
+
21
+ // src/PayloadsClient.ts
22
+ function extractOrigin(urlWithPossiblePath) {
23
+ try {
24
+ const parsed = new URL(urlWithPossiblePath);
25
+ return `${parsed.protocol}//${parsed.host}`;
26
+ } catch {
27
+ return urlWithPossiblePath.replace(/\/$/, "");
28
+ }
29
+ }
30
+ var RestPayloadsClient = class {
31
+ authToken;
32
+ datalakeId;
33
+ fetchImpl;
34
+ origin;
35
+ constructor(options) {
36
+ this.origin = extractOrigin(options.baseUrl);
37
+ this.datalakeId = options.datalakeId;
38
+ this.authToken = options.authToken;
39
+ this.fetchImpl = options.fetchImpl ?? fetch;
40
+ }
41
+ async clear() {
42
+ return this.request(
43
+ datalakePlaneClearPath(this.datalakeId),
44
+ { method: "POST" }
45
+ );
46
+ }
47
+ async delete(hash) {
48
+ await this.request(
49
+ datalakePlaneDeletePath(this.datalakeId, hash),
50
+ { method: "DELETE" }
51
+ );
52
+ }
53
+ async get(hash) {
54
+ return this.request(datalakePlaneGetPath(this.datalakeId, hash));
55
+ }
56
+ async getMany(hashes) {
57
+ if (hashes.length === 0) return [];
58
+ return this.request(
59
+ datalakePlaneGetManyPath(this.datalakeId),
60
+ { method: "POST", body: hashes }
61
+ );
62
+ }
63
+ async insert(payloads) {
64
+ const body = payloads;
65
+ const { data, headers } = await this.requestWithHeaders(
66
+ datalakePlaneInsertPath(this.datalakeId),
67
+ { method: "POST", body }
68
+ );
69
+ return {
70
+ inserted: data,
71
+ summary: readInsertSummary(headers)
72
+ };
73
+ }
74
+ async next(options = {}) {
75
+ const params = new URLSearchParams();
76
+ if (options.limit !== void 0) params.set("limit", String(options.limit));
77
+ if (options.cursor) params.set("cursor", options.cursor);
78
+ if (options.schemas && options.schemas.length > 0) params.set("schemas", options.schemas.join(","));
79
+ if (options.order) params.set("order", options.order);
80
+ const suffix = params.toString();
81
+ const path = suffix ? `${datalakePlaneNextPath(this.datalakeId)}?${suffix}` : datalakePlaneNextPath(this.datalakeId);
82
+ const { data, headers } = await this.requestWithHeaders(path);
83
+ const nextCursor = headers.get(DATALAKE_HEADER_NEXT_CURSOR) ?? void 0;
84
+ return { payloads: data, nextCursor };
85
+ }
86
+ async usage() {
87
+ return this.request(datalakePlaneUsagePath(this.datalakeId));
88
+ }
89
+ async request(path, options = {}) {
90
+ const { data } = await this.requestWithHeaders(path, options);
91
+ return data;
92
+ }
93
+ async requestWithHeaders(path, options = {}) {
94
+ const method = options.method ?? "GET";
95
+ const token = await resolveAuthToken(this.authToken, this.datalakeId);
96
+ const headers = {
97
+ accept: "application/json",
98
+ authorization: `Bearer ${token}`
99
+ };
100
+ const init = {
101
+ credentials: "omit",
102
+ headers,
103
+ method,
104
+ redirect: "error"
105
+ };
106
+ if (options.body !== void 0) {
107
+ headers["content-type"] = "application/json";
108
+ init.body = JSON.stringify(options.body);
109
+ }
110
+ const response = await this.fetchImpl(`${this.origin}${path}`, init);
111
+ if (response.status === 204) return { data: void 0, headers: response.headers };
112
+ const text = await response.text();
113
+ const payload = text.length > 0 ? JSON.parse(text) : void 0;
114
+ if (!response.ok) {
115
+ const errorBody = isApiErrorBody(payload) ? payload : {
116
+ code: "internal",
117
+ message: `Unexpected ${response.status} response from ${method} data plane`
118
+ };
119
+ throw new DatalakeApiError(response.status, errorBody);
120
+ }
121
+ return { data: payload, headers: response.headers };
122
+ }
123
+ };
124
+ function readInsertSummary(headers) {
125
+ const duplicatesRaw = headers.get(DATALAKE_HEADER_DUPLICATES);
126
+ const duplicates = duplicatesRaw === null ? 0 : Number.parseInt(duplicatesRaw, 10);
127
+ const rejectedRaw = headers.get(DATALAKE_HEADER_REJECTED);
128
+ const rejected = rejectedRaw === null || rejectedRaw.length === 0 ? [] : rejectedRaw.split(",").map((value) => value.trim()).filter((value) => value.length > 0);
129
+ return {
130
+ duplicates: Number.isFinite(duplicates) ? duplicates : 0,
131
+ rejected
132
+ };
133
+ }
134
+ function isApiErrorBody(value) {
135
+ if (typeof value !== "object" || value === null) return false;
136
+ const maybe = value;
137
+ return typeof maybe.code === "string" && typeof maybe.message === "string";
138
+ }
139
+
140
+ // src/RestDatalakeClient.ts
141
+ import {
142
+ DATALAKE_CONTROL_AUDIENCE,
143
+ DatalakeApiError as DatalakeApiError2,
144
+ datalakeCollectionPath,
145
+ datalakeGrantPath,
146
+ datalakeGrantsPath,
147
+ datalakeResourcePath,
148
+ datalakeTokensPath
149
+ } from "@ariestools/aries-datalake-core/browser";
150
+ var RestDatalakeClient = class {
151
+ audience;
152
+ authToken;
153
+ baseUrl;
154
+ fetchImpl;
155
+ constructor(options) {
156
+ this.baseUrl = options.baseUrl.replace(/\/$/, "");
157
+ this.audience = options.audience ?? DATALAKE_CONTROL_AUDIENCE;
158
+ this.authToken = options.authToken;
159
+ this.fetchImpl = options.fetchImpl ?? fetch;
160
+ }
161
+ async create(request) {
162
+ const body = { name: request.name, config: request.config };
163
+ return this.request(datalakeCollectionPath(), { method: "POST", body });
164
+ }
165
+ async describe(idOrName) {
166
+ return this.request(datalakeResourcePath(idOrName));
167
+ }
168
+ async destroy(idOrName) {
169
+ await this.request(datalakeResourcePath(idOrName), { method: "DELETE" });
170
+ }
171
+ async grant(request) {
172
+ const body = { principal: request.principal, role: request.role };
173
+ return this.request(
174
+ datalakeGrantsPath(request.datalakeId),
175
+ { method: "POST", body }
176
+ );
177
+ }
178
+ async list() {
179
+ return this.request(datalakeCollectionPath());
180
+ }
181
+ async mintToken(request) {
182
+ const body = { role: request.role, ttlSeconds: request.ttlSeconds };
183
+ return this.request(
184
+ datalakeTokensPath(request.datalakeId),
185
+ { method: "POST", body }
186
+ );
187
+ }
188
+ async revoke(request) {
189
+ return this.request(
190
+ datalakeGrantPath(request.datalakeId, request.principal),
191
+ { method: "DELETE" }
192
+ );
193
+ }
194
+ async request(path, options = {}) {
195
+ const url = `${this.baseUrl}${path}`;
196
+ const method = options.method ?? "GET";
197
+ const token = await resolveAuthToken(this.authToken, this.audience);
198
+ const headers = {
199
+ accept: "application/json",
200
+ authorization: `Bearer ${token}`
201
+ };
202
+ const init = {
203
+ credentials: "omit",
204
+ headers,
205
+ method,
206
+ redirect: "error"
207
+ };
208
+ if (options.body !== void 0) {
209
+ headers["content-type"] = "application/json";
210
+ init.body = JSON.stringify(options.body);
211
+ }
212
+ const response = await this.fetchImpl(url, init);
213
+ if (response.status === 204) {
214
+ return void 0;
215
+ }
216
+ const text = await response.text();
217
+ const payload = text.length > 0 ? JSON.parse(text) : void 0;
218
+ if (!response.ok) {
219
+ const errorBody = isApiErrorBody2(payload) ? payload : {
220
+ code: "internal",
221
+ message: `Unexpected ${response.status} response from ${method} control plane`
222
+ };
223
+ throw new DatalakeApiError2(response.status, errorBody);
224
+ }
225
+ return payload;
226
+ }
227
+ };
228
+ function isApiErrorBody2(value) {
229
+ if (typeof value !== "object" || value === null) return false;
230
+ const maybe = value;
231
+ return typeof maybe.code === "string" && typeof maybe.message === "string";
232
+ }
233
+
234
+ // src/browser.ts
235
+ export * from "@ariestools/aries-datalake-core/browser";
236
+ export {
237
+ RestDatalakeClient,
238
+ RestPayloadsClient
239
+ };
240
+ //# sourceMappingURL=browser.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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": "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",
6
+ "names": ["DatalakeApiError", "isApiErrorBody", "DatalakeApiError"]
7
+ }
@@ -0,0 +1,9 @@
1
+ export interface AuthTokenRequest {
2
+ /** Exact JWT audience required by the target service or datalake. */
3
+ audience: string;
4
+ }
5
+ /** Invoked for every request so callers can obtain a fresh wallet JWT. */
6
+ export type AuthTokenSupplier = (request: AuthTokenRequest) => Promise<string>;
7
+ export type AuthTokenSource = AuthTokenSupplier | string;
8
+ export declare function resolveAuthToken(source: AuthTokenSource, audience: string): Promise<string>;
9
+ //# sourceMappingURL=AuthToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthToken.d.ts","sourceRoot":"","sources":["../../src/AuthToken.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,0EAA0E;AAC1E,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"}
@@ -0,0 +1,45 @@
1
+ import type { DatalakeConfig, DatalakeDescriptor, DatalakePrincipal, DatalakeRole, DatalakeToken } from '@ariestools/aries-datalake-core/browser';
2
+ /**
3
+ * Request to create a new datalake. The `name` is scoped to the authenticated
4
+ * owner; two users may each have a datalake named "main" without conflict.
5
+ */
6
+ export interface CreateDatalakeRequest {
7
+ config: DatalakeConfig;
8
+ name: string;
9
+ }
10
+ /**
11
+ * Request to grant access. If `principal === 'public'` the grant opens the
12
+ * datalake to unauthenticated callers at the given role.
13
+ */
14
+ export interface GrantRequest {
15
+ datalakeId: string;
16
+ principal: DatalakePrincipal;
17
+ role: DatalakeRole;
18
+ }
19
+ export interface RevokeRequest {
20
+ datalakeId: string;
21
+ principal: DatalakePrincipal;
22
+ }
23
+ /**
24
+ * Request to mint a scoped JWT for SDK/CI use.
25
+ */
26
+ export interface TokenRequest {
27
+ datalakeId: string;
28
+ role: DatalakeRole;
29
+ /** Lifetime in seconds. Capped server-side. Defaults to 1 hour. */
30
+ ttlSeconds?: number;
31
+ }
32
+ /**
33
+ * Stable interface every Aries datalake implementation conforms to. Concrete
34
+ * implementations can vary in transport without changing callers.
35
+ */
36
+ export interface DatalakeClient {
37
+ create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor>;
38
+ describe(idOrName: string): Promise<DatalakeDescriptor>;
39
+ destroy(idOrName: string): Promise<void>;
40
+ grant(request: GrantRequest): Promise<DatalakeDescriptor>;
41
+ list(): Promise<DatalakeDescriptor[]>;
42
+ mintToken(request: TokenRequest): Promise<DatalakeToken>;
43
+ revoke(request: RevokeRequest): Promise<DatalakeDescriptor>;
44
+ }
45
+ //# sourceMappingURL=DatalakeClient.d.ts.map
@@ -0,0 +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,mEAAmE;IACnE,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"}
@@ -0,0 +1,25 @@
1
+ import type { DatalakeDescriptor, DatalakeToken } from '@ariestools/aries-datalake-core';
2
+ import type { CreateDatalakeRequest, DatalakeClient, GrantRequest, RevokeRequest, TokenRequest } from './DatalakeClient.ts';
3
+ /**
4
+ * Filesystem-backed stub implementation of `DatalakeClient` used during P0
5
+ * development. Pretends to provision datalakes instantly, persists metadata
6
+ * to `~/.aries/datalakes/local-store.json`, and mints opaque non-JWT tokens.
7
+ *
8
+ * Not suitable for production use — replace with `RestDatalakeClient` once
9
+ * the control plane is live.
10
+ */
11
+ export declare class LocalDatalakeClient implements DatalakeClient {
12
+ create(request: CreateDatalakeRequest): Promise<DatalakeDescriptor>;
13
+ describe(idOrName: string): Promise<DatalakeDescriptor>;
14
+ destroy(idOrName: string): Promise<void>;
15
+ grant(request: GrantRequest): Promise<DatalakeDescriptor>;
16
+ list(): Promise<DatalakeDescriptor[]>;
17
+ mintToken(request: TokenRequest): Promise<DatalakeToken>;
18
+ revoke(request: RevokeRequest): Promise<DatalakeDescriptor>;
19
+ }
20
+ /**
21
+ * Convenience: the absolute path where the local store persists state.
22
+ * Useful in tests and for `aries datalake describe --debug`.
23
+ */
24
+ export declare function getLocalStoreLocation(): string;
25
+ //# sourceMappingURL=LocalDatalakeClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalDatalakeClient.d.ts","sourceRoot":"","sources":["../../src/LocalDatalakeClient.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAElB,aAAa,EACd,MAAM,iCAAiC,CAAA;AAExC,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,YAAY,EACb,MAAM,qBAAqB,CAAA;AAsD5B;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAClD,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwCnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKvD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoBzD,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIrC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBxD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAQlE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C"}