@37signals/basecamp 0.9.0 → 0.11.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 (122) hide show
  1. package/README.md +147 -15
  2. package/dist/client.d.ts +8 -5
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +237 -144
  5. package/dist/client.js.map +1 -1
  6. package/dist/generated/metadata.d.ts.map +1 -1
  7. package/dist/generated/metadata.js +280 -12
  8. package/dist/generated/metadata.js.map +1 -1
  9. package/dist/generated/metadata.ts +280 -12
  10. package/dist/generated/openapi-stripped.json +4403 -2124
  11. package/dist/generated/path-mapping.d.ts.map +1 -1
  12. package/dist/generated/path-mapping.js +22 -5
  13. package/dist/generated/path-mapping.js.map +1 -1
  14. package/dist/generated/path-mapping.ts +22 -5
  15. package/dist/generated/schema.d.ts +2983 -1220
  16. package/dist/generated/services/boosts.d.ts +13 -10
  17. package/dist/generated/services/boosts.d.ts.map +1 -1
  18. package/dist/generated/services/boosts.js +5 -5
  19. package/dist/generated/services/boosts.js.map +1 -1
  20. package/dist/generated/services/boosts.ts +12 -10
  21. package/dist/generated/services/cards.d.ts +4 -4
  22. package/dist/generated/services/cards.d.ts.map +1 -1
  23. package/dist/generated/services/cards.js +2 -2
  24. package/dist/generated/services/cards.js.map +1 -1
  25. package/dist/generated/services/cards.ts +4 -4
  26. package/dist/generated/services/everything.d.ts +303 -0
  27. package/dist/generated/services/everything.d.ts.map +1 -0
  28. package/dist/generated/services/everything.js +359 -0
  29. package/dist/generated/services/everything.js.map +1 -0
  30. package/dist/generated/services/everything.ts +594 -0
  31. package/dist/generated/services/index.d.ts +2 -1
  32. package/dist/generated/services/index.d.ts.map +1 -1
  33. package/dist/generated/services/index.js +2 -1
  34. package/dist/generated/services/index.js.map +1 -1
  35. package/dist/generated/services/index.ts +2 -1
  36. package/dist/generated/services/message-types.d.ts +15 -10
  37. package/dist/generated/services/message-types.d.ts.map +1 -1
  38. package/dist/generated/services/message-types.js +35 -18
  39. package/dist/generated/services/message-types.js.map +1 -1
  40. package/dist/generated/services/message-types.ts +34 -18
  41. package/dist/generated/services/my-notifications.d.ts +27 -0
  42. package/dist/generated/services/my-notifications.d.ts.map +1 -1
  43. package/dist/generated/services/my-notifications.js +23 -1
  44. package/dist/generated/services/my-notifications.js.map +1 -1
  45. package/dist/generated/services/my-notifications.ts +46 -1
  46. package/dist/generated/services/recordings.d.ts +2 -2
  47. package/dist/generated/services/recordings.d.ts.map +1 -1
  48. package/dist/generated/services/recordings.js +1 -1
  49. package/dist/generated/services/recordings.js.map +1 -1
  50. package/dist/generated/services/recordings.ts +2 -2
  51. package/dist/generated/services/schedules.d.ts +9 -1
  52. package/dist/generated/services/schedules.d.ts.map +1 -1
  53. package/dist/generated/services/schedules.js.map +1 -1
  54. package/dist/generated/services/schedules.ts +9 -1
  55. package/dist/generated/services/tools.d.ts +2 -0
  56. package/dist/generated/services/tools.d.ts.map +1 -1
  57. package/dist/generated/services/tools.js +1 -0
  58. package/dist/generated/services/tools.js.map +1 -1
  59. package/dist/generated/services/tools.ts +3 -0
  60. package/dist/hooks.d.ts.map +1 -1
  61. package/dist/hooks.js +4 -1
  62. package/dist/hooks.js.map +1 -1
  63. package/dist/index.d.ts +9 -3
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +13 -2
  66. package/dist/index.js.map +1 -1
  67. package/dist/oauth/device-errors.d.ts +29 -0
  68. package/dist/oauth/device-errors.d.ts.map +1 -0
  69. package/dist/oauth/device-errors.js +52 -0
  70. package/dist/oauth/device-errors.js.map +1 -0
  71. package/dist/oauth/device-login.d.ts +50 -0
  72. package/dist/oauth/device-login.d.ts.map +1 -0
  73. package/dist/oauth/device-login.js +118 -0
  74. package/dist/oauth/device-login.js.map +1 -0
  75. package/dist/oauth/device.d.ts +112 -0
  76. package/dist/oauth/device.d.ts.map +1 -0
  77. package/dist/oauth/device.js +746 -0
  78. package/dist/oauth/device.js.map +1 -0
  79. package/dist/oauth/exchange.d.ts.map +1 -1
  80. package/dist/oauth/exchange.js +75 -9
  81. package/dist/oauth/exchange.js.map +1 -1
  82. package/dist/oauth/index.d.ts +4 -1
  83. package/dist/oauth/index.d.ts.map +1 -1
  84. package/dist/oauth/index.js +4 -0
  85. package/dist/oauth/index.js.map +1 -1
  86. package/dist/oauth/limits.d.ts +15 -0
  87. package/dist/oauth/limits.d.ts.map +1 -0
  88. package/dist/oauth/limits.js +15 -0
  89. package/dist/oauth/limits.js.map +1 -0
  90. package/dist/oauth/token-manager.d.ts.map +1 -1
  91. package/dist/oauth/token-manager.js +15 -4
  92. package/dist/oauth/token-manager.js.map +1 -1
  93. package/dist/oauth/token-store.d.ts.map +1 -1
  94. package/dist/oauth/token-store.js +6 -0
  95. package/dist/oauth/token-store.js.map +1 -1
  96. package/dist/oauth/types.d.ts +35 -3
  97. package/dist/oauth/types.d.ts.map +1 -1
  98. package/dist/pagination.d.ts +5 -1
  99. package/dist/pagination.d.ts.map +1 -1
  100. package/dist/pagination.js.map +1 -1
  101. package/dist/services/base.d.ts +3 -1
  102. package/dist/services/base.d.ts.map +1 -1
  103. package/dist/services/base.js +16 -5
  104. package/dist/services/base.js.map +1 -1
  105. package/dist/services/cards-extensions.d.ts +76 -0
  106. package/dist/services/cards-extensions.d.ts.map +1 -0
  107. package/dist/services/cards-extensions.js +67 -0
  108. package/dist/services/cards-extensions.js.map +1 -0
  109. package/package.json +2 -2
  110. package/src/generated/metadata.ts +280 -12
  111. package/src/generated/openapi-stripped.json +4403 -2124
  112. package/src/generated/path-mapping.ts +22 -5
  113. package/src/generated/schema.d.ts +2983 -1220
  114. package/src/generated/services/boosts.ts +12 -10
  115. package/src/generated/services/cards.ts +4 -4
  116. package/src/generated/services/everything.ts +594 -0
  117. package/src/generated/services/index.ts +2 -1
  118. package/src/generated/services/message-types.ts +34 -18
  119. package/src/generated/services/my-notifications.ts +46 -1
  120. package/src/generated/services/recordings.ts +2 -2
  121. package/src/generated/services/schedules.ts +9 -1
  122. package/src/generated/services/tools.ts +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-login.js","sourceRoot":"","sources":["../../src/oauth/device-login.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,GAEb,MAAM,aAAa,CAAC;AAqCrB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA2B;IAClE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,GAAG,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAEhH,6EAA6E;IAC7E,sEAAsE;IACtE,uEAAuE;IACvE,6EAA6E;IAC7E,gFAAgF;IAChF,MAAM,mBAAmB,GACvB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAC3G,IAAI,CAAC,MAAM,CAAC,2BAA2B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChE,MAAM,IAAI,eAAe,CACvB,aAAa,EACb,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,sEAAsE;IACtE,kEAAkE;IAClE,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,yDAAyD,CAAC,CAAC;IAC9F,CAAC;IAED,yEAAyE;IACzE,yEAAyE;IACzE,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,MAAM,IAAI,GAAG,MAAM,0BAA0B,CAAC;QAC5C,2BAA2B,EAAE,MAAM,CAAC,2BAA2B;QAC/D,QAAQ;QACR,KAAK;QACL,KAAK,EAAE,WAAW;QAClB,mEAAmE;QACnE,0EAA0E;QAC1E,MAAM;KACP,CAAC,CAAC;IAEH,uEAAuE;IACvE,sEAAsE;IACtE,yEAAyE;IACzE,kEAAkE;IAClE,0EAA0E;IAC1E,iDAAiD;IACjD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAErE,oEAAoE;IACpE,2EAA2E;IAC3E,2CAA2C;IAC3C,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,4EAA4E;IAC5E,uEAAuE;IACvE,0EAA0E;IAC1E,iEAAiE;IACjE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;QACxF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,sEAAsE;YACtE,sEAAsE;YACtE,kEAAkE;YAClE,4CAA4C;YAC5C,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,OAAO,CAAC,OAAO,EAAE;aACd,IAAI,CAAC,GAAG,EAAE;YACT,oEAAoE;YACpE,uEAAuE;YACvE,8DAA8D;YAC9D,IAAI,MAAM,EAAE,OAAO;gBAAE,OAAO,SAAS,CAAC;YACtC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC;aACD,IAAI,CACH,GAAG,EAAE;YACH,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CACF,CAAC;IACN,CAAC,CAAC,CAAC;IACH,2EAA2E;IAC3E,2EAA2E;IAC3E,+CAA+C;IAC/C,MAAM,gBAAgB,GACpB,IAAI,CAAC,SAAS,GAAG,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC3F,yEAAyE;IACzE,yEAAyE;IACzE,iDAAiD;IACjD,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,oDAAoD,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,eAAe,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,QAAQ;QACR,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,SAAS,EAAE,gBAAgB;QAC3B,uEAAuE;QACvE,uEAAuE;QACvE,gEAAgE;QAChE,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;QAC9C,MAAM;QACN,KAAK;QACL,KAAK,EAAE,WAAW;QAClB,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * RFC 8628 device authorization grant — request + poll.
3
+ *
4
+ * `requestDeviceAuthorization` obtains a device/user code pair;
5
+ * `pollDeviceToken` runs the §3.5 polling loop against the token endpoint. Both
6
+ * are TLS-guarded. The polling clock is monotonic and injectable for tests.
7
+ */
8
+ import { MAX_TOKEN_LIFETIME_SECONDS } from "./limits.js";
9
+ export { MAX_TOKEN_LIFETIME_SECONDS };
10
+ import type { DeviceAuthorization, OAuthToken } from "./types.js";
11
+ /** URN grant type for the device authorization grant. */
12
+ export declare const DEVICE_CODE_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:device_code";
13
+ /** Monotonic clock in milliseconds. Injectable so tests can advance time. */
14
+ export type MonotonicClock = () => number;
15
+ /**
16
+ * Default monotonic clock (ms): `performance.now()`, which every supported
17
+ * Node/browser runtime provides. The `Date.now()` branch is a last resort for
18
+ * exotic runtimes without `performance` — wall-clock, so not strictly monotonic;
19
+ * inject a real monotonic clock there if NTP steps matter.
20
+ */
21
+ export declare const defaultClock: MonotonicClock;
22
+ /**
23
+ * Validate one sample from an injected clock seam. `Number.isFinite` performs
24
+ * no coercion, so a bigint, string, or Symbol sample fails exactly like a
25
+ * NaN/Infinity one — the typed usage error, never a raw TypeError out of later
26
+ * deadline arithmetic. Shared by the poller and the login orchestrator so both
27
+ * validate EVERY sample the same way.
28
+ */
29
+ export declare function validatedClockSample(sample: unknown, entry: string): number;
30
+ /**
31
+ * Parameters for {@link requestDeviceAuthorization}.
32
+ */
33
+ export interface RequestDeviceAuthorizationParams {
34
+ /** The device_authorization_endpoint from discovery. */
35
+ deviceAuthorizationEndpoint: string;
36
+ /** The public client id (e.g. "basecamp-cli"). */
37
+ clientId: string;
38
+ /** Requested scope. Omitted from the request entirely when unset → server default `read`. */
39
+ scope?: string;
40
+ /** Custom fetch (testing). */
41
+ fetch?: typeof globalThis.fetch;
42
+ /** Request timeout in milliseconds (default: 30000). */
43
+ timeoutMs?: number;
44
+ /** Cancellation signal — aborting rejects with DeviceFlowError("cancelled"). */
45
+ signal?: AbortSignal;
46
+ }
47
+ /**
48
+ * Requests a device/user code pair (RFC 8628 §3.1–3.2).
49
+ *
50
+ * @throws DeviceFlowError("cancelled") when the signal aborts;
51
+ * DeviceFlowError("transport") on a network failure; BasecampError on
52
+ * validation / non-2xx.
53
+ */
54
+ export declare function requestDeviceAuthorization(params: RequestDeviceAuthorizationParams): Promise<DeviceAuthorization>;
55
+ /**
56
+ * Parameters for {@link pollDeviceToken}.
57
+ */
58
+ export interface PollDeviceTokenParams {
59
+ /** The token_endpoint from discovery. */
60
+ tokenEndpoint: string;
61
+ /** The public client id. */
62
+ clientId: string;
63
+ /** The device_code from {@link requestDeviceAuthorization}. */
64
+ deviceCode: string;
65
+ /** Polling interval in seconds. */
66
+ interval: number;
67
+ /** Code lifetime in seconds (monotonic deadline). */
68
+ expiresIn: number;
69
+ /**
70
+ * Absolute monotonic deadline (ms, same clock as `clock`) anchoring the
71
+ * code's expiry at ISSUANCE. When set it overrides the `clock() + expiresIn`
72
+ * anchoring so time elapsed before this call is never handed back to the
73
+ * lifetime. Must be finite and no later than `expiresIn` seconds from now —
74
+ * a deadline can only shorten the validated lifetime, never extend it.
75
+ */
76
+ deadlineAtMs?: number;
77
+ /** Cancellation signal — aborting rejects with DeviceFlowError("cancelled"). */
78
+ signal?: AbortSignal;
79
+ /** Injectable monotonic clock (ms). Default performance.now(). */
80
+ clock?: MonotonicClock;
81
+ /** Custom fetch (testing). */
82
+ fetch?: typeof globalThis.fetch;
83
+ /** Per-request timeout in milliseconds (default: 30000). */
84
+ timeoutMs?: number;
85
+ /**
86
+ * Injectable sleep (testing). Receives the wait in ms and the cancellation
87
+ * signal; defaults to a real, abortable timer. Lets tests assert the interval
88
+ * schedule (slow_down, backoff) without real delays.
89
+ */
90
+ sleepFn?: (ms: number, signal?: AbortSignal) => Promise<void>;
91
+ }
92
+ /**
93
+ * Polls the token endpoint until the user approves, denies, or the codes expire
94
+ * (RFC 8628 §3.4–3.5). Handles authorization_pending, sustained slow_down (+5s),
95
+ * a monotonic expiry deadline, exponential backoff on connection timeouts, and
96
+ * cooperative cancellation.
97
+ */
98
+ export declare function pollDeviceToken(params: PollDeviceTokenParams): Promise<OAuthToken>;
99
+ /**
100
+ * Validates a Retry-After delta for the 429 poll contract (SPEC §16): a
101
+ * positive integral number of seconds. A representable delta beyond
102
+ * MAX_DEVICE_SECONDS (the shared 32-bit-ms timer bound) CLAMPS to the
103
+ * ceiling — the wait rule clips to the remaining code lifetime, honoring the
104
+ * throttle. Anything else — missing, an HTTP-date, fractional, non-positive,
105
+ * or unrepresentable (beyond 2^53) — returns 0 so the caller falls back to
106
+ * the current interval. Trimming is ASCII SP/HTAB only (RFC 9110
107
+ * OWS) — NOT String.prototype.trim(), whose Unicode whitespace (NBSP above
108
+ * all) would trim a malformed value into validity.
109
+ */
110
+ export declare function parseRetryAfterSeconds(header: string | null): number;
111
+ export declare function throwIfAborted(signal?: AbortSignal): void;
112
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/oauth/device.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAIzD,OAAO,EAAE,0BAA0B,EAAE,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAwC,MAAM,YAAY,CAAC;AAExG,yDAAyD;AACzD,eAAO,MAAM,sBAAsB,iDAAiD,CAAC;AAwDrF,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,cAC0C,CAAC;AAEtE;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK3E;AAcD;;GAEG;AACH,MAAM,WAAW,gCAAgC;IAC/C,wDAAwD;IACxD,2BAA2B,EAAE,MAAM,CAAC;IACpC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gCAAgC,GACvC,OAAO,CAAC,mBAAmB,CAAC,CA+H9B;AA+ED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,kEAAkE;IAClE,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8MxF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAoBpE;AAoQD,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAIzD"}