@linktr.ee/linkapp 0.0.30 → 0.0.31

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":"token-storage.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/token-storage.ts"],"names":[],"mappings":"AAgDA,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAgBN;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4BxD;AAED,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAkBnD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD"}
1
+ {"version":3,"file":"token-storage.d.ts","sourceRoot":"","sources":["../../../src/lib/auth/token-storage.ts"],"names":[],"mappings":"AAuHA,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAeN;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsBxD;AAED,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAuBnD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -19,61 +19,111 @@ function validateTokenStructure(tokenString) {
19
19
  throw new Error("Login request was successful, but the authenticated user does not have appropriate permissions to view or modify LinkApps");
20
20
  }
21
21
  }
22
- export function saveToken(token, audience, expiresAt) {
23
- // Validate token structure and permissions before saving
24
- validateTokenStructure(token);
22
+ /**
23
+ * Type guard to check if stored data is in legacy format
24
+ */
25
+ function isLegacyFormat(data) {
26
+ return (typeof data === "object" &&
27
+ data !== null &&
28
+ "accessToken" in data &&
29
+ "audience" in data &&
30
+ !("tokens" in data));
31
+ }
32
+ /**
33
+ * Reads the token storage, migrating from legacy format if needed
34
+ */
35
+ function readTokenStorage() {
36
+ if (!existsSync(TOKEN_FILE)) {
37
+ return { tokens: {} };
38
+ }
39
+ try {
40
+ const rawData = JSON.parse(readFileSync(TOKEN_FILE, "utf-8"));
41
+ // Check if it's legacy format and migrate
42
+ if (isLegacyFormat(rawData)) {
43
+ const migrated = {
44
+ tokens: {
45
+ [rawData.audience]: {
46
+ accessToken: rawData.accessToken,
47
+ expiresAt: rawData.expiresAt,
48
+ },
49
+ },
50
+ };
51
+ // Write migrated format back to disk
52
+ writeFileSync(TOKEN_FILE, JSON.stringify(migrated, null, 2), "utf-8");
53
+ return migrated;
54
+ }
55
+ // Already in new format
56
+ return rawData;
57
+ }
58
+ catch (error) {
59
+ console.error("Failed to read token storage:", error);
60
+ return { tokens: {} };
61
+ }
62
+ }
63
+ /**
64
+ * Writes the token storage to disk
65
+ */
66
+ function writeTokenStorage(storage) {
25
67
  // Ensure config directory exists
26
68
  if (!existsSync(CONFIG_DIR)) {
27
69
  mkdirSync(CONFIG_DIR, { recursive: true });
28
70
  }
29
- const data = {
71
+ writeFileSync(TOKEN_FILE, JSON.stringify(storage, null, 2), "utf-8");
72
+ }
73
+ export function saveToken(token, audience, expiresAt) {
74
+ // Validate token structure and permissions before saving
75
+ validateTokenStructure(token);
76
+ // Read existing storage (handles migration if needed)
77
+ const storage = readTokenStorage();
78
+ // Add or update token for this audience
79
+ storage.tokens[audience] = {
30
80
  accessToken: token,
31
81
  expiresAt,
32
- audience,
33
82
  };
34
- writeFileSync(TOKEN_FILE, JSON.stringify(data, null, 2), "utf-8");
83
+ // Write updated storage
84
+ writeTokenStorage(storage);
35
85
  }
36
86
  export function getToken(audience) {
37
- if (!existsSync(TOKEN_FILE)) {
87
+ // Read storage (handles migration if needed)
88
+ const storage = readTokenStorage();
89
+ // Get token for this audience
90
+ const tokenEntry = storage.tokens[audience];
91
+ if (!tokenEntry) {
38
92
  return null;
39
93
  }
40
- try {
41
- const data = JSON.parse(readFileSync(TOKEN_FILE, "utf-8"));
42
- // Check if token is for the correct audience
43
- if (data.audience !== audience) {
44
- return null;
45
- }
46
- // Check if token is expired (with threshold buffer)
47
- if (data.expiresAt &&
48
- data.expiresAt - TOKEN_EXPIRY_THRESHOLD_SECONDS <
49
- Math.floor(Date.now() / 1000)) {
50
- removeToken();
51
- return null;
52
- }
53
- return data.accessToken;
54
- }
55
- catch (error) {
56
- console.error("Failed to read token:", error);
94
+ // Check if token is expired (with threshold buffer)
95
+ if (tokenEntry.expiresAt &&
96
+ tokenEntry.expiresAt - TOKEN_EXPIRY_THRESHOLD_SECONDS <
97
+ Math.floor(Date.now() / 1000)) {
98
+ // Remove expired token
99
+ removeToken(audience);
57
100
  return null;
58
101
  }
102
+ return tokenEntry.accessToken;
59
103
  }
60
104
  export function removeToken(audience) {
61
- if (!existsSync(TOKEN_FILE)) {
62
- return;
63
- }
64
- // If audience is specified, only remove token if it matches
105
+ // Read storage (handles migration if needed)
106
+ const storage = readTokenStorage();
107
+ // If audience is specified, only remove that token
65
108
  if (audience) {
66
- try {
67
- const data = JSON.parse(readFileSync(TOKEN_FILE, "utf-8"));
68
- if (data.audience !== audience) {
69
- return; // Don't remove token for different audience
109
+ if (storage.tokens[audience]) {
110
+ delete storage.tokens[audience];
111
+ // If there are remaining tokens, write updated storage
112
+ // Otherwise, delete the file
113
+ if (Object.keys(storage.tokens).length > 0) {
114
+ writeTokenStorage(storage);
115
+ }
116
+ else if (existsSync(TOKEN_FILE)) {
117
+ unlinkSync(TOKEN_FILE);
70
118
  }
71
119
  }
72
- catch (error) {
73
- // If we can't read the file, remove it anyway
120
+ }
121
+ else {
122
+ // No audience specified - remove all tokens
123
+ if (existsSync(TOKEN_FILE)) {
124
+ unlinkSync(TOKEN_FILE);
74
125
  }
75
126
  }
76
- unlinkSync(TOKEN_FILE);
77
127
  }
78
128
  export function isTokenValid(audience) {
79
129
  return getToken(audience) !== null;
@@ -1 +1 @@
1
- {"version":3,"file":"token-storage.js","sourceRoot":"","sources":["../../../src/lib/auth/token-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-storage.js","sourceRoot":"","sources":["../../../src/lib/auth/token-storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linktr.ee/linkapp",
3
- "version": "0.0.30",
3
+ "version": "0.0.31",
4
4
  "description": "Development, build, and deployment tooling for LinkApps",
5
5
  "type": "module",
6
6
  "bin": {