Skip to content

Commit 178f2ba

Browse files
author
Wes Biggs
committed
Reorg
1 parent 91f78bb commit 178f2ba

35 files changed

+535
-487
lines changed

README.md

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Official DSNP Schemas
22

3-
**Matching DSNP Version: v1.2.0**
3+
**Matching DSNP Version: pre-v1.3.0**
44

55
## Use Schemas as Library
66

@@ -9,12 +9,38 @@
99
npm install @dsnp/schemas
1010
```
1111

12-
### Use Schema
12+
13+
### Get Announcement Type or User Data Type Metadata
1314

1415
```typescript
15-
import { dsnp } from "@dsnp/schemas";
16+
import {
17+
AnnouncementType,
18+
descriptorForAnnouncementType,
19+
UserDataType,
20+
descriptorForUserDataType
21+
} from "@dsnp/schemas";
22+
23+
const broadcastSchema = descriptorForAnnouncementType(AnnouncementType.Broadcast);
24+
console.log(broadcastSchema);
25+
/*
26+
{
27+
announcementType: 2,
28+
parquetSchema: [ ... ],
29+
tombstoneAllowed: true
30+
}
31+
*/
1632

17-
console.log(dsnp.broadcast);
33+
34+
const publicFollowsSchema = descriptorForUserDataType(UserDataType.PublicFollows);
35+
console.log(publicFollowsSchema);
36+
/*
37+
{
38+
systemName: 'publicFollows',
39+
encryptionAlgorithm: null,
40+
compressionCodec: 'DEFLATE',
41+
avroSchema: { ... }
42+
}
43+
*/
1844
```
1945

2046
### Write Parquet files
@@ -24,14 +50,14 @@ npm install @dsnp/parquetjs
2450
```
2551

2652
```typescript
27-
import { Announcement } from "@dsnp/schemas";
53+
import { AnnouncementType } from "@dsnp/schemas";
2854
import { parquet } from "@dsnp/schemas";
2955
import { ParquetWriter } from "@dsnp/parquetjs";
3056

31-
const [parquetSchema, writerOptions] = parquet.fromDSNPSchema(Announcement["broadcast"].parquetSchema);
57+
const [parquetSchema, writerOptions] = parquet.fromDSNPSchema(descriptorForAnnouncementType(AnnouncementType.Broadcast).parquetSchema);
3258
const writer = await ParquetWriter.openFile(parquetSchema, "./file.parquet", writerOptions);
3359
writer.appendRow({
34-
announcementType: 2,
60+
announcementType: AnnouncementType.Broadcast,
3561
contentHash: "0x1234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
3662
fromId: 78187493520,
3763
url: "https://spec.dsnp.org/DSNP/Types/Broadcast.html",
@@ -42,11 +68,10 @@ await writer.close();
4268
### Write Avro objects
4369

4470
```typescript
45-
import { UserData } from "@dsnp/schemas";
71+
import { UserDataType, descriptorForUserDataType } from "@dsnp/schemas";
4672
import avro from "avsc";
4773

48-
const publicKeyAvroSchema = avro.Type.forSchema(UserData["keyAgreementPublicKeys"].avroSchema);
49-
const publicKeyMulticodec = Buffer.from([0xec, 0x01, 0x00, ...]);
74+
const publicKeyAvroSchema = avro.Type.forSchema(descriptorForUserDataType(UserDataType.KeyAgreementPublicKeys).avroSchema);
75+
const publicKeyMulticodec = Buffer.from("ec01000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f", "hex");
5076
const avroBuffer = publicKeyAvroSchema.toBuffer({ publicKey: publicKeyMulticodec });
5177
```
52-

announcements.spec.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { AnnouncementType, descriptorForAnnouncementType } from "./announcements.js";
2+
3+
describe("Announcements API", () => {
4+
it("has numeric AnnouncementType values", () => {
5+
expect(AnnouncementType.Broadcast).toStrictEqual(2);
6+
});
7+
8+
it("allows lookup by enum", () => {
9+
expect(descriptorForAnnouncementType(AnnouncementType.Broadcast).announcementType).toStrictEqual(2);
10+
});
11+
});

announcements.ts

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import broadcast from "./parquet/broadcast.json";
2+
import reaction from "./parquet/reaction.json";
3+
import reply from "./parquet/reply.json";
4+
import tombstone from "./parquet/tombstone.json";
5+
import update from "./parquet/update.json";
6+
7+
import { DSNPParquetSchema } from "./types/dsnp-parquet.js";
8+
9+
export enum AnnouncementType {
10+
Tombstone = 0,
11+
Broadcast = 2,
12+
Reply = 3,
13+
Reaction = 4,
14+
Update = 6,
15+
}
16+
17+
export type AnnouncementDescriptor = {
18+
announcementType: AnnouncementType;
19+
parquetSchema: DSNPParquetSchema;
20+
tombstoneAllowed: boolean;
21+
};
22+
23+
export function descriptorForAnnouncementType(announcementType: AnnouncementType): AnnouncementDescriptor {
24+
switch (announcementType) {
25+
case AnnouncementType.Tombstone:
26+
return {
27+
announcementType: AnnouncementType.Tombstone,
28+
parquetSchema: tombstone as DSNPParquetSchema,
29+
tombstoneAllowed: false,
30+
};
31+
case AnnouncementType.Broadcast:
32+
return {
33+
announcementType: AnnouncementType.Broadcast,
34+
parquetSchema: broadcast as DSNPParquetSchema,
35+
tombstoneAllowed: true,
36+
};
37+
case AnnouncementType.Reply:
38+
return {
39+
announcementType: AnnouncementType.Reply,
40+
parquetSchema: reply as DSNPParquetSchema,
41+
tombstoneAllowed: true,
42+
};
43+
case AnnouncementType.Reaction:
44+
return {
45+
announcementType: AnnouncementType.Reaction,
46+
parquetSchema: reaction as DSNPParquetSchema,
47+
tombstoneAllowed: false,
48+
};
49+
case AnnouncementType.Update:
50+
return {
51+
announcementType: AnnouncementType.Update,
52+
parquetSchema: update as DSNPParquetSchema,
53+
tombstoneAllowed: false,
54+
};
55+
}
56+
throw new Error("Invalid enum value");
57+
}

avro/GraphEdge.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"namespace": "org.dsnp",
3+
"name": "GraphEdge",
4+
"type": "record",
5+
"doc": "A relationship to another DSNP user",
6+
"fields": [
7+
{
8+
"name": "userId",
9+
"type": "long",
10+
"doc": "The other user's DSNP User Id"
11+
},
12+
{
13+
"name": "since",
14+
"type": "long",
15+
"doc": "Timestamp in Unix epoch seconds when this relationship was originally established"
16+
}
17+
]
18+
}

avro/GraphEdge.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import graphEdgeSchema from "./GraphEdge.js";
2-
import avro from "avsc";
1+
import graphEdgeSchema from "./GraphEdge.json";
2+
import { Type, Schema } from "avsc";
33

44
describe("Graph Edge Schema", () => {
55
it("Is Avro", () => {
6-
const parsed = avro.Type.forSchema(graphEdgeSchema);
6+
const parsed = Type.forSchema(graphEdgeSchema as Schema);
77
expect(parsed).toBeDefined();
88
});
99

1010
it("Encodes and decodes object", () => {
11-
const parsed = avro.Type.forSchema(graphEdgeSchema);
11+
const parsed = Type.forSchema(graphEdgeSchema as Schema);
1212
const encoded = parsed.toBuffer({ userId: 123456789, since: 1722524715 });
1313
const decoded = parsed.fromBuffer(encoded);
1414
expect(decoded.userId).toStrictEqual(123456789);

avro/GraphEdge.ts

Lines changed: 0 additions & 22 deletions
This file was deleted.

avro/PRId.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"namespace": "org.dsnp",
3+
"name": "PRId",
4+
"type": "fixed",
5+
"size": 8,
6+
"doc": "Pseudonymous Relationship Identifier"
7+
}

avro/PRId.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import pridSchema from "./PRId.js";
2-
import avro from "avsc";
1+
import pridSchema from "./PRId.json";
2+
import { Type, Schema } from "avsc";
33

44
describe("PRId Schema", () => {
55
it("Is Avro", () => {
6-
const parsed = avro.Type.forSchema(pridSchema);
6+
const parsed = Type.forSchema(pridSchema as Schema);
77
expect(parsed).toBeDefined();
88
});
99

1010
it("Encodes and decodes buffer", () => {
11-
const parsed = avro.Type.forSchema(pridSchema);
11+
const parsed = Type.forSchema(pridSchema as Schema);
1212
const someBytes = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7]);
1313
const encoded = parsed.toBuffer(someBytes);
1414
const decoded = parsed.fromBuffer(encoded);

avro/PRId.ts

Lines changed: 0 additions & 11 deletions
This file was deleted.

avro/ProfileResource.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"namespace": "org.dsnp",
3+
"name": "ProfileResource",
4+
"type": "record",
5+
"doc": "A relationship to another DSNP user",
6+
"fields": [
7+
{
8+
"name": "type",
9+
"type": "int",
10+
"doc": "Type of resource"
11+
},
12+
{
13+
"name": "contentAddress",
14+
"type": "string",
15+
"doc": "Content address for the resource"
16+
}
17+
]
18+
}

avro/ProfileResource.spec.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import profileResourceSchema from "./ProfileResource.json";
2+
import { Type, Schema } from "avsc";
3+
4+
describe("Profile Resource Schema", () => {
5+
it("Is Avro", () => {
6+
const parsed = Type.forSchema(profileResourceSchema as Schema);
7+
expect(parsed).toBeDefined();
8+
});
9+
10+
it("Encodes and decodes object", () => {
11+
const parsed = Type.forSchema(profileResourceSchema as Schema);
12+
const exampleCid = "bafybeida7z24mig7j3oagjru7s2gw6xbfkh7fryvah6ho2ar77xb7aleom";
13+
const encoded = parsed.toBuffer({
14+
type: 1,
15+
contentAddress: exampleCid,
16+
});
17+
const decoded = parsed.fromBuffer(encoded);
18+
expect(decoded.type).toStrictEqual(1);
19+
expect(decoded.contentAddress).toStrictEqual(exampleCid);
20+
});
21+
});

avro/PublicKey.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"type": "record",
3+
"name": "PublicKey",
4+
"namespace": "org.dsnp",
5+
"fields": [
6+
{
7+
"name": "publicKey",
8+
"doc": "Multicodec public key",
9+
"type": "bytes"
10+
}
11+
]
12+
}

avro/PublicKey.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import publicKeySchema from "./PublicKey.js";
2-
import avro from "avsc";
1+
import publicKeySchema from "./PublicKey.json";
2+
import { Type, Schema } from "avsc";
33

44
describe("Public Key Schema", () => {
55
it("Is Avro", () => {
6-
const parsed = avro.Type.forSchema(publicKeySchema);
6+
const parsed = Type.forSchema(publicKeySchema as Schema);
77
expect(parsed).toBeDefined();
88
});
99

1010
it("Encodes and decodes object", () => {
11-
const parsed = avro.Type.forSchema(publicKeySchema);
11+
const parsed = Type.forSchema(publicKeySchema as Schema);
1212
const someBytes = Buffer.from([0, 1, 2, 3]);
1313
const encoded = parsed.toBuffer({ publicKey: someBytes });
1414
const decoded = parsed.fromBuffer(encoded);

avro/PublicKey.ts

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
 (0)