@stackory/gateway-persistence 0.0.1 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-database.d.ts","sourceRoot":"","sources":["../../src/gateway-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,wBAAwB,CAAC;AAQhC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACtD,GAAG,gBAAgB,CAYnB"}
1
+ {"version":3,"file":"gateway-database.d.ts","sourceRoot":"","sources":["../../src/gateway-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,wBAAwB,CAAC;AAQhC,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACtD,GAAG,gBAAgB,CAkBnB"}
@@ -2,17 +2,22 @@ import { openDatabase } from './database';
2
2
  import { createDedupStore } from './stores/dedup-store';
3
3
  import { SqliteAdapterBindingStore } from './stores/sqlite-binding-store';
4
4
  import { SqlitePairRequestStore } from './stores/sqlite-pair-request-store';
5
- import { SqliteAccessPolicyStore } from './stores/sqlite-policy-store';
6
5
  import { SqliteSessionStore } from './stores/sqlite-session-store';
6
+ import { SqliteUserBindingStore } from './stores/sqlite-user-binding-store';
7
7
  export function openGatewayDatabase(opts) {
8
8
  const db = openDatabase({ databasePath: opts.databasePath });
9
9
  const serializers = opts.serializers ?? new Map();
10
10
  return {
11
11
  sessions: new SqliteSessionStore(db),
12
12
  bindings: new SqliteAdapterBindingStore(db, serializers),
13
- policies: new SqliteAccessPolicyStore(db),
13
+ users: new SqliteUserBindingStore(db),
14
14
  pairs: new SqlitePairRequestStore(db),
15
15
  dedup: createDedupStore(db),
16
+ // sync-only 事务 — db.drizzle.transaction(fn) 对回调返回值有
17
+ // T extends Promise<any> ? DrizzleTypeError : T 的泛型约束,
18
+ // 而我们独立泛型 T 无法满足该条件类型,故需要 as never → as T 绕开。
19
+ // 下层(drizzle + node:sqlite)与上层(fn)均为同步,此 cast 安全。
20
+ transaction: (fn) => db.drizzle.transaction(() => fn()),
16
21
  close: () => db.close(),
17
22
  };
18
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gateway-database.js","sourceRoot":"","sources":["../../src/gateway-database.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,UAAU,mBAAmB,CAAC,IAGnC;IACA,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,EAAE,CAAC;IAElD,OAAO;QACN,QAAQ,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC;QACpC,QAAQ,EAAE,IAAI,yBAAyB,CAAC,EAAE,EAAE,WAAW,CAAC;QACxD,QAAQ,EAAE,IAAI,uBAAuB,CAAC,EAAE,CAAC;QACzC,KAAK,EAAE,IAAI,sBAAsB,CAAC,EAAE,CAAC;QACrC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC3B,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"gateway-database.js","sourceRoot":"","sources":["../../src/gateway-database.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,MAAM,UAAU,mBAAmB,CAAC,IAGnC;IACA,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG,EAAE,CAAC;IAElD,OAAO;QACN,QAAQ,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC;QACpC,QAAQ,EAAE,IAAI,yBAAyB,CAAC,EAAE,EAAE,WAAW,CAAC;QACxD,KAAK,EAAE,IAAI,sBAAsB,CAAC,EAAE,CAAC;QACrC,KAAK,EAAE,IAAI,sBAAsB,CAAC,EAAE,CAAC;QACrC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC3B,oDAAoD;QACpD,uDAAuD;QACvD,8CAA8C;QAC9C,kDAAkD;QAClD,WAAW,EAAE,CAAI,EAAW,EAAK,EAAE,CAClC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,EAAE,EAAW,CAAM;QACjD,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE;KACvB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../../src/migrations/generated.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,eAAO,MAAM,mBAAmB,EAAE,SAAS,UAAU,EAEpD,CAAC"}
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../../src/migrations/generated.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKrD,eAAO,MAAM,mBAAmB,EAAE,SAAS,UAAU,EAKpD,CAAC"}
@@ -1,7 +1,10 @@
1
1
  // AUTO-GENERATED by `pnpm drizzle:codegen`. Do not edit by hand.
2
2
  // To regenerate: edit src/schema.ts → run `pnpm drizzle:generate` → `pnpm drizzle:codegen`.
3
- const _20260610000227_square_argent = "CREATE TABLE `adapter_bindings` (\n\t`adapter_id` text PRIMARY KEY,\n\t`platform` text NOT NULL,\n\t`config_json` text DEFAULT '{}' NOT NULL,\n\t`secrets_json` text DEFAULT '{}' NOT NULL\n);\n\nCREATE TABLE `chat_policy` (\n\t`adapter_id` text NOT NULL,\n\t`chat_id` text NOT NULL,\n\t`policy` text NOT NULL,\n\t`require_mention` integer DEFAULT 0 NOT NULL,\n\t`allowlist_json` text DEFAULT '[]' NOT NULL,\n\t`blacklist_json` text DEFAULT '[]' NOT NULL,\n\t`updated_by` text NOT NULL,\n\t`updated_at_ms` integer NOT NULL,\n\tCONSTRAINT `chat_policy_pkey` PRIMARY KEY(`adapter_id`, `chat_id`)\n);\n\nCREATE TABLE `inbound_dedup` (\n\t`adapter_id` text NOT NULL,\n\t`message_id` text NOT NULL,\n\t`seen_at_ms` integer NOT NULL,\n\tCONSTRAINT `inbound_dedup_pkey` PRIMARY KEY(`adapter_id`, `message_id`)\n);\n\nCREATE TABLE `pair_requests` (\n\t`code` text PRIMARY KEY,\n\t`adapter_id` text NOT NULL,\n\t`user_id` text NOT NULL,\n\t`chat_id` text NOT NULL,\n\t`expires_at_ms` integer NOT NULL\n);\n\nCREATE TABLE `sessions` (\n\t`adapter_id` text NOT NULL,\n\t`chat_id` text NOT NULL,\n\t`thread_id` text DEFAULT '' NOT NULL,\n\t`user_id` text DEFAULT '' NOT NULL,\n\t`session_id` text NOT NULL,\n\t`state_kind` text NOT NULL,\n\t`state_data` text NOT NULL,\n\t`origin_json` text NOT NULL,\n\t`created_at_ms` integer NOT NULL,\n\t`last_turn_at_ms` integer NOT NULL,\n\t`token_input` integer DEFAULT 0 NOT NULL,\n\t`token_output` integer DEFAULT 0 NOT NULL,\n\tCONSTRAINT `sessions_pkey` PRIMARY KEY(`adapter_id`, `chat_id`, `thread_id`, `user_id`)\n);\n\nCREATE INDEX `idx_inbound_dedup_seen` ON `inbound_dedup` (`adapter_id`,`seen_at_ms`);\nCREATE INDEX `idx_sessions_adapter_state` ON `sessions` (`adapter_id`,`state_kind`);\nCREATE INDEX `idx_sessions_adapter_idle` ON `sessions` (`adapter_id`,`last_turn_at_ms`);";
3
+ const _20260610074040_third_jimmy_woo = "CREATE TABLE `adapter_bindings` (\n\t`adapter_id` text PRIMARY KEY,\n\t`platform` text NOT NULL,\n\t`config_json` text DEFAULT '{}' NOT NULL,\n\t`secrets_json` text DEFAULT '{}' NOT NULL\n);\n\nCREATE TABLE `inbound_dedup` (\n\t`adapter_id` text NOT NULL,\n\t`message_id` text NOT NULL,\n\t`seen_at_ms` integer NOT NULL,\n\tCONSTRAINT `inbound_dedup_pkey` PRIMARY KEY(`adapter_id`, `message_id`)\n);\n\nCREATE TABLE `pair_requests` (\n\t`code` text PRIMARY KEY,\n\t`adapter_id` text NOT NULL,\n\t`user_id` text NOT NULL,\n\t`chat_id` text NOT NULL,\n\t`expires_at_ms` integer NOT NULL\n);\n\nCREATE TABLE `sessions` (\n\t`adapter_id` text NOT NULL,\n\t`chat_id` text NOT NULL,\n\t`thread_id` text DEFAULT '' NOT NULL,\n\t`user_id` text DEFAULT '' NOT NULL,\n\t`session_id` text NOT NULL,\n\t`state_kind` text NOT NULL,\n\t`state_data` text NOT NULL,\n\t`origin_json` text NOT NULL,\n\t`created_at_ms` integer NOT NULL,\n\t`last_turn_at_ms` integer NOT NULL,\n\t`token_input` integer DEFAULT 0 NOT NULL,\n\t`token_output` integer DEFAULT 0 NOT NULL,\n\tCONSTRAINT `sessions_pkey` PRIMARY KEY(`adapter_id`, `chat_id`, `thread_id`, `user_id`)\n);\n\nCREATE TABLE `user_bindings` (\n\t`adapter_id` text NOT NULL,\n\t`user_id` text NOT NULL,\n\t`approved_at_ms` integer NOT NULL,\n\t`approved_by` text NOT NULL,\n\tCONSTRAINT `user_bindings_pkey` PRIMARY KEY(`adapter_id`, `user_id`)\n);\n\nCREATE INDEX `idx_inbound_dedup_seen` ON `inbound_dedup` (`adapter_id`,`seen_at_ms`);\nCREATE INDEX `idx_sessions_adapter_state` ON `sessions` (`adapter_id`,`state_kind`);\nCREATE INDEX `idx_sessions_adapter_idle` ON `sessions` (`adapter_id`,`last_turn_at_ms`);";
4
4
  export const generatedMigrations = [
5
- { name: "20260610000227_square_argent", sql: _20260610000227_square_argent },
5
+ {
6
+ name: '20260610074040_third_jimmy_woo',
7
+ sql: _20260610074040_third_jimmy_woo,
8
+ },
6
9
  ];
7
10
  //# sourceMappingURL=generated.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../../src/migrations/generated.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4FAA4F;AAI5F,MAAM,6BAA6B,GAAG,uxDAAuxD,CAAC;AAE9zD,MAAM,CAAC,MAAM,mBAAmB,GAA0B;IACzD,EAAE,IAAI,EAAE,8BAA8B,EAAE,GAAG,EAAE,6BAA6B,EAAE;CAC5E,CAAC"}
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../../src/migrations/generated.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4FAA4F;AAI5F,MAAM,+BAA+B,GACpC,inDAAinD,CAAC;AAEnnD,MAAM,CAAC,MAAM,mBAAmB,GAA0B;IACzD;QACC,IAAI,EAAE,gCAAgC;QACtC,GAAG,EAAE,+BAA+B;KACpC;CACD,CAAC"}
@@ -350,13 +350,13 @@ export declare const adapterBindings: import("drizzle-orm/sqlite-core").SQLiteTa
350
350
  };
351
351
  dialect: "sqlite";
352
352
  }>;
353
- export declare const chatPolicy: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
354
- name: "chat_policy";
353
+ export declare const userBindings: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
354
+ name: "user_bindings";
355
355
  schema: undefined;
356
356
  columns: {
357
357
  adapterId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
358
358
  name: string;
359
- tableName: "chat_policy";
359
+ tableName: "user_bindings";
360
360
  dataType: "string";
361
361
  data: string;
362
362
  driverParam: string;
@@ -370,25 +370,9 @@ export declare const chatPolicy: import("drizzle-orm/sqlite-core").SQLiteTableWi
370
370
  identity: undefined;
371
371
  generated: undefined;
372
372
  }, {}>;
373
- chatId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
374
- name: string;
375
- tableName: "chat_policy";
376
- dataType: "string";
377
- data: string;
378
- driverParam: string;
379
- notNull: true;
380
- hasDefault: false;
381
- isPrimaryKey: false;
382
- isAutoincrement: false;
383
- hasRuntimeDefault: false;
384
- enumValues: [string, ...string[]];
385
- baseColumn: never;
386
- identity: undefined;
387
- generated: undefined;
388
- }, {}>;
389
- policy: import("drizzle-orm/sqlite-core").SQLiteColumn<{
373
+ userId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
390
374
  name: string;
391
- tableName: "chat_policy";
375
+ tableName: "user_bindings";
392
376
  dataType: "string";
393
377
  data: string;
394
378
  driverParam: string;
@@ -402,14 +386,14 @@ export declare const chatPolicy: import("drizzle-orm/sqlite-core").SQLiteTableWi
402
386
  identity: undefined;
403
387
  generated: undefined;
404
388
  }, {}>;
405
- requireMention: import("drizzle-orm/sqlite-core").SQLiteColumn<{
389
+ approvedAtMs: import("drizzle-orm/sqlite-core").SQLiteColumn<{
406
390
  name: string;
407
- tableName: "chat_policy";
391
+ tableName: "user_bindings";
408
392
  dataType: "number int53";
409
393
  data: number;
410
394
  driverParam: number;
411
395
  notNull: true;
412
- hasDefault: true;
396
+ hasDefault: false;
413
397
  isPrimaryKey: false;
414
398
  isAutoincrement: false;
415
399
  hasRuntimeDefault: false;
@@ -418,41 +402,9 @@ export declare const chatPolicy: import("drizzle-orm/sqlite-core").SQLiteTableWi
418
402
  identity: undefined;
419
403
  generated: undefined;
420
404
  }, {}>;
421
- allowlistJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
422
- name: string;
423
- tableName: "chat_policy";
424
- dataType: "string";
425
- data: string;
426
- driverParam: string;
427
- notNull: true;
428
- hasDefault: true;
429
- isPrimaryKey: false;
430
- isAutoincrement: false;
431
- hasRuntimeDefault: false;
432
- enumValues: [string, ...string[]];
433
- baseColumn: never;
434
- identity: undefined;
435
- generated: undefined;
436
- }, {}>;
437
- blacklistJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
438
- name: string;
439
- tableName: "chat_policy";
440
- dataType: "string";
441
- data: string;
442
- driverParam: string;
443
- notNull: true;
444
- hasDefault: true;
445
- isPrimaryKey: false;
446
- isAutoincrement: false;
447
- hasRuntimeDefault: false;
448
- enumValues: [string, ...string[]];
449
- baseColumn: never;
450
- identity: undefined;
451
- generated: undefined;
452
- }, {}>;
453
- updatedBy: import("drizzle-orm/sqlite-core").SQLiteColumn<{
405
+ approvedBy: import("drizzle-orm/sqlite-core").SQLiteColumn<{
454
406
  name: string;
455
- tableName: "chat_policy";
407
+ tableName: "user_bindings";
456
408
  dataType: "string";
457
409
  data: string;
458
410
  driverParam: string;
@@ -466,22 +418,6 @@ export declare const chatPolicy: import("drizzle-orm/sqlite-core").SQLiteTableWi
466
418
  identity: undefined;
467
419
  generated: undefined;
468
420
  }, {}>;
469
- updatedAtMs: import("drizzle-orm/sqlite-core").SQLiteColumn<{
470
- name: string;
471
- tableName: "chat_policy";
472
- dataType: "number int53";
473
- data: number;
474
- driverParam: number;
475
- notNull: true;
476
- hasDefault: false;
477
- isPrimaryKey: false;
478
- isAutoincrement: false;
479
- hasRuntimeDefault: false;
480
- enumValues: undefined;
481
- baseColumn: never;
482
- identity: undefined;
483
- generated: undefined;
484
- }, {}>;
485
421
  };
486
422
  dialect: "sqlite";
487
423
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BpB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBtB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMvB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,QAAQ,CAAC,YAAY,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,OAAO,QAAQ,CAAC,YAAY,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC/D,MAAM,MAAM,kBAAkB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BpB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcxB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMvB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,QAAQ,CAAC,YAAY,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,OAAO,QAAQ,CAAC,YAAY,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC/D,MAAM,MAAM,kBAAkB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC"}
@@ -66,19 +66,15 @@ export const adapterBindings = sqliteTable('adapter_bindings', {
66
66
  configJson: text('config_json').notNull().default('{}'),
67
67
  secretsJson: text('secrets_json').notNull().default('{}'),
68
68
  });
69
- export const chatPolicy = sqliteTable('chat_policy', {
69
+ export const userBindings = sqliteTable('user_bindings', {
70
70
  adapterId: text('adapter_id').notNull(),
71
- chatId: text('chat_id').notNull(),
72
- policy: text('policy').notNull(),
73
- requireMention: integer('require_mention').notNull().default(0),
74
- allowlistJson: text('allowlist_json').notNull().default('[]'),
75
- blacklistJson: text('blacklist_json').notNull().default('[]'),
76
- updatedBy: text('updated_by').notNull(),
77
- updatedAtMs: integer('updated_at_ms').notNull(),
71
+ userId: text('user_id').notNull(),
72
+ approvedAtMs: integer('approved_at_ms').notNull(),
73
+ approvedBy: text('approved_by').notNull(),
78
74
  }, (t) => [
79
75
  primaryKey({
80
- name: 'chat_policy_pkey',
81
- columns: [t.adapterId, t.chatId],
76
+ name: 'user_bindings_pkey',
77
+ columns: [t.adapterId, t.userId],
82
78
  }),
83
79
  ]);
84
80
  export const pairRequests = sqliteTable('pair_requests', {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,6 @@ export { createDedupStore } from '../stores/dedup-store';
2
2
  export { InMemorySessionStore } from '../stores/in-memory-session-store';
3
3
  export { SqliteAdapterBindingStore } from '../stores/sqlite-binding-store';
4
4
  export { SqlitePairRequestStore } from '../stores/sqlite-pair-request-store';
5
- export { SqliteAccessPolicyStore } from '../stores/sqlite-policy-store';
6
5
  export { SqliteSessionStore } from '../stores/sqlite-session-store';
6
+ export { SqliteUserBindingStore } from '../stores/sqlite-user-binding-store';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stores/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/stores/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC"}
@@ -3,6 +3,6 @@ export { createDedupStore } from '../stores/dedup-store';
3
3
  export { InMemorySessionStore } from '../stores/in-memory-session-store';
4
4
  export { SqliteAdapterBindingStore } from '../stores/sqlite-binding-store';
5
5
  export { SqlitePairRequestStore } from '../stores/sqlite-pair-request-store';
6
- export { SqliteAccessPolicyStore } from '../stores/sqlite-policy-store';
7
6
  export { SqliteSessionStore } from '../stores/sqlite-session-store';
7
+ export { SqliteUserBindingStore } from '../stores/sqlite-user-binding-store';
8
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { IUserBindingStore } from '@stackory/gateway-core';
2
+ import type { IInternalDatabaseHandle } from '../database';
3
+ export declare class SqliteUserBindingStore implements IUserBindingStore {
4
+ private readonly db;
5
+ constructor(db: IInternalDatabaseHandle);
6
+ isApproved(adapterId: string, userId: string): boolean;
7
+ approve(adapterId: string, userId: string, by: string, atMs: number): boolean;
8
+ }
9
+ //# sourceMappingURL=sqlite-user-binding-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-user-binding-store.d.ts","sourceRoot":"","sources":["../../../src/stores/sqlite-user-binding-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAG1D,qBAAa,sBAAuB,YAAW,iBAAiB;IACnD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,uBAAuB;IAExD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IActD,OAAO,CACN,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,GACV,OAAO;CASV"}
@@ -0,0 +1,26 @@
1
+ import { and, eq } from 'drizzle-orm';
2
+ import { userBindings } from '../schema';
3
+ export class SqliteUserBindingStore {
4
+ db;
5
+ constructor(db) {
6
+ this.db = db;
7
+ }
8
+ isApproved(adapterId, userId) {
9
+ const row = this.db.drizzle
10
+ .select()
11
+ .from(userBindings)
12
+ .where(and(eq(userBindings.adapterId, adapterId), eq(userBindings.userId, userId)))
13
+ .get();
14
+ return row !== undefined;
15
+ }
16
+ approve(adapterId, userId, by, atMs) {
17
+ const result = this.db.drizzle
18
+ .insert(userBindings)
19
+ .values({ adapterId, userId, approvedBy: by, approvedAtMs: atMs })
20
+ .onConflictDoNothing()
21
+ .run();
22
+ // result.changes is 1 if row was inserted, 0 if conflict — no row inserted
23
+ return result.changes > 0;
24
+ }
25
+ }
26
+ //# sourceMappingURL=sqlite-user-binding-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-user-binding-store.js","sourceRoot":"","sources":["../../../src/stores/sqlite-user-binding-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,OAAO,sBAAsB;IACL;IAA7B,YAA6B,EAA2B;QAA3B,OAAE,GAAF,EAAE,CAAyB;IAAG,CAAC;IAE5D,UAAU,CAAC,SAAiB,EAAE,MAAc;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO;aACzB,MAAM,EAAE;aACR,IAAI,CAAC,YAAY,CAAC;aAClB,KAAK,CACL,GAAG,CACF,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,EACrC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAC/B,CACD;aACA,GAAG,EAAE,CAAC;QACR,OAAO,GAAG,KAAK,SAAS,CAAC;IAC1B,CAAC;IAED,OAAO,CACN,SAAiB,EACjB,MAAc,EACd,EAAU,EACV,IAAY;QAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO;aAC5B,MAAM,CAAC,YAAY,CAAC;aACpB,MAAM,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;aACjE,mBAAmB,EAAE;aACrB,GAAG,EAAE,CAAC;QACR,2EAA2E;QAC3E,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAC3B,CAAC;CACD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackory/gateway-persistence",
3
- "version": "0.0.1",
3
+ "version": "0.3.0",
4
4
  "exports": {
5
5
  ".": {
6
6
  "import": {
@@ -21,20 +21,9 @@
21
21
  }
22
22
  }
23
23
  },
24
- "scripts": {
25
- "build": "rimraf ./dist && tsc --project tsconfig.build.json && tsc-alias -p tsconfig.build.json",
26
- "clean": "rimraf ./node_modules dist .tanstack",
27
- "check:lint": "biome check --write",
28
- "check:type": "tsc -p ./tsconfig.json --noEmit",
29
- "check:dep": "depcruise --config .dependency-cruiser.mjs src",
30
- "check:test": "vitest --watch=false",
31
- "drizzle:generate": "drizzle-kit generate && pnpm drizzle:codegen",
32
- "drizzle:codegen": "tsx scripts/build-migrations.ts",
33
- "drizzle:check": "drizzle-kit check"
34
- },
35
24
  "dependencies": {
36
- "@stackory/gateway-core": "workspace:*",
37
- "drizzle-orm": "1.0.0-rc.3"
25
+ "drizzle-orm": "1.0.0-rc.3",
26
+ "@stackory/gateway-core": "0.3.0"
38
27
  },
39
28
  "devDependencies": {
40
29
  "@types/node": "25.9.1",
@@ -48,5 +37,16 @@
48
37
  "type": "git",
49
38
  "url": "https://github.com/stackory-lab/gateway",
50
39
  "directory": "persistence"
40
+ },
41
+ "scripts": {
42
+ "build": "rimraf ./dist && tsc --project tsconfig.build.json && tsc-alias -p tsconfig.build.json",
43
+ "clean": "rimraf ./node_modules dist .tanstack",
44
+ "check:lint": "biome check --write",
45
+ "check:type": "tsc -p ./tsconfig.json --noEmit",
46
+ "check:dep": "depcruise --config .dependency-cruiser.mjs src",
47
+ "check:test": "vitest --watch=false",
48
+ "drizzle:generate": "drizzle-kit generate && pnpm drizzle:codegen",
49
+ "drizzle:codegen": "tsx scripts/build-migrations.ts",
50
+ "drizzle:check": "drizzle-kit check"
51
51
  }
52
52
  }
@@ -1,12 +0,0 @@
1
- import type { IAccessPolicyStore, IChatPolicy, IChatPolicyEntry, IResolvedPolicy } from '@stackory/gateway-core';
2
- import type { IInternalDatabaseHandle } from '../database';
3
- export declare class SqliteAccessPolicyStore implements IAccessPolicyStore {
4
- private readonly db;
5
- constructor(db: IInternalDatabaseHandle);
6
- findChatPolicy(adapterId: string, chatId: string): IChatPolicy | undefined;
7
- upsertChatPolicy(adapterId: string, chatId: string, policy: IChatPolicy, by: string): void;
8
- deleteChatPolicy(adapterId: string, chatId: string): void;
9
- listChatPolicies(adapterId: string): readonly IChatPolicyEntry[];
10
- resolveForChat(adapterId: string, chatId: string, _chatType: 'p2p' | 'group'): IResolvedPolicy;
11
- }
12
- //# sourceMappingURL=sqlite-policy-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlite-policy-store.d.ts","sourceRoot":"","sources":["../../../src/stores/sqlite-policy-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAW1D,qBAAa,uBAAwB,YAAW,kBAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,uBAAuB;IAExD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAY1E,gBAAgB,CACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,EAAE,EAAE,MAAM,GACR,IAAI;IA2BP,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASzD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,gBAAgB,EAAE;IAShE,cAAc,CACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,KAAK,GAAG,OAAO,GACxB,eAAe;CAalB"}
@@ -1,95 +0,0 @@
1
- import { and, eq } from 'drizzle-orm';
2
- import { chatPolicy } from '../schema';
3
- const DENY_ALL = {
4
- source: 'default',
5
- policy: 'allowlist',
6
- requireMention: false,
7
- effectiveAllowlist: [],
8
- effectiveBlacklist: [],
9
- };
10
- export class SqliteAccessPolicyStore {
11
- db;
12
- constructor(db) {
13
- this.db = db;
14
- }
15
- findChatPolicy(adapterId, chatId) {
16
- const row = this.db.drizzle
17
- .select()
18
- .from(chatPolicy)
19
- .where(and(eq(chatPolicy.adapterId, adapterId), eq(chatPolicy.chatId, chatId)))
20
- .get();
21
- if (!row)
22
- return undefined;
23
- return rowToPolicy(row);
24
- }
25
- upsertChatPolicy(adapterId, chatId, policy, by) {
26
- this.db.drizzle
27
- .insert(chatPolicy)
28
- .values({
29
- adapterId,
30
- chatId,
31
- policy: policy.policy,
32
- requireMention: policy.requireMention ? 1 : 0,
33
- allowlistJson: JSON.stringify(policy.allowlist),
34
- blacklistJson: JSON.stringify(policy.blacklist),
35
- updatedBy: by,
36
- updatedAtMs: Date.now(),
37
- })
38
- .onConflictDoUpdate({
39
- target: [chatPolicy.adapterId, chatPolicy.chatId],
40
- set: {
41
- policy: policy.policy,
42
- requireMention: policy.requireMention ? 1 : 0,
43
- allowlistJson: JSON.stringify(policy.allowlist),
44
- blacklistJson: JSON.stringify(policy.blacklist),
45
- updatedBy: by,
46
- updatedAtMs: Date.now(),
47
- },
48
- })
49
- .run();
50
- }
51
- deleteChatPolicy(adapterId, chatId) {
52
- this.db.drizzle
53
- .delete(chatPolicy)
54
- .where(and(eq(chatPolicy.adapterId, adapterId), eq(chatPolicy.chatId, chatId)))
55
- .run();
56
- }
57
- listChatPolicies(adapterId) {
58
- return this.db.drizzle
59
- .select()
60
- .from(chatPolicy)
61
- .where(eq(chatPolicy.adapterId, adapterId))
62
- .all()
63
- .map(rowToEntry);
64
- }
65
- resolveForChat(adapterId, chatId, _chatType) {
66
- const policy = this.findChatPolicy(adapterId, chatId);
67
- if (!policy) {
68
- return DENY_ALL;
69
- }
70
- return {
71
- source: 'chat',
72
- policy: policy.policy,
73
- requireMention: policy.requireMention,
74
- effectiveAllowlist: policy.allowlist,
75
- effectiveBlacklist: policy.blacklist,
76
- };
77
- }
78
- }
79
- function rowToPolicy(row) {
80
- return {
81
- policy: row.policy,
82
- requireMention: row.requireMention === 1,
83
- allowlist: JSON.parse(row.allowlistJson),
84
- blacklist: JSON.parse(row.blacklistJson),
85
- };
86
- }
87
- function rowToEntry(row) {
88
- return {
89
- ...rowToPolicy(row),
90
- chatId: row.chatId,
91
- updatedBy: row.updatedBy,
92
- updatedAtMs: row.updatedAtMs,
93
- };
94
- }
95
- //# sourceMappingURL=sqlite-policy-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlite-policy-store.js","sourceRoot":"","sources":["../../../src/stores/sqlite-policy-store.ts"],"names":[],"mappings":"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"}