@mars-stack/core 1.0.2 → 2.0.1

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.
@@ -0,0 +1,10 @@
1
+ import { createRequire } from 'module';
2
+
3
+ // src/version.ts
4
+ var require2 = createRequire(import.meta.url);
5
+ var pkg = require2("../package.json");
6
+ function getVersion() {
7
+ return pkg.version;
8
+ }
9
+
10
+ export { getVersion };
@@ -62,6 +62,9 @@ function extractUrls(text) {
62
62
  const urlPattern = /https?:\/\/[^\s<>"')\]]+/g;
63
63
  return [...new Set(text.match(urlPattern) ?? [])];
64
64
  }
65
+ function formatOsc8Link(url, label) {
66
+ return `\x1B]8;;${url}\x07${label}\x1B]8;;\x07`;
67
+ }
65
68
  function formatConsoleEmail(params) {
66
69
  const body = params.text ?? params.html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
67
70
  const urls = extractUrls(params.text ?? params.html);
@@ -76,7 +79,9 @@ function formatConsoleEmail(params) {
76
79
  lines.push("");
77
80
  lines.push(urls.length === 1 ? " Action link:" : " Links:");
78
81
  for (const url of urls) {
79
- lines.push(` ${url}`);
82
+ lines.push(` ${formatOsc8Link(url, "\u2192 Click to open")}`);
83
+ lines.push(" If your terminal truncated this link, copy the full URL below:");
84
+ lines.push(url);
80
85
  }
81
86
  }
82
87
  const preview = body.length > 200 ? body.slice(0, 200) + "..." : body;
@@ -106,4 +111,4 @@ function createEmailService(config) {
106
111
  return { sendEmail };
107
112
  }
108
113
 
109
- export { createEmailService, formatConsoleEmail };
114
+ export { createEmailService, formatConsoleEmail, formatOsc8Link };
@@ -7,6 +7,12 @@ interface EmailServiceConfig {
7
7
  provider: string;
8
8
  appName: string;
9
9
  }
10
+ /**
11
+ * Wraps a URL in an OSC 8 ANSI hyperlink escape sequence so terminals that
12
+ * support the standard render a single clickable link regardless of line length.
13
+ * Terminals without OSC 8 support will show only the label text.
14
+ */
15
+ export declare function formatOsc8Link(url: string, label: string): string;
10
16
  export declare function formatConsoleEmail(params: SendEmailParams): string;
11
17
  /**
12
18
  * Creates an email service backed by the configured provider (SendGrid, Resend, or console).
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/email/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGlE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AA2ED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA0BlE;AAgBD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB;wBAI1B,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC;EAKjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/email/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGlE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AA2ED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CA4BlE;AAgBD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB;wBAI1B,eAAe,KAAG,OAAO,CAAC,IAAI,CAAC;EAKjE"}
@@ -1,2 +1,2 @@
1
- export { createEmailService, formatConsoleEmail } from '../chunk-HOSMMQMA.js';
1
+ export { createEmailService, formatConsoleEmail, formatOsc8Link } from '../chunk-LREY72TY.js';
2
2
  import '../chunk-CTYAVMOF.js';
package/dist/index.d.ts CHANGED
@@ -3,4 +3,5 @@ export type { SessionPayload } from './auth/session';
3
3
  export type { SendEmailParams, EmailServiceError } from './email/types';
4
4
  export type { SecurityEventType, SecurityEvent, } from './logger/index';
5
5
  export { configureMars } from './configure-mars';
6
+ export { getVersion } from './version';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EACV,iBAAiB,EACjB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EACV,iBAAiB,EACjB,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { getVersion } from './chunk-EPYVCW3O.js';
1
2
  import { buildCredentialTag } from './chunk-GVLH2GQP.js';
2
3
  import { createSessionManager } from './chunk-4LS3QDD5.js';
3
4
  import { createCSRFProtection } from './chunk-PZE3JGXO.js';
@@ -5,7 +6,7 @@ import { createAuthMiddleware } from './chunk-QWMN5UJC.js';
5
6
  import './chunk-ZA46T6GX.js';
6
7
  import { constantTimeEqual } from './chunk-MXQ66RUN.js';
7
8
  import { createLogger } from './chunk-ROQV54MU.js';
8
- import { createEmailService } from './chunk-HOSMMQMA.js';
9
+ import { createEmailService } from './chunk-LREY72TY.js';
9
10
  import './chunk-CTYAVMOF.js';
10
11
  import { createEnvValidator } from './chunk-Z5BEKPJI.js';
11
12
  import { createApiErrorHandler } from './chunk-U4NZQ366.js';
@@ -1,55 +1,55 @@
1
1
  export declare const mockPrisma: {
2
2
  user: {
3
- findUnique: import("vitest").Mock<(...args: any[]) => any>;
4
- findFirst: import("vitest").Mock<(...args: any[]) => any>;
5
- findMany: import("vitest").Mock<(...args: any[]) => any>;
6
- create: import("vitest").Mock<(...args: any[]) => any>;
7
- update: import("vitest").Mock<(...args: any[]) => any>;
8
- delete: import("vitest").Mock<(...args: any[]) => any>;
9
- deleteMany: import("vitest").Mock<(...args: any[]) => any>;
10
- count: import("vitest").Mock<(...args: any[]) => any>;
11
- aggregate: import("vitest").Mock<(...args: any[]) => any>;
12
- upsert: import("vitest").Mock<(...args: any[]) => any>;
3
+ findUnique: import("vitest").Mock<import("@vitest/spy").Procedure>;
4
+ findFirst: import("vitest").Mock<import("@vitest/spy").Procedure>;
5
+ findMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
6
+ create: import("vitest").Mock<import("@vitest/spy").Procedure>;
7
+ update: import("vitest").Mock<import("@vitest/spy").Procedure>;
8
+ delete: import("vitest").Mock<import("@vitest/spy").Procedure>;
9
+ deleteMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
10
+ count: import("vitest").Mock<import("@vitest/spy").Procedure>;
11
+ aggregate: import("vitest").Mock<import("@vitest/spy").Procedure>;
12
+ upsert: import("vitest").Mock<import("@vitest/spy").Procedure>;
13
13
  };
14
14
  account: {
15
- findUnique: import("vitest").Mock<(...args: any[]) => any>;
16
- findFirst: import("vitest").Mock<(...args: any[]) => any>;
17
- findMany: import("vitest").Mock<(...args: any[]) => any>;
18
- create: import("vitest").Mock<(...args: any[]) => any>;
19
- update: import("vitest").Mock<(...args: any[]) => any>;
20
- delete: import("vitest").Mock<(...args: any[]) => any>;
21
- deleteMany: import("vitest").Mock<(...args: any[]) => any>;
22
- count: import("vitest").Mock<(...args: any[]) => any>;
23
- aggregate: import("vitest").Mock<(...args: any[]) => any>;
24
- upsert: import("vitest").Mock<(...args: any[]) => any>;
15
+ findUnique: import("vitest").Mock<import("@vitest/spy").Procedure>;
16
+ findFirst: import("vitest").Mock<import("@vitest/spy").Procedure>;
17
+ findMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
18
+ create: import("vitest").Mock<import("@vitest/spy").Procedure>;
19
+ update: import("vitest").Mock<import("@vitest/spy").Procedure>;
20
+ delete: import("vitest").Mock<import("@vitest/spy").Procedure>;
21
+ deleteMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
22
+ count: import("vitest").Mock<import("@vitest/spy").Procedure>;
23
+ aggregate: import("vitest").Mock<import("@vitest/spy").Procedure>;
24
+ upsert: import("vitest").Mock<import("@vitest/spy").Procedure>;
25
25
  };
26
26
  session: {
27
- findUnique: import("vitest").Mock<(...args: any[]) => any>;
28
- findFirst: import("vitest").Mock<(...args: any[]) => any>;
29
- findMany: import("vitest").Mock<(...args: any[]) => any>;
30
- create: import("vitest").Mock<(...args: any[]) => any>;
31
- update: import("vitest").Mock<(...args: any[]) => any>;
32
- delete: import("vitest").Mock<(...args: any[]) => any>;
33
- deleteMany: import("vitest").Mock<(...args: any[]) => any>;
34
- count: import("vitest").Mock<(...args: any[]) => any>;
35
- aggregate: import("vitest").Mock<(...args: any[]) => any>;
36
- upsert: import("vitest").Mock<(...args: any[]) => any>;
27
+ findUnique: import("vitest").Mock<import("@vitest/spy").Procedure>;
28
+ findFirst: import("vitest").Mock<import("@vitest/spy").Procedure>;
29
+ findMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
30
+ create: import("vitest").Mock<import("@vitest/spy").Procedure>;
31
+ update: import("vitest").Mock<import("@vitest/spy").Procedure>;
32
+ delete: import("vitest").Mock<import("@vitest/spy").Procedure>;
33
+ deleteMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
34
+ count: import("vitest").Mock<import("@vitest/spy").Procedure>;
35
+ aggregate: import("vitest").Mock<import("@vitest/spy").Procedure>;
36
+ upsert: import("vitest").Mock<import("@vitest/spy").Procedure>;
37
37
  };
38
38
  verificationToken: {
39
- findUnique: import("vitest").Mock<(...args: any[]) => any>;
40
- findFirst: import("vitest").Mock<(...args: any[]) => any>;
41
- findMany: import("vitest").Mock<(...args: any[]) => any>;
42
- create: import("vitest").Mock<(...args: any[]) => any>;
43
- update: import("vitest").Mock<(...args: any[]) => any>;
44
- delete: import("vitest").Mock<(...args: any[]) => any>;
45
- deleteMany: import("vitest").Mock<(...args: any[]) => any>;
46
- count: import("vitest").Mock<(...args: any[]) => any>;
47
- aggregate: import("vitest").Mock<(...args: any[]) => any>;
48
- upsert: import("vitest").Mock<(...args: any[]) => any>;
39
+ findUnique: import("vitest").Mock<import("@vitest/spy").Procedure>;
40
+ findFirst: import("vitest").Mock<import("@vitest/spy").Procedure>;
41
+ findMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
42
+ create: import("vitest").Mock<import("@vitest/spy").Procedure>;
43
+ update: import("vitest").Mock<import("@vitest/spy").Procedure>;
44
+ delete: import("vitest").Mock<import("@vitest/spy").Procedure>;
45
+ deleteMany: import("vitest").Mock<import("@vitest/spy").Procedure>;
46
+ count: import("vitest").Mock<import("@vitest/spy").Procedure>;
47
+ aggregate: import("vitest").Mock<import("@vitest/spy").Procedure>;
48
+ upsert: import("vitest").Mock<import("@vitest/spy").Procedure>;
49
49
  };
50
50
  $transaction: import("vitest").Mock<(fn: (tx: unknown) => unknown) => unknown>;
51
- $connect: import("vitest").Mock<(...args: any[]) => any>;
52
- $disconnect: import("vitest").Mock<(...args: any[]) => any>;
51
+ $connect: import("vitest").Mock<import("@vitest/spy").Procedure>;
52
+ $disconnect: import("vitest").Mock<import("@vitest/spy").Procedure>;
53
53
  };
54
54
  export declare function resetMockPrisma(): void;
55
55
  //# sourceMappingURL=mock-prisma.d.ts.map
@@ -0,0 +1,2 @@
1
+ export declare function getVersion(): string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AASA,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
@@ -0,0 +1 @@
1
+ export { getVersion } from './chunk-EPYVCW3O.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mars-stack/core",
3
- "version": "1.0.2",
3
+ "version": "2.0.1",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -115,6 +115,10 @@
115
115
  "./test-utils": {
116
116
  "types": "./dist/test-utils/index.d.ts",
117
117
  "import": "./dist/test-utils/index.js"
118
+ },
119
+ "./version": {
120
+ "types": "./dist/version.d.ts",
121
+ "import": "./dist/version.js"
118
122
  }
119
123
  },
120
124
  "publishConfig": {
@@ -178,7 +182,7 @@
178
182
  }
179
183
  },
180
184
  "dependencies": {
181
- "bcryptjs": "^2.4.3",
185
+ "bcryptjs": "^3.0.3",
182
186
  "jose": "^6.2.1",
183
187
  "pino": "^9.6.0",
184
188
  "zod": "^4.3.6"
@@ -187,19 +191,19 @@
187
191
  "@aws-sdk/client-s3": "^3.1007.0",
188
192
  "@aws-sdk/s3-request-presigner": "^3.1007.0",
189
193
  "@testing-library/react": "^16.0.0",
190
- "@types/bcryptjs": "^2.4.0",
194
+ "@types/bcryptjs": "^3.0.0",
191
195
  "@types/fs-extra": "^11.0.4",
192
196
  "@types/react": "^19.0.0",
193
197
  "@upstash/ratelimit": "^2.0.0",
194
198
  "@upstash/redis": "^1.36.4",
195
199
  "@vercel/blob": "^2.3.1",
196
200
  "fs-extra": "^11.3.4",
197
- "next": "^16.0.0",
201
+ "next": "^16.1.6",
198
202
  "react": "^19.0.0",
199
203
  "resend": "^6.9.3",
200
204
  "stripe": "^17.0.0",
201
205
  "tsup": "^8.0.0",
202
206
  "typescript": "^5.7.0",
203
- "vitest": "^3.0.0"
207
+ "vitest": "^4.1.0"
204
208
  }
205
209
  }