@opencoredev/social-sdk 0.1.0 → 0.1.2

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 (154) hide show
  1. package/README.md +4 -2
  2. package/package.json +1 -1
  3. package/dist/cli.d.ts +0 -14
  4. package/dist/cli.d.ts.map +0 -1
  5. package/dist/cli.js +0 -223
  6. package/dist/cli.js.map +0 -1
  7. package/dist/cloud/common.d.ts +0 -26
  8. package/dist/cloud/common.d.ts.map +0 -1
  9. package/dist/cloud/common.js +0 -307
  10. package/dist/cloud/common.js.map +0 -1
  11. package/dist/cloud/lifecycle.d.ts +0 -11
  12. package/dist/cloud/lifecycle.d.ts.map +0 -1
  13. package/dist/cloud/lifecycle.js +0 -108
  14. package/dist/cloud/lifecycle.js.map +0 -1
  15. package/dist/cloud/media.d.ts +0 -24
  16. package/dist/cloud/media.d.ts.map +0 -1
  17. package/dist/cloud/media.js +0 -97
  18. package/dist/cloud/media.js.map +0 -1
  19. package/dist/cloud/outcomes.d.ts +0 -10
  20. package/dist/cloud/outcomes.d.ts.map +0 -1
  21. package/dist/cloud/outcomes.js +0 -188
  22. package/dist/cloud/outcomes.js.map +0 -1
  23. package/dist/cloud/post-for-me.d.ts +0 -70
  24. package/dist/cloud/post-for-me.d.ts.map +0 -1
  25. package/dist/cloud/post-for-me.js +0 -326
  26. package/dist/cloud/post-for-me.js.map +0 -1
  27. package/dist/cloud/zernio.d.ts +0 -112
  28. package/dist/cloud/zernio.d.ts.map +0 -1
  29. package/dist/cloud/zernio.js +0 -542
  30. package/dist/cloud/zernio.js.map +0 -1
  31. package/dist/core/adapter.d.ts +0 -118
  32. package/dist/core/adapter.d.ts.map +0 -1
  33. package/dist/core/adapter.js +0 -4
  34. package/dist/core/adapter.js.map +0 -1
  35. package/dist/core/client.d.ts +0 -108
  36. package/dist/core/client.d.ts.map +0 -1
  37. package/dist/core/client.js +0 -893
  38. package/dist/core/client.js.map +0 -1
  39. package/dist/core/concurrency.d.ts +0 -10
  40. package/dist/core/concurrency.d.ts.map +0 -1
  41. package/dist/core/concurrency.js +0 -78
  42. package/dist/core/concurrency.js.map +0 -1
  43. package/dist/core/errors.d.ts +0 -45
  44. package/dist/core/errors.d.ts.map +0 -1
  45. package/dist/core/errors.js +0 -44
  46. package/dist/core/errors.js.map +0 -1
  47. package/dist/core/idempotency.d.ts +0 -34
  48. package/dist/core/idempotency.d.ts.map +0 -1
  49. package/dist/core/idempotency.js +0 -59
  50. package/dist/core/idempotency.js.map +0 -1
  51. package/dist/core/index.d.ts +0 -7
  52. package/dist/core/index.d.ts.map +0 -1
  53. package/dist/core/index.js +0 -7
  54. package/dist/core/index.js.map +0 -1
  55. package/dist/core/pagination.d.ts +0 -12
  56. package/dist/core/pagination.d.ts.map +0 -1
  57. package/dist/core/pagination.js +0 -81
  58. package/dist/core/pagination.js.map +0 -1
  59. package/dist/core/types.d.ts +0 -329
  60. package/dist/core/types.d.ts.map +0 -1
  61. package/dist/core/types.js +0 -7
  62. package/dist/core/types.js.map +0 -1
  63. package/dist/index.d.ts +0 -2
  64. package/dist/index.d.ts.map +0 -1
  65. package/dist/index.js +0 -2
  66. package/dist/index.js.map +0 -1
  67. package/dist/platforms/bluesky.d.ts +0 -132
  68. package/dist/platforms/bluesky.d.ts.map +0 -1
  69. package/dist/platforms/bluesky.js +0 -1049
  70. package/dist/platforms/bluesky.js.map +0 -1
  71. package/dist/platforms/instagram.d.ts +0 -63
  72. package/dist/platforms/instagram.d.ts.map +0 -1
  73. package/dist/platforms/instagram.js +0 -676
  74. package/dist/platforms/instagram.js.map +0 -1
  75. package/dist/platforms/linkedin.d.ts +0 -54
  76. package/dist/platforms/linkedin.d.ts.map +0 -1
  77. package/dist/platforms/linkedin.js +0 -580
  78. package/dist/platforms/linkedin.js.map +0 -1
  79. package/dist/platforms/threads.d.ts +0 -102
  80. package/dist/platforms/threads.d.ts.map +0 -1
  81. package/dist/platforms/threads.js +0 -571
  82. package/dist/platforms/threads.js.map +0 -1
  83. package/dist/platforms/tiktok.d.ts +0 -32
  84. package/dist/platforms/tiktok.d.ts.map +0 -1
  85. package/dist/platforms/tiktok.js +0 -511
  86. package/dist/platforms/tiktok.js.map +0 -1
  87. package/dist/platforms/x-engagement.d.ts +0 -17
  88. package/dist/platforms/x-engagement.d.ts.map +0 -1
  89. package/dist/platforms/x-engagement.js +0 -47
  90. package/dist/platforms/x-engagement.js.map +0 -1
  91. package/dist/platforms/x.d.ts +0 -82
  92. package/dist/platforms/x.d.ts.map +0 -1
  93. package/dist/platforms/x.js +0 -511
  94. package/dist/platforms/x.js.map +0 -1
  95. package/dist/platforms/youtube-upload.d.ts +0 -33
  96. package/dist/platforms/youtube-upload.d.ts.map +0 -1
  97. package/dist/platforms/youtube-upload.js +0 -281
  98. package/dist/platforms/youtube-upload.js.map +0 -1
  99. package/dist/platforms/youtube.d.ts +0 -55
  100. package/dist/platforms/youtube.d.ts.map +0 -1
  101. package/dist/platforms/youtube.js +0 -561
  102. package/dist/platforms/youtube.js.map +0 -1
  103. package/dist/server/connections.d.ts +0 -124
  104. package/dist/server/connections.d.ts.map +0 -1
  105. package/dist/server/connections.js +0 -334
  106. package/dist/server/connections.js.map +0 -1
  107. package/dist/server/credentials.d.ts +0 -52
  108. package/dist/server/credentials.d.ts.map +0 -1
  109. package/dist/server/credentials.js +0 -115
  110. package/dist/server/credentials.js.map +0 -1
  111. package/dist/server/index.d.ts +0 -5
  112. package/dist/server/index.d.ts.map +0 -1
  113. package/dist/server/index.js +0 -5
  114. package/dist/server/index.js.map +0 -1
  115. package/dist/server/oauth.d.ts +0 -48
  116. package/dist/server/oauth.d.ts.map +0 -1
  117. package/dist/server/oauth.js +0 -483
  118. package/dist/server/oauth.js.map +0 -1
  119. package/dist/server/webhooks.d.ts +0 -58
  120. package/dist/server/webhooks.d.ts.map +0 -1
  121. package/dist/server/webhooks.js +0 -198
  122. package/dist/server/webhooks.js.map +0 -1
  123. package/dist/testing/index.d.ts +0 -47
  124. package/dist/testing/index.d.ts.map +0 -1
  125. package/dist/testing/index.js +0 -413
  126. package/dist/testing/index.js.map +0 -1
  127. package/dist/testing.d.ts +0 -2
  128. package/dist/testing.d.ts.map +0 -1
  129. package/dist/testing.js +0 -2
  130. package/dist/testing.js.map +0 -1
  131. package/dist/transport/binary.d.ts +0 -3
  132. package/dist/transport/binary.d.ts.map +0 -1
  133. package/dist/transport/binary.js +0 -30
  134. package/dist/transport/binary.js.map +0 -1
  135. package/dist/transport/budget.d.ts +0 -4
  136. package/dist/transport/budget.d.ts.map +0 -1
  137. package/dist/transport/budget.js +0 -27
  138. package/dist/transport/budget.js.map +0 -1
  139. package/dist/transport/http.d.ts +0 -44
  140. package/dist/transport/http.d.ts.map +0 -1
  141. package/dist/transport/http.js +0 -230
  142. package/dist/transport/http.js.map +0 -1
  143. package/dist/transport/json.d.ts +0 -3
  144. package/dist/transport/json.d.ts.map +0 -1
  145. package/dist/transport/json.js +0 -11
  146. package/dist/transport/json.js.map +0 -1
  147. package/dist/transport/upload.d.ts +0 -25
  148. package/dist/transport/upload.d.ts.map +0 -1
  149. package/dist/transport/upload.js +0 -133
  150. package/dist/transport/upload.js.map +0 -1
  151. package/dist/transport/validation.d.ts +0 -6
  152. package/dist/transport/validation.d.ts.map +0 -1
  153. package/dist/transport/validation.js +0 -24
  154. package/dist/transport/validation.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/server/credentials.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export * from "./connections.js";
2
- export * from "./credentials.js";
3
- export * from "./webhooks.js";
4
- export * from "./oauth.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -1,5 +0,0 @@
1
- export * from "./connections.js";
2
- export * from "./credentials.js";
3
- export * from "./webhooks.js";
4
- export * from "./oauth.js";
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -1,48 +0,0 @@
1
- import type { ConnectionAccount, ConnectionAttempt, ConnectionProvider } from "./connections.js";
2
- export interface OAuthTokenSet {
3
- readonly accessToken: string;
4
- readonly refreshToken?: string;
5
- readonly expiresAt?: string;
6
- readonly scopes?: readonly string[];
7
- readonly tokenType?: string;
8
- }
9
- export interface OAuthCredentialSink {
10
- save(input: {
11
- readonly account: ConnectionAccount;
12
- readonly token: OAuthTokenSet;
13
- readonly attempt: ConnectionAttempt;
14
- }): Promise<void>;
15
- }
16
- export interface OAuthProviderOptions {
17
- readonly clientId: string;
18
- readonly clientSecret?: string;
19
- readonly redirectUri?: string;
20
- readonly fetch?: typeof globalThis.fetch;
21
- readonly credentialSink?: OAuthCredentialSink;
22
- /** Optional label for callers; the attempt's backend is always authoritative. */
23
- readonly backend?: string;
24
- readonly scopes?: readonly string[];
25
- /** Explicit LinkedIn Marketing API version (YYYYMM). Required for LinkedIn OAuth. */
26
- readonly linkedinApiVersion?: string;
27
- /** Graph API version for Threads account discovery. */
28
- readonly threadsApiVersion?: string;
29
- /** Graph API version for Instagram Login account discovery. */
30
- readonly instagramApiVersion?: string;
31
- /** Maximum time for a single OAuth request. Defaults to ten seconds. */
32
- readonly timeoutMs?: number;
33
- /** Maximum response body size. Defaults to one MiB. */
34
- readonly maxResponseBytes?: number;
35
- }
36
- type ProviderKind = "youtube" | "x" | "threads" | "tiktok" | "instagram" | "linkedin";
37
- export declare function oauthProvider(kind: ProviderKind, options: OAuthProviderOptions): ConnectionProvider;
38
- /** Exchange a short-lived Threads or Instagram Login token for a long-lived token. */
39
- export declare function exchangeLongLivedOAuthToken(kind: "threads" | "instagram", options: OAuthProviderOptions, current: OAuthTokenSet): Promise<OAuthTokenSet>;
40
- export declare const youtubeOAuth: (options: OAuthProviderOptions) => ConnectionProvider;
41
- export declare const xOAuth: (options: OAuthProviderOptions) => ConnectionProvider;
42
- export declare const threadsOAuth: (options: OAuthProviderOptions) => ConnectionProvider;
43
- export declare const tiktokOAuth: (options: OAuthProviderOptions) => ConnectionProvider;
44
- export declare const instagramOAuth: (options: OAuthProviderOptions) => ConnectionProvider;
45
- export declare const linkedinOAuth: (options: OAuthProviderOptions) => ConnectionProvider;
46
- export declare function refreshOAuthToken(kind: ProviderKind, options: OAuthProviderOptions, current: OAuthTokenSet): Promise<OAuthTokenSet>;
47
- export {};
48
- //# sourceMappingURL=oauth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/server/oauth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEjG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,KAAK,EAAE;QACV,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;QACpC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;KACrC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAC9C,iFAAiF;IACjF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,qFAAqF;IACrF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,uDAAuD;IACvD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,+DAA+D;IAC/D,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,KAAK,YAAY,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAmWtF,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,oBAAoB,GAC5B,kBAAkB,CAwGpB;AA6LD,sFAAsF;AACtF,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,SAAS,GAAG,WAAW,EAC7B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,eAAO,MAAM,YAAY,GAAI,SAAS,oBAAoB,uBAAsC,CAAC;AACjG,eAAO,MAAM,MAAM,GAAI,SAAS,oBAAoB,uBAAgC,CAAC;AACrF,eAAO,MAAM,YAAY,GAAI,SAAS,oBAAoB,uBAAsC,CAAC;AACjG,eAAO,MAAM,WAAW,GAAI,SAAS,oBAAoB,uBAAqC,CAAC;AAC/F,eAAO,MAAM,cAAc,GAAI,SAAS,oBAAoB,uBACvB,CAAC;AACtC,eAAO,MAAM,aAAa,GAAI,SAAS,oBAAoB,uBAAuC,CAAC;AAEnG,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAwDxB"}
@@ -1,483 +0,0 @@
1
- import { SocialError } from "../core/errors.js";
2
- import { connectedAccountRef } from "../core/types.js";
3
- const configs = {
4
- youtube: {
5
- auth: "https://accounts.google.com/o/oauth2/v2/auth",
6
- token: "https://oauth2.googleapis.com/token",
7
- scopes: [
8
- "openid",
9
- "https://www.googleapis.com/auth/userinfo.profile",
10
- "https://www.googleapis.com/auth/youtube.readonly",
11
- ],
12
- scopeDelimiter: " ",
13
- pkce: false,
14
- clientKey: "client_id",
15
- },
16
- x: {
17
- auth: "https://api.x.com/2/oauth2/authorize",
18
- token: "https://api.x.com/2/oauth2/token",
19
- scopes: ["tweet.read", "users.read", "offline.access"],
20
- scopeDelimiter: " ",
21
- pkce: true,
22
- clientKey: "client_id",
23
- },
24
- threads: {
25
- auth: "https://threads.net/oauth/authorize",
26
- token: "https://graph.threads.net/oauth/access_token",
27
- scopes: ["threads_basic", "threads_content_publish"],
28
- scopeDelimiter: ",",
29
- pkce: false,
30
- clientKey: "client_id",
31
- },
32
- tiktok: {
33
- auth: "https://www.tiktok.com/v2/auth/authorize/",
34
- token: "https://open.tiktokapis.com/v2/oauth/token/",
35
- scopes: ["user.info.basic", "video.publish"],
36
- scopeDelimiter: ",",
37
- pkce: true,
38
- clientKey: "client_key",
39
- },
40
- instagram: {
41
- auth: "https://www.instagram.com/oauth/authorize",
42
- token: "https://api.instagram.com/oauth/access_token",
43
- scopes: ["instagram_business_basic", "instagram_business_content_publish"],
44
- scopeDelimiter: ",",
45
- pkce: false,
46
- clientKey: "client_id",
47
- },
48
- linkedin: {
49
- auth: "https://www.linkedin.com/oauth/v2/authorization",
50
- token: "https://www.linkedin.com/oauth/v2/accessToken",
51
- scopes: ["openid", "profile", "w_member_social"],
52
- scopeDelimiter: " ",
53
- pkce: false,
54
- clientKey: "client_id",
55
- },
56
- };
57
- const DEFAULT_TIMEOUT_MS = 10_000;
58
- const DEFAULT_MAX_RESPONSE_BYTES = 1024 * 1024;
59
- const webFetch = (...args) => globalThis.fetch(...args);
60
- function fail(operation, message, code = "upstream_failure", cause) {
61
- throw new SocialError({ code, operation, message, cause });
62
- }
63
- function asRecord(value, operation = "oauth.response") {
64
- if (typeof value !== "object" || value === null || Array.isArray(value))
65
- fail(operation, "OAuth provider returned an invalid response");
66
- return value;
67
- }
68
- function requiredString(value, field, operation = "oauth.response") {
69
- if (typeof value !== "string" || value.length === 0 || value.length > 8192)
70
- fail(operation, `OAuth provider response is missing ${field}`);
71
- return value;
72
- }
73
- function optionalString(value) {
74
- return typeof value === "string" && value.length > 0 && value.length <= 8192 ? value : undefined;
75
- }
76
- function errorForResponse(status, operation) {
77
- if (status === 401)
78
- fail(operation, "OAuth authorization is no longer valid; reconnect the account", "reconnect_required");
79
- if (status === 403)
80
- fail(operation, "OAuth authorization does not include the required permission", "missing_permission");
81
- if (status === 429)
82
- throw new SocialError({
83
- code: "rate_limited",
84
- operation,
85
- message: "OAuth provider rate limited the request",
86
- upstreamStatus: status,
87
- retryDisposition: { kind: "after-delay", delayMs: 1000 },
88
- });
89
- throw new SocialError({
90
- code: "upstream_failure",
91
- operation,
92
- message: "OAuth provider request failed",
93
- upstreamStatus: status,
94
- });
95
- }
96
- async function readBounded(response, maxBytes, operation) {
97
- if (!Number.isSafeInteger(maxBytes) || maxBytes < 1)
98
- fail("oauth.config", "maxResponseBytes must be a positive safe integer", "invalid_input");
99
- if (!response.body)
100
- return "";
101
- const reader = response.body.getReader();
102
- const chunks = [];
103
- let total = 0;
104
- try {
105
- for (;;) {
106
- const part = await reader.read();
107
- if (part.done)
108
- break;
109
- total += part.value.byteLength;
110
- if (total > maxBytes) {
111
- await reader.cancel();
112
- fail(operation, "OAuth provider response exceeded the configured size limit", "upstream_failure");
113
- }
114
- chunks.push(part.value);
115
- }
116
- }
117
- finally {
118
- reader.releaseLock();
119
- }
120
- const merged = new Uint8Array(total);
121
- let offset = 0;
122
- for (const chunk of chunks) {
123
- merged.set(chunk, offset);
124
- offset += chunk.byteLength;
125
- }
126
- return new TextDecoder().decode(merged);
127
- }
128
- async function body(response, operation, maxBytes) {
129
- const raw = await readBounded(response, maxBytes, operation);
130
- if (!response.ok)
131
- return errorForResponse(response.status, operation);
132
- const contentType = response.headers.get("content-type")?.toLowerCase() ?? "";
133
- if (raw.trim() === "")
134
- fail(operation, "OAuth provider returned an empty response");
135
- if (contentType.includes("application/json") ||
136
- contentType.includes("+json") ||
137
- raw.trimStart().startsWith("{")) {
138
- try {
139
- return asRecord(JSON.parse(raw), operation);
140
- }
141
- catch {
142
- fail(operation, "OAuth provider returned malformed JSON");
143
- }
144
- }
145
- if (contentType.includes("application/x-www-form-urlencoded")) {
146
- const params = new URLSearchParams(raw);
147
- if ([...params.keys()].length === 0)
148
- fail(operation, "OAuth provider returned malformed form data");
149
- return Object.fromEntries(params.entries());
150
- }
151
- fail(operation, "OAuth provider returned an unsupported response format");
152
- }
153
- function parseScopes(value) {
154
- const scope = optionalString(value);
155
- return scope === undefined ? undefined : scope.split(/[\s,]+/).filter(Boolean);
156
- }
157
- function tokenSet(data, operation = "oauth.token") {
158
- const accessToken = requiredString(data["access_token"], "access_token", operation);
159
- const expires = data["expires_in"];
160
- let expiresAt;
161
- if (expires !== undefined) {
162
- const seconds = typeof expires === "number"
163
- ? expires
164
- : typeof expires === "string" && /^\d+(?:\.\d+)?$/.test(expires)
165
- ? Number(expires)
166
- : Number.NaN;
167
- if (!Number.isFinite(seconds) || seconds < 0 || seconds > 31_536_000_000)
168
- fail(operation, "OAuth provider returned an invalid token lifetime");
169
- expiresAt = new Date(Date.now() + seconds * 1000).toISOString();
170
- }
171
- const refreshToken = optionalString(data["refresh_token"]);
172
- const scopes = parseScopes(data["scope"]);
173
- const tokenType = optionalString(data["token_type"]);
174
- return {
175
- accessToken,
176
- ...(refreshToken === undefined ? {} : { refreshToken }),
177
- ...(expiresAt === undefined ? {} : { expiresAt }),
178
- ...(scopes === undefined ? {} : { scopes }),
179
- ...(tokenType === undefined ? {} : { tokenType }),
180
- };
181
- }
182
- function tokenResult(data, kind) {
183
- const nested = kind === "tiktok" && data["data"] !== undefined ? asRecord(data["data"], "oauth.token") : data;
184
- const token = tokenSet(nested);
185
- const accountHint = optionalString(nested["user_id"]) ?? optionalString(nested["open_id"]);
186
- return { token, ...(accountHint === undefined ? {} : { accountHint }) };
187
- }
188
- async function request(fetcher, url, init, operation, options) {
189
- const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
190
- if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 1)
191
- fail("oauth.config", "timeoutMs must be a positive safe integer", "invalid_input");
192
- const controller = new AbortController();
193
- const timer = setTimeout(() => controller.abort(), timeoutMs);
194
- let raceTimer;
195
- try {
196
- // AbortController handles standards-compliant fetch implementations; the
197
- // race also bounds injected fetchers that ignore AbortSignal.
198
- const timeout = new Promise((_, reject) => {
199
- raceTimer = setTimeout(() => reject(new DOMException("OAuth request timed out", "AbortError")), timeoutMs);
200
- });
201
- const response = await Promise.race([
202
- fetcher(url, { ...init, redirect: "error", signal: controller.signal }),
203
- timeout,
204
- ]);
205
- return await Promise.race([
206
- body(response, operation, options.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES),
207
- timeout,
208
- ]);
209
- }
210
- catch (error) {
211
- if (error instanceof SocialError)
212
- throw error;
213
- if ((error instanceof DOMException && error.name === "AbortError") ||
214
- (typeof error === "object" &&
215
- error !== null &&
216
- "name" in error &&
217
- error.name === "AbortError"))
218
- fail(operation, "OAuth provider request timed out", "timeout");
219
- fail(operation, "OAuth provider request failed", "upstream_failure", error);
220
- }
221
- finally {
222
- clearTimeout(timer);
223
- if (raceTimer !== undefined)
224
- clearTimeout(raceTimer);
225
- }
226
- fail("oauth.internal", "OAuth request did not produce a result");
227
- }
228
- function account(platform, backend, id, name) {
229
- return { ref: connectedAccountRef({ backend, platform, accountId: id }), displayName: name };
230
- }
231
- function validateLinkedInVersion(value) {
232
- if (value === undefined || !/^20\d{2}(0[1-9]|1[0-2])$/.test(value))
233
- fail("oauth.config", "LinkedIn OAuth requires an explicit YYYYMM API version", "invalid_input");
234
- return value;
235
- }
236
- function validateCallback(input) {
237
- let callback;
238
- try {
239
- callback = new URL(input.callbackUrl);
240
- }
241
- catch {
242
- fail("connections.complete", "OAuth callback URL is invalid", "invalid_input");
243
- }
244
- let expected;
245
- try {
246
- expected = new URL(input.attempt.redirectUri);
247
- }
248
- catch {
249
- fail("connections.complete", "OAuth attempt redirect URI is invalid", "invalid_input");
250
- }
251
- if (callback.origin !== expected.origin ||
252
- callback.pathname !== expected.pathname ||
253
- callback.username ||
254
- callback.password ||
255
- callback.hash)
256
- fail("connections.complete", "OAuth callback does not match the registered redirect", "unauthorized");
257
- for (const [key, value] of expected.searchParams)
258
- if (callback.searchParams.getAll(key).length !== 1 || callback.searchParams.get(key) !== value)
259
- fail("connections.complete", "OAuth callback does not match the registered redirect", "unauthorized");
260
- const states = callback.searchParams.getAll("state");
261
- if (states.length !== 1 || states[0] !== input.attempt.state)
262
- fail("connections.complete", "OAuth callback state did not match the authenticated attempt", "unauthorized");
263
- return callback;
264
- }
265
- function providerIdentity(kind, hint, discovered) {
266
- if (hint === undefined)
267
- return;
268
- const normalized = kind === "linkedin" ? `urn:li:person:${hint}` : hint;
269
- if (!discovered.some((item) => item.ref.accountId === normalized || item.ref.accountId.endsWith(`:${hint}`)))
270
- fail("oauth.identity", "OAuth token identity did not match the discovered account", "unauthorized");
271
- }
272
- export function oauthProvider(kind, options) {
273
- const cfg = configs[kind];
274
- if (!options.clientId.trim())
275
- fail("oauth.config", "clientId is required", "invalid_input");
276
- if (kind === "linkedin")
277
- validateLinkedInVersion(options.linkedinApiVersion);
278
- const fetcher = options.fetch ?? webFetch;
279
- const scopes = options.scopes ?? cfg.scopes;
280
- return {
281
- async start(input) {
282
- if (!input.platforms.includes(kind))
283
- fail("connections.begin", `OAuth provider ${kind} cannot authorize the requested platforms`, "invalid_input");
284
- if (options.redirectUri !== undefined && options.redirectUri !== input.redirectUri)
285
- fail("connections.begin", "redirectUri does not match the configured OAuth callback", "invalid_input");
286
- const url = new URL(cfg.auth);
287
- url.searchParams.set(cfg.clientKey, options.clientId);
288
- url.searchParams.set("redirect_uri", input.redirectUri);
289
- url.searchParams.set("response_type", "code");
290
- url.searchParams.set("scope", scopes.join(cfg.scopeDelimiter));
291
- url.searchParams.set("state", input.state);
292
- if (kind === "youtube") {
293
- url.searchParams.set("access_type", "offline");
294
- url.searchParams.set("prompt", "consent");
295
- }
296
- if (cfg.pkce) {
297
- url.searchParams.set("code_challenge", input.codeChallenge);
298
- url.searchParams.set("code_challenge_method", "S256");
299
- }
300
- return { authorizationUrl: url.toString() };
301
- },
302
- async complete(input) {
303
- const callback = validateCallback(input);
304
- const denied = callback.searchParams.get("error");
305
- if (denied !== null) {
306
- const cancelled = denied === "access_denied" ||
307
- denied === "user_denied" ||
308
- callback.searchParams.get("error_reason") === "user_denied";
309
- fail("connections.complete", "OAuth authorization was cancelled or denied", cancelled ? "cancelled" : "unauthorized");
310
- }
311
- const code = callback.searchParams.get("code");
312
- if (!code)
313
- fail("connections.complete", "OAuth callback did not include an authorization code", "invalid_input");
314
- const form = new URLSearchParams({
315
- grant_type: "authorization_code",
316
- code,
317
- redirect_uri: input.attempt.redirectUri,
318
- [cfg.clientKey]: options.clientId,
319
- });
320
- if (cfg.pkce)
321
- form.set("code_verifier", input.attempt.codeVerifier);
322
- if (options.clientSecret)
323
- form.set("client_secret", options.clientSecret);
324
- const raw = await request(fetcher, cfg.token, {
325
- method: "POST",
326
- headers: {
327
- "content-type": "application/x-www-form-urlencoded",
328
- accept: "application/json",
329
- },
330
- body: form,
331
- }, "oauth.token", options);
332
- let result = tokenResult(raw, kind);
333
- if ((kind === "threads" || kind === "instagram") && options.clientSecret)
334
- result = {
335
- token: await exchangeLongLived(kind, options, result.token),
336
- ...(result.accountHint === undefined ? {} : { accountHint: result.accountHint }),
337
- };
338
- const accounts = await discover(kind, result.token, result.accountHint, input.attempt.backend, fetcher, options);
339
- providerIdentity(kind, result.accountHint, accounts);
340
- for (const item of accounts)
341
- if (options.credentialSink)
342
- await options.credentialSink.save({
343
- account: item,
344
- token: result.token,
345
- attempt: input.attempt,
346
- });
347
- return accounts;
348
- },
349
- };
350
- }
351
- async function discover(kind, token, _hint, backend, fetcher, options) {
352
- const auth = { Authorization: `Bearer ${token.accessToken}`, accept: "application/json" };
353
- if (kind === "youtube") {
354
- const data = await request(fetcher, "https://www.googleapis.com/youtube/v3/channels?part=id,snippet&mine=true", { headers: auth }, "youtube.account", options);
355
- const items = Array.isArray(data["items"]) ? data["items"] : [];
356
- return items.map((item) => {
357
- const row = asRecord(item, "youtube.account");
358
- const snippet = asRecord(row["snippet"] ?? {}, "youtube.account");
359
- return account("youtube", backend, requiredString(row["id"], "channel id", "youtube.account"), typeof snippet["title"] === "string" ? snippet["title"] : "YouTube channel");
360
- });
361
- }
362
- if (kind === "x") {
363
- const data = await request(fetcher, "https://api.x.com/2/users/me", { headers: auth }, "x.account", options);
364
- const row = asRecord(data["data"], "x.account");
365
- return [
366
- account("x", backend, requiredString(row["id"], "user id", "x.account"), typeof row["name"] === "string" ? row["name"] : "X account"),
367
- ];
368
- }
369
- if (kind === "threads") {
370
- const version = options.threadsApiVersion ?? "v1.0";
371
- if (!/^v\d+\.\d+$/.test(version))
372
- fail("oauth.config", "Threads API version is invalid", "invalid_input");
373
- const data = await request(fetcher, `https://graph.threads.net/${version}/me?fields=id,username`, { headers: auth }, "threads.account", options);
374
- return [
375
- account("threads", backend, requiredString(data["id"], "user id", "threads.account"), typeof data["username"] === "string" ? data["username"] : "Threads account"),
376
- ];
377
- }
378
- if (kind === "tiktok") {
379
- const data = await request(fetcher, "https://open.tiktokapis.com/v2/user/info/?fields=open_id,display_name", { headers: auth }, "tiktok.account", options);
380
- const row = asRecord(data["data"], "tiktok.account");
381
- const user = asRecord(row["user"], "tiktok.account");
382
- return [
383
- account("tiktok", backend, requiredString(user["open_id"], "open_id", "tiktok.account"), typeof user["display_name"] === "string" ? user["display_name"] : "TikTok account"),
384
- ];
385
- }
386
- if (kind === "instagram") {
387
- const version = options.instagramApiVersion ?? "v25.0";
388
- if (!/^v\d+\.\d+$/.test(version))
389
- fail("oauth.config", "Instagram API version is invalid", "invalid_input");
390
- const data = await request(fetcher, `https://graph.instagram.com/${version}/me?fields=id,user_id,username`, { headers: auth }, "instagram.account", options);
391
- return [
392
- account("instagram", backend, requiredString(data["user_id"] ?? data["id"], "user id", "instagram.account"), typeof data["username"] === "string" ? data["username"] : "Instagram account"),
393
- ];
394
- }
395
- const version = validateLinkedInVersion(options.linkedinApiVersion);
396
- const data = await request(fetcher, "https://api.linkedin.com/v2/userinfo", { headers: { ...auth, "LinkedIn-Version": version } }, "linkedin.account", options);
397
- const subject = requiredString(data["sub"], "member id", "linkedin.account");
398
- const member = account("linkedin", backend, `urn:li:person:${subject}`, typeof data["name"] === "string" ? data["name"] : "LinkedIn member");
399
- let acl;
400
- try {
401
- acl = await request(fetcher, "https://api.linkedin.com/v2/organizationalEntityAcls?q=roleAssignee&projection=(elements*(organizationalTarget,role))", { headers: { ...auth, "LinkedIn-Version": version } }, "linkedin.organizations", options);
402
- }
403
- catch (error) {
404
- // Member-only grants commonly cannot read organization ACLs. That is a known
405
- // absence of organization evidence; transport and malformed responses still fail.
406
- if (error instanceof SocialError && error.code === "missing_permission")
407
- return [member];
408
- throw error;
409
- }
410
- const elements = Array.isArray(acl["elements"]) ? acl["elements"] : [];
411
- const organizations = elements.flatMap((entry) => {
412
- const row = asRecord(entry, "linkedin.organizations");
413
- const target = typeof row["organizationalTarget"] === "string" ? row["organizationalTarget"] : "";
414
- const role = row["role"];
415
- if ((role !== "ADMINISTRATOR" && role !== "DIRECT_SPONSORED_CONTENT_POSTER") ||
416
- !/^urn:li:organization:[a-zA-Z0-9_-]+$/.test(target))
417
- return [];
418
- const id = target.slice("urn:li:organization:".length);
419
- return [
420
- account("linkedin", backend, `urn:li:organization:${id}`, `LinkedIn organization ${id}`),
421
- ];
422
- });
423
- return [member, ...organizations];
424
- }
425
- async function exchangeLongLived(kind, options, current) {
426
- if (!options.clientSecret)
427
- fail("oauth.exchange", "A clientSecret is required for long-lived token exchange", "invalid_config");
428
- const endpoint = kind === "threads"
429
- ? "https://graph.threads.net/access_token"
430
- : "https://graph.instagram.com/access_token";
431
- const params = new URLSearchParams({
432
- grant_type: kind === "threads" ? "th_exchange_token" : "ig_exchange_token",
433
- client_secret: options.clientSecret,
434
- access_token: current.accessToken,
435
- });
436
- return tokenSet(await request(options.fetch ?? webFetch, `${endpoint}?${params.toString()}`, { headers: { accept: "application/json" } }, `oauth.${kind}.exchange`, options), `oauth.${kind}.exchange`);
437
- }
438
- /** Exchange a short-lived Threads or Instagram Login token for a long-lived token. */
439
- export async function exchangeLongLivedOAuthToken(kind, options, current) {
440
- return exchangeLongLived(kind, options, current);
441
- }
442
- export const youtubeOAuth = (options) => oauthProvider("youtube", options);
443
- export const xOAuth = (options) => oauthProvider("x", options);
444
- export const threadsOAuth = (options) => oauthProvider("threads", options);
445
- export const tiktokOAuth = (options) => oauthProvider("tiktok", options);
446
- export const instagramOAuth = (options) => oauthProvider("instagram", options);
447
- export const linkedinOAuth = (options) => oauthProvider("linkedin", options);
448
- export async function refreshOAuthToken(kind, options, current) {
449
- if (kind === "threads" || kind === "instagram") {
450
- const endpoint = kind === "threads"
451
- ? "https://graph.threads.net/refresh_access_token"
452
- : "https://graph.instagram.com/refresh_access_token";
453
- const grant = kind === "threads" ? "th_refresh_token" : "ig_refresh_token";
454
- const params = new URLSearchParams({ grant_type: grant, access_token: current.accessToken });
455
- const next = tokenSet(await request(options.fetch ?? webFetch, `${endpoint}?${params.toString()}`, { headers: { accept: "application/json" } }, `oauth.${kind}.refresh`, options), `oauth.${kind}.refresh`);
456
- return next.refreshToken
457
- ? next
458
- : {
459
- ...next,
460
- ...(current.refreshToken === undefined ? {} : { refreshToken: current.refreshToken }),
461
- };
462
- }
463
- if (!current.refreshToken)
464
- fail("oauth.refresh", "No refresh token is available; reconnect the account", "reconnect_required");
465
- const cfg = configs[kind];
466
- const form = new URLSearchParams({
467
- grant_type: "refresh_token",
468
- refresh_token: current.refreshToken,
469
- [cfg.clientKey]: options.clientId,
470
- });
471
- if (options.clientSecret)
472
- form.set("client_secret", options.clientSecret);
473
- const next = tokenSet(await request(options.fetch ?? webFetch, cfg.token, {
474
- method: "POST",
475
- headers: {
476
- "content-type": "application/x-www-form-urlencoded",
477
- accept: "application/json",
478
- },
479
- body: form,
480
- }, "oauth.refresh", options), "oauth.refresh");
481
- return next.refreshToken ? next : { ...next, refreshToken: current.refreshToken };
482
- }
483
- //# sourceMappingURL=oauth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/server/oauth.ts"],"names":[],"mappings":"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"}