@knpkv/atlassian-common 0.4.0 → 1.1.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.
- package/CHANGELOG.md +23 -0
- package/README.md +4 -3
- package/dist/Brand.d.ts.map +1 -1
- package/dist/Brand.js +4 -2
- package/dist/Brand.js.map +1 -1
- package/dist/Hash.d.ts +4 -4
- package/dist/Hash.js +6 -6
- package/dist/Hash.js.map +1 -1
- package/dist/ast/Document.d.ts +2 -2
- package/dist/ast/Document.d.ts.map +1 -1
- package/dist/ast/Document.js +1 -1
- package/dist/ast/Document.js.map +1 -1
- package/dist/ast/MacroNode.d.ts +4 -4
- package/dist/ast/MacroNode.d.ts.map +1 -1
- package/dist/ast/MacroNode.js +8 -1
- package/dist/ast/MacroNode.js.map +1 -1
- package/dist/attachments.d.ts +42 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +51 -0
- package/dist/attachments.js.map +1 -0
- package/dist/auth/OAuthEndpoints.d.ts +6 -4
- package/dist/auth/OAuthEndpoints.d.ts.map +1 -1
- package/dist/auth/OAuthEndpoints.js +14 -7
- package/dist/auth/OAuthEndpoints.js.map +1 -1
- package/dist/auth/OAuthErrors.d.ts.map +1 -1
- package/dist/auth/OAuthErrors.js +4 -3
- package/dist/auth/OAuthErrors.js.map +1 -1
- package/dist/auth/OAuthOperations.d.ts +0 -20
- package/dist/auth/OAuthOperations.d.ts.map +1 -1
- package/dist/auth/OAuthOperations.js +3 -1
- package/dist/auth/OAuthOperations.js.map +1 -1
- package/dist/auth/uuid.d.ts +5 -3
- package/dist/auth/uuid.d.ts.map +1 -1
- package/dist/auth/uuid.js +7 -3
- package/dist/auth/uuid.js.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/bin.js.map +1 -1
- package/dist/config/AuthProfiles.js.map +1 -1
- package/dist/config/ProfileManager.d.ts +3 -20
- package/dist/config/ProfileManager.d.ts.map +1 -1
- package/dist/config/ProfileManager.js +2 -1
- package/dist/config/ProfileManager.js.map +1 -1
- package/dist/config/TokenStorage.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/serializers/MarkdownSerializer.d.ts.map +1 -1
- package/dist/serializers/MarkdownSerializer.js +9 -6
- package/dist/serializers/MarkdownSerializer.js.map +1 -1
- package/package.json +12 -8
- package/src/Brand.ts +4 -2
- package/src/Hash.ts +6 -6
- package/src/ast/Document.ts +1 -1
- package/src/ast/MacroNode.ts +8 -1
- package/src/attachments.ts +98 -0
- package/src/auth/OAuthEndpoints.ts +20 -11
- package/src/auth/OAuthErrors.ts +4 -3
- package/src/auth/OAuthOperations.ts +3 -1
- package/src/auth/uuid.ts +9 -3
- package/src/bin.ts +1 -1
- package/src/config/AuthProfiles.ts +1 -1
- package/src/config/ProfileManager.ts +21 -9
- package/src/config/TokenStorage.ts +1 -1
- package/src/index.ts +3 -0
- package/src/serializers/MarkdownSerializer.ts +22 -37
- package/test/AuthProfiles.test.ts +1 -1
- package/test/OAuthEndpoints.test.ts +34 -16
- package/test/OAuthOperations.test.ts +5 -1
- package/test/ProfileManager.test.ts +1 -1
- package/test/attachments.test.ts +75 -0
- package/test/fixtures/attachments/inline-attachment.svg +6 -0
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @knpkv/atlassian-common
|
|
2
2
|
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#114](https://github.com/knpkv/npm/pull/114) [`904d3d7`](https://github.com/knpkv/npm/commit/904d3d75948d94558484094cf225b5ea6585663e) Thanks [@konopkov](https://github.com/konopkov)! - Add Jira and Confluence attachment support.
|
|
8
|
+
|
|
9
|
+
- Add shared attachment rendering and placeholder replacement helpers.
|
|
10
|
+
- Support multipart attachment upload calls in Jira and Confluence API clients.
|
|
11
|
+
- Render Jira attachments as inline image previews or links with hidden attachment metadata.
|
|
12
|
+
- Resolve Confluence media attachments to visible Markdown previews while preserving native media ADF identity.
|
|
13
|
+
- Add explicit Jira and Confluence attachment upload commands with optional Markdown placeholder insertion.
|
|
14
|
+
|
|
15
|
+
## 1.0.0
|
|
16
|
+
|
|
17
|
+
### Major Changes
|
|
18
|
+
|
|
19
|
+
- [#109](https://github.com/knpkv/npm/pull/109) [`734f891`](https://github.com/knpkv/npm/commit/734f8911d930cedc8642d5e2bd9fa73c76a99054) Thanks [@konopkov](https://github.com/konopkov)! - BREAKING: PKCE and auth UUID helpers now use Effect's platform `Crypto` service.
|
|
20
|
+
|
|
21
|
+
`generateCodeVerifier()` now returns an `Effect` instead of a string, and
|
|
22
|
+
`computeCodeChallenge()` / `generateUUID()` now require a `Crypto.Crypto` service
|
|
23
|
+
in their Effect environment. Provide an appropriate platform layer such as
|
|
24
|
+
`@effect/platform-node/NodeCrypto.layer` at the runtime edge.
|
|
25
|
+
|
|
3
26
|
## 0.4.0
|
|
4
27
|
|
|
5
28
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -20,9 +20,10 @@ pnpm add @knpkv/atlassian-common
|
|
|
20
20
|
|
|
21
21
|
## OAuth2 + PKCE
|
|
22
22
|
|
|
23
|
-
Uses
|
|
23
|
+
Uses Effect's platform `Crypto` service. PKCE code verifier/challenge use `effect/Encoding` for base64url.
|
|
24
24
|
|
|
25
25
|
```typescript
|
|
26
|
+
import * as NodeCrypto from "@effect/platform-node/NodeCrypto"
|
|
26
27
|
import { Effect } from "effect"
|
|
27
28
|
import {
|
|
28
29
|
generateCodeVerifier,
|
|
@@ -34,7 +35,7 @@ import {
|
|
|
34
35
|
|
|
35
36
|
const program = Effect.gen(function* () {
|
|
36
37
|
// 1. Generate PKCE pair
|
|
37
|
-
const codeVerifier = generateCodeVerifier()
|
|
38
|
+
const codeVerifier = yield* generateCodeVerifier()
|
|
38
39
|
const codeChallenge = yield* computeCodeChallenge(codeVerifier)
|
|
39
40
|
|
|
40
41
|
// 2. Build authorization URL
|
|
@@ -56,7 +57,7 @@ const program = Effect.gen(function* () {
|
|
|
56
57
|
codeVerifier
|
|
57
58
|
})
|
|
58
59
|
// tokens.access_token, tokens.refresh_token, tokens.expires_in
|
|
59
|
-
})
|
|
60
|
+
}).pipe(Effect.provide(NodeCrypto.layer))
|
|
60
61
|
```
|
|
61
62
|
|
|
62
63
|
## Token And Profile Storage
|
package/dist/Brand.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../src/Brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,MAAM,CAAC,EACP,SAAS,MAAM;;;
|
|
1
|
+
{"version":3,"file":"Brand.d.ts","sourceRoot":"","sources":["../src/Brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,MAAM,CAAC,EACP,SAAS,MAAM;;;CAahB,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,yBAAyB,GAAI,CAAC,SAAS,MAAM,EAAE,MAAM,CAAC;;;CAYlE,CAAA;AAID;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;CAAsC,CAAA;AACzD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC;;;;GAIG;AACH,eAAO,MAAM,QAAQ;;;CAAoD,CAAA;AACzE,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C;;;;GAIG;AACH,eAAO,MAAM,QAAQ;;;CAAwD,CAAA;AAC7E,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAA;AAE3C;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;CAAsD,CAAA;AAC7E,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;CAAqD,CAAA;AAC7E,MAAM,MAAM,WAAW,GAAG,OAAO,WAAW,CAAC,IAAI,CAAA"}
|
package/dist/Brand.js
CHANGED
|
@@ -44,9 +44,10 @@ import * as Schema from "effect/Schema";
|
|
|
44
44
|
export const makeBrandedString = (name, pattern) => {
|
|
45
45
|
const brand = Brand.make((s) => pattern.test(s) || `Invalid ${name}: ${s} does not match ${pattern}`);
|
|
46
46
|
const schema = Schema.String.check(Schema.isPattern(pattern)).pipe(Schema.brand(name));
|
|
47
|
+
const Type = undefined;
|
|
47
48
|
return Object.assign(brand, {
|
|
48
49
|
schema,
|
|
49
|
-
Type
|
|
50
|
+
Type
|
|
50
51
|
});
|
|
51
52
|
};
|
|
52
53
|
/**
|
|
@@ -68,9 +69,10 @@ export const makeBrandedString = (name, pattern) => {
|
|
|
68
69
|
export const makeBrandedNonEmptyString = (name) => {
|
|
69
70
|
const brand = Brand.make((s) => s.length > 0 || `${name} cannot be empty`);
|
|
70
71
|
const schema = Schema.NonEmptyString.pipe(Schema.brand(name));
|
|
72
|
+
const Type = undefined;
|
|
71
73
|
return Object.assign(brand, {
|
|
72
74
|
schema,
|
|
73
|
-
Type
|
|
75
|
+
Type
|
|
74
76
|
});
|
|
75
77
|
};
|
|
76
78
|
// Common branded types for Atlassian products
|
package/dist/Brand.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Brand.js","sourceRoot":"","sources":["../src/Brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAO,EACP,OAAe,EACf,EAAE;IAGF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAc,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;IAElH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"Brand.js","sourceRoot":"","sources":["../src/Brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAO,EACP,OAAe,EACf,EAAE;IAGF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAc,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,KAAK,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAA;IAElH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACtF,MAAM,IAAI,GAAgB,SAAU,CAAA;IAEpC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,MAAM;QACN,IAAI;KACL,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAmB,IAAO,EAAE,EAAE;IAGrE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAc,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,kBAAkB,CAAC,CAAA;IAEvF,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC7D,MAAM,IAAI,GAAgB,SAAU,CAAA;IAEpC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,MAAM;QACN,IAAI;KACL,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,8CAA8C;AAE9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAA;AAGzD;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;AAGzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAA;AAG7E;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA;AAG7E;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAA"}
|
package/dist/Hash.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* **Mental model**
|
|
5
5
|
*
|
|
6
|
-
* - **Service-backed
|
|
7
|
-
* the `Crypto` service from Effect context, so applications provide the
|
|
6
|
+
* - **Service-backed cryptography**: {@link hashContent} and {@link hashBuffer}
|
|
7
|
+
* use the `Crypto` service from Effect context, so applications provide the
|
|
8
8
|
* platform implementation at the runtime edge.
|
|
9
9
|
*
|
|
10
10
|
* **Common tasks**
|
|
@@ -28,8 +28,8 @@ import { ContentHash } from "./Brand.js";
|
|
|
28
28
|
* import * as Effect from "effect/Effect"
|
|
29
29
|
* import { hashContent } from "@knpkv/atlassian-common"
|
|
30
30
|
*
|
|
31
|
-
* declare const
|
|
32
|
-
* const hash = Effect.runSync(hashContent("hello world").pipe(Effect.provideService(Crypto.Crypto,
|
|
31
|
+
* declare const cryptoService: Crypto.Crypto
|
|
32
|
+
* const hash = Effect.runSync(hashContent("hello world").pipe(Effect.provideService(Crypto.Crypto, cryptoService)))
|
|
33
33
|
* // => "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
|
|
34
34
|
* ```
|
|
35
35
|
*
|
package/dist/Hash.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* **Mental model**
|
|
5
5
|
*
|
|
6
|
-
* - **Service-backed
|
|
7
|
-
* the `Crypto` service from Effect context, so applications provide the
|
|
6
|
+
* - **Service-backed cryptography**: {@link hashContent} and {@link hashBuffer}
|
|
7
|
+
* use the `Crypto` service from Effect context, so applications provide the
|
|
8
8
|
* platform implementation at the runtime edge.
|
|
9
9
|
*
|
|
10
10
|
* **Common tasks**
|
|
@@ -21,8 +21,8 @@ import * as Encoding from "effect/Encoding";
|
|
|
21
21
|
import { ContentHash } from "./Brand.js";
|
|
22
22
|
const textEncoder = new TextEncoder();
|
|
23
23
|
const digestSha256 = (bytes) => Effect.gen(function* () {
|
|
24
|
-
const
|
|
25
|
-
const digest = yield*
|
|
24
|
+
const cryptoService = yield* Crypto.Crypto;
|
|
25
|
+
const digest = yield* cryptoService.digest("SHA-256", bytes);
|
|
26
26
|
return ContentHash(Encoding.encodeHex(digest));
|
|
27
27
|
});
|
|
28
28
|
/**
|
|
@@ -34,8 +34,8 @@ const digestSha256 = (bytes) => Effect.gen(function* () {
|
|
|
34
34
|
* import * as Effect from "effect/Effect"
|
|
35
35
|
* import { hashContent } from "@knpkv/atlassian-common"
|
|
36
36
|
*
|
|
37
|
-
* declare const
|
|
38
|
-
* const hash = Effect.runSync(hashContent("hello world").pipe(Effect.provideService(Crypto.Crypto,
|
|
37
|
+
* declare const cryptoService: Crypto.Crypto
|
|
38
|
+
* const hash = Effect.runSync(hashContent("hello world").pipe(Effect.provideService(Crypto.Crypto, cryptoService)))
|
|
39
39
|
* // => "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
|
|
40
40
|
* ```
|
|
41
41
|
*
|
package/dist/Hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hash.js","sourceRoot":"","sources":["../src/Hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;AAErC,MAAM,YAAY,GAAG,CACnB,KAAiB,EACuD,EAAE,CAC1E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,
|
|
1
|
+
{"version":3,"file":"Hash.js","sourceRoot":"","sources":["../src/Hash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;AAErC,MAAM,YAAY,GAAG,CACnB,KAAiB,EACuD,EAAE,CAC1E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IAC5D,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,CAAC,CAAC,CAAA;AAEJ;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAA0E,EAAE,CACrH,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,MAAkB,EACsD,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;AAEjG;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAc,EAAE,CAAc,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAA"}
|
package/dist/ast/Document.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export declare const DocumentNode: Schema.Union<readonly [Schema.Union<readonly
|
|
|
54
54
|
}>, typeof import("./BlockNode.js").UnsupportedBlock]>, Schema.Union<readonly [Schema.Struct<{
|
|
55
55
|
readonly _tag: Schema.Literal<"InfoPanel">;
|
|
56
56
|
readonly version: Schema.withConstructorDefault<Schema.Int>;
|
|
57
|
-
readonly panelType: Schema.Literals<readonly
|
|
57
|
+
readonly panelType: Schema.Literals<readonly ("info" | "warning" | "note" | "tip" | "error" | "panel")[]>;
|
|
58
58
|
readonly title: Schema.optional<Schema.String>;
|
|
59
59
|
readonly children: Schema.$Array<Schema.Union<readonly [typeof import("./BlockNode.js").Heading, typeof import("./BlockNode.js").Paragraph, typeof import("./BlockNode.js").CodeBlock, typeof import("./BlockNode.js").ThematicBreak, typeof import("./BlockNode.js").Image, typeof import("./BlockNode.js").Table, typeof import("./BlockNode.js").UnsupportedBlock]>>;
|
|
60
60
|
readonly rawSource: Schema.optional<Schema.String>;
|
|
@@ -148,7 +148,7 @@ export declare const Document: Schema.Struct<{
|
|
|
148
148
|
}>, typeof import("./BlockNode.js").UnsupportedBlock]>, Schema.Union<readonly [Schema.Struct<{
|
|
149
149
|
readonly _tag: Schema.Literal<"InfoPanel">;
|
|
150
150
|
readonly version: Schema.withConstructorDefault<Schema.Int>;
|
|
151
|
-
readonly panelType: Schema.Literals<readonly
|
|
151
|
+
readonly panelType: Schema.Literals<readonly ("info" | "warning" | "note" | "tip" | "error" | "panel")[]>;
|
|
152
152
|
readonly title: Schema.optional<Schema.String>;
|
|
153
153
|
readonly children: Schema.$Array<Schema.Union<readonly [typeof import("./BlockNode.js").Heading, typeof import("./BlockNode.js").Paragraph, typeof import("./BlockNode.js").CodeBlock, typeof import("./BlockNode.js").ThematicBreak, typeof import("./BlockNode.js").Image, typeof import("./BlockNode.js").Table, typeof import("./BlockNode.js").UnsupportedBlock]>>;
|
|
154
154
|
readonly rawSource: Schema.optional<Schema.String>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Document.d.ts","sourceRoot":"","sources":["../../src/ast/Document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAa,KAAK,SAAS,IAAI,aAAa,EAA4B,MAAM,gBAAgB,CAAA;AACrG,OAAO,EAAa,KAAK,SAAS,IAAI,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3E;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAuC,CAAA;AAEhE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,aAAa,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAInB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE1D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,aAAa,CAAC,YAAY,CAAC,EACrC,YAAY,MAAM,KACjB,QAID,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,
|
|
1
|
+
{"version":3,"file":"Document.d.ts","sourceRoot":"","sources":["../../src/ast/Document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAa,KAAK,SAAS,IAAI,aAAa,EAA4B,MAAM,gBAAgB,CAAA;AACrG,OAAO,EAAa,KAAK,SAAS,IAAI,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3E;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAuC,CAAA;AAEhE;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,aAAa,CAAA;AAExD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAInB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE1D;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GACvB,UAAU,aAAa,CAAC,YAAY,CAAC,EACrC,YAAY,MAAM,KACjB,QAID,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAIN,CAAA"}
|
package/dist/ast/Document.js
CHANGED
|
@@ -76,5 +76,5 @@ export const makeDocument = (children, rawSource) => ({
|
|
|
76
76
|
export const isDocument = (value) => typeof value === "object" &&
|
|
77
77
|
value !== null &&
|
|
78
78
|
"children" in value &&
|
|
79
|
-
Array.isArray(value
|
|
79
|
+
Array.isArray(Reflect.get(value, "children"));
|
|
80
80
|
//# sourceMappingURL=Document.js.map
|
package/dist/ast/Document.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Document.js","sourceRoot":"","sources":["../../src/ast/Document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAmC,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACrG,OAAO,EAAE,SAAS,EAAmC,MAAM,gBAAgB,CAAA;AAE3E;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;AAShE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;IACpC,SAAS,EAAE,SAAS;CACrB,CAAC,CAAA;AASF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,QAAqC,EACrC,SAAkB,EACR,EAAE,CAAC,CAAC;IACd,OAAO,EAAE,CAAC;IACV,QAAQ;IACR,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAClD,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAqB,EAAE,CAC9D,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,UAAU,IAAI,KAAK;IACnB,KAAK,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"Document.js","sourceRoot":"","sources":["../../src/ast/Document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAmC,SAAS,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACrG,OAAO,EAAE,SAAS,EAAmC,MAAM,gBAAgB,CAAA;AAE3E;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;AAShE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;IACpC,SAAS,EAAE,SAAS;CACrB,CAAC,CAAA;AASF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,QAAqC,EACrC,SAAkB,EACR,EAAE,CAAC,CAAC;IACd,OAAO,EAAE,CAAC;IACV,QAAQ;IACR,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CAClD,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAc,EAAqB,EAAE,CAC9D,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,UAAU,IAAI,KAAK;IACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAA"}
|
package/dist/ast/MacroNode.d.ts
CHANGED
|
@@ -4,13 +4,13 @@ import * as Schema from "effect/Schema";
|
|
|
4
4
|
*
|
|
5
5
|
* @category MacroNode
|
|
6
6
|
*/
|
|
7
|
-
export declare const PanelTypes:
|
|
7
|
+
export declare const PanelTypes: ReadonlyArray<"info" | "warning" | "note" | "tip" | "error" | "panel">;
|
|
8
8
|
/**
|
|
9
9
|
* Panel type for info/warning/note macros.
|
|
10
10
|
*
|
|
11
11
|
* @category MacroNode
|
|
12
12
|
*/
|
|
13
|
-
export declare const PanelType: Schema.Literals<readonly
|
|
13
|
+
export declare const PanelType: Schema.Literals<readonly ("info" | "warning" | "note" | "tip" | "error" | "panel")[]>;
|
|
14
14
|
/**
|
|
15
15
|
* Type for panel type.
|
|
16
16
|
*
|
|
@@ -37,7 +37,7 @@ export type PanelType = Schema.Schema.Type<typeof PanelType>;
|
|
|
37
37
|
export declare const InfoPanel: Schema.Struct<{
|
|
38
38
|
readonly _tag: Schema.Literal<"InfoPanel">;
|
|
39
39
|
readonly version: Schema.withConstructorDefault<Schema.Int>;
|
|
40
|
-
readonly panelType: Schema.Literals<readonly
|
|
40
|
+
readonly panelType: Schema.Literals<readonly ("info" | "warning" | "note" | "tip" | "error" | "panel")[]>;
|
|
41
41
|
readonly title: Schema.optional<Schema.String>;
|
|
42
42
|
readonly children: Schema.$Array<Schema.Union<readonly [typeof import("./BlockNode.js").Heading, typeof import("./BlockNode.js").Paragraph, typeof import("./BlockNode.js").CodeBlock, typeof import("./BlockNode.js").ThematicBreak, typeof import("./BlockNode.js").Image, typeof import("./BlockNode.js").Table, typeof import("./BlockNode.js").UnsupportedBlock]>>;
|
|
43
43
|
readonly rawSource: Schema.optional<Schema.String>;
|
|
@@ -132,7 +132,7 @@ export type StatusMacro = Schema.Schema.Type<typeof StatusMacro>;
|
|
|
132
132
|
export declare const MacroNode: Schema.Union<readonly [Schema.Struct<{
|
|
133
133
|
readonly _tag: Schema.Literal<"InfoPanel">;
|
|
134
134
|
readonly version: Schema.withConstructorDefault<Schema.Int>;
|
|
135
|
-
readonly panelType: Schema.Literals<readonly
|
|
135
|
+
readonly panelType: Schema.Literals<readonly ("info" | "warning" | "note" | "tip" | "error" | "panel")[]>;
|
|
136
136
|
readonly title: Schema.optional<Schema.String>;
|
|
137
137
|
readonly children: Schema.$Array<Schema.Union<readonly [typeof import("./BlockNode.js").Heading, typeof import("./BlockNode.js").Paragraph, typeof import("./BlockNode.js").CodeBlock, typeof import("./BlockNode.js").ThematicBreak, typeof import("./BlockNode.js").Image, typeof import("./BlockNode.js").Table, typeof import("./BlockNode.js").UnsupportedBlock]>>;
|
|
138
138
|
readonly rawSource: Schema.optional<Schema.String>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MacroNode.d.ts","sourceRoot":"","sources":["../../src/ast/MacroNode.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC;;;;GAIG;AACH,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"MacroNode.d.ts","sourceRoot":"","sources":["../../src/ast/MacroNode.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAO7F,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,uFAA8B,CAAA;AAEpD;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAA;AAE5D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS;;;;;;;EAOpB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAA;AAE5D;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;EAMtB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAA;AAEhE;;;;GAIG;AACH,eAAO,MAAM,QAAQ;;;;;;EAMnB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;EAUpB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,SAAS,CAAC,CAAA;AAE5D;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;EAMtB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAA;AAEhE;;;;GAIG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMpB,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAA"}
|
package/dist/ast/MacroNode.js
CHANGED
|
@@ -18,7 +18,14 @@ import { RawSource, SchemaVersion, SimpleBlockNode } from "./BlockNode.js";
|
|
|
18
18
|
*
|
|
19
19
|
* @category MacroNode
|
|
20
20
|
*/
|
|
21
|
-
export const PanelTypes = [
|
|
21
|
+
export const PanelTypes = [
|
|
22
|
+
"info",
|
|
23
|
+
"warning",
|
|
24
|
+
"note",
|
|
25
|
+
"tip",
|
|
26
|
+
"error",
|
|
27
|
+
"panel"
|
|
28
|
+
];
|
|
22
29
|
/**
|
|
23
30
|
* Panel type for info/warning/note macros.
|
|
24
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MacroNode.js","sourceRoot":"","sources":["../../src/ast/MacroNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE1E;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"MacroNode.js","sourceRoot":"","sources":["../../src/ast/MacroNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared attachment reference helpers for Atlassian Markdown surfaces.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
export interface AttachmentPreviewInput {
|
|
7
|
+
readonly id?: string | undefined;
|
|
8
|
+
readonly filename: string;
|
|
9
|
+
readonly url?: string | undefined;
|
|
10
|
+
readonly mediaType?: string | null | undefined;
|
|
11
|
+
readonly mimeType?: string | null | undefined;
|
|
12
|
+
readonly size?: number | null | undefined;
|
|
13
|
+
}
|
|
14
|
+
export interface AttachmentReferenceInput {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly filename: string;
|
|
17
|
+
readonly url: string;
|
|
18
|
+
readonly mediaType: string | null;
|
|
19
|
+
readonly size: number | null;
|
|
20
|
+
}
|
|
21
|
+
export interface AttachmentPlaceholderReplacement {
|
|
22
|
+
readonly content: string;
|
|
23
|
+
readonly replacements: number;
|
|
24
|
+
}
|
|
25
|
+
export interface AttachmentPlaceholderMatch {
|
|
26
|
+
readonly label: string;
|
|
27
|
+
readonly isImage: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns true when an attachment should render as a Markdown image preview.
|
|
31
|
+
* SVG is previewable even when the remote API reports a generic content type.
|
|
32
|
+
*/
|
|
33
|
+
export declare const isPreviewableAttachment: (attachment: AttachmentPreviewInput) => boolean;
|
|
34
|
+
export declare const normalizeAttachmentMediaType: (mediaType: string | null | undefined, mimeType?: string | null | undefined) => string | null;
|
|
35
|
+
export declare const renderAttachmentMarkdown: (attachment: AttachmentReferenceInput, options?: {
|
|
36
|
+
readonly label?: string | null | undefined;
|
|
37
|
+
readonly metadata?: string | null | undefined;
|
|
38
|
+
}) => string;
|
|
39
|
+
export declare const replaceAttachmentPlaceholder: (content: string, placeholderPath: string, renderedAttachment: string | ((match: AttachmentPlaceholderMatch) => string), options?: {
|
|
40
|
+
readonly replaceAll?: boolean | undefined;
|
|
41
|
+
}) => AttachmentPlaceholderReplacement;
|
|
42
|
+
//# sourceMappingURL=attachments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAC1C;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAID;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,YAAY,sBAAsB,KAAG,OAG5E,CAAA;AAED,eAAO,MAAM,4BAA4B,GACvC,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,EACpC,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,KACnC,MAAM,GAAG,IAGX,CAAA;AAED,eAAO,MAAM,wBAAwB,GACnC,YAAY,wBAAwB,EACpC,UAAU;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE,KACtG,MAOF,CAAA;AAED,eAAO,MAAM,4BAA4B,GACvC,SAAS,MAAM,EACf,iBAAiB,MAAM,EACvB,oBAAoB,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,0BAA0B,KAAK,MAAM,CAAC,EAC5E,UAAU;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,KACtD,gCAcF,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared attachment reference helpers for Atlassian Markdown surfaces.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
const IMAGE_EXTENSION_RE = /\.(avif|bmp|gif|jpe?g|png|svg|webp)$/i;
|
|
7
|
+
/**
|
|
8
|
+
* Returns true when an attachment should render as a Markdown image preview.
|
|
9
|
+
* SVG is previewable even when the remote API reports a generic content type.
|
|
10
|
+
*/
|
|
11
|
+
export const isPreviewableAttachment = (attachment) => {
|
|
12
|
+
const type = attachment.mediaType ?? attachment.mimeType ?? "";
|
|
13
|
+
return type.toLowerCase().startsWith("image/") || IMAGE_EXTENSION_RE.test(attachment.filename);
|
|
14
|
+
};
|
|
15
|
+
export const normalizeAttachmentMediaType = (mediaType, mimeType) => {
|
|
16
|
+
const value = mediaType ?? mimeType;
|
|
17
|
+
return value && value.trim().length > 0 ? value : null;
|
|
18
|
+
};
|
|
19
|
+
export const renderAttachmentMarkdown = (attachment, options) => {
|
|
20
|
+
const label = escapeMarkdownLabel(options?.label?.trim() || attachment.filename);
|
|
21
|
+
const destination = safeMarkdownDestination(attachment.url);
|
|
22
|
+
const reference = isPreviewableAttachment(attachment)
|
|
23
|
+
? ``
|
|
24
|
+
: `[${label}](${destination})`;
|
|
25
|
+
return options?.metadata ? `${options.metadata}\n${reference}` : reference;
|
|
26
|
+
};
|
|
27
|
+
export const replaceAttachmentPlaceholder = (content, placeholderPath, renderedAttachment, options) => {
|
|
28
|
+
const escapedPath = escapeRegExp(placeholderPath);
|
|
29
|
+
const placeholder = new RegExp(`!?\\[([^\\]]*)\\]\\(${escapedPath}\\)`, "g");
|
|
30
|
+
let replacements = 0;
|
|
31
|
+
const replaced = content.replace(placeholder, (match, label) => {
|
|
32
|
+
replacements++;
|
|
33
|
+
return typeof renderedAttachment === "string"
|
|
34
|
+
? renderedAttachment
|
|
35
|
+
: renderedAttachment({ isImage: match.startsWith("!"), label });
|
|
36
|
+
});
|
|
37
|
+
if (!options?.replaceAll && replacements > 1) {
|
|
38
|
+
return { content, replacements };
|
|
39
|
+
}
|
|
40
|
+
return { content: replaced, replacements };
|
|
41
|
+
};
|
|
42
|
+
const escapeMarkdownLabel = (value) => value
|
|
43
|
+
.replace(/\\/g, "\\\\")
|
|
44
|
+
.replace(/\n+/g, " ")
|
|
45
|
+
.replace(/\[/g, "\\[")
|
|
46
|
+
.replace(/]/g, "\\]");
|
|
47
|
+
const safeMarkdownDestination = (value) => /[\s()<>]/.test(value)
|
|
48
|
+
? `<${value.replace(/\n/g, "%0A").replace(/</g, "%3C").replace(/>/g, "%3E")}>`
|
|
49
|
+
: value;
|
|
50
|
+
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
51
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../src/attachments.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,9 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
|
+
import * as Crypto from "effect/Crypto";
|
|
15
16
|
import * as Effect from "effect/Effect";
|
|
17
|
+
import type * as PlatformError from "effect/PlatformError";
|
|
16
18
|
/**
|
|
17
19
|
* OAuth2 authorization endpoint.
|
|
18
20
|
*
|
|
@@ -80,16 +82,16 @@ export interface BuildAuthUrlOptions {
|
|
|
80
82
|
export declare const buildAuthUrl: (options: BuildAuthUrlOptions) => string;
|
|
81
83
|
/**
|
|
82
84
|
* Generate a cryptographically random PKCE code verifier (RFC 7636).
|
|
83
|
-
* Uses
|
|
85
|
+
* Uses Effect's platform Crypto service.
|
|
84
86
|
*
|
|
85
87
|
* @category PKCE
|
|
86
88
|
*/
|
|
87
|
-
export declare const generateCodeVerifier: () => string
|
|
89
|
+
export declare const generateCodeVerifier: () => Effect.Effect<string, PlatformError.PlatformError, Crypto.Crypto>;
|
|
88
90
|
/**
|
|
89
91
|
* Compute S256 code challenge from a code verifier (RFC 7636).
|
|
90
|
-
* Uses
|
|
92
|
+
* Uses Effect's platform Crypto service.
|
|
91
93
|
*
|
|
92
94
|
* @category PKCE
|
|
93
95
|
*/
|
|
94
|
-
export declare const computeCodeChallenge: (verifier: string) => Effect.Effect<string>;
|
|
96
|
+
export declare const computeCodeChallenge: (verifier: string) => Effect.Effect<string, PlatformError.PlatformError, Crypto.Crypto>;
|
|
95
97
|
//# sourceMappingURL=OAuthEndpoints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthEndpoints.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthEndpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"OAuthEndpoints.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthEndpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAE1D;;;;GAIG;AACH,eAAO,MAAM,QAAQ,yCAAyC,CAAA;AAE9D;;;;GAIG;AACH,eAAO,MAAM,SAAS,2CAA2C,CAAA;AAEjE;;;;GAIG;AACH,eAAO,MAAM,UAAU,4CAA4C,CAAA;AAEnE;;;;GAIG;AACH,eAAO,MAAM,aAAa,+DAA+D,CAAA;AAEzF;;;;GAIG;AACH,eAAO,MAAM,MAAM,iCAAiC,CAAA;AAEpD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,UAQ7B,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,UAQvB,CAAA;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACtC,qDAAqD;IACrD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC5C;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,mBAAmB,KAAG,MAe3D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,QAAO,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAKpG,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAK/D,CAAA"}
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module
|
|
14
14
|
*/
|
|
15
|
+
import * as Crypto from "effect/Crypto";
|
|
15
16
|
import * as Effect from "effect/Effect";
|
|
16
17
|
import * as Encoding from "effect/Encoding";
|
|
17
18
|
/**
|
|
@@ -53,6 +54,8 @@ export const CONFLUENCE_SCOPES = [
|
|
|
53
54
|
"read:page:confluence",
|
|
54
55
|
"write:page:confluence",
|
|
55
56
|
"delete:page:confluence",
|
|
57
|
+
"read:attachment:confluence",
|
|
58
|
+
"write:attachment:confluence",
|
|
56
59
|
"read:me",
|
|
57
60
|
"offline_access"
|
|
58
61
|
];
|
|
@@ -93,20 +96,24 @@ export const buildAuthUrl = (options) => {
|
|
|
93
96
|
};
|
|
94
97
|
/**
|
|
95
98
|
* Generate a cryptographically random PKCE code verifier (RFC 7636).
|
|
96
|
-
* Uses
|
|
99
|
+
* Uses Effect's platform Crypto service.
|
|
97
100
|
*
|
|
98
101
|
* @category PKCE
|
|
99
102
|
*/
|
|
100
|
-
export const generateCodeVerifier = () => {
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
+
export const generateCodeVerifier = () => Effect.gen(function* () {
|
|
104
|
+
const cryptoService = yield* Crypto.Crypto;
|
|
105
|
+
const bytes = yield* cryptoService.randomBytes(32);
|
|
103
106
|
return Encoding.encodeBase64Url(bytes);
|
|
104
|
-
};
|
|
107
|
+
});
|
|
105
108
|
/**
|
|
106
109
|
* Compute S256 code challenge from a code verifier (RFC 7636).
|
|
107
|
-
* Uses
|
|
110
|
+
* Uses Effect's platform Crypto service.
|
|
108
111
|
*
|
|
109
112
|
* @category PKCE
|
|
110
113
|
*/
|
|
111
|
-
export const computeCodeChallenge = (verifier) => Effect.
|
|
114
|
+
export const computeCodeChallenge = (verifier) => Effect.gen(function* () {
|
|
115
|
+
const cryptoService = yield* Crypto.Crypto;
|
|
116
|
+
const hash = yield* cryptoService.digest("SHA-256", new TextEncoder().encode(verifier));
|
|
117
|
+
return Encoding.encodeBase64Url(hash);
|
|
118
|
+
});
|
|
112
119
|
//# sourceMappingURL=OAuthEndpoints.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthEndpoints.js","sourceRoot":"","sources":["../../src/auth/OAuthEndpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"OAuthEndpoints.js","sourceRoot":"","sources":["../../src/auth/OAuthEndpoints.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAG3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,sCAAsC,CAAA;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,wCAAwC,CAAA;AAEjE;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,yCAAyC,CAAA;AAEnE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,4DAA4D,CAAA;AAEzF;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,8BAA8B,CAAA;AAEpD;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,sBAAsB;IACtB,uBAAuB;IACvB,wBAAwB;IACxB,4BAA4B;IAC5B,6BAA6B;IAC7B,SAAS;IACT,gBAAgB;CACjB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,gBAAgB;IAChB,iBAAiB;IACjB,gBAAgB;IAChB,qBAAqB;IACrB,2BAA2B;IAC3B,SAAS;IACT,gBAAgB;CACjB,CAAA;AAoBD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAA4B,EAAU,EAAE;IACnE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,QAAQ,EAAE,mBAAmB;QAC7B,SAAS,EAAE,OAAO,CAAC,QAAQ;QAC3B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,YAAY,EAAE,oBAAoB,OAAO,CAAC,IAAI,WAAW;QACzD,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,MAAM;QACrB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAA;IACF,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;QACnD,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAA;AAC3C,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAsE,EAAE,CAC1G,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IAClD,OAAO,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEJ;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAAgB,EACmD,EAAE,CACrE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvF,OAAO,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthErrors.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthErrors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OAuthErrors.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthErrors.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAA;;;;AAE9G;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,SAAQ,gBAA+B;IAC7D,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAQ7B;CACF;;;;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,gBAAiB,SAAQ,sBAAqC;IACzE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAG7B;CACF;;;;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,6BAA4C;IACvF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB,CAAC;IACA,IAAa,OAAO,IAAI,MAAM,CAG7B;CACF"}
|
package/dist/auth/OAuthErrors.js
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
* @module
|
|
17
17
|
*/
|
|
18
18
|
import * as Data from "effect/Data";
|
|
19
|
+
import * as Predicate from "effect/Predicate";
|
|
19
20
|
/**
|
|
20
21
|
* Error during OAuth2 flow.
|
|
21
22
|
*
|
|
@@ -37,12 +38,12 @@ import * as Data from "effect/Data";
|
|
|
37
38
|
*/
|
|
38
39
|
export class OAuthError extends Data.TaggedError("OAuthError") {
|
|
39
40
|
get message() {
|
|
40
|
-
if (this.cause instanceof Error) {
|
|
41
|
-
return `OAuth ${this.step} failed: ${this.cause.message}`;
|
|
42
|
-
}
|
|
43
41
|
if (typeof this.cause === "string") {
|
|
44
42
|
return `OAuth ${this.step} failed: ${this.cause}`;
|
|
45
43
|
}
|
|
44
|
+
if (Predicate.hasProperty(this.cause, "message")) {
|
|
45
|
+
return `OAuth ${this.step} failed: ${String(this.cause.message)}`;
|
|
46
|
+
}
|
|
46
47
|
return `OAuth ${this.step} failed`;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthErrors.js","sourceRoot":"","sources":["../../src/auth/OAuthErrors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"OAuthErrors.js","sourceRoot":"","sources":["../../src/auth/OAuthErrors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAS7C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,UAAW,SAAQ,IAAI,CAAC,WAAW,CAAC,YAAY,CAG3D;IACA,IAAa,OAAO;QAClB,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,SAAS,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,KAAK,EAAE,CAAA;QACnD,CAAC;QACD,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YACjD,OAAO,SAAS,IAAI,CAAC,IAAI,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAA;QACnE,CAAC;QACD,OAAO,SAAS,IAAI,CAAC,IAAI,SAAS,CAAA;IACpC,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,gBAAiB,SAAQ,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAEvE;IACA,IAAa,OAAO;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACrD,OAAO,gBAAgB,QAAQ,kCAAkC,CAAA;IACnE,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAErF;IACA,IAAa,OAAO;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAA;QACjF,OAAO,6BAA6B,QAAQ,SAAS,CAAA;IACvD,CAAC;CACF"}
|
|
@@ -1,23 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core OAuth2 operations against Atlassian's token and resource endpoints.
|
|
3
|
-
*
|
|
4
|
-
* **Mental model**
|
|
5
|
-
*
|
|
6
|
-
* - **Effect-native HTTP**: Every operation takes an `HttpClient` from the Effect
|
|
7
|
-
* context and returns `Effect<A, OAuthError, HttpClient>`. Callers provide the
|
|
8
|
-
* client via `Layer.succeed`.
|
|
9
|
-
* - **Schema-validated responses**: Token and user payloads are decoded through
|
|
10
|
-
* Effect Schema before returning, catching API contract drift at runtime.
|
|
11
|
-
*
|
|
12
|
-
* **Common tasks**
|
|
13
|
-
*
|
|
14
|
-
* - Exchange auth code: {@link exchangeCodeForTokens}
|
|
15
|
-
* - List user sites: {@link getAccessibleResources}
|
|
16
|
-
* - Refresh expired token: {@link refreshToken}
|
|
17
|
-
* - Build storable token: {@link buildOAuthToken}
|
|
18
|
-
*
|
|
19
|
-
* @module
|
|
20
|
-
*/
|
|
21
1
|
import * as Effect from "effect/Effect";
|
|
22
2
|
import { HttpClient } from "effect/unstable/http";
|
|
23
3
|
import { type OAuthConfig, type OAuthToken } from "../config/OAuthSchemas.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OAuthOperations.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthOperations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OAuthOperations.d.ts","sourceRoot":"","sources":["../../src/auth/OAuthOperations.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAqB,MAAM,sBAAsB,CAAA;AACpE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE7E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,aAAa,EAElB,KAAK,QAAQ,EAEd,MAAM,2BAA2B,CAAA;AAElC;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3C;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,QAAQ,WAAW,EACnB,SAAS,mBAAmB,KAC3B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,CA+B9D,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,aAAa,MAAM,KAClB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,CAuBlF,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,aAAa,MAAM,KAClB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,CAuBzD,CAAA;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GACvB,OAAO,UAAU,EACjB,QAAQ,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,CA0C1D,CAAA;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACtB,OAAO,UAAU,EACjB,QAAQ,WAAW,KAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,CAyBpD,CAAA;AAEJ;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAC1B,eAAe,aAAa,EAC5B,MAAM,kBAAkB,EACxB,MAAM,QAAQ,KACb,UAYD,CAAA"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @module
|
|
20
20
|
*/
|
|
21
|
+
import * as Clock from "effect/Clock";
|
|
21
22
|
import * as Effect from "effect/Effect";
|
|
22
23
|
import * as Schema from "effect/Schema";
|
|
23
24
|
import { HttpClient, HttpClientRequest } from "effect/unstable/http";
|
|
@@ -112,11 +113,12 @@ export const refreshToken = (token, config) => Effect.gen(function* () {
|
|
|
112
113
|
}
|
|
113
114
|
const body = yield* response.json.pipe(Effect.mapError((cause) => new OAuthError({ step: "refresh", cause })));
|
|
114
115
|
const tokenResponse = yield* Schema.decodeUnknownEffect(TokenResponseSchema)(body).pipe(Effect.mapError((cause) => new OAuthError({ step: "refresh", cause })));
|
|
116
|
+
const nowMs = yield* Clock.currentTimeMillis;
|
|
115
117
|
return {
|
|
116
118
|
...token,
|
|
117
119
|
access_token: tokenResponse.access_token,
|
|
118
120
|
refresh_token: tokenResponse.refresh_token,
|
|
119
|
-
expires_at:
|
|
121
|
+
expires_at: nowMs + tokenResponse.expires_in * 1000,
|
|
120
122
|
scope: tokenResponse.scope
|
|
121
123
|
};
|
|
122
124
|
});
|