@attrove/sdk 0.1.2 → 0.1.4

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 (107) hide show
  1. package/cjs/README.md +247 -0
  2. package/cjs/package.json +56 -0
  3. package/cjs/src/__mocks__/version.js +17 -0
  4. package/cjs/src/__mocks__/version.js.map +1 -0
  5. package/cjs/src/admin-client.js +221 -0
  6. package/cjs/src/admin-client.js.map +1 -0
  7. package/cjs/src/client.js +312 -0
  8. package/cjs/src/client.js.map +1 -0
  9. package/cjs/src/constants.js +69 -0
  10. package/cjs/src/constants.js.map +1 -0
  11. package/cjs/src/errors/index.js +307 -0
  12. package/cjs/src/errors/index.js.map +1 -0
  13. package/cjs/src/index.js +98 -0
  14. package/cjs/src/index.js.map +1 -0
  15. package/cjs/src/resources/conversations.js +95 -0
  16. package/cjs/src/resources/conversations.js.map +1 -0
  17. package/cjs/src/resources/index.js +17 -0
  18. package/cjs/src/resources/index.js.map +1 -0
  19. package/cjs/src/resources/integrations.js +69 -0
  20. package/cjs/src/resources/integrations.js.map +1 -0
  21. package/cjs/src/resources/messages.js +98 -0
  22. package/cjs/src/resources/messages.js.map +1 -0
  23. package/cjs/src/resources/query.js +143 -0
  24. package/cjs/src/resources/query.js.map +1 -0
  25. package/cjs/src/resources/users.js +91 -0
  26. package/cjs/src/resources/users.js.map +1 -0
  27. package/cjs/src/types/index.js +292 -0
  28. package/cjs/src/types/index.js.map +1 -0
  29. package/cjs/src/utils/fetch.js +417 -0
  30. package/cjs/src/utils/fetch.js.map +1 -0
  31. package/cjs/src/utils/index.js +12 -0
  32. package/cjs/src/utils/index.js.map +1 -0
  33. package/cjs/src/utils/streaming.js +368 -0
  34. package/cjs/src/utils/streaming.js.map +1 -0
  35. package/cjs/src/version.js +31 -0
  36. package/cjs/src/version.js.map +1 -0
  37. package/esm/README.md +247 -0
  38. package/esm/package.json +56 -0
  39. package/esm/src/__mocks__/version.js +12 -0
  40. package/esm/src/__mocks__/version.js.map +1 -0
  41. package/esm/src/admin-client.js +216 -0
  42. package/esm/src/admin-client.js.map +1 -0
  43. package/esm/src/client.js +308 -0
  44. package/esm/src/client.js.map +1 -0
  45. package/esm/src/constants.js +65 -0
  46. package/esm/src/constants.js.map +1 -0
  47. package/esm/src/errors/index.js +285 -0
  48. package/esm/src/errors/index.js.map +1 -0
  49. package/esm/src/index.js +68 -0
  50. package/esm/src/index.js.map +1 -0
  51. package/esm/src/resources/conversations.js +91 -0
  52. package/esm/src/resources/conversations.js.map +1 -0
  53. package/esm/src/resources/index.js +9 -0
  54. package/esm/src/resources/index.js.map +1 -0
  55. package/esm/src/resources/integrations.js +65 -0
  56. package/esm/src/resources/integrations.js.map +1 -0
  57. package/esm/src/resources/messages.js +94 -0
  58. package/esm/src/resources/messages.js.map +1 -0
  59. package/esm/src/resources/query.js +139 -0
  60. package/esm/src/resources/query.js.map +1 -0
  61. package/esm/src/resources/users.js +87 -0
  62. package/esm/src/resources/users.js.map +1 -0
  63. package/esm/src/types/index.js +277 -0
  64. package/esm/src/types/index.js.map +1 -0
  65. package/esm/src/utils/fetch.js +413 -0
  66. package/esm/src/utils/fetch.js.map +1 -0
  67. package/esm/src/utils/index.js +6 -0
  68. package/esm/src/utils/index.js.map +1 -0
  69. package/esm/src/utils/streaming.js +363 -0
  70. package/esm/src/utils/streaming.js.map +1 -0
  71. package/esm/src/version.js +26 -0
  72. package/esm/src/version.js.map +1 -0
  73. package/package.json +16 -9
  74. package/types/src/__mocks__/version.d.ts +8 -0
  75. package/types/src/__mocks__/version.d.ts.map +1 -0
  76. package/types/src/admin-client.d.ts +144 -0
  77. package/types/src/admin-client.d.ts.map +1 -0
  78. package/types/src/client.d.ts +233 -0
  79. package/types/src/client.d.ts.map +1 -0
  80. package/types/src/constants.d.ts +47 -0
  81. package/types/src/constants.d.ts.map +1 -0
  82. package/types/src/errors/index.d.ts +206 -0
  83. package/types/src/errors/index.d.ts.map +1 -0
  84. package/types/src/index.d.ts +65 -0
  85. package/types/src/index.d.ts.map +1 -0
  86. package/types/src/resources/conversations.d.ts +81 -0
  87. package/types/src/resources/conversations.d.ts.map +1 -0
  88. package/types/src/resources/index.d.ts +12 -0
  89. package/types/src/resources/index.d.ts.map +1 -0
  90. package/types/src/resources/integrations.d.ts +63 -0
  91. package/types/src/resources/integrations.d.ts.map +1 -0
  92. package/types/src/resources/messages.d.ts +69 -0
  93. package/types/src/resources/messages.d.ts.map +1 -0
  94. package/types/src/resources/query.d.ts +86 -0
  95. package/types/src/resources/query.d.ts.map +1 -0
  96. package/types/src/resources/users.d.ts +88 -0
  97. package/types/src/resources/users.d.ts.map +1 -0
  98. package/types/src/types/index.d.ts +807 -0
  99. package/types/src/types/index.d.ts.map +1 -0
  100. package/types/src/utils/fetch.d.ts +161 -0
  101. package/types/src/utils/fetch.d.ts.map +1 -0
  102. package/types/src/utils/index.d.ts +8 -0
  103. package/types/src/utils/index.d.ts.map +1 -0
  104. package/types/src/utils/streaming.d.ts +210 -0
  105. package/types/src/utils/streaming.d.ts.map +1 -0
  106. package/types/src/version.d.ts +21 -0
  107. package/types/src/version.d.ts.map +1 -0
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ /**
3
+ * Messages Resource
4
+ *
5
+ * Provides methods for accessing messages from connected integrations.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MessagesResource = void 0;
9
+ /**
10
+ * Messages resource for accessing message data.
11
+ *
12
+ * Provides methods for listing and retrieving messages from
13
+ * connected integrations (Gmail, Slack, etc.).
14
+ */
15
+ class MessagesResource {
16
+ constructor(http, userId) {
17
+ this.http = http;
18
+ this.userId = userId;
19
+ }
20
+ /**
21
+ * List messages with optional filtering.
22
+ *
23
+ * @param options - Filtering, pagination, and expansion options
24
+ * @returns Paginated list of messages
25
+ *
26
+ * @throws {AuthenticationError} If the API key is invalid or expired
27
+ * @throws {ValidationError} If the filter parameters are invalid
28
+ * @throws {NetworkError} If unable to reach the API
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * // List recent messages
33
+ * const { data, pagination } = await attrove.messages.list();
34
+ *
35
+ * // List messages with body text
36
+ * const { data } = await attrove.messages.list({ expand: ['body_text'] });
37
+ *
38
+ * // Fetch specific messages by ID (UUIDs)
39
+ * const { data } = await attrove.messages.list({
40
+ * ids: ['message-uuid-1', 'message-uuid-2'],
41
+ * expand: ['body_text']
42
+ * });
43
+ * ```
44
+ */
45
+ async list(options = {}) {
46
+ const params = {};
47
+ if (options.ids?.length) {
48
+ params.ids = options.ids.join(',');
49
+ }
50
+ if (options.integrationId) {
51
+ params.integration_id = options.integrationId;
52
+ }
53
+ if (options.conversationId) {
54
+ params.conversation_id = options.conversationId;
55
+ }
56
+ if (options.startDate) {
57
+ params.start_date = options.startDate;
58
+ }
59
+ if (options.endDate) {
60
+ params.end_date = options.endDate;
61
+ }
62
+ if (options.limit !== undefined) {
63
+ params.limit = String(options.limit);
64
+ }
65
+ if (options.offset !== undefined) {
66
+ params.offset = String(options.offset);
67
+ }
68
+ if (options.expand?.length) {
69
+ params.expand = options.expand.join(',');
70
+ }
71
+ const response = await this.http.request(`/v1/users/${this.userId}/messages`, { method: 'GET' }, params);
72
+ return {
73
+ data: response.data,
74
+ pagination: response.pagination,
75
+ };
76
+ }
77
+ /**
78
+ * Get a single message by ID.
79
+ *
80
+ * @param id - Message ID (UUID format)
81
+ * @returns The requested message
82
+ *
83
+ * @throws {AuthenticationError} If the API key is invalid or expired
84
+ * @throws {NotFoundError} If the message does not exist
85
+ * @throws {NetworkError} If unable to reach the API
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * const message = await attrove.messages.get('message-uuid');
90
+ * console.log(message.subject);
91
+ * ```
92
+ */
93
+ async get(id) {
94
+ return this.http.get(`/v1/users/${this.userId}/messages/${id}`);
95
+ }
96
+ }
97
+ exports.MessagesResource = MessagesResource;
98
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../../packages/sdk/src/resources/messages.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAaH;;;;;GAKG;AACH,MAAa,gBAAgB;IAC3B,YACmB,IAAgB,EAChB,MAAc;QADd,SAAI,GAAJ,IAAI,CAAY;QAChB,WAAM,GAAN,MAAM,CAAQ;IAC9B,CAAC;IAEJ;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,KAAK,CAAC,IAAI,CAAC,UAA+B,EAAE;QAC1C,MAAM,MAAM,GAAuC,EAAE,CAAC;QAEtD,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;QAChD,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;QAClD,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CACtC,aAAa,IAAI,CAAC,MAAM,WAAW,EACnC,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB,MAAM,CACP,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAU,aAAa,IAAI,CAAC,MAAM,aAAa,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;CACF;AA1FD,4CA0FC"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ /**
3
+ * Query Resource
4
+ *
5
+ * Provides methods for RAG (Retrieval-Augmented Generation) queries.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.QueryResource = void 0;
9
+ /**
10
+ * Query resource for RAG operations.
11
+ *
12
+ * Provides methods for AI-powered queries and semantic search
13
+ * across the user's unified context.
14
+ */
15
+ class QueryResource {
16
+ constructor(http, userId) {
17
+ this.http = http;
18
+ this.userId = userId;
19
+ }
20
+ /**
21
+ * Query the user's unified context with AI.
22
+ *
23
+ * Performs semantic search across connected integrations and returns
24
+ * an AI-generated answer based on the relevant context.
25
+ *
26
+ * @param prompt - The natural language question to answer
27
+ * @param options - Query options including history, filters, etc.
28
+ * @returns AI-generated answer with conversation history and source references
29
+ *
30
+ * @throws {AuthenticationError} If the API key is invalid or expired
31
+ * @throws {ValidationError} If the query parameters are invalid
32
+ * @throws {RateLimitError} If rate limits are exceeded
33
+ * @throws {NetworkError} If unable to reach the API
34
+ * @throws {ServerError} If the server encounters an error during processing
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * // Simple query
39
+ * const response = await attrove.query('What did Sarah say about the Q4 budget?');
40
+ *
41
+ * // With conversation history
42
+ * const response = await attrove.query('What about Q3?', {
43
+ * history: [
44
+ * { role: 'user', content: 'What did Sarah say about the Q4 budget?' },
45
+ * { role: 'assistant', content: 'Sarah mentioned...' }
46
+ * ]
47
+ * });
48
+ *
49
+ * // With filters
50
+ * const response = await attrove.query('Latest updates', {
51
+ * integrationIds: ['550e8400-e29b-41d4-a716-446655440000'],
52
+ * includeSources: true
53
+ * });
54
+ * ```
55
+ */
56
+ async query(prompt, options = {}) {
57
+ const body = {
58
+ query: prompt,
59
+ client_timezone: options.timezone || Intl.DateTimeFormat().resolvedOptions().timeZone,
60
+ };
61
+ if (options.history?.length) {
62
+ body.history = options.history;
63
+ }
64
+ if (options.integrationIds?.length) {
65
+ body.integration_ids = options.integrationIds;
66
+ }
67
+ if (options.conversationIds?.length) {
68
+ body.conversation_ids = options.conversationIds;
69
+ }
70
+ if (options.allowBotMessages !== undefined) {
71
+ body.allow_bot_messages = options.allowBotMessages;
72
+ }
73
+ if (options.includeSources) {
74
+ body.expand = 'sources';
75
+ }
76
+ const response = await this.http.post(`/v1/users/${this.userId}/ai/query`, body);
77
+ return {
78
+ answer: response.answer,
79
+ history: response.history,
80
+ used_message_ids: response.used_message_ids,
81
+ sources: response.sources,
82
+ };
83
+ }
84
+ /**
85
+ * Semantic search across the user's context.
86
+ *
87
+ * Returns raw matching messages grouped by conversation, without AI summarization.
88
+ * Use this when you need full control over how results are displayed.
89
+ *
90
+ * @param query - The search query (semantic, not keyword-based)
91
+ * @param options - Search options including filters, date range, etc.
92
+ * @returns Matching messages grouped by conversation
93
+ *
94
+ * @throws {AuthenticationError} If the API key is invalid or expired
95
+ * @throws {ValidationError} If the search parameters are invalid
96
+ * @throws {RateLimitError} If rate limits are exceeded
97
+ * @throws {NetworkError} If unable to reach the API
98
+ * @throws {ServerError} If the server encounters an error during search
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * // Basic search
103
+ * const results = await attrove.search('product launch');
104
+ *
105
+ * // With filters
106
+ * const results = await attrove.search('budget discussion', {
107
+ * afterDate: '2024-01-01T00:00:00Z',
108
+ * senderDomains: ['acme.com'],
109
+ * includeBodyText: true
110
+ * });
111
+ * ```
112
+ */
113
+ async search(query, options = {}) {
114
+ const body = { query };
115
+ if (options.integrationIds?.length) {
116
+ body.integration_ids = options.integrationIds;
117
+ }
118
+ if (options.conversationIds?.length) {
119
+ body.conversation_ids = options.conversationIds;
120
+ }
121
+ if (options.afterDate) {
122
+ body.after_date = options.afterDate;
123
+ }
124
+ if (options.beforeDate) {
125
+ body.before_date = options.beforeDate;
126
+ }
127
+ if (options.allowBotMessages !== undefined) {
128
+ body.allow_bot_messages = options.allowBotMessages;
129
+ }
130
+ if (options.senderDomains?.length) {
131
+ body.sender_domains = options.senderDomains;
132
+ }
133
+ if (options.entityIds?.length) {
134
+ body.entity_ids = options.entityIds;
135
+ }
136
+ if (options.includeBodyText) {
137
+ body.expand = 'body_text';
138
+ }
139
+ return this.http.post(`/v1/users/${this.userId}/ai/search`, body);
140
+ }
141
+ }
142
+ exports.QueryResource = QueryResource;
143
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../../packages/sdk/src/resources/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Users Resource
4
+ *
5
+ * Provides methods for accessing user data and sync statistics.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.UsersResource = void 0;
9
+ /**
10
+ * Users resource for accessing user data.
11
+ *
12
+ * Provides methods for retrieving user profiles, updating settings,
13
+ * and accessing sync statistics across integrations.
14
+ */
15
+ class UsersResource {
16
+ constructor(http, userId) {
17
+ this.http = http;
18
+ this.userId = userId;
19
+ }
20
+ /**
21
+ * Get the current user's profile and integrations.
22
+ *
23
+ * @returns User profile with connected integrations
24
+ *
25
+ * @throws {AuthenticationError} If the API key is invalid or expired
26
+ * @throws {NotFoundError} If the user does not exist
27
+ * @throws {NetworkError} If unable to reach the API
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const { user, integrations } = await attrove.users.get();
32
+ * console.log(`${user.email} has ${integrations.length} integrations`);
33
+ * ```
34
+ */
35
+ async get() {
36
+ return this.http.get(`/v1/users/${this.userId}`);
37
+ }
38
+ /**
39
+ * Update the current user's profile.
40
+ *
41
+ * @param options - Fields to update
42
+ * @returns Updated user profile
43
+ *
44
+ * @throws {AuthenticationError} If the API key is invalid or expired
45
+ * @throws {ValidationError} If the update options are invalid
46
+ * @throws {NotFoundError} If the user does not exist
47
+ * @throws {NetworkError} If unable to reach the API
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * const user = await attrove.users.update({
52
+ * timezone: 'America/New_York',
53
+ * firstName: 'John'
54
+ * });
55
+ * ```
56
+ */
57
+ async update(options) {
58
+ const body = {};
59
+ if (options.firstName !== undefined)
60
+ body.first_name = options.firstName;
61
+ if (options.lastName !== undefined)
62
+ body.last_name = options.lastName;
63
+ if (options.role !== undefined)
64
+ body.role = options.role;
65
+ if (options.timezone !== undefined)
66
+ body.timezone = options.timezone;
67
+ if (options.onboarded !== undefined)
68
+ body.onboarded = options.onboarded;
69
+ return this.http.patch(`/v1/users/${this.userId}`, body);
70
+ }
71
+ /**
72
+ * Get sync statistics for the user's integrations.
73
+ *
74
+ * @returns Sync statistics including message counts and last sync times
75
+ *
76
+ * @throws {AuthenticationError} If the API key is invalid or expired
77
+ * @throws {NotFoundError} If the user does not exist
78
+ * @throws {NetworkError} If unable to reach the API
79
+ *
80
+ * @example
81
+ * ```ts
82
+ * const stats = await attrove.users.syncStats();
83
+ * console.log(`Total messages: ${stats.totals.messages.count}`);
84
+ * ```
85
+ */
86
+ async syncStats() {
87
+ return this.http.get(`/v1/users/${this.userId}/sync-stats`);
88
+ }
89
+ }
90
+ exports.UsersResource = UsersResource;
91
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../../../../../packages/sdk/src/resources/users.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAwBH;;;;;GAKG;AACH,MAAa,aAAa;IACxB,YACmB,IAAgB,EAChB,MAAc;QADd,SAAI,GAAJ,IAAI,CAAY;QAChB,WAAM,GAAN,MAAM,CAAQ;IAC9B,CAAC;IAEJ;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuB,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,MAAM,CAAC,OAA0B;QACrC,MAAM,IAAI,GAA4B,EAAE,CAAC;QAEzC,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACzE,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;QACtE,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACrE,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAExE,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAO,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAY,aAAa,IAAI,CAAC,MAAM,aAAa,CAAC,CAAC;IACzE,CAAC;CACF;AA1ED,sCA0EC"}
@@ -0,0 +1,292 @@
1
+ "use strict";
2
+ /**
3
+ * Attrove SDK Types
4
+ *
5
+ * Standalone type definitions for the SDK. These are bundled with the package
6
+ * and do not depend on internal monorepo packages.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.isValidStreamFrame = exports.ErrorCodes = exports.isValidISODate = exports.isValidApiKey = exports.createUUID = exports.createISODate = exports.createApiKey = exports.createConversationId = exports.createMessageId = exports.createIntegrationId = exports.createUserId = exports.isValidUUID = exports.asBrandedString = void 0;
10
+ /**
11
+ * Helper to cast a string to a branded type.
12
+ *
13
+ * Use with caution - this bypasses type safety. Prefer using the
14
+ * validation factory functions (createUserId, createApiKey, etc.)
15
+ * which validate the input before branding.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Only use after validating the format
20
+ * const userId = asBrandedString<UserId>(validatedUuid);
21
+ * ```
22
+ */
23
+ function asBrandedString(value) {
24
+ return value;
25
+ }
26
+ exports.asBrandedString = asBrandedString;
27
+ // =============================================================================
28
+ // Validation Factory Functions
29
+ // =============================================================================
30
+ //
31
+ // These functions validate input and return branded types. Use these instead
32
+ // of asBrandedString when you want runtime validation.
33
+ //
34
+ /**
35
+ * UUID regex pattern.
36
+ * Validates the 8-4-4-4-12 hexadecimal format but does not enforce a specific UUID version.
37
+ */
38
+ const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
39
+ /**
40
+ * API key regex pattern (sk_ prefix followed by alphanumeric and underscores).
41
+ */
42
+ const API_KEY_REGEX = /^sk_[a-zA-Z0-9_]+$/;
43
+ /**
44
+ * ISO 8601 date regex pattern (basic validation).
45
+ */
46
+ const ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})?)?$/;
47
+ /**
48
+ * Check if a string is a valid UUID format.
49
+ * Validates the 8-4-4-4-12 hexadecimal format but does not enforce a specific UUID version.
50
+ *
51
+ * @param value - String to validate
52
+ * @returns True if the string is a valid UUID format
53
+ *
54
+ * @example
55
+ * ```ts
56
+ * if (isValidUUID(userId)) {
57
+ * // proceed with the valid UUID
58
+ * }
59
+ * ```
60
+ */
61
+ function isValidUUID(value) {
62
+ return UUID_REGEX.test(value);
63
+ }
64
+ exports.isValidUUID = isValidUUID;
65
+ /**
66
+ * Validate and create a UserId from a string.
67
+ *
68
+ * @param value - String to validate
69
+ * @returns Validation result with branded UserId or error message
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * const result = createUserId('550e8400-e29b-41d4-a716-446655440000');
74
+ * if (result.success) {
75
+ * const userId: UserId = result.value;
76
+ * } else {
77
+ * console.error(result.error);
78
+ * }
79
+ * ```
80
+ */
81
+ function createUserId(value) {
82
+ if (!value || typeof value !== 'string') {
83
+ return { success: false, error: 'UserId must be a non-empty string' };
84
+ }
85
+ if (!UUID_REGEX.test(value)) {
86
+ return { success: false, error: 'UserId must be a valid UUID format' };
87
+ }
88
+ return { success: true, value: value };
89
+ }
90
+ exports.createUserId = createUserId;
91
+ /**
92
+ * Validate and create an IntegrationId from a string.
93
+ */
94
+ function createIntegrationId(value) {
95
+ if (!value || typeof value !== 'string') {
96
+ return { success: false, error: 'IntegrationId must be a non-empty string' };
97
+ }
98
+ if (!UUID_REGEX.test(value)) {
99
+ return { success: false, error: 'IntegrationId must be a valid UUID format' };
100
+ }
101
+ return { success: true, value: value };
102
+ }
103
+ exports.createIntegrationId = createIntegrationId;
104
+ /**
105
+ * Validate and create a MessageId from a string.
106
+ */
107
+ function createMessageId(value) {
108
+ if (!value || typeof value !== 'string') {
109
+ return { success: false, error: 'MessageId must be a non-empty string' };
110
+ }
111
+ if (!UUID_REGEX.test(value)) {
112
+ return { success: false, error: 'MessageId must be a valid UUID format' };
113
+ }
114
+ return { success: true, value: value };
115
+ }
116
+ exports.createMessageId = createMessageId;
117
+ /**
118
+ * Validate and create a ConversationId from a string.
119
+ */
120
+ function createConversationId(value) {
121
+ if (!value || typeof value !== 'string') {
122
+ return { success: false, error: 'ConversationId must be a non-empty string' };
123
+ }
124
+ if (!UUID_REGEX.test(value)) {
125
+ return { success: false, error: 'ConversationId must be a valid UUID format' };
126
+ }
127
+ return { success: true, value: value };
128
+ }
129
+ exports.createConversationId = createConversationId;
130
+ /**
131
+ * Validate and create an ApiKeyToken from a string.
132
+ *
133
+ * @example
134
+ * ```ts
135
+ * const result = createApiKey('sk_live_abc123');
136
+ * if (result.success) {
137
+ * const apiKey: ApiKeyToken = result.value;
138
+ * }
139
+ * ```
140
+ */
141
+ function createApiKey(value) {
142
+ if (!value || typeof value !== 'string') {
143
+ return { success: false, error: 'ApiKey must be a non-empty string' };
144
+ }
145
+ if (!API_KEY_REGEX.test(value)) {
146
+ return { success: false, error: 'ApiKey must start with "sk_" followed by alphanumeric characters' };
147
+ }
148
+ return { success: true, value: value };
149
+ }
150
+ exports.createApiKey = createApiKey;
151
+ /**
152
+ * Validate and create an ISODateString from a string.
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * const result = createISODate('2024-01-15T10:30:00Z');
157
+ * if (result.success) {
158
+ * const date: ISODateString = result.value;
159
+ * }
160
+ * ```
161
+ */
162
+ function createISODate(value) {
163
+ if (!value || typeof value !== 'string') {
164
+ return { success: false, error: 'ISODateString must be a non-empty string' };
165
+ }
166
+ if (!ISO_DATE_REGEX.test(value)) {
167
+ return { success: false, error: 'ISODateString must be a valid ISO 8601 date format' };
168
+ }
169
+ // Additional validation: ensure it parses to a valid date
170
+ const parsed = Date.parse(value);
171
+ if (Number.isNaN(parsed)) {
172
+ return { success: false, error: 'ISODateString must be a valid date' };
173
+ }
174
+ return { success: true, value: value };
175
+ }
176
+ exports.createISODate = createISODate;
177
+ /**
178
+ * Validate and create a UUID from a string.
179
+ */
180
+ function createUUID(value) {
181
+ if (!value || typeof value !== 'string') {
182
+ return { success: false, error: 'UUID must be a non-empty string' };
183
+ }
184
+ if (!UUID_REGEX.test(value)) {
185
+ return { success: false, error: 'UUID must be a valid UUID format' };
186
+ }
187
+ return { success: true, value: value };
188
+ }
189
+ exports.createUUID = createUUID;
190
+ /**
191
+ * Check if a string is a valid API key format.
192
+ */
193
+ function isValidApiKey(value) {
194
+ return API_KEY_REGEX.test(value);
195
+ }
196
+ exports.isValidApiKey = isValidApiKey;
197
+ /**
198
+ * Check if a string is a valid ISO 8601 date format.
199
+ */
200
+ function isValidISODate(value) {
201
+ return ISO_DATE_REGEX.test(value) && !Number.isNaN(Date.parse(value));
202
+ }
203
+ exports.isValidISODate = isValidISODate;
204
+ // =============================================================================
205
+ // Error Types
206
+ // =============================================================================
207
+ /**
208
+ * Standardized error codes from the Attrove API.
209
+ */
210
+ exports.ErrorCodes = {
211
+ // Authentication errors
212
+ AUTH_MISSING_TOKEN: 'AUTH_MISSING_TOKEN',
213
+ AUTH_INVALID_TOKEN: 'AUTH_INVALID_TOKEN',
214
+ AUTH_EXPIRED_TOKEN: 'AUTH_EXPIRED_TOKEN',
215
+ AUTH_USER_MISMATCH: 'AUTH_USER_MISMATCH',
216
+ AUTH_INSUFFICIENT_PERMISSIONS: 'AUTH_INSUFFICIENT_PERMISSIONS',
217
+ // Resource errors
218
+ RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',
219
+ RESOURCE_ACCESS_DENIED: 'RESOURCE_ACCESS_DENIED',
220
+ RESOURCE_ALREADY_EXISTS: 'RESOURCE_ALREADY_EXISTS',
221
+ RESOURCE_DELETED: 'RESOURCE_DELETED',
222
+ // Validation errors
223
+ VALIDATION_INVALID_ID: 'VALIDATION_INVALID_ID',
224
+ VALIDATION_REQUIRED_FIELD: 'VALIDATION_REQUIRED_FIELD',
225
+ VALIDATION_INVALID_FORMAT: 'VALIDATION_INVALID_FORMAT',
226
+ VALIDATION_OUT_OF_RANGE: 'VALIDATION_OUT_OF_RANGE',
227
+ // Integration errors
228
+ INTEGRATION_OAUTH_FAILED: 'INTEGRATION_OAUTH_FAILED',
229
+ INTEGRATION_EMAIL_EXISTS: 'INTEGRATION_EMAIL_EXISTS',
230
+ INTEGRATION_TOKEN_EXPIRED: 'INTEGRATION_TOKEN_EXPIRED',
231
+ INTEGRATION_SYNC_FAILED: 'INTEGRATION_SYNC_FAILED',
232
+ INTEGRATION_NOT_CONNECTED: 'INTEGRATION_NOT_CONNECTED',
233
+ // Rate limiting
234
+ RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',
235
+ // Server errors
236
+ INTERNAL_ERROR: 'INTERNAL_ERROR',
237
+ SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',
238
+ };
239
+ /**
240
+ * Valid stream frame types.
241
+ */
242
+ const VALID_FRAME_TYPES = new Set(['chunk', 'end', 'error', 'state', 'message_ids', 'stream_start']);
243
+ /**
244
+ * Runtime validator for StreamFrame objects.
245
+ * Validates that parsed JSON has the required structure for a StreamFrame.
246
+ *
247
+ * @param data - Unknown data to validate (typically from JSON.parse)
248
+ * @returns True if the data is a valid StreamFrame, false otherwise
249
+ *
250
+ * @example
251
+ * ```ts
252
+ * const parsed = JSON.parse(event.data);
253
+ * if (isValidStreamFrame(parsed)) {
254
+ * // TypeScript knows parsed is StreamFrame
255
+ * handleFrame(parsed);
256
+ * }
257
+ * ```
258
+ */
259
+ function isValidStreamFrame(data) {
260
+ if (!data || typeof data !== 'object') {
261
+ return false;
262
+ }
263
+ const frame = data;
264
+ // All frames must have type and message_id
265
+ if (typeof frame.type !== 'string' || !VALID_FRAME_TYPES.has(frame.type)) {
266
+ return false;
267
+ }
268
+ if (typeof frame.message_id !== 'string') {
269
+ return false;
270
+ }
271
+ // Type-specific validation
272
+ switch (frame.type) {
273
+ case 'chunk':
274
+ return typeof frame.content === 'string';
275
+ case 'end':
276
+ return typeof frame.reason === 'string' &&
277
+ ['completed', 'cancelled', 'error'].includes(frame.reason);
278
+ case 'error':
279
+ return typeof frame.error === 'string';
280
+ case 'state':
281
+ return typeof frame.state === 'string';
282
+ case 'message_ids':
283
+ return Array.isArray(frame.used_message_ids) &&
284
+ frame.used_message_ids.every((id) => typeof id === 'string');
285
+ case 'stream_start':
286
+ return true;
287
+ default:
288
+ return false;
289
+ }
290
+ }
291
+ exports.isValidStreamFrame = isValidStreamFrame;
292
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/sdk/src/types/index.ts"],"names":[],"mappings":"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"}