Skip to content

Commit b2ef39a

Browse files
authored
Merge pull request #114 from aserto-dev/update_deps
update node-directory
2 parents e1b0354 + b39ed4d commit b2ef39a

File tree

7 files changed

+177
-47
lines changed

7 files changed

+177
-47
lines changed

__tests__/directory/v3/index.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,7 @@ describe("DirectoryV3", () => {
11791179
const result = await directory.getManifest();
11801180
expect(result).toEqual({
11811181
body: "test",
1182+
model: {},
11821183
etag: "",
11831184
updatedAt: undefined,
11841185
});

__tests__/integration/index.test.ts

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import {
1212
DirectoryServiceV3,
1313
DirectoryV3,
1414
displayStateMap,
15+
HEADER_ASERTO_MANIFEST_REQUEST,
1516
ImportMsgCase,
1617
ImportOpCode,
18+
MANIFEST_REQUEST_DEFAULT,
1719
NotFoundError,
1820
policyContext,
1921
policyInstance,
@@ -71,6 +73,7 @@ describe("Integration", () => {
7173
expect(res.status).toBe(200);
7274
expect(res.body).toEqual({
7375
check: true,
76+
context: {},
7477
trace: [],
7578
});
7679
});
@@ -601,11 +604,39 @@ describe("Integration", () => {
601604

602605
expect(res.status).toBe(200);
603606
expect(res.body).toEqual([
604-
{},
605-
{},
606607
{
607-
object: { recv: "2", set: "2", delete: "0", error: "0" },
608-
relation: { recv: "1", set: "1", delete: "0", error: "0" },
608+
counter: {
609+
delete: "0",
610+
error: "0",
611+
recv: "2",
612+
set: "2",
613+
type: "object",
614+
},
615+
},
616+
{
617+
counter: {
618+
delete: "0",
619+
error: "0",
620+
recv: "1",
621+
set: "1",
622+
type: "relation",
623+
},
624+
},
625+
{
626+
object: {
627+
recv: "2",
628+
set: "2",
629+
delete: "0",
630+
error: "0",
631+
type: "object",
632+
},
633+
relation: {
634+
recv: "1",
635+
set: "1",
636+
delete: "0",
637+
error: "0",
638+
type: "relation",
639+
},
609640
},
610641
]);
611642
});
@@ -948,7 +979,14 @@ describe("Integration", () => {
948979
it("get manifest serializes to json", async () => {
949980
const GetManifest = async (_req: Request, res: Response) => {
950981
try {
951-
const manifest = await directoryClient.getManifest();
982+
const manifest = await directoryClient.getManifest(
983+
{},
984+
{
985+
headers: {
986+
[HEADER_ASERTO_MANIFEST_REQUEST]: MANIFEST_REQUEST_DEFAULT,
987+
},
988+
},
989+
);
952990
res.status(200).send(manifest);
953991
} catch (error) {
954992
console.error(error);
@@ -971,6 +1009,7 @@ model:
9711009
9721010
# object type definitions
9731011
types:
1012+
### display_name: User ###
9741013
# user represents a user that can be granted role(s)
9751014
user:
9761015
relations:
@@ -980,19 +1019,19 @@ types:
9801019
### display_name: user#in_management_chain ###
9811020
in_management_chain: manager | manager->in_management_chain
9821021
983-
1022+
### display_name: Group ###
9841023
# group represents a collection of users and/or (nested) groups
9851024
group:
9861025
relations:
9871026
member: user | group#member
9881027
989-
1028+
### display_name: Identity ###
9901029
# identity represents a collection of identities for users
9911030
identity:
9921031
relations:
9931032
identifier: user
9941033
995-
1034+
### display_name: Resource Creator ###
9961035
# resource creator represents a user type that can create new resources
9971036
resource-creator:
9981037
relations:
@@ -1017,6 +1056,7 @@ types:
10171056

10181057
expect(res.body).toEqual({
10191058
body: expectedBody,
1059+
model: {},
10201060
updatedAt: expect.any(String),
10211061
etag: expect.any(String),
10221062
});

lib/directory/v3/index.ts

Lines changed: 74 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,18 @@ import {
99
ImportRequestSchema,
1010
} from "@aserto/node-directory/src/gen/cjs/aserto/directory/importer/v3/importer_pb";
1111
import {
12+
MetadataSchema,
1213
Model,
1314
SetManifestRequestSchema,
1415
} from "@aserto/node-directory/src/gen/cjs/aserto/directory/model/v3/model_pb";
1516
import {
1617
Body,
1718
DeleteManifestRequest,
18-
GetManifestRequest,
1919
Metadata,
2020
} from "@aserto/node-directory/src/gen/cjs/aserto/directory/model/v3/model_pb";
2121
import {
2222
CheckRequestSchema,
23+
ChecksRequestSchema,
2324
GetGraphRequestSchema,
2425
GetObjectManyRequestSchema,
2526
GetObjectRequestSchema,
@@ -63,6 +64,8 @@ import { DsRegistry } from "./serializer";
6364
import {
6465
CheckRequest,
6566
CheckResponse,
67+
ChecksRequest,
68+
ChecksResponse,
6669
DeleteManifestResponse,
6770
DeleteObjectRequest,
6871
DeleteObjectResponse,
@@ -73,6 +76,7 @@ import {
7376
ExportResponse,
7477
GetGraphRequest,
7578
GetGraphResponse,
79+
GetManifestRequest,
7680
GetManifestResponse,
7781
GetObjectManyRequest,
7882
GetObjectManyResponse,
@@ -129,6 +133,18 @@ export enum ImportMsgCase {
129133

130134
const ADDRESS_REGEX = /https?:\/\//;
131135

136+
export const HEADER_ASERTO_MANIFEST_REQUEST =
137+
"Aserto-Manifest-Request" as const;
138+
139+
// Return the manifest metadata and body.
140+
export const MANIFEST_REQUEST_DEFAULT = "" as const;
141+
// Only return the manifest metadata.
142+
export const MANIFEST_REQUEST_METADATA_ONLY = "metadata-only" as const;
143+
// Only return the manifest metadata and model.
144+
export const MANIFEST_REQUEST_MODEL_ONLY = "model-only" as const;
145+
// Return the manifest metadata, body, and model.
146+
export const MANIFEST_REQUEST_WITH_MODEL = "with-model" as const;
147+
132148
export class DirectoryV3 {
133149
ReaderClient: Client<typeof Reader>;
134150
WriterClient: Client<typeof Writer>;
@@ -313,6 +329,22 @@ export class DirectoryV3 {
313329
}
314330
}
315331

332+
async checks(
333+
params: ChecksRequest,
334+
options?: CallOptions,
335+
): Promise<ChecksResponse> {
336+
try {
337+
const response = await this.ReaderClient.checks(
338+
create(ChecksRequestSchema, params),
339+
options,
340+
);
341+
342+
return this.registry.serializeResponse(response);
343+
} catch (error) {
344+
throw handleError(error, "checks");
345+
}
346+
}
347+
316348
async object(
317349
params: GetObjectRequest,
318350
options?: CallOptions,
@@ -526,28 +558,51 @@ export class DirectoryV3 {
526558
};
527559
});
528560

529-
const bodyData = data
561+
return this.buildManifestResponse(data);
562+
} catch (error) {
563+
throw handleError(error, "getManifest");
564+
}
565+
}
566+
567+
private buildManifestResponse(
568+
data: { [x: string]: JsonObject | Metadata | Body | undefined }[],
569+
) {
570+
let bodyData: Uint8Array[] = [new Uint8Array()];
571+
let modelData: JsonObject = {};
572+
let metadata: Metadata = create(MetadataSchema, {});
573+
let body: string = "";
574+
575+
metadata = data[0]?.metadata as Metadata;
576+
577+
bodyData = data
578+
.map((el) => {
579+
return el["body"];
580+
})
581+
.filter((el) => el !== undefined)
582+
.map((el) => {
583+
return (el as Body)?.data;
584+
});
585+
586+
body = new TextDecoder().decode(mergeUint8Arrays(...bodyData));
587+
588+
modelData =
589+
data
530590
.map((el) => {
531-
return el["body"];
591+
return el["model"];
532592
})
533593
.filter((el) => el !== undefined)
534594
.map((el) => {
535-
return (el as Body)?.data;
536-
});
537-
538-
const body = new TextDecoder().decode(mergeUint8Arrays(...bodyData));
539-
const metadata = data[0]?.metadata as Metadata;
540-
541-
return {
542-
body,
543-
updatedAt: metadata?.updatedAt
544-
? this.registry.serializeResponse(metadata?.updatedAt)
545-
: undefined,
546-
etag: metadata?.etag,
547-
};
548-
} catch (error) {
549-
throw handleError(error, "getManifest");
550-
}
595+
return el as JsonObject;
596+
})?.[0] || {};
597+
598+
return {
599+
body,
600+
model: modelData,
601+
updatedAt: metadata?.updatedAt
602+
? this.registry.serializeResponse(metadata?.updatedAt)
603+
: undefined,
604+
etag: metadata?.etag,
605+
};
551606
}
552607

553608
async setManifest(

lib/directory/v3/types.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ import {
1717
DeleteManifestResponse as DeleteManifestResponse$,
1818
SetManifestResponse as SetManifestResponse$,
1919
} from "@aserto/node-directory/src/gen/cjs/aserto/directory/model/v3/model_pb";
20+
import { GetManifestRequest as GetManifestRequest$ } from "@aserto/node-directory/src/gen/cjs/aserto/directory/model/v3/model_pb";
2021
import {
2122
CheckRequest as CheckRequest$,
2223
CheckResponse as CheckResponse$,
24+
ChecksRequest as ChecksRequest$,
25+
ChecksResponse as ChecksResponse$,
2326
GetGraphRequest as GetGraphRequest$,
2427
GetGraphResponse as GetGraphResponse$,
2528
GetObjectManyRequest as GetObjectManyRequest$,
@@ -49,6 +52,7 @@ import {
4952
DescFile,
5053
DescMessage,
5154
DescService,
55+
JsonObject,
5256
Registry,
5357
} from "@bufbuild/protobuf";
5458
import { Timestamp } from "@bufbuild/protobuf/wkt";
@@ -170,6 +174,13 @@ export type DeleteRelationRequest = Optional<
170174
>;
171175

172176
export type CheckRequest = Optional<Omit<CheckRequest$, "$typeName">, "trace">;
177+
export type ChecksRequest = Omit<
178+
ChecksRequest$,
179+
"$typeName" | "default" | "checks"
180+
> & {
181+
default?: CheckRequest;
182+
checks: CheckRequest[];
183+
};
173184

174185
export type GetGraphRequest = Optional<
175186
Omit<GetGraphRequest$, "$typeName">,
@@ -205,8 +216,14 @@ export type ImportRequest = Omit<
205216
"$typeName"
206217
>;
207218

219+
export type GetManifestRequest = Omit<
220+
GetManifestRequest$,
221+
"$typeName" | "$unknown"
222+
>;
223+
208224
export type GetManifestResponse = {
209225
body: string;
226+
model: JsonObject;
210227
updatedAt: Timestamp | undefined;
211228
etag: string;
212229
};
@@ -217,6 +234,13 @@ export type PaginationResponse = Omit<
217234
>;
218235

219236
export type CheckResponse = Omit<CheckResponse$, "$typeName" | "$unknown">;
237+
export type ChecksResponse = Omit<
238+
ChecksResponse$,
239+
"$typeName" | "$unknown" | "checks"
240+
> & {
241+
checks: CheckResponse[];
242+
};
243+
220244
export type GetGraphResponse = Omit<
221245
GetGraphResponse$,
222246
"$typeName" | "$unknown"

lib/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@ import {
1717
createImportRequest,
1818
DirectoryServiceV3,
1919
DirectoryV3,
20+
HEADER_ASERTO_MANIFEST_REQUEST,
2021
ImportMsgCase,
22+
MANIFEST_REQUEST_DEFAULT,
23+
MANIFEST_REQUEST_METADATA_ONLY,
24+
MANIFEST_REQUEST_MODEL_ONLY,
25+
MANIFEST_REQUEST_WITH_MODEL,
2126
objectPropertiesAsStruct,
2227
readAsyncIterable,
2328
serializeAsyncIterable,
@@ -39,11 +44,16 @@ export {
3944
DirectoryV3,
4045
DirectoryV3Config,
4146
displayStateMap,
47+
HEADER_ASERTO_MANIFEST_REQUEST,
4248
identityContext,
4349
ImportMsgCase,
4450
is,
4551
jwtAuthz,
4652
JWTIdentityMapper,
53+
MANIFEST_REQUEST_DEFAULT,
54+
MANIFEST_REQUEST_METADATA_ONLY,
55+
MANIFEST_REQUEST_MODEL_ONLY,
56+
MANIFEST_REQUEST_WITH_MODEL,
4757
ManualIdentityMapper,
4858
Middleware,
4959
ObjectIDFromVar,

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@
4545
"homepage": "https://github.com/aserto-dev/aserto-node#readme",
4646
"dependencies": {
4747
"@aserto/node-authorizer": "^0.21.0",
48-
"@aserto/node-directory": "^0.32.0",
48+
"@aserto/node-directory": "^0.33.0",
4949
"@bufbuild/protobuf": "^2.2.3",
50-
"@connectrpc/connect": "^2.0.0",
51-
"@connectrpc/connect-node": "^2.0.0",
50+
"@connectrpc/connect": "^2.0.1",
51+
"@connectrpc/connect-node": "^2.0.1",
5252
"express": "^4.21.2",
5353
"jwt-decode": "^4.0.0"
5454
},

0 commit comments

Comments
 (0)