@actual-app/sync-server 26.5.0 → 26.5.2

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":"1719409568000-multiuser.d.ts","sourceRoot":"","sources":["../../migrations/1719409568000-multiuser.js"],"names":[],"mappings":"AAEA,eAAO,MAAM,EAAE,qBA+Cd,CAAC;AAEF,eAAO,MAAM,IAAI,qBA8DhB,CAAC"}
1
+ {"version":3,"file":"1719409568000-multiuser.d.ts","sourceRoot":"","sources":["../../migrations/1719409568000-multiuser.js"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE,qBA+Cd,CAAC;AAEF,eAAO,MAAM,IAAI,qBA8DhB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { v4 as uuidv4 } from 'uuid';
1
2
  import { getAccountDb } from '../src/account-db.js';
2
3
  export const up = async function () {
3
4
  const accountDb = getAccountDb();
@@ -31,7 +32,7 @@ export const up = async function () {
31
32
  ALTER TABLE sessions
32
33
  ADD COLUMN auth_method TEXT;
33
34
  `);
34
- const userId = crypto.randomUUID();
35
+ const userId = uuidv4();
35
36
  accountDb.mutate('INSERT INTO users (id, user_name, display_name, enabled, owner, role) VALUES (?, ?, ?, 1, 1, ?)', [userId, '', '', 'ADMIN']);
36
37
  accountDb.mutate('UPDATE sessions SET user_id = ?, expires_at = ?, auth_method = ? WHERE auth_method IS NULL', [userId, -1, 'password']);
37
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"openid.d.ts","sourceRoot":"","sources":["../../../src/accounts/openid.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAsB,eAAe,CAAC,eAAe,EAAE,eAAe;;;;GAgDrE;AA0BD,wBAAsB,oBAAoB,CACxC,SAAS,KAAA,EACT,sBAAsB,SAAK;;;;;;GAyE5B;AAED,wBAAsB,uBAAuB,CAAC,IAAI,KAAA;;;;;;GAmKjD;AAED,wBAAgB,iBAAiB,QAchC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,MAAM,CAsBzE"}
1
+ {"version":3,"file":"openid.d.ts","sourceRoot":"","sources":["../../../src/accounts/openid.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAsB,eAAe,CAAC,eAAe,EAAE,eAAe;;;;GAgDrE;AA0BD,wBAAsB,oBAAoB,CACxC,SAAS,KAAA,EACT,sBAAsB,SAAK;;;;;;GAyE5B;AAED,wBAAsB,uBAAuB,CAAC,IAAI,KAAA;;;;;;GAmKjD;AAED,wBAAgB,iBAAiB,QAchC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,MAAM,CAsBzE"}
@@ -1,5 +1,6 @@
1
1
  // @ts-strict-ignore
2
2
  import { custom, generators, Issuer } from 'openid-client';
3
+ import { v4 as uuidv4 } from 'uuid';
3
4
  import { clearExpiredSessions, getAccountDb, listLoginMethods, } from '../account-db.js';
4
5
  import { config } from '../load-config.js';
5
6
  import { getUserByUsername, transferAllFilesFromUser, } from '../services/user-service.js';
@@ -187,7 +188,7 @@ export async function loginWithOpenIdFinalize(body) {
187
188
  if (!existingUser &&
188
189
  (countUsersWithUserName === 0 ||
189
190
  config.get('userCreationMode') === 'login')) {
190
- userId = crypto.randomUUID();
191
+ userId = uuidv4();
191
192
  accountDb.mutate('INSERT INTO users (id, user_name, display_name, enabled, owner, role) VALUES (?, ?, ?, 1, ?, ?)', [
192
193
  userId,
193
194
  identity,
@@ -228,7 +229,7 @@ export async function loginWithOpenIdFinalize(body) {
228
229
  throw error; // Re-throw other unexpected errors
229
230
  }
230
231
  }
231
- const token = crypto.randomUUID();
232
+ const token = uuidv4();
232
233
  let expiration;
233
234
  if (config.get('token_expiration') === 'openid-provider') {
234
235
  expiration = tokenSet.expires_at ?? TOKEN_EXPIRATION_NEVER;
@@ -1 +1 @@
1
- {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/accounts/password.js"],"names":[],"mappings":"AAcA,wBAAgB,iBAAiB,CAAC,QAAQ,KAAA;;;;EAiBzC;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,KAAA;;;;;;EA4EzC;AAED,wBAAgB,cAAc,CAAC,WAAW,KAAA;;;;EAYzC;AAED,wBAAgB,aAAa,CAAC,QAAQ,KAAA,WAsBrC"}
1
+ {"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/accounts/password.js"],"names":[],"mappings":"AAeA,wBAAgB,iBAAiB,CAAC,QAAQ,KAAA;;;;EAiBzC;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,KAAA;;;;;;EA4EzC;AAED,wBAAgB,cAAc,CAAC,WAAW,KAAA;;;;EAYzC;AAED,wBAAgB,aAAa,CAAC,QAAQ,KAAA,WAsBrC"}
@@ -1,4 +1,5 @@
1
1
  import * as bcrypt from 'bcrypt';
2
+ import { v4 as uuidv4 } from 'uuid';
2
3
  import { clearExpiredSessions, getAccountDb } from '../account-db.js';
3
4
  import { config } from '../load-config.js';
4
5
  import { TOKEN_EXPIRATION_NEVER } from '../util/validate-user.js';
@@ -37,11 +38,11 @@ export function loginWithPassword(password) {
37
38
  return { error: 'invalid-password' };
38
39
  }
39
40
  const sessionRow = accountDb.first('SELECT * FROM sessions WHERE auth_method = ?', ['password']);
40
- const token = sessionRow ? sessionRow.token : crypto.randomUUID();
41
+ const token = sessionRow ? sessionRow.token : uuidv4();
41
42
  const { totalOfUsers } = accountDb.first('SELECT count(*) as totalOfUsers FROM users');
42
43
  let userId = null;
43
44
  if (totalOfUsers === 0) {
44
- userId = crypto.randomUUID();
45
+ userId = uuidv4();
45
46
  accountDb.mutate('INSERT INTO users (id, user_name, display_name, enabled, owner, role) VALUES (?, ?, ?, 1, 1, ?)', [userId, '', '', 'ADMIN']);
46
47
  }
47
48
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"app-account.d.ts","sourceRoot":"","sources":["../../src/app-account.js"],"names":[],"mappings":"AAmBA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAMtB,QAAA,MAAM,eAAe,sDAMnB,CAAC;AAEH,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"app-account.d.ts","sourceRoot":"","sources":["../../src/app-account.js"],"names":[],"mappings":"AAmBA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAMtB,QAAA,MAAM,eAAe,sDAOnB,CAAC;AAEH,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,eAAe,EAAE,CAAC"}
@@ -15,6 +15,7 @@ const authRateLimiter = rateLimit({
15
15
  max: 5, // 5 attempts per window
16
16
  legacyHeaders: false,
17
17
  standardHeaders: true,
18
+ skipSuccessfulRequests: true,
18
19
  message: { status: 'error', reason: 'too-many-requests' },
19
20
  });
20
21
  export { app as handlers, authRateLimiter };
@@ -1,4 +1,5 @@
1
1
  import request from 'supertest';
2
+ import { v4 as uuidv4 } from 'uuid';
2
3
  import { getAccountDb, getLoginMethod, getServerPrefs } from './account-db.js';
3
4
  import { bootstrapPassword } from './accounts/password.js';
4
5
  import { handlers as app, authRateLimiter } from './app-account.js';
@@ -15,7 +16,7 @@ const deleteUser = userId => {
15
16
  const createSession = (userId, sessionToken, authMethod = null) => {
16
17
  getAccountDb().mutate('INSERT INTO sessions (token, user_id, expires_at, auth_method) VALUES (?, ?, ?, ?)', [sessionToken, userId, Math.floor(Date.now() / 1000) + 60 * 60, authMethod]);
17
18
  };
18
- const generateSessionToken = () => `token-${crypto.randomUUID()}`;
19
+ const generateSessionToken = () => `token-${uuidv4()}`;
19
20
  const clearServerPrefs = () => {
20
21
  getAccountDb().mutate('DELETE FROM server_prefs');
21
22
  };
@@ -64,8 +65,8 @@ describe('auth rate limiting', () => {
64
65
  describe('/change-password', () => {
65
66
  let adminUserId, basicUserId, adminPasswordToken, adminOpenidToken, basicPasswordToken;
66
67
  beforeEach(() => {
67
- adminUserId = crypto.randomUUID();
68
- basicUserId = crypto.randomUUID();
68
+ adminUserId = uuidv4();
69
+ basicUserId = uuidv4();
69
70
  adminPasswordToken = generateSessionToken();
70
71
  adminOpenidToken = generateSessionToken();
71
72
  basicPasswordToken = generateSessionToken();
@@ -193,8 +194,8 @@ describe('/server-prefs', () => {
193
194
  describe('POST /server-prefs', () => {
194
195
  let adminUserId, basicUserId, adminSessionToken, basicSessionToken;
195
196
  beforeEach(() => {
196
- adminUserId = crypto.randomUUID();
197
- basicUserId = crypto.randomUUID();
197
+ adminUserId = uuidv4();
198
+ basicUserId = uuidv4();
198
199
  adminSessionToken = generateSessionToken();
199
200
  basicSessionToken = generateSessionToken();
200
201
  createUser(adminUserId, 'admin', ADMIN_ROLE);
@@ -1 +1 @@
1
- {"version":3,"file":"app-admin.d.ts","sourceRoot":"","sources":["../../src/app-admin.js"],"names":[],"mappings":"AAWA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAKtB,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"app-admin.d.ts","sourceRoot":"","sources":["../../src/app-admin.js"],"names":[],"mappings":"AAYA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAKtB,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import express from 'express';
2
+ import { v4 as uuidv4 } from 'uuid';
2
3
  import { isAdmin } from './account-db.js';
3
4
  import * as UserService from './services/user-service.js';
4
5
  import { errorMiddleware, requestLoggerMiddleware, validateSessionMiddleware, } from './util/middlewares.js';
@@ -61,7 +62,7 @@ app.post('/users', validateSessionMiddleware, async (req, res) => {
61
62
  });
62
63
  return;
63
64
  }
64
- const userId = crypto.randomUUID();
65
+ const userId = uuidv4();
65
66
  UserService.insertUser(userId, userName, displayName || null, enabled ? 1 : 0);
66
67
  res.status(200).send({ status: 'ok', data: { id: userId } });
67
68
  });
@@ -1,4 +1,5 @@
1
1
  import request from 'supertest';
2
+ import { v4 as uuidv4 } from 'uuid';
2
3
  import { getAccountDb } from './account-db.js';
3
4
  import { handlers as app } from './app-admin.js';
4
5
  const ADMIN_ROLE = 'ADMIN';
@@ -14,12 +15,12 @@ const deleteUser = userId => {
14
15
  const createSession = (userId, sessionToken) => {
15
16
  getAccountDb().mutate('INSERT INTO sessions (token, user_id, expires_at) VALUES (?, ?, ?)', [sessionToken, userId, Date.now() + 1000 * 60 * 60]);
16
17
  };
17
- const generateSessionToken = () => `token-${crypto.randomUUID()}`;
18
+ const generateSessionToken = () => `token-${uuidv4()}`;
18
19
  describe('/admin', () => {
19
20
  describe('/owner-created', () => {
20
21
  it('should return 200 and true if an owner user is created', async () => {
21
22
  const sessionToken = generateSessionToken();
22
- const adminId = crypto.randomUUID();
23
+ const adminId = uuidv4();
23
24
  createUser(adminId, 'admin', ADMIN_ROLE, 1);
24
25
  createSession(adminId, sessionToken);
25
26
  const res = await request(app)
@@ -33,8 +34,8 @@ describe('/admin', () => {
33
34
  describe('GET /users', () => {
34
35
  let sessionUserId, testUserId, sessionToken;
35
36
  beforeEach(() => {
36
- sessionUserId = crypto.randomUUID();
37
- testUserId = crypto.randomUUID();
37
+ sessionUserId = uuidv4();
38
+ testUserId = uuidv4();
38
39
  sessionToken = generateSessionToken();
39
40
  createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
40
41
  createSession(sessionUserId, sessionToken);
@@ -57,7 +58,7 @@ describe('/admin', () => {
57
58
  let createdUserId;
58
59
  let duplicateUserId;
59
60
  beforeEach(() => {
60
- sessionUserId = crypto.randomUUID();
61
+ sessionUserId = uuidv4();
61
62
  sessionToken = generateSessionToken();
62
63
  createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
63
64
  createSession(sessionUserId, sessionToken);
@@ -115,8 +116,8 @@ describe('/admin', () => {
115
116
  describe('PATCH /users', () => {
116
117
  let sessionUserId, testUserId, sessionToken;
117
118
  beforeEach(() => {
118
- sessionUserId = crypto.randomUUID();
119
- testUserId = crypto.randomUUID();
119
+ sessionUserId = uuidv4();
120
+ testUserId = uuidv4();
120
121
  sessionToken = generateSessionToken();
121
122
  createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
122
123
  createSession(sessionUserId, sessionToken);
@@ -162,8 +163,8 @@ describe('/admin', () => {
162
163
  describe('POST /users/delete-all', () => {
163
164
  let sessionUserId, testUserId, sessionToken;
164
165
  beforeEach(() => {
165
- sessionUserId = crypto.randomUUID();
166
- testUserId = crypto.randomUUID();
166
+ sessionUserId = uuidv4();
167
+ testUserId = uuidv4();
167
168
  sessionToken = generateSessionToken();
168
169
  createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
169
170
  createSession(sessionUserId, sessionToken);
@@ -203,9 +204,9 @@ describe('/admin', () => {
203
204
  describe('POST /access', () => {
204
205
  let sessionUserId, testUserId, fileId, sessionToken;
205
206
  beforeEach(() => {
206
- sessionUserId = crypto.randomUUID();
207
- testUserId = crypto.randomUUID();
208
- fileId = crypto.randomUUID();
207
+ sessionUserId = uuidv4();
208
+ testUserId = uuidv4();
209
+ fileId = uuidv4();
209
210
  sessionToken = generateSessionToken();
210
211
  createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
211
212
  createSession(sessionUserId, sessionToken);
@@ -253,9 +254,9 @@ describe('/admin', () => {
253
254
  describe('DELETE /access', () => {
254
255
  let sessionUserId, testUserId, fileId, sessionToken;
255
256
  beforeEach(() => {
256
- sessionUserId = crypto.randomUUID();
257
- testUserId = crypto.randomUUID();
258
- fileId = crypto.randomUUID();
257
+ sessionUserId = uuidv4();
258
+ testUserId = uuidv4();
259
+ fileId = uuidv4();
259
260
  sessionToken = generateSessionToken();
260
261
  createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
261
262
  createSession(sessionUserId, sessionToken);
@@ -1 +1 @@
1
- {"version":3,"file":"gocardless-service.d.ts","sourceRoot":"","sources":["../../../../src/app-gocardless/services/gocardless-service.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACnB,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EACvB,WAAW,EACX,WAAW,EACX,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EACf,8BAA8B,EAC9B,WAAW,EACX,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC5B,MAAM,kCAAkC,CAAC;AAG1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAsB9E,eAAO,MAAM,qBAAqB,UAAW,OAAO,KAAG,KAwBtD,CAAC;AAEF,eAAO,MAAM,iBAAiB;IAC5B,YAAY,QAAM,OAAO;IAMzB,QAAQ,QAAY,OAAO,CAAC,IAAI,CAAC;IAmBjC,oBAAoB,kBACH,uBAAuB,KACrC,OAAO,CAAC,WAAW,CAAC;IAcvB,0BAA0B,kBACT,uBAAuB,KACrC,OAAO,CAAC;QACT,WAAW,EAAE,WAAW,CAAC;QACzB,QAAQ,EAAE,wBAAwB,EAAE,CAAC;KACtC,CAAC;IAmCF,0BAA0B,kBACT,uBAAuB,aAC3B,mBAAmB,aACnB,MAAM,WACR,MAAM,KACd,OAAO,CAAC;QACT,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,aAAa,EAAE,uBAAuB,CAAC;QACvC,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE;YACZ,MAAM,EAAE,WAAW,EAAE,CAAC;YACtB,OAAO,EAAE,WAAW,EAAE,CAAC;YACvB,GAAG,EAAE,2BAA2B,EAAE,CAAC;SACpC,CAAC;KACH,CAAC;IAmCF,yBAAyB,kBACR,uBAAuB,aAC3B,mBAAmB,aACnB,MAAM,WACR,MAAM,KACd,OAAO,CAAC;QACT,aAAa,EAAE,uBAAuB,CAAC;QACvC,YAAY,EAAE;YACZ,MAAM,EAAE,WAAW,EAAE,CAAC;YACtB,OAAO,EAAE,WAAW,EAAE,CAAC;YACvB,GAAG,EAAE,2BAA2B,EAAE,CAAC;SACpC,CAAC;KACH,CAAC;IA0CF,iBAAiB,6BAGd,uBAAuB,KAAG,OAAO,CAAC;QACnC,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,uBAAuB,CAAC;KACxC,CAAC;IA8CF,iBAAiB,kBACA,uBAAuB,KACrC,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAK/C,cAAc,kBACG,uBAAuB,KACrC,OAAO,CAAC,WAAW,CAAC;IAOvB,kBAAkB,cACL,mBAAmB,KAC7B,OAAO,CAAC,eAAe,CAAC;IAqB3B,kBAAkB,cACL,mBAAmB,KAC7B,OAAO,CAAC,yBAAyB,CAAC;IAGrC,eAAe,YAAkB,MAAM,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAGhE,cAAc,kBACG,uBAAuB,KACrC,OAAO,CAAC,WAAW,CAAC;IAGvB,+BAA+B,gCAG5B;QACD,QAAQ,EAAE,eAAe,EAAE,CAAC;QAC5B,YAAY,EAAE,WAAW,EAAE,CAAC;KAC7B,KAAG,OAAO,CAAC,8BAA8B,EAAE,CAAC;IAkB7C,eAAe,sDAKZ,qBAAqB,KAAG,OAAO,CAAC,uBAAuB,CAAC;IAoB3D,WAAW,cAAoB,mBAAmB,KAAG,OAAO,CAAC,WAAW,CAAC;CAE1E,CAAC;AAGF,eAAO,MAAM,MAAM;IACjB,WAAW,cAAoB,mBAAmB,KAAG,OAAO,CAAC,WAAW,CAAC;IAEzE,eAAe,qCAIZ;QACD,SAAS,EAAE,mBAAmB,CAAC;QAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,KAAG,OAAO,CAAC,uBAAuB,CAAC;IAMpC,eAAe,YAAkB,MAAM,KAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEhE,kBAAkB,kBACD,uBAAuB,KACrC,OAAO,CAAC,WAAW,CAAC;IAEvB,UAAU,cACG,mBAAmB,KAC7B,OAAO,CAAC,sBAAsB,CAAC;IAElC,WAAW,cACE,mBAAmB,KAC7B,OAAO,CAAC,yBAAyB,CAAC;IAErC,kBAAkB,kBACD,uBAAuB,KACrC,OAAO,CAAC,WAAW,CAAC;IAEvB,iBAAiB,kBACA,uBAAuB,KACrC,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/C,WAAW,gJAUR;QACD,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,uBAAuB,CAAC;QACvC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,kBAAkB,EAAE,MAAM,GAAG,MAAM,CAAC;QACpC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAAC;QACnC,YAAY,EAAE,MAAM,CAAC;QACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QACnB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,gBAAgB,EAAE,OAAO,CAAC;KAC3B,KAAG,OAAO,CAAC,WAAW,CAAC;IAYxB,aAAa,QAAY,OAAO,CAAC,aAAa,CAAC;IAE/C,aAAa,sBAEV;QACD,YAAY,EAAE,MAAM,CAAC;KACtB,KAAG,OAAO,CAAC,aAAa,CAAC;CAE3B,CAAC"}
1
+ {"version":3,"file":"gocardless-service.d.ts","sourceRoot":"","sources":["../../../../src/app-gocardless/services/gocardless-service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { v4 as uuidv4 } from 'uuid';
1
2
  import { BankFactory, isSpecialContinuousAccessBank, } from '../bank-factory.js';
2
3
  import { AccessDeniedError, AccountNotLinkedToRequisition, GenericGoCardlessError, InvalidGoCardlessTokenError, InvalidInputDataError, NotFoundError, RateLimitError, RequisitionNotLinked, ResourceSuspended, ServiceError, UnknownError, } from '../errors.js';
3
4
  import { SecretName, secretsService } from '../../services/secrets-service.js';
@@ -146,7 +147,7 @@ export const goCardlessService = {
146
147
  const body = {
147
148
  redirectUrl: host + '/gocardless/link',
148
149
  institutionId,
149
- referenceId: crypto.randomUUID(),
150
+ referenceId: uuidv4(),
150
151
  accessValidForDays: institution.max_access_valid_for_days,
151
152
  maxHistoricalDays: isSpecialContinuousAccessBank(institutionId)
152
153
  ? 90
@@ -1 +1 @@
1
- {"version":3,"file":"app-sync.d.ts","sourceRoot":"","sources":["../../src/app-sync.ts"],"names":[],"mappings":"AAoCA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAkBtB,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"app-sync.d.ts","sourceRoot":"","sources":["../../src/app-sync.ts"],"names":[],"mappings":"AAqCA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAkBtB,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC"}
@@ -4,6 +4,7 @@ import fs from 'node:fs/promises';
4
4
  import { resolve } from 'node:path';
5
5
  import { SyncProtoBuf } from '@actual-app/crdt';
6
6
  import express from 'express';
7
+ import { v4 as uuidv4 } from 'uuid';
7
8
  import { getAccountDb, isAdmin } from './account-db.js';
8
9
  import { FileNotFound } from './app-sync/errors.js';
9
10
  import { File, FilesService, FileUpdate, } from './app-sync/services/files-service.js';
@@ -32,7 +33,7 @@ function boolToInt(deleted) {
32
33
  return deleted ? 1 : 0;
33
34
  }
34
35
  function generateGroupId() {
35
- const id = crypto.randomUUID();
36
+ const id = uuidv4();
36
37
  if (!isValidGroupId(id)) {
37
38
  throw new TypeError('UUID format no longer matches expected format');
38
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actual-app/sync-server",
3
- "version": "26.5.0",
3
+ "version": "26.5.2",
4
4
  "description": "actual syncing server",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -85,7 +85,7 @@
85
85
  },
86
86
  "dependencies": {
87
87
  "@actual-app/crdt": "2.1.0",
88
- "@actual-app/web": "26.5.0",
88
+ "@actual-app/web": "26.5.2",
89
89
  "bcrypt": "^6.0.0",
90
90
  "better-sqlite3": "^12.8.0",
91
91
  "convict": "^6.2.5",
@@ -99,6 +99,7 @@
99
99
  "migrate": "^2.1.0",
100
100
  "openid-client": "^5.7.1",
101
101
  "pluggy-sdk": "^0.83.0",
102
+ "uuid": "^13.0.0",
102
103
  "winston": "^3.19.0"
103
104
  },
104
105
  "devDependencies": {