@mondaydotcomorg/atp-providers 0.17.16 → 0.18.4-rc.0

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 (43) hide show
  1. package/dist/audit/jsonl.d.ts +29 -0
  2. package/dist/audit/jsonl.d.ts.map +1 -0
  3. package/dist/audit/jsonl.js +163 -0
  4. package/dist/audit/jsonl.js.map +1 -0
  5. package/dist/audit/opentelemetry.d.ts +23 -0
  6. package/dist/audit/opentelemetry.d.ts.map +1 -0
  7. package/dist/audit/opentelemetry.js +240 -0
  8. package/dist/audit/opentelemetry.js.map +1 -0
  9. package/dist/audit/otel-metrics.d.ts +111 -0
  10. package/dist/audit/otel-metrics.d.ts.map +1 -0
  11. package/dist/audit/otel-metrics.js +115 -0
  12. package/dist/audit/otel-metrics.js.map +1 -0
  13. package/dist/auth/env.d.ts +21 -0
  14. package/dist/auth/env.d.ts.map +1 -0
  15. package/dist/auth/env.js +48 -0
  16. package/dist/auth/env.js.map +1 -0
  17. package/dist/cache/file.d.ts +47 -0
  18. package/dist/cache/file.d.ts.map +1 -0
  19. package/dist/cache/file.js +262 -0
  20. package/dist/cache/file.js.map +1 -0
  21. package/dist/cache/memory.d.ts +30 -0
  22. package/dist/cache/memory.d.ts.map +1 -0
  23. package/dist/cache/memory.js +81 -0
  24. package/dist/cache/memory.js.map +1 -0
  25. package/dist/cache/redis.d.ts +28 -0
  26. package/dist/cache/redis.d.ts.map +1 -0
  27. package/dist/cache/redis.js +124 -0
  28. package/dist/cache/redis.js.map +1 -0
  29. package/dist/index.d.ts +10 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +9 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/oauth/index.d.ts +2 -0
  34. package/dist/oauth/index.d.ts.map +1 -0
  35. package/dist/oauth/index.js +2 -0
  36. package/dist/oauth/index.js.map +1 -0
  37. package/dist/oauth/scope-checkers.d.ts +61 -0
  38. package/dist/oauth/scope-checkers.d.ts.map +1 -0
  39. package/dist/oauth/scope-checkers.js +166 -0
  40. package/dist/oauth/scope-checkers.js.map +1 -0
  41. package/package.json +8 -2
  42. package/project.json +1 -3
  43. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,28 @@
1
+ import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';
2
+ import type Redis from 'ioredis';
3
+ export interface RedisCacheOptions {
4
+ redis: Redis;
5
+ keyPrefix?: string;
6
+ defaultTTL?: number;
7
+ }
8
+ /**
9
+ * Redis-backed cache provider for distributed systems
10
+ * Enables cross-pod state sharing and resume capabilities
11
+ */
12
+ export declare class RedisCache implements CacheProvider {
13
+ name: string;
14
+ private redis;
15
+ private keyPrefix;
16
+ private defaultTTL?;
17
+ constructor(options: RedisCacheOptions);
18
+ private getFullKey;
19
+ get<T>(key: string): Promise<T | null>;
20
+ set(key: string, value: unknown, ttl?: number): Promise<void>;
21
+ delete(key: string): Promise<void>;
22
+ has(key: string): Promise<boolean>;
23
+ clear(pattern?: string): Promise<void>;
24
+ mget(keys: string[]): Promise<Array<unknown | null>>;
25
+ mset(entries: Array<[string, unknown, number?]>): Promise<void>;
26
+ disconnect(): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/cache/redis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AAEjC,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,UAAW,YAAW,aAAa;IAC/C,IAAI,SAAW;IACf,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;gBAEhB,OAAO,EAAE,iBAAiB;IAMtC,OAAO,CAAC,UAAU;IAIZ,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAetC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAclC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAcpD,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB/D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAUjC"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Redis-backed cache provider for distributed systems
3
+ * Enables cross-pod state sharing and resume capabilities
4
+ */
5
+ export class RedisCache {
6
+ name = 'redis';
7
+ redis;
8
+ keyPrefix;
9
+ defaultTTL;
10
+ constructor(options) {
11
+ this.redis = options.redis;
12
+ this.keyPrefix = options.keyPrefix || 'atp:cache:';
13
+ this.defaultTTL = options.defaultTTL;
14
+ }
15
+ getFullKey(key) {
16
+ return `${this.keyPrefix}${key}`;
17
+ }
18
+ async get(key) {
19
+ try {
20
+ const value = await this.redis.get(this.getFullKey(key));
21
+ if (!value)
22
+ return null;
23
+ return JSON.parse(value);
24
+ }
25
+ catch (error) {
26
+ console.error('[RedisCache] Failed to get key:', key, error instanceof Error ? error.message : error);
27
+ return null;
28
+ }
29
+ }
30
+ async set(key, value, ttl) {
31
+ try {
32
+ const serialized = JSON.stringify(value);
33
+ const fullKey = this.getFullKey(key);
34
+ const effectiveTTL = ttl ?? this.defaultTTL;
35
+ if (effectiveTTL) {
36
+ await this.redis.setex(fullKey, effectiveTTL, serialized);
37
+ }
38
+ else {
39
+ await this.redis.set(fullKey, serialized);
40
+ }
41
+ }
42
+ catch (error) {
43
+ console.error('[RedisCache] Failed to set key:', key, error instanceof Error ? error.message : error);
44
+ }
45
+ }
46
+ async delete(key) {
47
+ try {
48
+ await this.redis.del(this.getFullKey(key));
49
+ }
50
+ catch (error) {
51
+ console.error('[RedisCache] Failed to delete key:', key, error instanceof Error ? error.message : error);
52
+ }
53
+ }
54
+ async has(key) {
55
+ try {
56
+ const exists = await this.redis.exists(this.getFullKey(key));
57
+ return exists === 1;
58
+ }
59
+ catch (error) {
60
+ console.error('[RedisCache] Failed to check key:', key, error instanceof Error ? error.message : error);
61
+ return false;
62
+ }
63
+ }
64
+ async clear(pattern) {
65
+ try {
66
+ if (pattern) {
67
+ const fullPattern = this.getFullKey(pattern);
68
+ const keys = await this.redis.keys(fullPattern);
69
+ if (keys.length > 0) {
70
+ await this.redis.del(...keys);
71
+ }
72
+ }
73
+ else {
74
+ const keys = await this.redis.keys(this.getFullKey('*'));
75
+ if (keys.length > 0) {
76
+ await this.redis.del(...keys);
77
+ }
78
+ }
79
+ }
80
+ catch (error) {
81
+ console.error('[RedisCache] Failed to clear cache:', error instanceof Error ? error.message : error);
82
+ }
83
+ }
84
+ async mget(keys) {
85
+ try {
86
+ const fullKeys = keys.map((key) => this.getFullKey(key));
87
+ const values = await this.redis.mget(...fullKeys);
88
+ return values.map((value) => (value ? JSON.parse(value) : null));
89
+ }
90
+ catch (error) {
91
+ console.error('[RedisCache] Failed to mget keys:', error instanceof Error ? error.message : error);
92
+ return keys.map(() => null);
93
+ }
94
+ }
95
+ async mset(entries) {
96
+ try {
97
+ const pipeline = this.redis.pipeline();
98
+ for (const [key, value, ttl] of entries) {
99
+ const serialized = JSON.stringify(value);
100
+ const fullKey = this.getFullKey(key);
101
+ const effectiveTTL = ttl ?? this.defaultTTL;
102
+ if (effectiveTTL) {
103
+ pipeline.setex(fullKey, effectiveTTL, serialized);
104
+ }
105
+ else {
106
+ pipeline.set(fullKey, serialized);
107
+ }
108
+ }
109
+ await pipeline.exec();
110
+ }
111
+ catch (error) {
112
+ console.error('[RedisCache] Failed to mset entries:', error instanceof Error ? error.message : error);
113
+ }
114
+ }
115
+ async disconnect() {
116
+ try {
117
+ await this.redis.quit();
118
+ }
119
+ catch (error) {
120
+ console.error('[RedisCache] Failed to disconnect:', error instanceof Error ? error.message : error);
121
+ }
122
+ }
123
+ }
124
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/cache/redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { MemoryCache } from './cache/memory.js';
2
+ export { RedisCache } from './cache/redis.js';
3
+ export { FileCache } from './cache/file.js';
4
+ export { EnvAuthProvider } from './auth/env.js';
5
+ export * from './oauth/index.js';
6
+ export { JSONLAuditSink } from './audit/jsonl.js';
7
+ export { OpenTelemetryAuditSink } from './audit/opentelemetry.js';
8
+ export { OTelCounter, OTelHistogram, OTelSpan, OTelAttribute, METRIC_CONFIGS, OTEL_SERVICE_NAME, OTEL_TRACER_NAME, OTEL_METER_NAME, ATTRIBUTE_PREFIX_TOOL, ATTRIBUTE_PREFIX_METADATA, } from './audit/otel-metrics.js';
9
+ export type { CacheProvider, AuthProvider, AuditSink, AuditEvent, AuditFilter, UserCredentialData, } from '@mondaydotcomorg/atp-protocol';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACN,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACX,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,kBAAkB,GAClB,MAAM,+BAA+B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ export { MemoryCache } from './cache/memory.js';
2
+ export { RedisCache } from './cache/redis.js';
3
+ export { FileCache } from './cache/file.js';
4
+ export { EnvAuthProvider } from './auth/env.js';
5
+ export * from './oauth/index.js';
6
+ export { JSONLAuditSink } from './audit/jsonl.js';
7
+ export { OpenTelemetryAuditSink } from './audit/opentelemetry.js';
8
+ export { OTelCounter, OTelHistogram, OTelSpan, OTelAttribute, METRIC_CONFIGS, OTEL_SERVICE_NAME, OTEL_TRACER_NAME, OTEL_METER_NAME, ATTRIBUTE_PREFIX_TOOL, ATTRIBUTE_PREFIX_METADATA, } from './audit/otel-metrics.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EACN,WAAW,EACX,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,yBAAyB,GACzB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ScopeCheckerRegistry } from './scope-checkers.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ScopeCheckerRegistry } from './scope-checkers.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/oauth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,61 @@
1
+ import type { ScopeChecker, TokenInfo } from '@mondaydotcomorg/atp-protocol';
2
+ /**
3
+ * Scope checker registry
4
+ * Manages scope checkers for different OAuth providers
5
+ */
6
+ export declare class ScopeCheckerRegistry {
7
+ private checkers;
8
+ private scopeCache;
9
+ private cleanupInterval?;
10
+ private maxCacheSize;
11
+ private pendingChecks;
12
+ constructor();
13
+ /**
14
+ * Start periodic cache cleanup
15
+ */
16
+ private startCleanup;
17
+ /**
18
+ * Stop periodic cache cleanup (for testing or shutdown)
19
+ */
20
+ stopCleanup(): void;
21
+ /**
22
+ * Remove expired entries from cache
23
+ */
24
+ private cleanupExpiredCache;
25
+ /**
26
+ * Register a custom scope checker
27
+ */
28
+ register(checker: ScopeChecker): void;
29
+ /**
30
+ * Check if a scope checker is available for a provider
31
+ */
32
+ hasChecker(provider: string): boolean;
33
+ /**
34
+ * Get scope checker for a provider
35
+ */
36
+ getChecker(provider: string): ScopeChecker | undefined;
37
+ /**
38
+ * Check what scopes a token has (with caching and deduplication)
39
+ * @param provider - Provider name
40
+ * @param token - Access token
41
+ * @param cacheTTL - Cache TTL in seconds (default: 3600 = 1 hour)
42
+ */
43
+ checkScopes(provider: string, token: string, cacheTTL?: number): Promise<string[]>;
44
+ /**
45
+ * Validate if a token is still valid
46
+ */
47
+ validateToken(provider: string, token: string): Promise<boolean>;
48
+ /**
49
+ * Get complete token information
50
+ */
51
+ getTokenInfo(provider: string, token: string): Promise<TokenInfo>;
52
+ /**
53
+ * Clear cached scopes
54
+ */
55
+ clearCache(provider?: string): void;
56
+ /**
57
+ * Hash token for cache key (SHA-256, first 16 chars)
58
+ */
59
+ private hashToken;
60
+ }
61
+ //# sourceMappingURL=scope-checkers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-checkers.d.ts","sourceRoot":"","sources":["../../src/oauth/scope-checkers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG7E;;;GAGG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,UAAU,CAA8D;IAChF,OAAO,CAAC,eAAe,CAAC,CAAiB;IACzC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAwC;;IAM7D;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIrC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAItD;;;;;OAKG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqCtF;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAStE;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiBvE;;OAEG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAYnC;;OAEG;IACH,OAAO,CAAC,SAAS;CAGjB"}
@@ -0,0 +1,166 @@
1
+ import { createHash } from 'node:crypto';
2
+ /**
3
+ * Scope checker registry
4
+ * Manages scope checkers for different OAuth providers
5
+ */
6
+ export class ScopeCheckerRegistry {
7
+ checkers = new Map();
8
+ scopeCache = new Map();
9
+ cleanupInterval;
10
+ maxCacheSize = 10000;
11
+ pendingChecks = new Map();
12
+ constructor() {
13
+ this.startCleanup();
14
+ }
15
+ /**
16
+ * Start periodic cache cleanup
17
+ */
18
+ startCleanup() {
19
+ this.cleanupInterval = setInterval(() => {
20
+ this.cleanupExpiredCache();
21
+ }, 5 * 60 * 1000);
22
+ if (this.cleanupInterval.unref) {
23
+ this.cleanupInterval.unref();
24
+ }
25
+ }
26
+ /**
27
+ * Stop periodic cache cleanup (for testing or shutdown)
28
+ */
29
+ stopCleanup() {
30
+ if (this.cleanupInterval) {
31
+ clearInterval(this.cleanupInterval);
32
+ this.cleanupInterval = undefined;
33
+ }
34
+ }
35
+ /**
36
+ * Remove expired entries from cache
37
+ */
38
+ cleanupExpiredCache() {
39
+ const now = Date.now();
40
+ let cleaned = 0;
41
+ for (const [key, value] of this.scopeCache.entries()) {
42
+ if (value.expiresAt <= now) {
43
+ this.scopeCache.delete(key);
44
+ cleaned++;
45
+ }
46
+ }
47
+ if (this.scopeCache.size > this.maxCacheSize) {
48
+ const entriesToRemove = this.scopeCache.size - this.maxCacheSize;
49
+ const entries = Array.from(this.scopeCache.entries());
50
+ entries.sort((a, b) => a[1].expiresAt - b[1].expiresAt);
51
+ for (let i = 0; i < entriesToRemove; i++) {
52
+ const entry = entries[i];
53
+ if (entry) {
54
+ this.scopeCache.delete(entry[0]);
55
+ cleaned++;
56
+ }
57
+ }
58
+ }
59
+ if (cleaned > 0) {
60
+ console.debug(`Cleaned ${cleaned} expired/old scope cache entries`);
61
+ }
62
+ }
63
+ /**
64
+ * Register a custom scope checker
65
+ */
66
+ register(checker) {
67
+ this.checkers.set(checker.provider, checker);
68
+ }
69
+ /**
70
+ * Check if a scope checker is available for a provider
71
+ */
72
+ hasChecker(provider) {
73
+ return this.checkers.has(provider);
74
+ }
75
+ /**
76
+ * Get scope checker for a provider
77
+ */
78
+ getChecker(provider) {
79
+ return this.checkers.get(provider);
80
+ }
81
+ /**
82
+ * Check what scopes a token has (with caching and deduplication)
83
+ * @param provider - Provider name
84
+ * @param token - Access token
85
+ * @param cacheTTL - Cache TTL in seconds (default: 3600 = 1 hour)
86
+ */
87
+ async checkScopes(provider, token, cacheTTL = 3600) {
88
+ const cacheKey = `${provider}:${this.hashToken(token)}`;
89
+ const cached = this.scopeCache.get(cacheKey);
90
+ if (cached && cached.expiresAt > Date.now()) {
91
+ return cached.scopes;
92
+ }
93
+ const pending = this.pendingChecks.get(cacheKey);
94
+ if (pending) {
95
+ return pending;
96
+ }
97
+ const checker = this.checkers.get(provider);
98
+ if (!checker) {
99
+ throw new Error(`No scope checker registered for provider: ${provider}`);
100
+ }
101
+ const checkPromise = (async () => {
102
+ try {
103
+ const scopes = await checker.check(token);
104
+ this.scopeCache.set(cacheKey, {
105
+ scopes,
106
+ expiresAt: Date.now() + cacheTTL * 1000,
107
+ });
108
+ return scopes;
109
+ }
110
+ finally {
111
+ this.pendingChecks.delete(cacheKey);
112
+ }
113
+ })();
114
+ this.pendingChecks.set(cacheKey, checkPromise);
115
+ return checkPromise;
116
+ }
117
+ /**
118
+ * Validate if a token is still valid
119
+ */
120
+ async validateToken(provider, token) {
121
+ const checker = this.checkers.get(provider);
122
+ if (!checker || !checker.validate) {
123
+ return true;
124
+ }
125
+ return await checker.validate(token);
126
+ }
127
+ /**
128
+ * Get complete token information
129
+ */
130
+ async getTokenInfo(provider, token) {
131
+ const checker = this.checkers.get(provider);
132
+ if (!checker) {
133
+ throw new Error(`No scope checker registered for provider: ${provider}`);
134
+ }
135
+ const [scopes, valid] = await Promise.all([
136
+ checker.check(token),
137
+ checker.validate ? checker.validate(token) : Promise.resolve(true),
138
+ ]);
139
+ return {
140
+ valid,
141
+ scopes,
142
+ };
143
+ }
144
+ /**
145
+ * Clear cached scopes
146
+ */
147
+ clearCache(provider) {
148
+ if (provider) {
149
+ for (const key of this.scopeCache.keys()) {
150
+ if (key.startsWith(`${provider}:`)) {
151
+ this.scopeCache.delete(key);
152
+ }
153
+ }
154
+ }
155
+ else {
156
+ this.scopeCache.clear();
157
+ }
158
+ }
159
+ /**
160
+ * Hash token for cache key (SHA-256, first 16 chars)
161
+ */
162
+ hashToken(token) {
163
+ return createHash('sha256').update(token).digest('hex').substring(0, 16);
164
+ }
165
+ }
166
+ //# sourceMappingURL=scope-checkers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-checkers.js","sourceRoot":"","sources":["../../src/oauth/scope-checkers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/atp-providers",
3
- "version": "0.17.16",
3
+ "version": "0.18.4-rc.0",
4
4
  "description": "Built-in providers for Agent Tool Protocol (cache, auth, audit)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -25,8 +25,14 @@
25
25
  "publishConfig": {
26
26
  "access": "public"
27
27
  },
28
+ "keywords": [
29
+ "providers",
30
+ "atp",
31
+ "api",
32
+ "agent"
33
+ ],
28
34
  "dependencies": {
29
- "@mondaydotcomorg/atp-protocol": "0.17.16",
35
+ "@mondaydotcomorg/atp-protocol": "0.18.4-rc.0",
30
36
  "@opentelemetry/api": "^1.9.0"
31
37
  },
32
38
  "devDependencies": {
package/project.json CHANGED
@@ -25,7 +25,5 @@
25
25
  }
26
26
  }
27
27
  },
28
- "tags": [
29
- "atp-core"
30
- ]
28
+ "tags": ["atp-core"]
31
29
  }