@opreturnsocial/protocol 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ import { ParsedOrsResult } from "./types.js";
2
+ /**
3
+ * Parse an ORS OP_RETURN payload.
4
+ * Format: magic(3) + version(1) + pubkey(32) + sig(64) + kind(1) + kind-specific data
5
+ * Minimum length: 102 bytes (101-byte header + 1 byte minimum data)
6
+ */
7
+ export declare function parseORSPayload(data: Buffer): ParsedOrsResult;
8
+ export interface V1ChunkInfo {
9
+ chunkNum: number;
10
+ totalChunks?: number;
11
+ bodySlice: Buffer;
12
+ }
13
+ /**
14
+ * Parse a v1 chunk from raw OP_RETURN payload bytes (magic already detected).
15
+ *
16
+ * Chunk 0: ORS(3) + 0x01(1) + 0x00(1) + totalChunks(1) + bodySlice
17
+ * Chunk N: ORS(3) + 0x01(1) + N(1) + bodySlice
18
+ */
19
+ export declare function parseV1Chunk(data: Buffer): V1ChunkInfo | null;
20
+ /**
21
+ * Concatenate ordered body slices and parse the assembled body.
22
+ *
23
+ * body = pubkey(32) + sig(64) + kind(1) + kind_data
24
+ *
25
+ * Returns null if the assembled data is too short to be valid.
26
+ */
27
+ export declare function assembleV1Body(slices: Buffer[]): {
28
+ pubkey: Buffer;
29
+ sig: Buffer;
30
+ kind: number;
31
+ kindData: Buffer;
32
+ } | null;
33
+ //# sourceMappingURL=decode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"AAAA,OAAO,EA0BL,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CA0F7D;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAoB7D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,CAWP"}
package/dist/decode.js ADDED
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseORSPayload = parseORSPayload;
4
+ exports.parseV1Chunk = parseV1Chunk;
5
+ exports.assembleV1Body = assembleV1Body;
6
+ const types_js_1 = require("./types.js");
7
+ /**
8
+ * Parse an ORS OP_RETURN payload.
9
+ * Format: magic(3) + version(1) + pubkey(32) + sig(64) + kind(1) + kind-specific data
10
+ * Minimum length: 102 bytes (101-byte header + 1 byte minimum data)
11
+ */
12
+ function parseORSPayload(data) {
13
+ // Check minimum length: header(101) + at least 1 byte data
14
+ if (data.length < types_js_1.DATA_OFFSET + 1) {
15
+ return { supported: false, reason: "Too short" };
16
+ }
17
+ // Check magic
18
+ if (!data.subarray(0, 3).equals(types_js_1.ORS_MAGIC)) {
19
+ return { supported: false, reason: "Wrong magic bytes" };
20
+ }
21
+ // Check version
22
+ const version = data[3];
23
+ if (version !== types_js_1.ORS_VERSION) {
24
+ return { supported: false, reason: `Unsupported version: ${version}` };
25
+ }
26
+ // Extract fixed-length header fields
27
+ const pubkey = data.subarray(types_js_1.PUBKEY_OFFSET, types_js_1.SIG_OFFSET).toString("hex");
28
+ const sig = data.subarray(types_js_1.SIG_OFFSET, types_js_1.KIND_OFFSET).toString("hex");
29
+ // Read kind byte at offset 100
30
+ const kind = data[types_js_1.KIND_OFFSET];
31
+ if (kind === types_js_1.KIND_PROFILE_UPDATE) {
32
+ // PROFILE_UPDATE: propertyKind at 101, value from 102
33
+ if (data.length < types_js_1.PROFILE_VALUE_OFFSET) {
34
+ return { supported: false, reason: "Too short for PROFILE_UPDATE" };
35
+ }
36
+ const propertyKind = data[types_js_1.PROPERTY_KIND_OFFSET];
37
+ const valueBytes = data.subarray(types_js_1.PROFILE_VALUE_OFFSET);
38
+ let content;
39
+ if (propertyKind === types_js_1.PROPERTY_BOT) {
40
+ content = valueBytes[0] === 0x01 ? "true" : "false";
41
+ }
42
+ else {
43
+ content = valueBytes.toString("utf8");
44
+ }
45
+ const post = { kind: 0x02, propertyKind, content, pubkey, sig };
46
+ return { supported: true, post };
47
+ }
48
+ if (kind === types_js_1.KIND_TEXT_REPLY) {
49
+ // TEXT_REPLY: parentTxid(32) at 101, content from 133
50
+ if (data.length < types_js_1.REPLY_CONTENT_OFFSET + 1) {
51
+ return { supported: false, reason: "Too short for TEXT_REPLY" };
52
+ }
53
+ const parentTxid = data.subarray(types_js_1.PARENT_TXID_OFFSET, types_js_1.REPLY_CONTENT_OFFSET).toString("hex");
54
+ const content = data.subarray(types_js_1.REPLY_CONTENT_OFFSET).toString("utf8");
55
+ const post = { kind: 0x03, parentTxid, content, pubkey, sig };
56
+ return { supported: true, post };
57
+ }
58
+ if (kind === types_js_1.KIND_REPOST) {
59
+ // REPOST: referencedTxid(32) at 101-132, no content
60
+ if (data.length < types_js_1.REPLY_CONTENT_OFFSET) {
61
+ return { supported: false, reason: "Too short for REPOST" };
62
+ }
63
+ const referencedTxid = data.subarray(types_js_1.PARENT_TXID_OFFSET, types_js_1.REPLY_CONTENT_OFFSET).toString("hex");
64
+ const post = { kind: 0x04, referencedTxid, pubkey, sig };
65
+ return { supported: true, post };
66
+ }
67
+ if (kind === types_js_1.KIND_QUOTE_REPOST) {
68
+ // QUOTE_REPOST: referencedTxid(32) at 101-132, content from 133
69
+ if (data.length < types_js_1.REPLY_CONTENT_OFFSET + 1) {
70
+ return { supported: false, reason: "Too short for QUOTE_REPOST" };
71
+ }
72
+ const referencedTxid = data.subarray(types_js_1.PARENT_TXID_OFFSET, types_js_1.REPLY_CONTENT_OFFSET).toString("hex");
73
+ const content = data.subarray(types_js_1.REPLY_CONTENT_OFFSET).toString("utf8");
74
+ const post = { kind: 0x05, referencedTxid, content, pubkey, sig };
75
+ return { supported: true, post };
76
+ }
77
+ if (kind === types_js_1.KIND_FOLLOW) {
78
+ // FOLLOW: targetPubkey(32) at 101, isFollow(1) at 133
79
+ if (data.length < types_js_1.DATA_OFFSET + types_js_1.PUBKEY_BYTES + 1) {
80
+ return { supported: false, reason: "Too short for FOLLOW" };
81
+ }
82
+ const targetPubkey = data.subarray(types_js_1.DATA_OFFSET, types_js_1.DATA_OFFSET + types_js_1.PUBKEY_BYTES).toString("hex");
83
+ const isFollow = data[types_js_1.DATA_OFFSET + types_js_1.PUBKEY_BYTES] === 0x01;
84
+ const post = { kind: 0x06, targetPubkey, isFollow, pubkey, sig };
85
+ return { supported: true, post };
86
+ }
87
+ // TEXT_NOTE and other kinds: content is raw UTF-8 from offset 101
88
+ const content = data.subarray(types_js_1.DATA_OFFSET).toString("utf8");
89
+ const post = { kind, content, pubkey, sig };
90
+ return { supported: true, post };
91
+ }
92
+ /**
93
+ * Parse a v1 chunk from raw OP_RETURN payload bytes (magic already detected).
94
+ *
95
+ * Chunk 0: ORS(3) + 0x01(1) + 0x00(1) + totalChunks(1) + bodySlice
96
+ * Chunk N: ORS(3) + 0x01(1) + N(1) + bodySlice
97
+ */
98
+ function parseV1Chunk(data) {
99
+ if (data.length < 5)
100
+ return null;
101
+ if (!data.subarray(0, 3).equals(types_js_1.ORS_MAGIC))
102
+ return null;
103
+ if (data[3] !== types_js_1.ORS_VERSION_V1)
104
+ return null;
105
+ const chunkNum = data[4];
106
+ if (chunkNum === 0) {
107
+ // Root chunk requires at least 1 body byte after the 6-byte header
108
+ if (data.length < 7)
109
+ return null;
110
+ const totalChunks = data[5];
111
+ if (totalChunks < 2)
112
+ return null; // degenerate
113
+ const bodySlice = Buffer.from(data.subarray(6));
114
+ return { chunkNum: 0, totalChunks, bodySlice };
115
+ }
116
+ // Non-root chunk requires at least 1 body byte after the 5-byte header
117
+ if (data.length < 6)
118
+ return null;
119
+ const bodySlice = Buffer.from(data.subarray(5));
120
+ return { chunkNum, bodySlice };
121
+ }
122
+ /**
123
+ * Concatenate ordered body slices and parse the assembled body.
124
+ *
125
+ * body = pubkey(32) + sig(64) + kind(1) + kind_data
126
+ *
127
+ * Returns null if the assembled data is too short to be valid.
128
+ */
129
+ function assembleV1Body(slices) {
130
+ const body = Buffer.concat(slices);
131
+ // Minimum: pubkey(32) + sig(64) + kind(1) = 97 bytes
132
+ if (body.length < types_js_1.PUBKEY_BYTES + types_js_1.SIG_BYTES + 1)
133
+ return null;
134
+ const pubkey = Buffer.from(body.subarray(0, types_js_1.PUBKEY_BYTES));
135
+ const sig = Buffer.from(body.subarray(types_js_1.PUBKEY_BYTES, types_js_1.PUBKEY_BYTES + types_js_1.SIG_BYTES));
136
+ const kind = body[types_js_1.PUBKEY_BYTES + types_js_1.SIG_BYTES];
137
+ const kindData = Buffer.from(body.subarray(types_js_1.PUBKEY_BYTES + types_js_1.SIG_BYTES + 1));
138
+ return { pubkey, sig, kind, kindData };
139
+ }
140
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Build the unsigned payload for a TEXT_NOTE — everything that gets hashed and signed.
3
+ * Format: ORS\x00 + pubkey(32) + kind(1) + content_bytes (no sig)
4
+ */
5
+ export declare function buildUnsignedPayload(content: string, pubkey: Buffer): Buffer;
6
+ /**
7
+ * Build the unsigned payload for a PROFILE_UPDATE — everything that gets hashed and signed.
8
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x02) + propertyKind(1) + value_bytes (no sig)
9
+ */
10
+ export declare function buildProfileUpdateUnsignedPayload(propertyKind: number, value: string | Buffer, pubkey: Buffer): Buffer;
11
+ /**
12
+ * Build the unsigned payload for a TEXT_REPLY — everything that gets hashed and signed.
13
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x03) + parentTxid(32) + content_bytes (no sig)
14
+ */
15
+ export declare function buildReplyUnsignedPayload(content: string, pubkey: Buffer, parentTxidBytes: Buffer): Buffer;
16
+ /**
17
+ * Build a complete ORS OP_RETURN payload for a TEXT_REPLY.
18
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x03) + parentTxid(32) + content_bytes
19
+ */
20
+ export declare function buildReplyPayload(content: string, pubkey: Buffer, sig: Buffer, parentTxidBytes: Buffer): Buffer;
21
+ /**
22
+ * Build the unsigned payload for a REPOST.
23
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x04) + referencedTxid(32) (no sig)
24
+ */
25
+ export declare function buildRepostUnsignedPayload(pubkey: Buffer, referencedTxidBytes: Buffer): Buffer;
26
+ /**
27
+ * Build a complete ORS OP_RETURN payload for a REPOST.
28
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x04) + referencedTxid(32)
29
+ */
30
+ export declare function buildRepostPayload(pubkey: Buffer, sig: Buffer, referencedTxidBytes: Buffer): Buffer;
31
+ /**
32
+ * Build the unsigned payload for a QUOTE_REPOST.
33
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x05) + referencedTxid(32) + content_bytes (no sig)
34
+ */
35
+ export declare function buildQuoteRepostUnsignedPayload(content: string, pubkey: Buffer, referencedTxidBytes: Buffer): Buffer;
36
+ /**
37
+ * Build a complete ORS OP_RETURN payload for a QUOTE_REPOST.
38
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x05) + referencedTxid(32) + content_bytes
39
+ */
40
+ export declare function buildQuoteRepostPayload(content: string, pubkey: Buffer, sig: Buffer, referencedTxidBytes: Buffer): Buffer;
41
+ /**
42
+ * Build the unsigned payload for a FOLLOW.
43
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x06) + targetPubkey(32) + action(1)
44
+ */
45
+ export declare function buildFollowUnsignedPayload(targetPubkey: Buffer, isFollow: boolean, pubkey: Buffer): Buffer;
46
+ /**
47
+ * Build a complete ORS OP_RETURN payload for a FOLLOW.
48
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x06) + targetPubkey(32) + action(1)
49
+ */
50
+ export declare function buildFollowPayload(targetPubkey: Buffer, isFollow: boolean, pubkey: Buffer, sig: Buffer): Buffer;
51
+ /**
52
+ * Extract the unsigned bytes from a full on-chain payload (for verification).
53
+ * Removes the 64-byte sig at offset SIG_OFFSET..KIND_OFFSET.
54
+ */
55
+ export declare function getUnsignedBytes(fullPayload: Buffer): Buffer;
56
+ /**
57
+ * Build a complete ORS OP_RETURN payload for a TEXT_NOTE.
58
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1) + content_bytes
59
+ */
60
+ export declare function buildORSPayload(content: string, pubkey: Buffer, sig: Buffer): Buffer;
61
+ /**
62
+ * Build the v1 signing body: pubkey(32) + kind(1) + kind_data.
63
+ * This is what gets sha256-hashed and Schnorr-signed for v1 posts.
64
+ * No magic or version prefix — saves bytes in the signing scope.
65
+ */
66
+ export declare function buildV1SigningBody(pubkey: Buffer, kind: number, kindData: Buffer): Buffer;
67
+ /**
68
+ * Split a v1 body across 80-byte OP_RETURN chunks.
69
+ *
70
+ * body = pubkey(32) + sig(64) + kind(1) + kind_data
71
+ *
72
+ * Chunk 0: ORS(3) | 0x01(1) | 0x00(1) | totalChunks(1) | body[0:74] — 80 bytes max
73
+ * Chunk N: ORS(3) | 0x01(1) | N(1) | body[74+(N-1)*75:74+N*75] — 80 bytes max
74
+ *
75
+ * Returns an array of OP_RETURN payloads (without OP_RETURN opcode), each <= 80 bytes.
76
+ */
77
+ export declare function buildV1Chunks(pubkey: Buffer, sig: Buffer, kind: number, kindData: Buffer): Buffer[];
78
+ /**
79
+ * Build a complete ORS OP_RETURN payload for a PROFILE_UPDATE.
80
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x02) + propertyKind(1) + value_bytes
81
+ */
82
+ export declare function buildProfileUpdatePayload(propertyKind: number, value: string | Buffer, pubkey: Buffer, sig: Buffer): Buffer;
83
+ //# sourceMappingURL=encode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CA+B5E;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,MAAM,EAAE,MAAM,GACb,MAAM,CA8BR;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,MAAM,CAkCR;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,GACtB,MAAM,CAaR;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAuBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAaR;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAkCR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAiBR;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,MAAM,GACb,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,MAAM,CAaR;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,MAAM,CAcR;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMzF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAmCnG;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,MAAM,CAiBR"}
package/dist/encode.js ADDED
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildUnsignedPayload = buildUnsignedPayload;
4
+ exports.buildProfileUpdateUnsignedPayload = buildProfileUpdateUnsignedPayload;
5
+ exports.buildReplyUnsignedPayload = buildReplyUnsignedPayload;
6
+ exports.buildReplyPayload = buildReplyPayload;
7
+ exports.buildRepostUnsignedPayload = buildRepostUnsignedPayload;
8
+ exports.buildRepostPayload = buildRepostPayload;
9
+ exports.buildQuoteRepostUnsignedPayload = buildQuoteRepostUnsignedPayload;
10
+ exports.buildQuoteRepostPayload = buildQuoteRepostPayload;
11
+ exports.buildFollowUnsignedPayload = buildFollowUnsignedPayload;
12
+ exports.buildFollowPayload = buildFollowPayload;
13
+ exports.getUnsignedBytes = getUnsignedBytes;
14
+ exports.buildORSPayload = buildORSPayload;
15
+ exports.buildV1SigningBody = buildV1SigningBody;
16
+ exports.buildV1Chunks = buildV1Chunks;
17
+ exports.buildProfileUpdatePayload = buildProfileUpdatePayload;
18
+ const types_js_1 = require("./types.js");
19
+ /**
20
+ * Build the unsigned payload for a TEXT_NOTE — everything that gets hashed and signed.
21
+ * Format: ORS\x00 + pubkey(32) + kind(1) + content_bytes (no sig)
22
+ */
23
+ function buildUnsignedPayload(content, pubkey) {
24
+ if (pubkey.length !== types_js_1.PUBKEY_BYTES) {
25
+ throw new Error(`pubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
26
+ }
27
+ const contentBytes = Buffer.from(content, "utf8");
28
+ if (contentBytes.length > types_js_1.MAX_CONTENT_BYTES) {
29
+ throw new Error(`Content too long: ${contentBytes.length} bytes (max ${types_js_1.MAX_CONTENT_BYTES})`);
30
+ }
31
+ // SIG_OFFSET (36) = magic(3) + version(1) + pubkey(32)
32
+ // kind: 1 byte
33
+ // content: raw bytes
34
+ const buf = Buffer.alloc(types_js_1.SIG_OFFSET + 1 + contentBytes.length);
35
+ let pos = 0;
36
+ types_js_1.ORS_MAGIC.copy(buf, pos);
37
+ pos += 3;
38
+ buf[pos++] = types_js_1.ORS_VERSION;
39
+ pubkey.copy(buf, pos);
40
+ pos += types_js_1.PUBKEY_BYTES;
41
+ // kind byte at offset 36 of unsigned (= offset 100 of full payload)
42
+ buf[pos++] = types_js_1.KIND_TEXT_NOTE;
43
+ contentBytes.copy(buf, pos);
44
+ return buf;
45
+ }
46
+ /**
47
+ * Build the unsigned payload for a PROFILE_UPDATE — everything that gets hashed and signed.
48
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x02) + propertyKind(1) + value_bytes (no sig)
49
+ */
50
+ function buildProfileUpdateUnsignedPayload(propertyKind, value, pubkey) {
51
+ if (pubkey.length !== types_js_1.PUBKEY_BYTES) {
52
+ throw new Error(`pubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
53
+ }
54
+ const valueBytes = Buffer.isBuffer(value)
55
+ ? value
56
+ : Buffer.from(value, "utf8");
57
+ // SIG_OFFSET (36) = magic(3) + version(1) + pubkey(32)
58
+ // kind: 1 byte
59
+ // propertyKind: 1 byte
60
+ // value: raw bytes
61
+ const buf = Buffer.alloc(types_js_1.SIG_OFFSET + 1 + 1 + valueBytes.length);
62
+ let pos = 0;
63
+ types_js_1.ORS_MAGIC.copy(buf, pos);
64
+ pos += 3;
65
+ buf[pos++] = types_js_1.ORS_VERSION;
66
+ pubkey.copy(buf, pos);
67
+ pos += types_js_1.PUBKEY_BYTES;
68
+ // kind byte at offset 36 of unsigned (= offset 100 of full payload)
69
+ buf[pos++] = types_js_1.KIND_PROFILE_UPDATE;
70
+ buf[pos++] = propertyKind;
71
+ valueBytes.copy(buf, pos);
72
+ return buf;
73
+ }
74
+ /**
75
+ * Build the unsigned payload for a TEXT_REPLY — everything that gets hashed and signed.
76
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x03) + parentTxid(32) + content_bytes (no sig)
77
+ */
78
+ function buildReplyUnsignedPayload(content, pubkey, parentTxidBytes) {
79
+ if (pubkey.length !== types_js_1.PUBKEY_BYTES) {
80
+ throw new Error(`pubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
81
+ }
82
+ if (parentTxidBytes.length !== types_js_1.PARENT_TXID_BYTES) {
83
+ throw new Error(`parentTxid must be ${types_js_1.PARENT_TXID_BYTES} bytes`);
84
+ }
85
+ const contentBytes = Buffer.from(content, "utf8");
86
+ if (contentBytes.length > types_js_1.MAX_CONTENT_BYTES) {
87
+ throw new Error(`Content too long: ${contentBytes.length} bytes (max ${types_js_1.MAX_CONTENT_BYTES})`);
88
+ }
89
+ const buf = Buffer.alloc(types_js_1.SIG_OFFSET + 1 + types_js_1.PARENT_TXID_BYTES + contentBytes.length);
90
+ let pos = 0;
91
+ types_js_1.ORS_MAGIC.copy(buf, pos);
92
+ pos += 3;
93
+ buf[pos++] = types_js_1.ORS_VERSION;
94
+ pubkey.copy(buf, pos);
95
+ pos += types_js_1.PUBKEY_BYTES;
96
+ buf[pos++] = types_js_1.KIND_TEXT_REPLY;
97
+ parentTxidBytes.copy(buf, pos);
98
+ pos += types_js_1.PARENT_TXID_BYTES;
99
+ contentBytes.copy(buf, pos);
100
+ return buf;
101
+ }
102
+ /**
103
+ * Build a complete ORS OP_RETURN payload for a TEXT_REPLY.
104
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x03) + parentTxid(32) + content_bytes
105
+ */
106
+ function buildReplyPayload(content, pubkey, sig, parentTxidBytes) {
107
+ if (sig.length !== types_js_1.SIG_BYTES) {
108
+ throw new Error(`sig must be ${types_js_1.SIG_BYTES} bytes`);
109
+ }
110
+ const unsigned = buildReplyUnsignedPayload(content, pubkey, parentTxidBytes);
111
+ const buf = Buffer.alloc(unsigned.length + types_js_1.SIG_BYTES);
112
+ unsigned.subarray(0, types_js_1.SIG_OFFSET).copy(buf, 0);
113
+ sig.copy(buf, types_js_1.SIG_OFFSET);
114
+ unsigned.subarray(types_js_1.SIG_OFFSET).copy(buf, types_js_1.KIND_OFFSET);
115
+ return buf;
116
+ }
117
+ /**
118
+ * Build the unsigned payload for a REPOST.
119
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x04) + referencedTxid(32) (no sig)
120
+ */
121
+ function buildRepostUnsignedPayload(pubkey, referencedTxidBytes) {
122
+ if (pubkey.length !== types_js_1.PUBKEY_BYTES) {
123
+ throw new Error(`pubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
124
+ }
125
+ if (referencedTxidBytes.length !== types_js_1.PARENT_TXID_BYTES) {
126
+ throw new Error(`referencedTxid must be ${types_js_1.PARENT_TXID_BYTES} bytes`);
127
+ }
128
+ const buf = Buffer.alloc(types_js_1.SIG_OFFSET + 1 + types_js_1.PARENT_TXID_BYTES);
129
+ let pos = 0;
130
+ types_js_1.ORS_MAGIC.copy(buf, pos);
131
+ pos += 3;
132
+ buf[pos++] = types_js_1.ORS_VERSION;
133
+ pubkey.copy(buf, pos);
134
+ pos += types_js_1.PUBKEY_BYTES;
135
+ buf[pos++] = types_js_1.KIND_REPOST;
136
+ referencedTxidBytes.copy(buf, pos);
137
+ return buf;
138
+ }
139
+ /**
140
+ * Build a complete ORS OP_RETURN payload for a REPOST.
141
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x04) + referencedTxid(32)
142
+ */
143
+ function buildRepostPayload(pubkey, sig, referencedTxidBytes) {
144
+ if (sig.length !== types_js_1.SIG_BYTES) {
145
+ throw new Error(`sig must be ${types_js_1.SIG_BYTES} bytes`);
146
+ }
147
+ const unsigned = buildRepostUnsignedPayload(pubkey, referencedTxidBytes);
148
+ const buf = Buffer.alloc(unsigned.length + types_js_1.SIG_BYTES);
149
+ unsigned.subarray(0, types_js_1.SIG_OFFSET).copy(buf, 0);
150
+ sig.copy(buf, types_js_1.SIG_OFFSET);
151
+ unsigned.subarray(types_js_1.SIG_OFFSET).copy(buf, types_js_1.KIND_OFFSET);
152
+ return buf;
153
+ }
154
+ /**
155
+ * Build the unsigned payload for a QUOTE_REPOST.
156
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x05) + referencedTxid(32) + content_bytes (no sig)
157
+ */
158
+ function buildQuoteRepostUnsignedPayload(content, pubkey, referencedTxidBytes) {
159
+ if (pubkey.length !== types_js_1.PUBKEY_BYTES) {
160
+ throw new Error(`pubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
161
+ }
162
+ if (referencedTxidBytes.length !== types_js_1.PARENT_TXID_BYTES) {
163
+ throw new Error(`referencedTxid must be ${types_js_1.PARENT_TXID_BYTES} bytes`);
164
+ }
165
+ const contentBytes = Buffer.from(content, "utf8");
166
+ if (contentBytes.length > types_js_1.MAX_CONTENT_BYTES) {
167
+ throw new Error(`Content too long: ${contentBytes.length} bytes (max ${types_js_1.MAX_CONTENT_BYTES})`);
168
+ }
169
+ const buf = Buffer.alloc(types_js_1.SIG_OFFSET + 1 + types_js_1.PARENT_TXID_BYTES + contentBytes.length);
170
+ let pos = 0;
171
+ types_js_1.ORS_MAGIC.copy(buf, pos);
172
+ pos += 3;
173
+ buf[pos++] = types_js_1.ORS_VERSION;
174
+ pubkey.copy(buf, pos);
175
+ pos += types_js_1.PUBKEY_BYTES;
176
+ buf[pos++] = types_js_1.KIND_QUOTE_REPOST;
177
+ referencedTxidBytes.copy(buf, pos);
178
+ pos += types_js_1.PARENT_TXID_BYTES;
179
+ contentBytes.copy(buf, pos);
180
+ return buf;
181
+ }
182
+ /**
183
+ * Build a complete ORS OP_RETURN payload for a QUOTE_REPOST.
184
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x05) + referencedTxid(32) + content_bytes
185
+ */
186
+ function buildQuoteRepostPayload(content, pubkey, sig, referencedTxidBytes) {
187
+ if (sig.length !== types_js_1.SIG_BYTES) {
188
+ throw new Error(`sig must be ${types_js_1.SIG_BYTES} bytes`);
189
+ }
190
+ const unsigned = buildQuoteRepostUnsignedPayload(content, pubkey, referencedTxidBytes);
191
+ const buf = Buffer.alloc(unsigned.length + types_js_1.SIG_BYTES);
192
+ unsigned.subarray(0, types_js_1.SIG_OFFSET).copy(buf, 0);
193
+ sig.copy(buf, types_js_1.SIG_OFFSET);
194
+ unsigned.subarray(types_js_1.SIG_OFFSET).copy(buf, types_js_1.KIND_OFFSET);
195
+ return buf;
196
+ }
197
+ /**
198
+ * Build the unsigned payload for a FOLLOW.
199
+ * Format: ORS\x00 + pubkey(32) + kind(1=0x06) + targetPubkey(32) + action(1)
200
+ */
201
+ function buildFollowUnsignedPayload(targetPubkey, isFollow, pubkey) {
202
+ if (pubkey.length !== types_js_1.PUBKEY_BYTES) {
203
+ throw new Error(`pubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
204
+ }
205
+ if (targetPubkey.length !== types_js_1.PUBKEY_BYTES) {
206
+ throw new Error(`targetPubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
207
+ }
208
+ const buf = Buffer.alloc(types_js_1.SIG_OFFSET + 1 + types_js_1.PUBKEY_BYTES + 1);
209
+ let pos = 0;
210
+ types_js_1.ORS_MAGIC.copy(buf, pos);
211
+ pos += 3;
212
+ buf[pos++] = types_js_1.ORS_VERSION;
213
+ pubkey.copy(buf, pos);
214
+ pos += types_js_1.PUBKEY_BYTES;
215
+ buf[pos++] = types_js_1.KIND_FOLLOW;
216
+ targetPubkey.copy(buf, pos);
217
+ pos += types_js_1.PUBKEY_BYTES;
218
+ buf[pos] = isFollow ? 0x01 : 0x00;
219
+ return buf;
220
+ }
221
+ /**
222
+ * Build a complete ORS OP_RETURN payload for a FOLLOW.
223
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x06) + targetPubkey(32) + action(1)
224
+ */
225
+ function buildFollowPayload(targetPubkey, isFollow, pubkey, sig) {
226
+ if (sig.length !== types_js_1.SIG_BYTES) {
227
+ throw new Error(`sig must be ${types_js_1.SIG_BYTES} bytes`);
228
+ }
229
+ const unsigned = buildFollowUnsignedPayload(targetPubkey, isFollow, pubkey);
230
+ const buf = Buffer.alloc(unsigned.length + types_js_1.SIG_BYTES);
231
+ unsigned.subarray(0, types_js_1.SIG_OFFSET).copy(buf, 0);
232
+ sig.copy(buf, types_js_1.SIG_OFFSET);
233
+ unsigned.subarray(types_js_1.SIG_OFFSET).copy(buf, types_js_1.KIND_OFFSET);
234
+ return buf;
235
+ }
236
+ /**
237
+ * Extract the unsigned bytes from a full on-chain payload (for verification).
238
+ * Removes the 64-byte sig at offset SIG_OFFSET..KIND_OFFSET.
239
+ */
240
+ function getUnsignedBytes(fullPayload) {
241
+ return Buffer.concat([
242
+ fullPayload.subarray(0, types_js_1.SIG_OFFSET),
243
+ fullPayload.subarray(types_js_1.KIND_OFFSET),
244
+ ]);
245
+ }
246
+ /**
247
+ * Build a complete ORS OP_RETURN payload for a TEXT_NOTE.
248
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1) + content_bytes
249
+ */
250
+ function buildORSPayload(content, pubkey, sig) {
251
+ if (sig.length !== types_js_1.SIG_BYTES) {
252
+ throw new Error(`sig must be ${types_js_1.SIG_BYTES} bytes`);
253
+ }
254
+ const unsigned = buildUnsignedPayload(content, pubkey);
255
+ // Insert sig between header (SIG_OFFSET) and kind+data
256
+ const buf = Buffer.alloc(unsigned.length + types_js_1.SIG_BYTES);
257
+ unsigned.subarray(0, types_js_1.SIG_OFFSET).copy(buf, 0);
258
+ sig.copy(buf, types_js_1.SIG_OFFSET);
259
+ unsigned.subarray(types_js_1.SIG_OFFSET).copy(buf, types_js_1.KIND_OFFSET);
260
+ return buf;
261
+ }
262
+ // ─── v1 (chunked 80-byte OP_RETURN) ─────────────────────────────────────────
263
+ /**
264
+ * Build the v1 signing body: pubkey(32) + kind(1) + kind_data.
265
+ * This is what gets sha256-hashed and Schnorr-signed for v1 posts.
266
+ * No magic or version prefix — saves bytes in the signing scope.
267
+ */
268
+ function buildV1SigningBody(pubkey, kind, kindData) {
269
+ const buf = Buffer.alloc(types_js_1.PUBKEY_BYTES + 1 + kindData.length);
270
+ pubkey.copy(buf, 0);
271
+ buf[types_js_1.PUBKEY_BYTES] = kind;
272
+ kindData.copy(buf, types_js_1.PUBKEY_BYTES + 1);
273
+ return buf;
274
+ }
275
+ /**
276
+ * Split a v1 body across 80-byte OP_RETURN chunks.
277
+ *
278
+ * body = pubkey(32) + sig(64) + kind(1) + kind_data
279
+ *
280
+ * Chunk 0: ORS(3) | 0x01(1) | 0x00(1) | totalChunks(1) | body[0:74] — 80 bytes max
281
+ * Chunk N: ORS(3) | 0x01(1) | N(1) | body[74+(N-1)*75:74+N*75] — 80 bytes max
282
+ *
283
+ * Returns an array of OP_RETURN payloads (without OP_RETURN opcode), each <= 80 bytes.
284
+ */
285
+ function buildV1Chunks(pubkey, sig, kind, kindData) {
286
+ if (pubkey.length !== types_js_1.PUBKEY_BYTES)
287
+ throw new Error(`pubkey must be ${types_js_1.PUBKEY_BYTES} bytes`);
288
+ if (sig.length !== types_js_1.SIG_BYTES)
289
+ throw new Error(`sig must be ${types_js_1.SIG_BYTES} bytes`);
290
+ const body = Buffer.concat([pubkey, sig, Buffer.from([kind]), kindData]);
291
+ const numNonRootChunks = Math.ceil(Math.max(0, body.length - types_js_1.V1_CHUNK0_DATA) / types_js_1.V1_CHUNKN_DATA);
292
+ const totalChunks = 1 + numNonRootChunks;
293
+ const chunks = [];
294
+ // Chunk 0
295
+ const chunk0Body = body.subarray(0, types_js_1.V1_CHUNK0_DATA);
296
+ const chunk0 = Buffer.alloc(6 + chunk0Body.length);
297
+ types_js_1.ORS_MAGIC.copy(chunk0, 0);
298
+ chunk0[3] = types_js_1.ORS_VERSION_V1;
299
+ chunk0[4] = 0x00;
300
+ chunk0[5] = totalChunks;
301
+ chunk0Body.copy(chunk0, 6);
302
+ chunks.push(chunk0);
303
+ // Chunks 1..N
304
+ for (let n = 1; n < totalChunks; n++) {
305
+ const start = types_js_1.V1_CHUNK0_DATA + (n - 1) * types_js_1.V1_CHUNKN_DATA;
306
+ const end = Math.min(start + types_js_1.V1_CHUNKN_DATA, body.length);
307
+ const slice = body.subarray(start, end);
308
+ const chunk = Buffer.alloc(5 + slice.length);
309
+ types_js_1.ORS_MAGIC.copy(chunk, 0);
310
+ chunk[3] = types_js_1.ORS_VERSION_V1;
311
+ chunk[4] = n;
312
+ slice.copy(chunk, 5);
313
+ chunks.push(chunk);
314
+ }
315
+ return chunks;
316
+ }
317
+ /**
318
+ * Build a complete ORS OP_RETURN payload for a PROFILE_UPDATE.
319
+ * Format: ORS\x00 + pubkey(32) + sig(64) + kind(1=0x02) + propertyKind(1) + value_bytes
320
+ */
321
+ function buildProfileUpdatePayload(propertyKind, value, pubkey, sig) {
322
+ if (sig.length !== types_js_1.SIG_BYTES) {
323
+ throw new Error(`sig must be ${types_js_1.SIG_BYTES} bytes`);
324
+ }
325
+ const unsigned = buildProfileUpdateUnsignedPayload(propertyKind, value, pubkey);
326
+ const buf = Buffer.alloc(unsigned.length + types_js_1.SIG_BYTES);
327
+ unsigned.subarray(0, types_js_1.SIG_OFFSET).copy(buf, 0);
328
+ sig.copy(buf, types_js_1.SIG_OFFSET);
329
+ unsigned.subarray(types_js_1.SIG_OFFSET).copy(buf, types_js_1.KIND_OFFSET);
330
+ return buf;
331
+ }
332
+ //# sourceMappingURL=encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./types.js";
2
+ export * from "./encode.js";
3
+ export * from "./decode.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types.js"), exports);
18
+ __exportStar(require("./encode.js"), exports);
19
+ __exportStar(require("./decode.js"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8CAA4B;AAC5B,8CAA4B"}
@@ -0,0 +1,79 @@
1
+ export declare const ORS_MAGIC: Buffer<ArrayBuffer>;
2
+ export declare const ORS_VERSION = 0;
3
+ export declare const ORS_VERSION_V1 = 1;
4
+ export declare const V1_CHUNK0_HEADER = 6;
5
+ export declare const V1_CHUNKN_HEADER = 5;
6
+ export declare const V1_CHUNK0_DATA = 74;
7
+ export declare const V1_CHUNKN_DATA = 75;
8
+ export declare const KIND_TEXT_NOTE = 1;
9
+ export declare const KIND_PROFILE_UPDATE = 2;
10
+ export declare const KIND_TEXT_REPLY = 3;
11
+ export declare const KIND_REPOST = 4;
12
+ export declare const KIND_QUOTE_REPOST = 5;
13
+ export declare const KIND_FOLLOW = 6;
14
+ export declare const PUBKEY_OFFSET = 4;
15
+ export declare const SIG_OFFSET = 36;
16
+ export declare const KIND_OFFSET = 100;
17
+ export declare const DATA_OFFSET = 101;
18
+ export declare const PROPERTY_KIND_OFFSET = 101;
19
+ export declare const PROFILE_VALUE_OFFSET = 102;
20
+ export declare const PUBKEY_BYTES = 32;
21
+ export declare const SIG_BYTES = 64;
22
+ export declare const PARENT_TXID_BYTES = 32;
23
+ export declare const PARENT_TXID_OFFSET = 101;
24
+ export declare const REPLY_CONTENT_OFFSET = 133;
25
+ export declare const MAX_CONTENT_BYTES = 277;
26
+ export declare const PROPERTY_NAME = 0;
27
+ export declare const PROPERTY_AVATAR_URL = 1;
28
+ export declare const PROPERTY_BIO = 2;
29
+ export declare const PROPERTY_BANNER_URL = 3;
30
+ export declare const PROPERTY_BOT = 4;
31
+ export declare const PROPERTY_WEBSITE_URL = 5;
32
+ export interface OrsPost {
33
+ kind: number;
34
+ content: string;
35
+ pubkey: string;
36
+ sig: string;
37
+ }
38
+ export interface OrsProfileUpdate {
39
+ kind: 0x02;
40
+ propertyKind: number;
41
+ content: string;
42
+ pubkey: string;
43
+ sig: string;
44
+ }
45
+ export interface OrsTextReply {
46
+ kind: 0x03;
47
+ parentTxid: string;
48
+ content: string;
49
+ pubkey: string;
50
+ sig: string;
51
+ }
52
+ export interface OrsRepost {
53
+ kind: 0x04;
54
+ referencedTxid: string;
55
+ pubkey: string;
56
+ sig: string;
57
+ }
58
+ export interface OrsQuoteRepost {
59
+ kind: 0x05;
60
+ referencedTxid: string;
61
+ content: string;
62
+ pubkey: string;
63
+ sig: string;
64
+ }
65
+ export interface OrsFollow {
66
+ kind: 0x06;
67
+ targetPubkey: string;
68
+ isFollow: boolean;
69
+ pubkey: string;
70
+ sig: string;
71
+ }
72
+ export type ParsedOrsResult = {
73
+ supported: true;
74
+ post: OrsPost | OrsProfileUpdate | OrsTextReply | OrsRepost | OrsQuoteRepost | OrsFollow;
75
+ } | {
76
+ supported: false;
77
+ reason: string;
78
+ };
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROPERTY_WEBSITE_URL = exports.PROPERTY_BOT = exports.PROPERTY_BANNER_URL = exports.PROPERTY_BIO = exports.PROPERTY_AVATAR_URL = exports.PROPERTY_NAME = exports.MAX_CONTENT_BYTES = exports.REPLY_CONTENT_OFFSET = exports.PARENT_TXID_OFFSET = exports.PARENT_TXID_BYTES = exports.SIG_BYTES = exports.PUBKEY_BYTES = exports.PROFILE_VALUE_OFFSET = exports.PROPERTY_KIND_OFFSET = exports.DATA_OFFSET = exports.KIND_OFFSET = exports.SIG_OFFSET = exports.PUBKEY_OFFSET = exports.KIND_FOLLOW = exports.KIND_QUOTE_REPOST = exports.KIND_REPOST = exports.KIND_TEXT_REPLY = exports.KIND_PROFILE_UPDATE = exports.KIND_TEXT_NOTE = exports.V1_CHUNKN_DATA = exports.V1_CHUNK0_DATA = exports.V1_CHUNKN_HEADER = exports.V1_CHUNK0_HEADER = exports.ORS_VERSION_V1 = exports.ORS_VERSION = exports.ORS_MAGIC = void 0;
4
+ exports.ORS_MAGIC = Buffer.from([0x4f, 0x52, 0x53]); // "ORS"
5
+ exports.ORS_VERSION = 0x00;
6
+ exports.ORS_VERSION_V1 = 0x01;
7
+ // v1 chunk header sizes
8
+ exports.V1_CHUNK0_HEADER = 6; // ORS(3)+ver(1)+chunkNum(1)+totalChunks(1)
9
+ exports.V1_CHUNKN_HEADER = 5; // ORS(3)+ver(1)+chunkNum(1)
10
+ // v1 body bytes per chunk slot
11
+ exports.V1_CHUNK0_DATA = 74; // body bytes in chunk 0
12
+ exports.V1_CHUNKN_DATA = 75; // body bytes in chunk N (N>=1)
13
+ exports.KIND_TEXT_NOTE = 0x01;
14
+ exports.KIND_PROFILE_UPDATE = 0x02;
15
+ exports.KIND_TEXT_REPLY = 0x03;
16
+ exports.KIND_REPOST = 0x04;
17
+ exports.KIND_QUOTE_REPOST = 0x05;
18
+ exports.KIND_FOLLOW = 0x06;
19
+ // Header layout: magic(3) + version(1) + pubkey(32) + sig(64) + kind(1) = 101 bytes
20
+ exports.PUBKEY_OFFSET = 4;
21
+ exports.SIG_OFFSET = 36;
22
+ exports.KIND_OFFSET = 100;
23
+ exports.DATA_OFFSET = 101;
24
+ exports.PROPERTY_KIND_OFFSET = 101;
25
+ exports.PROFILE_VALUE_OFFSET = 102;
26
+ exports.PUBKEY_BYTES = 32;
27
+ exports.SIG_BYTES = 64;
28
+ // TEXT_REPLY layout: ...header(101) + parentTxid(32) + content
29
+ exports.PARENT_TXID_BYTES = 32;
30
+ exports.PARENT_TXID_OFFSET = 101;
31
+ exports.REPLY_CONTENT_OFFSET = 133;
32
+ exports.MAX_CONTENT_BYTES = 277;
33
+ // Profile property kind values
34
+ exports.PROPERTY_NAME = 0x00;
35
+ exports.PROPERTY_AVATAR_URL = 0x01;
36
+ exports.PROPERTY_BIO = 0x02;
37
+ exports.PROPERTY_BANNER_URL = 0x03;
38
+ exports.PROPERTY_BOT = 0x04;
39
+ exports.PROPERTY_WEBSITE_URL = 0x05;
40
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ;AACrD,QAAA,WAAW,GAAG,IAAI,CAAC;AACnB,QAAA,cAAc,GAAG,IAAI,CAAC;AAEnC,wBAAwB;AACX,QAAA,gBAAgB,GAAG,CAAC,CAAC,CAAE,2CAA2C;AAClE,QAAA,gBAAgB,GAAG,CAAC,CAAC,CAAE,4BAA4B;AAChE,+BAA+B;AAClB,QAAA,cAAc,GAAG,EAAE,CAAC,CAAG,wBAAwB;AAC/C,QAAA,cAAc,GAAG,EAAE,CAAC,CAAG,+BAA+B;AAEtD,QAAA,cAAc,GAAG,IAAI,CAAC;AACtB,QAAA,mBAAmB,GAAG,IAAI,CAAC;AAC3B,QAAA,eAAe,GAAG,IAAI,CAAC;AACvB,QAAA,WAAW,GAAG,IAAI,CAAC;AACnB,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACzB,QAAA,WAAW,GAAG,IAAI,CAAC;AAEhC,oFAAoF;AACvE,QAAA,aAAa,GAAG,CAAC,CAAC;AAClB,QAAA,UAAU,GAAG,EAAE,CAAC;AAChB,QAAA,WAAW,GAAG,GAAG,CAAC;AAClB,QAAA,WAAW,GAAG,GAAG,CAAC;AAClB,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAC3B,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAC3B,QAAA,YAAY,GAAG,EAAE,CAAC;AAClB,QAAA,SAAS,GAAG,EAAE,CAAC;AAE5B,+DAA+D;AAClD,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACvB,QAAA,kBAAkB,GAAG,GAAG,CAAC;AACzB,QAAA,oBAAoB,GAAG,GAAG,CAAC;AAE3B,QAAA,iBAAiB,GAAG,GAAG,CAAC;AAErC,+BAA+B;AAClB,QAAA,aAAa,GAAG,IAAI,CAAC;AACrB,QAAA,mBAAmB,GAAG,IAAI,CAAC;AAC3B,QAAA,YAAY,GAAG,IAAI,CAAC;AACpB,QAAA,mBAAmB,GAAG,IAAI,CAAC;AAC3B,QAAA,YAAY,GAAG,IAAI,CAAC;AACpB,QAAA,oBAAoB,GAAG,IAAI,CAAC"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@opreturnsocial/protocol",
3
+ "version": "0.1.0",
4
+ "description": "Zero-dependency TLV encoding/decoding library for the opreturn.social bitcoin social protocol",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/opreturnsocial/opreturn.social.git",
9
+ "directory": "packages/protocol"
10
+ },
11
+ "homepage": "https://opreturn.social",
12
+ "keywords": ["bitcoin", "op_return", "social", "protocol", "nostr", "lightning"],
13
+ "files": [
14
+ "dist/**/*"
15
+ ],
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/index.js",
21
+ "require": "./dist/index.js",
22
+ "types": "./dist/index.d.ts"
23
+ }
24
+ },
25
+ "scripts": {
26
+ "build": "tsc",
27
+ "dev": "tsc --watch"
28
+ },
29
+ "devDependencies": {
30
+ "typescript": "^5.4.0"
31
+ }
32
+ }