@1sat/templates 0.0.1

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 (57) hide show
  1. package/dist/bitcom/aip.d.ts +88 -0
  2. package/dist/bitcom/aip.d.ts.map +1 -0
  3. package/dist/bitcom/aip.js +205 -0
  4. package/dist/bitcom/aip.js.map +1 -0
  5. package/dist/bitcom/b.d.ts +99 -0
  6. package/dist/bitcom/b.d.ts.map +1 -0
  7. package/dist/bitcom/b.js +206 -0
  8. package/dist/bitcom/b.js.map +1 -0
  9. package/dist/bitcom/bap.d.ts +126 -0
  10. package/dist/bitcom/bap.d.ts.map +1 -0
  11. package/dist/bitcom/bap.js +334 -0
  12. package/dist/bitcom/bap.js.map +1 -0
  13. package/dist/bitcom/bitcom.d.ts +75 -0
  14. package/dist/bitcom/bitcom.d.ts.map +1 -0
  15. package/dist/bitcom/bitcom.js +186 -0
  16. package/dist/bitcom/bitcom.js.map +1 -0
  17. package/dist/bitcom/map.d.ts +90 -0
  18. package/dist/bitcom/map.d.ts.map +1 -0
  19. package/dist/bitcom/map.js +215 -0
  20. package/dist/bitcom/map.js.map +1 -0
  21. package/dist/bitcom/sigma.d.ts +93 -0
  22. package/dist/bitcom/sigma.d.ts.map +1 -0
  23. package/dist/bitcom/sigma.js +175 -0
  24. package/dist/bitcom/sigma.js.map +1 -0
  25. package/dist/bsocial/bsocial.d.ts +152 -0
  26. package/dist/bsocial/bsocial.d.ts.map +1 -0
  27. package/dist/bsocial/bsocial.js +397 -0
  28. package/dist/bsocial/bsocial.js.map +1 -0
  29. package/dist/bsv20/bsv20.d.ts +277 -0
  30. package/dist/bsv20/bsv20.d.ts.map +1 -0
  31. package/dist/bsv20/bsv20.js +544 -0
  32. package/dist/bsv20/bsv20.js.map +1 -0
  33. package/dist/bsv21/bsv21.d.ts +231 -0
  34. package/dist/bsv21/bsv21.d.ts.map +1 -0
  35. package/dist/bsv21/bsv21.js +475 -0
  36. package/dist/bsv21/bsv21.js.map +1 -0
  37. package/dist/index.d.ts +35 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +31 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/inscription/inscription.d.ts +165 -0
  42. package/dist/inscription/inscription.d.ts.map +1 -0
  43. package/dist/inscription/inscription.js +401 -0
  44. package/dist/inscription/inscription.js.map +1 -0
  45. package/dist/lock/lock.d.ts +92 -0
  46. package/dist/lock/lock.d.ts.map +1 -0
  47. package/dist/lock/lock.js +283 -0
  48. package/dist/lock/lock.js.map +1 -0
  49. package/dist/ordlock/ordlock.d.ts +126 -0
  50. package/dist/ordlock/ordlock.d.ts.map +1 -0
  51. package/dist/ordlock/ordlock.js +316 -0
  52. package/dist/ordlock/ordlock.js.map +1 -0
  53. package/dist/signer.d.ts +39 -0
  54. package/dist/signer.d.ts.map +1 -0
  55. package/dist/signer.js +54 -0
  56. package/dist/signer.js.map +1 -0
  57. package/package.json +43 -0
@@ -0,0 +1,397 @@
1
+ import { Script, Utils, } from '@bsv/sdk';
2
+ import AIP from '../bitcom/aip.js';
3
+ import B from '../bitcom/b.js';
4
+ import BitCom from '../bitcom/bitcom.js';
5
+ import MAP from '../bitcom/map.js';
6
+ // Constants for BSocial protocol
7
+ const BSOCIAL_APP_NAME = 'bsocial';
8
+ // Protocol addresses
9
+ const B_PROTOCOL_ADDRESS = '19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut';
10
+ const MAP_PROTOCOL_ADDRESS = '1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5';
11
+ const AIP_PROTOCOL_ADDRESS = '15PciHG22SNLQJXMoSUaWVi7WSqc7hCfva';
12
+ // Action types
13
+ export var BSocialActionType;
14
+ (function (BSocialActionType) {
15
+ BSocialActionType["POST"] = "post";
16
+ BSocialActionType["LIKE"] = "like";
17
+ BSocialActionType["UNLIKE"] = "unlike";
18
+ BSocialActionType["FOLLOW"] = "follow";
19
+ BSocialActionType["UNFOLLOW"] = "unfollow";
20
+ BSocialActionType["MESSAGE"] = "message";
21
+ BSocialActionType["VIDEO"] = "video";
22
+ })(BSocialActionType || (BSocialActionType = {}));
23
+ // Context types
24
+ export var BSocialContext;
25
+ (function (BSocialContext) {
26
+ BSocialContext["TX"] = "tx";
27
+ BSocialContext["CHANNEL"] = "channel";
28
+ BSocialContext["BAP_ID"] = "bapID";
29
+ BSocialContext["PROVIDER"] = "provider";
30
+ BSocialContext["VIDEO_ID"] = "videoID";
31
+ BSocialContext["GEOHASH"] = "geohash";
32
+ BSocialContext["BTC_TX"] = "btcTx";
33
+ BSocialContext["ETH_TX"] = "ethTx";
34
+ })(BSocialContext || (BSocialContext = {}));
35
+ /**
36
+ * BSocial class implementing ScriptTemplate.
37
+ *
38
+ * This class provides methods to create BSocial protocol transactions for social media
39
+ * actions like posts, likes, follows, etc. following BitcoinSchema.org standards.
40
+ */
41
+ export default class BSocial {
42
+ action;
43
+ content;
44
+ tags;
45
+ signer;
46
+ constructor(action, content, tags, signer) {
47
+ this.action = action;
48
+ this.content = content;
49
+ this.tags = tags;
50
+ this.signer = signer;
51
+ }
52
+ /**
53
+ * Creates a BSocial locking script for various social actions
54
+ *
55
+ * @returns A locking script for the BSocial action
56
+ */
57
+ async lock() {
58
+ const protocols = [];
59
+ // Add B protocol for content (if present and not empty)
60
+ if (this.content !== undefined && this.content !== null) {
61
+ const bScript = B.text(this.content);
62
+ // Extract only the protocol data (skip OP_RETURN and address)
63
+ const bDataChunks = bScript.chunks.slice(2); // Skip OP_RETURN and address
64
+ const bDataScript = new Script(bDataChunks);
65
+ protocols.push({
66
+ protocol: B_PROTOCOL_ADDRESS,
67
+ script: bDataScript.toBinary(),
68
+ pos: protocols.length,
69
+ });
70
+ }
71
+ // Add MAP protocol for action metadata
72
+ const mapData = {
73
+ app: BSOCIAL_APP_NAME,
74
+ type: this.action.type,
75
+ };
76
+ if (this.action.context) {
77
+ mapData.context = this.action.context;
78
+ }
79
+ if (this.action.contextValue != null && this.action.contextValue !== '') {
80
+ mapData.contextValue = this.action.contextValue;
81
+ }
82
+ if (this.action.subcontext) {
83
+ mapData.subcontext = this.action.subcontext;
84
+ }
85
+ if (this.action.subcontextValue != null &&
86
+ this.action.subcontextValue !== '') {
87
+ mapData.subcontextValue = this.action.subcontextValue;
88
+ }
89
+ // Add specific action data
90
+ if (this.action.type === BSocialActionType.LIKE && 'txid' in this.action) {
91
+ mapData.tx = this.action.txid;
92
+ }
93
+ if (this.action.type === BSocialActionType.FOLLOW &&
94
+ 'bapId' in this.action) {
95
+ mapData.bapId = this.action.bapId;
96
+ }
97
+ if (this.action.type === BSocialActionType.VIDEO &&
98
+ 'provider' in this.action) {
99
+ const video = this.action;
100
+ mapData.context = BSocialContext.VIDEO_ID;
101
+ mapData.contextValue = video.videoID;
102
+ mapData.subcontext = BSocialContext.PROVIDER;
103
+ mapData.subcontextValue = video.provider;
104
+ if (video.duration !== undefined) {
105
+ mapData.duration = String(video.duration);
106
+ }
107
+ if (video.start !== undefined) {
108
+ mapData.start = String(video.start);
109
+ }
110
+ }
111
+ // Add tags if present
112
+ if (this.tags != null && this.tags.length > 0) {
113
+ this.tags.forEach((tag, index) => {
114
+ mapData[`tag${index}`] = tag;
115
+ });
116
+ }
117
+ const mapScript = MAP.set(mapData);
118
+ // Extract only the protocol data (skip OP_RETURN and address)
119
+ const mapDataChunks = mapScript.chunks.slice(2); // Skip OP_RETURN and address
120
+ const mapDataScript = new Script(mapDataChunks);
121
+ protocols.push({
122
+ protocol: MAP_PROTOCOL_ADDRESS,
123
+ script: mapDataScript.toBinary(),
124
+ pos: protocols.length,
125
+ });
126
+ // Add AIP protocol for signature (if identity key provided)
127
+ if (this.signer != null) {
128
+ // Create data to sign (all protocol data)
129
+ const signatureData = [];
130
+ for (const proto of protocols) {
131
+ signatureData.push(...Utils.toArray(proto.protocol, 'utf8'));
132
+ signatureData.push(...proto.script);
133
+ signatureData.push(0x7c); // '|' separator
134
+ }
135
+ const aipData = await AIP.sign(signatureData, this.signer);
136
+ const aipScript = aipData.lock();
137
+ // Extract only the AIP data from the script (skip OP_RETURN and protocol address)
138
+ const aipChunks = aipScript.chunks.slice(2); // Skip OP_RETURN and AIP protocol address
139
+ const aipDataScript = new Script(aipChunks);
140
+ protocols.push({
141
+ protocol: AIP_PROTOCOL_ADDRESS,
142
+ script: aipDataScript.toBinary(),
143
+ pos: protocols.length,
144
+ });
145
+ }
146
+ // Create BitCom transaction
147
+ const bitcom = new BitCom(protocols);
148
+ return bitcom.lock();
149
+ }
150
+ /**
151
+ * Unlock method is not available for BSocial scripts, throws exception.
152
+ */
153
+ unlock() {
154
+ throw new Error('Unlock is not supported for BSocial scripts');
155
+ }
156
+ /**
157
+ * Creates a post transaction
158
+ *
159
+ * @param post The post data
160
+ * @param tags Optional tags for the post
161
+ * @param signer Optional private key for AIP signature
162
+ * @returns A locking script for the post
163
+ */
164
+ static async createPost(post, tags, signer) {
165
+ const bsocial = new BSocial(post, post.content, tags, signer);
166
+ return await bsocial.lock();
167
+ }
168
+ /**
169
+ * Creates a like transaction
170
+ *
171
+ * @param like The like data
172
+ * @param signer Optional private key for AIP signature
173
+ * @returns A locking script for the like
174
+ */
175
+ static async createLike(like, signer) {
176
+ const bsocial = new BSocial(like, undefined, undefined, signer);
177
+ return await bsocial.lock();
178
+ }
179
+ /**
180
+ * Creates a follow transaction
181
+ *
182
+ * @param follow The follow data
183
+ * @param signer Optional private key for AIP signature
184
+ * @returns A locking script for the follow
185
+ */
186
+ static async createFollow(follow, signer) {
187
+ const bsocial = new BSocial(follow, undefined, undefined, signer);
188
+ return await bsocial.lock();
189
+ }
190
+ /**
191
+ * Decodes a BSocial transaction script
192
+ *
193
+ * @param script The script to decode
194
+ * @returns Decoded BSocial data
195
+ */
196
+ static decode(script) {
197
+ try {
198
+ // First decode the BitCom structure
199
+ const bitcom = BitCom.decode(script);
200
+ if (bitcom == null) {
201
+ return null;
202
+ }
203
+ let content;
204
+ let action;
205
+ let tags = [];
206
+ const attachments = [];
207
+ let aip;
208
+ // Process each protocol in the BitCom transaction
209
+ for (const protocol of bitcom.protocols) {
210
+ if (protocol.protocol === B_PROTOCOL_ADDRESS) {
211
+ // Parse B protocol data directly: DATA MEDIA_TYPE ENCODING [FILENAME]
212
+ const bScript = Script.fromBinary(protocol.script);
213
+ const chunks = bScript.chunks;
214
+ if (chunks.length >= 3) {
215
+ // Need at least DATA, MEDIA_TYPE, ENCODING
216
+ const dataChunk = chunks[0];
217
+ const mediaTypeChunk = chunks[1];
218
+ const encodingChunk = chunks[2];
219
+ if (dataChunk.data != null &&
220
+ mediaTypeChunk.data != null &&
221
+ encodingChunk.data != null) {
222
+ const mediaType = Utils.toUTF8(mediaTypeChunk.data);
223
+ const encoding = Utils.toUTF8(encodingChunk.data);
224
+ if (mediaType === 'text/plain' && encoding === 'utf-8') {
225
+ content = Utils.toUTF8(dataChunk.data);
226
+ }
227
+ else {
228
+ attachments.push({
229
+ type: mediaType,
230
+ content: dataChunk.data,
231
+ size: dataChunk.data.length,
232
+ encoding,
233
+ });
234
+ }
235
+ }
236
+ }
237
+ }
238
+ else if (protocol.protocol === MAP_PROTOCOL_ADDRESS) {
239
+ // Parse MAP protocol data directly: COMMAND key1 value1 key2 value2...
240
+ const mapScript = Script.fromBinary(protocol.script);
241
+ const chunks = mapScript.chunks;
242
+ if (chunks.length >= 1) {
243
+ // Read COMMAND (first chunk)
244
+ const cmdChunk = chunks[0];
245
+ if (cmdChunk.data != null) {
246
+ const cmd = Utils.toUTF8(cmdChunk.data);
247
+ // Handle SET command - read key-value pairs
248
+ if (cmd === 'SET') {
249
+ const mapKV = {};
250
+ for (let i = 1; i < chunks.length; i += 2) {
251
+ // Read key
252
+ const keyChunk = chunks[i];
253
+ if (keyChunk?.data == null)
254
+ break;
255
+ // Read value (next chunk)
256
+ const valueChunk = chunks[i + 1];
257
+ if (valueChunk?.data == null)
258
+ break;
259
+ const key = Utils.toUTF8(keyChunk.data);
260
+ const value = Utils.toUTF8(valueChunk.data);
261
+ mapKV[key] = value;
262
+ }
263
+ const app = mapKV.app;
264
+ if (app === BSOCIAL_APP_NAME) {
265
+ const type = mapKV.type;
266
+ const ctx = mapKV.context;
267
+ const contextValue = mapKV.contextValue;
268
+ const subcontext = mapKV.subcontext;
269
+ const subcontextValue = mapKV.subcontextValue;
270
+ action = {
271
+ app: BSOCIAL_APP_NAME,
272
+ type,
273
+ context: ctx,
274
+ contextValue,
275
+ subcontext,
276
+ subcontextValue,
277
+ };
278
+ // Extract specific action data
279
+ if (type === BSocialActionType.LIKE) {
280
+ const txid = mapKV.tx;
281
+ if (txid != null && txid !== '') {
282
+ ;
283
+ action.txid = txid;
284
+ }
285
+ }
286
+ else if (type === BSocialActionType.FOLLOW) {
287
+ const bapId = mapKV.bapId;
288
+ if (bapId != null && bapId !== '') {
289
+ ;
290
+ action.bapId = bapId;
291
+ }
292
+ }
293
+ else if (type === BSocialActionType.VIDEO) {
294
+ const videoAction = action;
295
+ if (contextValue != null && contextValue !== '') {
296
+ videoAction.videoID = contextValue;
297
+ }
298
+ if (subcontextValue != null && subcontextValue !== '') {
299
+ videoAction.provider = subcontextValue;
300
+ }
301
+ if (mapKV.duration != null && mapKV.duration !== '') {
302
+ videoAction.duration = Number.parseInt(mapKV.duration, 10);
303
+ }
304
+ if (mapKV.start != null && mapKV.start !== '') {
305
+ videoAction.start = Number.parseInt(mapKV.start, 10);
306
+ }
307
+ }
308
+ // Extract tags
309
+ const tagEntries = Object.entries(mapKV).filter(([key]) => key.startsWith('tag'));
310
+ tags = tagEntries.map(([key, value]) => [key, value]);
311
+ }
312
+ }
313
+ }
314
+ }
315
+ }
316
+ else if (protocol.protocol === AIP_PROTOCOL_ADDRESS) {
317
+ // Extract AIP signature data - create BitCom structure for AIP.decode
318
+ const aipBitCom = {
319
+ protocols: [protocol],
320
+ scriptPrefix: [],
321
+ };
322
+ const aipDecoded = AIP.decode(aipBitCom);
323
+ if (aipDecoded != null && aipDecoded.length > 0) {
324
+ aip = aipDecoded[0].data;
325
+ }
326
+ }
327
+ }
328
+ // Must have action to be valid BSocial transaction
329
+ if (action == null) {
330
+ return null;
331
+ }
332
+ return {
333
+ action,
334
+ content,
335
+ attachments,
336
+ tags,
337
+ aip,
338
+ };
339
+ }
340
+ catch {
341
+ return null;
342
+ }
343
+ }
344
+ /**
345
+ * Signs data with AIP protocol
346
+ *
347
+ * @param privateKey The private key to sign with
348
+ * @param message The message to sign
349
+ * @returns Base64 encoded signature
350
+ */
351
+ static async signAIP(signer, message) {
352
+ const messageData = Utils.toArray(message, 'utf8');
353
+ const aipData = await AIP.sign(messageData, signer);
354
+ return Utils.toBase64(aipData.data.signature);
355
+ }
356
+ /**
357
+ * Creates a reply transaction
358
+ *
359
+ * @param reply The reply data
360
+ * @param replyTxId The transaction ID being replied to
361
+ * @param tags Optional tags for the reply
362
+ * @param signer Optional private key for AIP signature
363
+ * @returns A locking script for the reply
364
+ */
365
+ static async createReply(reply, replyTxId, tags, signer) {
366
+ const replyAction = {
367
+ ...reply,
368
+ context: BSocialContext.TX,
369
+ contextValue: replyTxId,
370
+ };
371
+ const bsocial = new BSocial(replyAction, reply.content, tags, signer);
372
+ return await bsocial.lock();
373
+ }
374
+ /**
375
+ * Creates a message transaction
376
+ *
377
+ * @param message The message data
378
+ * @param signer Optional private key for AIP signature
379
+ * @returns A locking script for the message
380
+ */
381
+ static async createMessage(message, signer) {
382
+ const bsocial = new BSocial(message, message.content, undefined, signer);
383
+ return await bsocial.lock();
384
+ }
385
+ /**
386
+ * Creates a video transaction
387
+ *
388
+ * @param video The video data including provider and videoID
389
+ * @param signer Optional private key for AIP signature
390
+ * @returns A locking script for the video
391
+ */
392
+ static async createVideo(video, signer) {
393
+ const bsocial = new BSocial(video, undefined, undefined, signer);
394
+ return await bsocial.lock();
395
+ }
396
+ }
397
+ //# sourceMappingURL=bsocial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bsocial.js","sourceRoot":"","sources":["../../src/bsocial/bsocial.ts"],"names":[],"mappings":"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"}