@@ -36,8 +36,8 @@ function schemaContent(database: GeneratorOptions['database']): string {
3636 {
3737 pipedriveCompanyId: integer('pipedrive_company_id').notNull(),
3838 pipedriveUserId: integer('pipedrive_user_id').notNull(),
39- accessToken: varchar ('access_token', { length: 768 } ).notNull(),
40- refreshToken: varchar ('refresh_token', { length: 768 } ).notNull(),
39+ accessToken: text ('access_token').notNull(),
40+ refreshToken: text ('refresh_token').notNull(),
4141 tokenType: varchar('token_type', { length: 50 }).notNull().default('bearer'),
4242 accessTokenExpiresAt: timestamp('access_token_expires_at').notNull(),
4343 refreshTokenExpiresAt: timestamp('refresh_token_expires_at').notNull(),
@@ -62,8 +62,8 @@ function schemaContent(database: GeneratorOptions['database']): string {
6262 {
6363 pipedriveCompanyId: int('pipedrive_company_id').notNull(),
6464 pipedriveUserId: int('pipedrive_user_id').notNull(),
65- accessToken: varchar ('access_token', { length: 768 } ).notNull(),
66- refreshToken: varchar ('refresh_token', { length: 768 } ).notNull(),
65+ accessToken: text ('access_token').notNull(),
66+ refreshToken: text ('refresh_token').notNull(),
6767 tokenType: varchar('token_type', { length: 50 }).notNull().default('bearer'),
6868 accessTokenExpiresAt: timestamp('access_token_expires_at').notNull(),
6969 refreshTokenExpiresAt: timestamp('refresh_token_expires_at').notNull(),
@@ -196,8 +196,8 @@ function migrationSqlContent(database: GeneratorOptions['database']): string {
196196 CREATE TABLE IF NOT EXISTS "pipedrive_tokens" (
197197 "pipedrive_company_id" INTEGER NOT NULL,
198198 "pipedrive_user_id" INTEGER NOT NULL,
199- "access_token" VARCHAR(768) NOT NULL,
200- "refresh_token" VARCHAR(768) NOT NULL,
199+ "access_token" TEXT NOT NULL,
200+ "refresh_token" TEXT NOT NULL,
201201 "token_type" VARCHAR(50) NOT NULL DEFAULT 'bearer',
202202 "access_token_expires_at" TIMESTAMP NOT NULL,
203203 "refresh_token_expires_at" TIMESTAMP NOT NULL,
@@ -215,8 +215,8 @@ function migrationSqlContent(database: GeneratorOptions['database']): string {
215215 CREATE TABLE IF NOT EXISTS \`pipedrive_tokens\` (
216216 \`pipedrive_company_id\` INT NOT NULL,
217217 \`pipedrive_user_id\` INT NOT NULL,
218- \`access_token\` VARCHAR(768) NOT NULL,
219- \`refresh_token\` VARCHAR(768) NOT NULL,
218+ \`access_token\` TEXT NOT NULL,
219+ \`refresh_token\` TEXT NOT NULL,
220220 \`token_type\` VARCHAR(50) NOT NULL DEFAULT 'bearer',
221221 \`access_token_expires_at\` TIMESTAMP NOT NULL,
222222 \`refresh_token_expires_at\` TIMESTAMP NOT NULL,
@@ -258,15 +258,16 @@ function tokenRepositoryContent(database: GeneratorOptions['database']): string
258258 import type { TokenResponse } from 'pipedrive/v2';
259259 import { db } from './index.js';
260260 import { pipedriveTokens } from './schema.js';
261+ import { encrypt, decrypt } from '../crypto/encrypt.js';
261262
262263 const REFRESH_TOKEN_TTL_MS = 60 * 24 * 60 * 60 * 1000;
263264
264265 export type StoredToken = { companyId: number; userId: number; token: TokenResponse };
265266
266267 function toTokenResponse(row: typeof pipedriveTokens.$inferSelect): TokenResponse {
267268 return {
268- access_token: row.accessToken,
269- refresh_token: row.refreshToken,
269+ access_token: decrypt( row.accessToken) ,
270+ refresh_token: decrypt( row.refreshToken) ,
270271 token_type: row.tokenType,
271272 expires_in: Math.max(0, Math.floor((row.accessTokenExpiresAt.getTime() - Date.now()) / 1000)),
272273 scope: row.scope ?? '',
@@ -304,8 +305,8 @@ function tokenRepositoryContent(database: GeneratorOptions['database']): string
304305 .values({
305306 pipedriveCompanyId: companyId,
306307 pipedriveUserId: userId,
307- accessToken: token.access_token,
308- refreshToken: token.refresh_token,
308+ accessToken: encrypt( token.access_token) ,
309+ refreshToken: encrypt( token.refresh_token) ,
309310 tokenType: token.token_type,
310311 accessTokenExpiresAt,
311312 refreshTokenExpiresAt,
@@ -316,8 +317,8 @@ function tokenRepositoryContent(database: GeneratorOptions['database']): string
316317 })
317318 .onDuplicateKeyUpdate({
318319 set: {
319- accessToken: token.access_token,
320- refreshToken: token.refresh_token,
320+ accessToken: encrypt( token.access_token) ,
321+ refreshToken: encrypt( token.refresh_token) ,
321322 tokenType: token.token_type,
322323 accessTokenExpiresAt,
323324 refreshTokenExpiresAt,
@@ -335,15 +336,16 @@ function tokenRepositoryContent(database: GeneratorOptions['database']): string
335336 import type { TokenResponse } from 'pipedrive/v2';
336337 import { db } from './index.js';
337338 import { pipedriveTokens } from './schema.js';
339+ import { encrypt, decrypt } from '../crypto/encrypt.js';
338340
339341 const REFRESH_TOKEN_TTL_MS = 60 * 24 * 60 * 60 * 1000;
340342
341343 export type StoredToken = { companyId: number; userId: number; token: TokenResponse };
342344
343345 function toTokenResponse(row: typeof pipedriveTokens.$inferSelect): TokenResponse {
344346 return {
345- access_token: row.accessToken,
346- refresh_token: row.refreshToken,
347+ access_token: decrypt( row.accessToken) ,
348+ refresh_token: decrypt( row.refreshToken) ,
347349 token_type: row.tokenType,
348350 expires_in: Math.max(0, Math.floor((row.accessTokenExpiresAt.getTime() - Date.now()) / 1000)),
349351 scope: row.scope ?? '',
@@ -381,8 +383,8 @@ function tokenRepositoryContent(database: GeneratorOptions['database']): string
381383 .values({
382384 pipedriveCompanyId: companyId,
383385 pipedriveUserId: userId,
384- accessToken: token.access_token,
385- refreshToken: token.refresh_token,
386+ accessToken: encrypt( token.access_token) ,
387+ refreshToken: encrypt( token.refresh_token) ,
386388 tokenType: token.token_type,
387389 accessTokenExpiresAt,
388390 refreshTokenExpiresAt,
@@ -394,8 +396,8 @@ function tokenRepositoryContent(database: GeneratorOptions['database']): string
394396 .onConflictDoUpdate({
395397 target: [pipedriveTokens.pipedriveCompanyId, pipedriveTokens.pipedriveUserId],
396398 set: {
397- accessToken: token.access_token,
398- refreshToken: token.refresh_token,
399+ accessToken: encrypt( token.access_token) ,
400+ refreshToken: encrypt( token.refresh_token) ,
399401 tokenType: token.token_type,
400402 accessTokenExpiresAt,
401403 refreshTokenExpiresAt,
@@ -794,6 +796,8 @@ async function generateDockerfile(outputDir: string): Promise<void> {
794796 COPY package*.json ./
795797 RUN npm install
796798 COPY . .
799+ RUN mkdir -p /app/data && chown -R node:node /app/data
800+ USER node
797801 ` ,
798802 ) ;
799803}
0 commit comments