@thingd/sdk 0.47.2 → 0.47.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAW7D,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC;IACtC,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,0BAA+B,GACvC,IAAI,CAstBN"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAW7D,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC;IACtC,SAAS,CAAC,EAAE,yBAAyB,CAAC;CACvC,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,GAAE,0BAA+B,GACvC,IAAI,CA2vBN"}
package/dist/mcp/tools.js CHANGED
@@ -143,6 +143,10 @@ export function registerThingdTools(server, db, options = {}) {
143
143
  },
144
144
  }, async ({ stream, event, actor, source }) => {
145
145
  assertWriteAllowed();
146
+ // Prevent direct writes to the protected audit stream
147
+ if (stream === audit.stream) {
148
+ throw new Error(`Stream '${stream}' is protected and cannot be written to directly`);
149
+ }
146
150
  const stored = await db.events.append(stream, event);
147
151
  await appendMcpAuditEvent(db, audit, {
148
152
  action: "events.append",
@@ -453,6 +457,7 @@ export function registerThingdTools(server, db, options = {}) {
453
457
  .array(z.object({ id: z.string() }).passthrough())
454
458
  .min(1)
455
459
  .max(1000),
460
+ ...auditInputSchema,
456
461
  },
457
462
  annotations: {
458
463
  readOnlyHint: false,
@@ -460,10 +465,17 @@ export function registerThingdTools(server, db, options = {}) {
460
465
  idempotentHint: false,
461
466
  openWorldHint: false,
462
467
  },
463
- }, async ({ collection, objects }) => {
468
+ }, async ({ collection, objects, actor, source }) => {
464
469
  assertWriteAllowed();
465
470
  assertCollectionAllowed(collection);
466
- return jsonResult(await db.putBatch(collection, objects));
471
+ const result = await db.putBatch(collection, objects);
472
+ await appendMcpAuditEvent(db, audit, {
473
+ action: "objects.put_batch",
474
+ target: { collection, count: objects.length },
475
+ metadata: auditMetadata(actor, source),
476
+ result: { count: result.length },
477
+ });
478
+ return jsonResult(result);
467
479
  });
468
480
  server.registerTool("thing_objects_delete_batch", {
469
481
  title: "Delete Objects Batch",
@@ -471,6 +483,7 @@ export function registerThingdTools(server, db, options = {}) {
471
483
  inputSchema: {
472
484
  collection: z.string().min(1),
473
485
  ids: z.array(z.string().min(1)).min(1).max(1000),
486
+ ...auditInputSchema,
474
487
  },
475
488
  annotations: {
476
489
  readOnlyHint: false,
@@ -478,10 +491,16 @@ export function registerThingdTools(server, db, options = {}) {
478
491
  idempotentHint: true,
479
492
  openWorldHint: false,
480
493
  },
481
- }, async ({ collection, ids }) => {
494
+ }, async ({ collection, ids, actor, source }) => {
482
495
  assertWriteAllowed();
483
496
  assertCollectionAllowed(collection);
484
497
  const deleted = await db.deleteBatch(collection, ids);
498
+ await appendMcpAuditEvent(db, audit, {
499
+ action: "objects.delete_batch",
500
+ target: { collection, count: ids.length },
501
+ metadata: auditMetadata(actor, source),
502
+ result: { deleted },
503
+ });
485
504
  return jsonResult({ deleted });
486
505
  });
487
506
  server.registerTool("thing_link_create", {
@@ -493,6 +512,7 @@ export function registerThingdTools(server, db, options = {}) {
493
512
  toRef: z.string().min(1),
494
513
  weight: z.number().optional(),
495
514
  metadataJson: z.string().optional(),
515
+ ...auditInputSchema,
496
516
  },
497
517
  annotations: {
498
518
  readOnlyHint: false,
@@ -500,15 +520,23 @@ export function registerThingdTools(server, db, options = {}) {
500
520
  idempotentHint: false,
501
521
  openWorldHint: false,
502
522
  },
503
- }, async ({ fromRef, linkType, toRef, weight, metadataJson }) => {
523
+ }, async ({ fromRef, linkType, toRef, weight, metadataJson, actor, source }) => {
504
524
  assertWriteAllowed();
505
- return jsonResult(await db.links.create(fromRef, linkType, toRef, weight, metadataJson));
525
+ const link = await db.links.create(fromRef, linkType, toRef, weight, metadataJson);
526
+ await appendMcpAuditEvent(db, audit, {
527
+ action: "link.create",
528
+ target: { fromRef, linkType, toRef },
529
+ metadata: auditMetadata(actor, source),
530
+ result: { id: link.id },
531
+ });
532
+ return jsonResult(link);
506
533
  });
507
534
  server.registerTool("thing_link_delete", {
508
535
  title: "Delete Link",
509
536
  description: "Delete a graph link by its id. Returns an object with a deleted boolean.",
510
537
  inputSchema: {
511
538
  id: z.string().min(1),
539
+ ...auditInputSchema,
512
540
  },
513
541
  annotations: {
514
542
  readOnlyHint: false,
@@ -516,9 +544,16 @@ export function registerThingdTools(server, db, options = {}) {
516
544
  idempotentHint: true,
517
545
  openWorldHint: false,
518
546
  },
519
- }, async ({ id }) => {
547
+ }, async ({ id, actor, source }) => {
520
548
  assertWriteAllowed();
521
- return jsonResult({ deleted: await db.links.delete(id) });
549
+ const deleted = await db.links.delete(id);
550
+ await appendMcpAuditEvent(db, audit, {
551
+ action: "link.delete",
552
+ target: { id },
553
+ metadata: auditMetadata(actor, source),
554
+ result: { deleted },
555
+ });
556
+ return jsonResult({ deleted });
522
557
  });
523
558
  server.registerTool("thing_link_get", {
524
559
  title: "Get Link",
package/dist/version.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * The published version of the thingd SDK.
3
3
  * Updated automatically by semantic-release during the publish process.
4
4
  */
5
- export declare const SDK_VERSION = "0.47.1";
5
+ export declare const SDK_VERSION = "0.47.3";
6
6
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -2,4 +2,4 @@
2
2
  * The published version of the thingd SDK.
3
3
  * Updated automatically by semantic-release during the publish process.
4
4
  */
5
- export const SDK_VERSION = "0.47.1";
5
+ export const SDK_VERSION = "0.47.3";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thingd/sdk",
3
- "version": "0.47.2",
3
+ "version": "0.47.4",
4
4
  "description": "A fast object-first data engine for applications and AI agents.",
5
5
  "type": "module",
6
6
  "author": "Sayan Mohsin",
@@ -63,7 +63,7 @@
63
63
  "zod": "^4.4.3"
64
64
  },
65
65
  "optionalDependencies": {
66
- "@thingd/native": "0.47.2"
66
+ "@thingd/native": "0.47.4"
67
67
  },
68
68
  "engines": {
69
69
  "node": ">=24.0.0"