@soulcode/bexio-oauth 0.1.0 → 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.
Files changed (79) hide show
  1. package/README.md +9 -5
  2. package/dist/claims.d.ts +3 -3
  3. package/dist/claims.d.ts.map +1 -1
  4. package/dist/claims.js +5 -5
  5. package/dist/claims.js.map +1 -1
  6. package/dist/client.d.ts +4 -137
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +18 -629
  9. package/dist/client.js.map +1 -1
  10. package/dist/config.d.ts +22 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +57 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/connect-flow.d.ts +15 -0
  15. package/dist/connect-flow.d.ts.map +1 -0
  16. package/dist/connect-flow.js +123 -0
  17. package/dist/connect-flow.js.map +1 -0
  18. package/dist/crypto.d.ts +2 -2
  19. package/dist/crypto.d.ts.map +1 -1
  20. package/dist/crypto.js +20 -15
  21. package/dist/crypto.js.map +1 -1
  22. package/dist/errors.d.ts +1 -1
  23. package/dist/errors.d.ts.map +1 -1
  24. package/dist/external-tokens.d.ts +8 -0
  25. package/dist/external-tokens.d.ts.map +1 -0
  26. package/dist/external-tokens.js +73 -0
  27. package/dist/external-tokens.js.map +1 -0
  28. package/dist/flow-cookie.d.ts +23 -0
  29. package/dist/flow-cookie.d.ts.map +1 -0
  30. package/dist/flow-cookie.js +44 -0
  31. package/dist/flow-cookie.js.map +1 -0
  32. package/dist/grants.d.ts +45 -0
  33. package/dist/grants.d.ts.map +1 -0
  34. package/dist/grants.js +143 -0
  35. package/dist/grants.js.map +1 -0
  36. package/dist/idle-sweep.d.ts +11 -0
  37. package/dist/idle-sweep.d.ts.map +1 -0
  38. package/dist/idle-sweep.js +70 -0
  39. package/dist/idle-sweep.js.map +1 -0
  40. package/dist/index.d.ts +3 -2
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +1 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/migrations.generated.d.ts +3 -0
  45. package/dist/migrations.generated.d.ts.map +1 -0
  46. package/dist/migrations.generated.js +56 -0
  47. package/dist/migrations.generated.js.map +1 -0
  48. package/dist/oidc.d.ts +30 -0
  49. package/dist/oidc.d.ts.map +1 -0
  50. package/dist/oidc.js +67 -0
  51. package/dist/oidc.js.map +1 -0
  52. package/dist/refresh.d.ts +30 -0
  53. package/dist/refresh.d.ts.map +1 -0
  54. package/dist/refresh.js +147 -0
  55. package/dist/refresh.js.map +1 -0
  56. package/dist/return-to.d.ts +8 -0
  57. package/dist/return-to.d.ts.map +1 -0
  58. package/dist/return-to.js +31 -0
  59. package/dist/return-to.js.map +1 -0
  60. package/dist/sql.d.ts +6 -1
  61. package/dist/sql.d.ts.map +1 -1
  62. package/dist/sql.js +8 -12
  63. package/dist/sql.js.map +1 -1
  64. package/dist/store/memory.d.ts.map +1 -1
  65. package/dist/store/memory.js +82 -46
  66. package/dist/store/memory.js.map +1 -1
  67. package/dist/store/postgres.d.ts +4 -4
  68. package/dist/store/postgres.d.ts.map +1 -1
  69. package/dist/store/postgres.js +137 -59
  70. package/dist/store/postgres.js.map +1 -1
  71. package/dist/store/types.d.ts +61 -21
  72. package/dist/store/types.d.ts.map +1 -1
  73. package/dist/types.d.ts +164 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +2 -0
  76. package/dist/types.js.map +1 -0
  77. package/package.json +3 -1
  78. package/sql/0001_bexio_oauth.sql +48 -0
  79. package/sql/0001_bexio_grants.sql +0 -32
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soulcode/bexio-oauth",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Bexio OAuth token custody for Node apps: connect Bexio accounts, store tokens encrypted in Postgres, get a valid access token anywhere.",
5
5
  "keywords": [
6
6
  "bexio",
@@ -38,6 +38,8 @@
38
38
  "node": ">=24"
39
39
  },
40
40
  "scripts": {
41
+ "sql:generate": "node ../../scripts/generate-migrations.mjs",
42
+ "prebuild": "node ../../scripts/generate-migrations.mjs --check",
41
43
  "build": "tsc -p tsconfig.build.json",
42
44
  "typecheck": "tsc -p tsconfig.json --noEmit",
43
45
  "test": "vitest run",
@@ -0,0 +1,48 @@
1
+ -- @soulcode/bexio-oauth 0001: connections and grants.
2
+ -- Token columns hold JWE ciphertext; only your server-side database role
3
+ -- should be able to read these tables.
4
+
5
+ -- One row per Bexio identity (company, user): the tokens of its one refresh
6
+ -- token chain, shared by every owner that connected this identity.
7
+ CREATE TABLE IF NOT EXISTS bexio_connections (
8
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
9
+ bexio_company_id text NOT NULL,
10
+ bexio_user_id text NOT NULL,
11
+ bexio_company_user_id integer,
12
+ company_name text,
13
+ user_name text,
14
+ user_email text,
15
+ role text NOT NULL DEFAULT 'member' CHECK (role IN ('admin', 'member')),
16
+ status text NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'reauth_required')),
17
+ access_token text NOT NULL,
18
+ refresh_token text,
19
+ access_expires_at timestamptz,
20
+ refresh_expires_at timestamptz,
21
+ scope text,
22
+ refresh_locked_until timestamptz,
23
+ refresh_lock_token text,
24
+ authorized_at timestamptz NOT NULL,
25
+ last_refreshed_at timestamptz NOT NULL DEFAULT now(),
26
+ created_at timestamptz NOT NULL DEFAULT now(),
27
+ updated_at timestamptz NOT NULL DEFAULT now(),
28
+ CONSTRAINT bexio_connections_company_user_key UNIQUE (bexio_company_id, bexio_user_id)
29
+ );
30
+
31
+ -- refreshIdle(): active connections by last refresh.
32
+ CREATE INDEX IF NOT EXISTS bexio_connections_idle_idx
33
+ ON bexio_connections (last_refreshed_at)
34
+ WHERE status = 'active';
35
+
36
+ -- One row per (owner, connection): an owner's access to a connection. A
37
+ -- connection is deleted only once no grant references it (RESTRICT).
38
+ CREATE TABLE IF NOT EXISTS bexio_grants (
39
+ id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
40
+ owner_id text NOT NULL,
41
+ connection_id uuid NOT NULL REFERENCES bexio_connections (id) ON DELETE RESTRICT,
42
+ created_at timestamptz NOT NULL DEFAULT now(),
43
+ CONSTRAINT bexio_grants_owner_connection_key UNIQUE (owner_id, connection_id)
44
+ );
45
+
46
+ -- Disconnect checks whether a connection has grants left.
47
+ CREATE INDEX IF NOT EXISTS bexio_grants_connection_idx
48
+ ON bexio_grants (connection_id);
@@ -1,32 +0,0 @@
1
- -- @soulcode/bexio-oauth 0001: the grants table.
2
- -- One row per (owner, Bexio company, Bexio user). Token columns hold JWE
3
- -- ciphertext; only your server-side database role should be able to read them.
4
-
5
- CREATE TABLE IF NOT EXISTS bexio_grants (
6
- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
7
- owner_id text NOT NULL,
8
- bexio_company_id text NOT NULL,
9
- bexio_user_id text NOT NULL,
10
- bexio_company_user_id integer,
11
- company_name text,
12
- user_name text,
13
- user_email text,
14
- role text NOT NULL DEFAULT 'member' CHECK (role IN ('admin', 'member')),
15
- status text NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'reauth_required')),
16
- access_token text NOT NULL,
17
- refresh_token text,
18
- access_expires_at timestamptz,
19
- refresh_expires_at timestamptz,
20
- scope text,
21
- refresh_locked_until timestamptz,
22
- refresh_lock_token text,
23
- last_refreshed_at timestamptz NOT NULL DEFAULT now(),
24
- created_at timestamptz NOT NULL DEFAULT now(),
25
- updated_at timestamptz NOT NULL DEFAULT now(),
26
- CONSTRAINT bexio_grants_owner_company_user_key UNIQUE (owner_id, bexio_company_id, bexio_user_id)
27
- );
28
-
29
- -- refreshIdle(): active grants by last refresh.
30
- CREATE INDEX IF NOT EXISTS bexio_grants_idle_idx
31
- ON bexio_grants (last_refreshed_at)
32
- WHERE status = 'active';