@snapback/cli 1.6.0 → 3.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.
Files changed (57) hide show
  1. package/README.md +121 -22
  2. package/dist/SkippedTestDetector-AXTMWWHC.js +5 -0
  3. package/dist/SkippedTestDetector-QLSQV7K7.js +5 -0
  4. package/dist/analysis-6WTBZJH3.js +6 -0
  5. package/dist/analysis-C472LUGW.js +2475 -0
  6. package/dist/auth-UA7I3YE4.js +1446 -0
  7. package/dist/auto-provision-organization-6YF463TK.js +161 -0
  8. package/dist/{chunk-FVIYXFCL.js → chunk-4YTE4JEW.js} +2 -3
  9. package/dist/chunk-5EOPYJ4Y.js +12 -0
  10. package/dist/{chunk-ARVV3F4K.js → chunk-5SQA44V7.js} +1085 -18
  11. package/dist/{chunk-RB7H4UQJ.js → chunk-7ADPL4Q3.js} +10 -3
  12. package/dist/chunk-BE3HNVSV.js +2300 -0
  13. package/dist/chunk-BWWPGNZ5.js +5842 -0
  14. package/dist/chunk-CBGOC6RV.js +293 -0
  15. package/dist/{chunk-7JX6Y4TL.js → chunk-DPWFZNMY.js} +21 -34
  16. package/dist/{chunk-R7CUQ7CU.js → chunk-E6V6QKS7.js} +317 -33
  17. package/dist/chunk-GT4ZUCFR.js +111 -0
  18. package/dist/chunk-NOWJBG6X.js +3654 -0
  19. package/dist/chunk-O7HMAZ7L.js +3497 -0
  20. package/dist/chunk-PL4HF4M2.js +593 -0
  21. package/dist/chunk-V7B37PPD.js +4075 -0
  22. package/dist/chunk-YVZXPBSV.js +314 -0
  23. package/dist/chunk-ZBQDE6WJ.js +108 -0
  24. package/dist/client-RHDS6NOB.js +8 -0
  25. package/dist/dist-5LR7APG5.js +5 -0
  26. package/dist/dist-CUHOKNLS.js +12 -0
  27. package/dist/dist-RJE4RSZJ.js +9 -0
  28. package/dist/index.js +60568 -36578
  29. package/dist/local-service-adapter-AB3UYRUK.js +6 -0
  30. package/dist/pioneer-oauth-hook-V2JKEXM7.js +12 -0
  31. package/dist/{secure-credentials-IWQB6KU4.js → secure-credentials-UEPG7GWW.js} +2 -3
  32. package/dist/snapback-dir-MG7DTRMF.js +6 -0
  33. package/package.json +12 -11
  34. package/scripts/postinstall.mjs +2 -3
  35. package/dist/SkippedTestDetector-5WJZKZQ3.js +0 -5
  36. package/dist/SkippedTestDetector-5WJZKZQ3.js.map +0 -1
  37. package/dist/analysis-YI4UNUCM.js +0 -6
  38. package/dist/analysis-YI4UNUCM.js.map +0 -1
  39. package/dist/chunk-7JX6Y4TL.js.map +0 -1
  40. package/dist/chunk-ARVV3F4K.js.map +0 -1
  41. package/dist/chunk-EU2IZPOK.js +0 -13002
  42. package/dist/chunk-EU2IZPOK.js.map +0 -1
  43. package/dist/chunk-FVIYXFCL.js.map +0 -1
  44. package/dist/chunk-R7CUQ7CU.js.map +0 -1
  45. package/dist/chunk-RB7H4UQJ.js.map +0 -1
  46. package/dist/chunk-SOABQWAU.js +0 -385
  47. package/dist/chunk-SOABQWAU.js.map +0 -1
  48. package/dist/dist-O6EBXLN6.js +0 -5
  49. package/dist/dist-O6EBXLN6.js.map +0 -1
  50. package/dist/dist-PJVBBZTF.js +0 -5
  51. package/dist/dist-PJVBBZTF.js.map +0 -1
  52. package/dist/index.js.map +0 -1
  53. package/dist/learning-pruner-QC4CTJDX.js +0 -5
  54. package/dist/learning-pruner-QC4CTJDX.js.map +0 -1
  55. package/dist/secure-credentials-IWQB6KU4.js.map +0 -1
  56. package/dist/snapback-dir-V6MWXIW4.js +0 -5
  57. package/dist/snapback-dir-V6MWXIW4.js.map +0 -1
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env node --no-warnings=ExperimentalWarning
2
+ import { trackEvent } from './chunk-GT4ZUCFR.js';
3
+ import './chunk-BE3HNVSV.js';
4
+ import { logger } from './chunk-PL4HF4M2.js';
5
+ import './chunk-NOWJBG6X.js';
6
+ import './chunk-5EOPYJ4Y.js';
7
+ import './chunk-CBGOC6RV.js';
8
+ import { __name } from './chunk-7ADPL4Q3.js';
9
+ import { nanoid } from 'nanoid';
10
+
11
+ process.env.SNAPBACK_CLI='true';
12
+ var MAX_SLUG_RETRIES = 5;
13
+ var SLUG_SUFFIX_LENGTH = 6;
14
+ var MAX_ORG_NAME_LENGTH = 100;
15
+ var MAX_SLUG_LENGTH = 50;
16
+ function sanitizeOrgName(name) {
17
+ return name.replace(/<[^>]*>/g, "").replace(/[\x00-\x1f\x7f]/g, "").replace(/\s+/g, " ").trim().slice(0, MAX_ORG_NAME_LENGTH);
18
+ }
19
+ __name(sanitizeOrgName, "sanitizeOrgName");
20
+ function generateSlug(name) {
21
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, MAX_SLUG_LENGTH - SLUG_SUFFIX_LENGTH - 1);
22
+ }
23
+ __name(generateSlug, "generateSlug");
24
+ async function generateUniqueSlug(db, combinedSchema, baseName) {
25
+ const { sql } = await import('drizzle-orm');
26
+ const { organization } = combinedSchema;
27
+ const baseSlug = generateSlug(baseName);
28
+ for (let attempt = 0; attempt < MAX_SLUG_RETRIES; attempt++) {
29
+ const slug = attempt === 0 ? baseSlug : `${baseSlug}-${nanoid(SLUG_SUFFIX_LENGTH)}`;
30
+ const existing = await db.select({
31
+ id: organization.id
32
+ }).from(organization).where(sql`${organization.slug} = ${slug}`).limit(1);
33
+ if (existing.length === 0) {
34
+ return slug;
35
+ }
36
+ logger.debug("Slug collision detected, retrying", {
37
+ slug,
38
+ attempt
39
+ });
40
+ }
41
+ return `org-${nanoid(12)}`;
42
+ }
43
+ __name(generateUniqueSlug, "generateUniqueSlug");
44
+ function getDisplayName(user) {
45
+ if (user.name && user.name.trim()) {
46
+ return sanitizeOrgName(user.name.trim());
47
+ }
48
+ const emailParts = user.email.split("@");
49
+ if (emailParts[0]) {
50
+ const username = emailParts[0];
51
+ return sanitizeOrgName(username.charAt(0).toUpperCase() + username.slice(1));
52
+ }
53
+ return "Personal Workspace";
54
+ }
55
+ __name(getDisplayName, "getDisplayName");
56
+ async function autoProvisionOrganization(user) {
57
+ const startTime = Date.now();
58
+ try {
59
+ const { db, combinedSchema } = await import('./dist-CUHOKNLS.js');
60
+ const { sql } = await import('drizzle-orm');
61
+ if (!db) {
62
+ logger.error("Database not available for auto-provisioning", {
63
+ userId: user.id
64
+ });
65
+ return {
66
+ success: false,
67
+ error: "Database not available"
68
+ };
69
+ }
70
+ const { organization, member } = combinedSchema;
71
+ const displayName = getDisplayName(user);
72
+ const orgName = `${displayName}'s Workspace`;
73
+ const orgSlug = await generateUniqueSlug(db, combinedSchema, displayName);
74
+ const orgId = nanoid();
75
+ await db.transaction(async (tx) => {
76
+ await tx.insert(organization).values({
77
+ id: orgId,
78
+ name: orgName,
79
+ slug: orgSlug,
80
+ createdAt: /* @__PURE__ */ new Date()
81
+ });
82
+ await tx.insert(member).values({
83
+ id: nanoid(),
84
+ userId: user.id,
85
+ organizationId: orgId,
86
+ role: "owner",
87
+ createdAt: /* @__PURE__ */ new Date()
88
+ });
89
+ const { session } = combinedSchema;
90
+ try {
91
+ await tx.update(session).set({
92
+ activeOrganizationId: orgId
93
+ }).where(sql`${session.userId} = ${user.id}`);
94
+ } catch {
95
+ }
96
+ });
97
+ const duration = Date.now() - startTime;
98
+ await trackEvent("org.auto_provisioned", {
99
+ userId: user.id,
100
+ orgId,
101
+ organizationName: orgName,
102
+ organizationSlug: orgSlug,
103
+ duration,
104
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
105
+ });
106
+ logger.info("Auto-provisioned organization for new user", {
107
+ userId: user.id,
108
+ organizationId: orgId,
109
+ organizationSlug: orgSlug,
110
+ duration
111
+ });
112
+ return {
113
+ success: true,
114
+ organizationId: orgId,
115
+ organizationSlug: orgSlug
116
+ };
117
+ } catch (error) {
118
+ const duration = Date.now() - startTime;
119
+ logger.error("Failed to auto-provision organization", {
120
+ userId: user.id,
121
+ error: error instanceof Error ? error.message : String(error),
122
+ stack: error instanceof Error ? error.stack : void 0,
123
+ duration
124
+ });
125
+ await trackEvent("org.auto_provision_failed", {
126
+ userId: user.id,
127
+ errorMessage: error instanceof Error ? error.message : String(error),
128
+ duration,
129
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
130
+ }).catch(() => {
131
+ });
132
+ return {
133
+ success: false,
134
+ error: error instanceof Error ? error.message : "Unknown error"
135
+ };
136
+ }
137
+ }
138
+ __name(autoProvisionOrganization, "autoProvisionOrganization");
139
+ async function userHasOrganization(userId) {
140
+ try {
141
+ const { db, combinedSchema } = await import('./dist-CUHOKNLS.js');
142
+ const { sql } = await import('drizzle-orm');
143
+ if (!db) {
144
+ return false;
145
+ }
146
+ const { member } = combinedSchema;
147
+ const memberships = await db.select({
148
+ id: member.id
149
+ }).from(member).where(sql`${member.userId} = ${userId}`).limit(1);
150
+ return memberships.length > 0;
151
+ } catch (error) {
152
+ logger.error("Failed to check user organization membership", {
153
+ userId,
154
+ error: error instanceof Error ? error.message : String(error)
155
+ });
156
+ return false;
157
+ }
158
+ }
159
+ __name(userHasOrganization, "userHasOrganization");
160
+
161
+ export { autoProvisionOrganization, userHasOrganization };
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env node --no-warnings=ExperimentalWarning
2
- import { __name } from './chunk-RB7H4UQJ.js';
2
+ import { __name } from './chunk-7ADPL4Q3.js';
3
3
  import { parse } from '@babel/parser';
4
4
 
5
+ process.env.SNAPBACK_CLI='true';
5
6
  function detectSkippedTests(code, filePath) {
6
7
  const skipped = [];
7
8
  try {
@@ -105,5 +106,3 @@ function getSkippedTestSummary(results) {
105
106
  __name(getSkippedTestSummary, "getSkippedTestSummary");
106
107
 
107
108
  export { analyzeSkippedTests, detectSkippedTests, getSkippedTestSummary };
108
- //# sourceMappingURL=chunk-FVIYXFCL.js.map
109
- //# sourceMappingURL=chunk-FVIYXFCL.js.map
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node --no-warnings=ExperimentalWarning
2
+ import { __name } from './chunk-7ADPL4Q3.js';
3
+ import { nanoid } from 'nanoid';
4
+
5
+ process.env.SNAPBACK_CLI='true';
6
+ function generateId(prefix) {
7
+ const id = nanoid();
8
+ return prefix ? `${prefix}-${id}` : id;
9
+ }
10
+ __name(generateId, "generateId");
11
+
12
+ export { generateId };